setpaswordModal.vue 3.5 KB

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