| | |
| | | "use strict";const e=require("../../common/vendor.js"),a=require("../../stores/user.js");if(!Array){(e.resolveComponent("uni-icons")+e.resolveComponent("uni-popup")+e.resolveComponent("uni-file-picker"))()}Math||((()=>"../../node-modules/@dcloudio/uni-ui/lib/uni-icons/uni-icons.js")+(()=>"../../node-modules/@dcloudio/uni-ui/lib/uni-popup/uni-popup.js")+(()=>"../../node-modules/@dcloudio/uni-ui/lib/uni-file-picker/uni-file-picker.js"))();const l={__name:"index",props:{files:{type:Array,default:()=>[]},gradesFiles:{type:Array,default:()=>[]},readonly:{type:Boolean,default:!1},position:{type:Object,default:()=>({right:"30rpx",bottom:"200rpx"})},bgColor:{type:String,default:"#67AFAB"},maxCount:{type:Number,default:9},showGradeSlip:{type:Boolean,default:!1},isGradeRequired:{type:Boolean,default:!1}},emits:["update:files","update:gradesFiles","upload","preview","upload-grade","upload-base"],setup(l,{expose:o,emit:i}){const t=a.useUserStore(),s=l,n=i,r=e.ref(null),u=e.ref(null),p=e.ref([]),d=e.ref([]),c=e.ref(!0),g=e.ref("#67AFAB"),f=t.baseUrlHt,m=e.ref("base"),v=e.computed(()=>s.showGradeSlip?"base"===m.value?p.value:d.value:p.value),h=e.computed(()=>p.value.length+d.value.length);e.watch(()=>s.files,e=>{p.value=[...e]},{immediate:!0}),e.watch(()=>s.gradesFiles,e=>{d.value=[...e]},{immediate:!0});const y=e=>{if(!e)return"";if(e.startsWith("http://")||e.startsWith("https://"))try{const a=new URL(e);return`${f}${a.pathname}${a.search}${a.hash}`}catch(a){console.error("解析URL失败:",e,a);const l=e.match(/^(https?:\/\/[^\/]+)(\/.*)?$/);return l?`${f}${l[2]||""}`:e}return`${f}${e.startsWith("/")?"":"/"}${e}`},w={width:120,height:120,border:!1},b=["image/jpeg","image/png","image/gif","image/webp","image/bmp","image/svg+xml"],x=e=>{c.value=!e.show},F=e=>e&&b.includes(e)?"image":e&&e.includes("pdf")?"paperclip":e&&e.includes("word")?"file-word":e&&e.includes("excel")?"file-excel":e&&e.includes("powerpoint")?"file-ppt":"file",j=e=>e&&b.includes(e)?g.value:e&&e.includes("pdf")?"#ff4d4f":e&&e.includes("word")?"#2b579a":e&&e.includes("excel")?"#217346":e&&e.includes("powerpoint")?"#b7472a":"#666",G=e=>e?e<1024?`${e}B`:e<1048576?`${(e/1024).toFixed(1)}KB`:`${(e/1048576).toFixed(1)}MB`:"",S=()=>{r.value&&r.value.open()},$=()=>{r.value&&r.value.close()},z=()=>{var e;null==(e=u.value)||e.choose()},C=e=>{if(!e)return"application/octet-stream";return{jpg:"image/jpeg",jpeg:"image/jpeg",png:"image/png",gif:"image/gif",webp:"image/webp",bmp:"image/bmp",SVG:"image/svg+xml",pdf:"application/pdf"}[e.split(".").pop().toLowerCase()]||"application/octet-stream"},N=a=>{const l=s.showGradeSlip&&"grade"===m.value,o=l?d.value:p.value,i=a.tempFiles.filter(e=>{const a=e.name?e.name.split(".").pop().toLowerCase():"",l=b.includes(e.type)||["jpg","jpeg","png","gif","webp","bmp","svg"].includes(a),o=e.type&&e.type.includes("pdf")||"pdf"===a;return l||o}).map(e=>({name:e.name,url:e.path||e.url,type:e.type||C(e.name),size:e.size,file:e,status:"pending",attachmentType:l?"grade":"base"}));o.length+i.length>s.maxCount?e.index.showToast({title:`最多只能上传${s.maxCount}个文件`,icon:"none"}):l?(d.value=[...d.value,...i],n("update:gradesFiles",d.value)):(p.value=[...p.value,...i],n("update:files",p.value))},T=()=>[...p.value,...d.value],k=(e,a,l)=>{l&&l.stopPropagation(),"grade"===e?(d.value.splice(a,1),n("update:gradesFiles",d.value)):(p.value.splice(a,1),n("update:files",p.value))},B=a=>{console.log(a,"file");const l=y(a.url);if(a.type&&b.includes(a.type)){const a=T();e.index.previewImage({urls:a.filter(e=>e.type&&b.includes(e.type)).map(e=>y(e.url)),current:l})}else a.type&&a.type.includes("pdf")?e.index.downloadFile({url:l,success:a=>{const l=a.tempFilePath;e.index.openDocument({filePath:l,fileType:"pdf",success:()=>console.log("打开PDF成功"),fail:a=>{console.error("打开PDF失败",a),e.index.showToast({title:"打开PDF失败",icon:"none"})}})},fail:a=>{console.error("下载PDF失败",a),e.index.showToast({title:"下载PDF失败",icon:"none"})}}):n("preview",a)},P=(a,l)=>new Promise((l,o)=>{const i=e.index.getStorageSync("token");e.index.uploadFile({url:"/api/common/upload",filePath:a.path||a.url,name:"file",header:{Authorization:`Bearer ${i}`},success:e=>{if(200===e.statusCode){const a=JSON.parse(e.data);console.log(a,"文件"),200===a.code?l({...a,fileName:a.fileName}):o(new Error(a.msg||"上传失败"))}else o(new Error(`上传失败,状态码: ${e.statusCode}`))},fail:e=>{o(e)}})}),A=async()=>{if(s.showGradeSlip&&s.isGradeRequired&&0===d.value.length)return e.index.showToast({title:"请上传成绩单附件",icon:"none"}),void(m.value="grade");if(0!==T().length){e.index.showLoading({title:"上传中",mask:!0});try{const l=p.value.filter(e=>!e.url||"pending"===e.status),o=d.value.filter(e=>!e.url||"pending"===e.status);for(const i of l)try{i.status="uploading";const e=await P(i.file);Object.assign(i,{url:e.url,fileName:e.name,newFileName:e.newFileName,originalFilename:e.originalFilename,status:"success",size:e.size}),n("upload-base",i)}catch(a){console.error("上传失败:",a),i.status="error",e.index.showToast({title:`文件 ${i.name} 上传失败`,icon:"none"})}for(const i of o)try{i.status="uploading";const e=await P(i.file);Object.assign(i,{url:e.fileName,fileName:e.fileName,newFileName:e.newFileName,originalFilename:e.originalFilename,status:"success"}),n("upload-grade",i)}catch(a){console.error("成绩单附件上传失败:",a),i.status="error",e.index.showToast({title:`文件 ${i.name} 上传失败`,icon:"none"})}console.log(p.value,"1"),console.log(d.value,"2"),n("update:files",p.value),n("update:gradesFiles",d.value),e.index.showToast({title:"上传完成",icon:"success"}),$()}catch(a){console.error("上传出错:",a),e.index.showToast({title:"上传出错",icon:"none"})}finally{e.index.hideLoading()}}else e.index.showToast({title:"请先添加附件",icon:"none"})};return o({getFilesByType:e=>"grade"===e?d.value:p.value,getAllFiles:T}),(a,o)=>e.e({a:h.value>0},h.value>0?{b:e.t(h.value)}:{},{c:l.position.right,d:l.position.bottom,e:l.bgColor,f:c.value?"flex":"none",g:e.o(S),h:!l.readonly},l.readonly?{}:{i:e.o(z),j:e.p({type:"plus",size:"24",color:g.value})},{k:e.o($),l:e.p({type:"close",size:"24",color:"#999"}),m:l.showGradeSlip},l.showGradeSlip?e.e({n:"base"===m.value?1:"",o:e.o(e=>m.value="base"),p:l.isGradeRequired},(l.isGradeRequired,{}),{q:"grade"===m.value?1:"",r:e.o(e=>m.value="grade")}):{},{s:"base"===m.value||!l.showGradeSlip},"base"!==m.value&&l.showGradeSlip?{}:{t:e.f(p.value,(a,o,i)=>e.e({a:"2d320176-3-"+i+",2d320176-0",b:e.p({type:F(a.type),size:"24",color:j(a.type)}),c:e.o(e=>B(a),"base-"+o),d:e.t(a.originalFilename||a.name),e:e.t(G(a.size)),f:"uploading"===a.status},("uploading"===a.status||a.status,{}),{g:"error"===a.status,h:e.o(e=>B(a),"base-"+o)},l.readonly?{}:{i:e.o(e=>k("base",o,e),"base-"+o),j:"2d320176-4-"+i+",2d320176-0",k:e.p({type:"trash",size:"20",color:"#ff4d4f"})},{l:"base-"+o})),v:!l.readonly},{w:"grade"===m.value&&l.showGradeSlip},"grade"===m.value&&l.showGradeSlip?{x:e.f(d.value,(a,o,i)=>e.e({a:"2d320176-5-"+i+",2d320176-0",b:e.p({type:F(a.type),size:"24",color:j(a.type)}),c:e.o(e=>B(a),"grade-"+o),d:e.t(a.originalFilename||a.name),e:e.t(G(a.size)),f:"uploading"===a.status},("uploading"===a.status||a.status,{}),{g:"error"===a.status,h:e.o(e=>B(a),"grade-"+o)},l.readonly?{}:{i:e.o(e=>k("grade",o,e),"grade-"+o),j:"2d320176-6-"+i+",2d320176-0",k:e.p({type:"trash",size:"20",color:"#ff4d4f"})},{l:"grade-"+o})),y:!l.readonly}:{},{z:0===v.value.length},0===v.value.length?e.e({A:e.p({type:"info",size:"24",color:"#999"}),B:"base"===m.value||!l.showGradeSlip},"base"!==m.value&&l.showGradeSlip?(m.value,{}):{},{C:"grade"===m.value}):{},{D:!l.readonly},l.readonly?{}:{E:e.o(z),F:e.o(A)},{G:e.sr(r,"2d320176-0",{k:"popup"}),H:e.o(x),I:e.p({type:"bottom","safe-area":!1}),J:!l.readonly},l.readonly?{}:{K:e.sr(u,"2d320176-8",{k:"filePicker"}),L:e.o(N),M:e.o(a.onFileDelete),N:e.p({"auto-upload":!1,"file-mediatype":"all",limit:l.maxCount-v.value.length,"image-styles":w})},{O:e.gei(a,"")})}};wx.createComponent(l); |
| | | "use strict";const e=require("../../common/vendor.js"),a=require("../../stores/user.js");if(!Array){(e.resolveComponent("uni-icons")+e.resolveComponent("uni-popup"))()}Math||((()=>"../../node-modules/@dcloudio/uni-ui/lib/uni-icons/uni-icons.js")+(()=>"../../node-modules/@dcloudio/uni-ui/lib/uni-popup/uni-popup.js"))();const t={__name:"index",props:{files:{type:Array,default:()=>[]},gradesFiles:{type:Array,default:()=>[]},readonly:{type:Boolean,default:!1},position:{type:Object,default:()=>({right:"30rpx",bottom:"200rpx"})},bgColor:{type:String,default:"#67AFAB"},maxCount:{type:Number,default:9},showGradeSlip:{type:Boolean,default:!1},isGradeRequired:{type:Boolean,default:!1}},emits:["update:files","update:gradesFiles","upload","preview","upload-grade","upload-base"],setup(t,{expose:l,emit:s}){const i=a.useUserStore(),o=t,r=s,n=e.ref(null),u=e.ref([]),d=e.ref([]),p=e.ref(!0),c=e.ref("#67AFAB"),f=e.ref("base"),g=e.ref([]),h=i.baseUrlHt,v=e.computed(()=>o.showGradeSlip?"base"===f.value?u.value:d.value:u.value),m=e.computed(()=>u.value.length+d.value.length);e.watch(()=>o.files,e=>{u.value=[...e]},{immediate:!0}),e.watch(()=>o.gradesFiles,e=>{d.value=[...e]},{immediate:!0});const y=e=>{if(!e)return"";if(e.startsWith("blob:")||e.startsWith("file://"))return e;if(e.startsWith("http://")||e.startsWith("https://")){const a=e.indexOf("://")+3,t=e.indexOf("/",a);return-1!==t?`${h}${e.substring(t)}`:h}return`${h}${e.startsWith("/")?"":"/"}${e}`},w=["image/jpeg","image/png","image/gif","image/webp","image/bmp","image/svg+xml"],b=e=>{p.value=!e.show},x=e=>e&&w.includes(e)?"image":e&&e.includes("pdf")?"paperclip":e&&e.includes("word")?"file-word":e&&e.includes("excel")?"file-excel":e&&e.includes("powerpoint")?"file-ppt":"file",F=e=>e&&w.includes(e)?c.value:e&&e.includes("pdf")?"#ff4d4f":e&&e.includes("word")?"#2b579a":e&&e.includes("excel")?"#217346":e&&e.includes("powerpoint")?"#b7472a":"#666",z=e=>e?e<1024?`${e}B`:e<1048576?`${(e/1024).toFixed(1)}KB`:`${(e/1048576).toFixed(1)}MB`:"",S=()=>{var e;null==(e=n.value)||e.open()},G=()=>{var e;null==(e=n.value)||e.close()},j=a=>{const t=o.showGradeSlip&&"grade"===f.value;if((t?d.value:u.value).length+a.length>o.maxCount)return e.index.showToast({title:`最多只能上传${o.maxCount}个文件`,icon:"none"}),void a.forEach(e=>{e.url&&e.url.startsWith("blob:")&&URL.revokeObjectURL(e.url)});t?(d.value=[...d.value,...a],r("update:gradesFiles",d.value)):(u.value=[...u.value,...a],r("update:files",u.value))},$=()=>{e.index.showActionSheet({itemList:["拍照/相册","从聊天记录选择文件"],success:a=>{const t=o.maxCount-v.value.length;t<=0?e.index.showToast({title:`最多上传${o.maxCount}个文件`,icon:"none"}):0===a.tapIndex?e.index.chooseImage({count:t,sizeType:["original","compressed"],sourceType:["album","camera"],success:e=>{const a=e.tempFiles.map(e=>({name:e.name||"image.jpg",path:e.path,url:e.path,uploadPath:e.path,type:e.type||"image/jpeg",size:e.size,raw:e,status:"pending"}));j(a)}}):1===a.tapIndex&&e.index.chooseMessageFile({count:t,type:"all",success:e=>{const a=e.tempFiles.map(e=>({name:e.name,path:e.path,url:e.path,uploadPath:e.path,type:e.type,size:e.size,raw:e,status:"pending"}));j(a)}})}})},C=(e,a,t)=>{t&&t.stopPropagation();const l="grade"===e?d.value[a]:u.value[a];if(l.url&&l.url.startsWith("blob:")){URL.revokeObjectURL(l.url);const e=g.value.indexOf(l.url);-1!==e&&g.value.splice(e,1)}"grade"===e?(d.value.splice(a,1),r("update:gradesFiles",d.value)):(u.value.splice(a,1),r("update:files",u.value))},T=a=>{let t=a.url;if(!t||t.startsWith("blob:")||t.startsWith("file://")||t.startsWith("/")||(t=y(t)),a.type&&w.includes(a.type)){const a=[...u.value,...d.value].filter(e=>e.type&&w.includes(e.type)).map(e=>e.url.startsWith("blob:")||e.url.startsWith("file://")||e.url.startsWith("/")?e.url:y(e.url));e.index.previewImage({urls:a,current:t})}else a.type&&a.type.includes("pdf")?e.index.downloadFile({url:t,success:a=>{e.index.openDocument({filePath:a.tempFilePath,fileType:"pdf"})},fail:()=>e.index.showToast({title:"打开PDF失败",icon:"none"})}):r("preview",a)},W=(a,t)=>new Promise((t,l)=>{const s=e.index.getStorageSync("token"),o=a.uploadPath||a.url||a.path;if(!o||"string"!=typeof o)return void l(new Error("无效的文件路径"));const r=`${i.baseUrlHt}/common/upload`;e.index.uploadFile({url:r,filePath:o,name:"file",header:{Authorization:`Bearer ${s}`},success:e=>{if(200===e.statusCode)try{const a=JSON.parse(e.data);200===a.code?t({...a,fileName:a.fileName}):l(new Error(a.msg||"上传失败"))}catch{l(new Error("响应解析失败"))}else l(new Error(`上传失败,状态码: ${e.statusCode}`))},fail:l})}),B=async()=>{if(o.showGradeSlip&&o.isGradeRequired&&0===d.value.length)return e.index.showToast({title:"请上传成绩单附件",icon:"none"}),void(f.value="grade");if(0!==[...u.value,...d.value].filter(e=>!e.url||"pending"===e.status).length){e.index.showLoading({title:"上传中",mask:!0});try{const t=u.value.filter(e=>!e.url||"pending"===e.status),l=d.value.filter(e=>!e.url||"pending"===e.status);for(const s of t)try{s.status="uploading";const e=await W(s);Object.assign(s,{url:e.url,fileName:e.name,newFileName:e.newFileName,originalFilename:e.originalFilename,status:"success",size:e.size}),r("upload-base",s)}catch(a){s.status="error",e.index.showToast({title:`文件 ${s.name} 上传失败`,icon:"none"})}for(const s of l)try{s.status="uploading";const e=await W(s);Object.assign(s,{url:e.fileName,fileName:e.fileName,newFileName:e.newFileName,originalFilename:e.originalFilename,status:"success"}),r("upload-grade",s)}catch(a){s.status="error",e.index.showToast({title:`文件 ${s.name} 上传失败`,icon:"none"})}r("update:files",u.value),r("update:gradesFiles",d.value),e.index.showToast({title:"上传完成",icon:"success"}),G()}catch(t){console.error("上传出错:",t),e.index.showToast({title:"上传出错",icon:"none"})}finally{e.index.hideLoading()}}else e.index.showToast({title:"没有待上传的文件",icon:"none"})};return e.onBeforeUnmount(()=>{g.value.forEach(e=>URL.revokeObjectURL(e)),g.value=[]}),l({getFilesByType:e=>"grade"===e?d.value:u.value,getAllFiles:()=>[...u.value,...d.value]}),(a,l)=>e.e({a:m.value>0},m.value>0?{b:e.t(m.value)}:{},{c:t.position.right,d:t.position.bottom,e:t.bgColor,f:p.value?"flex":"none",g:e.o(S),h:!t.readonly},t.readonly?{}:{i:e.o($),j:e.p({type:"plus",size:"24",color:c.value})},{k:e.o(G),l:e.p({type:"close",size:"24",color:"#999"}),m:t.showGradeSlip},t.showGradeSlip?e.e({n:"base"===f.value?1:"",o:e.o(e=>f.value="base"),p:t.isGradeRequired},(t.isGradeRequired,{}),{q:"grade"===f.value?1:"",r:e.o(e=>f.value="grade")}):{},{s:"base"===f.value||!t.showGradeSlip},"base"!==f.value&&t.showGradeSlip?{}:{t:e.f(u.value,(a,l,s)=>e.e({a:"2d320176-3-"+s+",2d320176-0",b:e.p({type:x(a.type),size:"24",color:F(a.type)}),c:e.o(e=>T(a),"base-"+l),d:e.t(a.originalFilename||a.name),e:e.t(z(a.size)),f:"uploading"===a.status},("uploading"===a.status||a.status,{}),{g:"error"===a.status,h:e.o(e=>T(a),"base-"+l)},t.readonly?{}:{i:e.o(e=>C("base",l,e),"base-"+l),j:"2d320176-4-"+s+",2d320176-0",k:e.p({type:"trash",size:"20",color:"#ff4d4f"})},{l:"base-"+l})),v:!t.readonly},{w:"grade"===f.value&&t.showGradeSlip},"grade"===f.value&&t.showGradeSlip?{x:e.f(d.value,(a,l,s)=>e.e({a:"2d320176-5-"+s+",2d320176-0",b:e.p({type:x(a.type),size:"24",color:F(a.type)}),c:e.o(e=>T(a),"grade-"+l),d:e.t(a.originalFilename||a.name),e:e.t(z(a.size)),f:"uploading"===a.status},("uploading"===a.status||a.status,{}),{g:"error"===a.status,h:e.o(e=>T(a),"grade-"+l)},t.readonly?{}:{i:e.o(e=>C("grade",l,e),"grade-"+l),j:"2d320176-6-"+s+",2d320176-0",k:e.p({type:"trash",size:"20",color:"#ff4d4f"})},{l:"grade-"+l})),y:!t.readonly}:{},{z:0===v.value.length},0===v.value.length?e.e({A:e.p({type:"info",size:"24",color:"#999"}),B:"base"===f.value||!t.showGradeSlip},"base"!==f.value&&t.showGradeSlip?(f.value,{}):{},{C:"grade"===f.value}):{},{D:!t.readonly},t.readonly?{}:{E:e.o($),F:e.o(B)},{G:e.sr(n,"2d320176-0",{k:"popup"}),H:e.o(b),I:e.p({type:"bottom","safe-area":!1}),J:e.gei(a,"")})}};wx.createComponent(t); |