form.vue 1.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960
  1. <template>
  2. <div style="width: 100%;">
  3. <CtForm ref="formPageRef" :items="items"></CtForm>
  4. </div>
  5. </template>
  6. <script setup>
  7. defineOptions({name: 'headhunting-form'})
  8. import { reactive, ref, defineExpose } from 'vue'
  9. const formPageRef = ref()
  10. let query = reactive({})
  11. const items = ref({
  12. options: [
  13. {
  14. type: 'text',
  15. key: 'name',
  16. value: '',
  17. default: null,
  18. label: '姓名 *',
  19. outlined: true,
  20. rules: [v => !!v || '请输入姓名']
  21. },
  22. {
  23. type: 'phoneNumber',
  24. key: 'phone',
  25. value: '',
  26. clearable: true,
  27. label: '联系手机号 *',
  28. rules: [v => !!v || '请填写联系手机号']
  29. },
  30. {
  31. type: 'text',
  32. key: 'enterpriseName',
  33. value: '',
  34. default: null,
  35. label: '企业名称 *',
  36. outlined: true,
  37. rules: [v => !!v || '请输入企业名称']
  38. },
  39. ]
  40. })
  41. const getQuery = async () => {
  42. const { valid } = await formPageRef.value.formRef.validate()
  43. if (!valid) return false
  44. const obj = {}
  45. items.value.options.forEach(e => {
  46. obj[e.key] = e.value
  47. })
  48. query = Object.assign(query, obj)
  49. return query
  50. }
  51. defineExpose({
  52. getQuery
  53. })
  54. </script>