FormBuilder.vue 1.33 KB
<template>
  <div class="annual-param-container">
    <el-form ref="searchForm" label-suffix=":">
      <el-row :gutter="20" justify="space-evenly">
        <el-col
          v-for="(item, index) in props.schemas"
          :key="index"
          v-bind="item.colProps"
        >
          <el-form-item :label="item.label" :prop="item.prop">
            <component
              :is="components[item.type]"
              :prop="item.prop"
              :items="item.componentProps"
            ></component>
            <!-- <el-input v-model="queryPrarms" placeholder="请选择" /> -->
          </el-form-item>
        </el-col>
      </el-row>
    </el-form>
  </div>
  
</template>
<script setup>
import { defineProps, reactive, watch, ref } from "vue";
import mitter from "@/utils/mitter";
import components from "@/components/FormComponents/index"; // 将所有组件引入
const emit = defineEmits(["DataChange"]);
const props = defineProps({
  schemas: {
    type: Array,
    default: [],
  },
  formData: {
    type: Object,
    default: () => {},
  },
});
// 监听chageVal
mitter.on("changeVal", (data) => {
  const { name, value } = data;
  if (name) {
    props.formData[name] = value;
  }
});
watch(
  () => props.formData,
  (newVal) => {
    emit("DataChange", newVal);
  },
  { deep: true }
);
defineExpose({ formData: props.formData });
</script>