Ant-vue-tabel2.x表格合计通用方法

/**
 * 合并计算方法
 * @param refs this.$ref.table 表格的ref
 * @param columObj[rowName:"",trId:"",colSpan:0,callFun]  参数对象
 * @param columObj.trId tr 唯一id
 * @param columObj.colSpan 合并单元格数量
 * @param columObj.callFun 计算逻辑方法 是 [function]
 */
export function addTableColum(refs, columObj = [{rowName: "", trId: "", colSpan: 0, callFun: Object}]) {
  columObj.forEach(item => {
    createColum(refs, item.rowName, item.trId, item.colSpan, item.callFun)
    let table = refs.$el.querySelector('table')
    let input = table.querySelectorAll('input')
    input.forEach(inp => {
      if (!inp.disabled) {
        inp.onchange = function () {
          addTableColum(refs, columObj)
        }
      }
    })
  })``
}

function createColum(refs, rowName, trId, colSpan, calFunc) {
  // 获取所有行
  let columns = refs.columns
  // 回调计方法得到数据
  let valObj = calFunc()
  var tbody = refs.$el.querySelector('tbody')
  let trIds = tbody.querySelector("#" + trId)
  // 如果已经存在对应的node节点了则修改数据  否则去创建
  if (trIds != null) {
    columns.forEach(keys => {
      trIds.childNodes.forEach((tdNode, index) => {
        if (keys.key === tdNode.key) {
          tdNode.innerText = valObj[tdNode.key].toFixed(2)
        }
      })
    })
  } else {
    let tr = createTr(trId)
    let td = createTd(rowName)
    td.colSpan = colSpan
    tr.appendChild(td)
    columns.forEach(keys => {
      for (const valKey in valObj) {
        if (keys.key === valKey) {
          let nodeTd = createTd(valObj[valKey].toFixed(2))
          nodeTd.key = valKey
          tr.appendChild(nodeTd)
        }
      }
    })
    tbody.appendChild(tr)
  }
}

// 创建TR
function createTr(trId = "") {
  let tr = document.createElement("tr");
  tr.id = trId
  // 默认CSS
  const defClass = 'default-class'
  // 鼠标移入移出css
  const hoverClass = 'hover-class'
  tr.className =  defClass
  // tr事件
  tr.onmouseenter = function () {
    tr.className = hoverClass
  }
  tr.onmouseleave = function () {
    tr.className = defClass
  }
  return tr
}

// 创建td
function createTd(tdVal = "") {
  let td = document.createElement("td");
  td.className = 'poros-table-row-cell-break-word'
  td.style = 'text-align: center;'
  td.innerText = tdVal
  return td
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值