1 line
8.4 KiB
JavaScript
1 line
8.4 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,v as _,x as v,y}from"./index-BoystVy-.js";import{t as b}from"./useInventory-C7Zfw7oO.js";var x={style:{"margin-bottom":`12px`,display:`flex`,gap:`8px`}},S={style:{display:`flex`,"justify-content":`space-between`,"align-items":`center`,"margin-bottom":`12px`}},C={style:{"text-align":`right`,"margin-top":`8px`,"font-weight":`600`}},w=e({__name:`MaterialsTab`,setup(e){let{state:w,formatCurrency:T,loadMaterials:E,loadSuppliers:D,loadPurchaseOrders:O}=b(),k=i(!1),A=i(null),j=i(!1),M=i({}),N=i(!1),P=i([]),F=i(null),I=i(!1);function L(){A.value=null,M.value={item_type:`material`,unit:`kg`,min_stock:0,max_stock:1e3,cost_price:0,sale_price:0,sku:``,name:``,category:``},k.value=!0}async function R(e){A.value=e,M.value={...e},k.value=!0}async function z(){if(!j.value){if(!M.value.sku){h(`请输入SKU`,`warning`);return}if(!M.value.name){h(`请输入名称`,`warning`);return}j.value=!0;try{A.value?(await g(`/api/products/${A.value.id}`,{method:`PUT`,body:JSON.stringify(M.value)}),h(`物料更新成功`,`success`)):(await g(`/api/products`,{method:`POST`,body:JSON.stringify(M.value)}),h(`物料创建成功`,`success`)),k.value=!1,A.value=null,M.value={},E()}catch(e){d(e,`保存物料`)}finally{j.value=!1}}}async function B(e){if(confirm(`确定要删除这个物料吗?`))try{await g(`/api/products/${e}`,{method:`DELETE`}),h(`物料已删除`,`success`),E()}catch(e){d(e,`删除物料`)}}async function V(){await E(),await D(),P.value=[],N.value=!0}function H(){P.value.push({material_id:w.materials[0]?.id||null,quantity:1,unit_price:0,remark:``})}function U(e){P.value.splice(e,1)}let W=u(()=>P.value.reduce((e,t)=>e+(t.unit_price||0)*(t.quantity||0),0));async function G(){if(!I.value){if(!F.value){h(`请选择供应商`,`warning`);return}if(!P.value||P.value.length===0){h(`请至少添加一个补货物料`,`warning`);return}for(let[e,t]of P.value.entries()){let n=e+1;if(!t.material_id){h(`第 ${n} 行:请选择物料`,`warning`);return}if(!Number.isFinite(t.quantity)||t.quantity<=0){h(`第 ${n} 行:数量必须大于 0`,`warning`);return}if(!Number.isFinite(t.unit_price)||t.unit_price<0){h(`第 ${n} 行:单价必须大于等于 0`,`warning`);return}}I.value=!0;try{let e={supplier_id:F.value,expected_date:new Date().toISOString().split(`T`)[0],remark:`物料补货`,items:P.value.map(e=>({product_id:e.material_id,quantity:e.quantity,unit_price:e.unit_price,remark:e.remark}))};await g(`/api/purchase-orders`,{method:`POST`,body:JSON.stringify(e)}),h(`采购订单创建成功`,`success`),N.value=!1,P.value=[],F.value=null,O()}catch(e){d(e,`保存补货订单`)}finally{I.value=!1}}}function K(){k.value=!1,A.value=null,M.value={}}function q(){N.value=!1,P.value=[]}return s(()=>{E()}),(e,i)=>{let s=p(`t-button`),u=p(`t-table-column`),d=p(`t-table`),h=p(`t-empty`),g=p(`t-input`),b=p(`t-form-item`),E=p(`t-input-number`),D=p(`t-form`),O=p(`t-dialog`),J=p(`t-option`),Y=p(`t-select`);return t(),y(`div`,null,[l(`div`,x,[o(s,{type:`primary`,onClick:L},{default:f(()=>[...i[12]||=[v(`新增物料`,-1)]]),_:1}),o(s,{type:`success`,onClick:V},{default:f(()=>[...i[13]||=[v(`物料补货`,-1)]]),_:1})]),o(d,{data:n(w).materials,loading:n(w).loading,stripe:``},{default:f(()=>[o(u,{prop:`sku`,label:`SKU`}),o(u,{prop:`name`,label:`名称`}),o(u,{prop:`category`,label:`分类`},{default:f(({row:e})=>[v(a(e.category||`-`),1)]),_:1}),o(u,{prop:`unit`,label:`单位`}),o(u,{label:`成本价`},{default:f(({row:e})=>[v(a(n(T)(e.cost_price)),1)]),_:1}),o(u,{prop:`min_stock`,label:`最低库存`},{default:f(({row:e})=>[v(a(e.min_stock??`-`),1)]),_:1}),o(u,{label:`操作`,width:`180`},{default:f(({row:e})=>[o(s,{type:`primary`,size:`small`,onClick:t=>R(e)},{default:f(()=>[...i[14]||=[v(`编辑`,-1)]]),_:1},8,[`onClick`]),o(s,{type:`danger`,size:`small`,onClick:t=>B(e.id)},{default:f(()=>[...i[15]||=[v(`删除`,-1)]]),_:1},8,[`onClick`])]),_:1})]),_:1},8,[`data`,`loading`]),!n(w).loading&&n(w).materials.length===0?(t(),c(h,{key:0,description:`暂无物料数据`})):_(``,!0),o(O,{visible:k.value,"onUpdate:visible":i[8]||=e=>k.value=e,title:(A.value?`编辑`:`新增`)+`物料`,width:`560px`,onClosed:K},{footer:f(()=>[o(s,{onClick:i[7]||=e=>k.value=!1,disabled:j.value},{default:f(()=>[...i[16]||=[v(`取消`,-1)]]),_:1},8,[`disabled`]),o(s,{type:`primary`,loading:j.value,disabled:j.value,onClick:z},{default:f(()=>[...i[17]||=[v(`保存`,-1)]]),_:1},8,[`loading`,`disabled`])]),default:f(()=>[o(D,{"label-width":`100px`},{default:f(()=>[o(b,{label:`类型`},{default:f(()=>[o(g,{"model-value":`物料(纳入库存)`,disabled:``})]),_:1}),o(b,{label:`SKU`,required:``},{default:f(()=>[o(g,{modelValue:M.value.sku,"onUpdate:modelValue":i[0]||=e=>M.value.sku=e,placeholder:`产品编码`},null,8,[`modelValue`])]),_:1}),o(b,{label:`名称`,required:``},{default:f(()=>[o(g,{modelValue:M.value.name,"onUpdate:modelValue":i[1]||=e=>M.value.name=e,placeholder:`产品名称`},null,8,[`modelValue`])]),_:1}),o(b,{label:`分类`},{default:f(()=>[o(g,{modelValue:M.value.category,"onUpdate:modelValue":i[2]||=e=>M.value.category=e,placeholder:`产品分类`},null,8,[`modelValue`])]),_:1}),o(b,{label:`单位`},{default:f(()=>[o(g,{modelValue:M.value.unit,"onUpdate:modelValue":i[3]||=e=>M.value.unit=e,placeholder:`kg`},null,8,[`modelValue`])]),_:1}),o(b,{label:`成本价`},{default:f(()=>[o(E,{modelValue:M.value.cost_price,"onUpdate:modelValue":i[4]||=e=>M.value.cost_price=e,precision:2,min:0,step:.01,style:{width:`100%`}},null,8,[`modelValue`])]),_:1}),o(b,{label:`最低库存`},{default:f(()=>[o(E,{modelValue:M.value.min_stock,"onUpdate:modelValue":i[5]||=e=>M.value.min_stock=e,min:0,style:{width:`100%`}},null,8,[`modelValue`])]),_:1}),o(b,{label:`最高库存`},{default:f(()=>[o(E,{modelValue:M.value.max_stock,"onUpdate:modelValue":i[6]||=e=>M.value.max_stock=e,min:0,style:{width:`100%`}},null,8,[`modelValue`])]),_:1})]),_:1})]),_:1},8,[`visible`,`title`]),o(O,{visible:N.value,"onUpdate:visible":i[11]||=e=>N.value=e,title:`物料补货`,width:`900px`,onClosed:q},{footer:f(()=>[o(s,{onClick:i[10]||=e=>N.value=!1,disabled:I.value},{default:f(()=>[...i[21]||=[v(`取消`,-1)]]),_:1},8,[`disabled`]),o(s,{type:`primary`,loading:I.value,disabled:I.value,onClick:G},{default:f(()=>[...i[22]||=[v(`创建采购订单`,-1)]]),_:1},8,[`loading`,`disabled`])]),default:f(()=>[o(D,{"label-width":`100px`,style:{"margin-bottom":`16px`}},{default:f(()=>[o(b,{label:`供应商`,required:``},{default:f(()=>[o(Y,{modelValue:F.value,"onUpdate:modelValue":i[9]||=e=>F.value=e,placeholder:`请选择供应商`,style:{width:`100%`}},{default:f(()=>[(t(!0),y(m,null,r(n(w).suppliers,e=>(t(),c(J,{key:e.id,label:e.name,value:e.id},null,8,[`label`,`value`]))),128))]),_:1},8,[`modelValue`])]),_:1})]),_:1}),l(`div`,S,[i[19]||=l(`span`,{style:{"font-weight":`600`}},`补货物料明细`,-1),o(s,{type:`primary`,size:`small`,onClick:H},{default:f(()=>[...i[18]||=[v(`+ 添加物料`,-1)]]),_:1})]),o(d,{data:P.value,border:``,size:`small`},{default:f(()=>[o(u,{label:`物料`,"min-width":`200`},{default:f(({row:e})=>[o(Y,{modelValue:e.material_id,"onUpdate:modelValue":t=>e.material_id=t,placeholder:`请选择物料`,style:{width:`100%`}},{default:f(()=>[(t(!0),y(m,null,r(n(w).materials,e=>(t(),c(J,{key:e.id,label:`${e.sku} - ${e.name}`,value:e.id},null,8,[`label`,`value`]))),128))]),_:1},8,[`modelValue`,`onUpdate:modelValue`])]),_:1}),o(u,{label:`数量`,width:`120`},{default:f(({row:e})=>[o(E,{modelValue:e.quantity,"onUpdate:modelValue":t=>e.quantity=t,min:1,size:`small`,style:{width:`100%`}},null,8,[`modelValue`,`onUpdate:modelValue`])]),_:1}),o(u,{label:`单价`,width:`120`},{default:f(({row:e})=>[o(E,{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(u,{label:`总价`,width:`120`},{default:f(({row:e})=>[v(a(n(T)((e.unit_price||0)*(e.quantity||0))),1)]),_:1}),o(u,{label:`备注`,width:`150`},{default:f(({row:e})=>[o(g,{modelValue:e.remark,"onUpdate:modelValue":t=>e.remark=t,size:`small`,placeholder:`备注`},null,8,[`modelValue`,`onUpdate:modelValue`])]),_:1}),o(u,{label:`操作`,width:`80`},{default:f(({$index:e})=>[o(s,{type:`danger`,size:`small`,onClick:t=>U(e)},{default:f(()=>[...i[20]||=[v(`删除`,-1)]]),_:1},8,[`onClick`])]),_:1})]),_:1},8,[`data`]),l(`div`,C,` 补货总金额:`+a(n(T)(W.value)),1)]),_:1},8,[`visible`])])}}});export{w as default}; |