mainForm.vue 11 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264
  1. <template>
  2. <div id="mainForm">
  3. <el-row>
  4. <el-col :span="24" class="linksForm">
  5. <el-form ref="form" :model="form" label-width="100px">
  6. <el-form-item label="用户状态" v-if="form.role !== '1' && !isNew">
  7. <el-radio-group v-model="form.status" @change="setIsQy">
  8. <el-radio label="0" disabled>已注册</el-radio>
  9. <el-radio label="1">审核成功</el-radio>
  10. <el-radio label="2">拒绝审核</el-radio>
  11. </el-radio-group>
  12. </el-form-item>
  13. <el-form-item label="用户名称" prop="name">
  14. <el-input v-model="form.name" placeholder="请输入用户名称"></el-input>
  15. </el-form-item>
  16. <el-form-item label="手机号" prop="phone">
  17. <el-input v-model="form.phone" placeholder="请输入手机号" :minlength="11" :maxlength="11"></el-input>
  18. </el-form-item>
  19. <el-form-item label="登录密码" prop="password">
  20. <el-input v-model="form.password" placeholder="请输入登录密码" show-password></el-input>
  21. </el-form-item>
  22. <el-form-item label="身份证号" prop="cardnumber">
  23. <el-input v-model="form.cardnumber" placeholder="请输入身份证号" :minlength="18" :maxlength="18"></el-input>
  24. </el-form-item>
  25. <el-form-item label="邮箱" prop="email">
  26. <el-input v-model="form.email" placeholder="请输入邮箱"></el-input>
  27. </el-form-item>
  28. <el-form-item label="地址" prop="addr">
  29. <el-input v-model="form.addr" placeholder="请输入地址"></el-input>
  30. </el-form-item>
  31. <el-form-item label="头像图片" prop="img_path">
  32. <upload :limit="1" :data="form.img_path" type="img_path" :url="'/files/imgpath/upload'" @upload="uploadSuccess"></upload>
  33. </el-form-item>
  34. <el-form-item label="用户类别" prop="role">
  35. <el-radio-group v-model="form.role">
  36. <el-radio label="4">个人</el-radio>
  37. <el-radio label="5">企业管理员</el-radio>
  38. <el-radio label="6">专家</el-radio>
  39. </el-radio-group>
  40. </el-form-item>
  41. <el-form-item label="身份证正面" v-if="form.role == '4' || form.role == '5'" prop="cardfile_a">
  42. <upload :limit="1" :data="form.cardfile_a" type="cardfile_a" :url="'/files/cardfilea/upload'" @upload="uploadSuccess"></upload>
  43. </el-form-item>
  44. <el-form-item label="身份证背面" v-if="form.role == '4' || form.role == '5'" prop="cardfile_b">
  45. <upload :limit="1" :data="form.cardfile_b" type="cardfile_b" :url="'/files/cardfileb/upload'" @upload="uploadSuccess"></upload>
  46. </el-form-item>
  47. <el-form-item label="组织机构图片" v-if="form.role == '5'" prop="img_qy">
  48. <upload :limit="1" :data="form.img_qy" type="img_qy" :url="'/files/imgqy/upload'" @upload="uploadSuccess"></upload>
  49. </el-form-item>
  50. <template v-if="form.role == '5'">
  51. <el-form-item label="机构类型" prop="institution_type">
  52. <el-input v-model="form.institution_type" placeholder="请输入机构类型"></el-input>
  53. </el-form-item>
  54. <el-form-item label="机构名称" prop="institution_name">
  55. <el-input v-model="form.institution_name" placeholder="请输入机构名称"></el-input>
  56. </el-form-item>
  57. <el-form-item label="机构代码" prop="institution_code">
  58. <el-input v-model="form.institution_code" placeholder="请输入机构代码"></el-input>
  59. </el-form-item>
  60. <el-form-item label="机构性质" prop="institution_nature">
  61. <el-input v-model="form.institution_nature" placeholder="请输入机构性质"></el-input>
  62. </el-form-item>
  63. </template>
  64. <el-form-item label="办公电话" v-if="form.role == '4' || form.role == '5'" prop="office_phone">
  65. <el-input v-model="form.office_phone" placeholder="请输入办公电话"></el-input>
  66. </el-form-item>
  67. <el-form-item label="所属行业" v-if="form.role == '4' || form.role == '5'" prop="profession">
  68. <el-input v-model="form.profession" placeholder="请输入所属行业"></el-input>
  69. </el-form-item>
  70. <el-form-item label="性别" v-if="form.role == '6'" prop="gender">
  71. <el-select v-model="form.gender" placeholder="请选择民性别">
  72. <el-option v-for="(item, index) in gender_list" :key="index" :label="item.name" :value="item.name"></el-option>
  73. </el-select>
  74. </el-form-item>
  75. <el-form-item label="出生日期" v-if="form.role == '6'" prop="birthday">
  76. <el-date-picker v-model="form.birthday" type="date" placeholder="选择日期" value-format="yyyy-MM-dd"> </el-date-picker>
  77. </el-form-item>
  78. <el-form-item label="职称级别" v-if="form.role == '6'" prop="level">
  79. <el-input v-model="form.level" placeholder="请输入职称级别"></el-input>
  80. </el-form-item>
  81. <el-form-item label="职称" v-if="form.role == '6'" prop="levelname">
  82. <el-input v-model="form.levelname" placeholder="请输入职称"></el-input>
  83. </el-form-item>
  84. <el-form-item label="职务" v-if="form.role == '6'" prop="position">
  85. <el-input v-model="form.position" placeholder="请输入职务"></el-input>
  86. </el-form-item>
  87. <el-form-item label="院校" v-if="form.role == '6'" prop="school">
  88. <el-input v-model="form.school" placeholder="请输入院校"></el-input>
  89. </el-form-item>
  90. <el-form-item label="学历" v-if="form.role == '6'" prop="xl">
  91. <el-select v-model="form.xl" placeholder="请选择学历要求">
  92. <el-option v-for="(item, index) in edu_list" :key="index" :label="item.name" :value="item.name"></el-option>
  93. </el-select>
  94. </el-form-item>
  95. <el-form-item label="学位" v-if="form.role == '6'" prop="xw">
  96. <el-select v-model="form.xw" placeholder="请选择学位">
  97. <el-option v-for="(item, index) in degree_list" :key="index" :label="item.name" :value="item.name"></el-option>
  98. </el-select>
  99. </el-form-item>
  100. <el-form-item label="专业" v-if="form.role == '6'" prop="major">
  101. <el-input v-model="form.major" placeholder="请输入专业"></el-input>
  102. </el-form-item>
  103. <el-form-item label="从事专业" v-if="form.role == '6'" prop="professional">
  104. <el-input v-model="form.professional" placeholder="请输入从事专业"></el-input>
  105. </el-form-item>
  106. <el-form-item label="个人简历" v-if="form.role == '4' || form.role == '6'" prop="resume">
  107. <el-input type="textarea" v-model="form.resume" placeholder="请输入个人简介"></el-input>
  108. </el-form-item>
  109. <el-form-item label="项目" v-if="form.role == '6'" prop="project">
  110. <el-input v-model="form.project" placeholder="请输入项目"></el-input>
  111. </el-form-item>
  112. <el-form-item label="学术成就" v-if="form.role == '6'" prop="academic">
  113. <el-input v-model="form.academic" placeholder="请输入学术成就"></el-input>
  114. </el-form-item>
  115. <el-form-item label="论文" v-if="form.role == '6'" prop="paper">
  116. <el-input v-model="form.paper" placeholder="请输入论文"></el-input>
  117. </el-form-item>
  118. <el-form-item label="备注" v-if="form.role == '6'" prop="remark">
  119. <el-input v-model="form.remark" placeholder="请输入备注"></el-input>
  120. </el-form-item>
  121. <el-form-item>
  122. <el-button @click="handleCancel">返回</el-button>
  123. <el-button type="primary" @click="handleSave()">提交</el-button>
  124. </el-form-item>
  125. </el-form>
  126. </el-col>
  127. </el-row>
  128. </div>
  129. </template>
  130. <script>
  131. import upload from '@/components/upload.vue';
  132. import { mapActions, mapState, createNamespacedHelpers } from 'vuex';
  133. const { mapActions: users } = createNamespacedHelpers('users');
  134. const { mapActions: exportuser } = createNamespacedHelpers('exportuser');
  135. export default {
  136. name: 'mainForm',
  137. props: {},
  138. components: { upload },
  139. data: () => ({
  140. form: {},
  141. // 性别
  142. gender_list: [
  143. {
  144. name: '男',
  145. },
  146. {
  147. name: '女',
  148. },
  149. ],
  150. // 学历
  151. edu_list: [
  152. {
  153. name: '中专及以上',
  154. },
  155. {
  156. name: '大专及以上',
  157. },
  158. {
  159. name: '本科及以上',
  160. },
  161. {
  162. name: '研究生及以上',
  163. },
  164. ],
  165. // 学位
  166. degree_list: [
  167. {
  168. name: '学士',
  169. },
  170. {
  171. name: '博士',
  172. },
  173. {
  174. name: '其他',
  175. },
  176. ],
  177. }),
  178. created() {},
  179. methods: {
  180. ...users(['fetch', 'create', 'update']),
  181. ...exportuser({ exportuserFetch: 'fetch', exportuserCreate: 'create', exportuserUpdate: 'update' }),
  182. async search() {
  183. if (this.role == '4' || this.role == '5') {
  184. const res = await this.fetch(this.id);
  185. if (this.$checkRes(res)) this.$set(this, `form`, res.data);
  186. } else if (this.role == '6') {
  187. const res = await this.exportuserFetch(this.id);
  188. if (this.$checkRes(res)) this.$set(this, `form`, res.data);
  189. }
  190. },
  191. async handleSave() {
  192. let res;
  193. let msg;
  194. let data = this.form;
  195. if (this.isNew) {
  196. data.status = '1';
  197. data.code = this.user.code;
  198. if (data.role == '4' || data.role == '5') {
  199. res = await this.create(data);
  200. msg = '用户创建成功';
  201. } else if (data.role == '6') {
  202. res = await this.exportuserCreate(data);
  203. msg = '用户创建成功';
  204. }
  205. } else {
  206. if (this.form.role == '4' || this.form.role == '5') {
  207. res = await this.update(data);
  208. msg = '用户审核成功';
  209. } else if (this.form.role == '6') {
  210. res = await this.exportuserUpdate(data);
  211. msg = '用户审核成功';
  212. }
  213. }
  214. if (this.$checkRes(res, msg)) {
  215. this.handleCancel();
  216. }
  217. },
  218. handleCancel() {
  219. this.$router.push({ path: '/user/index' });
  220. },
  221. setIsQy(data) {
  222. let val = '0';
  223. data == '2' ? (val = '0') : (val = '1');
  224. this.$set(this.form, `is_qy`, val);
  225. },
  226. uploadSuccess({ type, data }) {
  227. this.$set(this.form, `${type}`, data.uri);
  228. },
  229. },
  230. computed: {
  231. ...mapState(['user']),
  232. id() {
  233. return this.$route.query.id;
  234. },
  235. role() {
  236. return this.$route.query.role;
  237. },
  238. isNew() {
  239. return this.$route.query.id ? false : true;
  240. },
  241. },
  242. watch: {
  243. isNew: {
  244. handler(val) {
  245. if (!val) {
  246. console.log('in function:');
  247. this.search();
  248. }
  249. },
  250. immediate: true,
  251. },
  252. },
  253. };
  254. </script>
  255. <style lang="less" scoped>
  256. .linksForm {
  257. margin: 20px 0 0 0;
  258. }
  259. .el-form {
  260. padding: 0 200px;
  261. }
  262. </style>