From 638d6c56772ecb184aeac6ff46f622b9b018a7af Mon Sep 17 00:00:00 2001 From: zhangsir Date: Fri, 8 Nov 2024 13:39:10 +0800 Subject: [PATCH] =?UTF-8?q?=E8=A7=86=E9=A2=91=E9=95=BF=E4=BC=A0=E4=BF=AE?= =?UTF-8?q?=E6=94=B9=E9=80=BB=E8=BE=91?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/api/modules/courseFile.js | 5 + src/components/Course/catalogCourseware.vue | 14 ++ src/components/Course/chooseCourseFile.vue | 23 +- src/components/Course/weikeContent.vue | 16 ++ src/components/FileUpload/index.vue | 14 +- src/utils/xajax2.js | 233 ++++++++++++++++++++ src/views/course/Courseware.vue | 59 ++++- 7 files changed, 352 insertions(+), 12 deletions(-) create mode 100644 src/utils/xajax2.js diff --git a/src/api/modules/courseFile.js b/src/api/modules/courseFile.js index ee84dd57..3188addb 100644 --- a/src/api/modules/courseFile.js +++ b/src/api/modules/courseFile.js @@ -3,6 +3,7 @@ * 下载课件,一期是直接在新的窗口打开文件的地址就可以了。不采用流的方式下载 */ import ajax from '@/utils/xajax.js' +import ajax2 from '@/utils/xajax2.js' /** * 分页查询,课件的管理列表 @@ -49,6 +50,9 @@ const findList = function(data) { const saveUpload = function(data) { return ajax.post('/xboe/m/course/file/upload/save', data); } +const saveUpload2 = function(data) { + return ajax2.post('/xboe/m/course/file/upload/save', data); +} /** * 批量更新,上传时,一个一个上传,下面的列表的保存,使用此方法 @@ -85,6 +89,7 @@ const detail = function(id) { export default { pageList, saveUpload, + saveUpload2, batchUpdate, detail, delFile diff --git a/src/components/Course/catalogCourseware.vue b/src/components/Course/catalogCourseware.vue index 60bb7b2e..0d19b3c3 100644 --- a/src/components/Course/catalogCourseware.vue +++ b/src/components/Course/catalogCourseware.vue @@ -51,6 +51,9 @@
+
视频时长: + +
保存
@@ -77,6 +80,9 @@ 秒 --> +
音频时长: + +
保存
@@ -325,6 +331,7 @@ completeSetup:0, second:5, setupTage:0, + duration: 0, }, homework:{courseId: '', name:'', content:'', file:'', deadTime: '', submitMode: 3}, homeworkChange:{}, @@ -390,6 +397,7 @@ this.curriculumData =JSON.parse(newVal.content); }else{ this.curriculumData.url=newVal.content; + this.curriculumData.duration = newVal.duration; } } } @@ -412,6 +420,7 @@ completeSetup:0, second:5, setupTage:0, + duration: 0, }; //this.assess }, @@ -503,6 +512,10 @@ this.content.content=JSON.stringify(this.linkInfo); } } else if(this.content.contentType==10 || this.content.contentType==20) { + if(!this.curriculumData.duration){ + this.$message.error("请手动输入课件时长"); + return; + } this.content.content=JSON.stringify(this.curriculumData); } let jsonData={ @@ -639,6 +652,7 @@ this.content.content=cfile.filePath; } } + this.curriculumData.duration = cfile.duration; this.content.courseId=this.course.id; this.content.duration=cfile.duration;//时长 this.content.sortIndex=1; diff --git a/src/components/Course/chooseCourseFile.vue b/src/components/Course/chooseCourseFile.vue index 74e3301b..13ad471f 100644 --- a/src/components/Course/chooseCourseFile.vue +++ b/src/components/Course/chooseCourseFile.vue @@ -90,6 +90,7 @@ }, data(){ return { + successParams: {}, uploadFileUrl: process.env.VUE_APP_BASE_API + "/xboe/sys/xuploader/file/upload", // 上传的图片服务器地址 data:{ dir:'course' @@ -172,7 +173,7 @@ }, // 上传成功回调 handleUploadSuccess(res, file) { - //console.log(res); + console.log(res,file,'resfile') if(res.status == 200) { //上传到课件库 //console.log(res.result); @@ -186,6 +187,12 @@ duration:this.duration, remark:'课程中直接上传' } + if(res.result.fileType == 'mp4'||res.result.fileType == 'mp3'){ + this.successParams = courseWare + this.courseFile = {fileName:res.result.displayName,id: '1',resType:'10'} + this.$message({message:"上传成功",type:'success',offset:100}); + return + } apiCourseFile.saveUpload(courseWare).then(rs=>{ if(rs.status==200){ this.courseFile=rs.result; @@ -249,7 +256,19 @@ }, chooseCourseFile(ccfile){ - this.$emit('choose', ccfile); + if(ccfile.resType == 10){ + apiCourseFile.saveUpload(this.successParams).then(rs=>{ + if(rs.status==200){ + this.$emit('choose', rs.result); + }else{ + this.$message.error(rs.message); + } + }).catch(err=>{ + console.log(err,'errrrrr') + }) + }else{ + this.$emit('choose', ccfile); + } } } } diff --git a/src/components/Course/weikeContent.vue b/src/components/Course/weikeContent.vue index 168aa565..fab56796 100644 --- a/src/components/Course/weikeContent.vue +++ b/src/components/Course/weikeContent.vue @@ -75,6 +75,9 @@ 秒 --> +
视频时长: + +
保存
@@ -102,6 +105,9 @@
+
音频时长: + +
保存
@@ -657,6 +663,7 @@ completeSetup:0, second:5, setupTage:0, + duration: 0, }, }, pdfTip:'',//pdf文件的提示 @@ -835,10 +842,12 @@ } } if(con.contentType==10 || con.contentType==20){ + console.log(con.content,'con.content') if(con.content.startsWith('\{')){ $this.cware.curriculumData=JSON.parse(con.content); }else{ $this.cware.curriculumData.url=con.content; + $this.cware.curriculumData.duration = con.duration; } } $this.cwareChange = deepClone($this.cware); @@ -986,6 +995,7 @@ this.cware.content.contentName=row.name; this.cware.content.content=row.filePath; this.cware.curriculumData.url = row.filePath; + this.cware.curriculumData.duration=row.duration; this.cware.content.duration=row.duration;//时长 this.cware.findShow=false; if(this.cware.content.contentType==40){ @@ -1067,6 +1077,11 @@ this.$message.error("请选择课件"); return; } + if(!this.cware.curriculumData.duration){ + this.$message.error("请手动输入课件时长"); + this.loading=false; + return; + } postData.content.content=JSON.stringify(this.cware.curriculumData); this.cwareChange.curriculumData = deepClone(this.cware.curriculumData) } @@ -1216,6 +1231,7 @@ this.cware.curriculumData.url = cfile.filePath; } } + this.cware.curriculumData.duration=cfile.duration; this.cware.content.duration=cfile.duration;//时长 this.saveContent(1); diff --git a/src/components/FileUpload/index.vue b/src/components/FileUpload/index.vue index 0391f557..e1823b00 100644 --- a/src/components/FileUpload/index.vue +++ b/src/components/FileUpload/index.vue @@ -12,6 +12,7 @@ :show-file-list="showList" :data="data" :headers="headers" + :on-remove="handleRemove" class="upload-file-uploader" ref="upload" > @@ -142,6 +143,9 @@ export default { }, }, methods: { + handleRemove(file, fileList){ + this.$emit('isTrue',false) + }, // 上传前校检格式和大小 handleBeforeUpload(file) { if(this.beforeMsg){ @@ -186,6 +190,8 @@ export default { if(this.loading) { this.isLoading = true; } + this.$emit('isTrue',true) + this.$emit('isFalse',true) return true; }, // 文件个数超出 @@ -195,6 +201,7 @@ export default { // 上传失败 handleUploadError(err) { this.isLoading = false; + this.$emit('isTrue',false) this.$message({message:"上传失败, 请重试",type:'error',offset:100}); }, // 上传成功回调 @@ -217,16 +224,13 @@ export default { if(delIdx>-1){ fileList.splice(delIdx,1); } - this.$emit("success", res); } else { this.isLoading = false; - if(this.limit == 1){ - this.fileList = []; - } + //this.fileList = []; this.$message({message:"上传失败",type:'error',offset:100}); } - // this.$emit("success", res); + this.$emit("success", res); }, // 删除文件 handleDelete(index) { diff --git a/src/utils/xajax2.js b/src/utils/xajax2.js new file mode 100644 index 00000000..0034a5ad --- /dev/null +++ b/src/utils/xajax2.js @@ -0,0 +1,233 @@ +import axios from 'axios' +import qs from 'qs' +import { Notification, MessageBox, Message } from 'element-ui' +import store from '@/store' +import { getToken } from '@/utils/token' +import errorCode from '@/utils/errorCode' +/** + *request请求 axios.request(config) + *requestJson请求 axios.request(config) + *get请求 axios.get(url[, config]) + *post请求 axios.post(url[, data[, config]]) + *postJson请求 axios.post(url[, data[, config]]) + *put请求 axios.put(url[, data[, config]]) + *putJson请求 axios.put(url[, data[, config]]) + *patch请求 axios.patch(url[, data[, config]]) + *patchJson请求 axios.patch(url[, data[, config]]) + *delete请求 axios.delete(url[, config]) + */ + +//const ReLoginUrl="/login"; + +const ReLoginUrl=process.env.VUE_APP_LOGIN_URL; + +const TokenName='XBOE-Access-Token'; +/**axios.defaults.headers['Content-Type'] = 'application/x-www-form-urlencoded'**/ +//只是用于发送json对象数据时使用post,put,patch +const jsonRequest=axios.create({ + headers:{'Content-Type':'application/json;charset=utf-8'}, + // axios中请求配置有baseURL选项,表示请求URL公共部分 + baseURL: process.env.VUE_APP_BASE_API, + //超时 + timeout: 60000, +}); +//发送json对象的拦截器 +jsonRequest.interceptors.request.use(config => { + //是否需要设置 token + const isToken = (config.headers || {}).isToken === false + if (getToken() && !isToken) { + config.headers[TokenName] = getToken() // 让每个请求携带自定义token 请根据实际情况自行修改 + } + return config +}, error => { + console.log(error) + Promise.reject(error) +}) + +// 响应拦截器 +jsonRequest.interceptors.response.use(res => { + + const code = res.data.status || 200; + if(code===200){ + return res.data + }else{ + if(code == 6001){ //针对于老系统的处理 + store.dispatch('LogOut').then(() => { + location.href = ReLoginUrl; + }) + }else if(code === 401){ + store.dispatch('LogOut').then(() => { + location.href = ReLoginUrl; + }) + }else if(code === 402){ + store.dispatch('LogOut').then(() => { + location.href = ReLoginUrl; + }) + }else if(code===403){ + var msg='当前操作没有权限'; + Message({message: msg, type: 'error'}); + return Promise.reject(new Error(msg)) + //return res.data; + }else if(code===302){ + location.href = ReLoginUrl; + }else{ + //Message({message: res.data.message, type: 'error'}); + //console.log('err:' + res.data.error); + //return Promise.reject(new Error(res.data.message)) + return res.data; + } + } + }, + error => { + console.log('err' + error) + let { message } = error; + if (message == "Network Error") { + message = "网络异常,请稍后重试"; + } + else if (message.includes("timeout")) { + message = "系统接口请求超时"; + //location.href = this.webBaseUrl + ReLoginUrl; + } + else if (message.includes("Request failed with status code")) { + message = "系统接口" + message.substr(message.length - 3) + "异常"; + } + Message({ + message: message, + type: 'error', + duration: 5 * 1000 + }) + return Promise.reject(error) + } +) + +//用于普通的发送请求 +const formRequest=axios.create({ + headers:{'Content-Type':'application/x-www-form-urlencoded'}, + // axios中请求配置有baseURL选项,表示请求URL公共部分 + baseURL: process.env.VUE_APP_BASE_API, + //超时 + timeout: 10000, +}) +//发送json对象的拦截器 +formRequest.interceptors.request.use(config => { + //是否需要设置 token + const isToken = (config.headers || {}).isToken === false + if (getToken() && !isToken) { + config.headers[TokenName] = getToken() // 让每个请求携带自定义token 请根据实际情况自行修改 + } + return config +}, error => { + console.log(error) + Promise.reject(error) +}); +formRequest.interceptors.response.use(res => { + const code = res.data.status || 200; + if(code===200){ + return res.data + }else{ + if(code == 6001){ //针对于老系统的处理,因为老系统是字符串,所以这里不使用三等于号 + store.dispatch('LogOut').then(() => { + location.href = ReLoginUrl; + }) + }else if(code === 401){ + store.dispatch('LogOut').then(() => { + location.href = ReLoginUrl; + }) + }else if(code === 402){ + store.dispatch('LogOut').then(() => { + location.href = ReLoginUrl; + }) + }else if(code===403){ + var msg='当前操作没有权限'; + Message({message: msg, type: 'error'}); + return Promise.reject(new Error(msg)) + }else if(code===302){ + location.href = ReLoginUrl; + }else{ + //Message({message: res.data.message, type: 'error'}); + //console.log('err' + res.data.error); + //return Promise.reject(new Error(res.data.message)) + return res.data;//返回给用户做业务处理 + } + } + }, + error => { + console.log('err' + error) + let { message } = error; + if (message == "Network Error") { + message = "网络异常,请稍后重试"; + } + else if (message.includes("timeout")) { + message = "接口超时,请检查是否上传成功"; + //location.href = this.webBaseUrl + ReLoginUrl; + } + else if (message.includes("Request failed with status code")) { + message = "系统接口" + message.substr(message.length - 3) + "异常"; + } + Message({ + message: message, + type: 'error', + duration: 5 * 1000 + }) + return Promise.reject(error) + } +) + +//request请求 +const request=function(cfg){ + if(cfg.data){ + cfg.data=qs.stringify(cfg.data); + } +}; +//requestJson请求 +const requestJson=jsonRequest.request; +//get请求 +const get=formRequest.request; +//post请求 +const post=function(url,data,config){ + if(data){ + data=qs.stringify(data); + } + return formRequest.post(url,data,config); +} +//post请求 +const postForm=function(url,data,config){ + return formRequest.post(url,data,config); +} +//postJson请求 +const postJson=jsonRequest.post; +//put请求 +const put=function(url,data,config){ + if(data){ + data=qs.stringify(data); + } + return formRequest.put(url,data,config); +} +//putJson请求 +const putJson=jsonRequest.put; +//patch请求 +const patch=function(url,data,config){ + if(data){ + data=qs.stringify(data); + } + return formRequest.patch(url,data,config); +} +//patchJson请求 +const patchJson=jsonRequest.patch; +//delete请求 +const del=formRequest.delete; + + +export default { + request, + requestJson, + get, + post, + postJson, + put, + putJson, + patch, + patchJson, + del, + postForm +} diff --git a/src/views/course/Courseware.vue b/src/views/course/Courseware.vue index 3b6dae88..9c208dbf 100644 --- a/src/views/course/Courseware.vue +++ b/src/views/course/Courseware.vue @@ -149,7 +149,7 @@ - + @@ -159,7 +159,7 @@ @@ -169,7 +169,8 @@ @@ -194,7 +195,7 @@ - 保存 + 保存 @@ -280,6 +281,8 @@ export default { }, data() { return { + isTrue: false, + isFalse: false, resOwnerListMap: [], //fileBaseUrl: process.env.VUE_APP_FILE_BASE_URL, fileBaseUrl:this.$xpage.constants.fileBaseUrl, //获成动态获取的处理 @@ -392,6 +395,12 @@ export default { this.search(); }, methods: { + isTrueChange(val){ + this.isTrue = val + }, + isFalseChange(val){ + this.isFalse = val + }, beforeCheck(){ if(!this.upload.orgId ||!this.upload.orgName){ return false; @@ -555,7 +564,7 @@ export default { // remark: 备注说明,可以为空,不填 }; //try { - coueseFile.saveUpload(data).then(res=>{ + coueseFile.saveUpload2(data).then(res=>{ if(res.status==200){ //console.log('上传文件成功:'+rs.result.displayName); res.result.device1 = true; @@ -564,12 +573,18 @@ export default { if(res.result.duration){ res.result.minute=Math.round(res.result.duration/60); //四舍五入 } + if(res.result.duration==0){ + this.$message.error('上传的视频时长不能为0,请手动编辑时长'); + } this.fileList.push(res.result); + this.isTrue = false; }else{ this.$message.error(res.message); + this.isFalse = false } }).catch (error=>{ console.log(error,'error') + this.isFalse = false //this.$message.error(error); }); // const { result, status } = coueseFile.saveUpload(data); @@ -598,16 +613,26 @@ export default { }, handleCloseCheck(done){ //console.log('关闭的处理aaaaa'); + if(this.isTrue&&this.isFalse){ + this.$message.error('文件正在上传中,请耐心等待'); + return false; + } if(this.fileList.length>0){ this.$message.error('有待保存的上传文件,请执行保存操作'); return false; }else{ + this.isTrue = false + this.isFalse = false return done(true); } }, // 文件上传保存 saveUpload() { + if(this.fileList.length<=0){ + this.$message.error('请上传文件'); + return; + } if(!this.upload.orgName){ this.$message.success('请选择资源归属'); return; @@ -628,6 +653,20 @@ export default { item.duration = item.minute ? parseFloat(item.minute) * 60 : 1800; }); this.loading = true; + const messageD = this.fileList.some(item =>{ + if(item.name == ''){ + this.$message.error('课件名称不能为空'); + return true; + }else if(!item.minute||item.minute == undefined){ + this.$message.error('时长不能为空并且不能为0'); + return true; + }else{ + return false + } + }) + if(messageD){ + return + } coueseFile.batchUpdate(this.fileList).then(rs => { if (rs.status === 200) { this.$message.success('保存成功'); @@ -793,6 +832,16 @@ export default {