setpaswordModal.vue 4.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159
  1. <template>
  2. <BasicModal
  3. v-bind="$attrs"
  4. @register="register"
  5. @ok="handSubmit"
  6. :title="t('routes.staff.updateBtn')"
  7. @visible-change="handleVisibleChange"
  8. @cancel="resetFields"
  9. >
  10. <div class="pt-3px pr-3px">
  11. <BasicForm @register="registerForm" />
  12. </div>
  13. </BasicModal>
  14. </template>
  15. <script lang="ts">
  16. import { useI18n } from '/@/hooks/web/useI18n';
  17. import { encodeStr } from '/@/utils/encodeUtil';
  18. import { defineComponent, nextTick, ref } from 'vue';
  19. import { BasicModal, useModalInner } from '/@/components/Modal';
  20. import { BasicForm, FormSchema, useForm } from '/@/components/Form/index';
  21. import { updatePasswordApi } from '/@/api/staff/list';
  22. import { useMessage } from '/@/hooks/web/useMessage';
  23. import { useUserStore } from '/@/store/modules/user';
  24. const { createMessage } = useMessage();
  25. export default defineComponent({
  26. components: { BasicModal, BasicForm },
  27. props: {
  28. userData: { type: Object },
  29. },
  30. setup(props) {
  31. const { t } = useI18n();
  32. const userStore = useUserStore();
  33. const getUserInfo = userStore.getUserInfo;
  34. const preventAutoFill = ref(true);
  35. const schemas: FormSchema[] = [
  36. {
  37. field: 'id',
  38. component: 'Input',
  39. label: 'id',
  40. show: false,
  41. },
  42. {
  43. field: 'oldPassword',
  44. component: 'Input',
  45. label: '原密码',
  46. labelWidth: 120,
  47. required: true,
  48. colProps: { span: 18 },
  49. componentProps:{
  50. readonly:preventAutoFill.value,
  51. }
  52. },
  53. {
  54. field: 'password',
  55. component: 'StrengthMeter',
  56. label: '新密码',
  57. labelWidth: 120,
  58. required: true,
  59. rules: [
  60. {
  61. required: true,
  62. // @ts-ignore
  63. validator: async (rule, value) => {
  64. const regPos = /^(?![0-9]+$)(?![a-zA-Z]+$)[0-9A-Za-z]{8,16}$/; // 非中文
  65. if (!value) {
  66. return Promise.reject('请输入8-16位数字、字母大小写组合');
  67. }
  68. if (!regPos.test(value)) {
  69. /* eslint-disable-next-line */
  70. return Promise.reject('请输入8-16位数字、字母大小写组合');
  71. }
  72. return Promise.resolve();
  73. },
  74. trigger: 'change',
  75. },
  76. ],
  77. componentProps:{
  78. maxLength: 16,
  79. minLength: 8,
  80. readonly:preventAutoFill.value,
  81. placeholder:"请输入8-16位数字、字母大小写组合"
  82. },
  83. colProps: { span: 18 },
  84. },
  85. ];
  86. const [
  87. registerForm,
  88. {
  89. setFieldsValue,
  90. validate,
  91. resetFields,
  92. updateSchema,
  93. // setProps
  94. },
  95. ] = useForm({
  96. labelWidth: 120,
  97. schemas,
  98. showActionButtonGroup: false,
  99. actionColOptions: {
  100. span: 24,
  101. },
  102. });
  103. const [register, { closeModal }] = useModalInner((data) => {
  104. data && onDataReceive(data);
  105. });
  106. function onDataReceive(data) {
  107. preventAutoFill.value = false
  108. setTimeout(()=>{
  109. updateSchema([{
  110. field: 'oldPassword',
  111. componentProps:{
  112. readonly:false,
  113. }
  114. },{
  115. field: 'password',
  116. componentProps:{
  117. readonly:false,
  118. }
  119. }])
  120. },500)
  121. setFieldsValue({
  122. id: data.id,
  123. });
  124. }
  125. async function handSubmit() {
  126. console.log('getUserInfo',getUserInfo)
  127. const { id } = getUserInfo
  128. const { password,oldPassword } = await validate();
  129. await updatePasswordApi({
  130. id,
  131. newPassword: encodeStr(window.btoa(password)),
  132. oldPassword: encodeStr(window.btoa(oldPassword)),
  133. });
  134. createMessage.success(t('common.optSuccess'));
  135. resetFields();
  136. userStore.confirmLoginOut();
  137. }
  138. function handleVisibleChange(v) {
  139. v && props.userData && nextTick(() => onDataReceive(props.userData));
  140. }
  141. return {
  142. handSubmit,
  143. register,
  144. t,
  145. schemas,
  146. registerForm,
  147. handleVisibleChange,
  148. resetFields,
  149. };
  150. },
  151. });
  152. </script>