DemoStudentAddressForm.vue 1.3 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758
  1. <template>
  2. <el-form
  3. ref="formRef"
  4. :model="formData"
  5. :rules="formRules"
  6. label-width="100px"
  7. v-loading="formLoading"
  8. >
  9. <el-form-item label="子字段 1" prop="field1">
  10. <el-input v-model="formData.field1" placeholder="请输入字段 1" />
  11. </el-form-item>
  12. <el-form-item label="子字段 2" prop="field2">
  13. <el-input v-model="formData.field2" placeholder="请输入字段 2" />
  14. </el-form-item>
  15. <el-form-item label="子字段 3" prop="field3">
  16. <el-input v-model="formData.field3" placeholder="请输入字段 3" />
  17. </el-form-item>
  18. </el-form>
  19. </template>
  20. <script setup lang="ts">
  21. const props = defineProps<{
  22. studentId: undefined // 学生编号
  23. }>()
  24. const formLoading = ref(false) // 表单的加载中
  25. const formData = ref({})
  26. const formRules = reactive({
  27. field1: [required]
  28. })
  29. const formRef = ref() // 表单 Ref
  30. /** 监听主表的关联字段的变化,加载对应的子表数据 */
  31. watch(
  32. () => props.studentId,
  33. (val) => {
  34. if (val) {
  35. formData.value = {
  36. field2: '番茄',
  37. field3: '西瓜'
  38. }
  39. } else {
  40. formData.value = {}
  41. }
  42. },
  43. { immediate: true }
  44. )
  45. /** 表单校验 */
  46. const validate = () => {
  47. return formRef.value.validate()
  48. }
  49. /** 表单值 **/
  50. const getData = () => {
  51. return formData.value
  52. }
  53. defineExpose({ validate, getData })
  54. </script>