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 Framework 4.8 開發的深度學習模型部署測試平臺,提供了YOLO框架的主流系列模型,包括YOLOv8~v9,以及其系列下的Det、Seg、Pose、Obb、Cls等應用場景,同時支持圖像與視頻檢測。模型部署引擎使用的是OpenVINO™、TensorRT、ONNX runti... ...
  • 十年沉澱,重啟開發之路 十年前,我沉浸在開發的海洋中,每日與代碼為伍,與演算法共舞。那時的我,滿懷激情,對技術的追求近乎狂熱。然而,隨著歲月的流逝,生活的忙碌逐漸占據了我的大部分時間,讓我無暇顧及技術的沉澱與積累。 十年間,我經歷了職業生涯的起伏和變遷。從初出茅廬的菜鳥到逐漸嶄露頭角的開發者,我見證了 ...
  • C# 是一種簡單、現代、面向對象和類型安全的編程語言。.NET 是由 Microsoft 創建的開發平臺,平臺包含了語言規範、工具、運行,支持開發各種應用,如Web、移動、桌面等。.NET框架有多個實現,如.NET Framework、.NET Core(及後續的.NET 5+版本),以及社區版本M... ...
  • 前言 本文介紹瞭如何使用三菱提供的MX Component插件實現對三菱PLC軟元件數據的讀寫,記錄了使用電腦模擬,模擬PLC,直至完成測試的詳細流程,並重點介紹了在這個過程中的易錯點,供參考。 用到的軟體: 1. PLC開發編程環境GX Works2,GX Works2下載鏈接 https:// ...
  • 前言 整理這個官方翻譯的系列,原因是網上大部分的 tomcat 版本比較舊,此版本為 v11 最新的版本。 開源項目 從零手寫實現 tomcat minicat 別稱【嗅虎】心有猛虎,輕嗅薔薇。 系列文章 web server apache tomcat11-01-官方文檔入門介紹 web serv ...
  • 1、jQuery介紹 jQuery是什麼 jQuery是一個快速、簡潔的JavaScript框架,是繼Prototype之後又一個優秀的JavaScript代碼庫(或JavaScript框架)。jQuery設計的宗旨是“write Less,Do More”,即倡導寫更少的代碼,做更多的事情。它封裝 ...
  • 前言 之前的文章把js引擎(aardio封裝庫) 微軟開源的js引擎(ChakraCore))寫好了,這篇文章整點js代碼來測一下bug。測試網站:https://fanyi.youdao.com/index.html#/ 逆向思路 逆向思路可以看有道翻譯js逆向(MD5加密,AES加密)附完整源碼 ...
  • 引言 現代的操作系統(Windows,Linux,Mac OS)等都可以同時打開多個軟體(任務),這些軟體在我們的感知上是同時運行的,例如我們可以一邊瀏覽網頁,一邊聽音樂。而CPU執行代碼同一時間只能執行一條,但即使我們的電腦是單核CPU也可以同時運行多個任務,如下圖所示,這是因為我們的 CPU 的 ...
  • 掌握使用Python進行文本英文統計的基本方法,並瞭解如何進一步優化和擴展這些方法,以應對更複雜的文本分析任務。 ...
  • 背景 Redis多數據源常見的場景: 分區數據處理:當數據量增長時,單個Redis實例可能無法處理所有的數據。通過使用多個Redis數據源,可以將數據分區存儲在不同的實例中,使得數據處理更加高效。 多租戶應用程式:對於多租戶應用程式,每個租戶可以擁有自己的Redis數據源,以確保數據隔離和安全性。 ...