Vue3 上傳后的文件智能預覽(實戰體會)

目錄

  • 前言
  • 1. Demo1
  • 2. Demo2

前言

🤟 找工作,來萬碼優才:👉 #小程序://萬碼優才/r6rqmzDaXpYkJZF

爬蟲神器,無代碼爬取,就來:bright.cn

此處的基本知識涉及較少,主要以Demo的形式供大家學習,從實戰中觸發

本身url是在線鏈接且是以數組的形式存在

開源項目來源:https://gitee.com/zhijiantianya/ruoyi-vue-pro

1. Demo1

本身一開始以Minio的形式上傳,以文件的形式進行命名:

在這里插入圖片描述

后續用戶需要一個個點擊才能看到是什么文件

 <el-form-item label="單證附件" prop="imgPath"><UploadFile v-model="formData.imgPath" limit="10" /></el-form-item>
  1. 把 imgPath 按逗號分割為數組

  2. 遍歷數組,每個鏈接:
    如果是圖片(比如后綴是 .jpg、.png 等),就渲染成 <el-image>
    如果不是圖片,就渲染成帶下載鏈接的文件名

示例的Demo如下:

<template><div class="file-preview-list"><divv-for="(item, index) in fileList":key="index"class="preview-item"><el-imagev-if="isImage(item)":src="item":preview-src-list="[item]"fit="cover"style="width: 100px; height: 100px; margin-right: 10px;"><template #error><div style="font-size: 12px; color: #999;">加載失敗</div></template></el-image><av-else:href="item"target="_blank"style="color: #409EFF; text-decoration: underline;">文件 {{ index + 1 }}</a></div></div>
</template><script setup>
import { computed } from 'vue';const props = defineProps({modelValue: String
});const fileList = computed(() => {return props.modelValue? props.modelValue.split(',').map(item => item.trim()): [];
});const isImage = (url) => {return /\.(jpg|jpeg|png|gif|bmp|webp)$/i.test(url);
};
</script><style scoped>
.file-preview-list {display: flex;flex-wrap: wrap;gap: 10px;
}
.preview-item {display: flex;align-items: center;
}
</style>

組件這樣使用:

<el-form-item label="單證附件" prop="imgPath"><UploadFile v-model="formData.imgPath" limit="10" /><UploadPreview v-model="formData.imgPath" />
</el-form-item>

后續由于圖片有些過大,對應以正在加載的形式呈現:

<template><div class="file-preview-list"><divv-for="(item, index) in fileList":key="index"class="preview-item"><el-imagev-if="isImage(item)":src="item":preview-src-list="[item]"fit="cover"style="width: 100px; height: 100px; margin-right: 10px;"><template #placeholder><divstyle="display: flex; align-items: center; justify-content: center; height: 100%; color: #aaa; font-size: 12px;">正在加載...</div></template><template #error><div style="font-size: 12px; color: #999;">加載失敗</div></template></el-image><av-else:href="item"target="_blank"style="color: #409EFF; text-decoration: underline;">文件 {{ index + 1 }}</a></div></div>
</template><script setup>
import { computed } from 'vue';const props = defineProps({modelValue: String
});const fileList = computed(() => {return props.modelValue? props.modelValue.split(',').map(item => item.trim()): [];
});const isImage = (url) => {return /\.(jpg|jpeg|png|gif|bmp|webp)$/i.test(url);
};
</script><style scoped>
.file-preview-list {display: flex;flex-wrap: wrap;gap: 10px;
}
.preview-item {display: flex;align-items: center;
}
</style>

? 推薦結構(用 el-row + 兩個 el-col)
原來的結構是把所有內容都放在了一個 el-form-item 里面,這樣不太好控制布局

建議改成下面這樣:

<el-row><!-- 左側:上傳控件 --><el-col :span="12"><el-form-item label="單證附件" prop="imgPath"><UploadFile v-model="formData.imgPath" limit="10" /></el-form-item></el-col><el-col :span="12"><div style="margin-bottom: 8px; font-weight: bold;">附件預覽</div><UploadPreview v-model="formData.imgPath" /></el-col>
</el-row>

最終截圖如下:

在這里插入圖片描述

2. Demo2

另外一種呈現的方式如下:

<el-table-column label="照片" align="center" prop="imgPath" width="500" fixed="left"><template #default="{ row }"><div v-if="row.imgPath && row.imgPath.length > 0" class="damage-images"><el-imagev-for="(img, index) in row.imgPath":key="index"class="h-80px w-80px"lazy:src="img":preview-src-list="row.imgPath"preview-teleportedfit="cover"/></div><div v-else class="no-image">無圖片</div></template>
</el-table-column>

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

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

相關文章

transformer-實現單層Decoder 層

Decoder Layer 論文地址 https://arxiv.org/pdf/1706.03762 解碼器層結構 Transformer解碼器層由三種核心組件構成&#xff1a; Masked多頭自注意力&#xff1a;關注解碼器序列當前位置之前的上下文&#xff08;因果掩碼&#xff09; Encoder-Decoder多頭注意力&#xff1a;關…

設計模式每日硬核訓練 Day 16:責任鏈模式(Chain of Responsibility Pattern)完整講解與實戰應用

&#x1f504; 回顧 Day 15&#xff1a;享元模式小結 在 Day 15 中&#xff0c;我們學習了享元模式&#xff08;Flyweight Pattern&#xff09;&#xff1a; 通過共享對象&#xff0c;分離內部狀態與外部狀態&#xff0c;大量減少內存開銷。適用于字符渲染、游戲場景、圖標緩…

大數據開發環境的安裝,配置(Hadoop)

1. 三臺linux服務器的安裝 1. 安裝VMware VMware虛擬機軟件是一個“虛擬PC”軟件&#xff0c;它使你可以在一臺機器上同時運行二個或更多Windows、DOS、LINUX系統。與“多啟動”系統相比&#xff0c;VMWare采用了完全不同的概念。 我們可以通過VMware來安裝我們的linux虛擬機…

多模態大語言模型arxiv論文略讀(四十九)

When Do We Not Need Larger Vision Models? ?? 論文標題&#xff1a;When Do We Not Need Larger Vision Models? ?? 論文作者&#xff1a;Baifeng Shi, Ziyang Wu, Maolin Mao, Xin Wang, Trevor Darrell ?? 研究機構: UC Berkeley、Microsoft Research ?? 問題背…

【深度學習與大模型基礎】第14章-分類任務與經典分類算法

Part 1&#xff1a;什么是分類任務&#xff1f; 1.1 分類就是“貼標簽” 想象你有一堆水果&#xff0c;有蘋果&#x1f34e;、橘子&#x1f34a;、香蕉&#x1f34c;&#xff0c;你的任務是讓機器學會自動判斷一個新水果屬于哪一類——這就是分類&#xff08;Classification&…

LeetCode 2906 統計最大元素出現至少K次的子數組(滑動窗口)

給出一個示例&#xff1a; 輸入&#xff1a;nums [1,3,2,3,3], k 2 輸出&#xff1a;6 解釋&#xff1a;包含元素 3 至少 2 次的子數組為&#xff1a;[1,3,2,3]、[1,3,2,3,3]、[3,2,3]、[3,2,3,3]、[2,3,3] 和 [3,3] 。該題也是一個比較簡單的滑動窗口的題目&#xff0c;但是…

使用 Spring Boot 進行開發

? 使用 Spring Boot 進行開發 ? &#x1f4cc; 本節將深入介紹如何高效使用 Spring Boot&#xff0c;涵蓋以下核心主題&#xff1a; 1?? &#x1f527; 構建系統 深入了解 Spring Boot 的項目結構和依賴管理 2?? ?? 自動配置 探索 Spring Boot 的自動化配置機制和原…

Qt的WindowFlags窗口怎么選?

Qt.Dialog: 指示窗口是一個對話框&#xff0c;這通常會改變窗口的默認按鈕布局&#xff0c;并可能影響窗口框架的樣式。Qt.Popup: 指示窗口是一個彈出式窗口&#xff08;例如菜單或提示&#xff09;&#xff0c;它通常是臨時的且沒有任務欄按鈕。Qt.Tool: 標識窗口作為一個工具…

Redis高可用架構全解析:主從復制、哨兵模式與集群實戰指南

Redis高可用架構全解析&#xff1a;主從復制、哨兵模式與集群實戰指南 引言 在分布式系統架構中&#xff0c;Redis作為高性能內存數據庫的標桿&#xff0c;其高可用與擴展性設計始終是開發者關注的焦點。本文將深入剖析Redis的三大核心機制——主從復制、哨兵模式與集群架構&…

音視頻之H.265/HEVC網絡適配層

H.265/HEVC系列文章&#xff1a; 1、音視頻之H.265/HEVC編碼框架及編碼視頻格式 2、音視頻之H.265碼流分析及解析 3、音視頻之H.265/HEVC預測編碼 4、音視頻之H.265/HEVC變換編碼 5、音視頻之H.265/HEVC量化 6、音視頻之H.265/HEVC環路后處理 7、音視頻之H.265/HEVC熵編…

element-plus(vue3)表單el-select下拉框的遠程分頁下拉觸底關鍵字搜索實現

一、基礎內核-自定義指令 1.背景 2.定義 3.使用 4.注意 當編輯時需要回顯&#xff0c;此時由于分頁導致可能匹配不到對應label文本顯示&#xff0c;此時可以這樣解決 二、升級使用-二次封裝組件 三、核心代碼 1.自定義指令 定義 ----------------selectLoadMoreDirective.…

大內存生產環境tomcat-jvm配置實踐

話不多講&#xff0c;奉上代碼&#xff0c;分享經驗&#xff0c;交流提高&#xff01; 64G物理內存,8核CPU生產環境tomcat-jvm配置如下&#xff1a; JAVA_OPTS-server -XX:MaxMetaspaceSize4G -XX:ReservedCodeCacheSize2G -XX:UseG1GC -Xms48G -Xmx48G -XX:MaxGCPauseMilli…

C++函數模板基礎

1 函數模板 1.1 基礎介紹 函數模板是一種特殊的函數定義,它允許你創建通用的函數,這些函數可以處理多種不同的數據類型,而不需要為每種數據類型都編寫一個單獨的函數。 在 C++ 里,函數模板的格式包含模板聲明與函數定義兩部分,其基本格式如下: template <typename…

mangodb的數據庫與集合命令,文檔命令

MongoDB的下載安裝與啟動&#xff0c; 一、MongoDB下載安裝 1. 官網下載 打開官網&#xff1a;https://www.mongodb.com/try/download/community選擇&#xff1a; 版本&#xff08;Version&#xff09;&#xff1a;選最新版或者根據需要選舊版。平臺&#xff08;OS&#xff0…

flink端到端數據一致性

這里有一個注意點&#xff0c;就是flink端的精準一次 1.barrier對齊精準和一次非對齊精準一次 對比?? ??維度????Barrier 對齊的精準一次????Barrier 非對齊的精準一次????觸發條件??需等待所有輸入流的 Barrier 對齊后才能觸發檢查點 收到第一個 Barrier …

4月29號

級別越大,字體越小. CSS樣式控制: 例如把日期設為灰色字體

PHP代碼-服務器下載文件頁面編寫

內部環境的服務資源下載頁面有訪問需求&#xff0c;給開發和產品人員編寫一個簡潔的下載頁面提供資源下載。直接用nginxphp的形式去編寫了&#xff0c;這里提供展示index.php文件代碼如下&#xff1a; <?php // 配置常量 define(BASE_DIR, __DIR__); // 當前腳本所在目錄作…

MySQL基礎關鍵_001_認識

目 錄 一、概述 1.數據庫&#xff08;DB&#xff09;分類 &#xff08;1&#xff09;關系型數據庫 &#xff08;2&#xff09;非關系型數據庫 2.數據庫管理系統&#xff08;DBMS&#xff09; 3.SQL &#xff08;1&#xff09;說明 &#xff08;2&#xff09;分類 二、…

Shell、Bash 執行方式及./ 執行對比詳解

Shell、Bash 執行方式及./ 執行對比詳解 在 Linux 和 UNIX 系統的使用過程中&#xff0c;Shell 腳本是實現自動化任務、系統管理的重要工具。而在執行 Shell 腳本時&#xff0c;我們常常會用到bash命令以及./的執行方式&#xff0c;這兩種執行方式看似相似&#xff0c;實則存在…

P1494 [國家集訓隊] 小 Z 的襪子 Solution

Description 給定序列 a ( a 1 , a 2 , ? , a n ) a(a_1,a_2,\cdots,a_n) a(a1?,a2?,?,an?)&#xff0c;有 q q q 次查詢&#xff0c;每次查詢給定 ( l , r ) (l,r) (l,r). 你需要求出 2 ∑ i ≤ i < j ≤ r [ a i a j ] ( r ? l ) ( r ? l 1 ) \dfrac{2\sum…