Vue + Element 自定義上傳封面組件

来源:https://www.cnblogs.com/shang53880/archive/2023/01/10/17039225.html
-Advertisement-
Play Games

前一段時間做項目,頻繁使用到上傳圖片組件,而且只上傳一個封面,於是想著自定義一個圖片封面上傳組件。先來看一下效果: 第一張圖片是上傳之前,第二張圖片是上傳成功後,第3張圖片是滑鼠放上去之後的效果! 首先整理需求,圖片上傳我們使用照片牆的方式,只能上傳一張圖片,圖片上傳成功後不能繼續上傳,如果想要更換 ...


前一段時間做項目,頻繁使用到上傳圖片組件,而且只上傳一個封面,於是想著自定義一個圖片封面上傳組件。先來看一下效果:

                       第一張圖片是上傳之前,第二張圖片是上傳成功後,第3張圖片是滑鼠放上去之後的效果!   首先整理需求,圖片上傳我們使用照片牆的方式,只能上傳一張圖片,圖片上傳成功後不能繼續上傳,如果想要更換圖片,則需要將圖片刪除後重新上傳。點擊圖片上面的放大鏡可以查看大圖。 需要限製圖片上傳的格式,圖片的大小。   組件代碼:
  1 <template>
  2   <div class="upload">
  3     <el-upload
  4       :class="{'hidden':mFileList.length > 0}"
  5       list-type="picture-card"
  6       :on-remove="handleRemove"
  7       :action="action"
  8       :before-upload="beforeUploadHandle"
  9       :on-success="successHandle"
 10       :on-change="changeHandle"
 11       :limit="1"
 12       :accept="accept" 
 13       :on-exceed="handleExceed"
 14       :file-list="fileList"
 15       :on-preview="handlePictureCardPreview"
 16     >
 17       <i class="el-icon-plus"></i>
 18     </el-upload>
 19     <el-dialog :visible.sync="dialogVisible">
 20       <img width="100%" :src="dialogImageUrl" alt="" />
 21     </el-dialog>
 22   </div>
 23 </template>
 24 
 25 <script>
 26 export default {
 27   props: {
 28     action: {
 29       type: String,
 30       default: "",
 31     },
 32     accept: {
 33       type: String,
 34       default: "",
 35     },
 36     fileList:{
 37       type: Array,
 38       default: () => [],
 39     },
 40   },
 41   watch: {
 42     fileList(newValue, oldValue) {
 43       this.mFileList = newValue
 44     }
 45   },
 46   data() {
 47     return {
 48       dialogVisible: false, //圖片放大
 49       fileImg: "", //上傳圖片
 50       dialogImageUrl: "", //圖片地址
 51       mFileList:this.fileList,
 52     };
 53   },
 54   methods: {
 55     handleRemove(file, fileList) {
 56       this.$emit("upload-remove", file);
 57     },
 58     handlePictureCardPreview(file) {
 59       this.dialogImageUrl = file.url;
 60       this.dialogVisible = true;
 61     },
 62     // 上傳之前
 63     beforeUploadHandle(file) {
 64       if (file.type !== "image/jpeg" && file.type !== "image/png") {
 65         this.$message({
 66           message: "只支持jpg、png格式的圖片!",
 67           type: "warning",
 68         });
 69         return false;
 70       }
 71       const isLt2M = file.size / 1024 / 1024 < 2;
 72       if (!isLt2M) {
 73         this.$message({
 74           message: "上傳文件大小不能超過 2MB!",
 75           type: "warning",
 76         });
 77         return false;
 78       }
 79     },
 80     // 上傳成功
 81     successHandle(response, file, fileList) {
 82       this.mFileList = fileList;
 83       if (response && response.code === 200) {
 84         this.$message.success("圖片上傳成功!");
 85         this.$emit("upload-success", response, file);
 86       } else {
 87         this.$message.error(response.msg);
 88       }
 89     },
 90     changeHandle(file, fileList) {
 91       if(file.response && file.response.code == 500) {
 92          this.$emit("upload-error",file);
 93       }
 94     },
 95     handleExceed(files, fileList) {
 96         this.$message.warning("只能上傳1張圖片!");
 97       },
 98   },
 99 };
100 </script>
101 <style lang="scss">
102 .upload .hidden .el-upload--picture-card {
103   display: none;
104 }
105 </style>

調用組件代碼:

 1 <template>
 2     <div>
 3         <el-form ref="dataForm"    label-width="80px">
 4             <el-form-item label="封面" prop="cover" class="is-required">
 5                 <upload list-type="picture-card" :action="url" :accept="'.jpg,.png,.JPG,.PNG'" :fileList="fileList"
 6                     :limit="1" @upload-success="uploadFile" @upload-remove="removeFile" @upload-error="uploadError">
 7                 </upload>
 8             </el-form-item>
 9         </el-form>
10     </div>
11 </template>
12 
13 <script>
14     import Upload from '../components/cover-upload/index.vue'
15     export default {
16         components: {
17             Upload
18         },
19         data() {
20             return {
21                 url: "",
22                 fileList: [],
23             }
24         },
25         methods: {
26             uploadUrl() {
27                 this.url = "http://xxx.xxx.xxx.xxx:xxx/yyxt/admin/course/courseInfo/upload?token=075de0303b15a38833a30a7a3b494794"//上傳圖片的後臺介面
28             },
29             uploadError(file) {
30                 this.fileList = [];
31             },
32             uploadFile(response, file) {
33                 this.fileList = [{
34                     url: response.data,
35                 }, ];
36             },
37             removeFile(file) {
38                 this.fileList = [];
39             },
40         },
41         mounted() {
42             this.uploadUrl();
43         }
44     }
45 </script>

點擊上傳後的圖片上的放大鏡,顯示圖片大圖

 

 

   
您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • GreatSQL社區原創內容未經授權不得隨意使用,轉載請聯繫小編並註明來源。 GreatSQL是MySQL的國產分支版本,使用上與MySQL一致。 作者: 楊延昭 文章來源:GreatSQL社區投稿 在資料庫中,除傳統的計算資源(CPU、RAM、IO)的爭用以外,數據也是一種供許多用戶共用的資源。如 ...
  • 華為HMS Core 視頻編輯服務依托自身AI技術的核心優勢,在最新版本HMS Core 6.8.0中上線了全新的視頻美顏功能,能對指定圖片或視頻中的人臉實現磨皮、美白、大眼、瘦臉的美顏效果,適用於直播、相機、視頻剪輯、圖片處理等場景中,打造獨特自然的美顏效果。 HMS Core視頻美顏功能在技術上 ...
  • 一. Rollbar可以幫你解決哪些問題 無特別說明,文中Rollbar統指Rollbar-flutter 1. 代碼復用 Rollbar官方文檔說是純Dart實現,該特征意味著自帶”代碼復用”光環。 如圖當接入端(Third-APP)調用Rollbar SDK時表示包含的網路(異常數據上傳等)和存 ...
  • 方法一: 在 JavaScript 中,可以使用 URLSearchParams 對象來處理 URL 中的查詢字元串。 序列化(將 JavaScript 對象轉換為查詢字元串)可以使用 URLSearchParams 對象的 append() 方法,如下所示: let params = new UR ...
  • 這裡給大家分享我在網上總結出來的一些知識,希望對大家有所幫助 測試環境好好地功能,上了生產,莫名其妙報錯,開始以為是沒有設置Js安全介面功能變數名稱,結果讓相應人員一查,已經設置了相應的功能變數名稱,再看下公眾號內的介面許可權部分,相關js許可權也都是已授權,沒辦法,只能按照微信文檔上的常見錯誤及解決方法,設置debu ...
  • 本文簡介 點贊 + 關註 + 收藏 = 學會了 學習 Fabric.js,我的建議是看文檔不如看 demo。 本文實現的功能:將元素拖進到畫布中並生成對應的圖形或圖片。 效果如下圖所示: 思路 要實現以上效果,需要考慮以下幾點: 元素有拖拽功能。 能在畫布中生成對應的元素。 畫佈有可能縮放。 畫佈有 ...
  • 儘量不要用== ==的比較過程 以 [] == ![] 為例 左邊 [] 是個數組 右邊 ![] 是個表達式,表示對數組取反,需要對數組進行布爾判定,數組是對象所以是true,取反之後為false,所以就相當於比較 == 兩邊數據類型不一樣會將數據轉變成原始類型 ,原始類型有 null 、 unde ...
  • 路線規劃 簡介 路線規劃常用於出行路線的提前預覽,我們提供4種類型的路線規劃,分別為:駕車、步行、公交和騎行,滿足各種的出行場景。 高德開放平臺 本例是駕車路線規劃功能和位置選擇地圖api:chooseLocation 示例: 1、在頁面的 js 文件中,實例化 AMapWX 對象,請求進行駕車路線 ...
一周排行
    -Advertisement-
    Play Games
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...