updatePwd.vue 4.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191
  1. <template>
  2. <!-- 修改密码 -->
  3. <view class="container">
  4. <u--form
  5. labelPosition="left"
  6. labelWidth="70"
  7. :model="fmData"
  8. :rules="rules"
  9. ref="uForm"
  10. >
  11. <u-form-item label="旧密码" prop="originalPwd" borderBottom>
  12. <c-input
  13. placeholder="请输入旧密码"
  14. v-model="fmData.originalPwd"
  15. border="none"
  16. type="password"
  17. show-password
  18. ></c-input>
  19. </u-form-item>
  20. <u-form-item label="新密码" prop="password" borderBottom>
  21. <c-input
  22. placeholder="8-16位数字、字母、符号组合"
  23. maxlength="16"
  24. v-model="fmData.password"
  25. border="none"
  26. type="password"
  27. show-password
  28. ></c-input>
  29. </u-form-item>
  30. <u-form-item label="确认密码" prop="rePassword" borderBottom>
  31. <c-input
  32. placeholder="请输入确认密码"
  33. v-model="fmData.rePassword"
  34. border="none"
  35. type="password"
  36. show-password
  37. ></c-input>
  38. </u-form-item>
  39. </u--form>
  40. <c-button type="primary" @click="handleComplete">完成</c-button>
  41. </view>
  42. </template>
  43. <script>
  44. import { editAdminPwd } from '@/api/user/my.js';
  45. import { rsaEncrypt } from '@/utils/jsencrypt';
  46. export default {
  47. name: 'updatePwd',
  48. data() {
  49. const pwdValidator = (rule, value, callback) => {
  50. const val = value || '';
  51. if (val.length < 8 || val.length > 16) {
  52. callback('长度在 8 到 16 个字符');
  53. return;
  54. }
  55. const letterSmall = /(?=.*?[a-z])/.test(val); // 包含小写字母
  56. const number = /\d/.test(val); // 包含数字
  57. const letterBig = /(?=.*?[A-Z])/.test(val); // 包含大写字母。
  58. const specialWord = /(?=.*[~!@#$%^&*().,\\`|/[\]+-])/.test(val); // 包含特殊字符
  59. /*小写+数字+大写*/
  60. const arr1 = [
  61. letterSmall, // 包含小写字母
  62. number, // 包含数字
  63. letterBig, // 包含大写字母
  64. ];
  65. if (arr1.every((item) => item)) {
  66. callback();
  67. return;
  68. }
  69. /*小写+数字+特殊字符*/
  70. const arr2 = [
  71. letterSmall, // 包含小写字母
  72. number, // 包含数字
  73. specialWord, // 包含特殊字符
  74. ];
  75. if (arr2.every((item) => item)) {
  76. callback();
  77. return;
  78. }
  79. /*大写+数字+特殊字符*/
  80. const arr3 = [
  81. letterBig, // 包含大写字母
  82. number, // 包含数字
  83. specialWord, // 包含特殊字符
  84. ];
  85. if (arr3.every((item) => item)) {
  86. callback();
  87. return;
  88. }
  89. /*大写+特殊字符+小写*/
  90. const arr4 = [
  91. letterBig, // 包含大写字母
  92. specialWord, // 包含特殊字符
  93. letterSmall, // 包含小写字母
  94. ];
  95. if (arr4.every((item) => item)) {
  96. callback();
  97. return;
  98. }
  99. // 不通过
  100. callback('至少要有数字、大小写字母、符号中的三种');
  101. };
  102. return {
  103. rules: {
  104. originalPwd: {
  105. type: 'string',
  106. required: true,
  107. message: '请输入旧密码',
  108. trigger: ['change'],
  109. },
  110. password: [
  111. {
  112. type: 'string',
  113. required: true,
  114. message: '请输入新密码',
  115. trigger: ['change'],
  116. },
  117. {
  118. type: 'string',
  119. validator: pwdValidator,
  120. trigger: ['change'],
  121. },
  122. ],
  123. rePassword: {
  124. type: 'string',
  125. required: true,
  126. validator: (rule, value) => {
  127. return value === this.fmData.password;
  128. },
  129. message: '两次密码不一致',
  130. trigger: ['change'],
  131. },
  132. },
  133. fmData: {
  134. originalPwd: '',
  135. password: '',
  136. rePassword: '',
  137. },
  138. };
  139. },
  140. methods: {
  141. async handleComplete() {
  142. await this.$refs.uForm.validate();
  143. try {
  144. this.$c.loading();
  145. const { originalPwd, password, rePassword } = this.fmData;
  146. const params = {
  147. originalPwd: rsaEncrypt(originalPwd),
  148. password: rsaEncrypt(password),
  149. rePassword: rsaEncrypt(rePassword),
  150. };
  151. await editAdminPwd(params);
  152. uni.hideLoading();
  153. await this.$c.toast({
  154. icon: 'success',
  155. title: '修改成功',
  156. });
  157. uni.switchTab({
  158. url: '/pages/my/index',
  159. });
  160. } catch (e) {
  161. uni.hideLoading();
  162. console.error(e);
  163. }
  164. },
  165. },
  166. };
  167. </script>
  168. <style scoped lang="scss">
  169. .container {
  170. padding: $pg-pd;
  171. .u-form {
  172. background-color: #fff;
  173. margin-bottom: 100rpx;
  174. padding: 0px 30rpx;
  175. .u-form-item {
  176. }
  177. }
  178. }
  179. </style>