element-ui添加动态表格并合计行合并行操作

这篇具有很好参考价值的文章主要介绍了element-ui添加动态表格并合计行合并行操作。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

项目开发过程中,我们有时候会遇到表格里面数据进行动态添加修改删除的操作,表格里面我们也会经常遇到合并单元格和合计累加计算行的数据。这里我们就简单的记录一下实际场景的运用!

最终实现的效果图如下:

element-ui添加动态表格并合计行合并行操作
注意:这里的新增操作人不能重复添加,新增的时候有删除操作,有编辑的数据进来的时候表格里面才会显示编辑文字。

1,添加动态表格
return {
	// 表格数据
	 productivityForm: {
        qualityinspectorTable: []
     },
     // 添加操作人和动态表格里面的输入框数据
     qualityinspectorForm: {
       qualityinspectorId: '',
       weChatproductNumber: '',
       shortmeddageproductNumber: '',
       telephoneproductNumber: ''
     },
     productivityFormRules: {},
     // 操作人下拉框
     qualityinspectorOptions: [
       { name: '李佳琪', qualityinspectorId: 1 },
       { name: '李向明', qualityinspectorId: 2 },
       { name: '王天成', qualityinspectorId: 3 },
       { name: '陈天', qualityinspectorId: 4 }
     ],
     // 点击编辑下标
	editCurrentRowIndex: ''
     
}
// 添加操作人事件
addqualityinspectorClick () {
      if (!this.qualityinspectorForm.qualityinspectorId) {
        this.$message.warning('请先选择操作人再进行新增操作!')
      } else {
        const obj = JSON.parse(JSON.stringify(this.qualityinspectorForm))
        if (this.productivityForm.qualityinspectorTable.find(e => e.qualityinspectorId === obj.qualityinspectorId)) {
          this.$message.warning('该操作人已存在,请勿重复添加')
        } else {
          this.productivityForm.qualityinspectorTable.push(obj)
          this.qualityinspectorForm.qualityinspectorId = ''
          this.qualityinspectorForm.weChatproductNumber = ''
          this.qualityinspectorForm.shortmeddageproductNumber = ''
          this.qualityinspectorForm.telephoneproductNumber = ''
        }
      }
    },
2,删除表格行数据
deleteproducivity (index) {
   this.productivityForm.qualityinspectorTable.splice(index, 1)
 },
3, 编辑操作
// 点击编辑判断是否有重复数据
handleEditproducivity (type, index) {
   if (this.editCurrentRowIndex !== '' && !type) {
     this.$message.warning('请先确定您当前的修改项')
   } else {
     if (!type) {
       this.editCurrentRowIndex = index
     }
   }
 },
// 编辑提交保存操作(校验非空数据)
handleEditsave (row) {
  if (!row.telephoneproductNumber) {
    this.$message.warning('电话生产力不能为空!')
    return false
  } else if (!row.weChatproductNumber) {
    this.$message.warning('微信生产力不能为空!')
    return false
  } else if (!row.shortmeddageproductNumber) {
    this.$message.warning('短信生产力不能为空!')
    return false
  } else {
    this.$confirm('是否确认编辑操作吗?', '警告', {
      confirmButtonText: '确定',
      cancelButtonText: '取消',
      type: 'warning'
    }).then(() => {
      const options = {
        qualityId: row.qualityId,
        telephoneproductNumber: row.telephoneproductNumber,
        weChatproductNumber: row.weChatproductNumber,
        shortmeddageproductNumber: row.shortmeddageproductNumber
      }
      this.$store.dispatch('tasks/PatientFollowUpSubmit', options).then(res => {
        this.$message.success('编辑成功')
        this.editCurrentRowIndex = ''
      })
    }).catch(() => {
      this.$message.info('已取消操作')
    })
  }
},
4,提交保存操作
submitForm (formName) {
   this.$refs[formName].validate((valid) => {
     if (valid) {
       const optionsdata = {
         ...this.productivityForm
       }
       console.log(optionsdata, 'sss')
       //   this.$store.dispatch('tasks/DoctorInfoSubmit', {
       //     TaskId: this.$route.query.id,
       //     ...this.productivityForm
       //   }).then(res => {
       //     this.$emit('getDoctorTaskDetails')
       //   })
     } else {
       return false
     }
   })
 },
5,页面显示内容
<template>
  <div class="productivity-info-panel">
    <el-form class="productbox" :model="productivityForm" :rules="productivityFormRules" 	ref="productivityForm" label-width="150px" :inline="false">
      <el-form-item label="操作人">
        <el-select
          clearable
          filterable
          v-model="qualityinspectorForm.qualityinspectorId"
          placeholder="请选择操作人">
          <el-option
            v-for="(item, index) in qualityinspectorOptions"
            :key="index"
            :label="item.name"
            :value="item.qualityinspectorId">
          </el-option>
        </el-select>
        <el-button style="margin-left: 20px;" type="primary" @click="addqualityinspectorClick" icon="el-icon-plus">新增操作人</el-button>
      </el-form-item>
      <div class="producivity-table">
        <el-table
          size="mini"
          :data="productivityForm.qualityinspectorTable"
          id="tables"
          :summary-method="getSummaries"
          show-summary
          style="width: 100%;">
          <el-table-column
            prop="qualityinspectorId"
            align="center"
            label="操作人">
            <template slot-scope="scope">
              <span>{{ scope.row.qualityinspectorId && (qualityinspectorOptions.find(e => e.qualityinspectorId === scope.row.qualityinspectorId)).name }}</span>
            </template>
          </el-table-column>
          <el-table-column
            prop="telephoneproductNumber"
            align="center"
            label="电话生产力(天)">
            <template slot-scope="scope">
              <el-input-number placeholder="请输入电话生产力" v-if="editCurrentRowIndex === scope.$index || !scope.row.qualityId"
                size="small" :step="1" step-strictly :min="0" v-model="scope.row.telephoneproductNumber"></el-input-number>
              <span v-else>{{ scope.row.telephoneproductNumber }}</span>
            </template>
          </el-table-column>
          <el-table-column
            prop="weChatproductNumber"
            align="center"
            label="微信生产力(周)">
            <template slot-scope="scope">
              <el-input-number placeholder="请输入微信生产力" v-if="editCurrentRowIndex === scope.$index || !scope.row.qualityId"
                size="small" :step="1" step-strictly :min="0" v-model="scope.row.weChatproductNumber"></el-input-number>
              <span v-else>{{ scope.row.weChatproductNumber }}</span>
            </template>
          </el-table-column>
          <el-table-column
            prop="shortmeddageproductNumber"
            align="center"
            label="短信生产力(周)">
            <template slot-scope="scope">
              <el-input-number placeholder="请输入短信生产力" v-if="editCurrentRowIndex === scope.$index || !scope.row.qualityId"
                size="small" :step="1" step-strictly :min="0" v-model="scope.row.shortmeddageproductNumber"></el-input-number>
              <span v-else>{{ scope.row.shortmeddageproductNumber }}</span>
            </template>
          </el-table-column>
          <el-table-column
            align="center"
            label="操作">
            <template slot-scope="scope">
              <el-button
                @click="handleEditproducivity(editCurrentRowIndex === scope.$index, scope.$index)"
                type="text"
                size="small">
                <span v-if="editCurrentRowIndex === scope.$index" @click="handleEditsave(scope.row)">保存</span>
                <span v-else-if="!!scope.row.qualityId">编辑</span>
              </el-button>
              <el-button type="text" style="color: red;" v-if="!scope.row.producivityId" @click="deleteproducivity(scope.$index)">删除</el-button>
            </template>
          </el-table-column>
        </el-table>
      </div>
      <div class="edit-doctor-btn">
        <el-button type="primary" @click="submitForm('productivityForm')">提交信息</el-button>
      </div>
    </el-form>
  </div>
</template>

6,表格合计和合并单元格操作

1,el-table里面添加: id=“tables” :summary-method=“getSummaries” show-summary 很重要!!!!!

<el-table :data="tableData" id="tables" :summary-method="getSummaries" show-summary>
1,合并单元

watch监听事件

watch: {
		//监听tableData
		tableData: {
			// 立即监听
			immediate: true,
			handler() {
				this.$nextTick(() => {
					const tds = document.querySelectorAll('#tables .el-table__footer-wrapper tr>td');
				    // colSpan合并列  这里打印一下看一下
			    	console.log(tds)
					tds[0].colSpan = 3;  // 这里是要合并几行
					tds[0].style.textAlign = 'center';
					tds[1].style.display = 'none'; // 上述合并3行也就对应的隐藏到第3个格子
					tds[2].style.display = 'none';
// 这里注意一下  要合并几行就隐藏到第几个格子,我合并3个格子,第0个格子是 合计 字段不用隐藏,后面两个要隐藏因为是合并3个嘛,  我在这踩过坑 哭死
				});
			}
		}
	},
2,合计行计算

下面是计算直接官网的方法一样的文章来源地址https://www.toymoban.com/news/detail-511099.html

getSummaries(param) {
	   const { columns, data } = param;
	   const sums = [];
	   columns.forEach((column, index) => {
		if (index === 0) {
			sums[index] = '合计:';
			return;
		}else if(index === 1||index === 2){//只有这里改了一下
			// sums[index] = 'N/A';
			return;
		}
	       const values = data.map(item => Number(item[column.property]));
	       if (!values.every(value => isNaN(value))) {
			sums[index] = values.reduce((prev, curr) => {
				const value = Number(curr);
				if (!isNaN(value)) {
					return prev + curr;
				} else {
					return prev;
				}
	           }, 0);
	       sums[index];
		} else {
			sums[index] = 'N/A';
		}
	});
	return sums;
	},

到了这里,关于element-ui添加动态表格并合计行合并行操作的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • vue2&Element-ui实现表格单元格合并

    由于项目需要实现单元格合并目前只是单页没有做分页处理先上效果图 看下数据结构 Element table提供的api arraySpanMethod columnIndex=0表示从第一列开始 rowIndex表示需要操作的行数 同济医院加上合计有12行从0开始=11 判断条件是rowIndex余12===0 我们打印一下 或者改成 表示从0开始到1

    2024年02月12日
    浏览(47)
  • 论element-ui表格的合并行和列(巨细节)

    ​ 作为一个后端来写前端属实是痛苦、讲真的、刚开始我是真不想用饿了么的这个合并行和列、因为太语焉不详了、看着头疼、后来发现好像我没得选、只好硬着头皮上了。 效果图: 代码: 这里只展示关键代码 先看看它们是怎么完成这个的: ​ 首先,看似是合并了行、实

    2023年04月13日
    浏览(47)
  • element-ui 表格(table)合并表头下面合并列且可以收缩展开

    百度了一大堆,发现了首行不能合并,想到了用dom做,找到了下面这个链接 1、表头合并 —— 给table添加属性:header-cell-style=\\\"headerStyle\\\",里面给首行设置跨行 element-ui表头合并 - ^Mao^ - 博客园 2、表内合并 —— 给table添加属性:span-method=\\\"arraySpanMethod\\\",里面设置合并 Element - The wor

    2024年02月16日
    浏览(61)
  • vue中Element-ui 表格 (Table)合并行、列单元格

    先在el-table里加个属性:span-method绑定方法objectSpanMethod(),这个用来把你想合并的列根据你写的逻辑来合并,再写个getSpanArr(),这个写合并的逻辑。 加一个属性两个方法,然后在获取表格数据的时候调用一下getSpanArr(),示例代码写了四个逻辑,根据id相同合并,根据id和其他字段

    2024年02月10日
    浏览(49)
  • Element-ui 动态Table表格

    最近在做相关需求,感觉太多的重复代码,网上也很多这种动态的,写的很好,所以我借鉴了很多大佬的动态table表格,结合需求,完成了我自己需要的table。 1.config文件夹相关配置文件 2.一个用来配置的’pageTable.vue’文件 其实table 表格里面的align也可以动态,我这里偷懒了

    2024年02月11日
    浏览(40)
  • 给 element-ui 表格的表头添加icon图标

    el-table icon图标 的设置,使用  slot=\\\"header\\\"  插槽,然后直接通过设置类名为  el-icon-iconName  来使用即可。 效果展示:

    2024年02月16日
    浏览(43)
  • element-ui表格自定义动态列

    实现效果 具体功能 拖拽表头改变宽度 限制最小宽度, 实时保存设置。 隐藏列 选中列隐藏, 不显示在表格中。 “勾选” 列和\\\"操作\\\" 列不可隐藏, 并且不包含在列控制组件中。 隐藏后, 无论是否冻结均不显示。有特殊标识则要另外做判断。 列冻结 开启时, 表示选中列靠左冻结

    2024年01月24日
    浏览(43)
  • element-ui 表格一行显示多行内容并实现多行内某一行列合并

    这是加上边框的, 去掉边框后这个表格看着更明显一点,表格一行放多行内容,并让第二行进行列合并,第一行不合并 该方法其实就是普通的列合并,只不过使用了row和col使效果看着像是第一行没合并,第二行才合并

    2024年02月11日
    浏览(60)
  • [element-ui] el-table表格合并 span-method

    element 中表格合并 span-method 函数详解

    2024年02月13日
    浏览(57)
  • element-ui/view-ui表格的合并行和列的多种方法(超级详细)

    vue的这两个组件库的表格的行和列的合并写法是一样的,都是通过span-method方法可以实现的;下面我们就以view ui的表格组件为例; 该方法参数为 4 个对象: row: 当前行 column: 当前列 rowIndex: 当前行索引 columnIndex: 当前列索引 该函数可以返回一个包含两个元素的数组,第一个元

    2024年04月14日
    浏览(39)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包