首页 > 其他分享 >vue+element-ui 实现可编辑表格、动态渲染表头和表格数据、列向数据合计(每行末尾合计功能)

vue+element-ui 实现可编辑表格、动态渲染表头和表格数据、列向数据合计(每行末尾合计功能)

时间:2023-07-03 15:47:57浏览次数:45  
标签:vue 表头 item target5 target4 合计 target3 row

HTML部分代码
<template>   <div>     <el-container>       <el-header>Header</el-header>       <el-main>         <div>           // 表格数据在这里: :data="tableData"           <el-table             border             :data="tableData"             class="tb-edit"             style="width: 100%"             highlight-current-row             @row-click="handleCurrentChange"           >             <el-table-column label="项目名称">               <template scope="scope">                 <span>{{ scope.row.item }}</span>               </template>             </el-table-column>
            // 动态循环表头数据             <el-table-column               :label="item.val"               v-for="(item,index) in tableHead"               :key="index"             >               <template scope="scope">                 <el-input                   size="small"                   v-model="scope.row[item.item]"                   placeholder="0"                   type="number"                   @change="handleEdit(scope.$index, scope.row,item.item)"                 ></el-input>                 <span>{{ scope.row[item.item] }}</span>               </template>             </el-table-column>
            <el-table-column label="总分" prop="total"> </el-table-column>           </el-table>         </div>       </el-main>       <el-footer> <el-button type="primary">提交</el-button></el-footer>     </el-container>   </div> </template>

 

 

script部分代码
<script>   export default {     data() {       return {         // 表头数据         tableHead: [           { val: "指标1", item: "target1" },           { val: "指标2", item: "target2" },           { val: "指标3", item: "target3" },           { val: "指标4", item: "target4" },           { val: "指标5", item: "target5" },         ],         // 表格数据         tableData: [           {             item: "项目1",             target1: 0,             target2: 0,             target3: 0,             target4: 0,             target5: 0,             total: 0,           },           {             item: "项目2",             target1: 0,             target2: 0,             target3: 0,             target4: 0,             target5: 0,             total: 0,           },           {             item: "项目3",             target1: 0,             target2: 0,             target3: 0,             target4: 0,             target5: 0,             total: 0,           },           {             item: "项目4",             target1: 0,             target2: 0,             target3: 0,             target4: 0,             target5: 0,             total: 0,           },           {             item: "项目5",             target1: 0,             target2: 0,             target3: 0,             target4: 0,             target5: 0,             total: 0,           },         ],       };     },     methods: {       // 合计       handleEdit(index, row) {         var sum = 0;         this.tableHead.forEach((element) => {           sum += Number(this.tableData[index][element.item]);         });         row.total = sum;       },     },   }; </script>      
CSS部分代码(这里是实现可编辑的关键样式一定不能少)
<style lang="less">     * {       margin: 0;       padding: 0;     }     body {       font-family: Helvetica Neue, Helvetica, PingFang SC, Hiragino Sans GB,         Microsoft YaHei, SimSun, sans-serif;       overflow: auto;       font-weight: 400;       -webkit-font-smoothing: antialiased;     }     .tb-edit .el-input {       display: none;     }     .tb-edit .current-row .el-input {       display: block;     }     .tb-edit .current-row .el-input + span {       display: none;     }     .el-table td,     .el-table th {       text-align: center !important;     } </style>    

 效果图

 

这里实现的是点击可编辑,且在点击下一处任何地方,结尾自动合计总分,这里的数据是临时写的假数据(表头的项目名称和合计是写死的,因为它们对应的表格数据是不可编辑的,所以就写死了,循环的表头下面的数据都是可编辑的),后期大家可以把假数据注销,拿到后台接口,通过发送axios请求到后台数据,在渲染到前端页面即可。 

标签:vue,表头,item,target5,target4,合计,target3,row
From: https://www.cnblogs.com/ayuaichiyu/p/17523027.html

相关文章

  • vue的渐进式是什么意思
    Vue只关注视图层,采用自底向上增量开发的设计。渐进式开发的关键是逐步增加功能,并按需引入。下面是一个更好的示例来展示渐进式的代码:首先,我们创建一个组件`TodoItem`来表示待办事项列表的每一项。此组件只包含一个标题属性和一个序号属性,用于渲染待办事项的标题和序号。``......
  • create-vue 创建vue项目
    1.前提环境已经安装16.0或者更高版本的node.js2.创建一个vue项目npminitvue@latest//将会安装并且执行create-vue 注意:npmrundev......
  • vue学习记录 10
    项目目录……改一点“src/view/learn-bussiness-catch”:|bsns0628|--|components|--|--|additem.vue//组件添加事件表单|--|--|eidtitem.vue//组件编辑项事件表单|--|--|seeitem.vue//组件查看详情项事件表单|--|--|prgitem.vue//组件审批详情项事......
  • vue 插槽透传
    vue2:<templatev-for="(_,name)in$scopedSlots"v-slot:[name]="data"><slot:name="name"v-bind="data"/></template>vue3: <templatev-for="namein$slots":key="nam......
  • vue+elementui实现树形结构表格且合并同一个children的单元格
    1、实现效果2、结构代码(给table添加classname)3、通过设置css实现合并同一个children的单元格.nonRelationalDatabase{//去除横向边框::v-deep.el-table__row{  td{   border-bottom:none!important;  } }//......
  • 前端Vue腾讯地图SDK Api经纬度解析为地址信息Geocoding 可用于定位经纬度信息解析为地
    前端Vue腾讯地图SDKApi经纬度解析为地址信息Geocoding可用于定位经纬度信息解析为地址, 下载完整代码请访问uni-app插件市场地址:https://ext.dcloud.net.cn/plugin?id=13311效果图如下:cc-tencentGeocoding使用方法//引入腾讯地图sdkimportqqmapsdkfrom"../../util......
  • Vue学习-组件
    组件也相当于一个自定义标签,下面是一个自定义标签的一个例子:<!DOCTYPEhtml><htmllang="en"><head><metacharset="UTF-8"><title>Title</title></head><body><divid="app"><daitu><......
  • vue element admin 环境搭建
    安装node.js及npm参考官网node-vnpm-v项目下载#克隆项目gitclonehttps://github.com/PanJiaChen/vue-element-admin.git#安装依赖npminstall#设置淘宝仓库npminstall--registry=https://registry.npm.taobao.org#启动服务npmrundev......
  • vue2-props-required必填项
    props的required必填项<template><div><h5>Count组件</h5><p>count的值是:{{count}}</p><button@click="add">+1</button></div></template><script>expo......
  • 基于vue-router的matched实现面包屑功能
    如上图所示,就是常见的面包屑效果,面包屑的内容一般来说,具有一定的层级关系,就以上图为例,首先是进入首页,然后点击左侧导航,进入活动管理下的活动列表页面,然后点击某一条数据,进入活动详情页面这正好与vue-router的mached属性所获取的结果有着相似的原理,所以可以基于此来实现面包屑效......