userinfo.vue 7.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236
  1. <template>
  2. <div>
  3. <basic-container>
  4. <avue-form :option="option"
  5. v-model="form"
  6. @tab-click="handleTabClick"
  7. @submit="handleSubmit"></avue-form>
  8. </basic-container>
  9. </div>
  10. </template>
  11. <script>
  12. import option from "@/option/user/info";
  13. import {getUserInfo, updateInfo, updatePassword} from "@/api/system/user";
  14. import md5 from 'js-md5';
  15. import func from "@/util/func";
  16. export default {
  17. data() {
  18. return {
  19. index: 0,
  20. option: {},
  21. optionTem: {
  22. tabs: true,
  23. tabsActive: 1,
  24. submitBtn: false,
  25. emptyBtn: false,
  26. group: [
  27. {
  28. label: '個人信息',
  29. prop: 'info',
  30. column: [
  31. /*{
  32. label: '頭像',
  33. type: 'upload',
  34. listType: 'picture-img',
  35. propsHttp: {
  36. res: 'data',
  37. url: 'link',
  38. },
  39. canvasOption: {
  40. text: ' ',
  41. ratio: 0.1
  42. },
  43. action: '/api/blade-resource/oss/endpoint/put-file',
  44. tip: '只能上傳jpg/png用戶頭像,且不超過500kb',
  45. span: 12,
  46. row: true,
  47. prop: 'avatar'
  48. },*/
  49. {
  50. label: '姓名',
  51. span: 12,
  52. row: true,
  53. disabled: true,
  54. prop: 'name'
  55. }, {
  56. label: 'Mo碼',
  57. span: 12,
  58. row: true,
  59. prop: 'code',
  60. disabled: true,
  61. }, {
  62. label: 'EHR號',
  63. span: 12,
  64. row: true,
  65. prop: 'ehr',
  66. disabled: true,
  67. }, {
  68. label: '所屬機構',
  69. prop: 'deptName',
  70. span: 12,
  71. row: true,
  72. disabled: true,
  73. }, {
  74. label: '所屬角色',
  75. prop: 'roleName',
  76. span: 12,
  77. row: true,
  78. disabled: true,
  79. }]
  80. },
  81. {
  82. label: '修改密碼',
  83. prop: 'password',
  84. column: [{
  85. label: '原密碼',
  86. span: 12,
  87. row: true,
  88. type: 'password',
  89. prop: 'oldPassword',
  90. rules: [{
  91. required: true,
  92. message: "請輸入原密碼",
  93. trigger: "blur"
  94. }]
  95. }, {
  96. label: '新密碼',
  97. span: 12,
  98. row: true,
  99. type: 'password',
  100. prop: 'newPassword',
  101. rules: [{
  102. required: true,
  103. message: "請輸入新密碼",
  104. trigger: "blur"
  105. },
  106. {required: true, validator: this.validatePass, trigger: 'blur'}
  107. ]
  108. }, {
  109. label: '確認密碼',
  110. span: 12,
  111. row: true,
  112. type: 'password',
  113. prop: 'newPassword1',
  114. rules: [{
  115. required: true,
  116. message: "請重複新密碼",
  117. trigger: "blur"
  118. },
  119. {required: true, validator: this.validatePass2, trigger: 'blur'}
  120. ]
  121. }]
  122. }
  123. ],
  124. },
  125. form: {}
  126. };
  127. },
  128. created() {
  129. // this.findObject(this.optionTem.group[1].column, 'newPassword').rules.push({required: true, validator: this.validatePass, trigger: 'blur'});
  130. // this.findObject(this.optionTem.group[1].column, 'newPassword1').rules.push({required: true, validator: this.validatePass2, trigger: 'blur'});
  131. this.handleWitch();
  132. },
  133. methods: {
  134. validatePass(rule, value, callback){
  135. const pwdRule = /^(?![\d]+$)(?![a-zA-Z]+$)(?![^\da-zA-Z]+$).{6,}$/;
  136. if (value === '') {
  137. callback(new Error('請輸入密碼'));
  138. } else if (!pwdRule.test(value)) {
  139. callback(new Error("長度至少為6,且需包含數字、英文、符號任2款組合"));
  140. } else {
  141. callback();
  142. }
  143. },
  144. validatePass2(rule, value, callback){
  145. const pwdRule = /^(?![\d]+$)(?![a-zA-Z]+$)(?![^\da-zA-Z]+$).{6,}$/;
  146. if (value === '') {
  147. callback(new Error('請再次輸入密碼'));
  148. } else if (!pwdRule.test(value)) {
  149. callback(new Error("長度至少為6,且需包含數字、英文、符號任2款組合"));
  150. } else if (value !== this.form.newPassword) {
  151. callback(new Error('兩次輸入密碼不一致!'));
  152. } else {
  153. callback();
  154. }
  155. },
  156. handleSubmit(form, done) {
  157. if (this.index === 0) {
  158. updateInfo(form).then(res => {
  159. if (res.data.success) {
  160. this.$message({
  161. type: "success",
  162. message: "修改信息成功!"
  163. });
  164. } else {
  165. this.$message({
  166. type: "error",
  167. message: res.data.msg
  168. });
  169. }
  170. done();
  171. }, error => {
  172. window.console.log(error);
  173. done();
  174. })
  175. } else {
  176. updatePassword(md5(form.oldPassword), md5(form.newPassword), md5(form.newPassword1)).then(res => {
  177. if (res.data.success) {
  178. document.getElementById("tab-1").click();
  179. this.form.oldPassword = '', this.form.newPassword = '',this.form.newPassword1 = '';
  180. this.$message({
  181. type: "success",
  182. message: "修改密码成功!"
  183. });
  184. } else {
  185. this.$message({
  186. type: "error",
  187. message: res.data.msg
  188. });
  189. }
  190. done();
  191. }, error => {
  192. window.console.log(error);
  193. done();
  194. })
  195. }
  196. },
  197. handleWitch() {
  198. if (this.index === 0) {
  199. getUserInfo().then(res => {
  200. const user = res.data.data;
  201. this.form = {
  202. id: user.id,
  203. avatar: user.avatar,
  204. name: user.name,
  205. deptName: user.deptName,
  206. roleName: user.roleName,
  207. code: user.code,
  208. ehr: user.ehr,
  209. isLdapuser: user.isLdapuser,
  210. }
  211. if (user.isLdapuser == 1){
  212. this.optionTem.group.splice(1,1)
  213. }
  214. this.option = this.optionTem;
  215. });
  216. }
  217. },
  218. handleTabClick(tabs) {
  219. this.index = func.toInt(tabs.index);
  220. // this.handleWitch();
  221. if (this.form.isLdapuser != null && this.form.isLdapuser != undefined && this.form.isLdapuser == 0){
  222. this.option.submitBtn = this.index == 1;
  223. }
  224. }
  225. }
  226. };
  227. </script>
  228. <style>
  229. </style>