Vue3+Vite+TypeScript+Element Plus開發-22.客制Table組件

?系列文檔目錄

Vue3+Vite+TypeScript安裝

Element Plus安裝與配置

主頁設計與router配置

靜態菜單設計

Pinia引入

Header響應式菜單縮展

Mockjs引用與Axios封裝

登錄設計

登錄成功跳轉主頁

多用戶動態加載菜單

Pinia持久化

動態路由?-動態增加路由

動態路由-動態刪除路由?

路由守衛-無路由跳轉404

?路由守衛-未登錄跳轉登錄界面

?登錄退出

Tags-組件構建

Tags-與菜單聯動?

Pinia持久化優化

按鈕權限

客制按鈕組件

客制Table組件

客制Form組件

國際化

配置文件


?文章目錄

目錄

?系列文檔目錄

?文章目錄

前言

子組件-Table組件構建

父組件-Table組件顯示

演示效果

?后續

代碼下載?


前言

上一章節討論按鈕組件構建與使用,本章節重點討論Table組件構建與結合按鈕組件使用。


子組件-Table組件構建

創建文件: ?components/ActionTableCont.vue ?

實現功能:

1. 欄位定義: 欄位配置由父組件傳入,欄位可自定義隱藏。

2. 數據來源: 表格數據由父組件提供。

3. 勾選功能: 支持行數據的勾選操作。

4. 分頁功能: 集成分頁功能,支持數據分頁顯示。

<template><div><!-- 表格 --><el-table:data="currentPageData"style="width: 100%"border@selection-change="handleSelectionChange"><!-- 選擇列 --><el-table-columnv-if="showSelection"type="selection"width="55"align="center"></el-table-column><!-- 序號列 --><el-table-columntype="index"label="序號"width="50"align="center"></el-table-column><!-- 動態列 --><el-table-columnv-for="column in visibleColumns":key="column.prop":prop="column.prop":label="column.label":width="column.width":align="column.align || 'left'"></el-table-column></el-table><!-- 分頁 --><el-pagination:current-page="currentPage":page-size="pageSize":page-sizes="pageSizes"layout="total, sizes, prev, pager, next, jumper":total="tableData.length"@size-change="handleSizeChange"@current-change="handleCurrentChange"style="margin-top: 20px"></el-pagination></div>
</template><script setup>
import { ref, computed, defineProps, defineEmits, watch } from 'vue';const props = defineProps({tableColumns: {type: Array,required: true,default: () => [],},tableData: {type: Array,required: true,default: () => [],},pageSize: {type: Number,default: 10,},pageSizes: {type: Array,default: () => [5, 10, 15, 20],},showSelection: {type: Boolean,default: false,},
});const emit = defineEmits(['update:currentPage', 'update:pageSize', 'selection-change']);const currentPage = ref(1);const currentPageData = computed(() => {const start = (currentPage.value - 1) * props.pageSize;const end = start + props.pageSize;return props.tableData.slice(start, end);
});const visibleColumns = computed(() => {return props.tableColumns.filter((column) => !column.hide);
});const handleSizeChange = (newSize) => {console.log(`分頁大小改變,新的分頁大小為: ${newSize}`);emit('update:pageSize', newSize);currentPage.value = 1; // 重置當前頁為第一頁emit('update:currentPage', currentPage.value);
};const handleCurrentChange = (newPage) => {console.log(`當前頁碼改變,新的頁碼為: ${newPage}`);currentPage.value = newPage;emit('update:currentPage', currentPage.value);
};const handleSelectionChange = (selection) => {emit('selection-change', selection);
};// 監聽 currentPage 和 pageSize 的變化并記錄日志
watch(currentPage, (newVal, oldVal) => {console.log(`currentPage changed from ${oldVal} to ${newVal}`);
});watch(() => props.pageSize, (newVal, oldVal) => {console.log(`pageSize changed from ${oldVal} to ${newVal}`);
});
</script>

父組件-Table組件顯示

功能說明:

1. 按鈕組件引用: 刪除按鈕默認不可用。

2. 表格組件引用: 每頁顯示 5 條數據。

3. 欄位數據模擬: 地址欄位默認隱藏。

4. 勾選功能:

????????? 勾選數據后,刪除按鈕變為可用狀態;

????????? 未勾選任何數據時,刪除按鈕保持不可用狀態。

5. 勾選數據展示: 勾選的數據會在表格下方空白處顯示。

6. 刪除按鈕功能: 點擊刪除按鈕時,獲取勾選的數據。

<template><div><ActionButtonGroup:show-add="hasPermission('demo2:create')"  :show-delete="true":disabled-add="false":disabled-edit="!selectedData.length":disabled-delete="!selectedData.length"@add="handleAdd"@edit="handleEdit"@delete="handleDelete"/><!-- 表格 --><CustomTable:tableColumns="columns":tableData="data":pageSize="pageSize":pageSizes="[5, 10, 15, 20, 30]":showSelection="true"@update:currentPage="currentPage = $event"@update:pageSize="pageSize = $event"@selection-change="handleSelectionChange"/><!-- 顯示選中數據 --><div v-if="selectedData.length > 0" style="margin-top: 20px"><h3>選中的數據:</h3><pre>{{ selectedData }}</pre></div></div>
</template><script setup>
import { ref } from 'vue';
import CustomTable from '@/components/ActionTableCont.vue';
import { usePermission } from "@/utils/permissionUtils";
import ActionButtonGroup from "@/components/ActionBtnHdrCont.vue";
import {Plus,Check,Delete,Edit,Message,Search,Star,Upload,
} from '@element-plus/icons-vue'const hasPermission = usePermission();const columns = ref([{prop: 'date',label: '日期',width: 180,},{prop: 'name',label: '姓名',width: 180,},{prop: 'address',label: '地址',hide: true,},
]);const data = ref([{id: 1,date: '2025-04-14',name: '張三',address: '上海市普陀區金沙江路 1518 弄',},{id: 2,date: '2025-04-15',name: '李四',address: '上海市普陀區金沙江路 1517 弄',},{id: 3,date: '2025-04-16',name: '王五',address: '上海市普陀區金沙江路 1516 弄',},{id: 4,date: '2025-04-17',name: '趙六',address: '上海市普陀區金沙江路 1515 弄',},{id: 5,date: '2025-04-18',name: '孫七',address: '上海市普陀區金沙江路 1514 弄',},{id: 6,date: '2025-04-19',name: '周八',address: '上海市普陀區金沙江路 1513 弄',},{id: 7,date: '2025-04-20',name: '吳九',address: '上海市普陀區金沙江路 1512 弄',},{id: 8,date: '2025-04-21',name: '鄭十',address: '上海市普陀區金沙江路 1511 弄',},{id: 9,date: '2025-04-22',name: '錢十一',address: '上海市普陀區金沙江路 1510 弄',},{id: 10,date: '2025-04-23',name: '孔十二',address: '上海市普陀區金沙江路 1509 弄',},{id: 11,date: '2025-04-24',name: '秦十三',address: '上海市普陀區金沙江路 1508 弄',},{id: 12,date: '2025-04-25',name: '尤十四',address: '上海市普陀區金沙江路 1507 弄',},
]);const currentPage = ref(1);
const pageSize = ref(5);// 默認每頁顯示5條數據// 用于存儲選中的數據
const selectedData = ref([]);// 處理選中數據變化
const handleSelectionChange = (selection) => {selectedData.value = selection;
};// 獲取選中數據
const handleDelete = () => {console.log('Selected Data:', selectedData.value);console.log('Selected  Data length:', selectedData.value.length);if (selectedData.value.length > 0) {// 刪除邏輯console.log('Deleting selected data...');selectedData.value = [];} else {console.log('No selected data to delete.');}};
</script>

演示效果

測試效果:

1. 地址欄位: 地址欄位未顯示。

2. 數據加載: 數據被成功加載。

3. 分頁顯示: 頁碼與翻頁功能顯示正確。

4. 刪除按鈕: 刪除按鈕默認不可用。

測試效果:

1. 勾選操作:

????????? 勾選任意數據后,刪除按鈕顯示,選中數據顯示勾選資料

????????? 未勾選任何數據時,刪除按鈕不顯示。

2. 全選與全取消:

????????? 支持全選操作,全選后刪除按鈕顯示,選中數據顯示勾選資料

????????? 支持全取消操作,全取消后刪除按鈕不顯示。

測試效果:

1. 每頁顯示筆數: 每頁顯示的記錄數正確。

2. 頁碼選擇: 頁碼選項可正常選擇。

3. 前往頁碼: 支持跳轉到指定頁碼。


?后續

本章節主要介紹:客制化 Table 組件的實現。下一章節將討論:Form 組件的構建。


代碼下載?

GitCode - 全球開發者的開源社區,開源代碼托管平臺GitCode是面向全球開發者的開源社區,包括原創博客,開源代碼托管,代碼協作,項目管理等。與開發者社區互動,提升您的研發效率和質量。https://gitcode.com/sen_shan/ssVue3Demo.gitss.vue3.demo: 本項目以 Vue3、Vite、TypeScript、Element Plus 為核心框架,結合 Vue Router、Element Plus Icons、Less、Axios、Pinia、Mock 等技術,初始的構建登錄,主界面,權限控制,按鈕組件,table組件,form組件等小模型,可以隨意搭建web管理系統https://gitee.com/sen_shan/ssVue3Demo.git

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

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

相關文章

Java讀取JSON文件并將其中元素轉為JSON對象輸出

&#x1f91f;致敬讀者 &#x1f7e9;感謝閱讀&#x1f7e6;笑口常開&#x1f7ea;生日快樂?早點睡覺 &#x1f4d8;博主相關 &#x1f7e7;博主信息&#x1f7e8;博客首頁&#x1f7eb;專欄推薦&#x1f7e5;活動信息 文章目錄 Java讀取JSON文件并將其中元素轉為JSON對象輸…

Spring Boot自動配置原理深度解析:從條件注解到spring.factories

大家好&#xff01;今天我們來深入探討Spring Boot最神奇的特性之一——自動配置(Auto-configuration)。這個功能讓Spring Boot如此受歡迎&#xff0c;因為它大大簡化了我們的開發工作。讓我們一起來揭開它的神秘面紗吧&#xff01;&#x1f440; &#x1f31f; 什么是自動配置…

【ELF2學習板】利用OpenMP采用多核并行技術提升FFTW的性能

目錄 引言 OpenMP簡介 編譯OpenMP支持的FFTW庫 部署與測試 測試程序 程序部署 測試結果 結語 引言 在前面已經介紹了在ELF2開發板上運行FFTW計算FFT。今天嘗試利用RK3588的多核運算能力來加速FFT運算。FFTW利用多核能力可以考慮使用多線程或者OpenMP。今天介紹一下Ope…

2000-2017年各省城市天然氣供氣總量數據

2000-2017年各省城市天然氣供氣總量數據 1、時間&#xff1a;2000-2017年 2、來源&#xff1a;國家統計局、能源年鑒 3、指標&#xff1a;行政區劃代碼、城市、年份、城市天然氣供氣總量 4、范圍&#xff1a;31省 5、指標說明&#xff1a;城市天然氣供氣總量是指在一定時間…

Hadoop的三大結構及其作用?

Hadoop是一個分布式存儲和計算框架&#xff0c;其三大核心組件是HDFS&#xff08;Hadoop Distributed File System&#xff09;、YARN&#xff08;Yet Another Resource Negotiator&#xff09;和MapReduce。它們各自有著重要的作用&#xff0c;共同構成了Hadoop生態系統的基礎…

【AI論文】ColorBench:視覺語言模型能否看到并理解多彩的世界?一個全面的色彩感知、推理和魯棒性基準測試

摘要&#xff1a;顏色在人類感知中起著重要作用&#xff0c;通常在視覺推理中提供關鍵線索。 然而&#xff0c;尚不清楚視覺語言模型&#xff08;VLMs&#xff09;是否以及如何像人類一樣感知、理解和利用顏色。 本文介紹了ColorBench&#xff0c;這是一個精心設計的創新基準&a…

Python番外——常用的包功能講解和分類組合

目錄 1. Web開發框架與工具 2. 數據處理與分析 3. 網絡請求與爬蟲 4. 異步編程 5. 數據庫操作 6. 圖像與多媒體處理 7. 語言模型與NLP 8. 安全與加密 9. 配置與工具 10. 其他工具庫 11.典型組合場景 此章節主要是記錄我所使用的包&#xff0c;以及模塊。方便供自己方…

華碩原廠系統槍神9/9p超竟版-WIN11原裝開箱出廠系統安裝

華碩原廠系統槍神9/9p超竟版-WIN11-24H2-專業工作站版本安裝可帶F12-ASUSRecovery恢復功能 適用機型&#xff1a; G635LX、G635LW、G835LX、G835LW、G615LW、G615LP、G615LM、G615LH G815LW、G815LP、G815LM、G815LH、G635LR、G835LR、G615LR、G815LR 遠程恢復安裝&#xff…

拉取windows的docker鏡像轉到服務器上構建服務鏡像

在windows上將拉取ubuntu的docker鏡像轉到服務器上 1.要求 1.1 要求windows和服務器安裝好docker 2.拉取ubuntu鏡像到windows&#xff08;dos操作&#xff0c;可能需要連接到外網&#xff09; 一旦你選擇了一個合適的基礎鏡像&#xff0c;你可以使用docker pull命令從Docke…

T1結構像+RS-fMRI影像處理過程記錄(數據下載+Matlab工具箱+數據處理)

最近需要仿真研究T1結構像RS-fMRI影像融合處理輸出目標坐標的路線可行性。就此機會記錄下來。 為了完成驗證目標處理&#xff0c;首先需要有數據&#xff0c;然后需要準備對應的處理平臺和工具箱&#xff0c;進行一系列。那么開始記錄~ 前言&#xff1a; 為了基于種子點的功能連…

Nginx-前言

nginx是什么&#xff1f; 輕量級&#xff0c;開源免費的web服務器軟件&#xff0c;服務器安裝nginx&#xff0c;服務器則成為web服務器 nginx的穩定版版本號&#xff1a; 偶數版本 nginx的相關目錄&#xff1a; /etc/nginx/nginx.conf nginx的主配置文件 /etc/nginx/ngi…

緩慢前行,靜待花開

最期待的不是成品出爐&#xff0c;而是揉面時感受到溫度、發酵時聞到淡淡香氣 1 “慢就是穩&#xff0c;穩就是快”。 這句來自特種兵的訓練語&#xff0c;被許多自媒體人奉為準則。 在看似風云突變的環境下&#xff0c;速度被隱藏在穩定中&#xff0c;結果被醞釀在過程里。…

洛谷的幾道題(2)

P1008 [NOIP 1998 普及組] 三連擊 # P1008 [NOIP 1998 普及組] 三連擊 ## 題目背景 本題為提交答案題&#xff0c;您可以寫程序或手算在本機上算出答案后&#xff0c;直接提交答案文本&#xff0c;也可提交答案生成程序。 ## 題目描述 將 $1, 2, \ldots , 9$ 共 $9$ 個數分…

Day10【基于encoder- decoder架構實現新聞文本摘要的提取】

實現新聞文本摘要的提取 1. 概述與背景2.參數配置3.數據準備4.數據加載5.主程序6.預測評估7.生成效果8.總結 1. 概述與背景 新聞摘要生成是自然語言處理&#xff08;NLP&#xff09;中的一個重要任務&#xff0c;其目標是自動從長篇的新聞文章中提取出簡潔、準確的摘要。近年來…

【大疆dji】ESDK開發環境搭建(軟件準備篇)

接上一篇【大疆dji】ESDK開發環境搭建&#xff08;硬件準備篇&#xff09; 1. 編譯環境 ESDK 提供 x86_64/aarch64 基于 Linux 平臺 Ubuntu 發行版操作系統構建的靜態庫&#xff0c;運行 demo 先正確安裝所需的依賴包。arm32位就不支持了。建議使用編譯安裝的方式&#xff0c;…

Java數據結構——ArrayList

Java中ArrayList 一 ArrayList的簡介二 ArrayList的構造方法三 ArrayList常用方法1.add()方法2.remove()方法3.get()和set()方法4.index()方法5.subList截取方法 四 ArrayList的遍歷for循環遍歷增強for循環(for each)迭代器遍歷 ArrayList問題及其思考 前言 ArrayList是一種 順…

【信息獲取能力】

第一層&#xff1a;表象觀察 現象&#xff1a;AI系統&#xff08;如GPT-4&#xff09;可以瞬間調用并整合全球互聯網上的公開信息&#xff0c;而人類即使窮盡一生也無法完成同等規模的知識儲備。 底層邏輯&#xff1a; 存儲與檢索效率&#xff1a;人類大腦的記憶容量有限&…

03、GPIO外設(三):標準庫代碼示例

標準庫代碼示例 1、點亮LED2、LED閃爍3、LED流水燈4、按鍵控制LED5、蜂鳴器 本章源代碼鏈接&#xff1a; 鏈接: link 1、點亮LED 實驗要求&#xff1a;點亮LED ①LED.c文件的代碼如下: #include "LED.h"/*** LED引腳初始化*//* 定義數組&#xff0c;想要添加引腳…

卷積神經網絡(CNN)與VGG16在圖像識別中的實驗設計與思路

卷積神經網絡&#xff08;CNN&#xff09;與VGG16在圖像識別中的實驗設計與思路 以下從基礎原理、VGG16架構解析、實驗設計步驟三個層面展開說明&#xff0c;結合代碼示例與關鍵參數設置&#xff0c;幫助理解其應用邏輯。 一、CNN與VGG16的核心差異 基礎CNN結構 通常包含33~55個…

java導出word含表格并且帶圖片

背景 我們需要通過 Java 動態導出 Word 文檔&#xff0c;基于預定義的 模板文件&#xff08;如 .docx 格式&#xff09;。模板中包含 表格&#xff0c;程序需要完成以下操作&#xff1a; 替換模板中的文本&#xff08;如占位符 ${設備類型} 等&#xff09;。 替換模板中的圖…