pinfo.vue 9.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229
  1. <template>
  2. <div id="pinfo">
  3. <el-row>
  4. <el-col :span="24">
  5. <el-form ref="form" :model="form" label-width="120px" :rules="rules">
  6. <el-form-item label="用户名" prop="name">
  7. <el-input v-model="form.name"></el-input>
  8. </el-form-item>
  9. <el-form-item label="手机号" prop="phone">
  10. <el-input v-model="form.phone"></el-input
  11. ><span style="color:red;"
  12. ><i class="el-icon-warning" style="margin-right:5px;"></i>如果您修改手机号,那么登录时使用的手机号也会发生变更,请谨慎修改!</span
  13. >
  14. </el-form-item>
  15. <el-form-item v-if="this.user.type != '3'" label="身份证号" prop="id_number">
  16. <el-input v-model="form.id_number" @input="inputIdnumber()"></el-input>
  17. </el-form-item>
  18. <el-form-item v-if="this.user.type != '3'" label="出生年月" prop="birthday">
  19. <el-date-picker disabled v-model="form.birthday" type="date" format="yyyy-MM-dd" value-format="yyyy-MM-dd" placeholder="请选择选择日期">
  20. </el-date-picker>
  21. </el-form-item>
  22. <el-form-item v-if="this.user.type != '3'" label="性别" prop="gender">
  23. <el-radio-group disabled v-model="form.gender">
  24. <el-radio label="男">男</el-radio>
  25. <el-radio label="女">女</el-radio>
  26. </el-radio-group>
  27. </el-form-item>
  28. <el-form-item v-if="this.user.type != '3'" label="家庭住址">
  29. <el-input v-model="form.address"></el-input>
  30. </el-form-item>
  31. <el-form-item v-if="this.user.type === '0' || this.user.type === '1' || this.user.type === '4'" label="部门">
  32. <el-select v-model="form.dept_id" filterable placeholder="请选择部门" @change="selectChild">
  33. <el-option v-for="(item, index) in deptList" :key="index" :label="item.name" :value="item.id"></el-option>
  34. </el-select>
  35. </el-form-item>
  36. <el-form-item v-if="this.user.type === '0' || this.user.type === '1' || this.user.type === '4'" label="职务">
  37. <el-select v-model="form.level_id" filterable placeholder="请选择职务">
  38. <el-option v-for="(item, index) in levelList" :key="index" :label="item.name" :value="item.id"></el-option>
  39. </el-select>
  40. </el-form-item>
  41. <el-form-item v-if="this.user.type === '2'" label="邮箱" prop="email">
  42. <el-input v-model="form.email"></el-input>
  43. </el-form-item>
  44. <el-form-item v-if="this.user.type === '2'" label="头像" prop="img_url">
  45. <upload :limit="1" :data="form.img_url" type="img_url" :url="'/files/count/upload'" @upload="uploadSuccess"></upload>
  46. </el-form-item>
  47. <el-form-item v-if="this.user.type === '2'" label="职称级别">
  48. <el-input v-model="form.level"></el-input>
  49. </el-form-item>
  50. <el-form-item v-if="this.user.type === '2'" label="职称名称">
  51. <el-input v-model="form.levelname"></el-input>
  52. </el-form-item>
  53. <el-form-item v-if="this.user.type === '2'" label="院校">
  54. <el-input v-model="form.school"></el-input>
  55. </el-form-item>
  56. <el-form-item v-if="this.user.type === '2'" label="学历">
  57. <el-select v-model="form.education" placeholder="请选择学历">
  58. <el-option v-for="(item, index) in educationList" :key="index" :label="item.name" :value="item.name"> </el-option>
  59. </el-select>
  60. </el-form-item>
  61. <el-form-item v-if="this.user.type === '2'" label="学位">
  62. <el-select v-model="form.degree" placeholder="请选择学位">
  63. <el-option v-for="(item, index) in degreeList" :key="index" :label="item.name" :value="item.name"> </el-option>
  64. </el-select>
  65. </el-form-item>
  66. <el-form-item v-if="this.user.type === '2'" label="专业">
  67. <el-input v-model="form.major"></el-input>
  68. </el-form-item>
  69. <el-form-item v-if="this.user.type === '2'" label="从事专业">
  70. <el-input v-model="form.profession"></el-input>
  71. </el-form-item>
  72. <el-form-item v-if="this.user.type === '2'" label="工作简历">
  73. <el-input v-model="form.resume" type="textarea"></el-input>
  74. </el-form-item>
  75. <el-form-item v-if="this.user.type === '2'" label="项目">
  76. <el-input v-model="form.project" type="textarea"></el-input>
  77. </el-form-item>
  78. <el-form-item v-if="this.user.type === '2'" label="学术成就">
  79. <el-input v-model="form.academic" type="textarea"></el-input>
  80. </el-form-item>
  81. <el-form-item>
  82. <el-button type="primary" @click="onSubmit()">提交</el-button>
  83. </el-form-item>
  84. </el-form>
  85. </el-col>
  86. </el-row>
  87. </div>
  88. </template>
  89. <script>
  90. import upload from '@/components/uploadone.vue';
  91. import { mapState, createNamespacedHelpers } from 'vuex';
  92. const { mapActions: staff } = createNamespacedHelpers('staff');
  93. const { mapActions: expert } = createNamespacedHelpers('expert');
  94. const { mapActions: user } = createNamespacedHelpers('user');
  95. const { mapActions: department } = createNamespacedHelpers('department');
  96. const { mapActions: level } = createNamespacedHelpers('level');
  97. const { mapActions: login } = createNamespacedHelpers('login');
  98. export default {
  99. name: 'pinfo',
  100. props: {},
  101. components: { upload },
  102. data: () => ({
  103. form: {},
  104. deptList: [],
  105. levelList: [],
  106. educationList: [{ name: '中专及以上' }, { name: '大专及以上' }, { name: '本科及以上' }, { name: '研究生及以上' }],
  107. degreeList: [{ name: '博士学位' }, { name: '硕士学位' }, { name: '学士学位' }, { name: '其他' }],
  108. rules: {
  109. name: [{ required: true, message: '请输入用户名', trigger: 'blur' }],
  110. id_number: [
  111. { required: true, message: '请输入身份证号', trigger: 'blur' },
  112. {
  113. pattern: /^[1-9]\d{7}((0\d)|(1[0-2]))(([0|1|2]\d)|3[0-1])\d{3}$|^[1-9]\d{5}[1-9]\d{3}((0\d)|(1[0-2]))(([0|1|2]\d)|3[0-1])\d{3}([0-9]|X)$/,
  114. message: '请输入有效的身份证号',
  115. },
  116. ],
  117. phone: [
  118. { required: true, message: '请输入手机号', trigger: 'blur' },
  119. { pattern: /^1\d{10}$/, message: '请输入有效的手机号' },
  120. ],
  121. gender: [{ required: true, message: '请选择性别', trigger: 'blur' }],
  122. birthday: [{ required: true, message: '请选择出生年月', trigger: 'blur' }],
  123. email: [{ required: false }, { pattern: /^([a-zA-Z0-9_-])+@([a-zA-Z0-9_-])+(.[a-zA-Z0-9_-])+/, message: '请输入有效的邮箱' }],
  124. },
  125. }),
  126. created() {
  127. this.search();
  128. },
  129. computed: {
  130. ...mapState(['user']),
  131. },
  132. methods: {
  133. ...user(['update', 'fetch']),
  134. ...staff({ staffQuery: 'query', staffUpdate: 'update', staffFetch: 'fetch' }),
  135. ...expert({ expertQuery: 'query', expertUpdate: 'update', expertFetch: 'fetch' }),
  136. ...department({ departmentQuery: 'query', departmentFetch: 'fetch' }),
  137. ...level({ levelQuery: 'query', levelFetch: 'fetch' }),
  138. ...login({ logout: 'logout' }),
  139. async search() {
  140. this.searchInfo();
  141. this.selectChild();
  142. if (this.user.type === '3') {
  143. const user = await this.fetch(this.user.uid);
  144. this.$set(this, `form`, user.data);
  145. } else if (this.user.type === '2') {
  146. const expert = await this.expertFetch(this.user.userid);
  147. this.$set(this, `form`, expert.data);
  148. } else if (this.user.type === '1' || this.user.type === '0' || this.user.type === '4') {
  149. const staff = await this.staffFetch(this.user.userid);
  150. this.$set(this, `form`, staff.data);
  151. }
  152. },
  153. // 部门
  154. async searchInfo() {
  155. let res = await this.departmentQuery();
  156. if (this.$checkRes(res)) {
  157. this.$set(this, `deptList`, res.data);
  158. }
  159. },
  160. // 职务
  161. async selectChild(dept_id) {
  162. this.$set(this.form, `level_id`, undefined);
  163. let res = await this.levelQuery({ dept_id });
  164. if (this.$checkRes(res)) {
  165. this.$set(this, `levelList`, res.data);
  166. }
  167. },
  168. inputIdnumber() {
  169. let card = this.form.id_number;
  170. if (card.length == 18) {
  171. let birth = card.substring(6, 10) + '-' + card.substring(10, 12) + '-' + card.substring(12, 14);
  172. let gender = parseInt(card.substr(16, 1)) % 2 == 1 ? '男' : '女';
  173. let myDate = new Date();
  174. let month = myDate.getMonth() + 1;
  175. let day = myDate.getDate();
  176. let age = myDate.getFullYear() - card.substring(6, 10) - 1;
  177. if (card.substring(10, 12) < month || (card.substring(10, 12) == month && card.substring(12, 14) <= day)) {
  178. age++;
  179. }
  180. this.form.birthday = birth;
  181. this.form.gender = gender;
  182. }
  183. },
  184. async onSubmit() {
  185. let res = {};
  186. let data = JSON.parse(JSON.stringify(this.form));
  187. if (this.user.type === '3') {
  188. data.id = this.user.uid;
  189. res = await this.update(data);
  190. } else if (this.user.type === '2') {
  191. data.id = this.user.userid;
  192. res = await this.expertUpdate(data);
  193. } else if (this.user.type === '1' || this.user.type === '0') {
  194. data.id = this.user.userid;
  195. res = await this.staffUpdate(data);
  196. }
  197. if (res.errcode === 0) {
  198. this.$message({
  199. message: '信息修改成功',
  200. type: 'success',
  201. });
  202. } else {
  203. this.$message.error('信息修改失败');
  204. }
  205. if (data.phone != this.user.phone) {
  206. this.logoutBtn();
  207. }
  208. },
  209. uploadSuccess({ type, data }) {
  210. this.$set(this.form, `${type}`, data.uri);
  211. },
  212. // 退出登录
  213. logoutBtn() {
  214. this.logout();
  215. this.$router.push({ path: '/' });
  216. },
  217. },
  218. };
  219. </script>
  220. <style lang="less" scoped>
  221. /deep/.el-input__inner {
  222. width: 600px;
  223. }
  224. /deep/ .el-textarea__inner {
  225. width: 600px;
  226. }
  227. </style>