From fc902d4ba26ebebf2de18ead235aaafa37f44fcc Mon Sep 17 00:00:00 2001
From: xiangpei <xiangpei@timesnew.cn>
Date: 星期四, 16 五月 2024 16:49:36 +0800
Subject: [PATCH] 学习文件

---
 src/api/online-study.js        |    3 
 src/components/UploadC.vue     |   28 ++++++-
 src/views/onlineStudy/file.vue |  166 +++++++++++++++++++++++++++++++++--------
 src/router.js                  |    2 
 4 files changed, 160 insertions(+), 39 deletions(-)

diff --git a/src/api/online-study.js b/src/api/online-study.js
index 406ddcd..eb00b32 100644
--- a/src/api/online-study.js
+++ b/src/api/online-study.js
@@ -4,5 +4,6 @@
   page: query => get('/api/admin/online/study/page', query),
   add: data => post('/api/admin/online/study', data),
   update: data => post('/api/admin/online/study/edit', data),
-  list: () => post('/api/admin/online/study/list')
+  list: () => post('/api/admin/online/study/list'),
+  remove: (data) => post('/api/admin/online/study/remove', data)
 }
diff --git a/src/components/UploadC.vue b/src/components/UploadC.vue
index 5367c15..4460f59 100644
--- a/src/components/UploadC.vue
+++ b/src/components/UploadC.vue
@@ -5,12 +5,17 @@
         :show-file-list="true"
         :limit="uploadNum"
         multiple
+        :file-list="fileUrl"
         :on-remove="handleRemove"
         :before-remove="beforeRemove"
         :on-success="handleUploadSuccess"
         :before-upload="beforeUpload">
       <el-button size="small" type="primary">鐐瑰嚮涓婁紶</el-button>
       <div slot="tip" class="el-upload__tip">鍙兘涓婁紶pdf銆乵p4銆乵p3銆乸ng銆乯pg銆乯pge鏂囦欢锛屼笖涓嶈秴杩噞{fileSizeLimitM}}M</div>
+      <div v-if="fileUrl && fileUrl.length > 0 && uploadNum === 1">
+        <video class="returnShow" v-if="fileType === 'video'" :src="'/api/files/' + fileUrl[0].url"></video>
+        <img class="returnShow" v-if="fileType === 'img'" :src="'/api/files/' + fileUrl[0].url"/>
+      </div>
     </el-upload>
   </div>
 </template>
@@ -24,31 +29,42 @@
       default: 1,
       type: Number
     },
+    fileType: {
+      required: false,
+      type: String
+    },
     fileSizeLimitM: {
       required: false,
       default: 1,
       type: Number
+    },
+    fileUrl: {
+      required: true,
+      default: [],
+      type: Array
     }
   },
   data() {
     return {
       uploadUrl: "http://localhost:8085/api/upload/upload",
-      fileUrl: "",
     }
   },
   methods: {
+    clearFile() {
+      this.fileUrl = []
+    },
     beforeRemove(file, fileList) {
       return this.$confirm(`纭畾绉婚櫎 ${ file.name }锛焋);
     },
     handleRemove(file, fileList) {
-      console.log(file, fileList);
+      this.$emit('removeFile', this.fileUrl, file.name);
     },
     handleUploadSuccess(res, file) {
-      this.$emit('getUploadUrl', file.response);
+      this.fileUrl.push(res.response)
+      this.$emit('getUploadUrl', this.fileUrl);
     },
     beforeUpload(file) {
       const limit = file.size / 1024 / 1024 < this.fileSizeLimitM;
-
       if (!limit) {
         this.$message.error(`涓婁紶鏂囦欢澶у皬涓嶈兘瓒呰繃 ${this.fileSizeLimitM}MB!`);
       }
@@ -59,6 +75,10 @@
 </script>
 
 <style scoped>
+.returnShow {
+  width: 300px;
+  height: 200px;
+}
 .avatar-uploader {
   text-align: center;
   width: 100%
diff --git a/src/router.js b/src/router.js
index 27b67f9..f6a77e5 100644
--- a/src/router.js
+++ b/src/router.js
@@ -106,7 +106,7 @@
         path: 'type',
         component: () => import('@/views/onlineStudy/type'),
         name: 'Type',
-        meta: { title: '瑙嗛鍒嗙被', noCache: true }
+        meta: { title: '瀛︿範绫诲瀷', noCache: true }
       },
       {
         path: 'file',
diff --git a/src/views/onlineStudy/file.vue b/src/views/onlineStudy/file.vue
index 6788707..14945bb 100644
--- a/src/views/onlineStudy/file.vue
+++ b/src/views/onlineStudy/file.vue
@@ -3,7 +3,17 @@
     <div class="search">
       <el-form :inline="true" :model="searchForm" class="demo-form-inline">
         <el-form-item label="涓婚">
-          <el-input v-model="searchForm.typeName" size="small" placeholder="涓婚鍐呭" clearable @clear="page"></el-input>
+          <el-input v-model="searchForm.subject" size="small" placeholder="涓婚鍐呭" clearable @clear="page"></el-input>
+        </el-form-item>
+        <el-form-item label="瀛︿範绫诲瀷">
+          <el-select v-model="searchForm.belongType" clearable @clear="page" @change="page" placeholder="瀛︿範绫诲瀷">
+            <el-option
+              v-for="type in typeList"
+              :key="type.id"
+              :label="type.typeName"
+              :value="type.id">
+            </el-option>
+          </el-select>
         </el-form-item>
         <el-form-item>
           <el-button type="primary" @click="page" size="small">鏌ヨ</el-button>
@@ -11,24 +21,47 @@
       </el-form>
       <div>
         <el-button type="primary" @click="handlerAdd" size="small">娣诲姞</el-button>
+        <el-button type="danger" @click="batchRemove" size="small" style="margin-left: 5px">鍒犻櫎</el-button>
       </div>
     </div>
     <el-table
       :data="tableData"
       border
+      @selection-change="handleSelectionChange"
       style="width: 100%">
       <el-table-column
+        type="selection"
+        width="55">
+      </el-table-column>
+      <el-table-column
         fixed
+        prop="subject"
+        label="涓婚 ">
+      </el-table-column>
+      <el-table-column
         prop="typeName"
-        label="鍒嗙被鍚嶇О">
+        label="瀛︿範绫诲瀷">
       </el-table-column>
       <el-table-column
-        prop="orderNum"
-        label="鎺掑簭鍊�">
+        prop="contentType"
+        :formatter="typeFormatter"
+        label="鏂囦欢绫诲瀷">
       </el-table-column>
       <el-table-column
-        prop="createTime"
-        label="鍒涘缓鏃堕棿">
+        label="鏂囦欢鍐呭"
+      >
+        <template slot-scope="scope">
+          <video v-if="scope.row.contentType === 'video'" :src="'/api/files/' + scope.row.contentUrl.url" class="showContent"/>
+          <img v-if="scope.row.contentType === 'img'" :src="'/api/files/' + scope.row.contentUrl.url" class="showContent"/>
+          <el-link type="primary" v-if="scope.row.contentType === 'pdf'" :src="'/api/files/' + scope.row.contentUrl.url" class="showContent">鐐瑰嚮鏌ョ湅</el-link>
+        </template>
+      </el-table-column>
+      <el-table-column
+        prop="attachment"
+        label="闄勪欢">
+        <template slot-scope="scope">
+          <el-link type="primary" v-for="item in scope.row.attachment">{{item.name}}</el-link>
+        </template>
       </el-table-column>
       <el-table-column
         fixed="right"
@@ -46,60 +79,78 @@
         </template>
       </el-table-column>
     </el-table>
+    <pagination v-show="total>0" :total="total" :page.sync="searchForm.pageNum" :limit.sync="searchForm.pageSize"
+                @pagination="page"/>
 
     <el-dialog
-      title="娣诲姞鏂囦欢"
+      title="娣诲姞瀛︿範鍐呭"
       :visible.sync="open"
       width="600px"
+      :close-on-click-modal="false"
       :before-close="handleClose">
-      <el-form label-position="top" label-width="80px" ref="form" :rules="rules" :model="form">
+      <el-form label-position="left" label-width="120px" ref="form" :rules="rules" :model="form">
         <el-form-item label="涓婚" prop="subject">
           <el-input v-model="form.subject" placeholder="涓婚鍐呭"></el-input>
         </el-form-item>
-        <el-form-item label="鎵�灞炵被鍨�" prop="belongType">
-          <el-input v-model="form.belongType" placeholder="鎵�灞炵被鍨�"></el-input>
+        <el-form-item label="瀛︿範绫诲瀷" prop="belongType">
+          <el-select v-model="form.belongType" placeholder="瀛︿範绫诲瀷">
+            <el-option
+              v-for="type in typeList"
+              :key="type.id"
+              :label="type.typeName"
+              :value="type.id">
+            </el-option>
+          </el-select>
         </el-form-item>
         <el-form-item label="鏂囦欢绫诲瀷" prop="contentType">
-          <el-input v-model="form.contentType" placeholder="涓嶅悓绫诲瀷鐨勬枃浠堕槄瑙堟柟寮忎笉鍚岋紝澶氫綑鏂囦欢璇蜂互闄勪欢褰㈠紡涓婁紶"></el-input>
+          <el-select v-model="form.contentType" placeholder="涓嶅悓绫诲瀷鐨勬枃浠堕槄瑙堟柟寮忎笉鍚岋紝澶氫綑鏂囦欢璇蜂互闄勪欢褰㈠紡涓婁紶">
+            <el-option label="瑙嗛" value="video"></el-option>
+            <el-option label="PDF" value="pdf"></el-option>
+            <el-option label="鍥剧墖" value="img"></el-option>
+          </el-select>
         </el-form-item>
-        <el-form-item label="涓婁紶鏂囦欢" prop="contentUrl">
-          <upload :fileSizeLimitM="1024" :uploadNum="1" @getUploadUrl="getUploadUrl" />
+        <el-form-item label="涓婁紶鏂囦欢(涓�涓�)" prop="contentUrl">
+          <upload v-show="form.contentType" ref="upload" :fileUrl="fileContentUrl" :fileType="form.contentType" :fileSizeLimitM="1024" :uploadNum="1" @getUploadUrl="getUploadUrl" @removeFile="removeFile"/>
         </el-form-item>
-        <el-form-item label="闄勪欢" prop="attachment">
-          <upload :fileSizeLimitM="1024" :uploadNum="3" @getUploadUrl="getUploadAttachmentUrl" />
+        <el-form-item label="闄勪欢(鏈�澶�3涓�)" prop="attachment">
+          <upload :fileSizeLimitM="1024" :uploadNum="3" :fileUrl="form.attachment" @getUploadUrl="getUploadAttachmentUrl" @removeFile="removeAttachmentFile"/>
         </el-form-item>
       </el-form>
       <span slot="footer" class="dialog-footer">
         <el-button @click="open = false">鍙� 娑�</el-button>
-        <el-button type="primary" @click="handlerSubmit">娣� 鍔�</el-button>
+        <el-button type="primary" @click="handlerSubmit">淇� 瀛�</el-button>
       </span>
     </el-dialog>
   </div>
 </template>
 
 <script>
+import Pagination from '@/components/Pagination'
 import OnlineStudyAPI from '@/api/online-study'
+import StudyTypeAPI from '@/api/study-type'
 import Upload from '@/components/UploadC'
 export default {
   name: 'type',
-  components: {Upload},
+  components: {Upload, Pagination},
+  computed: {
+    fileContentUrl: function () {
+      return this.form ? this.form.contentUrl ? [this.form.contentUrl] : [] : []
+    }
+  },
   data () {
     return {
-      uploadAttachmentData: [],
-      uploadData: {
-        url: '',
-        originalFilename: ''
-      },
+      ids: [],
+      typeList: [],
       searchForm: {
         pageNum: 1,
         pageSize: 10,
         typeName: ''
       },
+      total: 0,
       tableData: [],
       open: false,
       form: {
-        typeName: '',
-        orderNum: null
+        contentType: 'video'
       },
       rules: {
         contentUrl: [
@@ -109,7 +160,7 @@
           { required: true, message: '璇疯緭鍏ヤ富棰樺唴瀹�', trigger: 'blur' },
         ],
         belongType: [
-          { required: true, message: '璇烽�夋嫨鎵�灞炵被鍨�', trigger: 'change' }
+          { required: true, message: '璇烽�夋嫨瀛︿範鍒嗙被', trigger: 'change' }
         ],
         contentType: [
           { required: true, message: '璇烽�夋嫨鏂囦欢绫诲瀷', trigger: 'change' }
@@ -118,23 +169,57 @@
     }
   },
   methods: {
+    handleSelectionChange(val) {
+      this.ids = val.map(item => item.id);
+    },
+    typeFormatter(row) {
+      if (row.contentType === 'video') {
+        return "瑙嗛"
+      }
+      if (row.contentType === 'img') {
+        return "鍥剧墖"
+      }
+      if (row.contentType === 'pdf') {
+        return "PDF"
+      }
+    },
+    clearFile() {
+      this.form.contentUrl = null
+      this.$refs.upload.clearFile()
+    },
+    removeFile() {
+      this.form.contentUrl = null
+    },
+    removeAttachmentFile(fileList, fileName) {
+      console.log(fileList, fileName, "dddddddd")
+      this.form.attachment = fileList.filter(item => item.name !== fileName)
+    },
     getUploadAttachmentUrl (uploadData) {
-      this.form.attachment = uploadData.url
-      this.uploadAttachmentData = uploadData
+      this.form.attachment = uploadData
     },
     getUploadUrl(uploadData) {
-      this.form.contentUrl = uploadData.url
-      this.uploadData = uploadData
+      this.form.contentUrl = uploadData[0]
     },
     remove (id) {
-      OnlineStudyAPI.remove(id).then(res => {
+      OnlineStudyAPI.remove([id]).then(res => {
         if (res.code === 1) {
           this.$message.success('鍒犻櫎鎴愬姛')
         }
       })
     },
+    batchRemove () {
+      if (this.ids.length < 1) {
+        this.$message.warning("璇烽�夋嫨瑕佸垹闄ょ殑鏁版嵁")
+      }
+      OnlineStudyAPI.remove(this.ids).then(res => {
+        if (res.code === 1) {
+          this.$message.success('鍒犻櫎鎴愬姛')
+          this.ids = []
+        }
+      })
+    },
     getTitle (typeName) {
-      return '纭畾瑕佸垹闄�' + typeName + '杩欎釜鍒嗙被鍚楋紵'
+      return '纭畾瑕佸垹闄�' + typeName + '杩欎釜鏂囦欢鍚楋紵'
     },
     handlerSubmit () {
       this.$refs['form'].validate((valid) => {
@@ -161,6 +246,7 @@
     },
     handleClose () {
       this.open = false
+      this.form = {}
     },
     handlerAdd () {
       this.form = {}
@@ -170,23 +256,37 @@
       OnlineStudyAPI.page(this.searchForm).then(res => {
         if (res.code === 1) {
           this.tableData = res.response
+          this.total = res.total
         }
       })
     },
     handleUpdate (row) {
-      this.form.typeName = row.typeName
-      this.form.orderNum = row.orderNum
       this.form.id = row.id
+      this.form.contentType = row.contentType
+      this.form.contentUrl = row.contentUrl
+      this.form.attachment = row.attachment
+      this.form.subject = row.subject
+      this.form.belongType = row.belongType
+      console.log(row, "dfddddddd")
       this.open = true
     }
   },
   mounted () {
     this.page()
+    StudyTypeAPI.list().then(res => {
+      if (res.code === 1) {
+        this.typeList = res.response
+      }
+    })
   }
 }
 </script>
 
 <style scoped>
+.showContent {
+  width: 200px;
+  height: 100px;
+}
 .warp {
   margin: 40px 10px;
 }

--
Gitblit v1.8.0