profile.vue 17 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419
  1. <template>
  2. <div class="app-container">
  3. <y-detail-page-layout :edit-status="true" v-loading="vLoading" element-loading-text="处理中。。。">
  4. <div style="padding-top: 30px;">
  5. <el-tabs v-model="activeName">
  6. <el-tab-pane label="员工信息" name="first">
  7. <el-form ref="postForm" :model="postForm" class="form-container">
  8. <div class="createPost-main-container">
  9. <div class="postInfo-container">
  10. <div style="margin-bottom: 30px">
  11. <h3 class="title">
  12. <div class="avatar-wrapper icon-title">基</div>
  13. <div class="icon-info">基本信息</div>
  14. </h3>
  15. </div>
  16. <el-row>
  17. <el-col :xs="24" :sm="12" :lg="6" :span="6">
  18. <el-form-item
  19. label="员工姓名:"
  20. prop="name"
  21. :rules="{required: true, message: '请输入员工姓名', trigger: 'blur'}"
  22. label-width="120px"
  23. class="postInfo-container-item"
  24. >
  25. <el-input v-model="postForm.name" class="filter-item"/>
  26. </el-form-item>
  27. </el-col>
  28. <el-col :xs="24" :sm="12" :lg="6" :span="6">
  29. <el-form-item
  30. label="性别:"
  31. prop="sex"
  32. :rules="{required: true, message: '请选择性别', trigger: 'blur'}"
  33. label-width="120px"
  34. class="postInfo-container-item"
  35. >
  36. <el-select
  37. v-model="postForm.sex"
  38. placeholder=""
  39. clearable
  40. filterable
  41. class="filter-item"
  42. style="width: 100%"
  43. >
  44. <el-option key="1" label="男" value="男"/>
  45. <el-option key="2" label="女" value="女"/>
  46. </el-select>
  47. </el-form-item>
  48. </el-col>
  49. <el-col :xs="24" :sm="12" :lg="6" :span="6">
  50. <el-form-item
  51. label="身份证号:"
  52. prop="idNo"
  53. :rules="[{required: true, message: '请选择身份证号', trigger: 'blur'},
  54. {
  55. pattern: /(^\d{15}$)|(^\d{18}$)|(^\d{17}(\d|X|x)$)/,
  56. message: '证件号码格式有误!',
  57. trigger: 'blur'}]"
  58. label-width="120px"
  59. class="postInfo-container-item"
  60. >
  61. <el-input v-model="postForm.idNo" class="filter-item"/>
  62. </el-form-item>
  63. </el-col>
  64. <el-col :xs="24" :sm="12" :lg="6" :span="6">
  65. <el-form-item label="出生日期:" label-width="120px" class="postInfo-container-item">
  66. <el-date-picker
  67. v-model="postForm.birthday"
  68. type="date"
  69. value-format="yyyy-MM-dd"
  70. style="width: 100%"
  71. placeholder="选择日期"
  72. />
  73. </el-form-item>
  74. </el-col>
  75. <el-col :xs="24" :sm="12" :lg="6" :span="6">
  76. <el-form-item label="民族:" label-width="120px" class="postInfo-container-item">
  77. <el-select
  78. v-model="postForm.nation"
  79. placeholder=""
  80. clearable
  81. filterable
  82. class="filter-item"
  83. style="width: 100%"
  84. >
  85. <el-option v-for="(item, index) in AllEnum['民族']" :key="index" :label="item" :value="item"/>
  86. </el-select>
  87. </el-form-item>
  88. </el-col>
  89. <el-col :xs="24" :sm="12" :lg="6" :span="6">
  90. <el-form-item label="联系电话:"
  91. prop="mobile"
  92. :rules="[{required: true, message: '请输入联系电话', trigger: 'blur'},
  93. {
  94. pattern: /^1\d{10}$/,
  95. message: '联系电话格式有误!',
  96. trigger: 'blur'}]"
  97. label-width="120px" class="postInfo-container-item">
  98. <el-input v-model="postForm.mobile" class="filter-item"/>
  99. </el-form-item>
  100. </el-col>
  101. <el-col :xs="24" :sm="12" :lg="6" :span="6">
  102. <el-form-item label="政治面貌:" label-width="120px" class="postInfo-container-item">
  103. <el-select
  104. v-model="postForm.politics"
  105. placeholder=""
  106. clearable
  107. filterable
  108. class="filter-item"
  109. style="width: 100%"
  110. >
  111. <el-option v-for="(item, index) in AllEnum['政治面貌']" :key="index" :label="item" :value="item"/>
  112. </el-select>
  113. </el-form-item>
  114. </el-col>
  115. <el-col :xs="24" :sm="12" :lg="6" :span="6">
  116. <el-form-item
  117. label="籍贯:"
  118. prop="nativePlace"
  119. label-width="120px"
  120. class="postInfo-container-item"
  121. >
  122. <el-input v-model="postForm.nativePlace" class="filter-item"/>
  123. </el-form-item>
  124. </el-col>
  125. <el-col :xs="24" :sm="12" :lg="6" :span="6">
  126. <el-form-item
  127. label="家庭住址:"
  128. prop="homeAddress"
  129. label-width="120px"
  130. class="postInfo-container-item"
  131. >
  132. <el-input v-model="postForm.homeAddress" class="filter-item" style="width: 480px"/>
  133. </el-form-item>
  134. </el-col>
  135. <el-button type="primary" style="margin-left: 300px" @click="openDialog">修改密码</el-button>
  136. </el-row>
  137. <div style="margin-top:20px;width:100%;height:1px;background:rgba(242,242,242,1);"/>
  138. <div style="margin-bottom: 30px">
  139. <h3 class="title">
  140. <div class="avatar-wrapper icon-title" style="background:rgba(255,175,41,1)">工</div>
  141. <div class="icon-info">工作信息</div>
  142. </h3>
  143. </div>
  144. <el-row>
  145. <el-col :xs="24" :sm="12" :lg="6" :span="6">
  146. <el-form-item
  147. label="员工类型:"
  148. prop="userType"
  149. :rules="{required: true, message: '请选择员工类型', trigger: 'blur'}"
  150. label-width="120px"
  151. class="postInfo-container-item"
  152. >
  153. <el-select
  154. v-model="postForm.userType"
  155. clearable
  156. filterable
  157. placeholder=""
  158. style="width: 100%"
  159. >
  160. <el-option v-for="(item, index) in AllEnum['员工类型']" :key="index" :label="item" :value="item"/>
  161. </el-select>
  162. </el-form-item>
  163. </el-col>
  164. <el-col :xs="24" :sm="12" :lg="6" :span="6">
  165. <el-form-item
  166. label="员工工号:"
  167. prop="staffNo"
  168. label-width="120px"
  169. class="postInfo-container-item"
  170. >
  171. <el-input :value="postForm.staffNo" class="filter-item" placeholder="系统自动生成" :disabled="true" readonly/>
  172. </el-form-item>
  173. </el-col>
  174. <el-col :xs="24" :sm="24" :lg="12" :span="12">
  175. <el-form-item
  176. label="岗-部门名:"
  177. prop="userPosts"
  178. :rules="{required: true, message: '请选择岗-部门', trigger: 'blur'}"
  179. label-width="120px"
  180. class="postInfo-container-item"
  181. >
  182. <el-select
  183. v-model="userPosts"
  184. placeholder=""
  185. clearable
  186. multiple
  187. filterable
  188. class="filter-item"
  189. style=" width: 100%"
  190. >
  191. <el-option
  192. v-for="item in postOptions"
  193. :key="item.id"
  194. :label="item.name"
  195. :value="item.id"
  196. />
  197. </el-select>
  198. </el-form-item>
  199. </el-col>
  200. </el-row>
  201. <el-row>
  202. <el-col :xs="24" :sm="12" :lg="6" :span="6">
  203. <el-form-item
  204. label="在职状态:"
  205. prop="resignState"
  206. :rules="{required: true, message: '请选择在职状态', trigger: 'blur'}"
  207. label-width="120px"
  208. class="postInfo-container-item"
  209. >
  210. <el-select
  211. v-model="postForm.resignState"
  212. placeholder=""
  213. clearable
  214. filterable
  215. class="filter-item"
  216. style="width: 100%"
  217. >
  218. <el-option key="0" label="离职" :value="true" />
  219. <el-option key="1" label="在职" :value="false"/>
  220. </el-select>
  221. </el-form-item>
  222. </el-col>
  223. <el-col :xs="24" :sm="12" :lg="6" :span="6">
  224. <el-form-item label="入职日期:" label-width="120px" class="postInfo-container-item">
  225. <el-date-picker
  226. v-model="postForm.hireDate"
  227. type="date"
  228. value-format="yyyy-MM-dd"
  229. style="width: 100%"
  230. placeholder="选择日期"
  231. />
  232. </el-form-item>
  233. </el-col>
  234. <el-col :xs="24" :sm="12" :lg="6" :span="6">
  235. <el-form-item label="离职日期:" label-width="120px" class="postInfo-container-item">
  236. <el-date-picker
  237. v-model="postForm.resignDate"
  238. type="date"
  239. value-format="yyyy-MM-dd"
  240. style="width: 100%"
  241. placeholder="选择日期"
  242. />
  243. </el-form-item>
  244. </el-col>
  245. </el-row>
  246. <div style="margin-top:20px;width:100%;height:1px;background:rgba(242,242,242,1);"/>
  247. <div style="margin-bottom: 30px">
  248. <h3 class="title">
  249. <div class="avatar-wrapper icon-title" style="background:#9E9CF4">信</div>
  250. <div class="icon-info">信息备注</div>
  251. </h3>
  252. </div>
  253. <el-row>
  254. <el-col :span="24">
  255. <el-form-item label="备注:" label-width="120px" class="postInfo-container-item">
  256. <el-input v-model="postForm.remark" type="textarea" class="filter-item" placeholder="200字符"/>
  257. </el-form-item>
  258. </el-col>
  259. </el-row>
  260. </div>
  261. </div>
  262. </el-form>
  263. </el-tab-pane>
  264. </el-tabs>
  265. </div>
  266. </y-detail-page-layout>
  267. <el-dialog class="dialog" title="修改密码" :visible.sync="dialogFormVisible" :close-on-click-modal="false" width="600px" custom-class="customClass">
  268. <el-form :model="dialogForm" :rules="rules" ref="dialogForm" label-position="right"
  269. label-width="110px"
  270. style="width: 400px; margin-left:50px;">
  271. <el-form-item label="原密码" prop="originalPassword">
  272. <el-input v-model="dialogForm.originalPassword" type="password" autocomplete="off"/>
  273. </el-form-item>
  274. <el-form-item label="新密码" prop="currentPassword">
  275. <el-input v-model="dialogForm.currentPassword" type="password" autocomplete="off"/>
  276. </el-form-item>
  277. <el-form-item label="确认密码" prop="repeatPassword">
  278. <el-input v-model="dialogForm.repeatPassword" type="password" autocomplete="off"/>
  279. </el-form-item>
  280. </el-form>
  281. <div slot="footer" class="dialog-footer">
  282. <el-button @click="dialogFormVisible = false">取 消</el-button>
  283. <el-button type="primary" @click="savePass('dialogForm')">修 改</el-button>
  284. </div>
  285. </el-dialog>
  286. </div>
  287. </template>
  288. <script>
  289. import YDetailPageLayout from '@/components/YDetailPageLayout'
  290. export default {
  291. name: 'StaffDetail',
  292. components: {
  293. YDetailPageLayout
  294. },
  295. data() {
  296. return {
  297. dialogFormVisible:false,
  298. type: 'detail',
  299. postForm: {
  300. userPosts: [],
  301. resignState:false,
  302. userType: '正式员工',
  303. },
  304. userId: this.$store.getters.userInfo.id,
  305. activeName: 'first',
  306. vLoading: false,
  307. AllEnum:[],
  308. listQuery:{},
  309. postOptions:[],
  310. userPosts:[],
  311. dialogForm: {
  312. originalPassword: '',
  313. currentPassword: '',
  314. repeatPassword: '',
  315. },
  316. rules: {
  317. originalPassword: [{
  318. required: true,
  319. message: '请输入原密码',
  320. trigger: 'blur'
  321. }],
  322. currentPassword: [{
  323. required: true,
  324. message: '请输入新密码',
  325. trigger: 'change'
  326. }],
  327. repeatPassword: [{
  328. required: true,
  329. message: '请确认新密码',
  330. trigger: 'change'
  331. }]
  332. },
  333. }
  334. },
  335. created() {
  336. this.getAllEnum();
  337. this.getOptions();
  338. this.getDetail();
  339. },
  340. methods: {
  341. getOptions(){
  342. this.$api.post.xSimpleAll().then(res => {
  343. this.postOptions = res.data
  344. })
  345. },
  346. getAllEnum() {
  347. const that = this;
  348. that.$api.globalConfig.getAllEnum().then(data => {
  349. if (data.code === 200) {
  350. that.AllEnum = data.data
  351. } else {
  352. this.$message({
  353. type: 'error',
  354. message: data.msg
  355. })
  356. }
  357. })
  358. },
  359. getDetail() {
  360. if (this.userId) {
  361. this.$api.user.detail(this.userId).then(res => {
  362. this.postForm = res.data;
  363. this.userPosts = res.data.userPosts.map(item => {
  364. return item.id
  365. })
  366. });
  367. }
  368. },
  369. openDialog(){
  370. this.dialogFormVisible = true;
  371. },
  372. savePass(formName) {
  373. this.$refs[formName].validate((valid) => {
  374. if (valid) {
  375. if (this.dialogForm.currentPassword.length!=8){
  376. this.$notify({
  377. title: '错误',
  378. message: '新密码必须是8位字符',
  379. type: 'error',
  380. duration: 3000
  381. });
  382. return
  383. }
  384. if (this.dialogForm.currentPassword != this.dialogForm.repeatPassword){
  385. this.$notify({
  386. title: '错误',
  387. message: '两次输入的密码不一致,请检查。',
  388. type: 'error',
  389. duration: 3000
  390. });
  391. return
  392. }
  393. this.$api.user.modifyPass(this.dialogForm).then(res => {
  394. if (res.code === 200) {
  395. this.$notify({
  396. title: '成功',
  397. message: '修改成功',
  398. type: 'success',
  399. duration: 2000
  400. })
  401. this.dialogFormVisible = false
  402. }
  403. })
  404. } else {
  405. console.log('error submit!!')
  406. return false
  407. }
  408. })
  409. },
  410. }
  411. }
  412. </script>
  413. <style lang="scss" scoped>
  414. /deep/.customClass{
  415. border-radius: 20px;
  416. }
  417. </style>