From 3fccf2450a3ed31ceca512551858f886b30c499d Mon Sep 17 00:00:00 2001
From: liweilong <515897141@qq.com>
Date: 星期四, 24 十二月 2020 18:13:48 +0800
Subject: [PATCH] 上传视频组件

---
 src/pages/system/admin.vue                  |    2 
 src/pages/demo/form.vue                     |   79 ++-------------
 src/pages/system/roleEdit.vue               |    4 
 src/components_simple/UploadSingleVideo.vue |  119 +++++++++++++++++++++++
 src/pages/system/banner.vue                 |   87 +---------------
 5 files changed, 141 insertions(+), 150 deletions(-)

diff --git a/src/components_simple/UploadSingleVideo.vue b/src/components_simple/UploadSingleVideo.vue
new file mode 100644
index 0000000..e7320c4
--- /dev/null
+++ b/src/components_simple/UploadSingleVideo.vue
@@ -0,0 +1,119 @@
+<template>
+  <div>
+    <el-upload
+      ref="refUploadVideo"
+      action="#"
+      :before-upload="beforeUploadVideo"
+      accept="video/mp4"
+      :limit="1"
+      :file-list="uploadVideos"
+      :on-change="addUploadImg"
+      :on-remove="delUploadImg"
+      :http-request="reqUploadVideo"
+      style="width: 200px"
+    >
+      <video
+        v-if="uploadVideos.length"
+        class="com-up-video"
+        :src="uploadVideos[0].url"
+        controls="controls"
+      >鎮ㄧ殑娴忚鍣ㄤ笉鏀寔瑙嗛鎾斁</video>
+      <template v-else>
+        <i class="el-icon-plus" />
+        <span>閫夋嫨瑙嗛</span>
+      </template>
+
+    </el-upload>
+  </div>
+</template>
+
+<script>
+import mixin_upload from '@/mixins/upload.js' // 閫氱敤涓婁紶瑙嗛棰勮
+export default {
+  mixins: [mixin_upload],
+  model: {
+    prop: 'uploadVideos',
+    event: 'change'
+  },
+  props: {
+    uploadVideos: {
+      type: Array,
+      default: () => {
+        return []
+      }
+    },
+    accept: {
+      type: String,
+      default: () => {
+        return 'image/jpeg,image/jpg,image/gif,image/png'
+      }
+    }
+
+  },
+
+  data() {
+    return {
+      callback: null
+    }
+  },
+  methods: {
+    // 涓婁紶瑙嗛 鈫撯啌鈫撯啌鈫撯啌鈫撯啌鈫撯啌鈫撯啌鈫撯啌鈫撯啌鈫撯啌鈫撯啌鈫撯啌鈫撯啌鈫撯啌鈫撯啌鈫撯啌
+    // 涓婁紶鍓嶅洖璋�
+    beforeUploadVideo(file) {
+      var fileSize = file.size / 1024 / 1024 < 50
+      if (['video/mp4'].indexOf(file.type) === -1) {
+        this.$message.error('蹇呴』鏄痬p4鏂囦欢')
+        return false
+      }
+      if (!fileSize) {
+        this.$message.error('瑙嗛澶у皬涓嶈兘瓒呰繃50MB')
+        return false
+      }
+      this.isShowUploadVideo = false
+    },
+    // 澧炲姞瑙嗛
+    addUploadImg(file, fileList) {
+      this.$emit('change', fileList)
+    },
+    // 鍒犻櫎瑙嗛
+    delUploadImg(file, fileList) {
+      this.$emit('change', fileList)
+    },
+
+    // 涓婁紶瑙嗛
+    reqUploadVideo(res) {
+      const file = res.file
+      const formData = new FormData()
+      formData.append('file', file)
+      this.postFN({
+        url: 'admin/image/upload?type=1',
+        header: { 'Content-Type': 'multipart/form-data' },
+        params: formData,
+        mockData: {
+          code: 100,
+          msg: '',
+          data: {
+            imgUrl: 'https://www.w3school.com.cn/i/movie.mp4'
+          }
+        }
+      }, (inf) => {
+        // 鏇挎崲鎺夋湭涓婁紶鐨勫浘鐗�
+        this.$emit('change', [{ name: '瑙嗛', url: inf.imgUrl, status: 'success' }])
+
+        console.log('涓婁紶瑙嗛鎴愬姛涓旂粨鏉�')
+
+        // 鎻愪氦
+        // this.$set(this.dialogData, 'imgUrl', inf.imgUrl)
+        this.callback && this.callback(inf.imgUrl)
+      })
+    }
+    // 涓婁紶瑙嗛 鈫戔啈鈫戔啈鈫戔啈鈫戔啈鈫戔啈鈫戔啈鈫戔啈鈫戔啈鈫戔啈鈫戔啈鈫戔啈鈫戔啈鈫戔啈鈫戔啈鈫戔啈
+  }
+}
+</script>
+
+<style>
+.el-upload-list__item{
+  transition: none;
+}
+</style>
diff --git a/src/pages/demo/form.vue b/src/pages/demo/form.vue
index e2ad338..bc6a36f 100644
--- a/src/pages/demo/form.vue
+++ b/src/pages/demo/form.vue
@@ -32,23 +32,11 @@
           鍥剧墖锛�<br><span>(668*164鍍忕礌)</span>
         </span>
         <!-- 涓婁紶鍥剧墖缁勪欢(鍗曞浘) -->
-        <el-upload
+        <UploadSingleImg
           ref="refUploadImg"
-          accept="image/jpeg,image/jpg,image/gif,image/png"
-          :auto-upload="false"
-          list-type="picture-card"
-          :class="{disabled:uploadDisabled}"
-          action="#"
-          :limit="1"
-          :file-list="mData.uploadImgs"
-          :on-change="addUploadImg"
-          :on-remove="delUploadImg"
-          :http-request="uploadImg"
-          :on-preview="uploadPreview"
-          :before-upload="beforeUploadImg"
-        >
-          <i class="el-icon-plus" />
-        </el-upload>
+          v-model="mData.uploadImgs"
+          @change.capture="$refs.refDialog.clearValidate()"
+        />
       </el-form-item>
       <el-form-item label="鏄惁涓婃灦锛�">
         <el-switch v-model="mData.isUp" :active-value="1" :inactive-value="0" />
@@ -75,10 +63,11 @@
 <script>
 import WangEnduit from '@/components/WangEnduit' // 瀵屾枃鏈�
 import mixin_upload from '@/mixins/upload.js' // 閫氱敤涓婁紶鍥剧墖棰勮
+import UploadSingleImg from '@/components_simple/UploadSingleImg'
 import Area from '@/utils/area' // 鍦板尯閫夋嫨
 export default {
   name: 'DemoForm',
-  components: { WangEnduit },
+  components: { WangEnduit, UploadSingleImg },
   mixins: [
     mixin_upload
   ],
@@ -159,62 +148,14 @@
     },
     // 瀵屾枃鏈浉鍏�
 
-    // 涓婁紶鍥剧墖 鈫撯啌鈫撯啌鈫撯啌鈫撯啌鈫撯啌鈫撯啌鈫撯啌鈫撯啌鈫撯啌鈫撯啌鈫撯啌鈫撯啌鈫撯啌鈫撯啌鈫撯啌鈫撯啌鈫撯啌鈫撯啌鈫撯啌鈫撯啌鈫撯啌鈫撯啌鈫撯啌鈫撯啌鈫撯啌
-    // 涓婁紶鍓嶇‘璁ゆ牸寮�
-    beforeUploadImg(file) {
-      const isImg = file.type.indexOf('image/') > -1
-      if (!isImg) {
-        this.$message.error('蹇呴』鏄�夋嫨鍥剧墖鏂囦欢')
-      }
-      return isImg
-    },
-    // 澧炲姞鍥剧墖
-    addUploadImg(file, fileList) {
-      this.mData.uploadImgs = fileList
-      this.$refs.couponForm.validateField('uploadImgs')
-    },
-    // 鍒犻櫎鍥剧墖
-    delUploadImg(file, fileList) {
-      this.mData.uploadImgs = fileList
-    },
-    // 涓婁紶鍥剧墖
-    uploadImg(res) {
-      const file = res.file
-      const formData = new FormData()
-      formData.append('file', file)
-      this.postFN({
-        url: 'admin/image/upload',
-        header: { 'Content-Type': 'multipart/form-data' },
-        params: formData,
-        mockData: {
-          code: 100,
-          msg: '',
-          data: {
-            imgUrl: 'xxxx'
-          }
-        }
-      }, (inf) => {
-        console.log('涓婁紶鍥炬垚鍔�')
-        this.$set(this.mData, 'imgUrl', inf.imgUrl)
-        console.log('涓婁紶鍥剧粨鏉�')
-
-        // 涓婁紶瀹屽浘鐗�
-        this.submitReq()
-      })
-    },
-    // 涓婁紶鍥剧墖 鈫戔啈鈫戔啈鈫戔啈鈫戔啈鈫戔啈鈫戔啈鈫戔啈鈫戔啈鈫戔啈鈫戔啈鈫戔啈鈫戔啈鈫戔啈鈫戔啈鈫戔啈鈫戔啈鈫戔啈鈫戔啈鈫戔啈鈫戔啈鈫戔啈鈫戔啈鈫戔啈鈫戔啈鈫戔啈
-
     submit() {
       this.$refs['couponForm'].validate(valid => {
         if (valid) {
-          if (this.checkNeedUpload(this.mData.uploadImgs)) {
-            console.log('寮�濮嬩笂浼犲浘鐗�')
-            // 鍏堜笂浼犲浘鐗囷紝鍐嶆彁浜�
-            this.$refs.refUploadImg.submit()
-          } else {
-            // 鎻愪氦
+          // 涓婁紶鍥剧墖
+          this.$refs.refUploadImg.runUploadImg((imgUrl) => {
+            imgUrl && this.$set(this.mData, 'imgUrl', imgUrl)
             this.submitReq()
-          }
+          })
         }
       })
     },
diff --git a/src/pages/system/admin.vue b/src/pages/system/admin.vue
index bdf6a28..7d3f28f 100644
--- a/src/pages/system/admin.vue
+++ b/src/pages/system/admin.vue
@@ -85,7 +85,7 @@
     />
 
     <!-- 鏂板&缂栬緫 -->
-    <el-dialog :title="adminDialogData.type=='add'?'鏂板绠$悊鍛�':'缂栬緫绠$悊鍛�'" width="500px" :visible.sync="adminDialogVisible" append-to-body>
+    <el-dialog :title="adminDialogData.type=='add'?'鏂板绠$悊鍛�':'缂栬緫绠$悊鍛�'" width="500px" :visible.sync="adminDialogVisible" append-to-body :before-close="hideDialog">
       <el-form ref="adminDialog" :model="adminDialogData" label-width="80px" :rules="rules" size="small">
         <el-form-item label="鍚嶇О" prop="name">
           <el-input v-model="adminDialogData.name" placeholder="璇疯緭鍏ュ悕绉�" />
diff --git a/src/pages/system/banner.vue b/src/pages/system/banner.vue
index f22319e..ff35688 100644
--- a/src/pages/system/banner.vue
+++ b/src/pages/system/banner.vue
@@ -64,24 +64,12 @@
           <el-input v-model="dialogData.orderNum" placeholder="璇疯緭鍏ユ帓搴忓彿" />
         </el-form-item>
         <el-form-item ref="uploadFormItem" label="杞挱鍥撅細" prop="uploadImgs">
-          <!-- 涓婁紶鍥剧墖缁勪欢(鍗曞浘) -->
-          <el-upload
+          <!-- 涓婁紶鍥剧墖缁勪欢(澶氬浘) -->
+          <UploadSingleImg
             ref="refUploadImg"
-            accept="image/jpeg,image/jpg,image/gif,image/png"
-            :auto-upload="false"
-            list-type="picture-card"
-            :class="{disabled:uploadDisabled}"
-            action="#"
-            :limit="1"
-            :file-list="dialogData.uploadImgs"
-            :on-change="addUploadImg"
-            :on-remove="delUploadImg"
-            :http-request="uploadImg"
-            :on-preview="uploadPreview"
-            :before-upload="beforeUploadImg"
-          >
-            <i class="el-icon-plus" />
-          </el-upload>
+            v-model="dialogData.uploadImgs"
+            @change.capture="$refs[formName].clearValidate()"
+          />
         </el-form-item>
         <el-form-item label="璺宠浆绫诲瀷锛�" prop="jumpType">
           <el-select
@@ -130,8 +118,10 @@
 
 import mixin_Upload from '@/mixins/upload.js'
 import mixin_bannerOpts from '@/mixins/bannerOpts.js' // 閫氱敤杞挱鍥句笅鎷夐�夐」
+import UploadSingleImg from '@/components_simple/UploadSingleImg'
 export default {
   name: 'Equipment',
+  components: { UploadSingleImg },
   mixins: [mixin_Upload, mixin_bannerOpts],
   data() {
     return {
@@ -192,66 +182,6 @@
     init() {
       this.getList()
     },
-
-    // 涓婁紶鍥剧墖 鈫撯啌鈫撯啌鈫撯啌鈫撯啌鈫撯啌鈫撯啌鈫撯啌鈫撯啌鈫撯啌鈫撯啌鈫撯啌鈫撯啌鈫撯啌鈫撯啌鈫撯啌
-    // 涓婁紶鍓嶇‘璁ゆ牸寮�
-    beforeUploadImg(file) {
-      const isImg = file.type.indexOf('image/') > -1
-      if (!isImg) {
-        this.$message.error('蹇呴』鏄�夋嫨鍥剧墖鏂囦欢')
-      }
-      return isImg
-    },
-    // 澧炲姞鍥剧墖
-    addUploadImg(file, fileList) {
-      this.$refs.uploadFormItem.resetField()
-      this.dialogData.uploadImgs = fileList
-    },
-    // 鍒犻櫎鍥剧墖
-    delUploadImg(file, fileList) {
-      this.dialogData.uploadImgs = fileList
-    },
-    // 鎵ц涓婁紶鍥�
-    runUploadImg(suc_cb) {
-      if (this.checkNeedUpload(this.dialogData.uploadImgs)) {
-        this.$refs.refUploadImg.submit()
-      } else {
-        suc_cb && suc_cb()
-      }
-    },
-    // 涓婁紶鍥�
-    uploadImg(res) {
-      console.log(res)
-      const file = res.file
-      const formData = new FormData()
-      formData.append('file', file)
-      console.log(formData)
-      this.postFN({
-        url: 'admin/image/upload',
-        header: { 'Content-Type': 'multipart/form-data' },
-        params: formData,
-        mockData: {
-          code: 100,
-          msg: '',
-          data: {
-            imgUrl: 'xxxx'
-          }
-        }
-      }, (inf) => {
-        console.log('涓婁紶鍥剧墖鎴愬姛')
-
-        // 鏇挎崲鎺夋湭涓婁紶鐨勫浘鐗�
-        this.dialogData.uploadImgs[0] = { url: inf.imgUrl, status: 'success' }
-        this.dialogData.uploadImgs = JSON.parse(JSON.stringify(this.dialogData.uploadImgs))
-        this.$set(this.dialogData, 'imgUrl', inf.imgUrl)
-
-        console.log('涓婁紶鍥剧墖缁撴潫')
-
-        // 鎻愪氦
-        this.submit(this.dialogData.type)
-      })
-    },
-    // 涓婁紶鍥剧墖 鈫戔啈鈫戔啈鈫戔啈鈫戔啈鈫戔啈鈫戔啈鈫戔啈鈫戔啈鈫戔啈鈫戔啈鈫戔啈鈫戔啈鈫戔啈鈫戔啈鈫戔啈
 
     // 鑾峰彇鍒楄〃
     getList() {
@@ -351,7 +281,8 @@
       this.$refs[this.formName].validate((valid) => {
         if (valid) {
           // 涓婁紶鍥剧墖
-          this.runUploadImg(() => {
+          this.$refs.refUploadImg.runUploadImg((imgUrl) => {
+            imgUrl && this.$set(this.dialogData, 'imgUrl', imgUrl)
             this.submit(type)
           })
         }
diff --git a/src/pages/system/roleEdit.vue b/src/pages/system/roleEdit.vue
index 101b692..2d4ff22 100644
--- a/src/pages/system/roleEdit.vue
+++ b/src/pages/system/roleEdit.vue
@@ -280,8 +280,8 @@
       // background: #999;
     }
     .el-icon-check{
-      background: #409EFF;
-      // background: #999;
+      color: #409EFF;
+      // color: #999;
     }
   }
 }

--
Gitblit v1.8.0