Vue3+ element 實現導入導出

一、導入功能相關代碼分析
相關變量定義
importVisible:這是一個ref類型的響應式變量,用于控制導入對話框的顯示與隱藏,初始值為false。當用戶點擊 “導入” 按鈕時,會嘗試將其值設為true來顯示導入對話框,若出現異常則提示相應錯誤信息。
file:同樣是ref類型的變量,用于存儲用戶選擇要上傳的文件對象,后續在文件上傳等操作中會以此文件對象作為基礎數據進行處理。
pre_import:ref類型的變量,作為一個標志位,在文件預覽及相關流程中起到控制作用,初始值為false,在特定邏輯執行過程中會根據需要改變其值。
importDialogRef:也是ref類型,用于獲取導入對話框組件的引用,方便后續調用組件內部的方法(比如更新導入結果的展示等操作)。
主要函數實現及邏輯
handleImport函數
javascript
const handleImport = async () => {
try {
importVisible.value = true;
} catch (error) {
console.error(‘導入組件加載失敗:’, error);
ElMessage.error(‘導入功能加載失敗,請刷新頁面重試’);
}
};
此函數是用戶觸發導入操作的入口,即點擊頁面上的 “導入” 按鈕時會執行該函數。它的主要邏輯就是嘗試將importVisible的值設為true,以顯示導入對話框,讓用戶進行后續的文件選擇等操作。若在顯示導入對話框的過程中出現加載失敗的情況(比如組件加載異常),會在控制臺打印錯誤信息,并通過ElMessage組件向用戶提示導入功能加載失敗,建議用戶刷新頁面重試。
handleDownloadTemplate函數
javascript
const handleDownloadTemplate = async () => {
const res = await DeviceModelApi.downloadPropertyTemplate();
const blob = new Blob([res.data], {
type: ‘application/vnd.openxmlformats-officedocument.spreadsheetml.sheet’
});
const filename = 物模型屬性模板_${new Date().getTime()}.xlsx;
const url = window.URL.createObjectURL(blob);
downloadFile(url, filename);

ElMessage.success(‘下載成功’);
};
這個函數用于處理下載導入模板的操作。首先,它會調用后端DeviceModelApi中的downloadPropertyTemplate方法來獲取模板數據,然后將返回的數據包裝成Blob對象,并指定合適的文件類型(這里是 Excel 文件格式對應的類型)。接著,根據當前時間戳生成一個唯一的文件名,通過window.URL.createObjectURL創建一個臨時的 URL 對象,再調用downloadFile函數進行實際的文件下載操作,最后使用ElMessage組件向用戶提示下載成功的消息,告知用戶模板下載已順利完成。
handleFileUpload函數
javascript
const handleFileUpload = async (uploadFile) => {
file.value = uploadFile;
try {
const formData = new FormData();
formData.append(‘file’, uploadFile);
formData.append(‘clear_existing’, ‘true’);
formData.append(‘thing_model_id’, props.detailId);
formData.append(‘pre_import’, pre_import.value);

const res = await DeviceModelApi.importProperties(formData);let str = res.data.msg || '';
const successCount = Number(str.match(/成功導入(\d+)條/)?.[1] || 0);
const failCount = Number(str.match(/失敗(\d+)條/)?.[1] || 0);
const totalCount = successCount + failCount;let errorList = [];
if (failCount > 0) {errorList = res.data.data.error;
}// 更新導入對話框的數據
importDialogRef.value?.updateImportResult({totalCount,successCount: Number(successCount),failCount: Number(failCount),errorList,fileText: 'attr'
});pre_import.value = false;

} catch (error) {
ElMessage.error(error.response?.data?.msg || error.message || ‘上傳失敗’);
}
};
該函數負責實際的文件上傳操作,接收用戶選擇的文件對象作為參數。首先將傳入的文件對象賦值給file.value保存起來。接著創建一個FormData對象,往里面添加了多個關鍵信息,包括要上傳的文件本身、是否清除現有數據的標識、關聯的模型 ID 以及pre_import標志位的值等。之后調用后端DeviceModelApi的importProperties方法將FormData對象中的數據發送到后端進行文件上傳處理。在獲取后端返回的結果后,會從返回消息中解析出成功導入和失敗的記錄數量,若失敗數量大于 0,則從返回數據中獲取錯誤列表。最后通過導入對話框組件的引用(importDialogRef.value)調用updateImportResult方法來更新導入對話框中展示的導入結果相關信息,比如總記錄數、成功記錄數、失敗記錄數、錯誤列表以及文件類型標識(這里標記為’attr’)等內容,并且將pre_import的值重置為false。若在文件上傳過程中出現錯誤,則通過ElMessage組件向用戶提示相應的錯誤消息,告知用戶上傳失敗。
handlePreview函數
javascript
const handlePreview = () => {
if (file.value) {
pre_import.value = true;
handleFileUpload(file.value)
.then(() => {
// 當handleFileUpload執行成功(Promise狀態變為resolved)后,調用fetchList
return fetchList();
})
.catch((error) => {
ElMessage.error(error.response?.data?.msg || error.message || ‘文件上傳或數據獲取失敗’);
});
}
};
此函數用于實現文件預覽功能。它先判斷是否已經有選擇的文件(即file.value是否有值),如果有文件,則將pre_import的值設為true,隨后調用handleFileUpload函數進行文件上傳操作。當handleFileUpload函數執行成功(其返回的 Promise 狀態變為resolved)后,會接著調用fetchList函數來獲取相關數據(這些數據可能是用于在界面上展示文件預覽內容的數據)。若在整個文件上傳或者后續獲取數據的過程中出現錯誤,就會通過ElMessage組件向用戶提示相應的錯誤信息,告知用戶是文件上傳環節還是數據獲取環節出現了問題,方便用戶了解情況。
二、導出功能相關代碼分析
handleExport函數
javascript
const handleExport = async () => {
const res = await DeviceModelApi.exportProperties({thing_model_id: props.detailId});
if (res.data.size === 0) {
ElMessage.error(‘暫無數據可導出’);
return;
}
const blob = new Blob([res.data], {
type: ‘application/vnd.openxmlformats-officedocument.spreadsheetml.sheet’
});
const filename = 物模型屬性_${new Date().getTime()}.xlsx;
const url = window.URL.createObjectURL(blob);
downloadFile(url, filename);

ElMessage.success(‘導出成功’);
};
這個函數用于處理導出數據的操作。首先調用后端DeviceModelApi的exportProperties方法,傳入關聯的模型 ID(通過props.detailId獲取)來獲取要導出的數據。接著判斷返回的數據大小,如果為 0,意味著沒有可導出的數據,此時通過ElMessage組件向用戶提示暫無數據可導出的消息,并結束函數執行。若有數據,則將返回的數據包裝成Blob對象,設置好對應的文件類型(適用于 Excel 文件格式),然后生成一個包含當前時間戳的唯一文件名,創建一個臨時的 URL 對象,再通過downloadFile函數實現實際的文件下載操作,最后向用戶提示導出成功的消息,告知用戶數據已成功導出。
三、整體交互與流程總結
導入流程:用戶點擊 “導入” 按鈕觸發handleImport函數顯示導入對話框,在對話框內可選擇下載模板(通過handleDownloadTemplate函數),選擇好文件后點擊提交按鈕會觸發handleFileUpload函數進行文件上傳操作,上傳完成后根據結果更新導入對話框的展示內容,并且可以通過 “文件預覽” 按鈕觸發handlePreview函數來查看文件相關內容(前提是已經選擇了文件且文件上傳等操作按流程執行)。
導出流程:用戶點擊 “導出” 按鈕執行handleExport函數,該函數先從后端獲取要導出的數據,若有數據則進行文件格式包裝、生成文件名、創建臨時 URL 等操作后下載文件,并在相應節點通過ElMessage組件向用戶反饋操作結果,如提示暫無數據可導出或者導出成功等消息。
與后端交互:在導入功能的handleDownloadTemplate、handleFileUpload以及導出功能的handleExport等函數中,都調用了后端DeviceModelApi提供的對應方法,傳遞相應的參數(如模型 ID、文件數據等)進行模板下載、文件上傳、數據獲取等操作,并根據后端返回的數據進行前端界面的相應處理和展示,實現了前后端的數據交互與功能協同。
界面反饋:整個導入導出過程中,充分利用了ElMessage組件在各個關鍵操作節點(如下載成功、上傳失敗、無數據可導出、導出成功等)向用戶展示相應的提示信息,使得用戶能夠清晰地了解操作的執行結果情況,保證了良好的用戶交互體驗。

重點
接口文檔參數設置
// 導出數據
exportProperties: (params) =>
axios({
url: genApiPath(‘/api/device/properties/export/’),
method: ‘get’,
params,
responseType: ‘blob’
}),

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

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

相關文章

Git安裝(純小白版)

一、Git安裝 1. 簡介 Git是一款免費開源的分布式版本控制系統,常用于軟件開發。它能記錄文件在不同時間的改動,讓用戶在需要時查看、恢復舊版本。支持多人協作開發,多人可同時修改項目文件,Git會處理好沖突。開發者能在本地創建…

cocos2 本地根據文本內容生成二維碼

cocos2 本地根據文本內容生成二維碼 之前做了一個功能,就是cocos2小游戲,結算頁面需要有一個二維碼,二維碼內容是一個網址,這個網址需要根據用戶游玩分數確定訪問哪個網址,但是這個小游戲是單機小游戲,不連…

87.xilinx FPGA讀取器件id方法

dout數據高位先出msb module chip_id_reader(input clk,input reset,output [56:0] dna_value,output dna_valid );reg [6:0] bit_count;reg [56:0] dna_shift_reg;reg dna_read;reg dna_shift;wire dna_out;// 實例化DNA_PORT原語DNA_PORT #(.SIM_DNA_VALUE(57h123456789ABCD…

AcWing--數據結構(二)

Trie 樹 用來高效的快速存儲和查找字符串集合的數據結構 如存儲:abcdef,abdef,aced,... 從根節點開始存儲,從前往后存儲,看是否有a,沒有就創建,依次存儲。 一般在最后一個字符打個標記,意思就是當前字符…

論基于架構的軟件設計方法(ABSD)及應用

2025年3月22日作 題目 基于架構的軟件設計(Architecture-Based Software Design, ABSD)方法以構成軟件架構的商業、質量和功能需求等要素來驅動整個軟件開發過程。ABSD是一個自頂向下,遞歸細化的軟件開發方法,它以軟件系統功能的…

【Docker基礎】Docker容器管理:docker exec詳解

目錄 1 docker exec命令概述 1.1 命令定位與作用 1.2 與相似命令對比 2 基本語法與參數解析 2.1 完整命令語法 2.2 核心參數詳解 2.2.1 -i, --interactive 2.2.2 -t, --tty 2.2.3 -d, --detach 2.2.4 -e, --env 2.2.5 -u, --user 2.2.6 -w, --workdir 3 典型使用場…

CSS3實現同心圓效果

效果圖&#xff1a; 文本左側顯示一個 外圓&#xff08;30px&#xff0c;半透明&#xff09; 和 內圓&#xff08;12px&#xff0c;實色&#xff09; 的同心圓&#xff1a; <!DOCTYPE html> <html> <head><style>.text-with-circles {position: rela…

Spring Boot項目開發實戰銷售管理系統——系統設計!

Spring Boot項目開發實戰——銷售管理系統 在前面的章節中我們詳細介紹了Spring Boot各個功能的使用&#xff0c;本章將新建一個銷售管理系統項目&#xff0c;演示項目從需求分析到功能分解&#xff0c;再到各個功能的實現過程&#xff0c;最后再使用Docker部署上線的完整過程…

RK3588開發筆記-Hailo AI模塊調試

目錄 前言 一、RK3588 與 Hailo AI 模塊簡介 RK3588 Hailo AI 模塊 二、原理圖連接 三、內核配置 四、Hailo驅動編譯 五、Hailo模塊驗證 總結 前言 在邊緣計算和人工智能應用不斷發展的今天,將高性能的 AI 模塊與功能強大的開發板相結合,能為各種創新應用提供堅實的基…

【Pytorch】語言模型上的動態量化

目錄 ■導言 ①定義模型 ②加載文本數據 ③加載預訓練模型 ④測試動態量化 ■結論 ■導言 量化涉及將模型的權重和激活從float轉換為int&#xff0c;這可以導致更小的模型大小和更快的推理&#xff0c;并且只對準確性造成很小的影響。 本文將把最簡單的量化形式-動態量…

【有啥問啥】大模型效率部署之Prefill-Decode分離

大模型效率部署之Prefill-Decode分離 Prefill 與 Decode 階段定義與流程 LLM 推理分為兩個階段&#xff1a;預填充&#xff08;Prefill&#xff09;和解碼&#xff08;Decode&#xff09;。在 Prefill 階段&#xff0c;模型將完整地處理用戶輸入的所有提示詞&#xff08;prom…

QT Creator構建失敗:-1: error: Unknown module(s) in QT: serialport

Qt Creator和Qt SDK版本&#xff1a; Product: Qt Creator 17.0.0 Based on: Qt 6.9.1 (MSVC 2022, x86_64) Built on: Jun 17 2025 16:32:24 From revision: 4983f08c47 問題&#xff1a; 在使用串口的時候&#xff0c;在pro 文件中添加了 QT serialport&#xff…

基于PostgreSQL的百度或高德等POI多層級分類的數據庫設計

目錄 前言 一、百度 VS 高德 POI分類 1、高德POI分類 2、百度POI分類 3、分類對比與區別 二、POI分類表設計 1、物理表結構 2、數據存儲 3、數據查詢 三、總結 前言 在當今數字化快速發展的時代&#xff0c;地理信息數據的重要性日益凸顯&#xff0c;而POI&#xff08…

AutoVLA:端到端自動駕駛中具有自適應推理和強化微調功能的視覺-語言-動作模型

26年6月來自UCLA的論文“AutoVLA: A Vision-Language-Action Model for End-to-End Autonomous Driving with Adaptive Reasoning and Reinforcement Fine-Tuning”。 視覺-語言-動作 (VLA) 模型的最新進展通過利用世界知識和推理能力為端到端自動駕駛帶來了希望。然而&#x…

知攻善防靶機 Windows 近源OS

知攻善防靶機 [hvv訓練]應急響應靶機訓練-近源滲透OS-1 前景需要&#xff1a;小王從某安全大廠被優化掉后&#xff0c;來到了某私立小學當起了計算機老師。某一天上課的時候&#xff0c;發現鼠標在自己動彈&#xff0c;又發現除了某臺電腦&#xff0c;其他電腦連不上網絡。感覺…

「Java基本語法」求三位整數的各位數字之和

引言 現在來玩一個數字拆解游戲。想象一下手里拿著一個三位數的積木,現在需要把它拆成個位、十位和百位三塊,然后把它們加起來。這個操作在實際編程中很常見,例如做密碼校驗、游戲分數計算等都可能會用到。 案例:求三位數各位之和 編寫程序,從鍵盤輸入一個三位的正整數…

SciChart 助力蛋白質結構研究:實時可視化推動生物科學新突破

SciChart是高性能數據可視化領域的優秀圖表產品&#xff0c;深受數據密度和精度至關重要行業的信賴&#xff0c;包括航空航天、石油和天然氣、科學研究和賽車運動等。作為F1中使用的解決方案&#xff0c;SciChart被NASA所依賴&#xff0c;并受到90%的頂級醫療技術公司青睞&…

基于Docker與cpolar的Leantime部署方案實現低成本跨地域團隊協作

文章目錄 前言1.關于Leantime2.本地部署Leantime3.Leantime簡單實用4.安裝內網穿透5.配置Leantime公網地址6. 配置固定公網地址 前言 各位小伙伴們&#xff0c;讓我們暫時把目光從云端的分布式系統轉向本地環境。在您的Linux主機上&#xff0c;我們將搭建一個高性價比的協作平…

阿里云Redhat系Linux修改ssh默認端口

阿里云Redhat系Linux修改ssh默認端口 在阿里云買了個服務器&#xff0c;想著ssh的默認端口是22&#xff0c;這不安全。 我就將修改ssh默認端口的過程記錄下來了&#xff0c;方便日后回看。 本命令適用于 Redhat系Linux&#xff0c;例如 Redhat、Centos、Alibaba Cloud Linux、…

lib61850 代碼結構與系統架構深度分析

一、整體代碼結構概述 lib61850 采用模塊化設計&#xff0c;核心代碼位于src目錄下&#xff0c;主要包含以下子目錄&#xff1a; src/ ├── hal/ # 硬件抽象層 ├── mms/ # MMS協議實現 ├── goose/ # GOOSE協議實現 ├──…