elementUI el-table动态表格及操作

html结构:

        <!-- 规格表单 -->
        <div class="add-norms">
            <el-form :model="addForm" ref="addForm" :label-width="formLabelWidth" :rules="rules" class="normsForm"
                     label-position="left">

                <el-form-item label="规格名称" prop="name">
                    <el-input v-model="addForm.name" placeholder="请输入规格名称"></el-input>

                    <div>
                        <span class="el-icon-info" style="font-size: 15px;color: #2DACFF;margin-right: 0.5%"></span>
                        <span>请填写常用的商品规格的名称;例如:颜色;尺寸等。</span>
                    </div>
                </el-form-item>
                <el-form-item label="规格序号" prop="sequence">
                    <el-input v-model.number="addForm.sequence"
                              placeholder="请输入规格序号"></el-input>

                    <div>
                        <span class="el-icon-info" style="font-size: 15px;color: #2DACFF;margin-right: 0.5%"></span>
                        <span>请填写整数。</span>
                    </div>
                </el-form-item>

                <el-divider></el-divider>

                <div style="display: flex">
                    <CloudTitle>规格值</CloudTitle>
                    <el-button type="text" icon="el-icon-plus"
                               @click="addDomain" style="margin-left: 1%"
                               size="mini">
                        添加
                    </el-button>
                </div>
                <el-table :data="addForm.properties" border class="normTable">
                    <el-table-column label="排序" min-width="2">
                        <template slot-scope="scope">
                            <el-form-item :prop="'properties.' + scope.$index + '.sequence'"
                                          :rules="rules.properties.sequence" label-width="0px">
                                <el-input
                                        style="width:250px"
                                        v-model.number="scope.row.sequence"
                                ></el-input>
                            </el-form-item>
                        </template>
                    </el-table-column>
                    <el-table-column label="规格值" min-width="2">
                        <template slot-scope="scope">
                            <el-form-item :prop="'properties.' + scope.$index + '.value'"
                                          :rules="rules.properties.value" label-width="0px">
                                <el-input
                                        style="width:250px"
                                        v-model="scope.row.value"
                                ></el-input>
                            </el-form-item>
                        </template>
                    </el-table-column>
                    <el-table-column label="操作" min-width="1">
                        <template slot-scope="scope">
                            <el-button type="text" icon="el-icon-delete"
                                       @click="removeDomain(scope.row)"
                                       circle size="mini">
                                删除
                            </el-button>
                        </template>
                    </el-table-column>
                </el-table>
            </el-form>
        </div>

        <!-- 底部按钮 -->
        <div class="btn">
            <el-button @click="back">取消</el-button>
            <el-button type="primary" @click="save">保存</el-button>
        </div>

重点是el-form-item的动态prop和rules

:prop="'properties.' + scope.$index + '.value'"
:rules="rules.properties.value" 

data:

	  //表单标签宽度
	  formLabelWidth: '85px',
	  //表格值
	  addForm: {
	      properties: []
	  },
      //验证规则
      rules: {
          name: [required("请输入名称")],
          sequence: [integerGreaterThanOrEqualToZero("请输入规格序号且为整数")],

          //动态表单验证规则
          properties: [{
               value: [required('请输入规格值')],
               sequence: [integerGreaterThanOrEqualToZero('请输入排序且为整数')]
         }]
     }

requeired,integerGreaterThanOrEqualToZero是项目封装的验证规则,根据需要自改一下吧

method:

  //新增规格值
  addDomain() {
      this.addForm.properties.push({
          sequence: 0,
          value: ''
      });
      this.rules.properties.push(this.rules.properties[0]);
  },

  //删除规格值
  removeDomain(item) {
      let index = this.addForm.properties.indexOf(item)
      if (index !== -1) {
          this.addForm.properties.splice(index, 1)
  }
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

01_Carrortwhisker

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值