Commit ca07bc320f88cce48a5b09bd90d67551fee59198

Authored by 柏杨
1 parent 108b2671

feat: 开票弹窗

src/pages/Invoice/waitProcessRecord/index.tsx
@@ -459,15 +459,12 @@ const InvoiceRecord = () => { @@ -459,15 +459,12 @@ const InvoiceRecord = () => {
459 render: (_, record) => { 459 render: (_, record) => {
460 if (record.filePaths && record.filePaths.length > 0) { 460 if (record.filePaths && record.filePaths.length > 0) {
461 return record.filePaths.map((item) => { 461 return record.filePaths.map((item) => {
462 - // Extract filename from URL  
463 const url = item; 462 const url = item;
464 const filenameMatch = url.match(/\/([^/]+)\?/); 463 const filenameMatch = url.match(/\/([^/]+)\?/);
465 const filename = filenameMatch ? filenameMatch[1] : 'file'; 464 const filename = filenameMatch ? filenameMatch[1] : 'file';
466 465
467 - // Decode the filename to handle URL encoding  
468 const decodedFilename = decodeURIComponent(filename); 466 const decodedFilename = decodeURIComponent(filename);
469 467
470 - // Get the clean filename without timestamp prefix if present  
471 const cleanFilename = decodedFilename.replace(/^\d+-\d+-/, ''); 468 const cleanFilename = decodedFilename.replace(/^\d+-\d+-/, '');
472 469
473 return ( 470 return (
src/pages/Order/OrderList/ApplyForInvoicingModal.tsx
@@ -19,7 +19,19 @@ interface SelectOption { @@ -19,7 +19,19 @@ interface SelectOption {
19 value: string; 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 const [isUrgent, setIsUrgent] = useState(''); 35 const [isUrgent, setIsUrgent] = useState('');
24 const [receivingCompanyOptions, setReceivingCompanyOptions] = useState< 36 const [receivingCompanyOptions, setReceivingCompanyOptions] = useState<
25 SelectOption[] 37 SelectOption[]
@@ -39,29 +51,41 @@ export default ({ setCheckVisible, isEdit, subOrders, onClose }) =&gt; { @@ -39,29 +51,41 @@ export default ({ setCheckVisible, isEdit, subOrders, onClose }) =&gt; {
39 51
40 // 获取唯一的主订单ID及其相关金额信息 52 // 获取唯一的主订单ID及其相关金额信息
41 const getUniqueMainOrderIds = (): MainOrderData[] => { 53 const getUniqueMainOrderIds = (): MainOrderData[] => {
  54 + console.log(subOrders, mainOrders);
42 const mainOrderIds = subOrders?.map((item: any) => item.mainOrderId); 55 const mainOrderIds = subOrders?.map((item: any) => item.mainOrderId);
43 const uniqueIds = [...new Set(mainOrderIds)].filter(Boolean); 56 const uniqueIds = [...new Set(mainOrderIds)].filter(Boolean);
44 57
45 return uniqueIds.map((id) => { 58 return uniqueIds.map((id) => {
  59 + // 获取该主订单的数据
  60 + const mainOrder = mainOrders
  61 + ? mainOrders.find((item: any) => item.id === id)
  62 + : null;
  63 +
46 // 获取该主订单下所有子订单 64 // 获取该主订单下所有子订单
47 const orderSubOrders = subOrders.filter( 65 const orderSubOrders = subOrders.filter(
48 (item: any) => item.mainOrderId === id, 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 const availableAmount = Math.max(0, totalPayment - invoiceIssuedAmount); 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,7 +396,18 @@ export default ({ onClose, data, subOrders, orderOptType }) =&gt; {
396 */ 396 */
397 function getInvoicingSelect() { 397 function getInvoicingSelect() {
398 if (optType('edit') || optType('after-sales-check')) { 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 return enumToSelect(INVOCING_STATUS_OPTIONS); 412 return enumToSelect(INVOCING_STATUS_OPTIONS);
402 } 413 }
@@ -2158,7 +2169,7 @@ export default ({ onClose, data, subOrders, orderOptType }) =&gt; { @@ -2158,7 +2169,7 @@ export default ({ onClose, data, subOrders, orderOptType }) =&gt; {
2158 placeholder="选择是否需要开票" 2169 placeholder="选择是否需要开票"
2159 name="invoicingStatus" 2170 name="invoicingStatus"
2160 width="lg" 2171 width="lg"
2161 - key="invoicingStatus" 2172 + key={`invoicingStatus-${invoicingStatus}`}
2162 label="是否需要开票" 2173 label="是否需要开票"
2163 options={getInvoicingSelect()} 2174 options={getInvoicingSelect()}
2164 disabled={optType('after-sales-check')} 2175 disabled={optType('after-sales-check')}
src/pages/Order/OrderList/OrderList.tsx
@@ -5050,6 +5050,11 @@ const OrderList = ({ paramsNew, searchShow, toolbarShow }) =&gt; { @@ -5050,6 +5050,11 @@ const OrderList = ({ paramsNew, searchShow, toolbarShow }) =&gt; {
5050 ? [...subOrderSelectedMap.values()].flat() 5050 ? [...subOrderSelectedMap.values()].flat()
5051 : buildSubOrders() 5051 : buildSubOrders()
5052 } 5052 }
  5053 + mainOrders={
  5054 + isMainOrder
  5055 + ? [...mainOrderSelectedMap.values()]
  5056 + : [buildMainOrder()]
  5057 + }
5053 totalPayment={getApplyInvoicingTotalPayment()} 5058 totalPayment={getApplyInvoicingTotalPayment()}
5054 isMainOrder={isMainOrder} 5059 isMainOrder={isMainOrder}
5055 isEdit={isEdit} 5060 isEdit={isEdit}
src/pages/Order/constant.ts
@@ -92,8 +92,7 @@ export const PROCURE_ORDER_STATUS = { @@ -92,8 +92,7 @@ export const PROCURE_ORDER_STATUS = {
92 92
93 export const INVOCING_STATUS_OPTIONS = { 93 export const INVOCING_STATUS_OPTIONS = {
94 UN_INVOICE: '不需开票', 94 UN_INVOICE: '不需开票',
95 - SPECIALLY_INVOICED: '专票',  
96 - COMMON_INVOICED: '普票', 95 + INVOICED: '需要开票',
97 }; 96 };
98 97
99 export const INVOCING_STATUS = { 98 export const INVOCING_STATUS = {