pages-driver-fulfill.CDpbTSb4.js 7.2 KB

1
  1. import{Y as e,Z as a,d as t,B as s,V as l,O 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,N as g,W as b,s as k,p as x,z as q,D as j,E as P,e as V}from"./index-B5cm9kgK.js";import{u as E}from"./useResource.DaNMz2K_.js";import{u as C,_ as I}from"./CommandStatus.vue_vue_type_script_setup_true_lang.3_gBObIy.js";import{t as R,i as U,c as F,_ as z}from"./_plugin-vue_export-helper.8dPZPLt_.js";import{l as A}from"./location.BF7xtBA3.js";import{I as D}from"./IdentityGuard.ytRI-R6M.js";import{P as G}from"./PageState.BahyJsHd.js";import{Q as N}from"./QuantityInput.6zJtVK_n.js";import{P as S}from"./PrivatePhotos.Bx3S8130.js";const B=z(t({__name:"fulfill",setup(t){const z=s(0),B=s(!1),L=s(!1);let O=!1;const Q=l({accepted_qty:0,empty_returned:0,receiver:"",reason:"",photo_ids:[]}),T=()=>V("driver")+"/tasks/"+U(z.value),{data:$,loading:H,error:J,load:K}=E(async()=>{var e;const a=await n(T());if(!O){Q.accepted_qty=a.quantity,Q.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;Q.accepted_qty="number"==typeof e.accepted_qty?e.accepted_qty:a.quantity,Q.empty_returned="number"==typeof e.empty_returned?e.empty_returned:0,Q.receiver="string"==typeof e.receiver?e.receiver:Q.receiver,Q.reason="string"==typeof e.reason?e.reason:"",Q.photo_ids=Array.isArray(e.photo_ids)?e.photo_ids.filter(e=>a.photos.some(a=>a.id===e)):[]}O=!0}return a}),M=C(()=>T()+"/draft",()=>{R("草稿已保存")}),W=C(()=>T()+"/complete",async()=>{R("签收已提交"),await K()}),Y=C(()=>T()+"/photos",async e=>{Q.photo_ids.length<4&&!Q.photo_ids.includes(e.id)&&Q.photo_ids.push(e.id),await K()});async function Z(){if(!B.value&&!Y.busy){B.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 A();await Y.execute({image_base64:t,...s})}catch(t){R(t instanceof Error?t.message:"照片上传失败")}finally{B.value=!1}}}function X(){return Q.receiver.trim()?!($.value&&Q.accepted_qty<$.value.quantity&&!Q.reason.trim())||(R("部分收货或拒收时请填写原因"),!1):(R("请填写收货人"),!1)}function ee(){X()&&M.execute({...Q,photo_ids:[...Q.photo_ids]})}async function ae(){X()&&(L.value&&Q.photo_ids.length?await F("确认签收",`实际收货 ${Q.accepted_qty} 桶、回收空桶 ${Q.empty_returned} 个。确认后将核销实际收货权益。`)&&W.execute({...Q,photo_ids:[...Q.photo_ids],confirmed:!0}):R("请选择履约照片并确认实际数量"))}return o(e=>{z.value=Number(null==e?void 0:e.id),K()}),(e,a)=>{const t=d,s=h,l=v,o=g,n=b,V=P,E=j;return u(),r(t,{class:"page"},{default:i(()=>[c(D,{kind:"driver"},{default:i(()=>[c(G,{loading:p(H),error:p(J),onRetry:p(K)},null,8,["loading","error","onRetry"]),p($)?(u(),m(_,{key:0},["transit"!==p($).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($).status||p(M).busy||p(W).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($).sku_name),1)]),_:1}),c(N,{modelValue:Q.accepted_qty,"onUpdate:modelValue":a[0]||(a[0]=e=>Q.accepted_qty=e),min:0,max:p($).quantity},null,8,["modelValue","max"])]),_:1}),c(t,{class:"row field"},{default:i(()=>[c(l,{class:"label"},{default:i(()=>[f("回收空桶")]),_:1}),c(N,{modelValue:Q.empty_returned,"onUpdate:modelValue":a[1]||(a[1]=e=>Q.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:Q.receiver,"onUpdate:modelValue":a[2]||(a[2]=e=>Q.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:Q.reason,"onUpdate:modelValue":a[3]||(a[3]=e=>Q.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(Q.photo_ids.length)+"/4",1)]),_:1})]),_:1}),c(S,{ids:p($).photos.map(e=>e.id),scope:"driver","resource-id":p(k).active.resource_id},null,8,["ids","resource-id"]),p($).photos.length?(u(),r(t,{key:1,class:"photo-options"},{default:i(()=>[(u(!0),m(_,null,x(p($).photos,(e,a)=>(u(),r(t,{key:e.id,class:q(["tag",Q.photo_ids.includes(e.id)?"green":"gray"]),onClick:a=>function(e){const a=Q.photo_ids.indexOf(e);a>=0?Q.photo_ids.splice(a,1):Q.photo_ids.length<4?Q.photo_ids.push(e):R("签收最多选择4张照片")}(e.id)},{default:i(()=>[f(w(Q.photo_ids.includes(e.id)?"✓":"○")+" 照片 "+w(a+1),1)]),_:2},1032,["class","onClick"]))),128))]),_:1})):y("",!0),c(s,{class:"upload",disabled:"transit"!==p($).status||B.value||p(Y).busy||p($).photos.length>=20,loading:B.value||p(Y).busy,onClick:Z},{default:i(()=>[f(" + 拍摄 / 选择现场照片 ")]),_:1},8,["disabled","loading"]),c(t,{class:"notice"},{default:i(()=>[f(" 照片会附加配送单号、服务器时间和上报位置水印。签收前请先在任务详情中完成到达打卡。 ")]),_:1}),c(E,{class:"card check-row"},{default:i(()=>[c(V,{checked:L.value,color:"#176afa",onClick:a[4]||(a[4]=e=>L.value=!L.value)},null,8,["checked"]),c(l,null,{default:i(()=>[f("已确认实际数量与现场照片准确")]),_:1})]),_:1}),c(I,{command:p(Y)},null,8,["command"]),c(I,{command:p(M)},null,8,["command"]),c(I,{command:p(W)},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(Q.accepted_qty)+" 桶",1)]),_:1})]),_:1}),c(s,{class:"primary",disabled:"transit"!==p($).status||p(W).busy||p(M).busy||p(Y).busy||!L.value,loading:p(W).busy,onClick:ae},{default:i(()=>[f(" 完成并核销 ")]),_:1},8,["disabled","loading"])]),_:1})]),_:1})],64)):y("",!0)]),_:1})]),_:1})}}}),[["__scopeId","data-v-c2490997"]]);export{B as default};