1 line
16 KiB
JavaScript
1 line
16 KiB
JavaScript
import{C as e,D as t,F as n,O as r,P as i,R as a,S as o,T as s,_ as c,g as l,h as u,i as d,j as f,k as p,m,r as h,s as g,t as _,v,x as y,y as b}from"./index-Dngmm__P.js";import{t as x}from"./useInventory-CrXJ8kdd.js";var ee={style:{"margin-bottom":`12px`,display:`flex`,gap:`12px`,"align-items":`center`}},S={style:{display:`flex`,gap:`4px`}},C={style:{display:`flex`,"justify-content":`space-between`,"align-items":`center`,"margin-bottom":`12px`}},te={style:{display:`flex`,gap:`8px`}},w={key:1,style:{"padding-left":`8px`}},ne={style:{"text-align":`right`,"margin-top":`8px`,"font-weight":`600`}},T={style:{display:`flex`,"justify-content":`space-between`,"align-items":`center`,"margin-bottom":`12px`}},E={style:{"text-align":`right`,"margin-top":`8px`,"font-weight":`600`}},D=e({__name:`SalesOrdersTab`,setup(e){function D(e,t,n,r,i){return new Promise(a=>{let o=_.confirm({header:e,body:t,theme:n,confirmBtn:r,cancelBtn:i,onConfirm:()=>{o.hide(),a(!0)},onCancel:()=>{o.hide(),a(!1)},onClose:()=>{a(!1)}})})}let{state:O,formatCurrency:k,formatDateTime:A,formatDate:j,getSalesOrderStatusLabel:M,getDeliveryStatusLabel:N,getPaymentStatusLabel:P,loadProductionOrders:F,loadFinishedProducts:I,loadCustomers:L,loadMaterials:R,loadInventory:z,loadMovements:B}=x(),V=i(!1),H=i(null),U=i({}),W=i([]),G=i(null),K=i(!1),q=i(!1),J=i([]),Y=i([]),X=i(!1);function Z(e){return e.payment_status===`paid`||e.delivery_status===`delivered`||e.delivery_status===`cancelled`||Number(e.received_amount||0)>0}function Q(){H.value=null,U.value={customer_id:null,delivery_date:``,remark:``},W.value=[],Y.value=[],V.value=!0}function re(){W.value.push({mold_mode:`new`,mold_sku:``,mold_name:``,mold_id:null,quantity:1,unit_price:0,remark:``})}function ie(e){W.value.splice(e,1)}let ae=u(()=>W.value.reduce((e,t)=>e+(t.unit_price||0)*(t.quantity||0),0));async function oe(e){await L(),await I(),await R();try{let t=await g(`/api/sales-orders/${e.id}`);H.value=e,U.value={customer_id:t.customer_id||e.customer_id||null,delivery_date:t.delivery_date||e.delivery_date||``,remark:t.remark||e.remark||``},W.value=(t.items||[]).map(e=>({mold_mode:e.mold_id?`existing`:`new`,mold_sku:e.sku||``,mold_name:e.name||``,mold_id:e.mold_id||null,quantity:e.quantity||1,unit_price:e.unit_price||0,remark:e.remark||``}));try{Y.value=((await g(`/api/sales-orders/${e.id}/consume-materials`)).items||[]).map(e=>({material_id:e.material_id,material_name:e.material_name||e.material_sku||``,quantity:e.quantity,unit_price:e.unit_price||0,remark:e.remark||``}))}catch{Y.value=[]}}catch(e){d(e,`加载销售订单详情`)}V.value=!0}async function se(){if(!K.value){if(!U.value.customer_id){h(`请选择客户`,`warning`);return}if(!W.value||W.value.length===0){h(`请至少添加一个模具`,`warning`);return}for(let[e,t]of W.value.entries()){let n=e+1;if(t.mold_mode===`new`){if(!t.mold_sku||!String(t.mold_sku).trim()){h(`第 ${n} 行:新模请填写模具SKU`,`warning`);return}if(!t.mold_name||!String(t.mold_name).trim()){h(`第 ${n} 行:新模请填写模具名称`,`warning`);return}}else if(!t.mold_id){h(`第 ${n} 行:改模请选择已有模具`,`warning`);return}if(!t.quantity||t.quantity<=0){h(`第 ${n} 行:数量必须大于 0`,`warning`);return}if(!t.unit_price||t.unit_price<0){h(`第 ${n} 行:单价不能为负`,`warning`);return}}K.value=!0;try{let e={customer_id:U.value.customer_id,delivery_date:U.value.delivery_date||null,remark:U.value.remark||``,items:W.value.map(e=>({mold_mode:e.mold_mode,mold_sku:e.mold_sku||``,mold_name:e.mold_name||``,mold_id:e.mold_id||null,quantity:e.quantity,unit_price:e.unit_price||0,remark:e.remark||``}))};H.value?(await g(`/api/sales-orders/${H.value.id}`,{method:`PUT`,body:JSON.stringify(e)}),h(`销售订单更新成功`,`success`)):(await g(`/api/sales-orders`,{method:`POST`,body:JSON.stringify(e)}),h(`销售订单创建成功`,`success`)),V.value=!1,H.value=null,U.value={},W.value=[],Y.value=[],F(),I(),z(),B()}catch(e){d(e,`保存销售订单`)}finally{K.value=!1}}}async function ce(e){if(Z(e)){h(`已收款/已交付/已作废或有收款记录的订单不可删除,请先作废相关收款单`,`warning`);return}if(await D(`删除确认`,`确定要删除这个销售订单吗?删除将自动回补已扣减的物料。`,`warning`,`删除`,`取消`))try{await g(`/api/sales-orders/${e.id}`,{method:`DELETE`}),h(`销售订单已删除`,`success`),F(),z(),B()}catch(e){d(e,`删除销售订单`)}}async function le(e){await D(`交付确认`,`确认该订单已交付?`,`success`,`确认交付`,`取消`)&&await $(e,`delivered`,`已交付`)}async function ue(e,t){if(t!==`delivered`){if(!await D(`非标准流程提醒`,`当前订单尚未交付,确定要提前收款吗?建议先确认交付后再收款。`,`warning`,`仍要收款`,`取消`))return}else if(!await D(`收款确认`,`确认已收到该订单款项?`,`success`,`确认收款`,`取消`))return;await $(e,`paid`,`已收款`)}async function de(e){await D(`作废确认`,`确定要作废该订单吗?此操作不可撤销。`,`error`,`确认作废`,`取消`)&&await $(e,`cancelled`,`已作废`)}async function $(e,t,n){try{await g(`/api/sales-orders/${e}/status`,{method:`PATCH`,body:JSON.stringify({status:t})}),h(`订单已${n}`,`success`),F(),B()}catch(e){d(e,`更新状态`)}}function fe(){J.value=[],q.value=!0}function pe(){J.value.push({material_id:O.materials[0]?.id||null,quantity:1,remark:``})}function me(e){J.value.splice(e,1)}let he=u(()=>J.value.reduce((e,t)=>{let n=O.materials.find(e=>e.id===t.material_id);return e+Number(n?.cost_price||0)*Number(t.quantity||0)},0));async function ge(){if(!X.value&&H.value){if(!J.value||J.value.length===0){h(`请至少添加一个消耗物料`,`warning`);return}for(let[e,t]of J.value.entries()){let n=e+1;if(!t.material_id){h(`第 ${n} 行:请选择物料`,`warning`);return}if(!t.quantity||t.quantity<=0){h(`第 ${n} 行:数量必须大于 0`,`warning`);return}}X.value=!0;try{let e={items:J.value.map(e=>({material_id:e.material_id,quantity:e.quantity,unit_price:O.materials.find(t=>t.id===e.material_id)?.cost_price||0,remark:e.remark||``}))};await g(`/api/sales-orders/${H.value.id}/consume-materials`,{method:`POST`,body:JSON.stringify(e)}),h(`物料消耗记录保存成功`,`success`),q.value=!1;try{Y.value=((await g(`/api/sales-orders/${H.value.id}/consume-materials`)).items||[]).map(e=>({material_id:e.material_id,material_name:e.material_name||e.material_sku||``,quantity:e.quantity,unit_price:e.unit_price||0,remark:e.remark||``}))}catch{Y.value=[]}z(),B()}catch(e){d(e,`保存物料消耗`)}finally{X.value=!1}}}function _e(){V.value=!1,H.value=null,U.value={},W.value=[],Y.value=[]}function ve(){q.value=!1,J.value=[]}async function ye(){await L(),await R(),await I(),await F()}return s(()=>{ye()}),(e,i)=>{let s=p(`t-option`),u=p(`t-select`),d=p(`t-button`),h=p(`t-table-column`),g=p(`t-tag`),_=p(`t-table`),x=p(`t-empty`),D=p(`t-form-item`),M=p(`t-date-picker`),I=p(`t-input`),L=p(`t-form`),R=p(`t-input-number`),z=p(`t-divider`),B=p(`t-dialog`);return t(),b(`div`,null,[l(`div`,ee,[o(u,{modelValue:G.value,"onUpdate:modelValue":i[0]||=e=>G.value=e,placeholder:`选择仓库`,style:{width:`200px`},clearable:``},{default:f(()=>[(t(!0),b(m,null,r(n(O).warehouses,e=>(t(),c(s,{key:e.id,label:e.name,value:e.id},null,8,[`label`,`value`]))),128))]),_:1},8,[`modelValue`]),o(d,{onClick:n(F)},{default:f(()=>[...i[8]||=[y(`刷新`,-1)]]),_:1},8,[`onClick`]),o(d,{type:`primary`,onClick:Q},{default:f(()=>[...i[9]||=[y(`新增销售订单`,-1)]]),_:1})]),o(_,{data:n(O).productionOrders,loading:n(O).loading,stripe:``},{default:f(()=>[o(h,{prop:`order_no`,label:`销售单`}),o(h,{prop:`customer_name`,label:`客户`}),o(h,{label:`订单金额`},{default:f(({row:e})=>[y(a(n(k)(e.total_amount)),1)]),_:1}),o(h,{label:`交付日期`},{default:f(({row:e})=>[y(a(n(j)(e.delivery_date)),1)]),_:1}),o(h,{label:`订单创建`},{default:f(({row:e})=>[y(a(n(A)(e.created_at)),1)]),_:1}),o(h,{label:`实际交付`},{default:f(({row:e})=>[y(a(e.delivered_at?n(A)(e.delivered_at):`-`),1)]),_:1}),o(h,{label:`实际收款`},{default:f(({row:e})=>[y(a(e.paid_at?n(A)(e.paid_at):`-`),1)]),_:1}),o(h,{label:`订单状态`,width:`160`},{default:f(({row:e})=>[l(`div`,S,[o(g,{type:e.delivery_status===`delivered`?`warning`:e.delivery_status===`cancelled`?`danger`:`info`,size:`small`},{default:f(()=>[y(a(n(N)(e.delivery_status)),1)]),_:2},1032,[`type`]),o(g,{type:e.payment_status===`paid`?`success`:`info`,size:`small`},{default:f(()=>[y(a(n(P)(e.payment_status)),1)]),_:2},1032,[`type`])])]),_:1}),o(h,{label:`操作`,width:`280`},{default:f(({row:e})=>[e.delivery_status===`manufacturing`?(t(),c(d,{key:0,type:`success`,size:`small`,onClick:t=>le(e.id)},{default:f(()=>[...i[10]||=[y(`已交付`,-1)]]),_:1},8,[`onClick`])):v(``,!0),e.payment_status!==`paid`&&e.delivery_status!==`cancelled`?(t(),c(d,{key:1,type:`warning`,size:`small`,onClick:t=>ue(e.id,e.delivery_status)},{default:f(()=>[...i[11]||=[y(`已收款`,-1)]]),_:1},8,[`onClick`])):v(``,!0),o(d,{type:`primary`,size:`small`,disabled:e.payment_status===`paid`||e.delivery_status===`cancelled`,onClick:t=>oe(e)},{default:f(()=>[...i[12]||=[y(`编辑`,-1)]]),_:1},8,[`disabled`,`onClick`]),o(d,{type:`danger`,size:`small`,disabled:Z(e),onClick:t=>ce(e)},{default:f(()=>[...i[13]||=[y(`删除`,-1)]]),_:1},8,[`disabled`,`onClick`]),e.payment_status!==`paid`&&e.delivery_status!==`cancelled`?(t(),c(d,{key:2,type:`info`,size:`small`,onClick:t=>de(e.id)},{default:f(()=>[...i[14]||=[y(`作废`,-1)]]),_:1},8,[`onClick`])):v(``,!0)]),_:1})]),_:1},8,[`data`,`loading`]),!n(O).loading&&n(O).productionOrders.length===0?(t(),c(x,{key:0,description:`暂无销售订单`})):v(``,!0),o(B,{visible:V.value,"onUpdate:visible":i[5]||=e=>V.value=e,title:(H.value?`编辑`:`新增`)+`销售订单`,width:`900px`,onClosed:_e},{footer:f(()=>[o(d,{onClick:i[4]||=e=>V.value=!1,disabled:K.value},{default:f(()=>[...i[20]||=[y(`取消`,-1)]]),_:1},8,[`disabled`]),o(d,{type:`primary`,loading:K.value,disabled:K.value,onClick:se},{default:f(()=>[...i[21]||=[y(`保存`,-1)]]),_:1},8,[`loading`,`disabled`])]),default:f(()=>[o(L,{"label-width":`100px`},{default:f(()=>[o(D,{label:`客户`,required:``},{default:f(()=>[o(u,{modelValue:U.value.customer_id,"onUpdate:modelValue":i[1]||=e=>U.value.customer_id=e,placeholder:`请选择客户`,style:{width:`100%`}},{default:f(()=>[(t(!0),b(m,null,r(n(O).customers,e=>(t(),c(s,{key:e.id,label:e.name,value:e.id},null,8,[`label`,`value`]))),128))]),_:1},8,[`modelValue`])]),_:1}),o(D,{label:`交付日期`},{default:f(()=>[o(M,{modelValue:U.value.delivery_date,"onUpdate:modelValue":i[2]||=e=>U.value.delivery_date=e,type:`date`,placeholder:`选择日期`,style:{width:`100%`},"value-format":`YYYY-MM-DD`},null,8,[`modelValue`])]),_:1}),o(D,{label:`备注`},{default:f(()=>[o(I,{modelValue:U.value.remark,"onUpdate:modelValue":i[3]||=e=>U.value.remark=e,placeholder:`备注信息`},null,8,[`modelValue`])]),_:1})]),_:1}),l(`div`,C,[i[17]||=l(`span`,{style:{"font-weight":`600`}},`模具明细`,-1),l(`div`,te,[H.value?(t(),c(d,{key:0,type:`warning`,size:`small`,onClick:fe},{default:f(()=>[...i[15]||=[y(`+ 消耗物料`,-1)]]),_:1})):v(``,!0),o(d,{type:`primary`,size:`small`,onClick:re},{default:f(()=>[...i[16]||=[y(`+ 添加模具`,-1)]]),_:1})])]),o(_,{data:W.value,border:``,size:`small`},{default:f(()=>[o(h,{label:`模式`,width:`80`},{default:f(({row:e})=>[o(u,{modelValue:e.mold_mode,"onUpdate:modelValue":t=>e.mold_mode=t,size:`small`,style:{width:`100%`}},{default:f(()=>[o(s,{label:`新模`,value:`new`}),o(s,{label:`改模`,value:`existing`})]),_:1},8,[`modelValue`,`onUpdate:modelValue`])]),_:1}),o(h,{label:`模具SKU`,"min-width":`120`},{default:f(({row:e})=>[e.mold_mode===`new`?(t(),c(I,{key:0,modelValue:e.mold_sku,"onUpdate:modelValue":t=>e.mold_sku=t,size:`small`,placeholder:`模具SKU`},null,8,[`modelValue`,`onUpdate:modelValue`])):(t(),c(u,{key:1,modelValue:e.mold_id,"onUpdate:modelValue":t=>e.mold_id=t,placeholder:`选择模具`,size:`small`,style:{width:`100%`}},{default:f(()=>[(t(!0),b(m,null,r(n(O).finishedProducts,e=>(t(),c(s,{key:e.id,label:`${e.sku} - ${e.name}`,value:e.id},null,8,[`label`,`value`]))),128))]),_:1},8,[`modelValue`,`onUpdate:modelValue`]))]),_:1}),o(h,{label:`模具名称`,"min-width":`120`},{default:f(({row:e})=>[e.mold_mode===`new`?(t(),c(I,{key:0,modelValue:e.mold_name,"onUpdate:modelValue":t=>e.mold_name=t,size:`small`,placeholder:`模具名称`},null,8,[`modelValue`,`onUpdate:modelValue`])):(t(),b(`span`,w,a(n(O).finishedProducts.find(t=>t.id===e.mold_id)?.name||`-`),1))]),_:1}),o(h,{label:`数量`,width:`100`},{default:f(({row:e})=>[o(R,{modelValue:e.quantity,"onUpdate:modelValue":t=>e.quantity=t,min:1,size:`small`,style:{width:`100%`}},null,8,[`modelValue`,`onUpdate:modelValue`])]),_:1}),o(h,{label:`单价`,width:`120`},{default:f(({row:e})=>[o(R,{modelValue:e.unit_price,"onUpdate:modelValue":t=>e.unit_price=t,min:0,precision:2,step:.01,size:`small`,style:{width:`100%`}},null,8,[`modelValue`,`onUpdate:modelValue`])]),_:1}),o(h,{label:`备注`,width:`120`},{default:f(({row:e})=>[o(I,{modelValue:e.remark,"onUpdate:modelValue":t=>e.remark=t,size:`small`,placeholder:`备注`},null,8,[`modelValue`,`onUpdate:modelValue`])]),_:1}),o(h,{label:`操作`,width:`80`},{default:f(({$index:e})=>[o(d,{type:`danger`,size:`small`,onClick:t=>ie(e)},{default:f(()=>[...i[18]||=[y(`删除`,-1)]]),_:1},8,[`onClick`])]),_:1})]),_:1},8,[`data`]),l(`div`,ne,` 订单总金额:`+a(n(k)(ae.value)),1),H.value&&Y.value.length>0?(t(),b(m,{key:0},[o(z,{"content-position":`left`},{default:f(()=>[...i[19]||=[y(`已消耗物料`,-1)]]),_:1}),o(_,{data:Y.value,border:``,size:`small`},{default:f(()=>[o(h,{label:`物料`},{default:f(({row:e})=>[y(a(e.material_name),1)]),_:1}),o(h,{label:`数量`},{default:f(({row:e})=>[y(a(e.quantity),1)]),_:1}),o(h,{label:`单价`},{default:f(({row:e})=>[y(a(n(k)(e.unit_price)),1)]),_:1}),o(h,{label:`备注`},{default:f(({row:e})=>[y(a(e.remark||`-`),1)]),_:1})]),_:1},8,[`data`])],64)):v(``,!0)]),_:1},8,[`visible`,`title`]),o(B,{visible:q.value,"onUpdate:visible":i[7]||=e=>q.value=e,title:`物料消耗`,width:`800px`,onClosed:ve},{footer:f(()=>[o(d,{onClick:i[6]||=e=>q.value=!1,disabled:X.value},{default:f(()=>[...i[25]||=[y(`取消`,-1)]]),_:1},8,[`disabled`]),o(d,{type:`primary`,loading:X.value,disabled:X.value,onClick:ge},{default:f(()=>[...i[26]||=[y(`保存消耗`,-1)]]),_:1},8,[`loading`,`disabled`])]),default:f(()=>[l(`div`,T,[i[23]||=l(`span`,{style:{"font-weight":`600`}},`消耗物料明细`,-1),o(d,{type:`primary`,size:`small`,onClick:pe},{default:f(()=>[...i[22]||=[y(`+ 添加物料`,-1)]]),_:1})]),o(_,{data:J.value,border:``,size:`small`},{default:f(()=>[o(h,{label:`物料`,"min-width":`200`},{default:f(({row:e})=>[o(u,{modelValue:e.material_id,"onUpdate:modelValue":t=>e.material_id=t,placeholder:`请选择物料`,style:{width:`100%`}},{default:f(()=>[(t(!0),b(m,null,r(n(O).materials,e=>(t(),c(s,{key:e.id,label:`${e.sku} - ${e.name}`,value:e.id},null,8,[`label`,`value`]))),128))]),_:1},8,[`modelValue`,`onUpdate:modelValue`])]),_:1}),o(h,{label:`数量`,width:`120`},{default:f(({row:e})=>[o(R,{modelValue:e.quantity,"onUpdate:modelValue":t=>e.quantity=t,min:1e-4,step:1e-4,size:`small`,style:{width:`100%`}},null,8,[`modelValue`,`onUpdate:modelValue`])]),_:1}),o(h,{label:`单价`,width:`120`},{default:f(({row:e})=>[o(R,{"model-value":n(O).materials.find(t=>t.id===e.material_id)?.cost_price||0,disabled:``,size:`small`,style:{width:`100%`}},null,8,[`model-value`])]),_:1}),o(h,{label:`总价`,width:`120`},{default:f(({row:e})=>[y(a(n(k)(Number(n(O).materials.find(t=>t.id===e.material_id)?.cost_price||0)*Number(e.quantity||0))),1)]),_:1}),o(h,{label:`备注`,width:`150`},{default:f(({row:e})=>[o(I,{modelValue:e.remark,"onUpdate:modelValue":t=>e.remark=t,size:`small`,placeholder:`备注`},null,8,[`modelValue`,`onUpdate:modelValue`])]),_:1}),o(h,{label:`操作`,width:`80`},{default:f(({$index:e})=>[o(d,{type:`danger`,size:`small`,onClick:t=>me(e)},{default:f(()=>[...i[24]||=[y(`删除`,-1)]]),_:1},8,[`onClick`])]),_:1})]),_:1},8,[`data`]),l(`div`,E,` 消耗总金额:`+a(n(k)(he.value)),1)]),_:1},8,[`visible`])])}}});export{D as default}; |