setpaswordModal.vue 3.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124
  1. <template>
  2. <BasicModal
  3. v-bind="$attrs"
  4. @register="register"
  5. @ok="handSubmit"
  6. :title="t('routes.system.password')"
  7. :min-height="100"
  8. @visible-change="handleVisibleChange"
  9. @cancel="resetFields"
  10. >
  11. <div class="pt-3px pr-3px">
  12. <BasicForm @register="registerForm" />
  13. </div>
  14. </BasicModal>
  15. </template>
  16. <script lang="ts">
  17. import { useI18n } from '/@/hooks/web/useI18n';
  18. import { encodeStr } from '/@/utils/encodeUtil';
  19. import { defineComponent, nextTick, ref } from 'vue';
  20. import { BasicModal, useModalInner } from '/@/components/Modal';
  21. import { BasicForm, FormSchema, useForm } from '/@/components/Form/index';
  22. import { updatePasswordApi } from '/@/api/staff/list';
  23. import { useMessage } from '/@/hooks/web/useMessage';
  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 preventAutoFill = ref(true);
  33. const schemas: FormSchema[] = [
  34. {
  35. field: 'id',
  36. component: 'Input',
  37. label: 'id',
  38. show: false,
  39. },
  40. {
  41. field: 'password',
  42. component: 'StrengthMeter',
  43. label: t('sys.login.password'),
  44. labelWidth: 100,
  45. required: true,
  46. rules: [
  47. {
  48. required: true,
  49. // @ts-ignore
  50. validator: async (rule, value) => {
  51. console.log('value',value)
  52. const regPos = /^(?=.*[a-z])(?=.*[A-Z])(?=.*\d)[a-zA-Z\d]{8,}$/; // 非中文
  53. if (!value) {
  54. return Promise.reject(t('code.3011'));
  55. }
  56. if (!regPos.test(value)) {
  57. /* eslint-disable-next-line */
  58. return Promise.reject(t('code.3011'));
  59. }
  60. return Promise.resolve();
  61. },
  62. trigger: 'change',
  63. },
  64. ],
  65. componentProps:{
  66. placeholder: t('code.3011'),
  67. maxLength: 16,
  68. minLength: 8,
  69. },
  70. colProps: { span: 18 },
  71. },
  72. ];
  73. const [
  74. registerForm,
  75. {
  76. setFieldsValue,
  77. validate,
  78. resetFields,
  79. // setProps
  80. },
  81. ] = useForm({
  82. labelWidth: 120,
  83. schemas,
  84. showActionButtonGroup: false,
  85. actionColOptions: {
  86. span: 24,
  87. },
  88. });
  89. const [register, { closeModal }] = useModalInner((data) => {
  90. data && onDataReceive(data);
  91. });
  92. function onDataReceive(data) {
  93. setFieldsValue({
  94. id: data.id,
  95. });
  96. }
  97. async function handSubmit() {
  98. const { id, password } = await validate();
  99. await updatePasswordApi({ id, newPassword: encodeStr(window.btoa(password)) });
  100. createMessage.success(t('common.optSuccess'));
  101. resetFields();
  102. closeModal();
  103. }
  104. function handleVisibleChange(v) {
  105. v && props.userData && nextTick(() => onDataReceive(props.userData));
  106. }
  107. return {
  108. handSubmit,
  109. register,
  110. t,
  111. schemas,
  112. registerForm,
  113. handleVisibleChange,
  114. resetFields,
  115. };
  116. },
  117. });
  118. </script>