| 1 |
- import{_ as t,a as e,o as i,f as s,g as a,i as l,n,h as r,l as o,F as h,j as u,m,k as d,N as c,M as p,p as g,t as f,aJ as y,b2 as w,P as x,Y as L,aR as C,aj as I,ak as b,aM as P}from"./index-CU9Dsx61.js";const k=t({name:"ImageUploader",props:{maxCount:{type:Number,default:6},defaultList:{type:Array,default:()=>[]},width:{type:[String,Number],default:""},height:{type:[String,Number],default:""},gap:{type:[String,Number],default:"20rpx"},containerPadding:{type:[String,Number],default:"20rpx"},isPreview:{type:Boolean,default:!1},imgCenter:{type:Boolean,default:!0}},data(){return{imageList:[...this.defaultList],uploading:!1,systemInfo:{}}},created(){this.systemInfo=P()},computed:{itemWidth(){if(this.width)return"number"==typeof this.width?`${this.width}px`:this.width;const t=this.systemInfo.screenWidth||this.systemInfo.windowWidth,e=this.getPixelValue(this.gap);return`${(t-2*this.getPixelValue(this.containerPadding)-2*e)/3}px`},itemHeight(){return this.height?"number"==typeof this.height?`${this.height}px`:this.height:this.itemWidth},showUploadBtn(){return this.imageList.length<this.maxCount&&!this.uploading}},watch:{defaultList(t){this.imageList=[...t]},imageList(t){this.$emit("change",[...t])}},methods:{getPixelValue(t){if("number"==typeof t)return t;if(t.includes("rpx")){return parseFloat(t)/(750/this.systemInfo.windowWidth)}return parseFloat(t)},lastInRow:t=>(t+1)%3==0,chooseImage(){if(this.uploading)return;if(this.imageList.length>=this.maxCount)return void L({title:`最多只能上传${this.maxCount}张图片`,icon:"none"});const t=this.maxCount-this.imageList.length;C({count:t,sizeType:["compressed"],sourceType:["album","camera"],success:async t=>{if(I(),this.uploading=!0,t.tempFiles&&t.tempFiles.length>0)try{const e=t.tempFilePaths.map((t=>this.uploadFile(t))),i=(await Promise.all(e)).filter((t=>t&&t.success));this.imageList=[...this.imageList,...i.map((t=>t.data))]}catch(e){console.error("图片上传失败:",e),L({title:"图片上传失败",icon:"none"})}finally{b(),this.uploading=!1}else this.uploading=!1},fail:t=>{console.error("选择图片失败:",t),this.uploading=!1},complete:()=>{this.uploading=!1}})},uploadFile:t=>new Promise((e=>{w({url:"http://sportapi.sp2509.cc/api/upload/image",filePath:t,name:"file",header:{Authorization:x("token")},success:t=>{try{const i=JSON.parse(t.data);1===i.code?e({success:!0,data:i.data.url}):e({success:!1,error:i.msg||"上传失败"})}catch(i){e({success:!1,error:"解析响应失败"})}},fail:t=>{e({success:!1,error:t})}})})),handleDelete(t){this.imageList.splice(t,1)},previewImage(t){if(!this.isPreview)return;const e=this.imageList.map((t=>t.url||t));y({current:e[t],urls:e})},getImages(){return[...this.imageList]},clear(){this.imageList=[]},setImages(t){this.imageList=[...t]}}},[["render",function(t,y,w,x,L,C){const I=m,b=c,P=l,k=p;return i(),e(P,{class:"image-uploader-container"},{default:s((()=>[a(P,{class:"image-uploader",style:n({display:1===w.maxCount&&w.imgCenter?"flex":""})},{default:s((()=>[a(P,{class:"image-list"},{default:s((()=>[(i(!0),r(h,null,u(L.imageList,((t,l)=>(i(),e(P,{key:l,class:"image-item",style:n({width:C.itemWidth,height:C.itemHeight,marginRight:C.lastInRow(l)?0:w.gap})},{default:s((()=>[a(I,{src:t.url||t,mode:"aspectFill",class:"image-content",onClick:t=>C.previewImage(l)},null,8,["src","onClick"]),a(P,{class:"delete-btn",onClick:d((t=>C.handleDelete(l)),["stop"])},{default:s((()=>[a(b,{name:"trash-fill",size:"26",color:"#fff"})])),_:2},1032,["onClick"])])),_:2},1032,["style"])))),128)),C.showUploadBtn?(i(),e(P,{key:0,class:"upload-btn",style:n({width:C.itemWidth,height:C.itemHeight}),onClick:C.chooseImage},{default:s((()=>[a(b,{name:"plus",size:"50",color:"#999"}),a(k,{class:"upload-text"},{default:s((()=>[g(f(t.$t("上传图片")),1)])),_:1})])),_:1},8,["style","onClick"])):o("",!0)])),_:1})])),_:1},8,["style"])])),_:1})}],["__scopeId","data-v-f739bcff"]]);export{k as C};
|