| 1 |
- import{_ as e,$ as a,d as t,C as s,X as l,T as o,b as r,w as i,i as d,g as n,f as u,h as c,u as p,n as m,F as _,j as f,m as y,y as h,k as v,t as w,I as g,Y as b,s as k,p as x,z as q,G as j,H as P,e as V}from"./index-DkH7bG5s.js";import{u as C}from"./useResource.juK0xFuB.js";import{u as E,_ as I}from"./CommandStatus.vue_vue_type_script_setup_true_lang.CAVuDUGt.js";import{t as R,i as U,c as F,_ as G}from"./_plugin-vue_export-helper.C4LH77RU.js";import{l as z}from"./location.B5Bl2X0f.js";import{I as A}from"./IdentityGuard.B3rtcdH0.js";import{P as S}from"./PageState.A-T7ATD-.js";import{Q as T}from"./QuantityInput.B-T915gz.js";import{P as $}from"./PrivatePhotos.C5jq_Vhk.js";const D=G(t({__name:"fulfill",setup(t){const G=s(0),D=s(!1),H=s(!1);let L=!1;const N=l({accepted_qty:0,empty_returned:0,receiver:"",reason:"",photo_ids:[]}),Q=()=>V("driver")+"/tasks/"+U(G.value),{data:B,loading:J,error:K,load:M}=C(async()=>{var e;const a=await n(Q());if(!L){N.accepted_qty=a.quantity,N.receiver=a.contact||"";const t=null==(e=[...a.records].reverse().find(e=>"draft"===e.kind))?void 0:e.data;if(t&&"object"==typeof t){const e=t;N.accepted_qty="number"==typeof e.accepted_qty?e.accepted_qty:a.quantity,N.empty_returned="number"==typeof e.empty_returned?e.empty_returned:0,N.receiver="string"==typeof e.receiver?e.receiver:N.receiver,N.reason="string"==typeof e.reason?e.reason:"",N.photo_ids=Array.isArray(e.photo_ids)?e.photo_ids.filter(e=>a.photos.some(a=>a.id===e)):[]}L=!0}return a}),O=E(()=>Q()+"/draft",()=>{R("草稿已保存")}),X=E(()=>Q()+"/complete",async()=>{R("签收已提交"),await M()}),Y=E(()=>Q()+"/photos",async e=>{N.photo_ids.length<4&&!N.photo_ids.includes(e.id)&&N.photo_ids.push(e.id),await M()});async function W(){if(!D.value&&!Y.busy){D.value=!0;try{const t=await async function(){const t=await new Promise((a,t)=>e({count:1,sizeType:["compressed"],sourceType:["camera","album"],success:e=>a(e.tempFilePaths[0]),fail:()=>t(new Error("未选择照片"))})),s=await new Promise(e=>uni.compressImage({src:t,quality:55,success:a=>e(a.tempFilePath),fail:()=>e(t)})),l=await new Promise((e,t)=>a({src:s,success:e,fail:()=>t(new Error("无法读取照片"))}));if(!["jpeg","jpg","png"].includes((l.type||"").toLowerCase()))throw new Error("请选择 JPEG 或 PNG 照片");if(Math.max(l.width,l.height)>4096||l.width*l.height>8e6)throw new Error("照片尺寸过大,请使用较小尺寸照片");let o="";const r=await(await fetch(s)).blob();if(o=await new Promise((e,a)=>{const t=new FileReader;t.onload=()=>e(String(t.result).split(",")[1]),t.onerror=()=>a(new Error("无法读取照片文件")),t.readAsDataURL(r)}),!o||o.length>8e5)throw new Error("照片压缩后仍过大,请选择小于600KB的照片");return o}(),s=await z();await Y.execute({image_base64:t,...s})}catch(t){R(t instanceof Error?t.message:"照片上传失败")}finally{D.value=!1}}}function Z(){return N.receiver.trim()?!(B.value&&N.accepted_qty<B.value.quantity&&!N.reason.trim())||(R("部分收货或拒收时请填写原因"),!1):(R("请填写收货人"),!1)}function ee(){Z()&&O.execute({...N,photo_ids:[...N.photo_ids]})}async function ae(){Z()&&(H.value&&N.photo_ids.length?await F("确认签收",`实际收货 ${N.accepted_qty} 桶、回收空桶 ${N.empty_returned} 个。确认后将核销实际收货权益。`)&&X.execute({...N,photo_ids:[...N.photo_ids],confirmed:!0}):R("请选择履约照片并确认实际数量"))}return o(e=>{G.value=Number(null==e?void 0:e.id),M()}),(e,a)=>{const t=d,s=h,l=v,o=g,n=b,V=P,C=j;return u(),r(t,{class:"page"},{default:i(()=>[c(A,{kind:"driver"},{default:i(()=>[c(S,{loading:p(J),error:p(K),onRetry:p(M)},null,8,["loading","error","onRetry"]),p(B)?(u(),m(_,{key:0},["transit"!==p(B).status?(u(),r(t,{key:0,class:"notice warning"},{default:i(()=>[f(" 当前任务不在配送中,无法提交履约。请返回任务详情查看状态。 ")]),_:1})):y("",!0),c(t,{class:"card"},{default:i(()=>[c(t,{class:"row"},{default:i(()=>[c(t,{class:"title"},{default:i(()=>[f("实际配送数量")]),_:1}),c(s,{class:"text-button",disabled:"transit"!==p(B).status||p(O).busy||p(X).busy,onClick:ee},{default:i(()=>[f(" 保存草稿 ")]),_:1},8,["disabled"])]),_:1}),c(t,{class:"row field"},{default:i(()=>[c(l,{class:"label"},{default:i(()=>[f(w(p(B).sku_name),1)]),_:1}),c(T,{modelValue:N.accepted_qty,"onUpdate:modelValue":a[0]||(a[0]=e=>N.accepted_qty=e),min:0,max:p(B).quantity},null,8,["modelValue","max"])]),_:1}),c(t,{class:"row field"},{default:i(()=>[c(l,{class:"label"},{default:i(()=>[f("回收空桶")]),_:1}),c(T,{modelValue:N.empty_returned,"onUpdate:modelValue":a[1]||(a[1]=e=>N.empty_returned=e),min:0,max:1e7},null,8,["modelValue"])]),_:1}),c(t,{class:"field"},{default:i(()=>[c(l,{class:"field-label"},{default:i(()=>[f("收货人")]),_:1}),c(o,{modelValue:N.receiver,"onUpdate:modelValue":a[2]||(a[2]=e=>N.receiver=e),class:"input",placeholder:"实际收货人姓名",maxlength:"60"},null,8,["modelValue"])]),_:1}),c(t,{class:"field"},{default:i(()=>[c(l,{class:"field-label"},{default:i(()=>[f("拒收 / 少收原因(部分收货必填)")]),_:1}),c(n,{modelValue:N.reason,"onUpdate:modelValue":a[3]||(a[3]=e=>N.reason=e),class:"input",placeholder:"说明现场实际情况",maxlength:"255"},null,8,["modelValue"])]),_:1})]),_:1}),c(t,{class:"section"},{default:i(()=>[c(t,{class:"title"},{default:i(()=>[f("履约照片")]),_:1}),c(l,{class:"muted"},{default:i(()=>[f("已选择 "+w(N.photo_ids.length)+"/4",1)]),_:1})]),_:1}),c($,{ids:p(B).photos.map(e=>e.id),scope:"driver","resource-id":p(k).active.resource_id},null,8,["ids","resource-id"]),p(B).photos.length?(u(),r(t,{key:1,class:"photo-options"},{default:i(()=>[(u(!0),m(_,null,x(p(B).photos,(e,a)=>(u(),r(t,{key:e.id,class:q(["tag",N.photo_ids.includes(e.id)?"green":"gray"]),onClick:a=>function(e){const a=N.photo_ids.indexOf(e);a>=0?N.photo_ids.splice(a,1):N.photo_ids.length<4?N.photo_ids.push(e):R("签收最多选择4张照片")}(e.id)},{default:i(()=>[f(w(N.photo_ids.includes(e.id)?"✓":"○")+" 照片 "+w(a+1),1)]),_:2},1032,["class","onClick"]))),128))]),_:1})):y("",!0),c(s,{class:"upload",disabled:"transit"!==p(B).status||D.value||p(Y).busy||p(B).photos.length>=20,loading:D.value||p(Y).busy,onClick:W},{default:i(()=>[f(" + 拍摄 / 选择现场照片 ")]),_:1},8,["disabled","loading"]),c(t,{class:"notice"},{default:i(()=>[f(" 照片会附加配送单号、服务器时间和上报位置水印。签收前请先在任务详情中完成到达打卡。 ")]),_:1}),c(C,{class:"card check-row"},{default:i(()=>[c(V,{checked:H.value,color:"#176afa",onClick:a[4]||(a[4]=e=>H.value=!H.value)},null,8,["checked"]),c(l,null,{default:i(()=>[f("已确认实际数量与现场照片准确")]),_:1})]),_:1}),c(I,{command:p(Y)},null,8,["command"]),c(I,{command:p(O)},null,8,["command"]),c(I,{command:p(X)},null,8,["command"]),c(t,{class:"fixed-action"},{default:i(()=>[c(t,{class:"row"},{default:i(()=>[c(t,null,{default:i(()=>[c(t,{class:"muted"},{default:i(()=>[f("实际签收")]),_:1}),c(t,{class:"amount"},{default:i(()=>[f(w(N.accepted_qty)+" 桶",1)]),_:1})]),_:1}),c(s,{class:"primary",disabled:"transit"!==p(B).status||p(X).busy||p(O).busy||p(Y).busy||!H.value,loading:p(X).busy,onClick:ae},{default:i(()=>[f(" 完成并核销 ")]),_:1},8,["disabled","loading"])]),_:1})]),_:1})],64)):y("",!0)]),_:1})]),_:1})}}}),[["__scopeId","data-v-c2490997"]]);export{D as default};
|