Virtualized Table 虛擬化表格 el-table-v2 表頭分組 多級表頭的簡單示例

注意添加這個屬性,會影響到有多少個層級的表頭: :header-height=“[50, 40]”,即后面的columnIndex

如果有fix的列CustomizedHeader會被調用多次,如果有多個層級的表頭,也會被調用多次, 實際被調用次數是(fix數+ 1 * 表頭層級數量)

以下代碼均刪除了JSX

TS版本代碼

<template><div  style="width: 100%;height: calc(100vh - 84px)"><el-auto-resizer><template #default="{ height, width }"><el-table-v2fixed:columns="columns":data="data":sort-by="sortBy":header-height="[50, 40]":header-class="headerClass"@column-sort="onSort":width="width":height="height"><template #header="props"><customized-header v-bind="props"></customized-header></template></el-table-v2></template></el-auto-resizer></div>
</template><script lang="ts" setup>
import {h, ref} from 'vue'
import {TableV2FixedDir, TableV2Placeholder, TableV2SortOrder} from 'element-plus'
import type {HeaderClassNameGetter,TableV2CustomizedHeaderSlotParam,
} from 'element-plus'
import type {SortBy} from 'element-plus'// 生成帶二級表頭的 columns
function generateColumns(length = 10, prefix = 'column-', props?: any) {return Array.from({length}).map((_, columnIndex) => ({...props,key: `${prefix}${columnIndex}`,dataKey: `${prefix}${columnIndex}`,title: `Column ${columnIndex}`,width: 150,}))
}function generateData(columns: ReturnType<typeof generateColumns>,length = 200,prefix = 'row-'
) {return Array.from({ length }).map((_, rowIndex) => {return columns.reduce((rowData, column, columnIndex) => {rowData[column.dataKey] = `Row ${rowIndex} - Col ${columnIndex}`return rowData},{id: `${prefix}${rowIndex}`,parentId: null,})})
}function CustomizedHeader({cells, columns, headerIndex}) {if (headerIndex === 1) return cellsconst groupCells = []let width = 0let idx = 0columns.forEach((column, columnIndex) => {if (column.placeholderSign === TableV2Placeholder) {groupCells.push(cells[columnIndex])} else {width += cells[columnIndex].props.column.widthidx++const nextColumn = columns[columnIndex + 1]if (columnIndex === columns.length - 1 ||nextColumn?.placeholderSign === TableV2Placeholder ||idx === (headerIndex === 0 ? 4 : 2)) {groupCells.push(h('div',{class: 'flex items-center justify-center custom-header-cell',role: 'columnheader',style: {...cells[columnIndex].props.style,width: `${width}px`,border: `2px solid #fff`}},`Group width ${width}`))width = 0idx = 0}}})return groupCells;
}const headerClass = ({headerIndex,}: Parameters<HeaderClassNameGetter<any>>[0]) => {if (headerIndex === 0) return 'el-primary-color'return ''
}const columns = generateColumns(70)
let data = generateData(columns, 20)columns[0].fixed = TableV2FixedDir.LEFTfor (let i = 0; i < 3; i++) columns[i].sortable = trueconst sortBy = ref<SortBy>({key: 'column-0',order: TableV2SortOrder.ASC,
})const onSort = (_sortBy: SortBy) => {data = data.reverse()sortBy.value = _sortBy
}
</script><style>
.el-el-table-v2__header-row .custom-header-cell {border-right: 1px solid var(--el-border-color);
}.el-el-table-v2__header-row .custom-header-cell:last-child {border-right: none;
}.el-primary-color {background-color: var(--el-color-primary);color: var(--el-color-white);font-size: 14px;font-weight: bold;
}.el-primary-color .custom-header-cell {padding: 0 4px;
}
</style>

JS版本

<template><div style="width: 100%;height: calc(100vh - 84px)"><el-auto-resizer><template #default="{ height, width }"><el-table-v2fixed:columns="columns":data="data":sort-by="sortBy":header-height="[50, 40]":header-class="headerClass"@column-sort="onSort":width="width":height="height"><template #header="props"><CustomizedHeader v-bind="props"></CustomizedHeader></template></el-table-v2></template></el-auto-resizer></div>
</template><script setup>
import { h, ref } from 'vue'
import {TableV2FixedDir,TableV2Placeholder,TableV2SortOrder
} from 'element-plus'// 生成帶二級表頭的 columns
function generateColumns(length = 10, prefix = 'column-') {return Array.from({ length }).map((_, columnIndex) => ({key: `${prefix}${columnIndex}`,dataKey: `${prefix}${columnIndex}`,title: `Column ${columnIndex}`,width: 150}))
}function generateData(columns, length = 200, prefix = 'row-') {return Array.from({ length }).map((_, rowIndex) => {return columns.reduce((rowData, column, columnIndex) => {rowData[column.dataKey] = `Row ${rowIndex} - Col ${columnIndex}`return rowData},{id: `${prefix}${rowIndex}`,parentId: null})})
}function CustomizedHeader({ cells, columns, headerIndex }) {if (headerIndex === 1) return cellsconst groupCells = []let width = 0let idx = 0columns.forEach((column, columnIndex) => {if (column.placeholderSign === TableV2Placeholder) {groupCells.push(cells[columnIndex])} else {width += cells[columnIndex].props.column.widthidx++const nextColumn = columns[columnIndex + 1]if (columnIndex === columns.length - 1 ||nextColumn?.placeholderSign === TableV2Placeholder ||idx === (headerIndex === 0 ? 4 : 2)) {groupCells.push(h('div',{class: 'flex items-center justify-center custom-header-cell',role: 'columnheader',style: {...cells[columnIndex].props.style,width: `${width}px`,border: `2px solid #fff`}},`Group width ${width}`))width = 0idx = 0}}})return groupCells
}const headerClass = ({ headerIndex }) => {return headerIndex === 0 ? 'el-primary-color' : ''
}const columns = generateColumns(70)
let data = generateData(columns, 20)columns[0].fixed = TableV2FixedDir.LEFTfor (let i = 0; i < 3; i++) {columns[i].sortable = true
}const sortBy = ref({key: 'column-0',order: TableV2SortOrder.ASC
})const onSort = (_sortBy) => {// 創建新數組以保持響應性data = [...data].reverse()sortBy.value = _sortBy
}</script><style>
.el-el-table-v2__header-row .custom-header-cell {border-right: 1px solid var(--el-border-color);
}.el-el-table-v2__header-row .custom-header-cell:last-child {border-right: none;
}.el-primary-color {background-color: var(--el-color-primary);color: var(--el-color-white);font-size: 14px;font-weight: bold;
}.el-primary-color .custom-header-cell {padding: 0 4px;
}
</style>

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/905561.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/905561.shtml
英文地址,請注明出處:http://en.pswp.cn/news/905561.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

防御保護-----第十二章:VPN概述

文章目錄 第二部分&#xff0c;數據安全第十二章&#xff1a;VPN概述VPN概述VPN分類VPN關鍵技術隧道技術身份認證技術加解密技術數據認證技術 數據的安全傳輸密碼學發展史 對稱加密算法 --- 傳統密碼算法密鑰解釋流加密分組加密 --- 塊加密算法填充算法PKCS7算法分組模式 公鑰密…

前端項目打包部署流程j

1.打包前端項目(運行build這個文件) 2.打包完成后&#xff0c;控制臺如下所示:(沒有報錯即代表成功) 3.左側出現dist文件夾 4.準備好我們下載的nginx(可以到官網下載一個),然后在一個沒有中文路徑下的文件夾里面解壓。 5.在繼承終端內打開我們的項目&#xff0c;找到前面打包好…

Go語言標識符

文章目錄 標識符的組成規則Go語言關鍵字預定義標識符標識符命名慣例 特殊標識符標識符訪問權限控制 在Go語言中&#xff0c;標識符(Identifier)是用來命名變量、函數、類型、常量等程序實體的名稱。 標識符的組成規則 1、必須以字母或下劃線(_)開頭&#xff1a; 字母包括Unico…

CST軟件對OPERACST軟件聯合仿真汽車無線充電站對人體的影響

上海又收緊了新能源車的免費上牌政策。所以年前一些伙伴和我探討過買新能源汽車的問題&#xff0c;小伙伴們基本糾結的點是買插電還是純電&#xff1f;我個人是很抗拒新能源車的&#xff0c;也開過坐過。個人有幾個觀點&#xff1a; 溢價過高&#xff0c;不保值。實際并不環保…

吳恩達機器學習筆記:多變量梯度下降

1.多維特征 之前我們探討了單變量/特征的回歸模型&#xff0c;現在我們對房價模型增加更多的特征&#xff0c;例如房間數樓層等&#xff0c;構成一個含有多個變量的模型&#xff0c;模型中的特征為 &#xff08; x 1 &#xff0c; x 2 &#xff0c; x 3... x n &#xff09; &…

【Linux Nano Vim快捷鍵大全】

Nano 快捷鍵大全 常用高頻操作 功能描述快捷鍵組合替代按鍵/備注使用頻率顯示幫助CtrlGF1高保存文件CtrlOF3高退出編輯器CtrlXF2高剪切當前行CtrlKF9高粘貼內容CtrlUF10高搜索文本CtrlWF6高替換文本Ctrl\AltR高撤銷操作AltU無中重做操作AltE無中跳轉到行號Ctrl_AltG中插入文件…

uniapp vue 沉浸式窗體如何獲取并排除外部手機瀏覽器底部菜單欄工具欄高度

這個問題可以簡稱為&#xff1a;uniapp vue 獲取可視窗口高度 第一種方案&#xff0c;只改變css樣式 /* 不考慮瀏覽器UI的最小視口高度 */ .element {height: 100svh; /* small viewport height */ }/* 考慮瀏覽器UI變化的動態視口高度 */ .element {height: 100dvh; /* dyna…

React Native告別圖標體積大手動更換慢的噩夢:讓圖標更新像修改文字一樣簡單

寫在前面:凌晨三點的圖標戰爭 “所有圖標都要換成圓角風格,明天上線!”——產品經理這條消息彈出時,我的保溫杯差點從手中滑落。掃了一眼項目中的347個圖標文件,我知道今晚又是個不眠夜。但就在絕望之際,同事發來一個GIF:他只是在終端輸入了iconfont-rn --update,所有…

自然語言處理與BI融合實戰:ChatBI動態語義解析技術架構剖析

在數字經濟時代&#xff0c;數據已成為企業核心競爭力的關鍵要素。如何高效挖掘數據價值、實現智能化決策&#xff0c;成為企業數字化轉型的核心命題。傳統商業智能&#xff08;BI&#xff09;工具雖具備強大的數據處理能力&#xff0c;但其技術門檻高、交互方式復雜等局限性日…

鴻蒙OSUniApp開發支持多語言的國際化組件#三方框架 #Uniapp

使用UniApp開發支持多語言的國際化組件 在全球化的今天&#xff0c;一個優秀的應用往往需要支持多種語言以滿足不同地區用戶的需求。本文將詳細講解如何在UniApp框架中實現一套完整的國際化解決方案&#xff0c;從而輕松實現多語言切換功能。 前言 去年接手了一個面向國際市場…

SpringBoot的外部化配置

一、什么是外部化配置 外部化配置是指把應用程序中各種可配置的參數、屬性等信息&#xff0c;從代碼內部提取出來&#xff0c;放置在外部的配置文件、數據庫或配置中心等地方&#xff08;比如使用.properties、.yml 或.xml 等格式的文件&#xff09;進行管理。提高應用程序的可…

SQL中聯表的運用

當出現要大量數據去查詢時&#xff0c;不要一個個去SQL查詢&#xff0c;應該要批量的去查詢。 def batch_cavity_query(self, fuseids): “”“批量查詢cavity信息”“” if not fuseids: return {} # 創建臨時表批量查詢 try:# 創建臨時表self.cursor.execute("CREATE …

React面試常問問題詳解

以下是30個React面試中常見的問題及簡要解析&#xff0c;涵蓋基礎概念、核心原理、性能優化、Hooks、狀態管理等方面&#xff0c;適用于初中高級開發者準備面試時參考&#xff1a; 一、React 基礎與核心概念 React 是什么&#xff1f; React 是由 Facebook 開發的用于構建用戶界…

【vite好用的配置】自動導入組件、vue中的hook、路徑解析、打包配置、本地運行反向代理配置

前言 之前出了一篇自己搭建 后臺管理系統的文章&#xff0c;今天順便把vite配置&#xff0c;涉及到的一些給大家分享吧。 按需食用哈。 文章目錄 前言一、 自動導入vue中的hook、ref等1. 安裝插件2. 配置 Vite&#xff08;vite.config.ts 或 vite.config.js&#xff09;1&…

思科(Cisco ASA/Firepower)、華三(H3C)、華為(Huawei USG)防火墻 的基礎配置

以下是針對 思科&#xff08;Cisco ASA/Firepower&#xff09;、華三&#xff08;H3C&#xff09;、華為&#xff08;Huawei USG&#xff09;防火墻 的基礎配置指南&#xff0c;涵蓋 區域劃分、安全策略、NAT、路由 等核心功能。配置示例基于通用場景&#xff0c;實際部署時需根…

mac latex vscode 配置

mac latex vscode 配置 安裝mactex.pkg 這里有個快速下載的鏡像 https://mirrors.aliyun.com/CTAN/systems/mac/mactex/ 可以檢查是否將 PATH 寫入 export PATH"/Library/TeX/texbin:$PATH"vscode 下載插件 Latex Workshop 在配置文件 settings.json 中輸入如下的…

AI日報 · 2025年5月14日|Android 生態大型更新與多端 Gemini 集成

1、Google “Android?Show:?I/O?Edition” 匯總&#xff1a;設計、安全、Gemini 三線并進 北京時間 5?月?14?日凌晨&#xff08;原文標注 5?月?13?日 PDT&#xff09;&#xff0c;Google 在 I/O 前夕舉辦的 Android?Show 一口氣公布四大方向更新&#xff1a;① Mater…

MySQL入門指南:環境搭建與服務管理全流程

引言 各位開發者朋友們好&#xff01;今天我們將開啟MySQL的學習之旅 &#x1f31f; 作為世界上最流行的開源關系型數據庫&#xff0c;MySQL在Web應用、企業系統等領域占據著舉足輕重的地位。無論你是剛入行的新手&#xff0c;還是想系統復習的老鳥&#xff0c;這篇教程都將為…

LLM 論文精讀(四)LLM Post-Training: A Deep Dive into Reasoning Large Language Models

這是一篇2025年發表在arxiv中的LLM領域論文&#xff0c;是一篇非常全面的綜述類論文&#xff0c;介紹了當前主流的強化學習方法在LLM上的應用&#xff0c;文章內容比較長&#xff0c;但建議LLM方面的從業人員反復認真閱讀。 寫在最前面 為了方便你的閱讀&#xff0c;以下幾點的…

從規則驅動到深度學習:自然語言生成的進化之路

自然語言生成技術正經歷著人類文明史上最劇烈的認知革命。這項起源于圖靈測試的技術&#xff0c;已經從簡單的符號操作演變為具備語義理解能力的智能系統。當我們回溯其發展歷程&#xff0c;看到的不僅是算法模型的迭代更新&#xff0c;更是一部人類認知自我突破的史詩。這場革…