hooks.ts 2.2 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586
  1. import {addUser, editUser} from '@apis';
  2. import {usePutData} from '@hooks';
  3. import {AddUserParams} from '@models';
  4. import {formatValidateError} from '@utils';
  5. import {toTypedSchema} from '@vee-validate/zod';
  6. import {useForm} from 'vee-validate';
  7. import {Ref, watchEffect} from 'vue';
  8. import {object, string} from 'zod';
  9. export type FormState = Omit<AddUserParams, 'auditAuthority'>
  10. & {auditAuthority: string[]};
  11. export function useFormState(
  12. id: Ref<string>,
  13. visible: Ref<boolean>,
  14. options: {onFetch: () => void, onClose: () => void},
  15. ) {
  16. const {handleSubmit, setErrors, setValues} = useForm<FormState>({
  17. initialValues: {
  18. userName: '',
  19. realName: '',
  20. email: '',
  21. phone: '',
  22. role: '',
  23. auditAuthority: [] as string[],
  24. },
  25. validationSchema: toTypedSchema(object({
  26. userName: string(formatValidateError('user.modal.errors[0]'))
  27. .min(1, 'user.modal.errors[0]'),
  28. realName: string(formatValidateError('user.modal.errors[1]'))
  29. .min(1, 'user.modal.errors[1]'),
  30. email: string(formatValidateError('user.modal.errors[2]'))
  31. .email('user.modal.errors[3]'),
  32. phone: string(formatValidateError('user.modal.errors[4]'))
  33. .min(1, 'user.modal.errors[4]'),
  34. role: string(formatValidateError('user.modal.errors[5]'))
  35. .min(1, 'user.modal.errors[5]'),
  36. auditAuthority: string().array(),
  37. })),
  38. });
  39. watchEffect(function() {
  40. if (visible.value) {
  41. setErrors({
  42. userName: void 0,
  43. realName: void 0,
  44. email: void 0,
  45. phone: void 0,
  46. role: void 0,
  47. });
  48. }
  49. });
  50. const {onFetch, onClose} = options;
  51. const [isLoading, {addMutate, editMutate}] = usePutData({
  52. addFn: addUser,
  53. editFn: editUser,
  54. onFetch,
  55. onClose,
  56. });
  57. const onSubmit = handleSubmit(function({
  58. userName,
  59. realName,
  60. email,
  61. phone,
  62. role,
  63. auditAuthority,
  64. }) {
  65. const parasm: AddUserParams = {
  66. userName,
  67. realName,
  68. email,
  69. phone,
  70. role,
  71. auditAuthority: auditAuthority.join(','),
  72. };
  73. id.value.length > 0
  74. ? editMutate({id: id.value, ...parasm})
  75. : addMutate(parasm);
  76. });
  77. return [isLoading, {setValues, onSubmit}] as const;
  78. }