pages-driver-fulfill.CypkCvec.js 7.3 KB

1
  1. import{a2 as e,a3 as a,d as t,C as s,X as l,U 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 w,t as v,I as g,Y as b,s as k,p as q,z as x,G as j,H as P,e as V}from"./index-DZWPEENK.js";import{u as C}from"./useResource.Bb0gew5r.js";import{u as E,_ as I}from"./CommandStatus.vue_vue_type_script_setup_true_lang.DLe7Vn_P.js";import{t as U,i as F,c as G}from"./format.CN_gdA7g.js";import{l as R}from"./location.CYhIVNG4.js";import{I as A}from"./IdentityGuard.ClFaHw0z.js";import{P as S}from"./PageState.CqEPZkI1.js";import{Q as z}from"./QuantityInput.BlU8Fy1G.js";import{P as B}from"./PrivatePhotos.DNJZJWR7.js";import{_ as J}from"./_plugin-vue_export-helper.BCo6x5W8.js";const L=J(t({__name:"fulfill",setup(t){const J=s(0),L=s(!1),N=s(!1);let Q=!1;const T=l({accepted_qty:0,empty_returned:0,receiver:"",reason:"",photo_ids:[]}),$=()=>V("driver")+"/tasks/"+F(J.value),{data:D,loading:H,error:K,load:M}=C(async()=>{var e;const a=await n($());if(!Q){T.accepted_qty=a.quantity,T.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;T.accepted_qty="number"==typeof e.accepted_qty?e.accepted_qty:a.quantity,T.empty_returned="number"==typeof e.empty_returned?e.empty_returned:0,T.receiver="string"==typeof e.receiver?e.receiver:T.receiver,T.reason="string"==typeof e.reason?e.reason:"",T.photo_ids=Array.isArray(e.photo_ids)?e.photo_ids.filter(e=>a.photos.some(a=>a.id===e)):[]}Q=!0}return a}),O=E(()=>$()+"/draft",()=>{U("草稿已保存")}),X=E(()=>$()+"/complete",async()=>{U("签收已提交"),await M()}),Y=E(()=>$()+"/photos",async e=>{T.photo_ids.length<4&&!T.photo_ids.includes(e.id)&&T.photo_ids.push(e.id),await M()});async function W(){if(!L.value&&!Y.busy){L.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 R();await Y.execute({image_base64:t,...s})}catch(t){U(t instanceof Error?t.message:"照片上传失败")}finally{L.value=!1}}}function Z(){return T.receiver.trim()?!(D.value&&T.accepted_qty<D.value.quantity&&!T.reason.trim())||(U("部分收货或拒收时请填写原因"),!1):(U("请填写收货人"),!1)}function ee(){Z()&&O.execute({...T,photo_ids:[...T.photo_ids]})}async function ae(){Z()&&(N.value&&T.photo_ids.length?await G("确认签收",`实际收货 ${T.accepted_qty} 桶、回收空桶 ${T.empty_returned} 个。确认后将核销实际收货权益。`)&&X.execute({...T,photo_ids:[...T.photo_ids],confirmed:!0}):U("请选择履约照片并确认实际数量"))}return o(e=>{J.value=Number(null==e?void 0:e.id),M()}),(e,a)=>{const t=d,s=h,l=w,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(H),error:p(K),onRetry:p(M)},null,8,["loading","error","onRetry"]),p(D)?(u(),m(_,{key:0},["transit"!==p(D).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(D).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(v(p(D).sku_name),1)]),_:1}),c(z,{modelValue:T.accepted_qty,"onUpdate:modelValue":a[0]||(a[0]=e=>T.accepted_qty=e),min:0,max:p(D).quantity},null,8,["modelValue","max"])]),_:1}),c(t,{class:"row field"},{default:i(()=>[c(l,{class:"label"},{default:i(()=>[f("回收空桶")]),_:1}),c(z,{modelValue:T.empty_returned,"onUpdate:modelValue":a[1]||(a[1]=e=>T.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:T.receiver,"onUpdate:modelValue":a[2]||(a[2]=e=>T.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:T.reason,"onUpdate:modelValue":a[3]||(a[3]=e=>T.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("已选择 "+v(T.photo_ids.length)+"/4",1)]),_:1})]),_:1}),c(B,{ids:p(D).photos.map(e=>e.id),scope:"driver","resource-id":p(k).active.resource_id},null,8,["ids","resource-id"]),p(D).photos.length?(u(),r(t,{key:1,class:"photo-options"},{default:i(()=>[(u(!0),m(_,null,q(p(D).photos,(e,a)=>(u(),r(t,{key:e.id,class:x(["tag",T.photo_ids.includes(e.id)?"green":"gray"]),onClick:a=>function(e){const a=T.photo_ids.indexOf(e);a>=0?T.photo_ids.splice(a,1):T.photo_ids.length<4?T.photo_ids.push(e):U("签收最多选择4张照片")}(e.id)},{default:i(()=>[f(v(T.photo_ids.includes(e.id)?"✓":"○")+" 照片 "+v(a+1),1)]),_:2},1032,["class","onClick"]))),128))]),_:1})):y("",!0),c(s,{class:"upload",disabled:"transit"!==p(D).status||L.value||p(Y).busy||p(D).photos.length>=20,loading:L.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:N.value,color:"#176afa",onClick:a[4]||(a[4]=e=>N.value=!N.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(v(T.accepted_qty)+" 桶",1)]),_:1})]),_:1}),c(s,{class:"primary",disabled:"transit"!==p(D).status||p(X).busy||p(O).busy||p(Y).busy||!N.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{L as default};