Commit 5daf9c1a authored by 李维's avatar 李维

fix: 修复图片空间默认不显示图片的问题

parent 269467f5
.com-trs[data-v-291eb56d]{width:100%;height:50px}.chart-slider[data-v-291eb56d]{width:100%;height:100%}.buttons[data-v-effb3c56]{text-align:center}.buttons .el-button[data-v-effb3c56]{padding:4px 12px;font-size:18px}.mesh-loader[data-v-effb3c56]{overflow:hidden;height:inherit;width:inherit}.mesh-loader .circle[data-v-effb3c56]{width:10px;height:10px;position:absolute;background:#f44336;border-radius:50%;margin:-5px;animation:mesh-effb3c56 3s ease-in-out -1.5s infinite}.mesh-loader>div .circle[data-v-effb3c56]:last-child{animation-delay:0s}.mesh-loader>div[data-v-effb3c56]{position:absolute;top:50%;left:50%}.mesh-loader>div[data-v-effb3c56]:last-child{transform:rotate(90deg)}@keyframes mesh-effb3c56{0%{transform-origin:50% -100%;transform:rotate(0)}50%{transform-origin:50% -100%;transform:rotate(1turn)}50.1%{transform-origin:50% 200%;transform:rotate(0deg)}to{transform-origin:50% 200%;transform:rotate(1turn)}}.buttons[data-v-adbbf7fc]{text-align:center;position:absolute;right:0;top:0}.buttons .el-button[data-v-adbbf7fc]{padding:4px 12px;font-size:18px;margin:0;border-radius:initial}[data-v-5c385f59] .el-upload{height:80px}[data-v-5c385f59] .el-upload-dragger{height:80px;border:1px dashed #d9d9d9;border-radius:6px;color:#8c939d;font-size:14px;display:flex;justify-content:center;align-items:center}[data-v-5c385f59] .el-icon-upload{font-size:36px;color:#c0c4cc;margin:0 10px}.buttons[data-v-5c385f59]{text-align:center;position:absolute;right:0;top:0}.el-button[data-v-5c385f59]{padding:4px 12px;font-size:18px;margin:0;border-radius:0 0 0 20px}body,html{margin:0;padding:0;height:100%;overflow:hidden;background-color:#fff} .com-trs[data-v-291eb56d]{width:100%;height:50px}.chart-slider[data-v-291eb56d]{width:100%;height:100%}.buttons[data-v-effb3c56]{text-align:center}.buttons .el-button[data-v-effb3c56]{padding:4px 12px;font-size:18px}.mesh-loader[data-v-effb3c56]{overflow:hidden;height:inherit;width:inherit}.mesh-loader .circle[data-v-effb3c56]{width:10px;height:10px;position:absolute;background:#f44336;border-radius:50%;margin:-5px;animation:mesh-effb3c56 3s ease-in-out -1.5s infinite}.mesh-loader>div .circle[data-v-effb3c56]:last-child{animation-delay:0s}.mesh-loader>div[data-v-effb3c56]{position:absolute;top:50%;left:50%}.mesh-loader>div[data-v-effb3c56]:last-child{transform:rotate(90deg)}@keyframes mesh-effb3c56{0%{transform-origin:50% -100%;transform:rotate(0)}50%{transform-origin:50% -100%;transform:rotate(1turn)}50.1%{transform-origin:50% 200%;transform:rotate(0deg)}to{transform-origin:50% 200%;transform:rotate(1turn)}}.buttons[data-v-4f1d8e93]{text-align:center;position:absolute;right:0;top:0}.buttons .el-button[data-v-4f1d8e93]{padding:4px 12px;font-size:18px;margin:0;border-radius:initial}[data-v-5c385f59] .el-upload{height:80px}[data-v-5c385f59] .el-upload-dragger{height:80px;border:1px dashed #d9d9d9;border-radius:6px;color:#8c939d;font-size:14px;display:flex;justify-content:center;align-items:center}[data-v-5c385f59] .el-icon-upload{font-size:36px;color:#c0c4cc;margin:0 10px}.buttons[data-v-5c385f59]{text-align:center;position:absolute;right:0;top:0}.el-button[data-v-5c385f59]{padding:4px 12px;font-size:18px;margin:0;border-radius:0 0 0 20px}body,html{margin:0;padding:0;height:100%;overflow:hidden;background-color:#fff}
\ No newline at end of file \ No newline at end of file
<!doctype html><html lang=""><head><meta charset="utf-8"><meta http-equiv="X-UA-Compatible" content="IE=edge"><meta name="viewport" content="width=device-width,initial-scale=1"><link rel="icon" href="favicon.ico"><title>form_vue</title><script defer="defer" src="js/chunk-vendors.a2c59d66.js"></script><script defer="defer" src="js/app.0ed5b108.js"></script><link href="css/chunk-vendors.77489a8d.css" rel="stylesheet"><link href="css/app.96b8b450.css" rel="stylesheet"></head><body><noscript><strong>We're sorry but form_vue doesn't work properly without JavaScript enabled. Please enable it to continue.</strong></noscript><script src="https://staging-teach.cdn.ireadabc.com/h5template/h5-static-lib/js/air.js"></script><script>if (document.domain.indexOf("iteachabc.com") > 0) { <!doctype html><html lang=""><head><meta charset="utf-8"><meta http-equiv="X-UA-Compatible" content="IE=edge"><meta name="viewport" content="width=device-width,initial-scale=1"><link rel="icon" href="favicon.ico"><title>form_vue</title><script defer="defer" src="js/chunk-vendors.a2c59d66.js"></script><script defer="defer" src="js/app.d96d69b2.js"></script><link href="css/chunk-vendors.77489a8d.css" rel="stylesheet"><link href="css/app.ba943133.css" rel="stylesheet"></head><body><noscript><strong>We're sorry but form_vue doesn't work properly without JavaScript enabled. Please enable it to continue.</strong></noscript><script src="https://staging-teach.cdn.ireadabc.com/h5template/h5-static-lib/js/air.js"></script><script>if (document.domain.indexOf("iteachabc.com") > 0) {
document.domain = "iteachabc.com"; document.domain = "iteachabc.com";
}</script><div id="app"></div></body></html> }</script><div id="app"></div></body></html>
\ No newline at end of file
(function(){var e={411:function(e,t,a){"use strict";var i=a(5471),s=a(1052),o=a.n(s),n=function(){var e=this,t=e._self._c;return t("div",{staticStyle:{width:"450px"},attrs:{id:"app"}},[t("el-form",{attrs:{"label-width":"120px"}},[t("el-form-item",{attrs:{label:"视频"}},[t("VideoUploader",{on:{change:e.save},model:{value:e.itemData.url,callback:function(t){e.$set(e.itemData,"url",t)},expression:"itemData.url"}})],1),t("el-form-item",{attrs:{label:"静音视频(可选)"}},[t("VideoUploader",{on:{change:e.save},model:{value:e.itemData.muteVideoUrl,callback:function(t){e.$set(e.itemData,"muteVideoUrl",t)},expression:"itemData.muteVideoUrl"}})],1),t("el-form-item",{attrs:{label:"截图"}},[t("ImageUploader",{on:{change:e.save},model:{value:e.itemData.snapshotUrl,callback:function(t){e.$set(e.itemData,"snapshotUrl",t)},expression:"itemData.snapshotUrl"}})],1),t("el-form-item",{attrs:{label:"时长"}},[t("el-input",{on:{change:e.save},model:{value:e.itemData.name,callback:function(t){e.$set(e.itemData,"name",t)},expression:"itemData.name"}})],1),t("el-form-item",{attrs:{label:"大小"}},[t("el-input",{on:{change:e.save},model:{value:e.itemData.size,callback:function(t){e.$set(e.itemData,"size",t)},expression:"itemData.size"}})],1)],1)],1)},r=[],l=function(){var e=this,t=e._self._c;return t("div",{staticClass:"com-trs"},[t("div",{ref:"refEcharts",staticClass:"chart-slider"})])},d=[],c={name:"TimeRangeSelector",props:{value:{type:Object,default:()=>({start:0,end:100})}},watch:{value:{handler(e){this.parentValueChange=!0,this.setTimeRange(100*e.start,100*e.end)},deep:!0}},data(){return{insECharts:null,parentValueChange:!1}},mounted(){this.initEcharts()},methods:{initEcharts(){this.insECharts||(this.insECharts=this.$echarts.init(this.$refs.refEcharts));const e={grid:{left:10,right:10,top:10,bottom:10},tooltip:{},dataZoom:[{type:"slider"}],xAxis:{show:!1},yAxis:{show:!1}};this.insECharts.on("dataZoom",(e=>{this.parentValueChange?this.parentValueChange=!1:(this.$emit("change",{start:e.start/100,end:e.end/100}),this.$emit("input",{start:e.start/100,end:e.end/100}))})),this.insECharts.setOption(e)},setTimeRange(e,t){this.insECharts.dispatchAction({type:"dataZoom",dataZoomIndex:0,start:e,end:t})}}},u=c,p=a(1656),h=(0,p.A)(u,l,d,!1,null,"291eb56d",null),m=h.exports,g=function(){var e=this,t=e._self._c;return t("div",{staticStyle:{position:"relative",width:"360px",height:"220px"}},[t("el-upload",{attrs:{data:e.uploadData,disabled:e.uploading||e.transcoding,action:e.uploadUrl,drag:"","before-upload":e.customReq,accept:".mp4","show-file-list":!1}},[t("i",{directives:[{name:"show",rawName:"v-show",value:!e.transcoding&&!e.videoDone&&!e.uploading,expression:"!transcoding && !videoDone && !uploading"}],staticClass:"el-icon-upload"}),t("div",{directives:[{name:"show",rawName:"v-show",value:!e.transcoding&&!e.videoDone&&!e.uploading,expression:"!transcoding && !videoDone && !uploading"}],staticClass:"el-upload__text"},[e._v("将MP4文件拖到此处,或"),t("em",[e._v("点击上传")])]),e.transcoding||e.videoDone||e.uploading?e._e():t("div",{staticClass:"el-upload__tip",staticStyle:{"text-align":"center"},attrs:{slot:"tip"},slot:"tip"},[e._v("只能上传mp4文件")]),e.transcoding?t("div",{staticClass:"el-upload__tip",staticStyle:{"text-align":"center"},attrs:{slot:"tip"},slot:"tip"},[e._v("视频后台转码中,请稍后...")]):e._e(),t("div",{directives:[{name:"show",rawName:"v-show",value:!e.transcoding&&!e.videoDone&&e.uploading,expression:"!transcoding && !videoDone && uploading"}],staticStyle:{position:"absolute",left:"50%",top:"50%",transform:"translate(-50%, -50%)"}},[t("el-progress",{attrs:{type:"circle",percentage:e.uploadPercentage,status:e.uploadStatus}}),t("div",[e._v(e._s(e.uploadSpeed))])],1),t("div",{directives:[{name:"show",rawName:"v-show",value:!e.transcoding&&e.videoDone,expression:"!transcoding && videoDone"}]},[t("video",{ref:"refVideo",attrs:{width:"360px",height:"180px",controls:"",crossOrigin:"anonymous"}},[t("source",{attrs:{src:`${e.videoUrl}`,type:"video/mp4"}}),e._v(" Your browser does not support the video tag. ")])]),e.transcoding?t("div",[t("div",{staticClass:"mesh-loader"},[t("div",{staticClass:"set-one"},[t("div",{staticClass:"circle"}),t("div",{staticClass:"circle"})]),t("div",{staticClass:"set-two"},[t("div",{staticClass:"circle"}),t("div",{staticClass:"circle"})])])]):e._e()]),e.videoDone?t("div",{staticClass:"buttons"},[t("el-button",{attrs:{type:"primary",size:"mini",icon:"el-icon-camera"},on:{click:e.captureVideo}}),t("el-button",{attrs:{type:"primary",size:"mini",icon:"el-icon-download"},on:{click:e.download}}),t("el-button",{attrs:{type:"danger",size:"mini",icon:"el-icon-delete"},on:{click:e.deleteVideo}})],1):e._e()],1)},f=[],v=a(1396),w=a.n(v),U=a(4335),y=a(5735),b=a.n(y),$={name:"VideoUploader",props:{value:{type:String,default:""}},watch:{value:function(e,t){e&&this.httpHeadCall(e,(async e=>{e?this.videoDone=!0:(this.transcoding=!0,await this.checkResourceAvaliable(),this.$message({type:"success",message:"转换完成"}),this.videoDone=!0,this.transcoding=!1,this.$refs.refVideo.load())})),this.videoUrl=e},videoUrl:function(){this.$refs.refVideo.load()}},data(){return{uploadUrl:"",uploadData:"",uploading:!1,transcoding:!1,videoDone:!1,uploadPercentage:0,uploadStatus:null,uploadSpeed:"0KB/s",startTime:null,endTime:null,loaded:0,videoUrl:"",setIntervalIds:[],setTimeoutIds:[]}},created(){this.uploadUrl=window.courseware.uploadVideoUrl(),this.uploadData=window.courseware.uploadData(),window["air"].getUploadVideoCallback=(e,t)=>{this.uploadUrl=e,this.uploadData=t}},mounted(){this.$refs.refVideo.addEventListener("click",(()=>{const e=()=>{this.$refs.refVideo.pause(),this.$refs.refVideo.removeEventListener("play",e)};this.$refs.refVideo.addEventListener("play",e)}))},methods:{parseFileName(e){const t=e.lastIndexOf("."),a=e.substring(0,t),i=e.substring(t);return{name:a,ext:i}},resetUploadVars(){this.uploadPercentage=0,this.uploadStatus=null,this.uploadSpeed="0KB/s",this.startTime=null,this.endTime=null,this.loaded=0},httpHeadCall(e,t){let a=new XMLHttpRequest;try{a.onreadystatechange=()=>{try{4==a.readyState&&(a.status>=200&&a.status<400?t(!0):t(!1))}catch(e){t(!1)}},a.open("HEAD",e,!0),a.send(),a.timeout=15e3,a.onerror=e=>{t(!1)},a.ontimeout=e=>{t(!1)}}catch(i){t(!1)}},async customReq(e){const{name:t,ext:a}=this.parseFileName(e.name);if(".mp4"!==a)return this.$message({type:"error",message:"只能上传mp4文件"}),!1;const i=await this.getFileMD5(e),s=document.location.protocol,o=`${s}//teach.cdn.ireadabc.com`,n=`${s}//openapi.iteachabc.com`;return this.videoUrl==`${o}/${i}_h.mp4`?(this.$refs.refVideo.pause(),this.$refs.refVideo.currentTime=0,void this.$message({type:"success",message:"极速上传完成"})):(this.resetUploadVars(),this.videoUrl="",this.uploading=!0,this.transcoding=!1,this.videoDone=!1,this.httpHeadCall(`${o}/${i}_h.mp4`,(t=>{if(t)return this.uploadStatus="success",this.videoUrl=`${o}/${i}_h.mp4`,this.$emit("input",this.videoUrl),this.$emit("change",{url:this.videoUrl,file:e}),this.$emit("success",{url:this.videoUrl,file:e}),this.uploading=!1,void this.$message({type:"success",message:"极速上传完成"});U.A.get(`${n}/oss/timestamp`,{}).then((t=>{const a=w().MD5(t+"iplayABC2019").toString();U.A.get(`${n}/oss/signature`,{sign:a,tmps:t}).then((t=>{const a=t.data.data,n=new FormData;n.append("key",i+".mp4"),n.append("bucket","iplayabc-worker-queue-videolmh"),n.append("OSSAccessKeyId",a.OSSAccessKeyId),n.append("policy",a.policy),n.append("Signature",a.signature),n.append("success_action_status","200"),n.append("file",e),e.action=`${s}//iplayabc-worker-queue-videolmh.oss-cn-beijing.aliyuncs.com`,this.startTime=(new Date).getTime(),this.uploadStatus=null,(0,U.A)({method:"post",url:e.action,headers:{"Access-Control-Allow-Origin":"*"},onUploadProgress:e=>{this.uploadPercentage=Math.ceil(100*e.progress),this.endTime=(new Date).getTime();const t=this.endTime-this.startTime;if(this.startTime=(new Date).getTime(),0===t)return;const a=e.loaded-this.loaded;this.loaded=e.loaded;const i=a/t*1e3,s=Math.round(i/1024);this.uploadSpeed=s>1024?`${(s/1024).toFixed(2)}MB/s`:`${s}KB/s`,this.$emit("onProgress",e)},data:n}).then((async t=>{const a=setTimeout((()=>{this.resetUploadVars(),this.uploading=!1,this.transcoding=!0,this.videoDone=!1;const e=this.setTimeoutIds.indexOf(a);e>-1&&this.setTimeoutIds.splice(e,1)}),1e3);this.uploadStatus="success",this.videoUrl=`${o}/${i}_h.mp4`,this.$emit("input",this.videoUrl),this.$emit("change",{url:this.videoUrl,file:e}),this.$emit("success",{url:this.videoUrl,file:e}),this.setTimeoutIds.push(a),this.uploading=!1,this.$message({type:"info",message:"上传成功,开始转码..."})})).catch((e=>{const t=setTimeout((()=>{this.uploading=!1,this.transcoding=!1,this.videoDone=!1;const e=this.setTimeoutIds.indexOf(t);e>-1&&this.setTimeoutIds.splice(e,1)}),1e3);this.uploadStatus="error",this.$emit("error",e),this.setTimeoutIds.push(t)}))}))}))})),!1)},checkResourceAvaliable(){return new Promise((e=>{let t=null;t=setInterval((()=>{this.httpHeadCall(this.videoUrl,(a=>{if(a){if(t){const e=this.setIntervalIds.indexOf(t);clearInterval(t),this.setIntervalIds.splice(e,1)}e(!0)}}))}),800),this.setIntervalIds.push(t)}))},async download(){const e=this.videoUrl,t=e.split("/").pop(),a=await fetch(e);if(a.ok){const e=await a.blob(),i=window.URL.createObjectURL(e),s=document.createElement("a");s.href=i,s.download=t,document.body.appendChild(s),s.click(),this.$message({type:"success",message:"下载完成"})}else this.$message({type:"error",message:"下载失败"})},captureVideo(){const e=this.videoUrl.split("/").pop(),{name:t,ext:a}=this.parseFileName(e),i=this.$refs.refVideo,s=document.createElement("canvas"),o=s.getContext("2d");s.width=i.videoWidth,s.height=i.videoHeight,o.drawImage(i,0,0,s.width,s.height);const n=s.toDataURL("image/png"),r=document.createElement("a");r.href=n,r.download=t+"_"+Math.floor(1e3*i.currentTime)+".png",document.body.appendChild(r),r.click(),this.$message({type:"success",message:"截图成功"})},deleteVideo(){this.$confirm("确定要删除吗?","提示",{confirmButtonText:"确定",cancelButtonText:"取消",type:"warning"}).then((()=>{this.videoUrl="",this.videoDone=!1,this.$emit("input",""),this.$emit("change",{url:this.videoUrl,file:null})})).catch((()=>{this.$message({type:"info",message:"已取消删除"})}))},getFileMD5(e){return new Promise((t=>{let a=new FileReader,i=new(b().ArrayBuffer);a.readAsArrayBuffer(e),a.onload=function(e){i.append(e.target.result);let a=i.end();t(a)}}))}},beforeDestroy(){this.setTimeoutIds.forEach((e=>{clearTimeout(e)})),this.setIntervalIds.forEach((e=>{clearInterval(e)}))}},D=$,_=(0,p.A)(D,g,f,!1,null,"effb3c56",null),x=_.exports,C=function(){var e=this,t=e._self._c;return t("div",{staticStyle:{position:"relative",width:"360px",height:"180px"}},[t("el-upload",{attrs:{data:e.uploadData,action:e.uploadUrl,drag:"",accept:".png,.jpg,.jpeg,.bmp,.gif","show-file-list":!1,"on-success":e.handleUploadSuccess}},[t("i",{directives:[{name:"show",rawName:"v-show",value:!e.imageUrl,expression:"!imageUrl"}],staticClass:"el-icon-upload"}),t("div",{directives:[{name:"show",rawName:"v-show",value:!e.imageUrl,expression:"!imageUrl"}],staticClass:"el-upload__text"},[e._v("将文件拖到此处,或"),t("em",[e._v("点击上传")]),t("br"),t("span",{staticStyle:{"font-size":"14px"}},[e._v("只能上传 "),t("strong",[e._v("jpg、png、jpeg、gif、bmp")]),e._v(" 文件")])]),e.imageUrl?t("div",{staticStyle:{width:"100%",height:"100%"}},[t("el-image",{staticStyle:{width:"100%",height:"100%"},attrs:{src:e.imageUrl,fit:"contain"}})],1):e._e()]),e.imageUrl?t("el-button-group",{staticClass:"buttons"},[t("el-button",{attrs:{type:"ghost",size:"mini",icon:"el-icon-download"},on:{click:e.download}}),t("el-button",{attrs:{type:"ghost",size:"mini",icon:"el-icon-delete"},on:{click:e.deleteImg}})],1):e._e()],1)},S=[],T={name:"ImageUploader",props:{value:{type:String,default:""}},watch:{value:function(e,t){this.imageUrl=e}},data(){return{uploadUrl:"",uploadData:"",imageUrl:""}},created(){this.uploadUrl=window.courseware.uploadUrl(),this.uploadData=window.courseware.uploadData(),window["air"].getUploadCallback=(e,t)=>{this.uploadUrl=e,this.uploadData=t}},methods:{handleUploadSuccess(e){this.imageUrl=e.url,this.$emit("input",this.imageUrl),this.$emit("change",{url:this.imageUrl})},async download(){const e=this.imageUrl,t=e.split("/").pop(),a=await fetch(e);if(a.ok){const e=await a.blob(),i=window.URL.createObjectURL(e),s=document.createElement("a");s.href=i,s.download=t,document.body.appendChild(s),s.click(),this.$message({type:"success",message:"下载完成"})}else this.$message({type:"error",message:"下载失败"})},deleteImg(){this.$confirm("确定要删除吗?","提示",{confirmButtonText:"确定",cancelButtonText:"取消",type:"warning"}).then((()=>{this.imageUrl="",this.$emit("input",""),this.$emit("change",{url:this.imageUrl})})).catch((()=>{}))}}},k=T,I=(0,p.A)(k,C,S,!1,null,"adbbf7fc",null),V=I.exports,E=function(){var e=this,t=e._self._c;return t("div",{staticStyle:{position:"relative",width:"360px",height:"80px"}},[t("el-upload",{staticStyle:{height:"100px"},attrs:{data:e.uploadData,action:e.uploadUrl,drag:"",accept:".mp3","show-file-list":!1,"on-success":e.handleUploadSuccess}},[t("i",{directives:[{name:"show",rawName:"v-show",value:!e.audioUrl,expression:"!audioUrl"}],staticClass:"el-icon-upload"}),t("div",{directives:[{name:"show",rawName:"v-show",value:!e.audioUrl,expression:"!audioUrl"}],staticClass:"el-upload__text"},[e._v("将MP3文件拖到此处,或"),t("em",[e._v("点击上传")])]),e.audioUrl?t("div",[t("audio",{attrs:{src:e.audioUrl,controls:""}})]):e._e()]),e.audioUrl?t("div",{staticClass:"buttons"},[t("el-button",{attrs:{type:"ghost",size:"mini",icon:"el-icon-delete"},on:{click:e.deleteAudio}})],1):e._e()],1)},O=[],A={name:"ImageUploader",props:{value:{type:String,default:""}},watch:{value:function(e,t){this.audioUrl=e}},data(){return{uploadUrl:"",uploadData:"",audioUrl:""}},created(){this.uploadUrl=window.courseware.uploadUrl(),this.uploadData=window.courseware.uploadData(),window["air"].getUploadCallback=(e,t)=>{this.uploadUrl=e,this.uploadData=t}},methods:{handleUploadSuccess(e){this.audioUrl=e.url,this.$emit("input",this.audioUrl),this.$emit("change",{url:this.audioUrl})},async download(){const e=this.audioUrl,t=e.split("/").pop(),a=await fetch(e);if(a.ok){const e=await a.blob(),i=window.URL.createObjectURL(e),s=document.createElement("a");s.href=i,s.download=t,document.body.appendChild(s),s.click(),this.$message({type:"success",message:"下载完成"})}else this.$message({type:"error",message:"下载失败"})},deleteAudio(){this.$confirm("确定要删除吗?","提示",{confirmButtonText:"确定",cancelButtonText:"取消",type:"warning"}).then((()=>{this.audioUrl="",this.$emit("input",""),this.$emit("change",{url:this.audioUrl})})).catch((()=>{}))}}},P=A,j=(0,p.A)(P,E,O,!1,null,"5c385f59",null),R=j.exports,L={name:"App",components:{TimeRangeSelector:m,VideoUploader:x,ImageUploader:V,AudioUploader:R},data(){return{itemData:{video_url:"",image_url:"",audio_url:""}}},async mounted(){this.getData()},methods:{async getData(){const e=await this.$getData();this.itemData=e||{url:"https://teach.cdn.ireadabc.com/b688da9ac31ccbcd83f75f3336728cfb.mp4",duration:63.621995,size:5803623,snapshotUrl:"https://teach.cdn.ireadabc.com/4b05b78396aae7e9fe146669ccd38052.jpg",muteVideoUrl:"https://teach.cdn.ireadabc.com/bec06eec1ce7488efd56130736d20900.mp4"}},save(){this.$message({message:"保存成功",type:"success",duration:1e3}),this.$setData(this.itemData)}}},M=L,B=(0,p.A)(M,n,r,!1,null,null,null),N=B.exports,z=a(9393);const F="getDPEData",H=function(e){const t={...e,urlParams:window.location.search,origin:"template"};window.parent.postMessage(t,"*")},q=async function(){return new Promise(((e,t)=>{let a=!1,i=setTimeout((()=>{a||(window.removeEventListener("message",s),t("timeout"))}),5e3);const s=t=>{if(t.data.action===F){a=!0,window.removeEventListener("message",s),clearTimeout(i);try{const a=JSON.parse(t.data.data);e(a.data)}catch(o){console.error("Error parsing DPE data",o),e(null)}}};H({action:F,data:window.location.search}),window.addEventListener("message",s)}))};i["default"].use(o()),i["default"].config.productionTip=!1,i["default"].prototype.$getData=()=>(console.log("===== getData ====="),new Promise(((e,t)=>{window.courseware.getData((t=>{console.log(t),e(t)}),"default_key")}))),i["default"].prototype.$getDPEData=q,i["default"].prototype.$setData=e=>{console.log("===== setData ====="),console.log(e),window.courseware.setData(e,null,"default_key")},i["default"].prototype.$echarts=z,new i["default"]({render:function(e){return e(N)}}).$mount("#app")},477:function(){}},t={};function a(i){var s=t[i];if(void 0!==s)return s.exports;var o=t[i]={id:i,loaded:!1,exports:{}};return e[i].call(o.exports,o,o.exports,a),o.loaded=!0,o.exports}a.m=e,function(){a.amdO={}}(),function(){var e=[];a.O=function(t,i,s,o){if(!i){var n=1/0;for(c=0;c<e.length;c++){i=e[c][0],s=e[c][1],o=e[c][2];for(var r=!0,l=0;l<i.length;l++)(!1&o||n>=o)&&Object.keys(a.O).every((function(e){return a.O[e](i[l])}))?i.splice(l--,1):(r=!1,o<n&&(n=o));if(r){e.splice(c--,1);var d=s();void 0!==d&&(t=d)}}return t}o=o||0;for(var c=e.length;c>0&&e[c-1][2]>o;c--)e[c]=e[c-1];e[c]=[i,s,o]}}(),function(){a.n=function(e){var t=e&&e.__esModule?function(){return e["default"]}:function(){return e};return a.d(t,{a:t}),t}}(),function(){a.d=function(e,t){for(var i in t)a.o(t,i)&&!a.o(e,i)&&Object.defineProperty(e,i,{enumerable:!0,get:t[i]})}}(),function(){a.g=function(){if("object"===typeof globalThis)return globalThis;try{return this||new Function("return this")()}catch(e){if("object"===typeof window)return window}}()}(),function(){a.o=function(e,t){return Object.prototype.hasOwnProperty.call(e,t)}}(),function(){a.r=function(e){"undefined"!==typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(e,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(e,"__esModule",{value:!0})}}(),function(){a.nmd=function(e){return e.paths=[],e.children||(e.children=[]),e}}(),function(){var e={524:0};a.O.j=function(t){return 0===e[t]};var t=function(t,i){var s,o,n=i[0],r=i[1],l=i[2],d=0;if(n.some((function(t){return 0!==e[t]}))){for(s in r)a.o(r,s)&&(a.m[s]=r[s]);if(l)var c=l(a)}for(t&&t(i);d<n.length;d++)o=n[d],a.o(e,o)&&e[o]&&e[o][0](),e[o]=0;return a.O(c)},i=self["webpackChunkform_vue"]=self["webpackChunkform_vue"]||[];i.forEach(t.bind(null,0)),i.push=t.bind(null,i.push.bind(i))}();var i=a.O(void 0,[504],(function(){return a(411)}));i=a.O(i)})();
//# sourceMappingURL=app.0ed5b108.js.map
\ No newline at end of file
{"version":3,"file":"js/app.0ed5b108.js","mappings":"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","sources":["webpack://form_vue/./src/App.vue?a472","webpack://form_vue/./src/components/TimeRangeSelector.vue?7787","webpack://form_vue/src/components/TimeRangeSelector.vue","webpack://form_vue/./src/components/TimeRangeSelector.vue?a7a2","webpack://form_vue/./src/components/TimeRangeSelector.vue","webpack://form_vue/./src/components/VideoUploader.vue?d63c","webpack://form_vue/src/components/VideoUploader.vue","webpack://form_vue/./src/components/VideoUploader.vue?3203","webpack://form_vue/./src/components/VideoUploader.vue","webpack://form_vue/./src/components/ImageUploader.vue?5dbb","webpack://form_vue/src/components/ImageUploader.vue","webpack://form_vue/./src/components/ImageUploader.vue?4ab3","webpack://form_vue/./src/components/ImageUploader.vue","webpack://form_vue/./src/components/AudioUploader.vue?f0ff","webpack://form_vue/src/components/AudioUploader.vue","webpack://form_vue/./src/components/AudioUploader.vue?3abd","webpack://form_vue/./src/components/AudioUploader.vue","webpack://form_vue/src/App.vue","webpack://form_vue/./src/App.vue?6a4a","webpack://form_vue/./src/App.vue","webpack://form_vue/./src/api/dep.js","webpack://form_vue/./src/main.js","webpack://form_vue/webpack/bootstrap","webpack://form_vue/webpack/runtime/amd options","webpack://form_vue/webpack/runtime/chunk loaded","webpack://form_vue/webpack/runtime/compat get default export","webpack://form_vue/webpack/runtime/define property getters","webpack://form_vue/webpack/runtime/global","webpack://form_vue/webpack/runtime/hasOwnProperty shorthand","webpack://form_vue/webpack/runtime/make namespace object","webpack://form_vue/webpack/runtime/node module decorator","webpack://form_vue/webpack/runtime/jsonp chunk loading","webpack://form_vue/webpack/startup"],"sourcesContent":["var render = function render(){var _vm=this,_c=_vm._self._c;return _c('div',{staticStyle:{\"width\":\"450px\"},attrs:{\"id\":\"app\"}},[_c('el-form',{attrs:{\"label-width\":\"120px\"}},[_c('el-form-item',{attrs:{\"label\":\"视频\"}},[_c('VideoUploader',{on:{\"change\":_vm.save},model:{value:(_vm.itemData.url),callback:function ($$v) {_vm.$set(_vm.itemData, \"url\", $$v)},expression:\"itemData.url\"}})],1),_c('el-form-item',{attrs:{\"label\":\"静音视频(可选)\"}},[_c('VideoUploader',{on:{\"change\":_vm.save},model:{value:(_vm.itemData.muteVideoUrl),callback:function ($$v) {_vm.$set(_vm.itemData, \"muteVideoUrl\", $$v)},expression:\"itemData.muteVideoUrl\"}})],1),_c('el-form-item',{attrs:{\"label\":\"截图\"}},[_c('ImageUploader',{on:{\"change\":_vm.save},model:{value:(_vm.itemData.snapshotUrl),callback:function ($$v) {_vm.$set(_vm.itemData, \"snapshotUrl\", $$v)},expression:\"itemData.snapshotUrl\"}})],1),_c('el-form-item',{attrs:{\"label\":\"时长\"}},[_c('el-input',{on:{\"change\":_vm.save},model:{value:(_vm.itemData.name),callback:function ($$v) {_vm.$set(_vm.itemData, \"name\", $$v)},expression:\"itemData.name\"}})],1),_c('el-form-item',{attrs:{\"label\":\"大小\"}},[_c('el-input',{on:{\"change\":_vm.save},model:{value:(_vm.itemData.size),callback:function ($$v) {_vm.$set(_vm.itemData, \"size\", $$v)},expression:\"itemData.size\"}})],1)],1)],1)\n}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","var render = function render(){var _vm=this,_c=_vm._self._c;return _c('div',{staticClass:\"com-trs\"},[_c('div',{ref:\"refEcharts\",staticClass:\"chart-slider\"})])\n}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","<template>\n <div class=\"com-trs\">\n <div ref=\"refEcharts\" class=\"chart-slider\"></div>\n </div>\n</template>\n\n<script>\nexport default {\n name: 'TimeRangeSelector',\n props: {\n value: {\n type: Object,\n default: () => {\n return {\n start: 0,\n end: 100\n }\n }\n }\n },\n watch: {\n value: {\n handler(val) {\n this.parentValueChange = true;\n this.setTimeRange(val.start * 100, val.end * 100);\n },\n deep: true\n }\n },\n data() {\n return {\n insECharts: null,\n parentValueChange: false\n }\n },\n mounted() {\n this.initEcharts();\n },\n methods: {\n initEcharts() {\n if(!this.insECharts) {\n this.insECharts = this.$echarts.init(this.$refs.refEcharts);\n }\n\n const option = {\n grid: {\n left: 10,\n right: 10,\n top: 10,\n bottom: 10\n },\n tooltip: {},\n\n dataZoom: [\n {\n type: 'slider'\n },\n ],\n xAxis: { show: false } ,\n yAxis: { show: false },\n\n };\n\n this.insECharts.on('dataZoom', (evt) => {\n if(this.parentValueChange) {\n this.parentValueChange = false;\n return;\n }\n this.$emit('change', {\n start: evt.start / 100,\n end: evt.end / 100\n })\n this.$emit('input', {\n start: evt.start / 100,\n end: evt.end / 100\n })\n })\n\n this.insECharts.setOption(option);\n },\n setTimeRange(start, end) {\n this.insECharts.dispatchAction({\n type: 'dataZoom',\n // 可选,dataZoom 组件的 index,多个 dataZoom 组件时有用,默认为 0\n dataZoomIndex: 0,\n // 开始位置的百分比,0 - 100\n start: start,\n // 结束位置的百分比,0 - 100\n end: end,\n // // 开始位置的数值\n // startValue: number,\n // // 结束位置的数值\n // endValue: number\n });\n\n }\n },\n}\n</script>\n\n<!-- Add \"scoped\" attribute to limit CSS to this component only -->\n<style scoped>\n.com-trs {\n width: 100%;\n height: 50px;\n}\n\n.chart-slider {\n width: 100%;\n height: 100%;\n}\n</style>","import mod from \"-!../../node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./TimeRangeSelector.vue?vue&type=script&lang=js\"; export default mod; export * from \"-!../../node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./TimeRangeSelector.vue?vue&type=script&lang=js\"","import { render, staticRenderFns } from \"./TimeRangeSelector.vue?vue&type=template&id=291eb56d&scoped=true\"\nimport script from \"./TimeRangeSelector.vue?vue&type=script&lang=js\"\nexport * from \"./TimeRangeSelector.vue?vue&type=script&lang=js\"\nimport style0 from \"./TimeRangeSelector.vue?vue&type=style&index=0&id=291eb56d&prod&scoped=true&lang=css\"\n\n\n/* normalize component */\nimport normalizer from \"!../../node_modules/@vue/vue-loader-v15/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n \"291eb56d\",\n null\n \n)\n\nexport default component.exports","var render = function render(){var _vm=this,_c=_vm._self._c;return _c('div',{staticStyle:{\"position\":\"relative\",\"width\":\"360px\",\"height\":\"220px\"}},[_c('el-upload',{attrs:{\"data\":_vm.uploadData,\"disabled\":_vm.uploading || _vm.transcoding,\"action\":_vm.uploadUrl,\"drag\":\"\",\"before-upload\":_vm.customReq,\"accept\":\".mp4\",\"show-file-list\":false}},[_c('i',{directives:[{name:\"show\",rawName:\"v-show\",value:(!_vm.transcoding && !_vm.videoDone && !_vm.uploading),expression:\"!transcoding && !videoDone && !uploading\"}],staticClass:\"el-icon-upload\"}),_c('div',{directives:[{name:\"show\",rawName:\"v-show\",value:(!_vm.transcoding && !_vm.videoDone && !_vm.uploading),expression:\"!transcoding && !videoDone && !uploading\"}],staticClass:\"el-upload__text\"},[_vm._v(\"将MP4文件拖到此处,或\"),_c('em',[_vm._v(\"点击上传\")])]),(!_vm.transcoding && !_vm.videoDone && !_vm.uploading)?_c('div',{staticClass:\"el-upload__tip\",staticStyle:{\"text-align\":\"center\"},attrs:{\"slot\":\"tip\"},slot:\"tip\"},[_vm._v(\"只能上传mp4文件\")]):_vm._e(),(_vm.transcoding)?_c('div',{staticClass:\"el-upload__tip\",staticStyle:{\"text-align\":\"center\"},attrs:{\"slot\":\"tip\"},slot:\"tip\"},[_vm._v(\"视频后台转码中,请稍后...\")]):_vm._e(),_c('div',{directives:[{name:\"show\",rawName:\"v-show\",value:(!_vm.transcoding && !_vm.videoDone && _vm.uploading),expression:\"!transcoding && !videoDone && uploading\"}],staticStyle:{\"position\":\"absolute\",\"left\":\"50%\",\"top\":\"50%\",\"transform\":\"translate(-50%, -50%)\"}},[_c('el-progress',{attrs:{\"type\":\"circle\",\"percentage\":_vm.uploadPercentage,\"status\":_vm.uploadStatus}}),_c('div',[_vm._v(_vm._s(_vm.uploadSpeed))])],1),_c('div',{directives:[{name:\"show\",rawName:\"v-show\",value:(!_vm.transcoding && _vm.videoDone),expression:\"!transcoding && videoDone\"}]},[_c('video',{ref:\"refVideo\",attrs:{\"width\":\"360px\",\"height\":\"180px\",\"controls\":\"\",\"crossOrigin\":\"anonymous\"}},[_c('source',{attrs:{\"src\":`${_vm.videoUrl}`,\"type\":\"video/mp4\"}}),_vm._v(\" Your browser does not support the video tag. \")])]),(_vm.transcoding)?_c('div',[_c('div',{staticClass:\"mesh-loader\"},[_c('div',{staticClass:\"set-one\"},[_c('div',{staticClass:\"circle\"}),_c('div',{staticClass:\"circle\"})]),_c('div',{staticClass:\"set-two\"},[_c('div',{staticClass:\"circle\"}),_c('div',{staticClass:\"circle\"})])])]):_vm._e()]),(_vm.videoDone)?_c('div',{staticClass:\"buttons\"},[_c('el-button',{attrs:{\"type\":\"primary\",\"size\":\"mini\",\"icon\":\"el-icon-camera\"},on:{\"click\":_vm.captureVideo}}),_c('el-button',{attrs:{\"type\":\"primary\",\"size\":\"mini\",\"icon\":\"el-icon-download\"},on:{\"click\":_vm.download}}),_c('el-button',{attrs:{\"type\":\"danger\",\"size\":\"mini\",\"icon\":\"el-icon-delete\"},on:{\"click\":_vm.deleteVideo}})],1):_vm._e()],1)\n}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","<!-- 视频上传组件 -->\n<template>\n <div style=\"position: relative; width: 360px; height: 220px;\">\n <el-upload :data=\"uploadData\" :disabled=\"uploading || transcoding\" :action=\"uploadUrl\" drag :before-upload=\"customReq\" accept=\".mp4\" :show-file-list=\"false\">\n <!-- 上传提示 -->\n <i v-show=\"!transcoding && !videoDone && !uploading\" class=\"el-icon-upload\"></i>\n <div v-show=\"!transcoding && !videoDone && !uploading\" class=\"el-upload__text\">将MP4文件拖到此处,或<em>点击上传</em></div>\n <div v-if=\"!transcoding && !videoDone && !uploading\" style=\"text-align: center;\" class=\"el-upload__tip\" slot=\"tip\">只能上传mp4文件</div>\n <div v-if=\"transcoding\" style=\"text-align: center;\" class=\"el-upload__tip\" slot=\"tip\">视频后台转码中,请稍后...</div>\n\n <!-- 进度条 -->\n <div v-show=\"!transcoding && !videoDone && uploading\"\n style=\"position: absolute; left: 50%; top: 50%; transform: translate(-50%, -50%);\">\n <el-progress type=\"circle\" :percentage=\"uploadPercentage\" :status=\"uploadStatus\"></el-progress>\n <div>{{ uploadSpeed }}</div>\n </div>\n\n <!-- 预览视频 -->\n <div v-show=\"!transcoding && videoDone\">\n <video ref=\"refVideo\" width=\"360px\" height=\"180px\" controls crossOrigin=\"anonymous\">\n <source :src=\"`${videoUrl}`\" type=\"video/mp4\">\n Your browser does not support the video tag.\n </video>\n </div>\n\n <!-- 转换动画 -->\n <div v-if=\"transcoding\">\n <div class=\"mesh-loader\">\n <div class=\"set-one\">\n <div class=\"circle\"></div>\n <div class=\"circle\"></div>\n </div>\n <div class=\"set-two\">\n <div class=\"circle\"></div>\n <div class=\"circle\"></div>\n </div>\n </div>\n </div>\n </el-upload>\n\n <!-- 截图 下载 删除按钮 -->\n <div v-if=\"videoDone\" class=\"buttons\">\n <el-button type=\"primary\" size=\"mini\" icon=\"el-icon-camera\" @click=\"captureVideo\"></el-button>\n <el-button type=\"primary\" size=\"mini\" icon=\"el-icon-download\" @click=\"download\"></el-button>\n <el-button type=\"danger\" size=\"mini\" icon=\"el-icon-delete\" @click=\"deleteVideo\"></el-button>\n </div>\n </div>\n</template>\n\n<script>\nimport cryptoJs from 'crypto-js';\nimport axios from 'axios';\nimport SparkMD5 from 'spark-md5';\n\nexport default {\n name: 'VideoUploader',\n props: {\n value: {\n type: String,\n default: ''\n },\n },\n watch: {\n value: function (val, oldVal) {\n // 监测父组件的更新\n if(val) {\n // 查看是否资源已经存在\n this.httpHeadCall(val, async (exist) => {\n if (exist) {\n // 存在,直接标记视频完成\n this.videoDone = true\n } else {\n // 如果不存在则默认是正在后台转码状态\n this.transcoding = true;\n await this.checkResourceAvaliable();\n this.$message({\n type: 'success',\n message: '转换完成'\n });\n this.videoDone = true;\n this.transcoding = false;\n\n // 刷新视频源\n this.$refs.refVideo.load()\n }\n })\n }\n\n this.videoUrl = val\n },\n videoUrl: function() {\n this.$refs.refVideo.load()\n }\n },\n data() {\n return {\n // 上传地址\n uploadUrl: \"\",\n // 上传附带的DATA\n uploadData: \"\",\n\n // 上传中标记位\n uploading: false,\n // 转码中\n transcoding: false,\n // 视频是否上传完成\n videoDone: false,\n\n // 上传进度\n uploadPercentage: 0,\n // 上传进度条状态 null success\n uploadStatus: null,\n // 上传速度\n uploadSpeed: \"0KB/s\",\n // 上传开始时间\n startTime: null,\n // 上传结束时间\n endTime: null,\n // 已经上传的文件大小\n loaded: 0,\n // 视频地址\n videoUrl: \"\",\n\n // 定时器ID\n setIntervalIds: [],\n setTimeoutIds: [],\n\n }\n },\n\n created() {\n // 获取上传地址\n this.uploadUrl = window.courseware.uploadVideoUrl();\n this.uploadData = window.courseware.uploadData();\n window['air'].getUploadVideoCallback = (url, data) => {\n this.uploadUrl = url;\n this.uploadData = data;\n };\n },\n\n mounted() {\n // 添加点击事件监听,防止点击视频画面自动播放。(点击视频画面可以重新上传视频)\n this.$refs.refVideo.addEventListener('click', () => {\n const stop = () => {\n this.$refs.refVideo.pause();\n this.$refs.refVideo.removeEventListener(\"play\", stop)\n }\n this.$refs.refVideo.addEventListener(\"play\", stop)\n });\n },\n\n methods: {\n // 解析文件名\n parseFileName(fileName) {\n const lastDotIndex = fileName.lastIndexOf('.');\n const name = fileName.substring(0, lastDotIndex);\n const ext = fileName.substring(lastDotIndex);\n return { name, ext };\n },\n\n // 重置上传变量\n resetUploadVars() {\n this.uploadPercentage = 0;\n this.uploadStatus = null;\n this.uploadSpeed = \"0KB/s\";\n this.startTime = null;\n this.endTime = null;\n this.loaded = 0;\n },\n\n // 发送HEAD请求 测试资源是否存在\n httpHeadCall(requsetUrl, callback) {\n let xhr = new XMLHttpRequest();\n try {\n xhr.onreadystatechange = () => {\n try {\n if (xhr.readyState == 4) {\n if ((xhr.status >= 200 && xhr.status < 400)) {\n callback(true);\n } else {\n callback(false);\n }\n }\n } catch (e) {\n callback(false);\n }\n };\n xhr.open(\"HEAD\", requsetUrl, true);\n xhr.send();\n xhr.timeout = 15000;\n xhr.onerror = (e) => {\n callback(false);\n };\n xhr.ontimeout = (e) => {\n callback(false);\n };\n } catch (e) {\n callback(false);\n }\n },\n\n // 上传文件\n async customReq(item) {\n const { name, ext } = this.parseFileName(item.name)\n if (ext !== '.mp4') {\n this.$message({\n type: 'error',\n message: '只能上传mp4文件'\n });\n return false\n }\n\n // 获取文件MD5\n const fileName = await this.getFileMD5(item);\n\n const protocolStr = document.location.protocol;\n const baseCDN = `${protocolStr}//teach.cdn.ireadabc.com`;\n const baseAPI = `${protocolStr}//openapi.iteachabc.com`;\n\n // 如果当前视频和新上传的视频是同一个,则不变。\n if(this.videoUrl == `${baseCDN}/${fileName}_h.mp4`) {\n this.$refs.refVideo.pause();\n this.$refs.refVideo.currentTime = 0;\n this.$message({\n type: 'success',\n message: '极速上传完成'\n })\n return\n }\n\n // 重置上传变量,并设置状态为上传中\n this.resetUploadVars();\n this.videoUrl = \"\";\n this.uploading = true;\n this.transcoding = false;\n this.videoDone = false;\n\n // 测试文件是否在服务上存在\n this.httpHeadCall(`${baseCDN}/${fileName}_h.mp4`, (exit) => {\n if(exit) {\n // 文件存在,极速上传完成。并标记为完成状态。\n this.uploadStatus = \"success\";\n this.videoUrl = `${baseCDN}/${fileName}_h.mp4`;\n this.$emit(\"input\", this.videoUrl);\n this.$emit('change', { url: this.videoUrl, file: item });\n this.$emit('success', { url: this.videoUrl, file: item });\n this.uploading = false;\n\n this.$message({\n type: 'success',\n message: '极速上传完成'\n })\n return\n }\n\n // 开始上传到OSS\n axios.get(`${baseAPI}/oss/timestamp`, {}).then(tmps => {\n const sign = cryptoJs.MD5(tmps + \"iplayABC2019\").toString();\n\n axios.get(`${baseAPI}/oss/signature`, { sign, tmps }).then((res) => {\n const serve = res.data.data;\n const formData = new FormData();\n formData.append('key', fileName + `.mp4`);\n formData.append('bucket', `iplayabc-worker-queue-videolmh`);\n formData.append('OSSAccessKeyId', serve.OSSAccessKeyId);\n formData.append('policy', serve.policy);\n formData.append('Signature', serve.signature);\n formData.append('success_action_status', '200');\n formData.append('file', item);\n\n item.action = `${protocolStr}//iplayabc-worker-queue-videolmh.oss-cn-beijing.aliyuncs.com`;\n\n // 标记开始时间\n this.startTime = new Date().getTime();\n this.uploadStatus = null\n axios({\n method: 'post',\n url: item.action,\n headers: { 'Access-Control-Allow-Origin': '*' },\n onUploadProgress: (progressEvent) => {\n // 更新上传进度\n this.uploadPercentage = Math.ceil(progressEvent.progress * 100);\n // 计算上传速率\n this.endTime = new Date().getTime();\n const timeDiff = this.endTime - this.startTime;\n this.startTime = new Date().getTime();\n if (timeDiff === 0) return;\n\n const sent = progressEvent.loaded - this.loaded;\n this.loaded = progressEvent.loaded;\n const speed = (sent / timeDiff) * 1000; // Convert to KB/s\n const spNum = Math.round(speed / 1024);\n if (spNum > 1024) {\n this.uploadSpeed = `${(spNum / 1024).toFixed(2)}MB/s`;\n } else {\n this.uploadSpeed = `${spNum}KB/s`;\n }\n\n this.$emit('onProgress', progressEvent);\n },\n data: formData\n }).then(async event => {\n // 上传完成,延迟隐藏状态\n const tid = setTimeout(() => {\n this.resetUploadVars();\n this.uploading = false;\n this.transcoding = true;\n this.videoDone = false;\n\n const idIndex = this.setTimeoutIds.indexOf(tid);\n if (idIndex > -1) {\n this.setTimeoutIds.splice(idIndex, 1);\n }\n }, 1000);\n\n // 编辑为成功状态\n this.uploadStatus = \"success\";\n this.videoUrl = `${baseCDN}/${fileName}_h.mp4`;\n\n this.$emit(\"input\", this.videoUrl);\n this.$emit('change', { url: this.videoUrl, file: item });\n this.$emit('success', { url: this.videoUrl, file: item });\n\n this.setTimeoutIds.push(tid);\n this.uploading = false;\n\n this.$message({\n type: 'info',\n message: '上传成功,开始转码...'\n });\n }).catch(err => {\n // 报错\n const tid = setTimeout(() => {\n this.uploading = false;\n this.transcoding = false;\n this.videoDone = false;\n const idIndex = this.setTimeoutIds.indexOf(tid);\n if (idIndex > -1) {\n this.setTimeoutIds.splice(idIndex, 1);\n }\n }, 1000);\n this.uploadStatus = \"error\";\n this.$emit('error', err);\n this.setTimeoutIds.push(tid);\n })\n });\n });\n })\n \n\n return false\n },\n\n // 检查资源是否可用\n checkResourceAvaliable() {\n return new Promise(resovle => {\n let intervalId = null;\n intervalId = setInterval(() => {\n this.httpHeadCall(this.videoUrl, (isSuccess) => {\n if (isSuccess) {\n if (intervalId) {\n const index = this.setIntervalIds.indexOf(intervalId)\n clearInterval(intervalId)\n this.setIntervalIds.splice(index, 1)\n }\n resovle(true)\n }\n });\n }, 800)\n this.setIntervalIds.push(intervalId)\n })\n },\n\n async download() {\n const url = this.videoUrl\n const fileName = url.split('/').pop()\n const response = await fetch(url) //发送GET请求\n if (response.ok) {\n const blob = await response.blob() //获取Blob对象\n const url = window.URL.createObjectURL(blob) //创建Blob对象的URL\n const link = document.createElement('a') //创建一个新的<a>元素\n link.href = url //设置<a>元素的href属性为Blob对象的URL\n link.download = fileName //设置下载文件的文件名\n document.body.appendChild(link) //将<a>元素添加到文档中\n link.click() //模拟点击<a>元素以触发文件下载\n this.$message({\n type: 'success',\n message: '下载完成'\n });\n } else {\n //处理API响应失败的情况,例如显示错误消息\n this.$message({\n type: 'error',\n message: '下载失败'\n });\n }\n },\n\n captureVideo() {\n const fullFileName = this.videoUrl.split('/').pop();\n const { name, ext } = this.parseFileName(fullFileName)\n const video = this.$refs.refVideo;\n\n const cvs = document.createElement('canvas');\n const ctx = cvs.getContext(\"2d\");\n cvs.width = video.videoWidth;\n cvs.height = video.videoHeight;\n ctx.drawImage(video, 0, 0, cvs.width, cvs.height);\n const screenshotDataUrl = cvs.toDataURL('image/png');\n\n const link = document.createElement('a') //创建一个新的<a>元素\n link.href = screenshotDataUrl //设置<a>元素的href属性为Blob对象的URL\n link.download = name + \"_\" + Math.floor(video.currentTime * 1000) + \".png\"//设置下载文件的文件名\n document.body.appendChild(link) //将<a>元素添加到文档中\n link.click() //模拟点击<a>元素以触发文件下载\n this.$message({\n type: 'success',\n message: '截图成功'\n });\n },\n\n deleteVideo() {\n this.$confirm('确定要删除吗?', '提示', {\n confirmButtonText: '确定',\n cancelButtonText: '取消',\n type: 'warning'\n }).then(() => {\n this.videoUrl = \"\";\n this.videoDone = false;\n this.$emit(\"input\", \"\");\n this.$emit('change', { url: this.videoUrl, file: null });\n }).catch(() => {\n this.$message({\n type: 'info',\n message: '已取消删除'\n });\n });\n },\n\n // 计算文件MD5\n getFileMD5(file) {\n return new Promise(resovle => {\n let fileReader = new FileReader();\n let Spark = new SparkMD5.ArrayBuffer();\n fileReader.readAsArrayBuffer(file);\n fileReader.onload = function (e) {\n Spark.append(e.target.result);\n let md5 = Spark.end();\n resovle(md5);\n }\n })\n },\n },\n\n // 组件销毁时清除定时器\n beforeDestroy() {\n this.setTimeoutIds.forEach(tid => {\n clearTimeout(tid);\n });\n this.setIntervalIds.forEach(iid => {\n clearInterval(iid)\n })\n }\n}\n</script>\n\n<style scoped>\n.buttons {\n text-align: center\n}\n\n.buttons .el-button {\n padding: 4px 12px;\n font-size: 18px;\n}\n\n/* MESH LOADER */\n\n.mesh-loader {\n overflow: hidden;\n height: inherit;\n width: inherit;\n}\n\n.mesh-loader .circle {\n width: 10px;\n height: 10px;\n position: absolute;\n background: #f44336;\n border-radius: 50%;\n margin: -5px;\n -webkit-animation: mesh 3s ease-in-out infinite -1.5s;\n animation: mesh 3s ease-in-out infinite -1.5s;\n}\n\n.mesh-loader>div .circle:last-child {\n -webkit-animation-delay: 0s;\n animation-delay: 0s;\n}\n\n.mesh-loader>div {\n position: absolute;\n top: 50%;\n left: 50%;\n}\n\n.mesh-loader>div:last-child {\n -webkit-transform: rotate(90deg);\n -ms-transform: rotate(90deg);\n transform: rotate(90deg);\n}\n\n@keyframes mesh {\n 0% {\n -webkit-transform-origin: 50% -100%;\n transform-origin: 50% -100%;\n -webkit-transform: rotate(0);\n transform: rotate(0);\n }\n\n 50% {\n -webkit-transform-origin: 50% -100%;\n transform-origin: 50% -100%;\n -webkit-transform: rotate(360deg);\n transform: rotate(360deg);\n }\n\n 50.1% {\n -webkit-transform-origin: 50% 200%;\n transform-origin: 50% 200%;\n -webkit-transform: rotate(0deg);\n transform: rotate(0deg);\n }\n\n 100% {\n -webkit-transform-origin: 50% 200%;\n transform-origin: 50% 200%;\n -webkit-transform: rotate(360deg);\n transform: rotate(360deg);\n }\n}\n</style>","import mod from \"-!../../node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./VideoUploader.vue?vue&type=script&lang=js\"; export default mod; export * from \"-!../../node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./VideoUploader.vue?vue&type=script&lang=js\"","import { render, staticRenderFns } from \"./VideoUploader.vue?vue&type=template&id=effb3c56&scoped=true\"\nimport script from \"./VideoUploader.vue?vue&type=script&lang=js\"\nexport * from \"./VideoUploader.vue?vue&type=script&lang=js\"\nimport style0 from \"./VideoUploader.vue?vue&type=style&index=0&id=effb3c56&prod&scoped=true&lang=css\"\n\n\n/* normalize component */\nimport normalizer from \"!../../node_modules/@vue/vue-loader-v15/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n \"effb3c56\",\n null\n \n)\n\nexport default component.exports","var render = function render(){var _vm=this,_c=_vm._self._c;return _c('div',{staticStyle:{\"position\":\"relative\",\"width\":\"360px\",\"height\":\"180px\"}},[_c('el-upload',{attrs:{\"data\":_vm.uploadData,\"action\":_vm.uploadUrl,\"drag\":\"\",\"accept\":\".png,.jpg,.jpeg,.bmp,.gif\",\"show-file-list\":false,\"on-success\":_vm.handleUploadSuccess}},[_c('i',{directives:[{name:\"show\",rawName:\"v-show\",value:(!_vm.imageUrl),expression:\"!imageUrl\"}],staticClass:\"el-icon-upload\"}),_c('div',{directives:[{name:\"show\",rawName:\"v-show\",value:(!_vm.imageUrl),expression:\"!imageUrl\"}],staticClass:\"el-upload__text\"},[_vm._v(\"将文件拖到此处,或\"),_c('em',[_vm._v(\"点击上传\")]),_c('br'),_c('span',{staticStyle:{\"font-size\":\"14px\"}},[_vm._v(\"只能上传 \"),_c('strong',[_vm._v(\"jpg、png、jpeg、gif、bmp\")]),_vm._v(\" 文件\")])]),(_vm.imageUrl)?_c('div',{staticStyle:{\"width\":\"100%\",\"height\":\"100%\"}},[_c('el-image',{staticStyle:{\"width\":\"100%\",\"height\":\"100%\"},attrs:{\"src\":_vm.imageUrl,\"fit\":\"contain\"}})],1):_vm._e()]),(_vm.imageUrl)?_c('el-button-group',{staticClass:\"buttons\"},[_c('el-button',{attrs:{\"type\":\"ghost\",\"size\":\"mini\",\"icon\":\"el-icon-download\"},on:{\"click\":_vm.download}}),_c('el-button',{attrs:{\"type\":\"ghost\",\"size\":\"mini\",\"icon\":\"el-icon-delete\"},on:{\"click\":_vm.deleteImg}})],1):_vm._e()],1)\n}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","<!-- 视频上传组件 -->\n<template>\n <div style=\"position: relative; width: 360px; height: 180px;\">\n <el-upload :data=\"uploadData\" :action=\"uploadUrl\" drag accept=\".png,.jpg,.jpeg,.bmp,.gif\" :show-file-list=\"false\" :on-success=\"handleUploadSuccess\">\n <!-- 上传提示 -->\n <i v-show=\"!imageUrl\" class=\"el-icon-upload\"></i>\n <div v-show=\"!imageUrl\" class=\"el-upload__text\">将文件拖到此处,或<em>点击上传</em><br/><span style=\"font-size: 14px;\">只能上传 <strong>jpg、png、jpeg、gif、bmp</strong> 文件</span></div>\n\n <!-- 预览图片 -->\n <div v-if=\"imageUrl\" style=\"width: 100%; height: 100%;\">\n <el-image style=\"width: 100%; height: 100%\" :src=\"imageUrl\" fit=\"contain\"></el-image>\n </div>\n </el-upload>\n\n <!-- 下载 删除按钮 -->\n <el-button-group v-if=\"imageUrl\" class=\"buttons\">\n <el-button type=\"ghost\" size=\"mini\" icon=\"el-icon-download\" @click=\"download\"></el-button>\n <el-button type=\"ghost\" size=\"mini\" icon=\"el-icon-delete\" @click=\"deleteImg\"></el-button>\n </el-button-group>\n \n </div>\n</template>\n\n<script>\nimport SparkMD5 from 'spark-md5';\n\nexport default {\n name: 'ImageUploader',\n props: {\n value: {\n type: String,\n default: ''\n },\n },\n watch: {\n value: function (val, oldVal) {\n this.imageUrl = val\n }\n },\n data() {\n return {\n // 上传地址\n uploadUrl: \"\",\n // 上传附带的DATA\n uploadData: \"\",\n // 图片地址\n imageUrl: \"\",\n }\n },\n\n created() {\n // 获取上传地址\n this.uploadUrl = window.courseware.uploadUrl();\n this.uploadData = window.courseware.uploadData();\n window['air'].getUploadCallback = (url, data) => {\n this.uploadUrl = url;\n this.uploadData = data;\n };\n },\n\n methods: {\n handleUploadSuccess(e) {\n this.imageUrl = e.url;\n this.$emit(\"input\", this.imageUrl);\n this.$emit('change', { url: this.imageUrl});\n },\n\n async download() {\n const url = this.imageUrl\n const fileName = url.split('/').pop()\n const response = await fetch(url) //发送GET请求\n if (response.ok) {\n const blob = await response.blob() //获取Blob对象\n const url = window.URL.createObjectURL(blob) //创建Blob对象的URL\n const link = document.createElement('a') //创建一个新的<a>元素\n link.href = url //设置<a>元素的href属性为Blob对象的URL\n link.download = fileName //设置下载文件的文件名\n document.body.appendChild(link) //将<a>元素添加到文档中\n link.click() //模拟点击<a>元素以触发文件下载\n this.$message({\n type: 'success',\n message: '下载完成'\n });\n } else {\n //处理API响应失败的情况,例如显示错误消息\n this.$message({\n type: 'error',\n message: '下载失败'\n });\n }\n },\n\n\n deleteImg() {\n this.$confirm('确定要删除吗?', '提示', {\n confirmButtonText: '确定',\n cancelButtonText: '取消',\n type: 'warning'\n }).then(() => {\n this.imageUrl = \"\";\n this.$emit(\"input\", \"\");\n this.$emit('change', { url: this.imageUrl});\n }).catch(() => {\n // this.$message({\n // type: 'info',\n // message: '已取消删除'\n // });\n });\n },\n\n },\n\n}\n</script>\n\n<style scoped>\n.buttons {\n text-align: center;\n position: absolute;\n right: 0;\n top: 0;\n}\n\n.buttons .el-button {\n padding: 4px 12px;\n font-size: 18px;\n margin: 0;\n border-radius: initial;\n}\n</style>","import mod from \"-!../../node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./ImageUploader.vue?vue&type=script&lang=js\"; export default mod; export * from \"-!../../node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./ImageUploader.vue?vue&type=script&lang=js\"","import { render, staticRenderFns } from \"./ImageUploader.vue?vue&type=template&id=adbbf7fc&scoped=true\"\nimport script from \"./ImageUploader.vue?vue&type=script&lang=js\"\nexport * from \"./ImageUploader.vue?vue&type=script&lang=js\"\nimport style0 from \"./ImageUploader.vue?vue&type=style&index=0&id=adbbf7fc&prod&scoped=true&lang=css\"\n\n\n/* normalize component */\nimport normalizer from \"!../../node_modules/@vue/vue-loader-v15/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n \"adbbf7fc\",\n null\n \n)\n\nexport default component.exports","var render = function render(){var _vm=this,_c=_vm._self._c;return _c('div',{staticStyle:{\"position\":\"relative\",\"width\":\"360px\",\"height\":\"80px\"}},[_c('el-upload',{staticStyle:{\"height\":\"100px\"},attrs:{\"data\":_vm.uploadData,\"action\":_vm.uploadUrl,\"drag\":\"\",\"accept\":\".mp3\",\"show-file-list\":false,\"on-success\":_vm.handleUploadSuccess}},[_c('i',{directives:[{name:\"show\",rawName:\"v-show\",value:(!_vm.audioUrl),expression:\"!audioUrl\"}],staticClass:\"el-icon-upload\"}),_c('div',{directives:[{name:\"show\",rawName:\"v-show\",value:(!_vm.audioUrl),expression:\"!audioUrl\"}],staticClass:\"el-upload__text\"},[_vm._v(\"将MP3文件拖到此处,或\"),_c('em',[_vm._v(\"点击上传\")])]),(_vm.audioUrl)?_c('div',[_c('audio',{attrs:{\"src\":_vm.audioUrl,\"controls\":\"\"}})]):_vm._e()]),(_vm.audioUrl)?_c('div',{staticClass:\"buttons\"},[_c('el-button',{attrs:{\"type\":\"ghost\",\"size\":\"mini\",\"icon\":\"el-icon-delete\"},on:{\"click\":_vm.deleteAudio}})],1):_vm._e()],1)\n}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","<!-- 视频上传组件 -->\n<template>\n <div style=\"position: relative; width: 360px; height: 80px;\">\n <el-upload style=\"height: 100px;\" :data=\"uploadData\" :action=\"uploadUrl\" drag accept=\".mp3\" :show-file-list=\"false\" :on-success=\"handleUploadSuccess\">\n <!-- 上传提示 -->\n <i v-show=\"!audioUrl\" class=\"el-icon-upload\"></i>\n <div v-show=\"!audioUrl\" class=\"el-upload__text\">将MP3文件拖到此处,或<em>点击上传</em></div>\n\n <!-- 音频预览 -->\n <div v-if=\"audioUrl\" >\n <audio :src=\"audioUrl\" controls></audio>\n </div>\n </el-upload>\n\n <!-- 下载 删除按钮 -->\n <div v-if=\"audioUrl\" class=\"buttons\">\n <!-- <el-button type=\"ghost\" size=\"mini\" icon=\"el-icon-download\" @click=\"download\"></el-button> -->\n <el-button type=\"ghost\" size=\"mini\" icon=\"el-icon-delete\" @click=\"deleteAudio\"></el-button>\n </div>\n </div>\n</template>\n\n<script>\nimport SparkMD5 from 'spark-md5';\n\nexport default {\n name: 'ImageUploader',\n props: {\n value: {\n type: String,\n default: ''\n },\n },\n watch: {\n value: function (val, oldVal) {\n this.audioUrl = val\n }\n },\n data() {\n return {\n // 上传地址\n uploadUrl: \"\",\n // 上传附带的DATA\n uploadData: \"\",\n // 图片地址\n audioUrl: \"\",\n }\n },\n\n created() {\n // 获取上传地址\n this.uploadUrl = window.courseware.uploadUrl();\n this.uploadData = window.courseware.uploadData();\n window['air'].getUploadCallback = (url, data) => {\n this.uploadUrl = url;\n this.uploadData = data;\n };\n },\n\n methods: {\n handleUploadSuccess(e) {\n this.audioUrl = e.url;\n this.$emit(\"input\", this.audioUrl);\n this.$emit('change', { url: this.audioUrl});\n },\n\n async download() {\n const url = this.audioUrl\n const fileName = url.split('/').pop()\n const response = await fetch(url) //发送GET请求\n if (response.ok) {\n const blob = await response.blob() //获取Blob对象\n const url = window.URL.createObjectURL(blob) //创建Blob对象的URL\n const link = document.createElement('a') //创建一个新的<a>元素\n link.href = url //设置<a>元素的href属性为Blob对象的URL\n link.download = fileName //设置下载文件的文件名\n document.body.appendChild(link) //将<a>元素添加到文档中\n link.click() //模拟点击<a>元素以触发文件下载\n this.$message({\n type: 'success',\n message: '下载完成'\n });\n } else {\n //处理API响应失败的情况,例如显示错误消息\n this.$message({\n type: 'error',\n message: '下载失败'\n });\n }\n },\n\n\n deleteAudio() {\n this.$confirm('确定要删除吗?', '提示', {\n confirmButtonText: '确定',\n cancelButtonText: '取消',\n type: 'warning'\n }).then(() => {\n this.audioUrl = \"\";\n this.$emit(\"input\", \"\");\n this.$emit('change', { url: this.audioUrl});\n }).catch(() => {\n // this.$message({\n // type: 'info',\n // message: '已取消删除'\n // });\n });\n },\n\n },\n\n}\n</script>\n\n<style scoped>\n::v-deep .el-upload {\n height: 80px;\n}\n\n::v-deep .el-upload-dragger {\n height: 80px;\n border: 1px dashed #d9d9d9;\n border-radius: 6px;\n /* background-color: #f7f7f7; */\n color: #8c939d;\n font-size: 14px;\n display: flex;\n justify-content: center;\n align-items: center;\n}\n\n::v-deep .el-icon-upload {\n font-size: 36px;\n color: #c0c4cc;\n margin: 0 10px;\n}\n\n.buttons {\n text-align: center;\n position: absolute;\n right: 0;\n top: 0;\n}\n\n.el-button {\n padding: 4px 12px;\n font-size: 18px;\n margin: 0;\n border-radius: 0 0 0 20px;\n}\n</style>","import mod from \"-!../../node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./AudioUploader.vue?vue&type=script&lang=js\"; export default mod; export * from \"-!../../node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./AudioUploader.vue?vue&type=script&lang=js\"","import { render, staticRenderFns } from \"./AudioUploader.vue?vue&type=template&id=5c385f59&scoped=true\"\nimport script from \"./AudioUploader.vue?vue&type=script&lang=js\"\nexport * from \"./AudioUploader.vue?vue&type=script&lang=js\"\nimport style0 from \"./AudioUploader.vue?vue&type=style&index=0&id=5c385f59&prod&scoped=true&lang=css\"\n\n\n/* normalize component */\nimport normalizer from \"!../../node_modules/@vue/vue-loader-v15/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n \"5c385f59\",\n null\n \n)\n\nexport default component.exports","<template>\n <div id=\"app\" style=\"width: 450px;\">\n <el-form label-width=\"120px\">\n <el-form-item label=\"视频\">\n <VideoUploader v-model=\"itemData.url\" @change=\"save\"/>\n </el-form-item>\n <el-form-item label=\"静音视频(可选)\">\n <VideoUploader v-model=\"itemData.muteVideoUrl\" @change=\"save\"/>\n </el-form-item>\n <el-form-item label=\"截图\">\n <ImageUploader v-model=\"itemData.snapshotUrl\" @change=\"save\"/>\n </el-form-item>\n <el-form-item label=\"时长\">\n <el-input v-model=\"itemData.name\" @change=\"save\"></el-input>\n </el-form-item>\n <el-form-item label=\"大小\">\n <el-input v-model=\"itemData.size\" @change=\"save\"></el-input>\n </el-form-item>\n </el-form>\n </div>\n</template>\n\n<script>\nimport TimeRangeSelector from './components/TimeRangeSelector.vue'\nimport { getSyllabusListById, getFirstCoursewareBySyllId, getPidPathName } from '@/api/syllabus'\nimport VideoUploader from './components/VideoUploader.vue'\nimport ImageUploader from './components/ImageUploader.vue'\nimport AudioUploader from './components/AudioUploader.vue'\n\nexport default {\n name: 'App',\n components: {\n TimeRangeSelector,\n VideoUploader,\n ImageUploader,\n AudioUploader\n },\n data() {\n return {\n itemData: {\n video_url: \"\",\n image_url: \"\",\n audio_url: \"\"\n }\n };\n },\n async mounted() {\n this.getData();\n },\n methods: {\n async getData() {\n const res = await this.$getData();\n if(!res) {\n // 默认数据\n this.itemData = {\n \"url\": \"https://teach.cdn.ireadabc.com/b688da9ac31ccbcd83f75f3336728cfb.mp4\",\n \"duration\": 63.621995,\n \"size\": 5803623,\n \"snapshotUrl\": \"https://teach.cdn.ireadabc.com/4b05b78396aae7e9fe146669ccd38052.jpg\",\n \"muteVideoUrl\": \"https://teach.cdn.ireadabc.com/bec06eec1ce7488efd56130736d20900.mp4\"\n }\n } else {\n this.itemData = res\n }\n },\n\n // 保存数据\n save() {\n this.$message({\n message: '保存成功',\n type: 'success',\n duration: 1000\n })\n this.$setData(this.itemData)\n }\n }\n}\n</script>\n\n<style>\nbody,\nhtml {\n margin: 0;\n padding: 0;\n height: 100%;\n overflow: hidden;\n background-color: #FFFFFF;\n}\n\n#app {}\n</style>\n","import mod from \"-!../node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./App.vue?vue&type=script&lang=js\"; export default mod; export * from \"-!../node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./App.vue?vue&type=script&lang=js\"","import { render, staticRenderFns } from \"./App.vue?vue&type=template&id=0e576e0a\"\nimport script from \"./App.vue?vue&type=script&lang=js\"\nexport * from \"./App.vue?vue&type=script&lang=js\"\nimport style0 from \"./App.vue?vue&type=style&index=0&id=0e576e0a&prod&lang=css\"\n\n\n/* normalize component */\nimport normalizer from \"!../node_modules/@vue/vue-loader-v15/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n null,\n null\n \n)\n\nexport default component.exports","const actionName = \"getDPEData\";\n\nconst commonPostMessage = function (messageObj) {\n const obj = { ...messageObj, urlParams: window.location.search, origin: \"template\" }\n window.parent.postMessage(obj, '*');\n};\n\nexport const getDPEData = async function () {\n return new Promise((resolve, reject) => {\n let processed = false;\n let timeoutId = setTimeout(() => {\n if (!processed) {\n window.removeEventListener(\"message\", eventCallback);\n reject(\"timeout\")\n }\n }, 5000);\n\n const eventCallback = (e) => {\n if(e.data.action !== actionName) {\n return;\n }\n processed = true;\n window.removeEventListener(\"message\", eventCallback);\n clearTimeout(timeoutId);\n try {\n const data = JSON.parse(e.data.data);\n resolve(data.data)\n } catch (error) {\n console.error(\"Error parsing DPE data\", error);\n resolve(null)\n }\n }\n commonPostMessage({ action: actionName, data: window.location.search }); \n window.addEventListener(\"message\", eventCallback)\n })\n}","import Vue from 'vue'\nimport ElementUI from 'element-ui';\nimport 'element-ui/lib/theme-chalk/index.css';\nimport App from './App.vue'\nimport * as echarts from 'echarts';\nimport { getDPEData } from './api/dep'\n\nVue.use(ElementUI);\n\nVue.config.productionTip = false\nVue.prototype.$getData = () => {\n console.log(\"===== getData =====\");\n return new Promise((resolve, reject) => {\n (window).courseware.getData((data) => {\n console.log(data);\n resolve(data)\n }, \"default_key\")\n })\n}\n\nVue.prototype.$getDPEData = getDPEData;\n\nVue.prototype.$setData = (data) => {\n console.log(\"===== setData =====\");\n console.log(data);\n (window).courseware.setData(data, null, \"default_key\")\n}\n\nVue.prototype.$echarts = echarts\n\nnew Vue({\n render: function (h) { return h(App) },\n}).$mount('#app')\n","// The module cache\nvar __webpack_module_cache__ = {};\n\n// The require function\nfunction __webpack_require__(moduleId) {\n\t// Check if module is in cache\n\tvar cachedModule = __webpack_module_cache__[moduleId];\n\tif (cachedModule !== undefined) {\n\t\treturn cachedModule.exports;\n\t}\n\t// Create a new module (and put it into the cache)\n\tvar module = __webpack_module_cache__[moduleId] = {\n\t\tid: moduleId,\n\t\tloaded: false,\n\t\texports: {}\n\t};\n\n\t// Execute the module function\n\t__webpack_modules__[moduleId].call(module.exports, module, module.exports, __webpack_require__);\n\n\t// Flag the module as loaded\n\tmodule.loaded = true;\n\n\t// Return the exports of the module\n\treturn module.exports;\n}\n\n// expose the modules object (__webpack_modules__)\n__webpack_require__.m = __webpack_modules__;\n\n","__webpack_require__.amdO = {};","var deferred = [];\n__webpack_require__.O = function(result, chunkIds, fn, priority) {\n\tif(chunkIds) {\n\t\tpriority = priority || 0;\n\t\tfor(var i = deferred.length; i > 0 && deferred[i - 1][2] > priority; i--) deferred[i] = deferred[i - 1];\n\t\tdeferred[i] = [chunkIds, fn, priority];\n\t\treturn;\n\t}\n\tvar notFulfilled = Infinity;\n\tfor (var i = 0; i < deferred.length; i++) {\n\t\tvar chunkIds = deferred[i][0];\n\t\tvar fn = deferred[i][1];\n\t\tvar priority = deferred[i][2];\n\t\tvar fulfilled = true;\n\t\tfor (var j = 0; j < chunkIds.length; j++) {\n\t\t\tif ((priority & 1 === 0 || notFulfilled >= priority) && Object.keys(__webpack_require__.O).every(function(key) { return __webpack_require__.O[key](chunkIds[j]); })) {\n\t\t\t\tchunkIds.splice(j--, 1);\n\t\t\t} else {\n\t\t\t\tfulfilled = false;\n\t\t\t\tif(priority < notFulfilled) notFulfilled = priority;\n\t\t\t}\n\t\t}\n\t\tif(fulfilled) {\n\t\t\tdeferred.splice(i--, 1)\n\t\t\tvar r = fn();\n\t\t\tif (r !== undefined) result = r;\n\t\t}\n\t}\n\treturn result;\n};","// getDefaultExport function for compatibility with non-harmony modules\n__webpack_require__.n = function(module) {\n\tvar getter = module && module.__esModule ?\n\t\tfunction() { return module['default']; } :\n\t\tfunction() { return module; };\n\t__webpack_require__.d(getter, { a: getter });\n\treturn getter;\n};","// define getter functions for harmony exports\n__webpack_require__.d = function(exports, definition) {\n\tfor(var key in definition) {\n\t\tif(__webpack_require__.o(definition, key) && !__webpack_require__.o(exports, key)) {\n\t\t\tObject.defineProperty(exports, key, { enumerable: true, get: definition[key] });\n\t\t}\n\t}\n};","__webpack_require__.g = (function() {\n\tif (typeof globalThis === 'object') return globalThis;\n\ttry {\n\t\treturn this || new Function('return this')();\n\t} catch (e) {\n\t\tif (typeof window === 'object') return window;\n\t}\n})();","__webpack_require__.o = function(obj, prop) { return Object.prototype.hasOwnProperty.call(obj, prop); }","// define __esModule on exports\n__webpack_require__.r = function(exports) {\n\tif(typeof Symbol !== 'undefined' && Symbol.toStringTag) {\n\t\tObject.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });\n\t}\n\tObject.defineProperty(exports, '__esModule', { value: true });\n};","__webpack_require__.nmd = function(module) {\n\tmodule.paths = [];\n\tif (!module.children) module.children = [];\n\treturn module;\n};","// no baseURI\n\n// object to store loaded and loading chunks\n// undefined = chunk not loaded, null = chunk preloaded/prefetched\n// [resolve, reject, Promise] = chunk loading, 0 = chunk loaded\nvar installedChunks = {\n\t524: 0\n};\n\n// no chunk on demand loading\n\n// no prefetching\n\n// no preloaded\n\n// no HMR\n\n// no HMR manifest\n\n__webpack_require__.O.j = function(chunkId) { return installedChunks[chunkId] === 0; };\n\n// install a JSONP callback for chunk loading\nvar webpackJsonpCallback = function(parentChunkLoadingFunction, data) {\n\tvar chunkIds = data[0];\n\tvar moreModules = data[1];\n\tvar runtime = data[2];\n\t// add \"moreModules\" to the modules object,\n\t// then flag all \"chunkIds\" as loaded and fire callback\n\tvar moduleId, chunkId, i = 0;\n\tif(chunkIds.some(function(id) { return installedChunks[id] !== 0; })) {\n\t\tfor(moduleId in moreModules) {\n\t\t\tif(__webpack_require__.o(moreModules, moduleId)) {\n\t\t\t\t__webpack_require__.m[moduleId] = moreModules[moduleId];\n\t\t\t}\n\t\t}\n\t\tif(runtime) var result = runtime(__webpack_require__);\n\t}\n\tif(parentChunkLoadingFunction) parentChunkLoadingFunction(data);\n\tfor(;i < chunkIds.length; i++) {\n\t\tchunkId = chunkIds[i];\n\t\tif(__webpack_require__.o(installedChunks, chunkId) && installedChunks[chunkId]) {\n\t\t\tinstalledChunks[chunkId][0]();\n\t\t}\n\t\tinstalledChunks[chunkId] = 0;\n\t}\n\treturn __webpack_require__.O(result);\n}\n\nvar chunkLoadingGlobal = self[\"webpackChunkform_vue\"] = self[\"webpackChunkform_vue\"] || [];\nchunkLoadingGlobal.forEach(webpackJsonpCallback.bind(null, 0));\nchunkLoadingGlobal.push = webpackJsonpCallback.bind(null, chunkLoadingGlobal.push.bind(chunkLoadingGlobal));","// startup\n// Load entry module and return exports\n// This entry module depends on other loaded chunks and execution need to be delayed\nvar __webpack_exports__ = __webpack_require__.O(undefined, [504], function() { return __webpack_require__(411); })\n__webpack_exports__ = __webpack_require__.O(__webpack_exports__);\n"],"names":["render","_vm","this","_c","_self","staticStyle","attrs","on","save","model","value","itemData","callback","$$v","$set","expression","staticRenderFns","staticClass","ref","name","props","type","Object","default","start","end","watch","handler","val","parentValueChange","setTimeRange","deep","data","insECharts","mounted","initEcharts","methods","$echarts","init","$refs","refEcharts","option","grid","left","right","top","bottom","tooltip","dataZoom","xAxis","show","yAxis","evt","$emit","setOption","dispatchAction","dataZoomIndex","component","uploadData","uploading","transcoding","uploadUrl","customReq","directives","rawName","videoDone","_v","_e","slot","uploadPercentage","uploadStatus","_s","uploadSpeed","videoUrl","captureVideo","download","deleteVideo","String","oldVal","httpHeadCall","async","exist","checkResourceAvaliable","$message","message","refVideo","load","startTime","endTime","loaded","setIntervalIds","setTimeoutIds","created","window","courseware","uploadVideoUrl","getUploadVideoCallback","url","addEventListener","stop","pause","removeEventListener","parseFileName","fileName","lastDotIndex","lastIndexOf","substring","ext","resetUploadVars","requsetUrl","xhr","XMLHttpRequest","onreadystatechange","readyState","status","e","open","send","timeout","onerror","ontimeout","item","getFileMD5","protocolStr","document","location","protocol","baseCDN","baseAPI","currentTime","exit","file","axios","get","then","tmps","sign","toString","res","serve","formData","FormData","append","OSSAccessKeyId","policy","signature","action","Date","getTime","method","headers","onUploadProgress","progressEvent","Math","ceil","progress","timeDiff","sent","speed","spNum","round","toFixed","tid","setTimeout","idIndex","indexOf","splice","push","catch","err","Promise","resovle","intervalId","setInterval","isSuccess","index","clearInterval","split","pop","response","fetch","ok","blob","URL","createObjectURL","link","createElement","href","body","appendChild","click","fullFileName","video","cvs","ctx","getContext","width","videoWidth","height","videoHeight","drawImage","screenshotDataUrl","toDataURL","floor","$confirm","confirmButtonText","cancelButtonText","fileReader","FileReader","Spark","readAsArrayBuffer","onload","target","result","md5","beforeDestroy","forEach","clearTimeout","iid","handleUploadSuccess","imageUrl","deleteImg","getUploadCallback","audioUrl","deleteAudio","components","TimeRangeSelector","VideoUploader","ImageUploader","AudioUploader","video_url","image_url","audio_url","getData","$getData","duration","$setData","actionName","commonPostMessage","messageObj","obj","urlParams","search","origin","parent","postMessage","getDPEData","resolve","reject","processed","timeoutId","eventCallback","JSON","parse","error","console","use","config","productionTip","prototype","log","$getDPEData","setData","echarts","h","App","$mount","__webpack_module_cache__","__webpack_require__","moduleId","cachedModule","undefined","exports","module","id","__webpack_modules__","call","m","amdO","deferred","O","chunkIds","fn","priority","notFulfilled","Infinity","i","length","fulfilled","j","keys","every","key","r","n","getter","__esModule","d","a","definition","o","defineProperty","enumerable","g","globalThis","Function","prop","hasOwnProperty","Symbol","toStringTag","nmd","paths","children","installedChunks","chunkId","webpackJsonpCallback","parentChunkLoadingFunction","moreModules","runtime","some","chunkLoadingGlobal","self","bind","__webpack_exports__"],"sourceRoot":""}
\ No newline at end of file
(function(){var e={9740:function(e,t,a){"use strict";var i=a(5471),s=a(1052),o=a.n(s),n=function(){var e=this,t=e._self._c;return t("div",{staticStyle:{width:"450px"},attrs:{id:"app"}},[t("el-form",{attrs:{"label-width":"120px"}},[t("el-form-item",{attrs:{label:"视频"}},[t("VideoUploader",{on:{change:e.save},model:{value:e.itemData.url,callback:function(t){e.$set(e.itemData,"url",t)},expression:"itemData.url"}})],1),t("el-form-item",{attrs:{label:"静音视频(可选)"}},[t("VideoUploader",{on:{change:e.save},model:{value:e.itemData.muteVideoUrl,callback:function(t){e.$set(e.itemData,"muteVideoUrl",t)},expression:"itemData.muteVideoUrl"}})],1),t("el-form-item",{attrs:{label:"截图"}},[t("ImageUploader",{on:{change:e.save},model:{value:e.itemData.snapshotUrl,callback:function(t){e.$set(e.itemData,"snapshotUrl",t)},expression:"itemData.snapshotUrl"}})],1),t("el-form-item",{attrs:{label:"时长"}},[t("el-input",{on:{change:e.save},model:{value:e.itemData.name,callback:function(t){e.$set(e.itemData,"name",t)},expression:"itemData.name"}})],1),t("el-form-item",{attrs:{label:"大小"}},[t("el-input",{on:{change:e.save},model:{value:e.itemData.size,callback:function(t){e.$set(e.itemData,"size",t)},expression:"itemData.size"}})],1)],1)],1)},r=[],l=function(){var e=this,t=e._self._c;return t("div",{staticClass:"com-trs"},[t("div",{ref:"refEcharts",staticClass:"chart-slider"})])},d=[],c={name:"TimeRangeSelector",props:{value:{type:Object,default:()=>({start:0,end:100})}},watch:{value:{handler(e){this.parentValueChange=!0,this.setTimeRange(100*e.start,100*e.end)},deep:!0}},data(){return{insECharts:null,parentValueChange:!1}},mounted(){this.initEcharts()},methods:{initEcharts(){this.insECharts||(this.insECharts=this.$echarts.init(this.$refs.refEcharts));const e={grid:{left:10,right:10,top:10,bottom:10},tooltip:{},dataZoom:[{type:"slider"}],xAxis:{show:!1},yAxis:{show:!1}};this.insECharts.on("dataZoom",(e=>{this.parentValueChange?this.parentValueChange=!1:(this.$emit("change",{start:e.start/100,end:e.end/100}),this.$emit("input",{start:e.start/100,end:e.end/100}))})),this.insECharts.setOption(e)},setTimeRange(e,t){this.insECharts.dispatchAction({type:"dataZoom",dataZoomIndex:0,start:e,end:t})}}},u=c,h=a(1656),p=(0,h.A)(u,l,d,!1,null,"291eb56d",null),m=p.exports,g=function(){var e=this,t=e._self._c;return t("div",{staticStyle:{position:"relative",width:"360px",height:"220px"}},[t("el-upload",{attrs:{data:e.uploadData,disabled:e.uploading||e.transcoding,action:e.uploadUrl,drag:"","before-upload":e.customReq,accept:".mp4","show-file-list":!1}},[t("i",{directives:[{name:"show",rawName:"v-show",value:!e.transcoding&&!e.videoDone&&!e.uploading,expression:"!transcoding && !videoDone && !uploading"}],staticClass:"el-icon-upload"}),t("div",{directives:[{name:"show",rawName:"v-show",value:!e.transcoding&&!e.videoDone&&!e.uploading,expression:"!transcoding && !videoDone && !uploading"}],staticClass:"el-upload__text"},[e._v("将MP4文件拖到此处,或"),t("em",[e._v("点击上传")])]),e.transcoding||e.videoDone||e.uploading?e._e():t("div",{staticClass:"el-upload__tip",staticStyle:{"text-align":"center"},attrs:{slot:"tip"},slot:"tip"},[e._v("只能上传mp4文件")]),e.transcoding?t("div",{staticClass:"el-upload__tip",staticStyle:{"text-align":"center"},attrs:{slot:"tip"},slot:"tip"},[e._v("视频后台转码中,请稍后...")]):e._e(),t("div",{directives:[{name:"show",rawName:"v-show",value:!e.transcoding&&!e.videoDone&&e.uploading,expression:"!transcoding && !videoDone && uploading"}],staticStyle:{position:"absolute",left:"50%",top:"50%",transform:"translate(-50%, -50%)"}},[t("el-progress",{attrs:{type:"circle",percentage:e.uploadPercentage,status:e.uploadStatus}}),t("div",[e._v(e._s(e.uploadSpeed))])],1),t("div",{directives:[{name:"show",rawName:"v-show",value:!e.transcoding&&e.videoDone,expression:"!transcoding && videoDone"}]},[t("video",{ref:"refVideo",attrs:{width:"360px",height:"180px",controls:"",crossOrigin:"anonymous"}},[t("source",{attrs:{src:`${e.videoUrl}`,type:"video/mp4"}}),e._v(" Your browser does not support the video tag. ")])]),e.transcoding?t("div",[t("div",{staticClass:"mesh-loader"},[t("div",{staticClass:"set-one"},[t("div",{staticClass:"circle"}),t("div",{staticClass:"circle"})]),t("div",{staticClass:"set-two"},[t("div",{staticClass:"circle"}),t("div",{staticClass:"circle"})])])]):e._e()]),e.videoDone?t("div",{staticClass:"buttons"},[t("el-button",{attrs:{type:"primary",size:"mini",icon:"el-icon-camera"},on:{click:e.captureVideo}}),t("el-button",{attrs:{type:"primary",size:"mini",icon:"el-icon-download"},on:{click:e.download}}),t("el-button",{attrs:{type:"danger",size:"mini",icon:"el-icon-delete"},on:{click:e.deleteVideo}})],1):e._e()],1)},f=[],v=a(1396),w=a.n(v),U=a(4335),y=a(5735),b=a.n(y),$={name:"VideoUploader",props:{value:{type:String,default:""}},watch:{value:function(e,t){e&&this.httpHeadCall(e,(async e=>{e?this.videoDone=!0:(this.transcoding=!0,await this.checkResourceAvaliable(),this.$message({type:"success",message:"转换完成"}),this.videoDone=!0,this.transcoding=!1,this.$refs.refVideo.load())})),this.videoUrl=e},videoUrl:function(){this.$refs.refVideo.load()}},data(){return{uploadUrl:"",uploadData:"",uploading:!1,transcoding:!1,videoDone:!1,uploadPercentage:0,uploadStatus:null,uploadSpeed:"0KB/s",startTime:null,endTime:null,loaded:0,videoUrl:"",setIntervalIds:[],setTimeoutIds:[]}},created(){this.uploadUrl=window.courseware.uploadVideoUrl(),this.uploadData=window.courseware.uploadData(),window["air"].getUploadVideoCallback=(e,t)=>{this.uploadUrl=e,this.uploadData=t}},mounted(){this.$refs.refVideo.addEventListener("click",(()=>{const e=()=>{this.$refs.refVideo.pause(),this.$refs.refVideo.removeEventListener("play",e)};this.$refs.refVideo.addEventListener("play",e)}))},methods:{parseFileName(e){const t=e.lastIndexOf("."),a=e.substring(0,t),i=e.substring(t);return{name:a,ext:i}},resetUploadVars(){this.uploadPercentage=0,this.uploadStatus=null,this.uploadSpeed="0KB/s",this.startTime=null,this.endTime=null,this.loaded=0},httpHeadCall(e,t){let a=new XMLHttpRequest;try{a.onreadystatechange=()=>{try{4==a.readyState&&(a.status>=200&&a.status<400?t(!0):t(!1))}catch(e){t(!1)}},a.open("HEAD",e,!0),a.send(),a.timeout=15e3,a.onerror=e=>{t(!1)},a.ontimeout=e=>{t(!1)}}catch(i){t(!1)}},async customReq(e){const{name:t,ext:a}=this.parseFileName(e.name);if(".mp4"!==a)return this.$message({type:"error",message:"只能上传mp4文件"}),!1;const i=await this.getFileMD5(e),s=document.location.protocol,o=`${s}//teach.cdn.ireadabc.com`,n=`${s}//openapi.iteachabc.com`;return this.videoUrl==`${o}/${i}_h.mp4`?(this.$refs.refVideo.pause(),this.$refs.refVideo.currentTime=0,void this.$message({type:"success",message:"极速上传完成"})):(this.resetUploadVars(),this.videoUrl="",this.uploading=!0,this.transcoding=!1,this.videoDone=!1,this.httpHeadCall(`${o}/${i}_h.mp4`,(t=>{if(t)return this.uploadStatus="success",this.videoUrl=`${o}/${i}_h.mp4`,this.$emit("input",this.videoUrl),this.$emit("change",{url:this.videoUrl,file:e}),this.$emit("success",{url:this.videoUrl,file:e}),this.uploading=!1,void this.$message({type:"success",message:"极速上传完成"});U.A.get(`${n}/oss/timestamp`,{}).then((t=>{const a=w().MD5(t+"iplayABC2019").toString();U.A.get(`${n}/oss/signature`,{sign:a,tmps:t}).then((t=>{const a=t.data.data,n=new FormData;n.append("key",i+".mp4"),n.append("bucket","iplayabc-worker-queue-videolmh"),n.append("OSSAccessKeyId",a.OSSAccessKeyId),n.append("policy",a.policy),n.append("Signature",a.signature),n.append("success_action_status","200"),n.append("file",e),e.action=`${s}//iplayabc-worker-queue-videolmh.oss-cn-beijing.aliyuncs.com`,this.startTime=(new Date).getTime(),this.uploadStatus=null,(0,U.A)({method:"post",url:e.action,headers:{"Access-Control-Allow-Origin":"*"},onUploadProgress:e=>{this.uploadPercentage=Math.ceil(100*e.progress),this.endTime=(new Date).getTime();const t=this.endTime-this.startTime;if(this.startTime=(new Date).getTime(),0===t)return;const a=e.loaded-this.loaded;this.loaded=e.loaded;const i=a/t*1e3,s=Math.round(i/1024);this.uploadSpeed=s>1024?`${(s/1024).toFixed(2)}MB/s`:`${s}KB/s`,this.$emit("onProgress",e)},data:n}).then((async t=>{const a=setTimeout((()=>{this.resetUploadVars(),this.uploading=!1,this.transcoding=!0,this.videoDone=!1;const e=this.setTimeoutIds.indexOf(a);e>-1&&this.setTimeoutIds.splice(e,1)}),1e3);this.uploadStatus="success",this.videoUrl=`${o}/${i}_h.mp4`,this.$emit("input",this.videoUrl),this.$emit("change",{url:this.videoUrl,file:e}),this.$emit("success",{url:this.videoUrl,file:e}),this.setTimeoutIds.push(a),this.uploading=!1,this.$message({type:"info",message:"上传成功,开始转码..."})})).catch((e=>{const t=setTimeout((()=>{this.uploading=!1,this.transcoding=!1,this.videoDone=!1;const e=this.setTimeoutIds.indexOf(t);e>-1&&this.setTimeoutIds.splice(e,1)}),1e3);this.uploadStatus="error",this.$emit("error",e),this.setTimeoutIds.push(t)}))}))}))})),!1)},checkResourceAvaliable(){return new Promise((e=>{let t=null;t=setInterval((()=>{this.httpHeadCall(this.videoUrl,(a=>{if(a){if(t){const e=this.setIntervalIds.indexOf(t);clearInterval(t),this.setIntervalIds.splice(e,1)}e(!0)}}))}),800),this.setIntervalIds.push(t)}))},async download(){const e=this.videoUrl,t=e.split("/").pop(),a=await fetch(e);if(a.ok){const e=await a.blob(),i=window.URL.createObjectURL(e),s=document.createElement("a");s.href=i,s.download=t,document.body.appendChild(s),s.click(),this.$message({type:"success",message:"下载完成"})}else this.$message({type:"error",message:"下载失败"})},captureVideo(){const e=this.videoUrl.split("/").pop(),{name:t,ext:a}=this.parseFileName(e),i=this.$refs.refVideo,s=document.createElement("canvas"),o=s.getContext("2d");s.width=i.videoWidth,s.height=i.videoHeight,o.drawImage(i,0,0,s.width,s.height);const n=s.toDataURL("image/png"),r=document.createElement("a");r.href=n,r.download=t+"_"+Math.floor(1e3*i.currentTime)+".png",document.body.appendChild(r),r.click(),this.$message({type:"success",message:"截图成功"})},deleteVideo(){this.$confirm("确定要删除吗?","提示",{confirmButtonText:"确定",cancelButtonText:"取消",type:"warning"}).then((()=>{this.videoUrl="",this.videoDone=!1,this.$emit("input",""),this.$emit("change",{url:this.videoUrl,file:null})})).catch((()=>{this.$message({type:"info",message:"已取消删除"})}))},getFileMD5(e){return new Promise((t=>{let a=new FileReader,i=new(b().ArrayBuffer);a.readAsArrayBuffer(e),a.onload=function(e){i.append(e.target.result);let a=i.end();t(a)}}))}},beforeDestroy(){this.setTimeoutIds.forEach((e=>{clearTimeout(e)})),this.setIntervalIds.forEach((e=>{clearInterval(e)}))}},D=$,_=(0,h.A)(D,g,f,!1,null,"effb3c56",null),x=_.exports,C=function(){var e=this,t=e._self._c;return t("div",{staticStyle:{position:"relative",width:"360px",height:"180px"}},[t("el-upload",{attrs:{data:e.uploadData,action:e.uploadUrl,drag:"",accept:".png,.jpg,.jpeg,.bmp,.gif","show-file-list":!1,"on-success":e.handleUploadSuccess}},[t("i",{directives:[{name:"show",rawName:"v-show",value:!e.imageUrl,expression:"!imageUrl"}],staticClass:"el-icon-upload"}),t("div",{directives:[{name:"show",rawName:"v-show",value:!e.imageUrl,expression:"!imageUrl"}],staticClass:"el-upload__text"},[e._v("将文件拖到此处,或"),t("em",[e._v("点击上传")]),t("br"),t("span",{staticStyle:{"font-size":"14px"}},[e._v("只能上传 "),t("strong",[e._v("jpg、png、jpeg、gif、bmp")]),e._v(" 文件")])]),e.imageUrl?t("div",{staticStyle:{width:"100%",height:"100%"}},[t("el-image",{staticStyle:{width:"100%",height:"100%"},attrs:{src:e.imageUrl,fit:"contain"}})],1):e._e()]),e.imageUrl?t("el-button-group",{staticClass:"buttons"},[t("el-button",{attrs:{type:"ghost",size:"mini",icon:"el-icon-download"},on:{click:e.download}}),t("el-button",{attrs:{type:"ghost",size:"mini",icon:"el-icon-delete"},on:{click:e.deleteImg}})],1):e._e()],1)},S=[],T={name:"ImageUploader",props:{value:{type:String,default:""}},watch:{value:function(e,t){this.imageUrl=e}},data(){return{uploadUrl:"",uploadData:"",imageUrl:""}},created(){this.uploadUrl=window.courseware.uploadUrl(),this.uploadData=window.courseware.uploadData(),window["air"].getUploadCallback=(e,t)=>{this.uploadUrl=e,this.uploadData=t},this.imageUrl=this.value},methods:{handleUploadSuccess(e){this.imageUrl=e.url,this.$emit("input",this.imageUrl),this.$emit("change",{url:this.imageUrl})},async download(){const e=this.imageUrl,t=e.split("/").pop(),a=await fetch(e);if(a.ok){const e=await a.blob(),i=window.URL.createObjectURL(e),s=document.createElement("a");s.href=i,s.download=t,document.body.appendChild(s),s.click(),this.$message({type:"success",message:"下载完成"})}else this.$message({type:"error",message:"下载失败"})},deleteImg(){this.$confirm("确定要删除吗?","提示",{confirmButtonText:"确定",cancelButtonText:"取消",type:"warning"}).then((()=>{this.imageUrl="",this.$emit("input",""),this.$emit("change",{url:this.imageUrl})})).catch((()=>{}))}}},k=T,I=(0,h.A)(k,C,S,!1,null,"4f1d8e93",null),V=I.exports,E=function(){var e=this,t=e._self._c;return t("div",{staticStyle:{position:"relative",width:"360px",height:"80px"}},[t("el-upload",{staticStyle:{height:"100px"},attrs:{data:e.uploadData,action:e.uploadUrl,drag:"",accept:".mp3","show-file-list":!1,"on-success":e.handleUploadSuccess}},[t("i",{directives:[{name:"show",rawName:"v-show",value:!e.audioUrl,expression:"!audioUrl"}],staticClass:"el-icon-upload"}),t("div",{directives:[{name:"show",rawName:"v-show",value:!e.audioUrl,expression:"!audioUrl"}],staticClass:"el-upload__text"},[e._v("将MP3文件拖到此处,或"),t("em",[e._v("点击上传")])]),e.audioUrl?t("div",[t("audio",{attrs:{src:e.audioUrl,controls:""}})]):e._e()]),e.audioUrl?t("div",{staticClass:"buttons"},[t("el-button",{attrs:{type:"ghost",size:"mini",icon:"el-icon-delete"},on:{click:e.deleteAudio}})],1):e._e()],1)},O=[],A={name:"ImageUploader",props:{value:{type:String,default:""}},watch:{value:function(e,t){this.audioUrl=e}},data(){return{uploadUrl:"",uploadData:"",audioUrl:""}},created(){this.uploadUrl=window.courseware.uploadUrl(),this.uploadData=window.courseware.uploadData(),window["air"].getUploadCallback=(e,t)=>{this.uploadUrl=e,this.uploadData=t}},methods:{handleUploadSuccess(e){this.audioUrl=e.url,this.$emit("input",this.audioUrl),this.$emit("change",{url:this.audioUrl})},async download(){const e=this.audioUrl,t=e.split("/").pop(),a=await fetch(e);if(a.ok){const e=await a.blob(),i=window.URL.createObjectURL(e),s=document.createElement("a");s.href=i,s.download=t,document.body.appendChild(s),s.click(),this.$message({type:"success",message:"下载完成"})}else this.$message({type:"error",message:"下载失败"})},deleteAudio(){this.$confirm("确定要删除吗?","提示",{confirmButtonText:"确定",cancelButtonText:"取消",type:"warning"}).then((()=>{this.audioUrl="",this.$emit("input",""),this.$emit("change",{url:this.audioUrl})})).catch((()=>{}))}}},P=A,j=(0,h.A)(P,E,O,!1,null,"5c385f59",null),R=j.exports,L={name:"App",components:{TimeRangeSelector:m,VideoUploader:x,ImageUploader:V,AudioUploader:R},data(){return{itemData:{video_url:"",image_url:"",audio_url:""}}},async mounted(){this.getData()},methods:{async getData(){const e=await this.$getData();this.itemData=e||{url:"https://teach.cdn.ireadabc.com/b688da9ac31ccbcd83f75f3336728cfb.mp4",duration:63.621995,size:5803623,snapshotUrl:"https://teach.cdn.ireadabc.com/4b05b78396aae7e9fe146669ccd38052.jpg",muteVideoUrl:"https://teach.cdn.ireadabc.com/bec06eec1ce7488efd56130736d20900.mp4"}},save(){this.$message({message:"保存成功",type:"success",duration:1e3}),this.$setData(this.itemData)}}},M=L,B=(0,h.A)(M,n,r,!1,null,null,null),N=B.exports,z=a(9393);const F="getDPEData",H=function(e){const t={...e,urlParams:window.location.search,origin:"template"};window.parent.postMessage(t,"*")},q=async function(){return new Promise(((e,t)=>{let a=!1,i=setTimeout((()=>{a||(window.removeEventListener("message",s),t("timeout"))}),5e3);const s=t=>{if(t.data.action===F){a=!0,window.removeEventListener("message",s),clearTimeout(i);try{const a=JSON.parse(t.data.data);e(a.data)}catch(o){console.error("Error parsing DPE data",o),e(null)}}};H({action:F,data:window.location.search}),window.addEventListener("message",s)}))};i["default"].use(o()),i["default"].config.productionTip=!1,i["default"].prototype.$getData=()=>(console.log("===== getData ====="),new Promise(((e,t)=>{window.courseware.getData((t=>{console.log(t),e(t)}),"default_key")}))),i["default"].prototype.$getDPEData=q,i["default"].prototype.$setData=e=>{console.log("===== setData ====="),console.log(e),window.courseware.setData(e,null,"default_key")},i["default"].prototype.$echarts=z,new i["default"]({render:function(e){return e(N)}}).$mount("#app")},477:function(){}},t={};function a(i){var s=t[i];if(void 0!==s)return s.exports;var o=t[i]={id:i,loaded:!1,exports:{}};return e[i].call(o.exports,o,o.exports,a),o.loaded=!0,o.exports}a.m=e,function(){a.amdO={}}(),function(){var e=[];a.O=function(t,i,s,o){if(!i){var n=1/0;for(c=0;c<e.length;c++){i=e[c][0],s=e[c][1],o=e[c][2];for(var r=!0,l=0;l<i.length;l++)(!1&o||n>=o)&&Object.keys(a.O).every((function(e){return a.O[e](i[l])}))?i.splice(l--,1):(r=!1,o<n&&(n=o));if(r){e.splice(c--,1);var d=s();void 0!==d&&(t=d)}}return t}o=o||0;for(var c=e.length;c>0&&e[c-1][2]>o;c--)e[c]=e[c-1];e[c]=[i,s,o]}}(),function(){a.n=function(e){var t=e&&e.__esModule?function(){return e["default"]}:function(){return e};return a.d(t,{a:t}),t}}(),function(){a.d=function(e,t){for(var i in t)a.o(t,i)&&!a.o(e,i)&&Object.defineProperty(e,i,{enumerable:!0,get:t[i]})}}(),function(){a.g=function(){if("object"===typeof globalThis)return globalThis;try{return this||new Function("return this")()}catch(e){if("object"===typeof window)return window}}()}(),function(){a.o=function(e,t){return Object.prototype.hasOwnProperty.call(e,t)}}(),function(){a.r=function(e){"undefined"!==typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(e,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(e,"__esModule",{value:!0})}}(),function(){a.nmd=function(e){return e.paths=[],e.children||(e.children=[]),e}}(),function(){var e={524:0};a.O.j=function(t){return 0===e[t]};var t=function(t,i){var s,o,n=i[0],r=i[1],l=i[2],d=0;if(n.some((function(t){return 0!==e[t]}))){for(s in r)a.o(r,s)&&(a.m[s]=r[s]);if(l)var c=l(a)}for(t&&t(i);d<n.length;d++)o=n[d],a.o(e,o)&&e[o]&&e[o][0](),e[o]=0;return a.O(c)},i=self["webpackChunkform_vue"]=self["webpackChunkform_vue"]||[];i.forEach(t.bind(null,0)),i.push=t.bind(null,i.push.bind(i))}();var i=a.O(void 0,[504],(function(){return a(9740)}));i=a.O(i)})();
//# sourceMappingURL=app.d96d69b2.js.map
\ No newline at end of file
{"version":3,"file":"js/app.d96d69b2.js","mappings":"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","sources":["webpack://form_vue/./src/App.vue?a472","webpack://form_vue/./src/components/TimeRangeSelector.vue?7787","webpack://form_vue/src/components/TimeRangeSelector.vue","webpack://form_vue/./src/components/TimeRangeSelector.vue?a7a2","webpack://form_vue/./src/components/TimeRangeSelector.vue","webpack://form_vue/./src/components/VideoUploader.vue?d63c","webpack://form_vue/src/components/VideoUploader.vue","webpack://form_vue/./src/components/VideoUploader.vue?3203","webpack://form_vue/./src/components/VideoUploader.vue","webpack://form_vue/./src/components/ImageUploader.vue?f126","webpack://form_vue/src/components/ImageUploader.vue","webpack://form_vue/./src/components/ImageUploader.vue?4ab3","webpack://form_vue/./src/components/ImageUploader.vue","webpack://form_vue/./src/components/AudioUploader.vue?f0ff","webpack://form_vue/src/components/AudioUploader.vue","webpack://form_vue/./src/components/AudioUploader.vue?3abd","webpack://form_vue/./src/components/AudioUploader.vue","webpack://form_vue/src/App.vue","webpack://form_vue/./src/App.vue?6a4a","webpack://form_vue/./src/App.vue","webpack://form_vue/./src/api/dep.js","webpack://form_vue/./src/main.js","webpack://form_vue/webpack/bootstrap","webpack://form_vue/webpack/runtime/amd options","webpack://form_vue/webpack/runtime/chunk loaded","webpack://form_vue/webpack/runtime/compat get default export","webpack://form_vue/webpack/runtime/define property getters","webpack://form_vue/webpack/runtime/global","webpack://form_vue/webpack/runtime/hasOwnProperty shorthand","webpack://form_vue/webpack/runtime/make namespace object","webpack://form_vue/webpack/runtime/node module decorator","webpack://form_vue/webpack/runtime/jsonp chunk loading","webpack://form_vue/webpack/startup"],"sourcesContent":["var render = function render(){var _vm=this,_c=_vm._self._c;return _c('div',{staticStyle:{\"width\":\"450px\"},attrs:{\"id\":\"app\"}},[_c('el-form',{attrs:{\"label-width\":\"120px\"}},[_c('el-form-item',{attrs:{\"label\":\"视频\"}},[_c('VideoUploader',{on:{\"change\":_vm.save},model:{value:(_vm.itemData.url),callback:function ($$v) {_vm.$set(_vm.itemData, \"url\", $$v)},expression:\"itemData.url\"}})],1),_c('el-form-item',{attrs:{\"label\":\"静音视频(可选)\"}},[_c('VideoUploader',{on:{\"change\":_vm.save},model:{value:(_vm.itemData.muteVideoUrl),callback:function ($$v) {_vm.$set(_vm.itemData, \"muteVideoUrl\", $$v)},expression:\"itemData.muteVideoUrl\"}})],1),_c('el-form-item',{attrs:{\"label\":\"截图\"}},[_c('ImageUploader',{on:{\"change\":_vm.save},model:{value:(_vm.itemData.snapshotUrl),callback:function ($$v) {_vm.$set(_vm.itemData, \"snapshotUrl\", $$v)},expression:\"itemData.snapshotUrl\"}})],1),_c('el-form-item',{attrs:{\"label\":\"时长\"}},[_c('el-input',{on:{\"change\":_vm.save},model:{value:(_vm.itemData.name),callback:function ($$v) {_vm.$set(_vm.itemData, \"name\", $$v)},expression:\"itemData.name\"}})],1),_c('el-form-item',{attrs:{\"label\":\"大小\"}},[_c('el-input',{on:{\"change\":_vm.save},model:{value:(_vm.itemData.size),callback:function ($$v) {_vm.$set(_vm.itemData, \"size\", $$v)},expression:\"itemData.size\"}})],1)],1)],1)\n}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","var render = function render(){var _vm=this,_c=_vm._self._c;return _c('div',{staticClass:\"com-trs\"},[_c('div',{ref:\"refEcharts\",staticClass:\"chart-slider\"})])\n}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","<template>\n <div class=\"com-trs\">\n <div ref=\"refEcharts\" class=\"chart-slider\"></div>\n </div>\n</template>\n\n<script>\nexport default {\n name: 'TimeRangeSelector',\n props: {\n value: {\n type: Object,\n default: () => {\n return {\n start: 0,\n end: 100\n }\n }\n }\n },\n watch: {\n value: {\n handler(val) {\n this.parentValueChange = true;\n this.setTimeRange(val.start * 100, val.end * 100);\n },\n deep: true\n }\n },\n data() {\n return {\n insECharts: null,\n parentValueChange: false\n }\n },\n mounted() {\n this.initEcharts();\n },\n methods: {\n initEcharts() {\n if(!this.insECharts) {\n this.insECharts = this.$echarts.init(this.$refs.refEcharts);\n }\n\n const option = {\n grid: {\n left: 10,\n right: 10,\n top: 10,\n bottom: 10\n },\n tooltip: {},\n\n dataZoom: [\n {\n type: 'slider'\n },\n ],\n xAxis: { show: false } ,\n yAxis: { show: false },\n\n };\n\n this.insECharts.on('dataZoom', (evt) => {\n if(this.parentValueChange) {\n this.parentValueChange = false;\n return;\n }\n this.$emit('change', {\n start: evt.start / 100,\n end: evt.end / 100\n })\n this.$emit('input', {\n start: evt.start / 100,\n end: evt.end / 100\n })\n })\n\n this.insECharts.setOption(option);\n },\n setTimeRange(start, end) {\n this.insECharts.dispatchAction({\n type: 'dataZoom',\n // 可选,dataZoom 组件的 index,多个 dataZoom 组件时有用,默认为 0\n dataZoomIndex: 0,\n // 开始位置的百分比,0 - 100\n start: start,\n // 结束位置的百分比,0 - 100\n end: end,\n // // 开始位置的数值\n // startValue: number,\n // // 结束位置的数值\n // endValue: number\n });\n\n }\n },\n}\n</script>\n\n<!-- Add \"scoped\" attribute to limit CSS to this component only -->\n<style scoped>\n.com-trs {\n width: 100%;\n height: 50px;\n}\n\n.chart-slider {\n width: 100%;\n height: 100%;\n}\n</style>","import mod from \"-!../../node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./TimeRangeSelector.vue?vue&type=script&lang=js\"; export default mod; export * from \"-!../../node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./TimeRangeSelector.vue?vue&type=script&lang=js\"","import { render, staticRenderFns } from \"./TimeRangeSelector.vue?vue&type=template&id=291eb56d&scoped=true\"\nimport script from \"./TimeRangeSelector.vue?vue&type=script&lang=js\"\nexport * from \"./TimeRangeSelector.vue?vue&type=script&lang=js\"\nimport style0 from \"./TimeRangeSelector.vue?vue&type=style&index=0&id=291eb56d&prod&scoped=true&lang=css\"\n\n\n/* normalize component */\nimport normalizer from \"!../../node_modules/@vue/vue-loader-v15/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n \"291eb56d\",\n null\n \n)\n\nexport default component.exports","var render = function render(){var _vm=this,_c=_vm._self._c;return _c('div',{staticStyle:{\"position\":\"relative\",\"width\":\"360px\",\"height\":\"220px\"}},[_c('el-upload',{attrs:{\"data\":_vm.uploadData,\"disabled\":_vm.uploading || _vm.transcoding,\"action\":_vm.uploadUrl,\"drag\":\"\",\"before-upload\":_vm.customReq,\"accept\":\".mp4\",\"show-file-list\":false}},[_c('i',{directives:[{name:\"show\",rawName:\"v-show\",value:(!_vm.transcoding && !_vm.videoDone && !_vm.uploading),expression:\"!transcoding && !videoDone && !uploading\"}],staticClass:\"el-icon-upload\"}),_c('div',{directives:[{name:\"show\",rawName:\"v-show\",value:(!_vm.transcoding && !_vm.videoDone && !_vm.uploading),expression:\"!transcoding && !videoDone && !uploading\"}],staticClass:\"el-upload__text\"},[_vm._v(\"将MP4文件拖到此处,或\"),_c('em',[_vm._v(\"点击上传\")])]),(!_vm.transcoding && !_vm.videoDone && !_vm.uploading)?_c('div',{staticClass:\"el-upload__tip\",staticStyle:{\"text-align\":\"center\"},attrs:{\"slot\":\"tip\"},slot:\"tip\"},[_vm._v(\"只能上传mp4文件\")]):_vm._e(),(_vm.transcoding)?_c('div',{staticClass:\"el-upload__tip\",staticStyle:{\"text-align\":\"center\"},attrs:{\"slot\":\"tip\"},slot:\"tip\"},[_vm._v(\"视频后台转码中,请稍后...\")]):_vm._e(),_c('div',{directives:[{name:\"show\",rawName:\"v-show\",value:(!_vm.transcoding && !_vm.videoDone && _vm.uploading),expression:\"!transcoding && !videoDone && uploading\"}],staticStyle:{\"position\":\"absolute\",\"left\":\"50%\",\"top\":\"50%\",\"transform\":\"translate(-50%, -50%)\"}},[_c('el-progress',{attrs:{\"type\":\"circle\",\"percentage\":_vm.uploadPercentage,\"status\":_vm.uploadStatus}}),_c('div',[_vm._v(_vm._s(_vm.uploadSpeed))])],1),_c('div',{directives:[{name:\"show\",rawName:\"v-show\",value:(!_vm.transcoding && _vm.videoDone),expression:\"!transcoding && videoDone\"}]},[_c('video',{ref:\"refVideo\",attrs:{\"width\":\"360px\",\"height\":\"180px\",\"controls\":\"\",\"crossOrigin\":\"anonymous\"}},[_c('source',{attrs:{\"src\":`${_vm.videoUrl}`,\"type\":\"video/mp4\"}}),_vm._v(\" Your browser does not support the video tag. \")])]),(_vm.transcoding)?_c('div',[_c('div',{staticClass:\"mesh-loader\"},[_c('div',{staticClass:\"set-one\"},[_c('div',{staticClass:\"circle\"}),_c('div',{staticClass:\"circle\"})]),_c('div',{staticClass:\"set-two\"},[_c('div',{staticClass:\"circle\"}),_c('div',{staticClass:\"circle\"})])])]):_vm._e()]),(_vm.videoDone)?_c('div',{staticClass:\"buttons\"},[_c('el-button',{attrs:{\"type\":\"primary\",\"size\":\"mini\",\"icon\":\"el-icon-camera\"},on:{\"click\":_vm.captureVideo}}),_c('el-button',{attrs:{\"type\":\"primary\",\"size\":\"mini\",\"icon\":\"el-icon-download\"},on:{\"click\":_vm.download}}),_c('el-button',{attrs:{\"type\":\"danger\",\"size\":\"mini\",\"icon\":\"el-icon-delete\"},on:{\"click\":_vm.deleteVideo}})],1):_vm._e()],1)\n}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","<!-- 视频上传组件 -->\n<template>\n <div style=\"position: relative; width: 360px; height: 220px;\">\n <el-upload :data=\"uploadData\" :disabled=\"uploading || transcoding\" :action=\"uploadUrl\" drag :before-upload=\"customReq\" accept=\".mp4\" :show-file-list=\"false\">\n <!-- 上传提示 -->\n <i v-show=\"!transcoding && !videoDone && !uploading\" class=\"el-icon-upload\"></i>\n <div v-show=\"!transcoding && !videoDone && !uploading\" class=\"el-upload__text\">将MP4文件拖到此处,或<em>点击上传</em></div>\n <div v-if=\"!transcoding && !videoDone && !uploading\" style=\"text-align: center;\" class=\"el-upload__tip\" slot=\"tip\">只能上传mp4文件</div>\n <div v-if=\"transcoding\" style=\"text-align: center;\" class=\"el-upload__tip\" slot=\"tip\">视频后台转码中,请稍后...</div>\n\n <!-- 进度条 -->\n <div v-show=\"!transcoding && !videoDone && uploading\"\n style=\"position: absolute; left: 50%; top: 50%; transform: translate(-50%, -50%);\">\n <el-progress type=\"circle\" :percentage=\"uploadPercentage\" :status=\"uploadStatus\"></el-progress>\n <div>{{ uploadSpeed }}</div>\n </div>\n\n <!-- 预览视频 -->\n <div v-show=\"!transcoding && videoDone\">\n <video ref=\"refVideo\" width=\"360px\" height=\"180px\" controls crossOrigin=\"anonymous\">\n <source :src=\"`${videoUrl}`\" type=\"video/mp4\">\n Your browser does not support the video tag.\n </video>\n </div>\n\n <!-- 转换动画 -->\n <div v-if=\"transcoding\">\n <div class=\"mesh-loader\">\n <div class=\"set-one\">\n <div class=\"circle\"></div>\n <div class=\"circle\"></div>\n </div>\n <div class=\"set-two\">\n <div class=\"circle\"></div>\n <div class=\"circle\"></div>\n </div>\n </div>\n </div>\n </el-upload>\n\n <!-- 截图 下载 删除按钮 -->\n <div v-if=\"videoDone\" class=\"buttons\">\n <el-button type=\"primary\" size=\"mini\" icon=\"el-icon-camera\" @click=\"captureVideo\"></el-button>\n <el-button type=\"primary\" size=\"mini\" icon=\"el-icon-download\" @click=\"download\"></el-button>\n <el-button type=\"danger\" size=\"mini\" icon=\"el-icon-delete\" @click=\"deleteVideo\"></el-button>\n </div>\n </div>\n</template>\n\n<script>\nimport cryptoJs from 'crypto-js';\nimport axios from 'axios';\nimport SparkMD5 from 'spark-md5';\n\nexport default {\n name: 'VideoUploader',\n props: {\n value: {\n type: String,\n default: ''\n },\n },\n watch: {\n value: function (val, oldVal) {\n // 监测父组件的更新\n if(val) {\n // 查看是否资源已经存在\n this.httpHeadCall(val, async (exist) => {\n if (exist) {\n // 存在,直接标记视频完成\n this.videoDone = true\n } else {\n // 如果不存在则默认是正在后台转码状态\n this.transcoding = true;\n await this.checkResourceAvaliable();\n this.$message({\n type: 'success',\n message: '转换完成'\n });\n this.videoDone = true;\n this.transcoding = false;\n\n // 刷新视频源\n this.$refs.refVideo.load()\n }\n })\n }\n\n this.videoUrl = val\n },\n videoUrl: function() {\n this.$refs.refVideo.load()\n }\n },\n data() {\n return {\n // 上传地址\n uploadUrl: \"\",\n // 上传附带的DATA\n uploadData: \"\",\n\n // 上传中标记位\n uploading: false,\n // 转码中\n transcoding: false,\n // 视频是否上传完成\n videoDone: false,\n\n // 上传进度\n uploadPercentage: 0,\n // 上传进度条状态 null success\n uploadStatus: null,\n // 上传速度\n uploadSpeed: \"0KB/s\",\n // 上传开始时间\n startTime: null,\n // 上传结束时间\n endTime: null,\n // 已经上传的文件大小\n loaded: 0,\n // 视频地址\n videoUrl: \"\",\n\n // 定时器ID\n setIntervalIds: [],\n setTimeoutIds: [],\n\n }\n },\n\n created() {\n // 获取上传地址\n this.uploadUrl = window.courseware.uploadVideoUrl();\n this.uploadData = window.courseware.uploadData();\n window['air'].getUploadVideoCallback = (url, data) => {\n this.uploadUrl = url;\n this.uploadData = data;\n };\n },\n\n mounted() {\n // 添加点击事件监听,防止点击视频画面自动播放。(点击视频画面可以重新上传视频)\n this.$refs.refVideo.addEventListener('click', () => {\n const stop = () => {\n this.$refs.refVideo.pause();\n this.$refs.refVideo.removeEventListener(\"play\", stop)\n }\n this.$refs.refVideo.addEventListener(\"play\", stop)\n });\n },\n\n methods: {\n // 解析文件名\n parseFileName(fileName) {\n const lastDotIndex = fileName.lastIndexOf('.');\n const name = fileName.substring(0, lastDotIndex);\n const ext = fileName.substring(lastDotIndex);\n return { name, ext };\n },\n\n // 重置上传变量\n resetUploadVars() {\n this.uploadPercentage = 0;\n this.uploadStatus = null;\n this.uploadSpeed = \"0KB/s\";\n this.startTime = null;\n this.endTime = null;\n this.loaded = 0;\n },\n\n // 发送HEAD请求 测试资源是否存在\n httpHeadCall(requsetUrl, callback) {\n let xhr = new XMLHttpRequest();\n try {\n xhr.onreadystatechange = () => {\n try {\n if (xhr.readyState == 4) {\n if ((xhr.status >= 200 && xhr.status < 400)) {\n callback(true);\n } else {\n callback(false);\n }\n }\n } catch (e) {\n callback(false);\n }\n };\n xhr.open(\"HEAD\", requsetUrl, true);\n xhr.send();\n xhr.timeout = 15000;\n xhr.onerror = (e) => {\n callback(false);\n };\n xhr.ontimeout = (e) => {\n callback(false);\n };\n } catch (e) {\n callback(false);\n }\n },\n\n // 上传文件\n async customReq(item) {\n const { name, ext } = this.parseFileName(item.name)\n if (ext !== '.mp4') {\n this.$message({\n type: 'error',\n message: '只能上传mp4文件'\n });\n return false\n }\n\n // 获取文件MD5\n const fileName = await this.getFileMD5(item);\n\n const protocolStr = document.location.protocol;\n const baseCDN = `${protocolStr}//teach.cdn.ireadabc.com`;\n const baseAPI = `${protocolStr}//openapi.iteachabc.com`;\n\n // 如果当前视频和新上传的视频是同一个,则不变。\n if(this.videoUrl == `${baseCDN}/${fileName}_h.mp4`) {\n this.$refs.refVideo.pause();\n this.$refs.refVideo.currentTime = 0;\n this.$message({\n type: 'success',\n message: '极速上传完成'\n })\n return\n }\n\n // 重置上传变量,并设置状态为上传中\n this.resetUploadVars();\n this.videoUrl = \"\";\n this.uploading = true;\n this.transcoding = false;\n this.videoDone = false;\n\n // 测试文件是否在服务上存在\n this.httpHeadCall(`${baseCDN}/${fileName}_h.mp4`, (exit) => {\n if(exit) {\n // 文件存在,极速上传完成。并标记为完成状态。\n this.uploadStatus = \"success\";\n this.videoUrl = `${baseCDN}/${fileName}_h.mp4`;\n this.$emit(\"input\", this.videoUrl);\n this.$emit('change', { url: this.videoUrl, file: item });\n this.$emit('success', { url: this.videoUrl, file: item });\n this.uploading = false;\n\n this.$message({\n type: 'success',\n message: '极速上传完成'\n })\n return\n }\n\n // 开始上传到OSS\n axios.get(`${baseAPI}/oss/timestamp`, {}).then(tmps => {\n const sign = cryptoJs.MD5(tmps + \"iplayABC2019\").toString();\n\n axios.get(`${baseAPI}/oss/signature`, { sign, tmps }).then((res) => {\n const serve = res.data.data;\n const formData = new FormData();\n formData.append('key', fileName + `.mp4`);\n formData.append('bucket', `iplayabc-worker-queue-videolmh`);\n formData.append('OSSAccessKeyId', serve.OSSAccessKeyId);\n formData.append('policy', serve.policy);\n formData.append('Signature', serve.signature);\n formData.append('success_action_status', '200');\n formData.append('file', item);\n\n item.action = `${protocolStr}//iplayabc-worker-queue-videolmh.oss-cn-beijing.aliyuncs.com`;\n\n // 标记开始时间\n this.startTime = new Date().getTime();\n this.uploadStatus = null\n axios({\n method: 'post',\n url: item.action,\n headers: { 'Access-Control-Allow-Origin': '*' },\n onUploadProgress: (progressEvent) => {\n // 更新上传进度\n this.uploadPercentage = Math.ceil(progressEvent.progress * 100);\n // 计算上传速率\n this.endTime = new Date().getTime();\n const timeDiff = this.endTime - this.startTime;\n this.startTime = new Date().getTime();\n if (timeDiff === 0) return;\n\n const sent = progressEvent.loaded - this.loaded;\n this.loaded = progressEvent.loaded;\n const speed = (sent / timeDiff) * 1000; // Convert to KB/s\n const spNum = Math.round(speed / 1024);\n if (spNum > 1024) {\n this.uploadSpeed = `${(spNum / 1024).toFixed(2)}MB/s`;\n } else {\n this.uploadSpeed = `${spNum}KB/s`;\n }\n\n this.$emit('onProgress', progressEvent);\n },\n data: formData\n }).then(async event => {\n // 上传完成,延迟隐藏状态\n const tid = setTimeout(() => {\n this.resetUploadVars();\n this.uploading = false;\n this.transcoding = true;\n this.videoDone = false;\n\n const idIndex = this.setTimeoutIds.indexOf(tid);\n if (idIndex > -1) {\n this.setTimeoutIds.splice(idIndex, 1);\n }\n }, 1000);\n\n // 编辑为成功状态\n this.uploadStatus = \"success\";\n this.videoUrl = `${baseCDN}/${fileName}_h.mp4`;\n\n this.$emit(\"input\", this.videoUrl);\n this.$emit('change', { url: this.videoUrl, file: item });\n this.$emit('success', { url: this.videoUrl, file: item });\n\n this.setTimeoutIds.push(tid);\n this.uploading = false;\n\n this.$message({\n type: 'info',\n message: '上传成功,开始转码...'\n });\n }).catch(err => {\n // 报错\n const tid = setTimeout(() => {\n this.uploading = false;\n this.transcoding = false;\n this.videoDone = false;\n const idIndex = this.setTimeoutIds.indexOf(tid);\n if (idIndex > -1) {\n this.setTimeoutIds.splice(idIndex, 1);\n }\n }, 1000);\n this.uploadStatus = \"error\";\n this.$emit('error', err);\n this.setTimeoutIds.push(tid);\n })\n });\n });\n })\n \n\n return false\n },\n\n // 检查资源是否可用\n checkResourceAvaliable() {\n return new Promise(resovle => {\n let intervalId = null;\n intervalId = setInterval(() => {\n this.httpHeadCall(this.videoUrl, (isSuccess) => {\n if (isSuccess) {\n if (intervalId) {\n const index = this.setIntervalIds.indexOf(intervalId)\n clearInterval(intervalId)\n this.setIntervalIds.splice(index, 1)\n }\n resovle(true)\n }\n });\n }, 800)\n this.setIntervalIds.push(intervalId)\n })\n },\n\n async download() {\n const url = this.videoUrl\n const fileName = url.split('/').pop()\n const response = await fetch(url) //发送GET请求\n if (response.ok) {\n const blob = await response.blob() //获取Blob对象\n const url = window.URL.createObjectURL(blob) //创建Blob对象的URL\n const link = document.createElement('a') //创建一个新的<a>元素\n link.href = url //设置<a>元素的href属性为Blob对象的URL\n link.download = fileName //设置下载文件的文件名\n document.body.appendChild(link) //将<a>元素添加到文档中\n link.click() //模拟点击<a>元素以触发文件下载\n this.$message({\n type: 'success',\n message: '下载完成'\n });\n } else {\n //处理API响应失败的情况,例如显示错误消息\n this.$message({\n type: 'error',\n message: '下载失败'\n });\n }\n },\n\n captureVideo() {\n const fullFileName = this.videoUrl.split('/').pop();\n const { name, ext } = this.parseFileName(fullFileName)\n const video = this.$refs.refVideo;\n\n const cvs = document.createElement('canvas');\n const ctx = cvs.getContext(\"2d\");\n cvs.width = video.videoWidth;\n cvs.height = video.videoHeight;\n ctx.drawImage(video, 0, 0, cvs.width, cvs.height);\n const screenshotDataUrl = cvs.toDataURL('image/png');\n\n const link = document.createElement('a') //创建一个新的<a>元素\n link.href = screenshotDataUrl //设置<a>元素的href属性为Blob对象的URL\n link.download = name + \"_\" + Math.floor(video.currentTime * 1000) + \".png\"//设置下载文件的文件名\n document.body.appendChild(link) //将<a>元素添加到文档中\n link.click() //模拟点击<a>元素以触发文件下载\n this.$message({\n type: 'success',\n message: '截图成功'\n });\n },\n\n deleteVideo() {\n this.$confirm('确定要删除吗?', '提示', {\n confirmButtonText: '确定',\n cancelButtonText: '取消',\n type: 'warning'\n }).then(() => {\n this.videoUrl = \"\";\n this.videoDone = false;\n this.$emit(\"input\", \"\");\n this.$emit('change', { url: this.videoUrl, file: null });\n }).catch(() => {\n this.$message({\n type: 'info',\n message: '已取消删除'\n });\n });\n },\n\n // 计算文件MD5\n getFileMD5(file) {\n return new Promise(resovle => {\n let fileReader = new FileReader();\n let Spark = new SparkMD5.ArrayBuffer();\n fileReader.readAsArrayBuffer(file);\n fileReader.onload = function (e) {\n Spark.append(e.target.result);\n let md5 = Spark.end();\n resovle(md5);\n }\n })\n },\n },\n\n // 组件销毁时清除定时器\n beforeDestroy() {\n this.setTimeoutIds.forEach(tid => {\n clearTimeout(tid);\n });\n this.setIntervalIds.forEach(iid => {\n clearInterval(iid)\n })\n }\n}\n</script>\n\n<style scoped>\n.buttons {\n text-align: center\n}\n\n.buttons .el-button {\n padding: 4px 12px;\n font-size: 18px;\n}\n\n/* MESH LOADER */\n\n.mesh-loader {\n overflow: hidden;\n height: inherit;\n width: inherit;\n}\n\n.mesh-loader .circle {\n width: 10px;\n height: 10px;\n position: absolute;\n background: #f44336;\n border-radius: 50%;\n margin: -5px;\n -webkit-animation: mesh 3s ease-in-out infinite -1.5s;\n animation: mesh 3s ease-in-out infinite -1.5s;\n}\n\n.mesh-loader>div .circle:last-child {\n -webkit-animation-delay: 0s;\n animation-delay: 0s;\n}\n\n.mesh-loader>div {\n position: absolute;\n top: 50%;\n left: 50%;\n}\n\n.mesh-loader>div:last-child {\n -webkit-transform: rotate(90deg);\n -ms-transform: rotate(90deg);\n transform: rotate(90deg);\n}\n\n@keyframes mesh {\n 0% {\n -webkit-transform-origin: 50% -100%;\n transform-origin: 50% -100%;\n -webkit-transform: rotate(0);\n transform: rotate(0);\n }\n\n 50% {\n -webkit-transform-origin: 50% -100%;\n transform-origin: 50% -100%;\n -webkit-transform: rotate(360deg);\n transform: rotate(360deg);\n }\n\n 50.1% {\n -webkit-transform-origin: 50% 200%;\n transform-origin: 50% 200%;\n -webkit-transform: rotate(0deg);\n transform: rotate(0deg);\n }\n\n 100% {\n -webkit-transform-origin: 50% 200%;\n transform-origin: 50% 200%;\n -webkit-transform: rotate(360deg);\n transform: rotate(360deg);\n }\n}\n</style>","import mod from \"-!../../node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./VideoUploader.vue?vue&type=script&lang=js\"; export default mod; export * from \"-!../../node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./VideoUploader.vue?vue&type=script&lang=js\"","import { render, staticRenderFns } from \"./VideoUploader.vue?vue&type=template&id=effb3c56&scoped=true\"\nimport script from \"./VideoUploader.vue?vue&type=script&lang=js\"\nexport * from \"./VideoUploader.vue?vue&type=script&lang=js\"\nimport style0 from \"./VideoUploader.vue?vue&type=style&index=0&id=effb3c56&prod&scoped=true&lang=css\"\n\n\n/* normalize component */\nimport normalizer from \"!../../node_modules/@vue/vue-loader-v15/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n \"effb3c56\",\n null\n \n)\n\nexport default component.exports","var render = function render(){var _vm=this,_c=_vm._self._c;return _c('div',{staticStyle:{\"position\":\"relative\",\"width\":\"360px\",\"height\":\"180px\"}},[_c('el-upload',{attrs:{\"data\":_vm.uploadData,\"action\":_vm.uploadUrl,\"drag\":\"\",\"accept\":\".png,.jpg,.jpeg,.bmp,.gif\",\"show-file-list\":false,\"on-success\":_vm.handleUploadSuccess}},[_c('i',{directives:[{name:\"show\",rawName:\"v-show\",value:(!_vm.imageUrl),expression:\"!imageUrl\"}],staticClass:\"el-icon-upload\"}),_c('div',{directives:[{name:\"show\",rawName:\"v-show\",value:(!_vm.imageUrl),expression:\"!imageUrl\"}],staticClass:\"el-upload__text\"},[_vm._v(\"将文件拖到此处,或\"),_c('em',[_vm._v(\"点击上传\")]),_c('br'),_c('span',{staticStyle:{\"font-size\":\"14px\"}},[_vm._v(\"只能上传 \"),_c('strong',[_vm._v(\"jpg、png、jpeg、gif、bmp\")]),_vm._v(\" 文件\")])]),(_vm.imageUrl)?_c('div',{staticStyle:{\"width\":\"100%\",\"height\":\"100%\"}},[_c('el-image',{staticStyle:{\"width\":\"100%\",\"height\":\"100%\"},attrs:{\"src\":_vm.imageUrl,\"fit\":\"contain\"}})],1):_vm._e()]),(_vm.imageUrl)?_c('el-button-group',{staticClass:\"buttons\"},[_c('el-button',{attrs:{\"type\":\"ghost\",\"size\":\"mini\",\"icon\":\"el-icon-download\"},on:{\"click\":_vm.download}}),_c('el-button',{attrs:{\"type\":\"ghost\",\"size\":\"mini\",\"icon\":\"el-icon-delete\"},on:{\"click\":_vm.deleteImg}})],1):_vm._e()],1)\n}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","<!-- 视频上传组件 -->\n<template>\n <div style=\"position: relative; width: 360px; height: 180px;\">\n <el-upload :data=\"uploadData\" :action=\"uploadUrl\" drag accept=\".png,.jpg,.jpeg,.bmp,.gif\" :show-file-list=\"false\" :on-success=\"handleUploadSuccess\">\n <!-- 上传提示 -->\n <i v-show=\"!imageUrl\" class=\"el-icon-upload\"></i>\n <div v-show=\"!imageUrl\" class=\"el-upload__text\">将文件拖到此处,或<em>点击上传</em><br/><span style=\"font-size: 14px;\">只能上传 <strong>jpg、png、jpeg、gif、bmp</strong> 文件</span></div>\n\n <!-- 预览图片 -->\n <div v-if=\"imageUrl\" style=\"width: 100%; height: 100%;\">\n <el-image style=\"width: 100%; height: 100%\" :src=\"imageUrl\" fit=\"contain\"></el-image>\n </div>\n </el-upload>\n\n <!-- 下载 删除按钮 -->\n <el-button-group v-if=\"imageUrl\" class=\"buttons\">\n <el-button type=\"ghost\" size=\"mini\" icon=\"el-icon-download\" @click=\"download\"></el-button>\n <el-button type=\"ghost\" size=\"mini\" icon=\"el-icon-delete\" @click=\"deleteImg\"></el-button>\n </el-button-group>\n \n </div>\n</template>\n\n<script>\nimport SparkMD5 from 'spark-md5';\n\nexport default {\n name: 'ImageUploader',\n props: {\n value: {\n type: String,\n default: ''\n },\n },\n watch: {\n value: function (val, oldVal) {\n this.imageUrl = val\n }\n },\n data() {\n return {\n // 上传地址\n uploadUrl: \"\",\n // 上传附带的DATA\n uploadData: \"\",\n // 图片地址\n imageUrl: \"\",\n }\n },\n\n created() {\n // 获取上传地址\n this.uploadUrl = window.courseware.uploadUrl();\n this.uploadData = window.courseware.uploadData();\n window['air'].getUploadCallback = (url, data) => {\n this.uploadUrl = url;\n this.uploadData = data;\n };\n this.imageUrl = this.value;\n },\n\n methods: {\n handleUploadSuccess(e) {\n this.imageUrl = e.url;\n this.$emit(\"input\", this.imageUrl);\n this.$emit('change', { url: this.imageUrl});\n },\n\n async download() {\n const url = this.imageUrl\n const fileName = url.split('/').pop()\n const response = await fetch(url) //发送GET请求\n if (response.ok) {\n const blob = await response.blob() //获取Blob对象\n const url = window.URL.createObjectURL(blob) //创建Blob对象的URL\n const link = document.createElement('a') //创建一个新的<a>元素\n link.href = url //设置<a>元素的href属性为Blob对象的URL\n link.download = fileName //设置下载文件的文件名\n document.body.appendChild(link) //将<a>元素添加到文档中\n link.click() //模拟点击<a>元素以触发文件下载\n this.$message({\n type: 'success',\n message: '下载完成'\n });\n } else {\n //处理API响应失败的情况,例如显示错误消息\n this.$message({\n type: 'error',\n message: '下载失败'\n });\n }\n },\n\n\n deleteImg() {\n this.$confirm('确定要删除吗?', '提示', {\n confirmButtonText: '确定',\n cancelButtonText: '取消',\n type: 'warning'\n }).then(() => {\n this.imageUrl = \"\";\n this.$emit(\"input\", \"\");\n this.$emit('change', { url: this.imageUrl});\n }).catch(() => {\n // this.$message({\n // type: 'info',\n // message: '已取消删除'\n // });\n });\n },\n\n },\n\n}\n</script>\n\n<style scoped>\n.buttons {\n text-align: center;\n position: absolute;\n right: 0;\n top: 0;\n}\n\n.buttons .el-button {\n padding: 4px 12px;\n font-size: 18px;\n margin: 0;\n border-radius: initial;\n}\n</style>","import mod from \"-!../../node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./ImageUploader.vue?vue&type=script&lang=js\"; export default mod; export * from \"-!../../node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./ImageUploader.vue?vue&type=script&lang=js\"","import { render, staticRenderFns } from \"./ImageUploader.vue?vue&type=template&id=4f1d8e93&scoped=true\"\nimport script from \"./ImageUploader.vue?vue&type=script&lang=js\"\nexport * from \"./ImageUploader.vue?vue&type=script&lang=js\"\nimport style0 from \"./ImageUploader.vue?vue&type=style&index=0&id=4f1d8e93&prod&scoped=true&lang=css\"\n\n\n/* normalize component */\nimport normalizer from \"!../../node_modules/@vue/vue-loader-v15/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n \"4f1d8e93\",\n null\n \n)\n\nexport default component.exports","var render = function render(){var _vm=this,_c=_vm._self._c;return _c('div',{staticStyle:{\"position\":\"relative\",\"width\":\"360px\",\"height\":\"80px\"}},[_c('el-upload',{staticStyle:{\"height\":\"100px\"},attrs:{\"data\":_vm.uploadData,\"action\":_vm.uploadUrl,\"drag\":\"\",\"accept\":\".mp3\",\"show-file-list\":false,\"on-success\":_vm.handleUploadSuccess}},[_c('i',{directives:[{name:\"show\",rawName:\"v-show\",value:(!_vm.audioUrl),expression:\"!audioUrl\"}],staticClass:\"el-icon-upload\"}),_c('div',{directives:[{name:\"show\",rawName:\"v-show\",value:(!_vm.audioUrl),expression:\"!audioUrl\"}],staticClass:\"el-upload__text\"},[_vm._v(\"将MP3文件拖到此处,或\"),_c('em',[_vm._v(\"点击上传\")])]),(_vm.audioUrl)?_c('div',[_c('audio',{attrs:{\"src\":_vm.audioUrl,\"controls\":\"\"}})]):_vm._e()]),(_vm.audioUrl)?_c('div',{staticClass:\"buttons\"},[_c('el-button',{attrs:{\"type\":\"ghost\",\"size\":\"mini\",\"icon\":\"el-icon-delete\"},on:{\"click\":_vm.deleteAudio}})],1):_vm._e()],1)\n}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","<!-- 视频上传组件 -->\n<template>\n <div style=\"position: relative; width: 360px; height: 80px;\">\n <el-upload style=\"height: 100px;\" :data=\"uploadData\" :action=\"uploadUrl\" drag accept=\".mp3\" :show-file-list=\"false\" :on-success=\"handleUploadSuccess\">\n <!-- 上传提示 -->\n <i v-show=\"!audioUrl\" class=\"el-icon-upload\"></i>\n <div v-show=\"!audioUrl\" class=\"el-upload__text\">将MP3文件拖到此处,或<em>点击上传</em></div>\n\n <!-- 音频预览 -->\n <div v-if=\"audioUrl\" >\n <audio :src=\"audioUrl\" controls></audio>\n </div>\n </el-upload>\n\n <!-- 下载 删除按钮 -->\n <div v-if=\"audioUrl\" class=\"buttons\">\n <!-- <el-button type=\"ghost\" size=\"mini\" icon=\"el-icon-download\" @click=\"download\"></el-button> -->\n <el-button type=\"ghost\" size=\"mini\" icon=\"el-icon-delete\" @click=\"deleteAudio\"></el-button>\n </div>\n </div>\n</template>\n\n<script>\nimport SparkMD5 from 'spark-md5';\n\nexport default {\n name: 'ImageUploader',\n props: {\n value: {\n type: String,\n default: ''\n },\n },\n watch: {\n value: function (val, oldVal) {\n this.audioUrl = val\n }\n },\n data() {\n return {\n // 上传地址\n uploadUrl: \"\",\n // 上传附带的DATA\n uploadData: \"\",\n // 图片地址\n audioUrl: \"\",\n }\n },\n\n created() {\n // 获取上传地址\n this.uploadUrl = window.courseware.uploadUrl();\n this.uploadData = window.courseware.uploadData();\n window['air'].getUploadCallback = (url, data) => {\n this.uploadUrl = url;\n this.uploadData = data;\n };\n },\n\n methods: {\n handleUploadSuccess(e) {\n this.audioUrl = e.url;\n this.$emit(\"input\", this.audioUrl);\n this.$emit('change', { url: this.audioUrl});\n },\n\n async download() {\n const url = this.audioUrl\n const fileName = url.split('/').pop()\n const response = await fetch(url) //发送GET请求\n if (response.ok) {\n const blob = await response.blob() //获取Blob对象\n const url = window.URL.createObjectURL(blob) //创建Blob对象的URL\n const link = document.createElement('a') //创建一个新的<a>元素\n link.href = url //设置<a>元素的href属性为Blob对象的URL\n link.download = fileName //设置下载文件的文件名\n document.body.appendChild(link) //将<a>元素添加到文档中\n link.click() //模拟点击<a>元素以触发文件下载\n this.$message({\n type: 'success',\n message: '下载完成'\n });\n } else {\n //处理API响应失败的情况,例如显示错误消息\n this.$message({\n type: 'error',\n message: '下载失败'\n });\n }\n },\n\n\n deleteAudio() {\n this.$confirm('确定要删除吗?', '提示', {\n confirmButtonText: '确定',\n cancelButtonText: '取消',\n type: 'warning'\n }).then(() => {\n this.audioUrl = \"\";\n this.$emit(\"input\", \"\");\n this.$emit('change', { url: this.audioUrl});\n }).catch(() => {\n // this.$message({\n // type: 'info',\n // message: '已取消删除'\n // });\n });\n },\n\n },\n\n}\n</script>\n\n<style scoped>\n::v-deep .el-upload {\n height: 80px;\n}\n\n::v-deep .el-upload-dragger {\n height: 80px;\n border: 1px dashed #d9d9d9;\n border-radius: 6px;\n /* background-color: #f7f7f7; */\n color: #8c939d;\n font-size: 14px;\n display: flex;\n justify-content: center;\n align-items: center;\n}\n\n::v-deep .el-icon-upload {\n font-size: 36px;\n color: #c0c4cc;\n margin: 0 10px;\n}\n\n.buttons {\n text-align: center;\n position: absolute;\n right: 0;\n top: 0;\n}\n\n.el-button {\n padding: 4px 12px;\n font-size: 18px;\n margin: 0;\n border-radius: 0 0 0 20px;\n}\n</style>","import mod from \"-!../../node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./AudioUploader.vue?vue&type=script&lang=js\"; export default mod; export * from \"-!../../node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./AudioUploader.vue?vue&type=script&lang=js\"","import { render, staticRenderFns } from \"./AudioUploader.vue?vue&type=template&id=5c385f59&scoped=true\"\nimport script from \"./AudioUploader.vue?vue&type=script&lang=js\"\nexport * from \"./AudioUploader.vue?vue&type=script&lang=js\"\nimport style0 from \"./AudioUploader.vue?vue&type=style&index=0&id=5c385f59&prod&scoped=true&lang=css\"\n\n\n/* normalize component */\nimport normalizer from \"!../../node_modules/@vue/vue-loader-v15/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n \"5c385f59\",\n null\n \n)\n\nexport default component.exports","<template>\n <div id=\"app\" style=\"width: 450px;\">\n <el-form label-width=\"120px\">\n <el-form-item label=\"视频\">\n <VideoUploader v-model=\"itemData.url\" @change=\"save\"/>\n </el-form-item>\n <el-form-item label=\"静音视频(可选)\">\n <VideoUploader v-model=\"itemData.muteVideoUrl\" @change=\"save\"/>\n </el-form-item>\n <el-form-item label=\"截图\">\n <ImageUploader v-model=\"itemData.snapshotUrl\" @change=\"save\"/>\n </el-form-item>\n <el-form-item label=\"时长\">\n <el-input v-model=\"itemData.name\" @change=\"save\"></el-input>\n </el-form-item>\n <el-form-item label=\"大小\">\n <el-input v-model=\"itemData.size\" @change=\"save\"></el-input>\n </el-form-item>\n </el-form>\n </div>\n</template>\n\n<script>\nimport TimeRangeSelector from './components/TimeRangeSelector.vue'\nimport { getSyllabusListById, getFirstCoursewareBySyllId, getPidPathName } from '@/api/syllabus'\nimport VideoUploader from './components/VideoUploader.vue'\nimport ImageUploader from './components/ImageUploader.vue'\nimport AudioUploader from './components/AudioUploader.vue'\n\nexport default {\n name: 'App',\n components: {\n TimeRangeSelector,\n VideoUploader,\n ImageUploader,\n AudioUploader\n },\n data() {\n return {\n itemData: {\n video_url: \"\",\n image_url: \"\",\n audio_url: \"\"\n }\n };\n },\n async mounted() {\n this.getData();\n },\n methods: {\n async getData() {\n const res = await this.$getData();\n if(!res) {\n // 默认数据\n this.itemData = {\n \"url\": \"https://teach.cdn.ireadabc.com/b688da9ac31ccbcd83f75f3336728cfb.mp4\",\n \"duration\": 63.621995,\n \"size\": 5803623,\n \"snapshotUrl\": \"https://teach.cdn.ireadabc.com/4b05b78396aae7e9fe146669ccd38052.jpg\",\n \"muteVideoUrl\": \"https://teach.cdn.ireadabc.com/bec06eec1ce7488efd56130736d20900.mp4\"\n }\n } else {\n this.itemData = res\n }\n },\n\n // 保存数据\n save() {\n this.$message({\n message: '保存成功',\n type: 'success',\n duration: 1000\n })\n this.$setData(this.itemData)\n }\n }\n}\n</script>\n\n<style>\nbody,\nhtml {\n margin: 0;\n padding: 0;\n height: 100%;\n overflow: hidden;\n background-color: #FFFFFF;\n}\n\n#app {}\n</style>\n","import mod from \"-!../node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./App.vue?vue&type=script&lang=js\"; export default mod; export * from \"-!../node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./App.vue?vue&type=script&lang=js\"","import { render, staticRenderFns } from \"./App.vue?vue&type=template&id=0e576e0a\"\nimport script from \"./App.vue?vue&type=script&lang=js\"\nexport * from \"./App.vue?vue&type=script&lang=js\"\nimport style0 from \"./App.vue?vue&type=style&index=0&id=0e576e0a&prod&lang=css\"\n\n\n/* normalize component */\nimport normalizer from \"!../node_modules/@vue/vue-loader-v15/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n null,\n null\n \n)\n\nexport default component.exports","const actionName = \"getDPEData\";\n\nconst commonPostMessage = function (messageObj) {\n const obj = { ...messageObj, urlParams: window.location.search, origin: \"template\" }\n window.parent.postMessage(obj, '*');\n};\n\nexport const getDPEData = async function () {\n return new Promise((resolve, reject) => {\n let processed = false;\n let timeoutId = setTimeout(() => {\n if (!processed) {\n window.removeEventListener(\"message\", eventCallback);\n reject(\"timeout\")\n }\n }, 5000);\n\n const eventCallback = (e) => {\n if(e.data.action !== actionName) {\n return;\n }\n processed = true;\n window.removeEventListener(\"message\", eventCallback);\n clearTimeout(timeoutId);\n try {\n const data = JSON.parse(e.data.data);\n resolve(data.data)\n } catch (error) {\n console.error(\"Error parsing DPE data\", error);\n resolve(null)\n }\n }\n commonPostMessage({ action: actionName, data: window.location.search }); \n window.addEventListener(\"message\", eventCallback)\n })\n}","import Vue from 'vue'\nimport ElementUI from 'element-ui';\nimport 'element-ui/lib/theme-chalk/index.css';\nimport App from './App.vue'\nimport * as echarts from 'echarts';\nimport { getDPEData } from './api/dep'\n\nVue.use(ElementUI);\n\nVue.config.productionTip = false\nVue.prototype.$getData = () => {\n console.log(\"===== getData =====\");\n return new Promise((resolve, reject) => {\n (window).courseware.getData((data) => {\n console.log(data);\n resolve(data)\n }, \"default_key\")\n })\n}\n\nVue.prototype.$getDPEData = getDPEData;\n\nVue.prototype.$setData = (data) => {\n console.log(\"===== setData =====\");\n console.log(data);\n (window).courseware.setData(data, null, \"default_key\")\n}\n\nVue.prototype.$echarts = echarts\n\nnew Vue({\n render: function (h) { return h(App) },\n}).$mount('#app')\n","// The module cache\nvar __webpack_module_cache__ = {};\n\n// The require function\nfunction __webpack_require__(moduleId) {\n\t// Check if module is in cache\n\tvar cachedModule = __webpack_module_cache__[moduleId];\n\tif (cachedModule !== undefined) {\n\t\treturn cachedModule.exports;\n\t}\n\t// Create a new module (and put it into the cache)\n\tvar module = __webpack_module_cache__[moduleId] = {\n\t\tid: moduleId,\n\t\tloaded: false,\n\t\texports: {}\n\t};\n\n\t// Execute the module function\n\t__webpack_modules__[moduleId].call(module.exports, module, module.exports, __webpack_require__);\n\n\t// Flag the module as loaded\n\tmodule.loaded = true;\n\n\t// Return the exports of the module\n\treturn module.exports;\n}\n\n// expose the modules object (__webpack_modules__)\n__webpack_require__.m = __webpack_modules__;\n\n","__webpack_require__.amdO = {};","var deferred = [];\n__webpack_require__.O = function(result, chunkIds, fn, priority) {\n\tif(chunkIds) {\n\t\tpriority = priority || 0;\n\t\tfor(var i = deferred.length; i > 0 && deferred[i - 1][2] > priority; i--) deferred[i] = deferred[i - 1];\n\t\tdeferred[i] = [chunkIds, fn, priority];\n\t\treturn;\n\t}\n\tvar notFulfilled = Infinity;\n\tfor (var i = 0; i < deferred.length; i++) {\n\t\tvar chunkIds = deferred[i][0];\n\t\tvar fn = deferred[i][1];\n\t\tvar priority = deferred[i][2];\n\t\tvar fulfilled = true;\n\t\tfor (var j = 0; j < chunkIds.length; j++) {\n\t\t\tif ((priority & 1 === 0 || notFulfilled >= priority) && Object.keys(__webpack_require__.O).every(function(key) { return __webpack_require__.O[key](chunkIds[j]); })) {\n\t\t\t\tchunkIds.splice(j--, 1);\n\t\t\t} else {\n\t\t\t\tfulfilled = false;\n\t\t\t\tif(priority < notFulfilled) notFulfilled = priority;\n\t\t\t}\n\t\t}\n\t\tif(fulfilled) {\n\t\t\tdeferred.splice(i--, 1)\n\t\t\tvar r = fn();\n\t\t\tif (r !== undefined) result = r;\n\t\t}\n\t}\n\treturn result;\n};","// getDefaultExport function for compatibility with non-harmony modules\n__webpack_require__.n = function(module) {\n\tvar getter = module && module.__esModule ?\n\t\tfunction() { return module['default']; } :\n\t\tfunction() { return module; };\n\t__webpack_require__.d(getter, { a: getter });\n\treturn getter;\n};","// define getter functions for harmony exports\n__webpack_require__.d = function(exports, definition) {\n\tfor(var key in definition) {\n\t\tif(__webpack_require__.o(definition, key) && !__webpack_require__.o(exports, key)) {\n\t\t\tObject.defineProperty(exports, key, { enumerable: true, get: definition[key] });\n\t\t}\n\t}\n};","__webpack_require__.g = (function() {\n\tif (typeof globalThis === 'object') return globalThis;\n\ttry {\n\t\treturn this || new Function('return this')();\n\t} catch (e) {\n\t\tif (typeof window === 'object') return window;\n\t}\n})();","__webpack_require__.o = function(obj, prop) { return Object.prototype.hasOwnProperty.call(obj, prop); }","// define __esModule on exports\n__webpack_require__.r = function(exports) {\n\tif(typeof Symbol !== 'undefined' && Symbol.toStringTag) {\n\t\tObject.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });\n\t}\n\tObject.defineProperty(exports, '__esModule', { value: true });\n};","__webpack_require__.nmd = function(module) {\n\tmodule.paths = [];\n\tif (!module.children) module.children = [];\n\treturn module;\n};","// no baseURI\n\n// object to store loaded and loading chunks\n// undefined = chunk not loaded, null = chunk preloaded/prefetched\n// [resolve, reject, Promise] = chunk loading, 0 = chunk loaded\nvar installedChunks = {\n\t524: 0\n};\n\n// no chunk on demand loading\n\n// no prefetching\n\n// no preloaded\n\n// no HMR\n\n// no HMR manifest\n\n__webpack_require__.O.j = function(chunkId) { return installedChunks[chunkId] === 0; };\n\n// install a JSONP callback for chunk loading\nvar webpackJsonpCallback = function(parentChunkLoadingFunction, data) {\n\tvar chunkIds = data[0];\n\tvar moreModules = data[1];\n\tvar runtime = data[2];\n\t// add \"moreModules\" to the modules object,\n\t// then flag all \"chunkIds\" as loaded and fire callback\n\tvar moduleId, chunkId, i = 0;\n\tif(chunkIds.some(function(id) { return installedChunks[id] !== 0; })) {\n\t\tfor(moduleId in moreModules) {\n\t\t\tif(__webpack_require__.o(moreModules, moduleId)) {\n\t\t\t\t__webpack_require__.m[moduleId] = moreModules[moduleId];\n\t\t\t}\n\t\t}\n\t\tif(runtime) var result = runtime(__webpack_require__);\n\t}\n\tif(parentChunkLoadingFunction) parentChunkLoadingFunction(data);\n\tfor(;i < chunkIds.length; i++) {\n\t\tchunkId = chunkIds[i];\n\t\tif(__webpack_require__.o(installedChunks, chunkId) && installedChunks[chunkId]) {\n\t\t\tinstalledChunks[chunkId][0]();\n\t\t}\n\t\tinstalledChunks[chunkId] = 0;\n\t}\n\treturn __webpack_require__.O(result);\n}\n\nvar chunkLoadingGlobal = self[\"webpackChunkform_vue\"] = self[\"webpackChunkform_vue\"] || [];\nchunkLoadingGlobal.forEach(webpackJsonpCallback.bind(null, 0));\nchunkLoadingGlobal.push = webpackJsonpCallback.bind(null, chunkLoadingGlobal.push.bind(chunkLoadingGlobal));","// startup\n// Load entry module and return exports\n// This entry module depends on other loaded chunks and execution need to be delayed\nvar __webpack_exports__ = __webpack_require__.O(undefined, [504], function() { return __webpack_require__(9740); })\n__webpack_exports__ = __webpack_require__.O(__webpack_exports__);\n"],"names":["render","_vm","this","_c","_self","staticStyle","attrs","on","save","model","value","itemData","callback","$$v","$set","expression","staticRenderFns","staticClass","ref","name","props","type","Object","default","start","end","watch","handler","val","parentValueChange","setTimeRange","deep","data","insECharts","mounted","initEcharts","methods","$echarts","init","$refs","refEcharts","option","grid","left","right","top","bottom","tooltip","dataZoom","xAxis","show","yAxis","evt","$emit","setOption","dispatchAction","dataZoomIndex","component","uploadData","uploading","transcoding","uploadUrl","customReq","directives","rawName","videoDone","_v","_e","slot","uploadPercentage","uploadStatus","_s","uploadSpeed","videoUrl","captureVideo","download","deleteVideo","String","oldVal","httpHeadCall","async","exist","checkResourceAvaliable","$message","message","refVideo","load","startTime","endTime","loaded","setIntervalIds","setTimeoutIds","created","window","courseware","uploadVideoUrl","getUploadVideoCallback","url","addEventListener","stop","pause","removeEventListener","parseFileName","fileName","lastDotIndex","lastIndexOf","substring","ext","resetUploadVars","requsetUrl","xhr","XMLHttpRequest","onreadystatechange","readyState","status","e","open","send","timeout","onerror","ontimeout","item","getFileMD5","protocolStr","document","location","protocol","baseCDN","baseAPI","currentTime","exit","file","axios","get","then","tmps","sign","toString","res","serve","formData","FormData","append","OSSAccessKeyId","policy","signature","action","Date","getTime","method","headers","onUploadProgress","progressEvent","Math","ceil","progress","timeDiff","sent","speed","spNum","round","toFixed","tid","setTimeout","idIndex","indexOf","splice","push","catch","err","Promise","resovle","intervalId","setInterval","isSuccess","index","clearInterval","split","pop","response","fetch","ok","blob","URL","createObjectURL","link","createElement","href","body","appendChild","click","fullFileName","video","cvs","ctx","getContext","width","videoWidth","height","videoHeight","drawImage","screenshotDataUrl","toDataURL","floor","$confirm","confirmButtonText","cancelButtonText","fileReader","FileReader","Spark","readAsArrayBuffer","onload","target","result","md5","beforeDestroy","forEach","clearTimeout","iid","handleUploadSuccess","imageUrl","deleteImg","getUploadCallback","audioUrl","deleteAudio","components","TimeRangeSelector","VideoUploader","ImageUploader","AudioUploader","video_url","image_url","audio_url","getData","$getData","duration","$setData","actionName","commonPostMessage","messageObj","obj","urlParams","search","origin","parent","postMessage","getDPEData","resolve","reject","processed","timeoutId","eventCallback","JSON","parse","error","console","use","config","productionTip","prototype","log","$getDPEData","setData","echarts","h","App","$mount","__webpack_module_cache__","__webpack_require__","moduleId","cachedModule","undefined","exports","module","id","__webpack_modules__","call","m","amdO","deferred","O","chunkIds","fn","priority","notFulfilled","Infinity","i","length","fulfilled","j","keys","every","key","r","n","getter","__esModule","d","a","definition","o","defineProperty","enumerable","g","globalThis","Function","prop","hasOwnProperty","Symbol","toStringTag","nmd","paths","children","installedChunks","chunkId","webpackJsonpCallback","parentChunkLoadingFunction","moreModules","runtime","some","chunkLoadingGlobal","self","bind","__webpack_exports__"],"sourceRoot":""}
\ No newline at end of file
...@@ -56,6 +56,7 @@ export default { ...@@ -56,6 +56,7 @@ export default {
this.uploadUrl = url; this.uploadUrl = url;
this.uploadData = data; this.uploadData = data;
}; };
this.imageUrl = this.value;
}, },
methods: { methods: {
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment