2026-01-09 16:33:18 +08:00
|
|
|
import{__decorate,__rest}from"tslib";import{SuperComponent,wxComponent}from"../common/src/index";import props from"./props";import config from"../common/config";import{isOverSize,isWxWork,isPC}from"../common/utils";import{isObject}from"../common/validator";const{prefix:prefix}=config,name=`${prefix}-upload`;let Upload=class extends SuperComponent{constructor(){super(...arguments),this.externalClasses=[`${prefix}-class`],this.options={multipleSlots:!0},this.data={classPrefix:name,prefix:prefix,current:!1,proofs:[],customFiles:[],customLimit:0,column:4,dragBaseData:{},rows:0,dragWrapStyle:"",dragList:[],dragging:!0,dragLayout:!1},this.properties=props,this.controlledProps=[{key:"files",event:"success"}],this.observers={"files, max, draggable"(t,e){this.handleLimit(t,e)},gridConfig(){this.updateGrid()}},this.lifetimes={ready(){this.handleLimit(this.data.customFiles,this.data.max),this.updateGrid()}},this.methods={getPreviewMediaSources(){const t=[];return this.data.customFiles.forEach(e=>{const i={url:e.url,type:e.type,poster:e.thumb||void 0};t.push(i)}),t},onPreview(t){this.onFileClick(t);const{preview:e}=this.properties;if(!e)return;this.data.customFiles.some(t=>"video"===t.type)?this.onPreviewMedia(t):this.onPreviewImage(t)},onPreviewImage(t){var e;const{index:i}=t.currentTarget.dataset,s=this.data.customFiles.filter(t=>-1!==t.percent).map(t=>t.url),r=null===(e=this.data.customFiles[i])||void 0===e?void 0:e.url;wx.previewImage({urls:s,current:r,fail(){wx.showToast({title:"预览图片失败",icon:"none"})}})},onPreviewMedia(t){const{index:e}=t.currentTarget.dataset,i=this.getPreviewMediaSources();wx.previewMedia({sources:i,current:e,fail(){wx.showToast({title:"预览视频失败",icon:"none"})}})},uploadFiles(t){return Promise.resolve().then(()=>{const e=this.data.requestMethod(t);return e instanceof Promise?e:Promise.resolve({})})},startUpload(t){return"function"==typeof this.data.requestMethod?this.uploadFiles(t).then(()=>{t.forEach(t=>{t.percent=100}),this.triggerSuccessEvent(t)}).catch(t=>{this.triggerFailEvent(t)}):(this.triggerSuccessEvent(t),this.handleLimit(this.data.customFiles,this.data.max),Promise.resolve())},onAddTap(){const{disabled:t,mediaType:e,source:i}=this.properties;t||("media"===i?this.chooseMedia(e):this.chooseMessageFile(e))},chooseMedia(t){const{customLimit:e}=this.data,{config:i,sizeLimit:s}=this.properties;isWxWork||isPC?wx.chooseImage(Object.assign(Object.assign({count:Math.min(20,e)},i),{success:t=>{const e=[];t.tempFiles.forEach(t=>{const{path:i,size:r}=t;if(this.checkFileSize(r,s,"image"))return;const a=this.getRandFileName(i);e.push({name:a,type:"image",url:i,size:r,percent:0})}),this.afterSelect(e)},fail:t=>{this.triggerFailEvent(t)},complete:t=>{this.triggerEvent("complete",t)}})):wx.chooseMedia(Object.assign(Object.assign({count:Math.min(20,e),mediaType:t},i),{success:e=>{const i=[];e.tempFiles.forEach(e=>{const{size:r,fileType:a,tempFilePath:o,width:n,height:l,duration:c,thumbTempFilePath:h}=e,g=__rest(e,["size","fileType","tempFilePath","width","height","duration","thumbTempFilePath"]);if(this.checkFileSize(r,s,a))return;const d=this.getRandFileName(o);i.push(Object.assign({name:d,type:this.getFileType(t,o,a),url:o,size:r,width:n,height:l,duration:c,thumb:h,percent:0},g))}),this.afterSelect(i)},fail:t=>{this.triggerFailEvent(t)},complete:t=>{this.triggerEvent("complete",t)}}))},chooseMessageFile(t){const{customLimit:e}=this.data,{config:i,sizeLimit:s}=this.properties;wx.chooseMessageFile(Object.assign(Object.assign({count:Math.min(100,e),type:Array.isArray(t)?"all":t},i),{success:e=>{const i=[];e.tempFiles.forEach(e=>{const{size:r,type:a,path:o}=e,n=__rest(e,["size","type","path"]);if(this.checkFileSize(r,s,a))return;const l=this.getRandFileName(o);i.push(Object.assign({name:l,type:this.getFileType(t,o,a),url:o,size:r,percent:0},n))}),this.afterSelect(i)},fail:t=>this.triggerFailEvent(t),complete:t=>this.triggerEvent("complete",t)}))},afterSelect(t){this._trigger("select-change",{files:[...this.data.customFiles],currentSelectedFiles:[t]}),this._trigger("add",{files:t}),this.startUploa
|