index.vue 2.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107
  1. <template>
  2. <a-form
  3. autocomplete="off"
  4. >
  5. <a-form-item
  6. v-for="item in modelRef"
  7. :key="item.id"
  8. :label="item.label"
  9. name="7788"
  10. v-bind="validateInfos[item.key]"
  11. >
  12. <a-input v-model:value="item[item.key]" />
  13. </a-form-item>
  14. <!-- <a-form-item label="测试title" v-bind="validateInfos.modelLabel">
  15. <a-input v-model:value="modelRef.modelLabel" />
  16. </a-form-item> -->
  17. </a-form>
  18. </template>
  19. <script lang='ts' setup >
  20. import { onMounted, reactive, toRaw, computed } from 'vue'
  21. import { Form } from 'ant-design-vue'
  22. import { useId } from '@/hooks'
  23. /**
  24. * 将submit的提交抛出去
  25. */
  26. export interface FormItemProps {
  27. rules?: {required: boolean, message: string} | boolean,
  28. type: COMMON.COMPONENTS.ComType,
  29. key: string,
  30. value?: any,
  31. label: string,
  32. request?: () => {
  33. id?: string,
  34. name?: string,
  35. value: any,
  36. key: any
  37. }
  38. }
  39. export interface FormProProps {
  40. reset: boolean // 是否开启一键reset表单
  41. dire: 'h' | 'v', // 布局方式 默认横向布局
  42. formProps: FormItemProps[] // 表单props
  43. [key: string]: any
  44. }
  45. const useForm = Form.useForm
  46. // const props = defineProps<FormProProps>()
  47. const props: FormProProps = {
  48. dire: 'h',
  49. reset: true,
  50. formProps: [{
  51. rules: {
  52. required: true,
  53. message: '此项为必填项'
  54. },
  55. type: 'input',
  56. key: 'modelLabel',
  57. label: '测试title'
  58. }]
  59. }
  60. const modelRef = reactive<Record<string, any>>({})
  61. const rulesRef = reactive<Record<string, any>>({})
  62. props.formProps.forEach(item => {
  63. rulesRef[item.key] = [item.rules]
  64. modelRef[item.key] = item.value
  65. })
  66. const { resetFields, validate, validateInfos } = useForm(modelRef, rulesRef, {
  67. onValidate: (...args) => console.log(...args)
  68. })
  69. console.log(rulesRef)
  70. console.log('validateInfos:', validateInfos)
  71. const onSubmit = () => {
  72. console.log('onSubmit')
  73. validate()
  74. .then(() => {
  75. console.log(toRaw(modelRef))
  76. })
  77. .catch(err => {
  78. console.log('error', err)
  79. })
  80. }
  81. defineExpose({
  82. onSubmit
  83. })
  84. const reset = () => {
  85. // resetFields
  86. }
  87. </script>
  88. <style lang="less" scope >
  89. </style>