Write.vue 1.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263
  1. <script setup lang="ts">
  2. import { Form, FormSchema } from '@/components/Form'
  3. import { useForm } from '@/hooks/web/useForm'
  4. import { PropType, reactive, watch } from 'vue'
  5. import { DepartmentUserItem } from '@/api/department/types'
  6. import { useValidator } from '@/hooks/web/useValidator'
  7. const { required } = useValidator()
  8. const props = defineProps({
  9. currentRow: {
  10. type: Object as PropType<DepartmentUserItem>,
  11. default: () => undefined
  12. },
  13. formSchema: {
  14. type: Array as PropType<FormSchema[]>,
  15. default: () => []
  16. }
  17. })
  18. const rules = reactive({
  19. username: [required()],
  20. account: [required()],
  21. 'department.id': [required()],
  22. role: [required()],
  23. email: [required()],
  24. createTime: [required()]
  25. })
  26. const { formRegister, formMethods } = useForm()
  27. const { setValues, getFormData, getElFormExpose } = formMethods
  28. const submit = async () => {
  29. const elForm = await getElFormExpose()
  30. const valid = await elForm?.validate().catch((err) => {
  31. console.log(err)
  32. })
  33. if (valid) {
  34. const formData = getFormData()
  35. return formData
  36. }
  37. }
  38. watch(
  39. () => props.currentRow,
  40. (currentRow) => {
  41. if (!currentRow) return
  42. setValues(currentRow)
  43. },
  44. {
  45. deep: true,
  46. immediate: true
  47. }
  48. )
  49. defineExpose({
  50. submit
  51. })
  52. </script>
  53. <template>
  54. <Form :rules="rules" @register="formRegister" :schema="formSchema" />
  55. </template>