vxe-table使用记录

2,096 阅读2分钟

最近项目在用vxe-table作为表格的开发插件。所以在这里记录下踩过的坑,算是加深下自己的记忆。

可编辑表格中如果最后一行为合计,则最后一行的可编辑单元格为不可编辑状态。

vxe-table中一个属性是edit-config的activeMethod。如果最后一行的rowType为‘1’,则返回false,否则返回true

<vxe-grid
  border
  ref="xTable"
  :height="tableHeight"
  :loading="loading"
  class="mytable-scrollbar"
  :columns="tableColumn"
  :data="tableData"
  :edit-config="{trigger:'click',mode:'cell',showIcon:false,activeMethod:activeCellMethod}" //即这里的activeMethod方法
  @edit-closed="editClosedEvent"
  :row-style="rowStyle"
  >
</vxe-grid>

/**
 * 该方法的返回值用来决定该单元格是否允许编辑
*/
activeCellMethod({row}){
  if(row.rowType==='1'){  //rowType是后端返回的表明这一行是合计的唯一标识
    return false;
  }else{
    return true;
  }
},

vxe-table列属性type="html"可在表格中插入html

即值可以是html标签,对于有需要添加自定图标可写html标签很有帮助。这个是调整后与调整前的值做对比,如果相等则显示对勾,否则显示错号

let columns = [{field:'field01',title:'可编辑单元格',editRender: {name: "input", attrs: {type: "text"}}}]
if(item.billStatus ==='0'){
   item.billStatus = '<i class="icon-close" style="color:#ff1c1c"></i>'
 }else if(item.billStatus ==='1'){
   item.billStatus = '<i class="icon-check" style="color:#00a854"></i>'
 }

表格中判断某列的值与另一列的值相等

思路:

1. 最后一行合计不需要对比,取表格数据时把最后一条数据去除(Array.slice(0,tableData.length-1))

2. 找到所有调整后的列属性集合。

3. 双循环,外围是tableData的循环(即行的循环),内循环是找到的所有调整后的列属性的循环。在这一步需借助一个数组,只要这一行数据有一个比对不成功,则往数组中推入1,最后判断这个数组中是不是有1,若有一个1,则比对不成功,显示叉号。

具体代码:

getBillStatus(){
  let tableData = this.$refs.xTable.getTableData().tableData;
  //最后的合计行不需要将调整后的金额和总会计的相比较
  let tableDataExceptLast = tableData.slice(0,tableData.length-1);
  let columns = this.$refs.xTable.getColumns();

  //所有调整后的列属性集合
  let amtArr = []
  columns.forEach(item=>{
    if(item.title === '调整后'){
      let amtObj = {};
      amtObj.property = item.property.substring(1,item.property.length);
      amtArr.push(amtObj);
    }
  });
  let isErrorArr = [];
  tableDataExceptLast.forEach(item=>{
    amtArr.forEach(it=>{
      if(revertNumMoney(item[it.property]) !==revertNumMoney(item[`h${it.property}`])){
        //有一项不相等,则向isErrorArr 添加一项数字1
        isErrorArr.push(1)
      }
    });
    //isErrorArr数组中只要有一个调整后的金额与总会计金额不相等,则显示错号,否则显示对勾
    if(isErrorArr.findIndex(b=>b===1)>-1){
      item.billStatus = '<i class="icon-close" style="color:#ff1c1c"></i>';
    }else{
      item.billStatus = '<i class="icon-check" style="color:#00a854"></i>'
    }
  });

}