vue动态合并单元格并添加小计合计功能示例

1、效果图

vue动态合并单元格并添加小计合计功能示例

2、后台返回数据格式(平铺式)

vue动态合并单元格并添加小计合计功能示例

3、后台返回数据后,整理所需要展示的属性存储到(items)数组内

var obj = {
    \"id\": curItems[i].id,
    \"feeName\": curItems[i].feeName,
    \"projectName\": curItems[i].projectName,
    \"projectDetailsName\": curItems[i].projectDetailsName,
    \"zbMoney\": curItems[i].zbMoney,
    \"qyMoney\": curItems[i].qyMoney,
    \"projectId\": curItems[i].projectId,
    \"instructions\": curItems[i].instructions,
    \"contentText\": curItems[i].contentText,
    \"measureText\": curItems[i].measureText
   }
   if (curItems[i].projectDetailsName == \'合计:\') {
    obj.projectName = curItems[i - 1].projectName
   }
   _self.items.push(obj)
   }

4、调用initData(调用后会删除需要合并的字段内容)

_self.initData()

initData(){
  const that = this;
  let arry = [];
  let itemsCopy = JSON.parse(JSON.stringify(that.items));
  for (let i = 0; i < itemsCopy.length; i++) {
   for (let j = (i + 1); j < itemsCopy.length; j++) {
   for (let h in itemsCopy[i]) {
    for (let k in itemsCopy[j]) {
    if (k == \'feeName\' || k == \'projectName\' || k == \'projectDetailsName\') {
     if (itemsCopy[j][k] != \'小计:\' && itemsCopy[j][k] != \'合计:\') {
     if (h === k && itemsCopy[i][h] === itemsCopy[j][k]) {
      delete itemsCopy[j][k]
     }
     }
    }
    }
   }
   }
   arry.push(itemsCopy[i]);
  }
  that.dataT = arry;
  },

vue动态合并单元格并添加小计合计功能示例

4、合并行数的代码

rowSpanF: function (key, val) {
  const that = this;
  let num = 0;
  for (let i in that.items) {
   for (let j in that.items[i]) {
   if (j == \'feeName\' || j == \'projectName\' || j == \'projectDetailsName\') {
    if (key === j && val === that.items[i][j]) {
    if (that.items[i][j] == \'小计:\' || that.items[i][j] == \'合计:\') {
     return
    }
    num++;
    }
   }
   }
  }

  if(num==0){
   return 1
  }
  return num;
  },

5、html

vue动态合并单元格并添加小计合计功能示例

代码如下:

<tr v-for=\"(item,$index) in dataT\">       
   <td
   v-if=\"key!=\'id\'&&(key==\'feeName\'||key==\'projectName\'||key==\'projectDetailsName\'||key==\'zbMoney\'||key==\'qyMoney\'||key==\'projectId\'||key==\'instructions\'||key==\'contentText\'||key==\'measureText\')\"
   v-for=\"(val,key) in item\" :rowspan=\"rowSpanF(key,val)\">
   <span v-if=\"key==\'feeName\'\">{{val}}</span>
   <span v-if=\"key==\'projectName\'\">{{val}}</span>
   <span v-if=\"key==\'projectDetailsName\'\">{{val}}</span>
   <span v-if=\"key==\'zbMoney\'\">{{val}}</span>
   <span v-if=\"key==\'qyMoney\'\">{{val}}</span>
   <span v-if=\"key==\'projectId\'\">{{item[\'zbMoney\']+item[\'qyMoney\']}}</span>
   <span v-if=\"key==\'instructions\'\">{{val}} </span>
   <span v-if=\"key==\'contentText\'\">{{val}}</span>
   <span v-if=\"key==\'measureText\'\">{{val}}</span>
   </td>
   <td>
   <div v-if=\"item.projectDetailsName!=\'小计:\'&&item.projectDetailsName!=\'合计:\'\">
    <!--<span @click=\"toAdd(allItems[$index])\"><a>添加</a></span>-->
    <span @click=\"toEdit(item)\"><a>编辑</a></span>
    <span>
     <a-popconfirm
     title=\"确定删除吗?\"
     okText=\"确定\"
     cancelText=\"取消\"
     @confirm=\"() => deletArr(item)\">
      <a href=\"javascript:;\" rel=\"external nofollow\" >删除</a>
     </a-popconfirm>
    </span>
   </div>
   </td>    
  </tr>

注意事项:

后台返回数据必须符合该条件

vue动态合并单元格并添加小计合计功能示例

vue动态合并单元格并添加小计合计功能示例

总结

© 版权声明
THE END
喜欢就支持一下吧
点赞0 分享
评论 抢沙发

请登录后发表评论

    暂无评论内容