AIoT前端公共UI

FormItem.vue 3.8KB

    <!-- eslint-disable vue/no-mutating-props --> <!-- * @Author: Devin * @Date: 2022-11-15 11:30:12 * @LastEditors: Devin * @LastEditTime: 2023-02-17 16:25:12 * @Description: ts工程开发 --> <template> <el-form-item ref="ruleFormRef" class="aiot-el-form-item" :prop="formItem?.name || ''" :rules="formItem?.rules || []" :label="formItem?.label || ''" > <!-- input --> <el-input v-if="formItem.type === 'input'" v-bind="formItem?.attrs" v-model="formValues[formItem.name]" class="__common-form-item" @change="changeEvent(formItem)" ></el-input> <el-input v-if="formItem.type === 'textarea'" v-bind="formItem?.attrs" v-model="formValues[formItem.name]" type="textarea" class="__common-form-item" @change="changeEvent(formItem)" ></el-input> <!-- select --> <common-select v-if="formItem.type === 'select'" v-bind="formItem?.attrs" v-model="formValues[formItem.name]" class="__common-form-item" @change="changeEvent(formItem)" ></common-select> <!-- number --> <el-input-number v-if="formItem.type === 'input-num'" v-bind="formItem?.attrs" v-model="formValues[formItem.name]" class="__common-form-item" @change="changeEvent(formItem)" ></el-input-number> <!-- radio --> <el-radio v-if="formItem.type === 'radio'" v-bind="formItem?.attrs" v-model="formValues[formItem.name]" @change="changeEvent(formItem)" ></el-radio> <common-radio-group v-if="formItem.type === 'radio-group'" v-bind="formItem?.attrs" v-model="formValues[formItem.name]" @change="changeEvent(formItem)" ></common-radio-group> <!-- cascader --> <el-cascader v-if="formItem.type === 'cascader'" v-bind="formItem?.attrs" v-model="formValues[formItem.name]" class="__common-form-item" @change="changeEvent(formItem)" ></el-cascader> <!--switch--> <el-switch v-if="formItem.type === 'switch'" v-bind="formItem?.attrs" v-model="formValues[formItem.name]" @change="changeEvent(formItem)" ></el-switch> <!-- checkbox --> <el-checkbox v-if="formItem.type === 'checkbox'" v-bind="formItem?.attrs" v-model="formValues[formItem.name]" @change="changeEvent(formItem)" ></el-checkbox> <!-- chckgroup --> <common-check-group v-if="formItem.type === 'check-group'" v-model="formValues[formItem.name]" v-bind="formItem?.attrs" @change="changeEvent(formItem)" ></common-check-group> <!-- date-picker --> <el-date-picker v-if="formItem.type === 'date-picker'" v-bind="formItem?.attrs" v-model="formValues[formItem.name]" class="__common-form-item" @change="changeEvent(formItem)" ></el-date-picker> </el-form-item> </template> <script setup lang="ts"> import { defineEmits, ref } from 'vue'; import CommonCheckGroup from './CheckGroup.vue'; import CommonRadioGroup from './RadioGroup.vue'; defineProps({ formItem: { type: Object, default: () => {} }, formValues: { type: Object, default: () => {} } }); const emits = defineEmits(['changeEvent']); // 触发change事件 const changeEvent = (form: any) => { emits('changeEvent', form); }; // 校验规则 const ruleFormRef = ref(null); function checkRules() { ruleFormRef.value!.validate((valid: any) => { if (valid) { return true; } return false; }); } defineExpose({ ruleFormRef, checkRules }); </script> <style lang="scss"> .aiot-el-form-item { width: calc(100% - 24px); // margin-bottom: 10 !important; margin-bottom: 0 !important; margin-top: 18px !important; } .__common-form-item { width: 100%; display: block; .el-input__wrapper { width: 100%; } } </style>