Commit ca07bc320f88cce48a5b09bd90d67551fee59198

Authored by 柏杨
1 parent 108b2671

feat: 开票弹窗

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 }) =&gt; {
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 }) =&gt; {
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 }) =&gt; {
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 }) =&gt; {
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
... ... @@ -92,8 +92,7 @@ export const PROCURE_ORDER_STATUS = {
92 92  
93 93 export const INVOCING_STATUS_OPTIONS = {
94 94 UN_INVOICE: '不需开票',
95   - SPECIALLY_INVOICED: '专票',
96   - COMMON_INVOICED: '普票',
  95 + INVOICED: '需要开票',
97 96 };
98 97  
99 98 export const INVOCING_STATUS = {
... ...