element form 二次封装

<template>
  <div>
    <!--
      form 总共包含 单选框 多选框 输入框 选择器 日期时间选择器
      formDate: {
        formModel: {}, // 表单数据对象
        rules: {}, // 	表单验证规则
        inline: false, // boolean	行内表单模式
        labelPosition:'', // right/left/top 表单域标签的位置,如果值为 left 或者 right 时,则需要设置 label-width
        formContent: [
          {
            formItemLabel: '', // 标签
            formType: 'text', // 判断类型
            Model: '', // 绑定值
            inputPlaceholder: '', // 提示语
            readonly: false, // boolean 只读
          },
          {
            formItemLabel: '', // 标签
            formType: 'select',
            Model: '',
            selectPlaceholder: '',
            checkType: '', // 当需要change方法时 用来做使用方法判断的
            options: [
              {
                value: '我是隐藏的和获取的值',
                label: '我是显示的值'
              }
            ] // 选项的值
          },
          {
            formItemLabel: '', // 标签
            formType: 'radio', // radioButton 按钮形式  radio 普通形式
            Model: '',
            size: '', // medium / small / mini	*Radio 的尺寸,仅在 border 为真时有效
            radio: [{
              label: '', // 标题
              disabled: false, // 禁用
              border: false // 边框 radio
            }]
          },
          {
            formItemLabel: '', // 标签
            formType: 'checkbox',
            Model: '',
            size: '', // medium / small / mini	*多选框组尺寸,仅对按钮形式的 Checkbox 或带有边框的 Checkbox 有效
            checkbox: [{
              label: '', // 标题
              disabled: false, // 禁用
              border: false // 边框 radio
            }]
          },
          {
            formItemLabel: '', // 标签
            formType: 'dateTimeDicker',
            Model: '',
            type: '', // year/month/date/dates/ week/datetime/datetimerange/ daterange/monthrange
            dateTimeDickerPlaceholder: '',
            format: '', // 格式
            valueFormat: '' // 格式
          }
        ],
      }
     -->
    <el-form
      :model="formDate.formModel"
      :rules="formDate.rules"
      :inline="formDate.inline"
      :label-position="formDate.labelPosition"
      label-width="auto"
    >
      <slot name="formTop" />
      <el-form-item
        v-for="(item, key) in formDate.formContent"
        :key="key"
        :label="item.formItemLabel"
        :prop="item.Model"
      >
        <!-- 输入框 -->
        <el-input
          v-if="item.formType == 'text' || item.formType == 'textarea'"
          v-model="formDate.formModel[item.Model]"
          :type="item.formType"
          :placeholder="item.inputPlaceholder"
          :readonly="item.readonly"
        />
        <!-- 选择器 -->
        <el-select
          v-if="item.formType == 'select'"
          v-model="formDate.formModel[item.Model]"
          :placeholder="item.selectPlaceholder"
          clearable
          filterable
          @change="selectChange(item.checkType)"
        >
          <el-option
            v-for="i in item.options"
            :key="i.value"
            :label="i.label"
            :value="i.value"
          />
        </el-select>
        <!-- 单选框 -->
        <el-radio-group
          v-if="item.formType == 'radio' || item.formType == 'radioButton'"
          v-model="formDate.formModel[item.Model]"
          :size="item.size"
        >
          <!-- 普通单选框 -->
          <template
            v-if="item.formType == 'radio'"
          >
            <el-radio
              v-for="(radio, key1) in item.radio"
              :key="key1"
              :label="radio.label"
              :border="radio.border"
              :disabled="radio.disabled"
            />
          </template>
          <!-- 按钮形式的单选框 -->
          <template
            v-if="item.formType == 'radioButton'"
          >
            <el-radio-button
              v-for="(radio, key1) in item.radio"
              :key="key1"
              :label="radio.label"
              :disabled="radio.disabled"
            />
          </template>
        </el-radio-group>
        <!-- 复选框 -->
        <el-checkbox-group
          v-model="formDate.formModel[item.Model]"
          :size="item.size"
        >
          <el-checkbox
            v-for="(checkbox, key2) in item.checkbox"
            :key="key2"
            :label="checkbox.label"
            :border="checkbox.border"
            :disabled="checkbox.disabled"
            :name="item.Model"
          >
            {{ checkbox.label }}
          </el-checkbox>
        </el-checkbox-group>
        <!-- 日期时间选择器 -->
        <el-date-picker
          v-if="item.formType == 'dateTimeDicker'"
          v-model="formDate.formModel[item.Model]"
          :type="item.type"
          :placeholder="item.dateTimeDickerPlaceholder"
          :format="item.format"
          :value-format="item.valueFormat"
        />
      </el-form-item>
    </el-form>
  </div>
</template>
<script>
export default {
  props: {
    formDate: {
      type: Object,
      default: () => {}
    }
  },
  methods: {
    selectChange(checkType) {
      console.log(checkType)
      if (checkType === undefined) {
        // console.log('und')
      } else {
        console.log('父组件方法')
        this.$emit('selectChange', checkType)
      }
    }
  }
}
</script>

上一篇:微信小程序 checkbox 复选框标签


下一篇:el-table使用checkbox时,获取选中数据的id?