300字范文,内容丰富有趣,生活中的好帮手!
300字范文 > El-table 实现表格单元格多级合并

El-table 实现表格单元格多级合并

时间:2023-07-08 19:09:48

相关推荐

El-table 实现表格单元格多级合并

1.这个是页面table

<el-table :span-method="objectSpanMethod"> </el-table>

2.elementUi 的span-method 方法

注意:我使用的是vue3 ,vue2 可以把state改为this,将spanArr,spanArr1放在data里

const objectSpanMethod = ({ rowIndex,columnIndex })=>{if (columnIndex === 0) { //columnIndex 第几列if (state.spanArr[rowIndex]) {return {rowspan: state.spanArr[rowIndex], //要合并的行数colspan: 1 //要合并的行数}} else {return {rowspan: 0,colspan: 0}}}if (columnIndex === 1) { //第二列if (state.spanArr1[rowIndex]) {return {rowspan: state.spanArr1[rowIndex],colspan: 1}} else {return {rowspan: 0,colspan: 0}}}}

3.将后端的数据拿到后处理为数组,像这样把要要合并的数据排一起,某些字段相同,后端这样返回那就不用处理了

{id: 14, company_name: "男孩子", company_no: "11112", company_id: 67, name: "1", client_terminal_id: "1",…}{id: 13, company_name: "女孩子", company_no: "45646", company_id: 65, name: "1", client_terminal_id: "2",…}{id: 5, company_name: "奥利给", company_no: "3", company_id: 63, name: "23", client_terminal_id: "2",…}{id: 4, company_name: "奥利给", company_no: "3", company_id: 63, name: "23", client_terminal_id: "3",…}{id: 12, company_name: "测试奥利给", company_no: "1", company_id: 4, name: "32",…}{id: 11, company_name: "测试奥利给", company_no: "2", company_id: 4, name: "3", client_terminal_id: "3",…}{id: 10, company_name: "测试奥利给", company_no: "2", company_id: 4, name: "1", client_terminal_id: "2",…}{id: 9, company_name: "测试奥利给", company_no: "2", company_id: 4, name: "13",…}{id: 8, company_name: "测试奥利给", company_no: "2", company_id: 4, name: "1", client_terminal_id: "21",…}{id: 7, company_name: "测试奥利给", company_no: "2", company_id: 4, name: "23", client_terminal_id: "4",…

4.tableDate为处理后的数组,

第一个方法返回的数组spanArr 处理表格第一列的合并

第二个方法返回的数组spanArr1 处理表格第二列的合并

pany_name 中company_name 为你想要根据哪个字段要合并

注意:我使用的是vue3 ,vue2 可以把state改为this,将spanArr,spanArr1放在data里

const filterTableData = () => {let contactDot = 0;state.tableData.forEach((item, index) => {if (index == 0) {state.spanArr.push(1)} else {if (pany_name === state.tableData[index - 1].company_name) {state.spanArr[contactDot] += 1;state.spanArr.push(0)} else {contactDot = indexstate.spanArr.push(1)}}})}const filterTableData1 = () => {let contactDot = 0;state.tableData.forEach((item, index) => {if (index == 0) {state.spanArr1.push(1)} else {if (item.name === state.tableData[index - 1].name && pany_name === state.tableData[index - 1].company_name) {state.spanArr1[contactDot] += 1;state.spanArr1.push(0)} else {contactDot = indexstate.spanArr1.push(1)}}})}

5..这个rest是调取后端接口返回数据 然后一定要清除spanArr ,和spanArr 1变量,也就是说每次

调用filterTableData,filterTableData1方法都要先清除 ,这样就可以了。合并更多列更多级道理都一样,然后把代码封装一下就可以了

const getTable = async ()=>{let rest = await Api()state.pageTotal = rest.totalstate.tableData = rest.datastate.spanArr = []state.spanArr1 = []filterTableData()filterTableData1()}

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。