Files
2026-09-07 23:28:54 +08:00

1 line
33 KiB
JavaScript
Raw Permalink Blame History

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