# 表单元素通用配置

# 规则校验

<template>
  <div id="app">
    <RenderForm ref="form" :fields="fields" :formItemCol="12">
      <template #submit>
        <el-button type="primary" @click="validate">校验数据</el-button>
      </template>
    </RenderForm>
  </div>
</template>
<script>
export default {
  data() {
    return {
      fields: [
        {
          label: "典型表单",
          children: [
            {
              label: "活动名称",
              type: "input",
              key: "name",
              rules: [
                { required: true, message: "请输入活动名称", trigger: "blur" },
                {
                  min: 3,
                  max: 5,
                  message: "长度在 3 到 5 个字符",
                  trigger: "blur",
                },
              ],
            },
            {
              label: "活动区域",
              type: "select",
              key: "region",
              options: [
                {
                  label: "区域1",
                  value: "beijing",
                },
                {
                  label: "区域2",
                  value: "shanghai",
                },
              ],
              rules: [
                {
                  required: true,
                  message: "请选择活动区域",
                  trigger: "change",
                },
              ],
            },
            {
              label: "活动时间",
              type: "date",
              key: "date",
              props: {
                type: "datetime",
              },
              rules: [
                {
                  type: "date",
                  required: true,
                  message: "请选择日期",
                  trigger: "change",
                },
              ],
            },
            {
              label: "即时配送",
              type: "switch",
              key: "delivery",
              defaultValue: true,
            },
            {
              label: "活动性质",
              type: "checkbox",
              key: "type",
              options: [
                {
                  label: "美食/餐厅线上活动",
                  value: 1,
                },
                {
                  label: "地推活动",
                  value: 2,
                },
                {
                  label: "线下主题活动",
                  value: 3,
                },
                {
                  label: "单纯品牌曝光",
                  value: 4,
                },
              ],
              rules: [
                {
                  type: "array",
                  required: true,
                  message: "请至少选择一个活动性质",
                  trigger: "change",
                },
              ],
            },
            {
              label: "特殊资源",
              key: "resource",
              type: "radio",
              options: [
                {
                  label: "线上品牌商赞助",
                  value: 1,
                },
                {
                  label: "线下场地免费",
                  value: 2,
                },
              ],
              defaultValue: 1,
              rules: [
                {
                  required: true,
                  message: "请选择活动资源",
                  trigger: "change",
                },
              ],
            },
            {
              label: "活动形式",
              key: "desc",
              type: "input",
              props: {
                type: "textarea",
              },
              rules: [
                { required: true, message: "请填写活动形式", trigger: "blur" },
              ],
            },
            {
              name: "submit",
              type: "slot",
              label: "",
              nextRowFirst: true,
            },
          ],
        },
      ],
    };
  },
  methods: {
    validate() {
      this.$refs.form.validate().then((valid) => {
        console.log(valid);
      });
    },
  },
};
</script>
Expand Copy

# 默认值

<template>
  <div id="app">
    <RenderForm ref="form" :fields="fields"> </RenderForm>
  </div>
</template>
<script>
export default {
  data() {
    return {
      fields: [
        {
          label: "基础用法",
          children: [
            {
              label: "活动名称",
              type: "input",
              key: "name",
              defaultValue: "默认名称",
            },
            {
              label: "活动区域",
              type: "select",
              key: "region",
              defaultValue: "shanghai",
              options: [
                {
                  label: "区域1",
                  value: "beijing",
                },
                {
                  label: "区域2",
                  value: "shanghai",
                },
              ],
            },
            {
              label: "活动时间",
              type: "date",
              key: "date",
              defaultValue: new Date(),
              props: {
                type: "datetime",
              },
            },
            {
              label: "即时配送",
              type: "switch",
              key: "delivery",
              defaultValue: true,
            },
            {
              label: "活动性质",
              type: "checkbox",
              key: "type",
              defaultValue: [2, 3],
              options: [
                {
                  label: "美食/餐厅线上活动",
                  value: 1,
                },
                {
                  label: "地推活动",
                  value: 2,
                },
                {
                  label: "线下主题活动",
                  value: 3,
                },
                {
                  label: "单纯品牌曝光",
                  value: 4,
                },
              ],
            },
            {
              label: "特殊资源",
              key: "resource",
              type: "radio",
              options: [
                {
                  label: "线上品牌商赞助",
                  value: 1,
                },
                {
                  label: "线下场地免费",
                  value: 2,
                },
              ],
              defaultValue: 1,
            },
            {
              label: "活动形式",
              key: "desc",
              type: "input",
              props: {
                type: "textarea",
              },
              defaultValue: "默认活动形式",
            },
          ],
        },
      ],
    };
  },
};
</script>
Expand Copy

# 布局设置

formItemCol:form-item占据的大小
formItemSize:表单元素占据form-item的大小
<template>
  <div id="app">
    <div>
      formItemCol:form-item占据的大小
      <el-radio-group v-model="formItemCol">
        <el-radio-button :label="24">Span24</el-radio-button>
        <el-radio-button :label="12">Span12</el-radio-button>
        <el-radio-button :label="6">Span6</el-radio-button>
      </el-radio-group>
    </div>
    <div>
      formItemSize:表单元素占据form-item的大小
      <el-radio-group v-model="formItemSize">
        <el-radio-button label="80%"></el-radio-button>
        <el-radio-button label="50%"></el-radio-button>
        <el-radio-button label="20%"></el-radio-button>
      </el-radio-group>
    </div>
    <RenderForm
      :fields="fields"
      :formItemCol="formItemCol"
      :formItemSize="formItemSize"
    >
      <template #submit>
        <el-button type="primary">提交</el-button>
      </template>
    </RenderForm>
  </div>
</template>
<script>
export default {
  data() {
    return {
      formItemCol: 12,
      formItemSize: "80%",
      fields: [
        {
          label: "表单布局",
          children: [
            {
              label: "活动名称",
              type: "input",
              key: "name",
            },
            {
              label: "活动区域",
              type: "select",
              key: "region",
              options: [
                {
                  label: "区域1",
                  value: "beijing",
                },
                {
                  label: "区域2",
                  value: "shanghai",
                },
              ],
            },
            {
              label: "活动时间",
              type: "date",
              key: "date",
              props: {
                type: "datetime",
              },
            },
            {
              label: "即时配送",
              type: "switch",
              key: "delivery",
              defaultValue: true,
            },
            {
              label: "活动性质",
              type: "checkbox",
              key: "type",
              options: [
                {
                  label: "美食/餐厅线上活动",
                  value: 1,
                },
                {
                  label: "地推活动",
                  value: 2,
                },
                {
                  label: "线下主题活动",
                  value: 3,
                },
                {
                  label: "单纯品牌曝光",
                  value: 4,
                },
              ],
            },
            {
              label: "特殊资源",
              key: "resource",
              type: "radio",
              options: [
                {
                  label: "线上品牌商赞助",
                  value: 1,
                },
                {
                  label: "线下场地免费",
                  value: 2,
                },
              ],
              defaultValue: 1,
            },
            {
              label: "活动形式",
              key: "desc",
              type: "input",
              props: {
                type: "textarea",
              },
              span: 12,
            },
            {
              name: "submit",
              type: "slot",
              label: "",
              nextRowFirst: true,
            },
          ],
        },
      ],
    };
  },
};
</script>
Expand Copy