el-table加星标和表单验证以及控制单元格样式

1. 表头加星标

利用el-table-column中的插槽

<template #header>
   <span style="color: red; margin-right: 4px">*</span>
   <span>金额(元)</span>
</template>

2.表单验证

 用el-form将table表格包裹起来

<el-form :inline="true" v-model="dataLists" :rules="rules">
   <el-table
     ref="tableReim"
     :data="dataLists.tableDataReim"
      :cell-class-name="setCellStyle"
   >
      <el-table-column
                label="金额(元)"
                show-overflow-tooltip
                width="250"
                header-align="center"
                prop="amount"
              >
                <template #header>
                  <span style="color: red; margin-right: 4px">*</span>
                  <span>金额(元)</span>
                </template>
                <template #default="scope">
                  <el-form-item
                    size="mini"
                    :prop="'tableDataReim.' + scope.$index + '.amount'"
                    :rules="{
                      validator: isMoney,
                      prodObj: scope.row,
                      trigger: 'change',
                    }"
                  >
                    <el-input
                      size="small"
                      maxlength="20"
                      v-model="scope.row.amount"
                      
                    />
                    <span>{{ scope.row.amount }}</span>
                  </el-form-item>
                </template>
              </el-table-column></el-table>
</el-form>

注意el-form-item中prop值的绑定,isMoney为自定义规则,

 const isMoney = (rule: any, value: any, callback: any) => {
      var regs = /^\d+(\.\d+)?$/;
      var j = regs.test(rule.prodObj.amount);
      if (rule.prodObj.amount) {
        errorRow = rule.prodObj;
        if (!j) {
          isAdd.value = true;
          callback(new Error("请输入正确的金额格式"));
        } else {
          
          callback();
        }
      } 
    };

3.为满足条件的单元格设置额外样式 

需要用到el-table的cell-class-name属性,也可以使用cell-style属性,如何使用看官方文档。

我这里用的是cell-class-name,绑定的是一个函数,函数返回一个类名。

function setCellStyle({ row, column, rowIndex, columnIndex }: any) {
      if (row.amount == "" && column.label == "金额(元)") {
//row.amount是这一行金额的数据,column.label是表头,其他同理,实在不知道,就打印出来看
        return "cellStyle";
      }
      if (row.mainUses == "" && column.label == "用途") {
        return "cellStyle";
      }
      if (row.payeeName == "" && column.label == "收款人名称") {
        return "cellStyle";
      }
      if (row.payeeBank == "" && column.label == "开户行") {
        return "cellStyle";
      }
      if (row.payeeAccount == "" && column.label == "银行账号") {
        return "cellStyle";
      }
    }
        /deep/.cellStyle {
            background-color: rgba(255, 0, 0, 0.12) !important;
          }

当类名嵌套过深,可以在前面加上/deep/

根据提供的引用内容,我们可以得知el-tableelement-ui中的一个表格组件,而el-cascader是一个级联选择器组件。如果要在el-table中使用el-cascader,并且要求el-cascader必填,可以通过以下步骤实现: 1. 在el-table中使用el-cascader组件,并将el-cascader的v-model绑定到数据源中。 2. 在el-cascader组件上添加一个ref属性,以便在后面的步骤中可以访问该组件。 3. 在el-table的表头中添加一个自定义列,该列包含一个自定义的表头模板和一个自定义的单元格模板。 4. 在自定义的表头模板中添加一个必填的标记,例如一个红色的星号。 5. 在自定义的单元格模板中添加一个验证逻辑,以确保el-cascader已经选择了一个值。可以使用$refs访问el-cascader组件,并使用其validate()方法进行验证。 下面是一个示例代码,演示如何在el-table中使用el-cascader并进行必填校验: ```html <template> <el-table :data="tableData"> <el-table-column prop="name" label="姓名"></el-table-column> <el-table-column prop="address" label="地址"></el-table-column> <<el-table-column label="级联选择器"> <template slot-scope="scope"> <el-cascader v-model="scope.row.cascaderValue" :options="cascaderOptions" ref="cascader" placeholder="请选择" clearable ></el-cascader> </template> <template slot="header"> <span>级联选择器</span> <span style="color: red">*</span> </template> </el-table-column>> <el-table-column label="操作"> <template slot-scope="scope"> <el-button type="primary" @click="handleValidate(scope.row)">验证</el-button> </template> </el-table-column> </el-table> </template> <script> export default { data() { return { tableData: [ { name: "张三", address: "北京", cascaderValue: [] }, { name: "李四", address: "上海", cascaderValue: [] }, { name: "王五", address: "广州", cascaderValue: [] } ], cascaderOptions: [ { value: "beijing", label: "北京", children: [ { value: "chaoyang", label: "朝阳区" }, { value: "haidian", label: "海淀区" } ] }, { value: "shanghai", label: "上海", children: [ { value: "pudong", label: "浦东新区" }, { value: "minhang", label: "闵行区" } ] }, { value: "guangzhou", label: "广州", children: [ { value: "tianhe", label: "天河区" }, { value: "yuexiu", label: "越秀区" } ] } ] }; }, methods: { handleValidate(row) { this.$refs.cascader.forEach(cascader => { cascader.clearValidate(); if (!cascader.cascaderValue || cascader.cascaderValue.length === 0) { cascader.validate(); } }); } } }; </script> ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值