Commit ca07bc320f88cce48a5b09bd90d67551fee59198
1 parent
108b2671
feat: 开票弹窗
Showing
5 changed files
with
55 additions
and
19 deletions
src/pages/Invoice/waitProcessRecord/index.tsx
... | ... | @@ -459,15 +459,12 @@ const InvoiceRecord = () => { |
459 | 459 | render: (_, record) => { |
460 | 460 | if (record.filePaths && record.filePaths.length > 0) { |
461 | 461 | return record.filePaths.map((item) => { |
462 | - // Extract filename from URL | |
463 | 462 | const url = item; |
464 | 463 | const filenameMatch = url.match(/\/([^/]+)\?/); |
465 | 464 | const filename = filenameMatch ? filenameMatch[1] : 'file'; |
466 | 465 | |
467 | - // Decode the filename to handle URL encoding | |
468 | 466 | const decodedFilename = decodeURIComponent(filename); |
469 | 467 | |
470 | - // Get the clean filename without timestamp prefix if present | |
471 | 468 | const cleanFilename = decodedFilename.replace(/^\d+-\d+-/, ''); |
472 | 469 | |
473 | 470 | return ( | ... | ... |
src/pages/Order/OrderList/ApplyForInvoicingModal.tsx
... | ... | @@ -19,7 +19,19 @@ interface SelectOption { |
19 | 19 | value: string; |
20 | 20 | } |
21 | 21 | |
22 | -export default ({ setCheckVisible, isEdit, subOrders, onClose }) => { | |
22 | +export default ({ | |
23 | + setCheckVisible, | |
24 | + isEdit, | |
25 | + subOrders, | |
26 | + mainOrders, | |
27 | + onClose, | |
28 | +}: { | |
29 | + setCheckVisible: (val: boolean) => void; | |
30 | + isEdit?: boolean; | |
31 | + subOrders: any[]; | |
32 | + mainOrders: any[]; | |
33 | + onClose: () => void; | |
34 | +}) => { | |
23 | 35 | const [isUrgent, setIsUrgent] = useState(''); |
24 | 36 | const [receivingCompanyOptions, setReceivingCompanyOptions] = useState< |
25 | 37 | SelectOption[] |
... | ... | @@ -39,29 +51,41 @@ export default ({ setCheckVisible, isEdit, subOrders, onClose }) => { |
39 | 51 | |
40 | 52 | // 获取唯一的主订单ID及其相关金额信息 |
41 | 53 | const getUniqueMainOrderIds = (): MainOrderData[] => { |
54 | + console.log(subOrders, mainOrders); | |
42 | 55 | const mainOrderIds = subOrders?.map((item: any) => item.mainOrderId); |
43 | 56 | const uniqueIds = [...new Set(mainOrderIds)].filter(Boolean); |
44 | 57 | |
45 | 58 | return uniqueIds.map((id) => { |
59 | + // 获取该主订单的数据 | |
60 | + const mainOrder = mainOrders | |
61 | + ? mainOrders.find((item: any) => item.id === id) | |
62 | + : null; | |
63 | + | |
46 | 64 | // 获取该主订单下所有子订单 |
47 | 65 | const orderSubOrders = subOrders.filter( |
48 | 66 | (item: any) => item.mainOrderId === id, |
49 | 67 | ); |
50 | 68 | |
51 | 69 | // 计算该主订单的总金额 |
52 | - let totalPayment = 0; | |
53 | - orderSubOrders.forEach((item: any) => { | |
54 | - totalPayment = FloatAdd(totalPayment, item.totalPayment || 0); | |
55 | - }); | |
70 | + let totalPayment = mainOrder ? mainOrder.totalPayment : 0; | |
71 | + if (!totalPayment) { | |
72 | + orderSubOrders.forEach((item: any) => { | |
73 | + totalPayment = FloatAdd(totalPayment, item.totalPayment || 0); | |
74 | + }); | |
75 | + } | |
56 | 76 | |
57 | 77 | // 计算已开票金额(如果有的话) |
58 | - let invoiceIssuedAmount = 0; | |
59 | - orderSubOrders.forEach((item: any) => { | |
60 | - invoiceIssuedAmount = FloatAdd( | |
61 | - invoiceIssuedAmount, | |
62 | - item.invoiceIssuedAmount || 0, | |
63 | - ); | |
64 | - }); | |
78 | + let invoiceIssuedAmount = mainOrder | |
79 | + ? mainOrder.invoiceIssuedAmount || 0 | |
80 | + : 0; | |
81 | + if (!invoiceIssuedAmount) { | |
82 | + orderSubOrders.forEach((item: any) => { | |
83 | + invoiceIssuedAmount = FloatAdd( | |
84 | + invoiceIssuedAmount, | |
85 | + item.invoiceIssuedAmount || 0, | |
86 | + ); | |
87 | + }); | |
88 | + } | |
65 | 89 | |
66 | 90 | // 计算可开票金额 |
67 | 91 | const availableAmount = Math.max(0, totalPayment - invoiceIssuedAmount); | ... | ... |
src/pages/Order/OrderList/OrderDrawer.tsx
... | ... | @@ -396,7 +396,18 @@ export default ({ onClose, data, subOrders, orderOptType }) => { |
396 | 396 | */ |
397 | 397 | function getInvoicingSelect() { |
398 | 398 | if (optType('edit') || optType('after-sales-check')) { |
399 | - return enumToSelect(INVOCING_STATUS_OPTIONS_OLD); | |
399 | + const options = enumToSelect(INVOCING_STATUS_OPTIONS_OLD); | |
400 | + | |
401 | + // 永远禁止选择专票和普票,但保留这些选项用于显示历史数据 | |
402 | + return options.map((option: any) => { | |
403 | + if ( | |
404 | + option.value === 'SPECIALLY_INVOICED' || | |
405 | + option.value === 'COMMON_INVOICED' | |
406 | + ) { | |
407 | + return { ...option, disabled: true }; | |
408 | + } | |
409 | + return option; | |
410 | + }); | |
400 | 411 | } |
401 | 412 | return enumToSelect(INVOCING_STATUS_OPTIONS); |
402 | 413 | } |
... | ... | @@ -2158,7 +2169,7 @@ export default ({ onClose, data, subOrders, orderOptType }) => { |
2158 | 2169 | placeholder="选择是否需要开票" |
2159 | 2170 | name="invoicingStatus" |
2160 | 2171 | width="lg" |
2161 | - key="invoicingStatus" | |
2172 | + key={`invoicingStatus-${invoicingStatus}`} | |
2162 | 2173 | label="是否需要开票" |
2163 | 2174 | options={getInvoicingSelect()} |
2164 | 2175 | disabled={optType('after-sales-check')} | ... | ... |
src/pages/Order/OrderList/OrderList.tsx
... | ... | @@ -5050,6 +5050,11 @@ const OrderList = ({ paramsNew, searchShow, toolbarShow }) => { |
5050 | 5050 | ? [...subOrderSelectedMap.values()].flat() |
5051 | 5051 | : buildSubOrders() |
5052 | 5052 | } |
5053 | + mainOrders={ | |
5054 | + isMainOrder | |
5055 | + ? [...mainOrderSelectedMap.values()] | |
5056 | + : [buildMainOrder()] | |
5057 | + } | |
5053 | 5058 | totalPayment={getApplyInvoicingTotalPayment()} |
5054 | 5059 | isMainOrder={isMainOrder} |
5055 | 5060 | isEdit={isEdit} | ... | ... |
src/pages/Order/constant.ts