vue3 elementplus table合并寫(xiě)法
vue3 elementplus table合并寫(xiě)法
table表格下方合并寫(xiě)法:
1:?jiǎn)涡泻喜?/p>
(1)在標(biāo)簽中加入屬性
:summary-method="getSummaries" :show-summary="true"
<el-table :data="data" id="tableRef" ref="tableRef" row-key="belnr" class="td-bacg-white" :summary-method="getSummaries" :show-summary="true" > <template v-for="(item1, index1) in tableColumns"> <template v-if="item1.children"> <el-table-column :key="index1" :label="item1.title" align="center" > <template v-for="item in item1.children"> <el-table-column v-if="!item.hidden" :align="item.align || 'center'" :prop="item.dataIndex" :label="item.title" :min-width="item.width" :key="item.dataIndex" :show-overflow-tooltip=" item.overflow === false ? false : true " > <template #default="scope"> <template > <el-table-column :align="item1.align || 'center'" :key="index1" :prop="item1.dataIndex" :label="item1.title" :fixed="item1.fixed || false" :min-width="item1.width" show-overflow-tooltip > <template #default="scope"> <span v-if="item1.filterType === 'toThousandFilter'" > {{ toThousandFilter( Number(scope.row[`${item1.dataIndex}`] || 0) ) }} </span> <span v-else-if="item1.dataIndex === 'ii'"> <span>{{ scope.row[`${item1.dataIndex}`] }}%</span> </span> <span v-else> <span>{{ scope.row[`${item1.dataIndex}`] }}</span> </span> </template> </el-table-column> </template> </template> </el-table>
(2)合并方法
下方判斷字段為 uu ii 的兩個(gè)字段計(jì)算合并。
/** * 合計(jì) */ interface SummaryMethodProps<T = SpmxListType> { columns: TableColumnCtx<T>[]; data: T[]; } function getSummaries(param: SummaryMethodProps) { const { columns, data } = param; const sums: string[] = []; columns.forEach((column, index) => { if (index === 1) { sums[index] = '合計(jì)'; return; } if ( column.property !== 'uu' && column.property !== 'ii' ) { sums[index] = ''; return; } const values = data.map(item => Number(item[column.property])); console.log(columns, '==columns'); 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) .toString(); sums[index] = Number(sums[index]).toFixed(2); if ( column.property === 'ii' ) { // 加百分號(hào) sums[index] = sums[index]+'%'; }else{ // 加千葉符 sums[index] = toThousandFilter(Number(sums[index])); } } else { sums[index] = ''; } }); console.log(sums); return sums; }
2.如果下方合并是兩行的,用到Render函數(shù)
(利用render函數(shù)插入2個(gè)div作為2行展示)
function getSummaries(param: SummaryMethodProps) { const { columns, data } = param; const sums: string[] = []; columns.forEach((column, index) => { if (index === 0) { // sums[index] = '小計(jì) total'; sums[index] = h('div', {class: ''},[ h("div", '小計(jì) total', ), h("div", '% of total', ), ]); // sums[index] = <div> // <div>合計(jì)</div> // <div> 備注</div> // </div>; return; } if (index === 1) { // sums[index] = '小計(jì) total'; sums[index] = h('div', {class: ''},[ h("div", '1234567', ), h("br", '', ), ]); return; } if (index === 2) { // sums[index] = '小計(jì) total'; sums[index] = h('div', {class: ''},[ h("div", '100%', ), h("div", '12%', ), ]); return; } if (index === 3) { // sums[index] = '小計(jì) total'; sums[index] = h('div', {class: ''},[ h("div", '1234567', ), h("br", '', ), ]); return; } if (index === 4) { // sums[index] = '小計(jì) total'; sums[index] = h('div', {class: ''},[ h("div", '100%', ), h("div", '88%', ), ]); return; } if ( column.property !== 'ee' && column.property !== 'rr' ) { sums[index] = ''; return; } }); console.log(sums); return sums; }
Vue3+ElementPlus實(shí)現(xiàn)Table表格的行合并(單個(gè)及多個(gè))
實(shí)現(xiàn)結(jié)果
<el-table border v-loading="state.loading" :data="state.tableDataList" :height="pagTabHeight" row-key="id" ref="tableRef" :highlight-current-row="true" @row-click="rowClick" :span-method="objectSpanMethod" > <el-table-column type="index" label="序號(hào)" align="center" /> <el-table-column prop="level" label="參數(shù)級(jí)別" show-overflow-tooltip align="center" /> <el-table-column prop="year" label="年度" show-overflow-tooltip align="center" /> <el-table-column prop="type" label="評(píng)價(jià)類型" show-overflow-tooltip align="center" /> <el-table-column prop="way" label="定額方式" show-overflow-tooltip align="center" /> <el-table-column prop="creator" label="創(chuàng)建人" show-overflow-tooltip align="center" /> <el-table-column label="創(chuàng)建時(shí)間" show-overflow-tooltip align="center"> <template #default="{ row }">{{ dateFormat(row.createTime, 'yyyy-MM-dd') }}</template> </el-table-column> </el-table>
實(shí)現(xiàn)方法
interface ObjInterface { [key: string]: any; // 字段擴(kuò)展聲明 } /** * @description 合并表格行 * @export * @param {object[]} data 表格數(shù)據(jù) * @param {string} rowName 合并行的name * @param {string} otherRowName 合并其他行 * @return {*} */ export function tableRowMerge( data: ObjInterface[], rowName: string, otherRowName?: string ) { const idArray = [] as number[]; let idPos = 0; for (let i = 0; i < data.length; i++) { // 如果當(dāng) i == 0 說(shuō)明數(shù)據(jù)是第一行, 需要重新賦值 if (i == 0) { // idArray.push(1) 說(shuō)明這一行數(shù)據(jù)被顯示出來(lái) idArray.push(1); // idPos = 0 重置當(dāng)前的計(jì)數(shù)器 idPos = 0; } // 說(shuō)明不是從第一行開(kāi)始遍歷的 else { if (otherRowName) { //主行之外的 另一行合并 if ( data[i][rowName] == data[i - 1][rowName] && data[i][otherRowName] == data[i - 1][otherRowName] ) { // 如果相同就需要將 idArray 的數(shù)據(jù)自加 idArray[idPos] += 1; // 同時(shí)需要將 idArray push一個(gè)0 表示下一行不用顯示 idArray.push(0); } // 說(shuō)明 當(dāng)前的數(shù)據(jù)和上一行的指定數(shù)據(jù)不同 else { // idArray.push(1) 說(shuō)明當(dāng)前一行的數(shù)據(jù)需要顯示 idArray.push(1); // 重新給計(jì)數(shù)器賦值 idPos = i; } } else { // 判斷當(dāng)前的指定數(shù)據(jù)是否和之前的指定數(shù)據(jù)值相同 if (data[i][rowName] == data[i - 1][rowName]) { // 如果相同就需要將 idArray 的數(shù)據(jù)自加 idArray[idPos] += 1; // 同時(shí)需要將 idArray push一個(gè)0 表示下一行不用顯示 idArray.push(0); } // 說(shuō)明 當(dāng)前的數(shù)據(jù)和上一行的指定數(shù)據(jù)不同 else { // idArray.push(1) 說(shuō)明當(dāng)前一行的數(shù)據(jù)需要顯示 idArray.push(1); // 重新給計(jì)數(shù)器賦值 idPos = i; } } } } return idArray; }
調(diào)用方法
let rowMergeArr = [] as number[]; let rowMergeArr1 = [] as number[]; /** * @description 合并行 */ interface SpanMethodProps { row: PriceTableItem; column: TableColumnCtx<PriceTableItem>; rowIndex: number; columnIndex: number; } const objectSpanMethod = ({ row, column, rowIndex, columnIndex }: SpanMethodProps) => { // level列 if (columnIndex === 1) { // rowMergeArr[rowIndex] 取出當(dāng)前存放行的合并狀態(tài) const rowSpan = rowMergeArr[rowIndex]; // 判斷當(dāng)前的 列是否需要顯示 const colSpan = rowSpan > 0 ? 1 : 0; return { rowspan: rowSpan, colspan: colSpan }; } // level列之后的 type列 if (columnIndex === 3) { // rowMergeArr[rowIndex] 取出當(dāng)前存放行的合并狀態(tài) const rowSpan = rowMergeArr1[rowIndex]; // 判斷當(dāng)前的 列是否需要顯示 const colSpan = rowSpan > 0 ? 1 : 0; return { rowspan: rowSpan, colspan: colSpan }; } // ...如果還有繼續(xù) }; onMounted(() => { rowMergeArr = tableRowMerge(state.tableDataList, 'level');// 主列的行合并 rowMergeArr1 = tableRowMerge(state.tableDataList, 'level', 'type');// 其他列的行合并 });
到此這篇關(guān)于vue3 elementplus table合并的文章就介紹到這了,更多相關(guān)vue3 elementplus table合并內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
- vue3?element?plus?table?selection展示數(shù)據(jù),默認(rèn)選中功能方式
- element-plus的el-table自定義表頭篩選查詢功能實(shí)現(xiàn)
- Vue3+Element-Plus使用Table預(yù)覽圖片發(fā)生元素遮擋的解決方法
- vue3使用element-plus再次封裝table組件的基本步驟
- vue3使用elementPlus進(jìn)行table合并處理的示例詳解
- vue3+element Plus實(shí)現(xiàn)在table中增加一條表單數(shù)據(jù)的示例代碼
- vue3+elementplus基于el-table-v2封裝公用table組件詳細(xì)代碼
- Vue3中Element Plus Table(表格)點(diǎn)擊獲取對(duì)應(yīng)id方式
- Element?UI/Plus中全局修改el-table默認(rèn)樣式的解決方案
- ElementPlus?Table表格實(shí)現(xiàn)可編輯單元格
相關(guān)文章
Vue項(xiàng)目中Api的組織和返回?cái)?shù)據(jù)處理的操作
這篇文章主要介紹了Vue項(xiàng)目中Api的組織和返回?cái)?shù)據(jù)處理的操作,本文給大家介紹的非常詳細(xì),具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2019-11-11vite build vue3項(xiàng)目配置開(kāi)啟sourcemap方式
這篇文章主要介紹了vite build vue3項(xiàng)目配置開(kāi)啟sourcemap方式,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2024-06-06使用vuex解決刷新頁(yè)面state數(shù)據(jù)消失的問(wèn)題記錄
這篇文章主要介紹了使用vuex解決刷新頁(yè)面state數(shù)據(jù)消失的問(wèn)題記錄,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2019-05-05vue-draggable實(shí)現(xiàn)拖拽表單的示例代碼
本文主要介紹了vue-draggable實(shí)現(xiàn)拖拽表單的示例代碼,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2023-05-05VuePress使用Algolia實(shí)現(xiàn)全文搜索
這篇文章主要為大家介紹了VuePress使用Algolia實(shí)現(xiàn)全文搜索示例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2022-07-07在Vue3中使用vue-qrcode庫(kù)實(shí)現(xiàn)二維碼生成的方法
在Vue3中實(shí)現(xiàn)二維碼生成需要使用第三方庫(kù)來(lái)處理生成二維碼的邏輯,常用的庫(kù)有 qrcode和 vue-qrcode,這篇文章主要介紹了在Vue3中使用vue-qrcode庫(kù)實(shí)現(xiàn)二維碼生成,需要的朋友可以參考下2023-12-12Vue3中子組件改變父組件傳過(guò)來(lái)的值(props)的方法小結(jié)
在 Vue 3 中,子組件改變父組件傳過(guò)來(lái)的值(props)的方法主要有以下幾種:通過(guò)事件發(fā)射、使用 v-model、模擬 .sync 修飾符的功能(Vue 3 中已移除),以及使用 ref 或 reactive,下面我將結(jié)合代碼示例和使用場(chǎng)景詳細(xì)講解這些方法,需要的朋友可以參考下2025-04-04Vue實(shí)現(xiàn)typeahead組件功能(非??孔V)
本文給大家分享通過(guò)Vue寫(xiě)一個(gè)挺靠譜的typeahead組件功能,非常不錯(cuò),具有參考借鑒價(jià)值,需要的的朋友參考下吧2017-08-08ant-design-vue Table pagination分頁(yè)實(shí)現(xiàn)全過(guò)程
這篇文章主要介紹了ant-design-vue Table pagination分頁(yè)實(shí)現(xiàn)全過(guò)程,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2023-04-04