vue + elementui: el-form

最近发现form表单的字段很多,但是又不想一个一个写的,想到可以json+for去处理。

第一步:封装一个form组件。

       <el-form
          ref="form"
          :model="form"
          label-width="150px"
          class="demo-dynamic flex"
        >
          <el-form-item
            :label="item.label"
            v-for="(item, index) in form.list"
            :key="item.label + index"
            :rules="item.rules"
            :prop="'list.' + index + '.value'"
            class="item"
          >
            <el-upload
              v-if="item.type == 'image'"
              class="avatar-uploader"
              action="https://jsonplaceholder.typicode.com/posts/"
              :show-file-list="false"
              :on-success="handleAvatarSuccess"
            >
              <img v-if="item.value" :src="item.value" class="avatar" />
              <i v-else class="el-icon-plus avatar-uploader-icon"></i>
            </el-upload>

            <el-input
              v-if="item.type == 'text'"
              placeholder="请输入内容"
              v-model="item.value"
              :disabled="item.disabled"
              class="input"
            ></el-input>
            <el-select
              v-if="item.type == 'select'"
              v-model="item.value"
              placeholder="请选择"
              :multiple="item.multiple"
              :collapse-tags="item.multiple"
            >
              <el-option
                v-for="(e, i) in item.list"
                :key="i"
                :label="e.label"
                :value="e.value"
              >
              </el-option>
            </el-select>
            <el-date-picker
              v-model="item.value"
              v-if="item.type == 'date'"
              type="date"
              placeholder="选择日期"
            ></el-date-picker>
            <el-date-picker
              v-model="item.value"
              v-if="item.type == 'time'"
              type="datetime"
              placeholder="选择日期时间"
            >
            </el-date-picker>
            <el-select
              v-model="item.value"
              v-if="item.type == 'selectSearch'"
              filterable
              remote
              reserve-keyword
              placeholder="请输入关键词"
              :remote-method="remoteMethod"
              :loading="loading"
            >
              <el-option
                v-for="(e, i) in selectSearchList"
                :key="i"
                :label="e.label"
                :value="e.value"
              >
              </el-option>
            </el-select>
          </el-form-item>
        </el-form>


  props: {
    data: {
      type: Array,
      default: () => [],
    },
   
  },
  data() {
    return {
      form: {
        list: this.data,
      },
    };
  },

第二步:引用组件。

    <Form
      :data="json.list" //引用json文件中数据
    ></Form>

import Form from "@/views/delivery/components/formAll.vue"; //刚才定义的组件

export default {
  components: { Form },

第三步:定义需要展示的json字段。

            "list": [
                {
                    "label": "业务类型", //el-form-item 的label
                    "disabled": true,   //字段是否只读
                    "required": false,  //是否必填
                    "type": "text",    // form中需要展示什么类型的输入框,可自己定义
                    "value": "",       //输入的值
                    "rules": []        //el-form-item的表单字段的校验
                },
                {
                    "label": "所有人",
                    "disabled": false,
                    "required": true,
                    "type": "selectSearch",
                    "value": "",
                    "rules": [
                        {
                            "required": true,
                            "message": "请选择",
                            "trigger": "change"
                        }
                    ]
                },
            ]

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值