Vue.js 實現下載模板和導入模板、數據比對功能核心實現。

在前端開發中,數據比對是一個常見需求,尤其在資產管理等場景中。本文將基于 Vue.js 和 Element UI,通過一個簡化的代碼示例,展示如何實現“新建比對”和“開始比對”功能的核心部分。

一、功能簡介

我們將聚焦兩個核心功能:

  1. 新建比對:打開上傳對話框,允許用戶選擇文件。
  2. 開始比對:上傳文件并調用后端接口進行數據比對,同時展示進度。

以下是逐步拆分的實現細節。


二、核心代碼實現

1. 新建比對

“新建比對”功能通過一個按鈕觸發,打開文件上傳對話框。

模板部分

在頁面中添加按鈕和上傳對話框:

<template><MainCard><!-- 新建比對按鈕 --><el-row><el-col :span="24"><el-button type="primary" @click="openImportDialog" class="mg20">新建比對</el-button></el-col></el-row><!-- 導入對話框 --><el-dialog title="數據比對" :visible.sync="visible" width="800px" append-to-body><div class="importDialogBody"><p class="title">數據上傳</p><div class="text-box"><el-uploadref="upload":limit="limit":on-remove="handleRemove":before-upload="handleBeforeUpload":on-change="handleFileChange":file-list="fileList":auto-upload="false"action="#"drag><i class="el-icon-upload"></i><div class="el-upload__text">將文件拖到此處,或<em>點擊上傳</em></div></el-upload></div></div><div slot="footer" class="dialog-footer"><el-button @click="visible = false">取消</el-button><el-button type="primary" @click="confirmImport" :loading="buttonLoading" :disabled="!fileRaw">開始比對</el-button></div></el-dialog></MainCard>
</template>
  • 點擊“新建比對”按鈕,調用 openImportDialog 方法打開對話框。
  • 對話框中包含一個 el-upload 組件,用戶可拖拽或點擊上傳文件。
腳本部分

對應的邏輯如下:

<script>
export default {data() {return {visible: false, // 控制對話框顯示buttonLoading: false, // 按鈕加載狀態fileRaw: null, // 上傳的原始文件fileList: [], // 文件列表limit: 1 // 限制上傳一個文件};},methods: {// 打開導入對話框openImportDialog() {this.visible = true;this.$nextTick(() => {this.resetUpload(); // 重置上傳狀態});},// 重置上傳組件resetUpload() {this.$refs['upload'].clearFiles();this.fileList = [];this.fileRaw = null;},// 文件移除時更新狀態handleRemove(file, fileList) {this.fileList = fileList;if (fileList.length === 0) this.fileRaw = null;},// 文件選擇時更新狀態handleFileChange(file, fileList) {this.fileRaw = file.raw;this.fileList = fileList;},// 文件上傳前校驗handleBeforeUpload(file) {if (!this.validFile(file)) {return false;}this.fileRaw = file;this.fileList = [file];return false; // 阻止自動上傳},// 文件校驗邏輯validFile(file) {let fileName = file.name;const isLt10M = file.size / 1024 / 1024 < 10;const fitNameArr = ['xls', 'xlsx'];const index = fileName.lastIndexOf('.');if (index !== -1) {const suffName = fileName.slice(index + 1);if (!isLt10M) {this.$message({ message: '上傳文件大小不能超過 10MB!', type: 'warning' });this.fileList = [];return false;}if (!fitNameArr.includes(suffName)) {this.$message.warning('只能上傳xls或者xlsx格式的文件');this.fileList = [];return false;}} else {this.$message.warning('文件名稱不合法');this.fileList = [];return false;}return true;}}
};
</script>
  • openImportDialog 打開對話框并重置上傳狀態。
  • handleBeforeUpload 校驗文件大小(<10MB)和格式(xls/xlsx)。
  • handleFileChange 更新 fileRaw,用于后續比對。

2. 開始比對

點擊“開始比對”按鈕后,上傳文件并調用后端接口。

模板部分

對話框底部已包含“開始比對”按鈕,綁定 confirmImport 方法。

腳本部分

添加比對邏輯:

<script>
import { compareData } from '@/api/asset/assetReport/datacomparison';export default {data() {return {visible: false,buttonLoading: false,fileRaw: null,fileList: [],limit: 1};},methods: {// 打開導入對話框(同上,略)// 文件相關方法(同上,略)// 開始比對async confirmImport() {if (!this.fileRaw) {this.$message.warning('請先選擇需要比對的文檔');return;}this.buttonLoading = true;const formData = new FormData();formData.append('file', this.fileRaw);try {const response = await compareData(formData);this.$message.success('比對完成');} catch (error) {this.$message.error('比對失敗');} finally {this.buttonLoading = false;this.visible = false;}}}
};
</script>
  • 檢查是否選擇了文件,未選擇則提示用戶。
  • 使用 FormData 封裝文件,調用 compareData 接口進行比對。
  • 根據結果顯示成功或失敗提示,并關閉對話框。

三、樣式優化

為對話框添加簡潔樣式,提升用戶體驗:

<style lang="scss" scoped>
.mg20 {margin-bottom: 10px;
}.importDialogBody {font-size: 13px;color: #606266;.title {font-weight: bold;margin-bottom: 10px;font-size: 16px;padding-left: 8px;position: relative;}.title::before {position: absolute;left: 0;top: 52%;transform: translateY(-50%);content: '';width: 4px;border-radius: 2px;background: #3d63c8;height: 90%;}.text-box {display: flex;flex-direction: column;align-items: center;}
}
</style>
  • .mg20 為按鈕添加底部間距。
  • .importDialogBody 美化上傳區域,標題前添加藍色標識線。

四、總結

通過以上代碼,我們實現了“新建比對”和“開始比對”的核心功能:

  • 點擊“新建比對”打開上傳對話框,支持文件校驗。
  • 點擊“開始比對”上傳文件并調用后端接口,完成數據比對。

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

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

相關文章

volatile關鍵字用途說明

volatile 關鍵字在 C# 中用于指示編譯器和運行時系統&#xff0c;某個字段可能會被多個線程同時訪問&#xff0c;并且該字段的讀寫操作不應被優化&#xff08;例如緩存到寄存器或重排序&#xff09;&#xff0c;以確保所有線程都能看到最新的值。這使得 volatile 成為一種輕量級…

【區塊鏈安全 | 第三十五篇】溢出漏洞

文章目錄 溢出上溢示例溢出漏洞溢出示例漏洞代碼代碼審計1. deposit 函數2. increaseLockTime 函數 攻擊代碼攻擊過程總結修復建議審計思路 溢出 算術溢出&#xff08;Arithmetic Overflow&#xff09;&#xff0c;簡稱溢出&#xff08;Overflow&#xff09;&#xff0c;通常分…

百度的deepseek與硅基模型的差距。

問題&#xff1a; 已經下載速度8兆每秒&#xff0c;請問下載30G的文件需要多長時間&#xff1f; 關于這個問題。百度的回答如下&#xff1a; ?30GB文件下載時間計算? ?理論計算?&#xff08;基于十進制單位&#xff09;&#xff1a; ?單位換算? 文件大小&#xff1a;3…

車載診斷架構 --- 特殊定義NRC處理原理

我是穿拖鞋的漢子,魔都中堅持長期主義的汽車電子工程師。 老規矩,分享一段喜歡的文字,避免自己成為高知識低文化的工程師: 周末洗了一個澡,換了一身衣服,出了門卻不知道去哪兒,不知道去找誰,漫無目的走著,大概這就是成年人最深的孤獨吧! 舊人不知我近況,新人不知我過…

面試題ing

1、js中set和map的作用和區別? 在 JavaScript 中&#xff0c;Set 和 Map 是兩種非常重要的集合類型 1、Set 是一種集合數據結構&#xff0c;用于存儲唯一值。它類似于數組&#xff0c;但成員的值都是唯一的&#xff0c;沒有重復的值。Set 中的值只能是唯一的&#xff0c;任何…

Python爬蟲第6節-requests庫的基本用法

目錄 前言 一、準備工作 二、實例引入 三、GET請求 3.1 基本示例 3.2 抓取網頁 3.3 抓取二進制數據 3.4 添加headers 四、POST請求 五、響應 前言 前面我們學習了urllib的基礎使用方法。不過&#xff0c;urllib在實際應用中存在一些不便之處。以網頁驗證和Cookies處理…

Go 學習筆記 · 進階篇 · 第一天:接口與多態

&#x1f436;Go接口與多態&#xff1a;繼承沒了&#xff0c;但自由炸裂&#xff01; 最近翻 Go 的代碼&#xff0c;突然看到這么一段&#xff1a; type Animal interface {Speak() string }我一愣&#xff0c;咦&#xff1f;這不就是 Java 里常見的“接口”嗎&#xff1f; …

信息學奧賽一本通 1929:【04NOIP普及組】火星人 | 洛谷 P1088 [NOIP 2004 普及組] 火星人

【題目鏈接】 ybt 1929&#xff1a;【04NOIP普及組】火星人 洛谷 P1088 [NOIP 2004 普及組] 火星人 【題目考點】 1. 深搜回溯 2. STL next_permutation函數 頭文件<algorithm> 函數定義&#xff1a;next_permutation(lb, ub, cmp) lb&#xff1a;區間下界&#xff…

借助 AI 工具使用 Python 實現北京市店鋪分布地理信息可視化教程

一、項目概述 本項目通過 Python 的pyecharts庫&#xff0c;結合 AI 工具輔助代碼編寫與邏輯梳理&#xff0c;實現北京市店鋪數量分布及區域連線的地理信息可視化&#xff0c;最終生成交互式地圖圖表。 二、準備工作 1. 環境與工具 Python 環境&#xff1a;確保已安裝 Pyth…

Python項目打包指南:PyInstaller與SeleniumWire的兼容性挑戰及解決方案

前言 前段時間做一個內網開發的需求&#xff0c;要求將selenium程序打包成.exe放在內網的win7上運行&#xff0c;在掘金搜了一圈也沒有發現相關文章&#xff0c;因此將過程中踩到的坑記錄分享一下。 本文涵蓋了具體打包操作、不同模塊和依賴項的兼容性解決方案&#xff0c;以…

(一)棧結構、隊列結構

01-線性結構-數組-棧結構 線性結構&#xff08;Linear List)是由n&#xff08;n>0)個數據元素&#xff08;結點&#xff09; a[0], a[1], a[2], a[3],...,a[n-1]組成的有限序列 數組 通常數組的內存是連續的&#xff0c;所以在知道數組下標的情況下&#xff0c;訪問效率是…

【學Rust寫CAD】35 alpha_mul_256(alpha256.rs補充方法)

源碼 // Calculates (value * alpha256) / 255 in range [0,256], // for [0,255] value and [0,256] alpha256. pub fn alpha_mul_256(self,value: u32) -> Alpha256 {let prod value * self.0;Alpha256((prod (prod >> 8)) >> 8) }代碼分析 這個函數 alph…

C# 與 相機連接

一、通過組件連接相機 需要提前在VisionPro里面保存一個CogAcqFifoTool相機工具為 .vpp 定義一個相機工具 CogAcqFifoTool mAcq null;將保存的相機工具放入mAcq中 string path “C:\Acq.vpp”; mAcq (CogAcqFifoTool)CogSerializer.LoadObjectFrommFile(path);給窗口相機…

Java并發編程高頻面試題

一、基礎概念 1. 并行與并發的區別&#xff1f; 并行&#xff1a;多個任務在多個CPU核心上同時執行&#xff08;物理上同時&#xff09;。并發&#xff1a;多個任務在單CPU核心上交替執行&#xff08;邏輯上同時&#xff09;。類比&#xff1a;并行是多個窗口同時服務&#x…

LiT and Lean: Distilling Listwise Rerankers intoEncoder-Decoder Models

文章&#xff1a;ECIR 2025會議 一、動機 背景&#xff1a;利用LLMs強大的能力&#xff0c;將一個查詢&#xff08;query&#xff09;和一組候選段落作為輸入&#xff0c;整體考慮這些段落的相關性&#xff0c;并對它們進行排序。 先前的研究基礎上進行擴展 [14,15]&#xff0c…

Python高級爬蟲之JS逆向+安卓逆向1.2節: 變量與對象

目錄 引言&#xff1a; 1.2.1 Python中的變量 1.2.2 變量的命名與可讀性 1.2.3 Python中的對象 1.2.4 跟大神學高級爬蟲安卓逆向 引言&#xff1a; 大神薯條老師的高級爬蟲安卓逆向教程&#xff1a; 這套爬蟲教程會系統講解爬蟲的初級&#xff0c;中級&#xff0c;高級知…

可發1區的超級創新思路(python 實現):一種輕量化的動態稀疏門控網絡

首先聲明,該模型為原創!原創!原創!且該思路還未有成果發表,感興趣的小伙伴可以借鑒! 一、應用領域 視頻異常檢測、生成視頻檢測。 二、模型解析 該模型由1.關鍵幀動態選擇機制、2.關鍵幀動態選擇機制以及3.關鍵幀動態選擇機制三大核心組件構成,形成端到端的視頻異常…

使用NVM下載Node.js管理多版本

提示&#xff1a;我解決這個bug跟別人思路可能不太一樣&#xff0c;因為我是之前好用&#xff0c;換個項目就不好使了&#xff0c;倦了 文章目錄 前言項目場景一項目場景二解決方案&#xff1a;下載 nvm安裝 nvm重新下載所需Node 版本nvm常用命令 項目結構說明 前言 提示&…

MySQL數據庫經典面試題解析

1. MySQL 索引使用有哪些注意事項呢? 可以從三個維度回答這個問題:索引哪些情況會失效,索引不適合哪些場景,索引規則 索引哪些情況會失效 查詢條件包含or,可能導致索引失效如何字段類型是字符串,where時一定用引號括起來,否則索引失效like通配符可能導致索引失效。聯合…

C#結合SQLite數據庫使用方法

一、關于SQLite SQLite 是一個輕量級的嵌入式關系型數據庫管理系統&#xff08;RDBMS&#xff09;。與傳統的數據庫管理系統&#xff08;如 MySQL、PostgreSQL 或 SQL Server&#xff09;不同&#xff0c;SQLite 并不需要運行單獨的服務器進程&#xff0c;它的數據庫存儲在一個…