1 line
34 KiB
JavaScript
1 line
34 KiB
JavaScript
import{i as e}from"./rolldown-runtime-BgaNhQyE.js";import{Dr as t,t as n}from"./jsx-runtime-CRBytmvs.js";import{t as r}from"./typography-DRFhazK9.js";import{L as i,V as a,a as ee,k as te}from"./lodash-DzOfPy0f.js";import{t as ne}from"./PlusOutlined-B8K2rG8r.js";import{t as o}from"./table-BXi9q3AE.js";import{t as s}from"./space-Cu4QVMgQ.js";import{t as c}from"./button-BILozH6U.js";import{r as l}from"./DoubleRightOutlined-Blfli1UU.js";import{t as u}from"./empty-_1ZFK8yy.js";import{s as re}from"./XinForm-BPDYdeax.js";import{t as ie}from"./radio-CxFl70_7.js";import{n as ae}from"./card-DU2T2-YW.js";import{t as oe}from"./spin-CfJYIffX.js";import{t as d}from"./modal-g8Q5gNCx.js";import{t as f}from"./descriptions-BLF6MKiu.js";import{t as p}from"./form-B3R3kIqp.js";import{t as se}from"./image-CTRBNpBE.js";import{t as m}from"./input-CHcsaDtX.js";import{r as ce}from"./CopyOutlined-pYq9KfGb.js";import{r as h}from"./PictureOutlined-CB8Pr7jP.js";import{t as le}from"./popconfirm-DyseZgpU.js";import{t as g}from"./tag-DBV1bHre.js";import{t as ue}from"./DeleteOutlined-DwOvobSM.js";import{t as _}from"./DownloadOutlined-DJY9Mu8c.js";import{t as de}from"./XinTable-DOLiJ5rL.js";import{t as v}from"./AuthButton-DvrpreK4.js";import{n as fe}from"./iStoreOrder-CyyYoLoV.js";import{a as pe,c as me,d as he,f as ge,i as _e,l as ve,m as ye,n as be,p as xe,r as Se,s as Ce,t as we,u as Te}from"./order-DuGMZhv9.js";import{n as y,t as Ee}from"./iPurchaseOrder-Dn-laOqY.js";import{c as De,o as Oe}from"./goods-CYe5se2j.js";var b=e(t(),1),x=n(),{Title:ke,Text:S}=r,Ae=(e,t)=>{let n=parseFloat(t);return Number.isFinite(n)&&n>0?e/n:e},je=()=>{let e=(0,b.useRef)(null),[t,n]=(0,b.useState)(!1),[je,Me]=(0,b.useState)(1200),[C,Ne]=(0,b.useState)(null),[Pe,Fe]=(0,b.useState)(!1),[Ie,Le]=(0,b.useState)(!1),[w,T]=(0,b.useState)(null),[Re,ze]=(0,b.useState)(!1),[Be]=p.useForm(),[Ve,He]=(0,b.useState)([]),[Ue,We]=(0,b.useState)(!1),[Ge,Ke]=(0,b.useState)(!1),[E,qe]=(0,b.useState)(null),[D,Je]=(0,b.useState)(null),[Ye,O]=(0,b.useState)(!1),[k,A]=(0,b.useState)(null),[Xe,Ze]=(0,b.useState)(!1),[j]=p.useForm(),[M,Qe]=(0,b.useState)(`items`),[N,$e]=(0,b.useState)(0),[P,et]=(0,b.useState)(null),[tt,nt]=(0,b.useState)(!1),[rt,F]=(0,b.useState)(!1),[it,at]=(0,b.useState)(!1),[I]=p.useForm(),[ot,st]=(0,b.useState)([]),[L,R]=(0,b.useState)(null),[ct,lt]=(0,b.useState)(!1),[z]=p.useForm(),[B,V]=(0,b.useState)(0),[H,ut]=(0,b.useState)(``),[dt,U]=(0,b.useState)(!1),[W,ft]=(0,b.useState)(0),[pt,G]=(0,b.useState)(!1),[mt,ht]=(0,b.useState)(`current`),[gt,K]=(0,b.useState)(!1),[_t,vt]=(0,b.useState)(`current`),q=(0,b.useMemo)(()=>{let e=new Map;return(C?.items??[]).forEach(t=>{t.supplier_id>0&&t.supplier?.name&&e.set(t.supplier_id,t.supplier.name)}),Array.from(e,([e,t])=>({id:e,name:t}))},[C?.items]),yt=(0,b.useMemo)(()=>{let e=new Set;return(C?.items??[]).forEach(t=>{t.supplier_id===B&&t.market&&e.add(t.market)}),Array.from(e)},[C?.items,B]),J=(0,b.useMemo)(()=>!C||B<=0?[]:C.items.filter(e=>e.supplier_id===B).filter(e=>H===``||(e.market??``)===H).map(e=>({product_id:e.product_id,product_name:e.product_name,product_spec:e.product_spec,unit:e.unit,market:e.market,cost_price:String(e.cost_price),quantity:e.quantity,weight:String(e.weight),amount:(e.quantity*Number(e.cost_price)).toFixed(2)})),[C,B,H]),[bt,xt]=(0,b.useState)(!1),[Y,X]=(0,b.useState)(null),[St,Ct]=(0,b.useState)(!1),[wt,Tt]=(0,b.useState)(!1),[Z]=p.useForm(),Et=p.useWatch(`stores`,Z)??[],Dt=(Y?.stores??[]).map((e,t)=>{let n=Et[t]??{},r=Number(n.delivery_fee??0),i=Number(n.after_sale??0),a=Number(n.box_num??0)*Number(e.box_price)+Number(n.tray_num??0)*Number(e.tray_price);return{added:a,total:Number(e.product_amount)+r+a+i}}),Ot=(Y?.stores??[]).length>0&&Y.stores.every(e=>e.bill!==null);(0,b.useEffect)(()=>{De().then(e=>He(e.data.data??[]))},[]),(0,b.useEffect)(()=>{Ue&&D&&Lt()},[Ue,D]),(0,b.useEffect)(()=>{C&&C.stores.length>0&&$e(e=>C.stores.some(t=>t.id===e)?e:C.stores[0].id)},[C]),(0,b.useEffect)(()=>{q.length>0?V(e=>q.some(t=>t.id===e)?e:q[0].id):V(0)},[q]),(0,b.useEffect)(()=>{t&&M===`stores`&&C&&N>0&&At()},[t,M,N,C?.purchase.id]);let Q=async e=>{Fe(!0);try{let t=await ve(e);Ne(t.data.data??null)}finally{Fe(!1)}},kt=async e=>{Qe(`items`),et(null),n(!0),await Q(e)},At=async()=>{if(!(!C||N<=0)){nt(!0);try{let e=await Te(C.purchase.id,N);et(e.data.data??null)}finally{nt(!1)}}},$=async()=>{await At(),C&&await Q(C.purchase.id),await e.current?.reload()},jt=()=>{I.resetFields(),F(!0),ot.length===0&&Oe().then(e=>st(e.data.data??[]))},Mt=async e=>{if(!(!C||N<=0)){at(!0);try{await we(C.purchase.id,N,e),h.success(`已添加单品,订货单与采购单汇总已重算`),F(!1),await $()}finally{at(!1)}}},Nt=e=>{R(e),z.setFieldsValue({quantity:e.quantity,price:Number(e.price??0),weight:Number(e.weight??0)})},Pt=async e=>{if(!(!C||!L||N<=0)){lt(!0);try{await ye(C.purchase.id,N,L.product_id,e),h.success(`单品已更新,订货单与采购单汇总已重算`),R(null),await $()}finally{lt(!1)}}},Ft=async e=>{!C||N<=0||(await he(C.purchase.id,N,e.product_id),h.success(`已移除单品,订货单与采购单汇总已重算`),await $())},It=(e,t)=>{Je({productId:e.product_id,storeId:t.id}),qe(null),We(!0)},Lt=async()=>{if(!(!C||!D)){Ke(!0);try{let e=await me(C.purchase.id,D.productId,D.storeId);qe(e.data.data??null)}finally{Ke(!1)}}},Rt=async()=>{await Lt(),C&&await Q(C.purchase.id),await e.current?.reload()},zt=e=>{A(e),j.setFieldsValue({quantity:e.quantity,price:Number(e.price??0),weight:Number(e.weight??0)}),O(!0)},Bt=async e=>{if(k?.id){Ze(!0);try{await ge(k.id,e),h.success(`明细已更新,订货单与采购单汇总已重算`),O(!1),A(null),await Rt()}finally{Ze(!1)}}},Vt=e=>{T(e),Be.setFieldsValue({product_name:e.product_name,supplier_id:e.supplier_id>0?e.supplier_id:void 0,product_spec:e.product_spec,unit:e.unit,cost_price:Number(e.cost_price)})},Ht=async t=>{if(!(!C||!w)){ze(!0);try{let n=await xe(C.purchase.id,w.product_id,{...t,supplier_id:t.supplier_id??0});h.success(`已更新 ${n.data.data?.count??0} 条订货明细`),T(null),await Q(C.purchase.id),await e.current?.reload()}finally{ze(!1)}}},Ut=async e=>{xt(!0),Ct(!0),X(null);try{let t=(await Ce(e)).data.data??null;X(t),Z.setFieldsValue({stores:(t?.stores??[]).map(e=>({store_id:e.store_id,delivery_fee:e.bill?Number(e.bill.delivery_fee):0,box_num:e.bill?e.bill.box_num:0,tray_num:e.bill?e.bill.tray_num:0,after_sale:e.bill?Number(e.bill.after_sale):0,remark:e.bill?.remark??``}))})}finally{Ct(!1)}},Wt=async t=>{if(Y){Tt(!0);try{let n=await pe(Y.purchase.id,t.stores);h.success(`已生成 ${n.data.data?.count??0} 张门店账单,采购单订单已关联`),xt(!1),X(null),await e.current?.reload(),C&&C.purchase.id===Y.purchase.id&&await Q(C.purchase.id)}finally{Tt(!1)}}},Gt=async t=>{Le(!0);try{await re(`/purchase/order/${t}/finish`,{status:3}),h.success(`采购单已标记完成`),await e.current?.reload()}finally{Le(!1)}},Kt=()=>{let e=[{title:`品名`,dataIndex:`product_name`,width:160,align:`center`,fixed:`left`,ellipsis:!0},{title:`供应商`,dataIndex:`supplier`,width:110,align:`center`,fixed:`left`,render:(e,t)=>t.supplier?.name??`-`},{title:`市场`,fixed:`left`,dataIndex:`market`,width:90,align:`center`,render:e=>e||`-`},{title:`单价`,key:`retail_price`,width:100,align:`center`,render:(e,t)=>{let n=Number(t.quantity??0);return n<=0?(0,x.jsx)(S,{type:`secondary`,children:`-`}):`¥${Ae(Number(t.amount??0)/n,t.product_spec??``).toFixed(2)}`}},{title:`包规`,dataIndex:`product_spec`,align:`center`,width:90,render:e=>e||`-`},{title:`单位`,dataIndex:`unit`,width:70,align:`center`,render:e=>e||`-`},{title:`成本`,dataIndex:`cost_price`,width:90,align:`center`,render:e=>`¥${Number(e).toFixed(2)}`},{title:`合计数量`,key:`total_quantity`,width:90,align:`center`,render:(e,t)=>(0,x.jsx)(S,{strong:!0,children:t.quantity})}],t=(C?.stores??[]).map(e=>({title:(0,x.jsx)(`span`,{className:`text-[red]`,children:e.name}),key:`store-${e.id}`,width:100,align:`center`,render:(t,n)=>{let i=n.cells[e.id];return i===void 0?(0,x.jsx)(S,{type:`secondary`,children:`-`}):(0,x.jsx)(r.Link,{onClick:()=>It(n,e),children:i})}})),n=[{title:`操作`,key:`action`,width:90,fixed:`right`,align:`center`,render:(e,t)=>(0,x.jsx)(x.Fragment,{children:C?.purchase.status===0?(0,x.jsx)(v,{auth:`purchase.order.update`,children:(0,x.jsx)(c,{size:`small`,type:`link`,icon:(0,x.jsx)(ce,{}),onClick:()=>Vt(t),children:`修改`})}):`-`})}];return[...e,...t,...n]},qt=()=>{let e=C?.stores??[],t=C?.items??[],n=e.map(e=>t.reduce((t,n)=>t+(n.cells[e.id]??0)*Number(n.cost_price),0)),r=t.reduce((e,t)=>e+Number(t.quantity),0),i=n.reduce((e,t)=>e+t,0);return(0,x.jsxs)(o.Summary.Row,{children:[(0,x.jsx)(o.Summary.Cell,{index:0,colSpan:7,align:`center`,children:(0,x.jsx)(S,{strong:!0,children:`成本统计(按门店)`})}),(0,x.jsx)(o.Summary.Cell,{index:8,align:`center`,children:(0,x.jsx)(S,{strong:!0,children:r})}),n.map((t,n)=>(0,x.jsx)(o.Summary.Cell,{index:8+n,align:`center`,children:(0,x.jsxs)(S,{strong:!0,children:[`¥`,t.toFixed(2)]})},e[n].id)),(0,x.jsx)(o.Summary.Cell,{index:9+e.length,align:`center`,children:(0,x.jsxs)(S,{strong:!0,children:[`¥`,i.toFixed(2)]})})]})},Jt=[{title:`商品`,dataIndex:`product_name`,width:160,align:`center`},{title:`市场`,dataIndex:`market`,width:90,align:`center`,render:e=>e||`-`},{title:`单价`,key:`retail_price`,width:130,align:`center`,render:(e,t)=>`¥${Ae(Number(t.price),t.product_spec).toFixed(2)}`},{title:`包规`,dataIndex:`product_spec`,width:90,align:`center`,render:e=>e||`-`},{title:`单位`,dataIndex:`unit`,width:90,align:`center`,render:e=>e||`-`},{title:`单价`,dataIndex:`price`,width:100,align:`center`,render:e=>`¥${Number(e).toFixed(2)}`},{title:`数量`,dataIndex:`quantity`,width:90,align:`center`,render:e=>(0,x.jsx)(S,{strong:!0,children:e})},{title:`重量`,dataIndex:`weight`,width:90,align:`center`,render:e=>`${e||`-`}斤`},{title:`预计金额`,dataIndex:`amount`,width:110,align:`center`,render:e=>(0,x.jsxs)(S,{strong:!0,children:[`¥`,Number(e).toFixed(2)]})},{title:`操作`,key:`action`,width:130,align:`center`,render:(e,t)=>C?.purchase.status===0?(0,x.jsxs)(s,{size:0,children:[(0,x.jsx)(v,{auth:`purchase.order.update`,children:(0,x.jsx)(c,{type:`link`,size:`small`,icon:(0,x.jsx)(ce,{}),onClick:()=>Nt(t),children:`编辑`})}),(0,x.jsx)(v,{auth:`purchase.order.update`,children:(0,x.jsx)(le,{title:`移除该单品?`,description:`将从「${P?.store?.name??`该门店`}」采购明细中移除「${t.product_name}」`,onConfirm:()=>Ft(t),children:(0,x.jsx)(c,{type:`link`,size:`small`,danger:!0,icon:(0,x.jsx)(ue,{}),children:`移除`})})})]}):(0,x.jsx)(S,{type:`secondary`,children:`-`})}],Yt=()=>{let e=P?.items??[],t=e.reduce((e,t)=>e+Number(t.quantity),0),n=e.reduce((e,t)=>e+Number(t.amount),0),r=e.reduce((e,t)=>e+Number(t.weight),0);return(0,x.jsxs)(o.Summary.Row,{children:[(0,x.jsx)(o.Summary.Cell,{index:0,colSpan:6,align:`center`,children:(0,x.jsx)(S,{strong:!0,children:`合计`})}),(0,x.jsx)(o.Summary.Cell,{index:6,align:`center`,children:(0,x.jsx)(S,{strong:!0,children:t})}),(0,x.jsx)(o.Summary.Cell,{index:7,align:`center`,children:(0,x.jsxs)(S,{strong:!0,children:[r.toFixed(3),`斤`]})}),(0,x.jsx)(o.Summary.Cell,{index:8,align:`center`,children:(0,x.jsxs)(S,{strong:!0,type:`danger`,children:[`¥`,n.toFixed(2)]})}),(0,x.jsx)(o.Summary.Cell,{index:9,align:`center`,children:(0,x.jsx)(S,{strong:!0,children:`-`})})]})},Xt=[{title:`品名`,dataIndex:`product_name`,width:180,align:`center`},{title:`市场`,dataIndex:`market`,width:100,align:`center`,render:e=>e||`-`},{title:`包规`,dataIndex:`product_spec`,width:110,align:`center`,render:e=>e||`-`},{title:`单位`,dataIndex:`unit`,width:90,align:`center`,render:e=>e||`-`},{title:`成本价`,dataIndex:`cost_price`,width:110,align:`center`,render:e=>`¥${Number(e).toFixed(2)}`},{title:`数量`,dataIndex:`quantity`,width:100,align:`center`,render:e=>(0,x.jsx)(S,{strong:!0,children:e})},{title:`重量`,dataIndex:`weight`,width:110,align:`center`,render:e=>`${Number(e).toFixed(3)}斤`},{title:`金额`,dataIndex:`amount`,width:120,align:`center`,render:e=>(0,x.jsxs)(S,{strong:!0,children:[`¥`,Number(e).toFixed(2)]})}],Zt=()=>{let e=J.reduce((e,t)=>e+Number(t.quantity),0),t=J.reduce((e,t)=>e+Number(t.weight),0),n=J.reduce((e,t)=>e+Number(t.amount),0);return(0,x.jsxs)(o.Summary.Row,{children:[(0,x.jsx)(o.Summary.Cell,{index:0,colSpan:5,align:`center`,children:(0,x.jsx)(S,{strong:!0,children:`合计`})}),(0,x.jsx)(o.Summary.Cell,{index:5,align:`center`,children:(0,x.jsx)(S,{strong:!0,children:e})}),(0,x.jsx)(o.Summary.Cell,{index:6,align:`center`,children:(0,x.jsxs)(S,{strong:!0,children:[t.toFixed(3),`斤`]})}),(0,x.jsx)(o.Summary.Cell,{index:7,align:`center`,children:(0,x.jsxs)(S,{strong:!0,type:`danger`,children:[`¥`,n.toFixed(2)]})})]})},Qt=[{title:`门店`,dataIndex:`store_name`,width:140,align:`center`},{title:`账单号`,dataIndex:`bill_no`,width:180,align:`center`,render:e=>(0,x.jsx)(S,{copyable:{text:e},children:e})},{title:`账单日期`,dataIndex:`bill_date`,width:110,align:`center`},{title:`商品金额`,dataIndex:`product_amount`,width:110,align:`center`,render:e=>`¥${Number(e).toFixed(2)}`},{title:`配送费`,dataIndex:`delivery_fee`,width:100,align:`center`,render:e=>`¥${Number(e).toFixed(2)}`},{title:`周转筐`,key:`box`,width:110,align:`center`,render:(e,t)=>`${t.box_num} × ¥${Number(t.box_price).toFixed(2)}`},{title:`周转托盘`,key:`tray`,width:110,align:`center`,render:(e,t)=>`${t.tray_num} × ¥${Number(t.tray_price).toFixed(2)}`},{title:`附加金额`,dataIndex:`added_amount`,width:100,align:`center`,render:e=>`¥${Number(e).toFixed(2)}`},{title:`账单总金额`,dataIndex:`total_amount`,width:120,align:`center`,render:e=>(0,x.jsxs)(S,{strong:!0,type:`danger`,children:[`¥`,Number(e).toFixed(2)]})},{title:`支付状态`,dataIndex:`status`,width:100,align:`center`,render:e=>{let t=Ee[Number(e??0)];return(0,x.jsx)(g,{color:t?.color,children:t?.text})}}],$t=()=>{let e=C?.bills??[],t=e.reduce((e,t)=>e+Number(t.product_amount),0),n=e.reduce((e,t)=>e+Number(t.delivery_fee),0),r=e.reduce((e,t)=>e+Number(t.added_amount),0),i=e.reduce((e,t)=>e+Number(t.total_amount),0);return(0,x.jsxs)(o.Summary.Row,{children:[(0,x.jsx)(o.Summary.Cell,{index:0,colSpan:3,align:`center`,children:(0,x.jsx)(S,{strong:!0,children:`合计`})}),(0,x.jsx)(o.Summary.Cell,{index:3,align:`center`,children:(0,x.jsxs)(S,{strong:!0,children:[`¥`,t.toFixed(2)]})}),(0,x.jsx)(o.Summary.Cell,{index:4,align:`center`,children:(0,x.jsxs)(S,{strong:!0,children:[`¥`,n.toFixed(2)]})}),(0,x.jsx)(o.Summary.Cell,{index:5,colSpan:2,align:`center`,children:(0,x.jsx)(S,{strong:!0,children:`-`})}),(0,x.jsx)(o.Summary.Cell,{index:7,align:`center`,children:(0,x.jsxs)(S,{strong:!0,children:[`¥`,r.toFixed(2)]})}),(0,x.jsx)(o.Summary.Cell,{index:8,align:`center`,children:(0,x.jsxs)(S,{strong:!0,type:`danger`,children:[`¥`,i.toFixed(2)]})}),(0,x.jsx)(o.Summary.Cell,{index:9,align:`center`,children:(0,x.jsx)(S,{strong:!0,children:`-`})})]})},en=[{title:`采购单号`,dataIndex:`purchase_no`,valueType:`text`,hideInForm:!0,align:`center`,width:260,render:(e,t)=>(0,x.jsx)(S,{copyable:{text:t.purchase_no},children:t.purchase_no})},{title:`采购日期`,dataIndex:`purchase_date`,valueType:`date`,align:`center`,hideInForm:!0,render:(e,t)=>t.purchase_date},{title:`预估成本`,dataIndex:`estimate_amount`,hideInForm:!0,hideInSearch:!0,align:`center`,render:(e,t)=>`¥${t.estimate_amount}`},{title:`实际成本`,dataIndex:`actual_amount`,hideInSearch:!0,valueType:`digit`,fieldProps:{min:0,precision:3,placeholder:`请输入单价`},align:`center`,render:(e,t)=>Number(t.actual_amount)>0?(0,x.jsxs)(S,{strong:!0,children:[`¥`,t.actual_amount]}):(0,x.jsx)(S,{type:`secondary`,children:`未录入`})},{title:`总件数`,dataIndex:`total_quantity`,hideInForm:!0,hideInSearch:!0,align:`center`},{title:`备注`,dataIndex:`remark`,valueType:`textarea`,hideInTable:!0,hideInSearch:!0},{title:`总重量`,dataIndex:`total_weight`,hideInForm:!0,hideInSearch:!0,align:`center`,render:(e,t)=>`${t.total_weight}斤`},{title:`状态`,dataIndex:`status`,valueType:`select`,hideInForm:!0,fieldProps:{options:Object.entries(y).map(([e,t])=>({value:Number(e),label:t.text}))},render:(e,t)=>{let n=y[t.status??0];return(0,x.jsx)(g,{color:n?.color,children:n?.text})},align:`center`},{title:`制单人`,dataIndex:`operator`,hideInForm:!0,hideInSearch:!0,render:(e,t)=>t.operator?.nickname??`-`,align:`center`}];return(0,x.jsxs)(x.Fragment,{children:[(0,x.jsxs)(`div`,{className:`mb-5`,children:[(0,x.jsx)(ke,{level:3,children:`采购单`}),(0,x.jsx)(S,{type:`secondary`,children:`在「门店订单」页勾选已接单订单合并生成采购单;采购单支持修改订单信息。`})]}),(0,x.jsx)(de,{api:`/purchase/order`,columns:en,rowKey:`id`,accessName:`purchase.order`,tableRef:e,operateRender:(e,t)=>[e.status===0?t.edit:null,(0,x.jsx)(c,{size:`small`,icon:(0,x.jsx)(ee,{}),type:`primary`,onClick:()=>kt(e.id)},`detail`),e.status===0?(0,x.jsx)(v,{auth:`purchase.order.update`,children:(0,x.jsx)(le,{title:`确认该采购单已完成?`,description:`已完成采购单将锁定,不能再修改订单信息`,onConfirm:()=>Gt(e.id),children:(0,x.jsx)(c,{type:`primary`,size:`small`,variant:`solid`,color:`green`,loading:Ie,children:`完成采购`})})}):(0,x.jsx)(v,{auth:`purchase.order.bill`,children:(0,x.jsx)(c,{type:`primary`,size:`small`,variant:`solid`,color:`orange`,icon:(0,x.jsx)(te,{}),onClick:()=>Ut(e.id),children:`生成账单`})})],operateProps:{width:300},formProps:!1}),(0,x.jsx)(i,{title:C?`采购单 ${C.purchase.purchase_no}`:`采购单详情`,open:t,onClose:()=>n(!1),size:je,resizable:{onResize:e=>Me(e)},loading:Pe,children:C&&(0,x.jsxs)(x.Fragment,{children:[(0,x.jsx)(ke,{level:5,className:`mb-3!`,children:`采购单信息`}),(0,x.jsxs)(f,{column:3,size:`small`,bordered:!0,children:[(0,x.jsx)(f.Item,{label:`采购日期`,children:C.purchase.purchase_date}),(0,x.jsx)(f.Item,{label:`状态`,children:(0,x.jsx)(g,{color:y[C.purchase.status??0]?.color,children:y[C.purchase.status??0]?.text})}),(0,x.jsx)(f.Item,{label:`制单人`,children:C.purchase.operator?.nickname??`-`}),(0,x.jsxs)(f.Item,{label:`预估成本`,children:[`¥`,C.purchase.estimate_amount]}),(0,x.jsxs)(f.Item,{label:`实际成本`,children:[`¥`,C.purchase.actual_amount]}),(0,x.jsx)(f.Item,{label:`总件数`,children:C.purchase.total_quantity}),(0,x.jsx)(f.Item,{label:`总重量`,children:C.purchase.total_weight}),(0,x.jsx)(f.Item,{label:`创建时间`,span:2,children:C.purchase.created_at}),(0,x.jsx)(f.Item,{label:`备注`,span:3,children:C.purchase.remark})]}),(0,x.jsx)(ae,{activeKey:M,onChange:Qe,className:`mt-3!`,items:[{key:`items`,label:`商品明细`},{key:`stores`,label:`门店购买详情`},{key:`suppliers`,label:`供应商采购明细`},{key:`bills`,label:`门店账单`}]}),M===`stores`?(0,x.jsxs)(x.Fragment,{children:[(0,x.jsxs)(`div`,{className:`mb-3 flex items-center justify-between gap-2`,children:[(0,x.jsxs)(`div`,{className:`flex items-center gap-2`,children:[(0,x.jsx)(S,{children:`选择门店:`}),(0,x.jsx)(l,{value:N||void 0,onChange:e=>$e(e),placeholder:`选择门店`,className:`w-60!`,showSearch:!0,optionFilterProp:`label`,options:C.stores.map(e=>({value:e.id,label:e.name}))})]}),(0,x.jsxs)(s,{children:[C.purchase.status===0&&(0,x.jsx)(v,{auth:`purchase.order.update`,children:(0,x.jsx)(c,{icon:(0,x.jsx)(ne,{}),onClick:jt,children:`新增单品`})}),(0,x.jsx)(v,{auth:`purchase.order.export`,children:(0,x.jsx)(c,{type:`primary`,ghost:!0,icon:(0,x.jsx)(_,{}),onClick:()=>{ht(`current`),G(!0)},children:`导出`})})]})]}),(0,x.jsx)(oe,{spinning:tt,children:P&&P.items.length>0?(0,x.jsx)(o,{rowKey:`product_id`,size:`small`,bordered:!0,columns:Jt,dataSource:P.items,pagination:!1,scroll:{x:`max-content`},summary:Yt}):!tt&&(0,x.jsx)(u,{image:u.PRESENTED_IMAGE_SIMPLE,description:`该门店在此采购单中无采购商品`,className:`py-8!`})})]}):M===`suppliers`?(0,x.jsxs)(x.Fragment,{children:[(0,x.jsxs)(`div`,{className:`mb-3 flex items-center justify-between gap-2`,children:[(0,x.jsxs)(`div`,{className:`flex items-center gap-2`,children:[(0,x.jsx)(S,{children:`选择供应商:`}),(0,x.jsx)(l,{value:B||void 0,onChange:e=>{V(e),ut(``)},placeholder:`选择供应商`,className:`w-60!`,showSearch:!0,optionFilterProp:`label`,options:q.map(e=>({value:e.id,label:e.name}))}),(0,x.jsx)(S,{children:`市场:`}),(0,x.jsx)(l,{value:H,onChange:ut,className:`w-40!`,options:[{value:``,label:`全部市场`},...yt.map(e=>({value:e,label:e}))]})]}),(0,x.jsx)(v,{auth:`purchase.order.export`,children:(0,x.jsx)(c,{type:`primary`,ghost:!0,icon:(0,x.jsx)(_,{}),onClick:()=>{vt(`current`),K(!0)},children:`导出`})})]}),J.length>0?(0,x.jsx)(o,{rowKey:`product_id`,size:`small`,bordered:!0,columns:Xt,dataSource:J,pagination:!1,scroll:{x:`max-content`},summary:Zt}):(0,x.jsx)(u,{image:u.PRESENTED_IMAGE_SIMPLE,description:`该供应商在此采购单中无采购明细`,className:`py-8!`})]}):M===`bills`?C.bills.length>0?(0,x.jsx)(o,{rowKey:`id`,size:`small`,bordered:!0,columns:Qt,dataSource:C.bills,pagination:!1,scroll:{x:`max-content`},summary:$t}):(0,x.jsx)(u,{image:u.PRESENTED_IMAGE_SIMPLE,description:C.purchase.status===0?`采购单完成后可在列表操作列生成账单`:`该采购单暂未生成账单`,className:`py-8!`}):(0,x.jsxs)(x.Fragment,{children:[(0,x.jsx)(s,{style:{marginBottom:20},children:(0,x.jsx)(v,{auth:`purchase.order.export`,children:(0,x.jsx)(c,{type:`primary`,ghost:!0,icon:(0,x.jsx)(_,{}),onClick:()=>{ft(0),U(!0)},children:`导出`})},`export`)}),(0,x.jsx)(o,{rowKey:`product_id`,size:`small`,bordered:!0,columns:Kt(),dataSource:C.items,pagination:!1,scroll:{x:1200,y:800},summary:qt})]})]})}),(0,x.jsxs)(d,{title:w?`修改「${w.product_name}」`:`修改明细行`,open:w!==null,onCancel:()=>T(null),destroyOnHidden:!0,footer:[(0,x.jsx)(c,{onClick:()=>T(null),children:`取消`},`cancel`),(0,x.jsx)(c,{type:`primary`,loading:Re,onClick:()=>Be.submit(),children:`保存`},`purchase`)],children:[(0,x.jsx)(`div`,{className:`py-2 text-gray-500`,children:`保存将同步修改本采购单中该商品的所有订单项,并同步保存到商品档案(商品列表);修改成本时,各门店单价按等级上浮比例自动重算。`}),(0,x.jsxs)(p,{form:Be,layout:`vertical`,onFinish:Ht,children:[(0,x.jsx)(p.Item,{label:`品名`,name:`product_name`,rules:[{required:!0,message:`请输入品名`},{max:100}],children:(0,x.jsx)(m,{maxLength:100})}),(0,x.jsx)(p.Item,{label:`供应商`,name:`supplier_id`,rules:[{required:!0,message:`请选择供应商`}],children:(0,x.jsx)(l,{allowClear:!0,showSearch:{optionFilterProp:`label`},placeholder:`选择供应商`,options:Ve.map(e=>({value:e.id,label:e.name}))})}),(0,x.jsx)(p.Item,{label:`包规`,name:`product_spec`,rules:[{required:!0,message:`请输入包规`},{max:100}],children:(0,x.jsx)(m,{maxLength:100,placeholder:`如:10斤/箱`})}),(0,x.jsx)(p.Item,{label:`单位`,name:`unit`,rules:[{required:!0,message:`请输入单位`},{max:20}],children:(0,x.jsx)(m,{maxLength:20,placeholder:`如:斤`})}),(0,x.jsx)(p.Item,{label:`成本`,name:`cost_price`,rules:[{required:!0,message:`请输入成本`}],children:(0,x.jsx)(a,{min:0,precision:2,prefix:`¥`,className:`w-full`})})]})]}),(0,x.jsx)(d,{title:E?`${E.store?.name??``} · ${E.product?.name??``}`:`门店商品明细`,open:Ue,onCancel:()=>We(!1),footer:null,width:1e3,destroyOnHidden:!0,styles:{body:{paddingTop:16}},children:(0,x.jsx)(oe,{spinning:Ge,children:E&&(0,x.jsxs)(x.Fragment,{children:[E.items.length===0?(0,x.jsx)(u,{image:u.PRESENTED_IMAGE_SIMPLE,description:`该门店无此商品明细`,className:`py-8!`}):(0,x.jsxs)(`div`,{className:`overflow-hidden rounded border border-gray-200`,children:[(0,x.jsxs)(`div`,{className:`flex bg-gray-50 px-4 py-2 text-sm text-gray-500`,children:[(0,x.jsx)(`div`,{className:`flex-1`,children:`商品信息`}),(0,x.jsx)(`div`,{className:`w-30 shrink-0 text-center`,children:`单价`}),(0,x.jsx)(`div`,{className:`w-26 shrink-0 text-center`,children:`订货量`}),(0,x.jsx)(`div`,{className:`w-33 shrink-0 text-center`,children:`订货金额`}),(0,x.jsx)(`div`,{className:`w-33 shrink-0 text-center`,children:`重量`}),(0,x.jsx)(`div`,{className:`w-40 shrink-0 text-center`,children:`操作`})]}),E.items.map(e=>(0,x.jsxs)(`div`,{className:`flex items-center border-t border-gray-100 px-4 py-3`,children:[(0,x.jsxs)(`div`,{className:`flex min-w-0 flex-1 items-center`,children:[(0,x.jsx)(se.PreviewGroup,{children:e.image?(0,x.jsx)(se,{src:e.image,width:48,height:48,style:{objectFit:`cover`,borderRadius:4}}):(0,x.jsx)(`div`,{className:`flex h-12 w-12 shrink-0 items-center justify-center rounded bg-gray-100 text-xs text-gray-400`,children:`暂无图片`})}),(0,x.jsxs)(`div`,{className:`ml-3 min-w-0`,children:[(0,x.jsxs)(`div`,{className:`text-sm font-medium`,children:[e.product_name,(0,x.jsx)(g,{className:`ml-2!`,color:fe[e.order_status]?.color,children:fe[e.order_status]?.text})]}),(0,x.jsxs)(`div`,{className:`mt-0.5 text-xs text-gray-500`,children:[`订单:`,e.order_no]}),e.remark?(0,x.jsxs)(`div`,{className:`mt-0.5 truncate text-xs text-gray-500`,children:[`备注:`,e.remark]}):null]})]}),(0,x.jsxs)(`div`,{className:`w-30 shrink-0 text-center`,children:[`¥`,e.price]}),(0,x.jsx)(`div`,{className:`w-26 shrink-0 text-center`,children:e.quantity}),(0,x.jsx)(`div`,{className:`w-33 shrink-0 text-center`,children:(0,x.jsxs)(S,{strong:!0,children:[`¥`,e.amount]})}),(0,x.jsxs)(`div`,{className:`w-33 shrink-0 text-center`,children:[e.weight??`-`,` 斤`]}),(0,x.jsx)(`div`,{className:`w-40 shrink-0 text-center`,children:C?.purchase.status===0?(0,x.jsx)(s,{size:0,children:(0,x.jsx)(v,{auth:`purchase.order.update`,children:(0,x.jsx)(c,{type:`link`,size:`small`,icon:(0,x.jsx)(ce,{}),onClick:()=>zt(e),children:`编辑`})})}):(0,x.jsx)(S,{type:`secondary`,children:`-`})})]},e.id))]}),E.items.length>0&&(0,x.jsxs)(`div`,{className:`mt-3! flex justify-end gap-6 text-sm`,children:[(0,x.jsxs)(S,{type:`secondary`,children:[`合计数量:`,(0,x.jsx)(S,{strong:!0,children:E.items.reduce((e,t)=>e+t.quantity,0)})]}),(0,x.jsxs)(S,{type:`secondary`,children:[`合计订货金额:`,(0,x.jsxs)(S,{strong:!0,type:`danger`,children:[`¥`,E.items.reduce((e,t)=>e+Number(t.amount),0).toFixed(2)]})]})]})]})})}),(0,x.jsxs)(d,{title:k?`编辑「${k.product_name}」`:`编辑明细`,open:Ye,onCancel:()=>{O(!1),A(null)},onOk:()=>j.submit(),confirmLoading:Xe,okText:`保存`,destroyOnHidden:!0,children:[(0,x.jsxs)(`div`,{className:`py-2 text-gray-500`,children:[`订单 `,k?.order_no,`;修改保存后,系统将自动重算明细金额、订货单与采购单汇总。`]}),(0,x.jsxs)(p,{form:j,layout:`vertical`,onFinish:Bt,children:[(0,x.jsx)(p.Item,{label:`单价(元)`,name:`price`,rules:[{required:!0,message:`请输入单价`}],children:(0,x.jsx)(a,{className:`w-full`,min:0,precision:2,placeholder:`请输入单价`})}),(0,x.jsx)(p.Item,{label:`订货量`,name:`quantity`,rules:[{required:!0,message:`请输入订货量`}],children:(0,x.jsx)(a,{className:`w-full`,min:0,precision:0,placeholder:`请输入订货量`})}),(0,x.jsx)(p.Item,{label:`称重`,name:`weight`,rules:[{required:!0,message:`请输入称重`}],children:(0,x.jsx)(a,{className:`w-full`,min:0,precision:3,placeholder:`请输入称重`})})]})]}),(0,x.jsx)(d,{title:Y?`生成账单 · ${Y.purchase.purchase_no}`:`生成账单`,open:bt,onCancel:()=>{xt(!1),X(null)},onOk:()=>Z.submit(),confirmLoading:wt,okText:`确认生成`,okButtonProps:{disabled:Ot},width:1280,destroyOnHidden:!0,children:(0,x.jsx)(oe,{spinning:St,children:Y&&(0,x.jsxs)(x.Fragment,{children:[(0,x.jsxs)(`div`,{className:`py-2 text-gray-500`,children:[`每个门店单独生成一张账单;商品金额由订单汇总不可修改,请填写各门店的配送费、周转筐/托盘数量(正数=压筐附加金额,负数=回筐抵扣金额)、售后金额(可正负,计入总金额:正数=加收,负数=售后减免)与备注(可选,随账单存档)。`,Ot?`该采购单已全部生成账单,仅可查看。`:`生成后采购单中的全部订单将关联到对应门店账单。`]}),(0,x.jsx)(p,{form:Z,layout:`vertical`,onFinish:Wt,children:(0,x.jsx)(p.List,{name:`stores`,children:e=>(0,x.jsxs)(`div`,{className:`overflow-hidden rounded border border-gray-200`,children:[(0,x.jsxs)(`div`,{className:`flex bg-gray-50 px-4 py-2 text-sm text-gray-500`,children:[(0,x.jsx)(`div`,{className:`w-40 shrink-0`,children:`门店`}),(0,x.jsx)(`div`,{className:`w-28 shrink-0 text-center`,children:`商品金额`}),(0,x.jsx)(`div`,{className:`w-32 shrink-0 text-center`,children:`配送费(元)`}),(0,x.jsxs)(`div`,{className:`w-32 shrink-0 text-center`,children:[`周转筐(¥`,Y.stores[0]?.box_price??`0.00`,`/个)`]}),(0,x.jsxs)(`div`,{className:`w-32 shrink-0 text-center`,children:[`周转托盘(¥`,Y.stores[0]?.tray_price??`0.00`,`/个)`]}),(0,x.jsx)(`div`,{className:`w-36 shrink-0 text-center`,children:`售后金额(元)`}),(0,x.jsx)(`div`,{className:`w-36 shrink-0 text-center`,children:`备注`}),(0,x.jsx)(`div`,{className:`w-28 shrink-0 text-center`,children:`附加金额`}),(0,x.jsx)(`div`,{className:`flex-1 text-center`,children:`账单总金额`})]}),e.map(e=>{let t=Y.stores[e.name],n=t?.bill!=null;return(0,x.jsxs)(`div`,{className:`flex items-center border-t border-gray-100 px-4 py-2`,children:[(0,x.jsxs)(`div`,{className:`w-40 shrink-0 pr-2 text-sm`,children:[(0,x.jsx)(`div`,{children:t?.store_name??`-`}),(0,x.jsxs)(`div`,{className:`text-xs text-gray-400`,children:[t?.order_count??0,` 笔订单`,n&&(0,x.jsx)(g,{className:`ml-1!`,color:`success`,children:`已生成`})]})]}),(0,x.jsx)(`div`,{className:`w-28 shrink-0 text-center`,children:(0,x.jsxs)(S,{strong:!0,children:[`¥`,t?.product_amount??`0.00`]})}),(0,x.jsx)(p.Item,{name:[e.name,`store_id`],hidden:!0,children:(0,x.jsx)(m,{})}),(0,x.jsx)(p.Item,{className:`m-0! w-32 shrink-0 px-1!`,name:[e.name,`delivery_fee`],rules:[{required:!0,message:`请输入配送费`}],children:(0,x.jsx)(a,{className:`w-full`,min:0,precision:2,disabled:n,placeholder:`配送费`})}),(0,x.jsx)(p.Item,{className:`m-0! w-32 shrink-0 px-1!`,name:[e.name,`box_num`],rules:[{required:!0,message:`请输入周转筐数量`}],children:(0,x.jsx)(a,{className:`w-full`,precision:0,disabled:n,placeholder:`正压负回`})}),(0,x.jsx)(p.Item,{className:`m-0! w-32 shrink-0 px-1!`,name:[e.name,`tray_num`],rules:[{required:!0,message:`请输入周转托盘数量`}],children:(0,x.jsx)(a,{className:`w-full`,precision:0,disabled:n,placeholder:`正压负回`})}),(0,x.jsx)(p.Item,{className:`m-0! w-36 shrink-0 px-1!`,name:[e.name,`after_sale`],children:(0,x.jsx)(a,{className:`w-full`,precision:2,disabled:n,placeholder:`可正负,计入总额`})}),(0,x.jsx)(p.Item,{className:`m-0! w-36 shrink-0 px-1!`,name:[e.name,`remark`],children:(0,x.jsx)(m,{maxLength:255,disabled:n,placeholder:`备注(可选)`})}),(0,x.jsxs)(`div`,{className:`w-28 shrink-0 text-center`,children:[`¥`,(n?Number(t.bill.added_amount):Dt[e.name]?.added??0).toFixed(2)]}),(0,x.jsxs)(`div`,{className:`flex-1 text-center`,children:[(0,x.jsxs)(S,{strong:!0,type:`danger`,children:[`¥`,(n?Number(t.bill.total_amount):Dt[e.name]?.total??0).toFixed(2)]}),n&&(0,x.jsx)(`div`,{className:`text-xs text-gray-400`,children:t.bill.bill_no})]})]},e.key)})]})})})]})})}),(0,x.jsxs)(d,{title:`新增单品 · ${P?.store?.name??``}`,open:rt,onCancel:()=>F(!1),onOk:()=>I.submit(),confirmLoading:it,okText:`添加`,destroyOnHidden:!0,children:[(0,x.jsx)(`div`,{className:`py-2 text-gray-500`,children:`单品将挂靠到该门店在此采购单中的最新一笔订单;单价按门店等级上浮比例自动换算。`}),(0,x.jsxs)(p,{form:I,layout:`vertical`,onFinish:Mt,children:[(0,x.jsx)(p.Item,{label:`商品`,name:`product_id`,rules:[{required:!0,message:`请选择商品`}],children:(0,x.jsx)(l,{showSearch:{optionFilterProp:`label`},placeholder:`搜索并选择商品`,options:ot.map(e=>({value:e.id,label:`${e.name}${e.spec?`(${e.spec})`:``}`}))})}),(0,x.jsx)(p.Item,{label:`采购数量`,name:`quantity`,rules:[{required:!0,message:`请输入采购数量`}],children:(0,x.jsx)(a,{className:`w-full`,min:1,precision:0,placeholder:`请输入采购数量(包数)`})}),(0,x.jsx)(p.Item,{label:`称重(斤,可选)`,name:`weight`,children:(0,x.jsx)(a,{className:`w-full`,min:0,precision:3,placeholder:`请输入称重`})})]})]}),(0,x.jsxs)(d,{title:L?`编辑「${L.product_name}」`:`编辑单品`,open:L!==null,onCancel:()=>R(null),onOk:()=>z.submit(),confirmLoading:ct,okText:`保存`,destroyOnHidden:!0,children:[(0,x.jsx)(`div`,{className:`py-2 text-gray-500`,children:`修改保存后,系统将自动重算明细金额、订货单与采购单汇总。`}),(0,x.jsxs)(p,{form:z,layout:`vertical`,onFinish:Pt,children:[(0,x.jsx)(p.Item,{label:`单价(元)`,name:`price`,rules:[{required:!0,message:`请输入单价`}],children:(0,x.jsx)(a,{className:`w-full`,min:0,precision:2,placeholder:`请输入单价`})}),(0,x.jsx)(p.Item,{label:`采购数量`,name:`quantity`,rules:[{required:!0,message:`请输入采购数量`}],children:(0,x.jsx)(a,{className:`w-full`,min:0,precision:0,placeholder:`请输入采购数量`})}),(0,x.jsx)(p.Item,{label:`称重(斤)`,name:`weight`,rules:[{required:!0,message:`请输入称重`}],children:(0,x.jsx)(a,{className:`w-full`,min:0,precision:3,placeholder:`请输入称重`})})]})]}),(0,x.jsxs)(d,{title:`导出商品明细`,open:dt,onCancel:()=>U(!1),onOk:()=>{C&&be(C.purchase.id,W>0?W:void 0),U(!1)},okText:`导出`,destroyOnHidden:!0,children:[(0,x.jsx)(`div`,{className:`py-2 text-gray-500`,children:`导出系统全部商品行(无订货的商品数量为 0),门店列附数量合计与突出颜色。`}),(0,x.jsxs)(`div`,{className:`flex items-center gap-2 py-2`,children:[(0,x.jsx)(S,{children:`供应商:`}),(0,x.jsx)(l,{value:W,onChange:ft,className:`flex-1`,options:[{value:0,label:`全部供应商`},...q.map(e=>({value:e.id,label:e.name}))]})]})]}),(0,x.jsx)(d,{title:`导出门店购买详情`,open:pt,onCancel:()=>G(!1),onOk:()=>{C&&Se(C.purchase.id,mt===`current`&&N>0?N:void 0),G(!1)},okText:`导出`,destroyOnHidden:!0,children:(0,x.jsx)(ie.Group,{className:`py-2`,value:mt,onChange:e=>ht(e.target.value),options:[{value:`current`,label:`当前门店(${C?.stores.find(e=>e.id===N)?.name??`-`})`},{value:`all`,label:`全部门店(合并为一个 XLSX,每门店一个工作表)`}]})}),(0,x.jsxs)(d,{title:`导出供应商采购明细`,open:gt,onCancel:()=>K(!1),onOk:()=>{C&&_e(C.purchase.id,_t===`current`&&B>0?B:void 0),K(!1)},okText:`导出`,destroyOnHidden:!0,children:[(0,x.jsx)(`div`,{className:`py-2 text-gray-500`,children:`导出 XLSX 按「供应商 × 市场」拆分工作表,列序:品名、汇总、市场、各门店明细,有数据的单元格突出显示。`}),(0,x.jsx)(ie.Group,{className:`py-2`,value:_t,onChange:e=>vt(e.target.value),options:[{value:`current`,label:`当前供应商(${q.find(e=>e.id===B)?.name??`-`})`},{value:`all`,label:`全部供应商(合并为一个 XLSX,每供应商×市场一个工作表)`}]})]})]})};export{je as default}; |