動態列表的數據渲染、新增、編輯等功能開發及數據處理

說一個比較繁瑣的功能吧,我使用的是 vue + element UI + vxe-table 來實現的這個動態列表,其實呢 vxe-table 這個表格插件里邊有動態表格?vxe-grid 只需要通過表頭數組里邊的?field: 'name', 與表體數組里的?name: 'Test1',? 對應上就行了,很簡單吧;可是問題來了,后端給我的是一串超長的id,表體里也是給了一個超長的id讓進行匹配(如:圖1),然后導致匹配出現問題,搜了一下說純數字不太行,會出問題,事實也確實如此,無論怎么匹配,頁面只顯示有多少行數據,但每一列的值都是空的,沒有任何顯示,于是就自己進行了數據的處理。

圖1

注:根據上圖會看到表體數組?rowsList?里邊又是一個數組,里邊這個數組里又包含了多個對象(這多個對象就是每一列對應的值了,需要用 fieId 去匹配)?

html模版部分:

<vxe-grid border resizable ref="xGrid" :columns="tableColumn" :data="tableData"><template v-slot:operation="{ row }"><el-button size="mini" @click="editBtn(row)" type="text">編輯</el-button><el-button size="mini" @click="delBtn(row)" type="text" style="color: #f56c6c;">刪除</el-button></template>
</vxe-grid>

1、對接口獲取到的數據進行匹配處理,然后回顯到列表上,如下:

表頭數據(模擬):

let columnList = [{"fieId": "1909122684954550274","title": "JST TPM","fieldType": 4},{"fieId": "1909122684954550275","title": "備注","fieldType": 0},{"fieId": "1909122684962938882","title": "客戶提出人姓名","fieldType": 0},{"fieId": "1909122684962938883","title": "提出時間","fieldType": 3},{"fieId": "1909122684962938884","title": "客戶需求明細","fieldType": 1},{"fieId": "1909122684962938885","title": "功能模塊名稱","fieldType": 0}
]

表體數據(模擬):

let rowsList = [[{"sortNo": "0","fieId": "1909122684954550274","fieValue": "111"},{"sortNo": "0","fieId": "1909122684954550275","fieValue": "2132"},{"sortNo": "0","fieId": "1909122684962938882","fieValue": "4124"},{"sortNo": "0","fieId": "1909122684962938883","fieValue": "2025-04-16 00:00:00"},{"sortNo": "0","fieId": "1909122684962938884","fieValue": "1"},{"sortNo": "0","fieId": "1909122684962938885","fieValue": "發送方"}],[{"sortNo": "1","fieId": "1909122684954550274","fieValue": "139850429"},{"sortNo": "1","fieId": "1909122684954550275","fieValue": "12312"},{"sortNo": "1","fieId": "1909122684962938882","fieValue": "312312"},{"sortNo": "1","fieId": "1909122684962938883","fieValue": "2025-04-22 00:00:00"},{"sortNo": "1","fieId": "1909122684962938884","fieValue": "1"},{"sortNo": "1","fieId": "1909122684962938885","fieValue": "213124"}]
]

處理方法:

                columnList.forEach((item, index) => {// 為每列添加唯一field標識const fieldName = `title${index}`;this.$set(item, 'field', fieldName);this.tableColumn.push(item);// 處理行數據rowsList.forEach((row, rowIndex) => {row.forEach((cell) => {if (item.fieId === cell.fieId) {// 初始化行對象(如果尚未存在)if (!tableList[rowIndex]) {tableList[rowIndex] = {// 基礎信息id: rowIndex, // 添加行IDsortNo: cell.sortNo, // 添加編號};}// 添加動態字段this.$set(tableList[rowIndex], fieldName, cell.fieValue);// 保留原始數據(可選)this.$set(tableList[rowIndex], `${fieldName}_meta`, {fieId: item.fieId,title: item.title,fieldType: item.fieldType,content: cell.fieValue,});}});});});this.tableData = tableList;this.tableColumn.push({ type: 'seq', fixed: "left", width: 50 },{ title: '操作', width: 100, showOverflow: true, fixed: "right", slots: { default: 'operation' } })console.log(this.tableColumn,'this.tableColumn');console.log(this.tableData,'this.tableData');

處理后的結果數據:

以上就對列表回顯處理完成!

2、接下來是新增時候的處理

        addBtn(){this.dialogVisible = true;this.titleText = '新增';this.tableColumn.map((item) => {item.manageId = this.queryData.id,this.$set(item, 'content', '');})},

新增直接在?this.tableColumn 里邊新增一個content 字段 然后在提交的時候直接把?this.tableColumn 這個數組全部提交給后端即可!

3、編輯處理

        editBtn(row){this.dialogVisible = true;this.titleText = '編輯';this.tableColumn.forEach(item => {if (!item.fieId) return; // 跳過沒有 fieId 的,比如操作列等// 在 obj1 中查找所有帶有 _meta 的鍵for (const key in row) {if (key.endsWith('_meta')) {const meta = row[key];if (meta && meta.fieId === item.fieId) {this.$set(item, 'content', meta.content);break;}}}});},

注:因為在列表的時候修改了數據格式,所以在編輯的時候還要對數據進行處理,然后才能使用

編輯的處理方法說明:

  • row 中的 title0_meta, title1_meta 是動態的,不能直接寫死去訪問。

  • 所以用 for...in 遍歷 row?所有鍵,找到以 _meta 結尾的。

  • 然后對比 meta.fieIditem.fieId,如果匹配,就把 content 寫入到 item.content

附加:如果列表中有人員、組織、類型等字段需要通過id去匹配顯示中文的,方法如下(我的是通過人員id匹配人員姓名展示):

修改 getList 方法

getList() {this.loading = true;this.tableColumn = [];this.tableData = [];let tableList = [];let userIdList = []; // 新增:收集用戶IDlet userFieldMap = []; // 保存在哪些字段上用到用戶信息let params = {manageId: this.queryData.id,current: this.tablePage.current,size: this.tablePage.size,};api.queryParticularsDataAttach(params).then((res) => {if (res.data.data == null) {this.tableColumn = [];this.tableData = [];} else {let columnList = res.data.data.columns;let rowsList = res.data.data.rowsList;this.tablePage.totalElements = res.data.data.total;columnList.forEach((item, index) => {const fieldName = `title${index}`;this.$set(item, 'field', fieldName);this.tableColumn.push(item);rowsList.forEach((row, rowIndex) => {row.forEach((cell) => {if (item.fieId === cell.fieId) {if (!tableList[rowIndex]) {tableList[rowIndex] = {id: rowIndex,sortNo: cell.sortNo,};}// 動態字段賦值this.$set(tableList[rowIndex], fieldName, cell.fieValue);this.$set(tableList[rowIndex], `${fieldName}_meta`, {fieId: item.fieId,title: item.title,fieldType: item.fieldType,content: cell.fieValue,});// 如果是人員類型字段(fieldType === 4),收集 userIdif (item.fieldType === 4 && cell.fieValue) {userIdList.push(cell.fieValue);userFieldMap.push({rowIndex,fieldName,userId: cell.fieValue,});}}});});});this.tableData = tableList;// 插入序號列和操作列this.tableColumn.push({ type: 'seq', fixed: "left", width: 50 },{ title: '操作', width: 100, showOverflow: true, fixed: "right", slots: { default: 'operation' } });// 👇 去查人員名稱if (userIdList.length > 0) {this.getUsersList(userIdList).then((userMap) => {// 替換tableData中的字段內容為用戶姓名userFieldMap.forEach(({ rowIndex, fieldName, userId }) => {const user = userMap[userId];if (user) {// 替換顯示值this.$set(this.tableData[rowIndex], fieldName, user.realName + '(' + user.account + ')');// 同步 meta 中的 content 也更新為姓名if (this.tableData[rowIndex][`${fieldName}_meta`]) {this.tableData[rowIndex][`${fieldName}_meta`].content = user.realName + '(' + user.account + ')';}}});});}}this.loading = false;}).catch(() => {this.loading = false;});
},// 👇 獲取人員數據的方法:返回 userId -> user 信息的映射
getUsersList(idList) {return api.getPeoples(idList).then((res) => {const userList = res.data.data || [];const userMap = {};userList.forEach(user => {userMap[user.id] = user;});return userMap;});
}

以上僅是個人實現的使用方法,可根據自己的需求進行修改或者優化

至此完成!!!

測試有效!!!感謝支持!!!

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

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

相關文章

Linux學習筆記——文件系統基礎與根文件系統詳解

文件系統基礎與根文件系統詳解 什么是文件系統&#xff1f;什么是根文件系統&#xff08;Root File System&#xff09;&#xff1f;一句話理解&#xff1a;更詳細地說&#xff1a; 根文件系統為什么重要&#xff1f;1. 啟動依賴2. 提供根目錄 /3. 支持掛載其他文件系統4. 提供…

R語言進行聚類分析

目錄 簡述6種系統聚類法 實驗實例和數據資料&#xff1a; 上機實驗步驟&#xff1a; 進行最短距離聚類&#xff1a; 進行最長距離聚類&#xff1a; 進行中間距離聚類&#xff1a; 進行類平均法聚類&#xff1a; 進行重心法聚類&#xff1a; 進行ward.D聚類&#xff1a;…

【回眸】Linux 內核 (十四)進程間通訊 之 信號量

前言 信號量概念 信號量常用API 1.創建/獲取一個信號量 2.改變信號量的值 3. 控制信號量 信號量函數調用 運行結果展示 前言 上一篇文章介紹的共享內存有局限性,如:同步與互斥問題、內存管理復雜性問題、數據結構限制問題、可移植性差問題、調試困難問題。本篇博文介…

記錄IBM服務器檢測到備份GPT損壞警告排查解決過程

服務器設備&#xff1a;IBM x3550 M4 Server IMM默認IP地址&#xff1a;192.168.70.125 用戶名&#xff1a;USERID 密碼&#xff1a;PASSW0RD&#xff08;注意是零0&#xff09; 操作系統&#xff1a;Windows Hyper-V Server 2016 IMM Web System Status Warning&#xff1…

“Pseudo Global Warming”:偽全球變暖PGW

“Pseudo Global Warming”&#xff1a;偽全球變暖PGW PGW方法概述&#x1f50d; 一、PGW 方法的定義&#x1f9e0; 二、PGW 方法的基本原理&#x1f6e0;? 三、PGW 方法的主要步驟&#x1f4c8; 四、PGW 模擬時常涉及的變量&#x1f4ca; 五、PGW 方法的優/缺點&#x1f4da;…

2025-04-06 Unity Editor 2 —— GUILayout

文章目錄 常用組件1 Label 文本標簽2 TextField / TextArea / PasswordField 輸入框3 Butto / RepeatButton 按鈕4 Horizontal / Vertical 方向布局5 Box 自動布局框6 ScrollView 滾動視圖7 Horizontal / VerticalSlider 滑動條8 Area GUI 區域9 Window 窗口10 Toolbar 工具欄1…

Qt 交叉編譯詳細配置指南

一、Qt 交叉編譯詳細配置 1. 準備工作 1.1 安裝交叉編譯工具鏈 # 例如安裝ARM工具鏈(Ubuntu/Debian) sudo apt-get install gcc-arm-linux-gnueabihf g++-arm-linux-gnueabihf# 或者64位ARM sudo apt-get install gcc-aarch64-linux-gnu g++-aarch64-linux-gnu 1.2 準備目標…

用PointNet++訓練自己的數據集(語義分割模型semseg)

&#xff08;1&#xff09;訓練部件分割&#xff08;partseg&#xff09;模型和檢測自己點云并將結果保存txt&#xff0c;請看博主上兩篇文章 &#xff08;2&#xff09;本文背景是將pipe點云上的缺陷和本體檢測出來&#xff0c;即1種語義場景&#xff08;pipe&#xff09;&…

kotlin中主構造函數是什么

一 Kotlin 中的主構造函數 主構造函數&#xff08;Primary Constructor&#xff09;是 Kotlin 類聲明的一部分&#xff0c;用于在 創建對象時初始化類的屬性。它不像 Java 那樣是一個函數體&#xff0c;而是緊跟在類名后面。 主構造函數的基本定義 class Person(val name: S…

PHP 過濾器

PHP 過濾器 引言 PHP作為一種廣泛使用的服務器端腳本語言&#xff0c;提供了強大的數據處理能力。在處理數據時&#xff0c;確保數據的安全性和準確性至關重要。PHP過濾器&#xff08;Filters&#xff09;就是用來對數據進行預處理和后處理的工具。本文將詳細介紹PHP過濾器的…

【WebRTC】開源項目Webrtc-streamer介紹

WebRTC-Streamer 這是一個用于通過簡單的信令機制&#xff08;參見 api&#xff09;流式傳輸 WebRTC 媒體源的實驗項目&#xff0c;支持以下媒體源&#xff1a; 捕獲設備 屏幕捕獲 mkv 文件 RMTP/RTSP 源 同時該項目也兼容 WHEP 接口。 注意 * 在線演示已停止&#xff0c…

【Java設計模式】第9章 原型模式講解

9. 原型模式 9.1 原型模式講解 定義:通過拷貝原型實例創建新對象,無需調用構造函數。特點: 創建型模式無需了解創建細節適用場景: 類初始化消耗資源多對象創建過程繁瑣(如屬性賦值復雜)循環體中需創建大量對象優點: 性能優于直接new簡化創建流程缺點: 必須實現clone()…

【Java集合】LinkedList源碼深度分析

參考筆記&#xff1a;java LinkedList 源碼分析&#xff08;通俗易懂)_linkedlist源碼分析-CSDN博客 目錄 1.前言 2.LinkedList簡介 3.LinkedList的底層實現 4.LinkedList 與 ArrayList 的對比 4.1 如何選擇 4.2 對比圖 5.LinkedList 源碼Debug 5.1 add(E e) &#xff…

openssl源碼分析之加密模式(modes)

openssl實現分組加密模式&#xff08;例如AES128-CBC的CBC部分&#xff09;的模塊名字叫做modes&#xff0c;源代碼位于 https://gitee.com/gh_mirrors/openssl/tree/master/crypto/modes 博主又打不開github了TT&#xff0c;只能找個gitee鏡像 頭文件是modes.h。 該模塊目前…

Java 搭建 MC 1.18.2 Forge 開發環境

推薦使用 IDEA 插件 Minecraft Development 進行創建項目 創建完成后即可進行 MOD 開發。 但是關于 1.18.2 的開發教程太少&#xff0c;因此自己研究了一套寫法&#xff0c;寫法并非是最優的但是是探索開發MOD中的一次筆記和記錄 GITHUB: https://github.com/zimoyin/zhenfa…

nginx如何實現負載均衡?

Nginx 是一款高性能的 Web 服務器和反向代理服務器&#xff0c;它可以通過配置實現負載均衡功能。以下是實現負載均衡的詳細步驟和方法&#xff1a; 1. 基本概念 負載均衡是將客戶端請求分發到多個后端服務器上&#xff0c;以提高系統的可用性和性能。Nginx 支持多種負載均衡策…

深度學習天崩開局

李沐大神的d2l包導入&#xff0c; 這玩意需要python311版本&#xff0c;我現在版本已經313了&#xff0c;作為一個天生要強的男人&#xff0c;我是堅決不向低版本低頭的。 然后我就研究啊&#xff0c;各種翻資料啊&#xff0c;然后deepseek加豆包都翻爛了&#xff0c; 最終所…

docker部署jenkins并成功自動化部署微服務

一、環境版本清單&#xff1a; docker 26.1.4JDK 17.0.28Mysql 8.0.27Redis 6.0.5nacos 2.5.1maven 3.8.8jenkins 2.492.2 二、服務架構&#xff1a;有gateway&#xff0c;archives&#xff0c;system這三個服務 三、部署步驟 四、安裝linux 五、在linux上安裝redis&#…

MPDrive:利用基于標記的提示學習提高自動駕駛的空間理解能力

25年4月來自南方科技大學、百度、英國 KCL和琶洲實驗室&#xff08;廣東 AI 和數字經濟實驗室&#xff09;的論文“MPDrive: Improving Spatial Understanding with Marker-Based Prompt Learning for Autonomous Driving”。 自動駕駛視覺問答&#xff08;AD-VQA&#xff09;…

Halcon圖像采集

Halcon是一款強大的機器視覺軟件&#xff0c;結合C#可以開發出功能完善的視覺應用程序。 基本設置 確保已經安裝了Halcon和Halcon的.NET庫&#xff08;HalconDotNet&#xff09;。 1. 添加引用 在C#項目中&#xff0c;需要添加對HalconDotNet.dll的引用&#xff1a; 右鍵點…