technician.vue 5.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236
  1. <!-- <template>
  2. <nav-bar title="填写资料"></nav-bar>
  3. <view style="margin-top: 30rpx; padding: 0 40rpx">
  4. <u-form :model="form" ref="uForm" :error-type="errorType">
  5. <template v-for="(item, index) in listData">
  6. <u-form-item
  7. :key="index"
  8. v-if="item.type === 'input'"
  9. :label="item.label"
  10. :required="item.required"
  11. :label-width="auto"
  12. :prop="item.required ? item.prop : ''"
  13. >
  14. <u-input
  15. v-model="form[item.key]"
  16. :disabled="item.disabled"
  17. :placeholder="`请输入${item.label}`"
  18. />
  19. </u-form-item>
  20. <u-form-item
  21. :key="index"
  22. v-else-if="item.type === 'radio'"
  23. :label="item.label"
  24. :required="item.required"
  25. :label-width="auto"
  26. :prop="item.required ? item.prop : ''"
  27. >
  28. <u-radio-group v-model="form[item.key]">
  29. <u-radio
  30. v-for="(item1, i) in backDictArr(item)"
  31. :key="i"
  32. :name="item1.value"
  33. :disabled="item.disabled"
  34. >
  35. {{ item1.label }}
  36. </u-radio>
  37. </u-radio-group>
  38. </u-form-item>
  39. <u-form-item
  40. :key="index"
  41. v-else-if="item.type === 'select'"
  42. :label="item.label"
  43. :required="item.required"
  44. :label-width="auto"
  45. :prop="item.required ? item.prop : ''"
  46. >
  47. <u-input
  48. @click="open(item)"
  49. v-model="form[item.key]"
  50. type="select"
  51. :placeholder="`请选择${item.label}`"
  52. />
  53. <u-select
  54. v-model="item.show"
  55. :list="backDictArr(item)"
  56. :default-value="defaultValue"
  57. @confirm="
  58. (e) => {
  59. confirm(e, item.key);
  60. }
  61. "
  62. ></u-select>
  63. </u-form-item>
  64. </template>
  65. </u-form>
  66. </view>
  67. <view @click="submitForm" class="submit_btn">提交资料</view>
  68. </view>
  69. </template>
  70. <script>
  71. import { mapGetters, mapActions } from "vuex";
  72. export default {
  73. name: "SaasMiniprogramInfoFill",
  74. data() {
  75. return {
  76. listData: [],
  77. form: {},
  78. options: {},
  79. errorType: ["message"],
  80. auto: "180rpx",
  81. defaultValue: [0],
  82. isUploading: false,
  83. rules: {
  84. realname: [
  85. {
  86. required: true,
  87. message: "请输入姓名",
  88. trigger: ["change", "blur"],
  89. },
  90. ],
  91. sex: [
  92. {
  93. validator: (rule, value, callback) => {
  94. return !!value;
  95. },
  96. message: "请选择性别",
  97. trigger: "change",
  98. },
  99. ],
  100. idCard: [
  101. {
  102. required: true,
  103. message: "请输入身份证号",
  104. trigger: ["change", "blur"],
  105. },
  106. ],
  107. eduLevel: [
  108. {
  109. required: true,
  110. message: "请选择学历",
  111. trigger: ["change", "blur"],
  112. },
  113. ],
  114. companyName: [
  115. {
  116. required: true,
  117. message: "请输入工作单位",
  118. trigger: ["change", "blur"],
  119. },
  120. ],
  121. },
  122. };
  123. },
  124. async onLoad(options) {
  125. this.options = options;
  126. !this.userInfo && (await this.getUserInfo());
  127. this.init();
  128. },
  129. methods: {
  130. ...mapActions(["getUserInfo"]),
  131. init() {
  132. let { keys } = this.options;
  133. if (!keys) {
  134. return;
  135. }
  136. keys.split(",").forEach((key) => {
  137. let item = list.find((item) => item.key == key);
  138. if (item) {
  139. const value = this.userInfo[key];
  140. this.$set(this.form, key, value);
  141. this.listData.push({ ...item, disabled: !!value });
  142. }
  143. });
  144. },
  145. backDictArr(item) {
  146. let { dictKey, list } = item;
  147. if (dictKey) {
  148. if (!this.dictObj) {
  149. return [];
  150. }
  151. list = this.dictObj[dictKey].map((e, i) => {
  152. return { label: e, value: i };
  153. });
  154. item.list = list;
  155. }
  156. return list;
  157. },
  158. open(item) {
  159. if (item.disabled) {
  160. return;
  161. }
  162. let { key, list } = item;
  163. const option = list.find((e) => e.label === this.form[key]);
  164. this.defaultValue = [option ? option.value : 0];
  165. item.show = true;
  166. },
  167. confirm(e, key) {
  168. this.form[key] = e[0].label;
  169. },
  170. submitForm() {
  171. if (this.isUploading) {
  172. return;
  173. }
  174. this.isUploading = true;
  175. this.$nextTick(() => {
  176. this.$refs.uForm.validate((valid) => {
  177. if (valid) {
  178. this.$api
  179. .appuserInfo(this.form)
  180. .then((res) => {
  181. if (res.data.code === 200) {
  182. uni.showToast({
  183. title: "提交成功",
  184. icon: "none",
  185. });
  186. this.getUserInfo();
  187. setTimeout(() => {
  188. uni.navigateBack();
  189. }, 1500);
  190. } else {
  191. uni.showToast({
  192. title: res.data.msg,
  193. icon: "none",
  194. });
  195. }
  196. })
  197. .finally(() => {
  198. this.isUploading = false;
  199. });
  200. } else {
  201. this.isUploading = false;
  202. console.log(this.form);
  203. console.log("验证失败");
  204. }
  205. });
  206. });
  207. },
  208. },
  209. computed: {
  210. ...mapGetters(["userInfo", "dictObj"]),
  211. },
  212. onReady(res) {
  213. this.$refs.uForm.setRules(this.rules);
  214. },
  215. };
  216. </script>
  217. <style lang="scss" scoped>
  218. .submit_btn {
  219. width: 526rpx;
  220. height: 80rpx;
  221. background: #007aff;
  222. border-radius: 40rpx;
  223. text-align: center;
  224. line-height: 80rpx;
  225. color: #ffffff;
  226. position: absolute;
  227. left: 50%;
  228. margin-left: -263rpx;
  229. bottom: 140rpx;
  230. }
  231. </style> -->