Commit 15b4d1c2a06bb96cc301c9fb8c6c475619df48aa

Authored by zhongnanhuang
1 parent d35a137b

feat: update

src/pages/Order/components/AfterSalesDrawer.tsx
... ... @@ -10,8 +10,6 @@ import {
10 10 import { Form, message } from 'antd';
11 11 import { AFTE_SALES_PLAN_OPTIONS } from '../constant';
12 12 export default ({ setVisible, mainOrder, subOrders, onClose }) => {
13   - console.log(subOrders);
14   - console.log(mainOrder);
15 13 let subOrderIds = subOrders?.map((item: { id: any }) => {
16 14 return item.id;
17 15 });
... ... @@ -73,6 +71,7 @@ export default ({ setVisible, mainOrder, subOrders, onClose }) => {
73 71 name="totalPayment"
74 72 label="总金额调整"
75 73 min={0}
  74 + initialValue={mainOrder.totalPayment}
76 75 rules={[{ required: true, message: '总金额必填' }]}
77 76 />
78 77 <ProFormTextArea
... ...
src/pages/Order/components/FinancialDrawer.tsx
... ... @@ -140,6 +140,17 @@ export default ({
140 140 ]
141 141 : ''}
142 142  
  143 + {/* <ProFormSelect
  144 + placeholder="是否完全开票"
  145 + name="invoicingType"
  146 + width="lg"
  147 + label="是否完全开票"
  148 + options={[{label:'部分开票',value:'部分开票'},{label:'完全开票',value:'完全开票'}]}
  149 + onChange={setInvoicingStatus}
  150 + initialValue={'完全开票'}
  151 + // disabled={mainInfoDisbled}
  152 + rules={[{ required: true, message: '是否需要开票必填' }]}
  153 + /> */}
143 154 <ProFormTextArea
144 155 width="lg"
145 156 name="invoicingNotes"
... ...
src/pages/Order/components/HistoryModal.tsx
... ... @@ -8,10 +8,11 @@ import {
8 8 ORDER_STATUS_OPTIONS,
9 9 } from '../constant';
10 10  
11   -export default ({ subOrders, onClose }) => {
  11 +export default ({ subOrders, isCancelledOrder, onClose }) => {
12 12 let subOrderIds = subOrders?.map((subOrder: any) => {
13 13 return subOrder.id;
14 14 });
  15 +
15 16 const [data, setData] = useState([]);
16 17 const [loading, setLoading] = useState(true);
17 18 let i = 0;
... ... @@ -22,7 +23,7 @@ export default ({ subOrders, onClose }) =&gt; {
22 23  
23 24 const getHistory = async () => {
24 25 let res = await postServiceOrderQueryHistoryOrderRecord({
25   - data: { ids: subOrderIds },
  26 + data: { ids: subOrderIds, isDeleteQueryOrder: isCancelledOrder },
26 27 });
27 28 setData(res.data);
28 29 setLoading(false);
... ...
src/pages/Order/constant.ts
... ... @@ -102,15 +102,16 @@ export const ORDER_STATUS_OPTIONS = {
102 102 AUDITED: '已审核',
103 103 PROCURE_UN_PROCESS: '采购未审核',
104 104 PROCURE_PROCESS: '采购已审核',
105   - PROCURE_PROCESS_FOR_MINE: '采购待发货',
  105 + PROCURE_PROCESS_FOR_MINE: '采购待打印',
  106 + PROCURE_WAIT_SHIP: '采购待发货',
106 107 SUPPLIER_WAIT_SHIP: '供应商待发货',
107   - SUPPLIER_SHIPPED: '供应商已发货',
108 108 WAIT_SHIP: '待发货',
109 109 SHIPPED: '已发货',
110 110 CONFIRM_RECEIPT: '确认收货',
111 111 AUDIT_FAILED: '审核失败',
112 112 IN_AFTER_SALES: '售后中',
113 113 AFTER_SALES_COMPLETION: '售后完成',
  114 + NO_NEED_SEND: '无需发货',
114 115 };
115 116  
116 117 export const AFTE_SALES_PLAN_OPTIONS = {
... ... @@ -145,6 +146,8 @@ export const TAGS_COLOR = new Map&lt;string, string&gt;([
145 146 ['IN_AFTER_SALES', 'red'],
146 147 ['AFTER_SALES_COMPLETION', 'red'],
147 148 ['PROCURE_PROCESS_FOR_MINE', 'processing'],
  149 + ['PROCURE_WAIT_SHIP', 'processing'],
  150 + ['NO_NEED_SEND', 'success'],
148 151 ]);
149 152  
150 153 export const SALES_CODE_OPTIONS = [
... ... @@ -225,7 +228,7 @@ export const MAIN_ORDER_COLUMNS = [
225 228 {
226 229 title: '订单编号',
227 230 dataIndex: 'id',
228   - valueType: 'digit',
  231 + valueType: 'text',
229 232 hideInTable: true,
230 233 },
231 234 {
... ... @@ -271,6 +274,18 @@ export const MAIN_ORDER_COLUMNS = [
271 274 hideInTable: true,
272 275 },
273 276 {
  277 + title: '主订单备注',
  278 + dataIndex: 'mainNotes',
  279 + valueType: 'text',
  280 + hideInTable: true,
  281 + },
  282 + {
  283 + title: '子订单备注',
  284 + dataIndex: 'subNotes',
  285 + valueType: 'text',
  286 + hideInTable: true,
  287 + },
  288 + {
274 289 title: '商品参数',
275 290 dataIndex: 'parameters',
276 291 valueType: 'text',
... ...
src/pages/Order/index.tsx
... ... @@ -2,6 +2,7 @@ import ButtonConfirm from &#39;@/components/ButtomConfirm&#39;;
2 2 import { RESPONSE_CODE } from '@/constants/enum';
3 3 import {
4 4 postServiceOrderAfterSalesCompletion,
  5 + postServiceOrderNoNeedSend,
5 6 postServiceOrderOrderCancel,
6 7 postServiceOrderQueryServiceOrder,
7 8 } from '@/services';
... ... @@ -15,6 +16,7 @@ import {
15 16 DownOutlined,
16 17 EditTwoTone,
17 18 EllipsisOutlined,
  19 + QuestionCircleOutlined,
18 20 } from '@ant-design/icons';
19 21 import {
20 22 PageContainer,
... ... @@ -52,6 +54,7 @@ import OrderNotesEditModal from &#39;./components/OrderNotesEditModal&#39;;
52 54 import ProcureCheckModal from './components/ProcureCheckModal';
53 55 import SubOrderComfirmReceiptImagesModal from './components/SubOrderComfirmReceiptImagesModal';
54 56 import {
  57 + AFTE_SALES_PLAN_OPTIONS,
55 58 CHECK_TYPE,
56 59 LOGISTICS_STATUS_OPTIONS,
57 60 MAIN_ORDER_COLUMNS,
... ... @@ -108,7 +111,9 @@ const OrderPage = () =&gt; {
108 111 const [pageSize, setPageSize] = useState(10);
109 112 const [currentPage, setCurrentPage] = useState(1);
110 113 const [orderCheckType, setOrderCheckType] = useState('');
  114 + const [onlyShowCancelOrder, setOnlyShowCancelOrder] = useState(false);
111 115 const mainTableRef = useRef();
  116 + let [searchParams, setSearchParam] = useState(Object); //表格的查询条件存储
112 117 const [messageApi, contextHolder] = message.useMessage();
113 118  
114 119 // const openCheckNotes = (checkNotes: string) => {
... ... @@ -143,6 +148,11 @@ const OrderPage = () =&gt; {
143 148 setSelectedRowKeys([]);
144 149 };
145 150  
  151 + function changeCancelOrderShow(e: any) {
  152 + setOnlyShowCancelOrder(e.target.checked);
  153 + refreshTable();
  154 + }
  155 +
146 156 // const resize = () => {
147 157 // // 计算元素底部到视口顶部的距离
148 158 // let bottomDistance = document
... ... @@ -168,6 +178,18 @@ const OrderPage = () =&gt; {
168 178 // window.addEventListener('resize', resize);
169 179 // });
170 180  
  181 + const MyToolTip = ({ title, content }) => {
  182 + return (
  183 + <Tooltip
  184 + color="#FFFFFF"
  185 + placement="bottom"
  186 + title={<div className="px-5 py-4 text-black">{title}</div>}
  187 + >
  188 + {content}
  189 + </Tooltip>
  190 + );
  191 + };
  192 +
171 193 const onCheckboxChange = (record: never) => {
172 194 let newSelectedItems = [];
173 195 if (selectedItems.includes(record.id)) {
... ... @@ -226,6 +248,73 @@ const OrderPage = () =&gt; {
226 248 };
227 249 //子订单内容渲染
228 250 const SubOderRander = ({ record, optRecord }) => {
  251 + /**
  252 + * 获取订单状态标签
  253 + * @param optRecord
  254 + */
  255 + function getOrderStatusTag(optRecord: any): import('react').ReactNode {
  256 + const orderStatus = optRecord.orderStatus;
  257 + if (orderStatus === 'AUDIT_FAILED') {
  258 + return (
  259 + <MyToolTip
  260 + title={optRecord.checkNotes}
  261 + content={
  262 + <>
  263 + <Tag
  264 + color={TAGS_COLOR.get(optRecord.orderStatus)}
  265 + style={{ marginRight: '4px' }}
  266 + >
  267 + {enumValueToLabel(
  268 + optRecord.orderStatus,
  269 + ORDER_STATUS_OPTIONS,
  270 + )}
  271 + </Tag>
  272 + <QuestionCircleOutlined style={{ color: '#C1C1C1' }} />
  273 + </>
  274 + }
  275 + />
  276 + );
  277 + }
  278 +
  279 + if (
  280 + orderStatus === 'AFTER_SALES_COMPLETION' ||
  281 + orderStatus === 'IN_AFTER_SALES'
  282 + ) {
  283 + return (
  284 + <MyToolTip
  285 + title={
  286 + enumValueToLabel(
  287 + optRecord.afterSalesPlan,
  288 + AFTE_SALES_PLAN_OPTIONS,
  289 + ) +
  290 + ' ' +
  291 + optRecord.afterSalesNotes
  292 + }
  293 + content={
  294 + <>
  295 + <Tag
  296 + color={TAGS_COLOR.get(optRecord.orderStatus)}
  297 + style={{ marginRight: '4px' }}
  298 + >
  299 + {enumValueToLabel(
  300 + optRecord.orderStatus,
  301 + ORDER_STATUS_OPTIONS,
  302 + )}
  303 + </Tag>
  304 + <QuestionCircleOutlined style={{ color: '#C1C1C1' }} />
  305 + </>
  306 + }
  307 + />
  308 + );
  309 + }
  310 +
  311 + return (
  312 + <Tag color={TAGS_COLOR.get(optRecord.orderStatus)}>
  313 + {enumValueToLabel(optRecord.orderStatus, ORDER_STATUS_OPTIONS)}
  314 + </Tag>
  315 + );
  316 + }
  317 +
229 318 return (
230 319 <Flex className="w-full border-b-indigo-500">
231 320 <Flex vertical className="w-[31%]" gap="small">
... ... @@ -260,6 +349,22 @@ const OrderPage = () =&gt; {
260 349 }}
261 350 />
262 351 </Flex>
  352 +
  353 + <Flex title={optRecord.notes}>
  354 + <div className="max-w-[90%] whitespace-no-wrap overflow-hidden overflow-ellipsis">
  355 + <span className="text-[#8C8C8C]">
  356 + 开票备注:请将2312210003,2312210002,2312210001订单合并开票
  357 + </span>
  358 + </div>
  359 + {/* 编辑备注按钮 */}
  360 + <EditTwoTone
  361 + onClick={() => {
  362 + setNotesEditVisible(true);
  363 + setOrderRow(optRecord);
  364 + setIsMainOrder(false);
  365 + }}
  366 + />
  367 + </Flex>
263 368 </Flex>
264 369 <Flex className="w-[16%]" vertical gap="small">
265 370 <div
... ... @@ -329,6 +434,13 @@ const OrderPage = () =&gt; {
329 434 {getInvoicingType(optRecord)}
330 435 </span>
331 436 </div>
  437 +
  438 + {/* 开票状态 */}
  439 + {/* <div className="overflow-hidden whitespace-no-wrap overflow-ellipsis">
  440 + <span className="text-slate-700">
  441 + 部分开票
  442 + </span>
  443 + </div> */}
332 444 </Flex>
333 445  
334 446 <Flex className="w-[10%]" vertical gap="small">
... ... @@ -347,42 +459,39 @@ const OrderPage = () =&gt; {
347 459 </div>
348 460 {/* 订单状态 */}
349 461 <div className="overflow-hidden whitespace-no-wrap overflow-ellipsis">
350   - <Tag color={TAGS_COLOR.get(optRecord.orderStatus)}>
351   - {enumValueToLabel(optRecord.orderStatus, ORDER_STATUS_OPTIONS)}
352   - </Tag>
  462 + {getOrderStatusTag(optRecord)}
353 463 </div>
354 464  
355 465 {/* 物流信息 */}
356 466 <div className="overflow-hidden whitespace-no-wrap overflow-ellipsis">
357 467 {optRecord.orderStatus === 'CONFIRM_RECEIPT' ||
  468 + optRecord.orderStatus === 'AFTER_SALES_COMPLETION' ||
  469 + optRecord.orderStatus === 'IN_AFTER_SALES' ||
358 470 optRecord.orderStatus === 'SHIPPED' ? (
359   - <Tooltip
360   - color="#FFFFFF"
361   - placement="bottom"
  471 + <MyToolTip
362 472 title={
363   - <div className="px-5 py-4 text-black">
364   - {optRecord.serialNumber === undefined
365   - ? '暂无物流信息'
366   - : enumValueToLabel(
367   - optRecord.logisticsMethod,
368   - LOGISTICS_STATUS_OPTIONS,
369   - ) +
370   - ' ' +
371   - optRecord.serialNumber}
372   - </div>
  473 + optRecord.serialNumber === undefined
  474 + ? '暂无物流信息'
  475 + : enumValueToLabel(
  476 + optRecord.logisticsMethod,
  477 + LOGISTICS_STATUS_OPTIONS,
  478 + ) +
  479 + ' ' +
  480 + optRecord.serialNumber
373 481 }
374   - >
375   - <Button type="link" size="small" style={{ padding: 0 }}>
376   - 物流信息
377   - </Button>
378   - </Tooltip>
  482 + content={
  483 + <Button type="link" size="small" style={{ padding: 0 }}>
  484 + 物流信息
  485 + </Button>
  486 + }
  487 + />
379 488 ) : (
380 489 ''
381 490 )}
382 491 </div>
383 492 </Flex>
384 493 <Flex className="w-[18%]" wrap="wrap" gap="small">
385   - {optRecord.subPath.includes('sendProduct') ? (
  494 + {optRecord.subPath?.includes('sendProduct') ? (
386 495 <Button
387 496 className="p-0"
388 497 type="link"
... ... @@ -394,13 +503,13 @@ const OrderPage = () =&gt; {
394 503 setOrderCheckType(CHECK_TYPE.NORMAL);
395 504 }}
396 505 >
397   - 发货
  506 + 仓库发货
398 507 </Button>
399 508 ) : (
400 509 ''
401 510 )}
402 511  
403   - {optRecord.subPath.includes('supplierSendOrder') ? (
  512 + {optRecord.subPath?.includes('supplierSendOrder') ? (
404 513 <Button
405 514 className="p-0"
406 515 type="link"
... ... @@ -418,7 +527,25 @@ const OrderPage = () =&gt; {
418 527 ''
419 528 )}
420 529  
421   - {optRecord.subPath.includes('queryAnnex') &&
  530 + {optRecord.subPath?.includes('procureSend') ? (
  531 + <Button
  532 + className="p-0"
  533 + type="link"
  534 + onClick={() => {
  535 + optRecord.mainOrderId = record.id;
  536 + setSelectedRows([cloneDeep(optRecord)]); //克隆一份数据,避免后续修改污染
  537 + setDeliverVisible(true);
  538 + setIsSendProduct(true);
  539 + setOrderCheckType(CHECK_TYPE.PROCURE);
  540 + }}
  541 + >
  542 + 采购发货
  543 + </Button>
  544 + ) : (
  545 + ''
  546 + )}
  547 +
  548 + {optRecord.subPath?.includes('queryAnnex') &&
422 549 optRecord.listAnnex?.length > 0 ? (
423 550 <Button
424 551 className="p-0"
... ... @@ -435,7 +562,7 @@ const OrderPage = () =&gt; {
435 562 ''
436 563 )}
437 564  
438   - {optRecord.subPath.includes('modifySendInformation') ? (
  565 + {optRecord.subPath?.includes('modifySendInformation') ? (
439 566 <Button
440 567 className="p-0"
441 568 type="link"
... ... @@ -452,7 +579,7 @@ const OrderPage = () =&gt; {
452 579 ''
453 580 )}
454 581  
455   - {optRecord.subPath.includes('printOrder') ? (
  582 + {optRecord.subPath?.includes('printOrder') ? (
456 583 <Button
457 584 className="p-0"
458 585 type="link"
... ... @@ -469,7 +596,7 @@ const OrderPage = () =&gt; {
469 596 ''
470 597 )}
471 598  
472   - {optRecord.subPath.includes('supplierPrint') ? (
  599 + {optRecord.subPath?.includes('supplierPrint') ? (
473 600 <Button
474 601 className="p-0"
475 602 type="link"
... ... @@ -486,7 +613,24 @@ const OrderPage = () =&gt; {
486 613 ''
487 614 )}
488 615  
489   - {optRecord.subPath.includes('editOrder') ? (
  616 + {optRecord.subPath?.includes('procurePrint') ? (
  617 + <Button
  618 + className="p-0"
  619 + type="link"
  620 + onClick={async () => {
  621 + setOrderPrintVisible(true);
  622 + setSelectedRows([optRecord]);
  623 + setOrderRow(record);
  624 + setOrderCheckType(CHECK_TYPE.PROCURE);
  625 + }}
  626 + >
  627 + 采购打印
  628 + </Button>
  629 + ) : (
  630 + ''
  631 + )}
  632 +
  633 + {optRecord.subPath?.includes('editOrder') ? (
490 634 <Button
491 635 className="p-0"
492 636 type="link"
... ... @@ -502,7 +646,7 @@ const OrderPage = () =&gt; {
502 646 ) : (
503 647 ''
504 648 )}
505   - {optRecord.subPath.includes('invoicing') ? (
  649 + {optRecord.subPath?.includes('invoicing') ? (
506 650 <Button
507 651 className="p-0"
508 652 type="link"
... ... @@ -519,7 +663,7 @@ const OrderPage = () =&gt; {
519 663 ) : (
520 664 ''
521 665 )}
522   - {optRecord.subPath.includes('checkOrder') ? (
  666 + {optRecord.subPath?.includes('checkOrder') ? (
523 667 <Button
524 668 className="p-0"
525 669 type="link"
... ... @@ -536,7 +680,7 @@ const OrderPage = () =&gt; {
536 680 ''
537 681 )}
538 682  
539   - {optRecord.subPath.includes('financeCheckOrder') ? (
  683 + {optRecord.subPath?.includes('financeCheckOrder') ? (
540 684 <Button
541 685 className="p-0"
542 686 type="link"
... ... @@ -553,7 +697,7 @@ const OrderPage = () =&gt; {
553 697 ''
554 698 )}
555 699  
556   - {optRecord.subPath.includes('procureCheckOrder') ? (
  700 + {optRecord.subPath?.includes('procureCheckOrder') ? (
557 701 <Button
558 702 className="p-0"
559 703 type="link"
... ... @@ -570,7 +714,7 @@ const OrderPage = () =&gt; {
570 714 ''
571 715 )}
572 716  
573   - {optRecord.subPath.includes('rePrintOrder') ? (
  717 + {optRecord.subPath?.includes('rePrintOrder') ? (
574 718 <Button
575 719 className="p-0"
576 720 type="link"
... ... @@ -587,7 +731,7 @@ const OrderPage = () =&gt; {
587 731 ''
588 732 )}
589 733  
590   - {optRecord.subPath.includes('confirmReceipt') ? (
  734 + {optRecord.subPath?.includes('confirmReceipt') ? (
591 735 <Button
592 736 className="p-0"
593 737 type="link"
... ... @@ -602,7 +746,7 @@ const OrderPage = () =&gt; {
602 746 ''
603 747 )}
604 748  
605   - {optRecord.subPath.includes('applyAfterSales') ? (
  749 + {optRecord.subPath?.includes('applyAfterSales') ? (
606 750 <Button
607 751 className="p-0"
608 752 type="link"
... ... @@ -618,7 +762,7 @@ const OrderPage = () =&gt; {
618 762 ''
619 763 )}
620 764  
621   - {optRecord.subPath.includes('afterSalesCompletion') ? (
  765 + {optRecord.subPath?.includes('afterSalesCompletion') ? (
622 766 <ButtonConfirm
623 767 className="p-0"
624 768 title="是否完成售后?"
... ... @@ -638,7 +782,27 @@ const OrderPage = () =&gt; {
638 782 ''
639 783 )}
640 784  
641   - {optRecord.subPath.includes('viewImages') ? (
  785 + {optRecord.subPath?.includes('noNeedSend') ? (
  786 + <ButtonConfirm
  787 + className="p-0"
  788 + title="此订单是否无需发货?"
  789 + text="无需发货"
  790 + onConfirm={async () => {
  791 + let res = await postServiceOrderNoNeedSend({
  792 + data: { ids: [optRecord.id] },
  793 + });
  794 + if (res.result === RESPONSE_CODE.SUCCESS) {
  795 + message.success(res.message);
  796 + refreshTable();
  797 + return true;
  798 + }
  799 + }}
  800 + />
  801 + ) : (
  802 + ''
  803 + )}
  804 +
  805 + {optRecord.subPath?.includes('viewImages') ? (
642 806 <Button
643 807 className="p-0"
644 808 type="link"
... ... @@ -653,7 +817,7 @@ const OrderPage = () =&gt; {
653 817 ''
654 818 )}
655 819  
656   - {optRecord.subPath.includes('orderCancel') ? (
  820 + {optRecord.subPath?.includes('orderCancel') ? (
657 821 <ButtonConfirm
658 822 className="p-0"
659 823 title="确认作废?"
... ... @@ -849,7 +1013,7 @@ const OrderPage = () =&gt; {
849 1013 <Flex justify="flex-end">
850 1014 <Space.Compact direction="vertical" align="end">
851 1015 <Space>
852   - {record.mainPath.includes('sendProduct') ? (
  1016 + {record.mainPath?.includes('sendProduct') ? (
853 1017 <Button
854 1018 className="p-0"
855 1019 type="link"
... ... @@ -863,14 +1027,14 @@ const OrderPage = () =&gt; {
863 1027 setOrderCheckType(CHECK_TYPE.NORMAL);
864 1028 }}
865 1029 >
866   - 发货
  1030 + 仓库发货
867 1031 </Button>
868 1032 ) : (
869 1033 ''
870 1034 )}
871 1035  
872 1036 {/* 供应商发货 */}
873   - {record.mainPath.includes('supplierSendOrder') ? (
  1037 + {record.mainPath?.includes('supplierSendOrder') ? (
874 1038 <Button
875 1039 className="p-0"
876 1040 type="link"
... ... @@ -890,7 +1054,7 @@ const OrderPage = () =&gt; {
890 1054 ''
891 1055 )}
892 1056  
893   - {record.mainPath.includes('procureSend') ? (
  1057 + {record.mainPath?.includes('procureSend') ? (
894 1058 <Button
895 1059 className="p-0"
896 1060 type="link"
... ... @@ -910,7 +1074,7 @@ const OrderPage = () =&gt; {
910 1074 ''
911 1075 )}
912 1076  
913   - {record.mainPath.includes('printOrder') ? (
  1077 + {record.mainPath?.includes('printOrder') ? (
914 1078 <Button
915 1079 className="p-0"
916 1080 type="link"
... ... @@ -930,7 +1094,7 @@ const OrderPage = () =&gt; {
930 1094 ''
931 1095 )}
932 1096  
933   - {record.mainPath.includes('supplierPrint') ? (
  1097 + {record.mainPath?.includes('supplierPrint') ? (
934 1098 <Button
935 1099 className="p-0"
936 1100 type="link"
... ... @@ -950,7 +1114,7 @@ const OrderPage = () =&gt; {
950 1114 ''
951 1115 )}
952 1116  
953   - {record.mainPath.includes('rePrintOrder') ? (
  1117 + {record.mainPath?.includes('rePrintOrder') ? (
954 1118 <Button
955 1119 className="p-0"
956 1120 type="link"
... ... @@ -969,7 +1133,7 @@ const OrderPage = () =&gt; {
969 1133 ) : (
970 1134 ''
971 1135 )}
972   - {record.mainPath.includes('modifySendInformation') ? (
  1136 + {record.mainPath?.includes('modifySendInformation') ? (
973 1137 <Button
974 1138 className="p-0"
975 1139 type="link"
... ... @@ -999,7 +1163,7 @@ const OrderPage = () =&gt; {
999 1163 ) : (
1000 1164 ''
1001 1165 )}
1002   - {record.mainPath.includes('invoicing') ? (
  1166 + {record.mainPath?.includes('invoicing') ? (
1003 1167 <Button
1004 1168 type="link"
1005 1169 className="p-0"
... ... @@ -1022,7 +1186,7 @@ const OrderPage = () =&gt; {
1022 1186 ) : (
1023 1187 ''
1024 1188 )}
1025   - {record.mainPath.includes('updateOrder') ? (
  1189 + {record.mainPath?.includes('updateOrder') ? (
1026 1190 <Button
1027 1191 className="p-0"
1028 1192 type="link"
... ... @@ -1065,7 +1229,7 @@ const OrderPage = () =&gt; {
1065 1229 ''
1066 1230 )}
1067 1231  
1068   - {record.mainPath.includes('checkOrder') ? (
  1232 + {record.mainPath?.includes('checkOrder') ? (
1069 1233 <Button
1070 1234 className="p-0"
1071 1235 type="link"
... ... @@ -1096,8 +1260,48 @@ const OrderPage = () =&gt; {
1096 1260 ''
1097 1261 )}
1098 1262  
  1263 + {record.mainPath?.includes('noNeedSend') ? (
  1264 + <ButtonConfirm
  1265 + className="p-0"
  1266 + title="此订单是否无需发货?"
  1267 + text="无需发货"
  1268 + onConfirm={async () => {
  1269 + let selectedSubOrders = selectedRowObj[record.id];
  1270 + if (selectedSubOrders === undefined) {
  1271 + selectedSubOrders = record.subOrderInformationLists;
  1272 + }
  1273 + setSelectedRows(selectedSubOrders);
  1274 + for (let i = 0; i < selectedSubOrders.length; i++) {
  1275 + if (
  1276 + selectedSubOrders[i].orderStatus !==
  1277 + 'CONFIRM_RECEIPT'
  1278 + ) {
  1279 + message.error(
  1280 + '请选择未发货的子订单进行无需发货操作',
  1281 + );
  1282 + return;
  1283 + }
  1284 + }
  1285 +
  1286 + const data = await postServiceOrderNoNeedSend({
  1287 + data: {
  1288 + ids: selectedSubOrders.map((item) => {
  1289 + return item.id;
  1290 + }),
  1291 + },
  1292 + });
  1293 + if (data.result === RESPONSE_CODE.SUCCESS) {
  1294 + message.success(data.message);
  1295 + refreshTable();
  1296 + }
  1297 + }}
  1298 + />
  1299 + ) : (
  1300 + ''
  1301 + )}
  1302 +
1099 1303 {/* 财务审核:主订单暂无 */}
1100   - {record.mainPath.includes('financeCheckOrder') ? (
  1304 + {record.mainPath?.includes('financeCheckOrder') ? (
1101 1305 <Button
1102 1306 className="p-0"
1103 1307 type="link"
... ... @@ -1132,7 +1336,7 @@ const OrderPage = () =&gt; {
1132 1336 )}
1133 1337  
1134 1338 {/* 采购审核 */}
1135   - {record.mainPath.includes('procureCheckOrder') ? (
  1339 + {record.mainPath?.includes('procureCheckOrder') ? (
1136 1340 <Button
1137 1341 className="p-0"
1138 1342 type="link"
... ... @@ -1165,7 +1369,7 @@ const OrderPage = () =&gt; {
1165 1369 ''
1166 1370 )}
1167 1371  
1168   - {record.mainPath.includes('applyAfterSales') ? (
  1372 + {record.mainPath?.includes('applyAfterSales') ? (
1169 1373 <Button
1170 1374 className="p-0"
1171 1375 type="link"
... ... @@ -1194,7 +1398,7 @@ const OrderPage = () =&gt; {
1194 1398 ''
1195 1399 )}
1196 1400  
1197   - {record.mainPath.includes('afterSalesCompletion') ? (
  1401 + {record.mainPath?.includes('afterSalesCompletion') ? (
1198 1402 <ButtonConfirm
1199 1403 className="p-0"
1200 1404 title="售后是否已完成?"
... ... @@ -1238,7 +1442,7 @@ const OrderPage = () =&gt; {
1238 1442 ''
1239 1443 )}
1240 1444  
1241   - {record.mainPath.includes('orderCancel') ? (
  1445 + {record.mainPath?.includes('orderCancel') ? (
1242 1446 <ButtonConfirm
1243 1447 className="p-0"
1244 1448 title="确认作废?"
... ... @@ -1261,7 +1465,7 @@ const OrderPage = () =&gt; {
1261 1465 ''
1262 1466 )}
1263 1467  
1264   - {record.mainPath.includes('procurePrint') ? (
  1468 + {record.mainPath?.includes('procurePrint') ? (
1265 1469 <Button
1266 1470 className="p-0"
1267 1471 type="link"
... ... @@ -1312,9 +1516,22 @@ const OrderPage = () =&gt; {
1312 1516 function toolBarRender() {
1313 1517 let toolBtns = [];
1314 1518  
  1519 + toolBtns.push(
  1520 + <Checkbox onChange={changeCancelOrderShow}>只看作废</Checkbox>,
  1521 + );
  1522 +
1315 1523 //导出按钮配置
1316 1524 const items: MenuProps['items'] = [
1317 1525 {
  1526 + label: '导出查询结果订单',
  1527 + key: '2',
  1528 + onClick: async () => {
  1529 + let body = { flag: 50, ...searchParams };
  1530 + exportLoading();
  1531 + orderExport('/api/service/order/export', body, exportLoadingDestory);
  1532 + },
  1533 + },
  1534 + {
1318 1535 label: '导出已选中订单',
1319 1536 key: '1',
1320 1537 onClick: async () => {
... ... @@ -1327,15 +1544,24 @@ const OrderPage = () =&gt; {
1327 1544 orderExport('/api/service/order/export', body, exportLoadingDestory);
1328 1545 },
1329 1546 },
  1547 + // {
  1548 + // label: '导出当前页订单',
  1549 + // key: '2',
  1550 + // onClick: async () => {
  1551 + // if (mainOrderAllItemKeys.length === 0) {
  1552 + // message.error('当前没有订单');
  1553 + // return;
  1554 + // }
  1555 + // let body = { flag: 20, ids: mainOrderAllItemKeys };
  1556 + // exportLoading();
  1557 + // orderExport('/api/service/order/export', body, exportLoadingDestory);
  1558 + // },
  1559 + // },
1330 1560 {
1331   - label: '导出当前页订单',
1332   - key: '2',
  1561 + label: '导出当天订单',
  1562 + key: '4',
1333 1563 onClick: async () => {
1334   - if (mainOrderAllItemKeys.length === 0) {
1335   - message.error('当前没有订单');
1336   - return;
1337   - }
1338   - let body = { flag: 20, ids: mainOrderAllItemKeys };
  1564 + let body = { flag: 40, ids: [] };
1339 1565 exportLoading();
1340 1566 orderExport('/api/service/order/export', body, exportLoadingDestory);
1341 1567 },
... ... @@ -1349,15 +1575,6 @@ const OrderPage = () =&gt; {
1349 1575 orderExport('/api/service/order/export', body, exportLoadingDestory);
1350 1576 },
1351 1577 },
1352   - {
1353   - label: '导出当天订单',
1354   - key: '4',
1355   - onClick: async () => {
1356   - let body = { flag: 40, ids: [] };
1357   - exportLoading();
1358   - orderExport('/api/service/order/export', body, exportLoadingDestory);
1359   - },
1360   - },
1361 1578 ];
1362 1579  
1363 1580 const menuProps = {
... ... @@ -1393,16 +1610,18 @@ const OrderPage = () =&gt; {
1393 1610 );
1394 1611 }
1395 1612  
1396   - toolBtns.push(
1397   - <Dropdown menu={menuProps}>
1398   - <Button>
1399   - <Space>
1400   - 导出
1401   - <DownOutlined />
1402   - </Space>
1403   - </Button>
1404   - </Dropdown>,
1405   - );
  1613 + if (rolePath?.includes('export')) {
  1614 + toolBtns.push(
  1615 + <Dropdown menu={menuProps}>
  1616 + <Button>
  1617 + <Space>
  1618 + 导出
  1619 + <DownOutlined />
  1620 + </Space>
  1621 + </Button>
  1622 + </Dropdown>,
  1623 + );
  1624 + }
1406 1625  
1407 1626 // toolBtns.push(
1408 1627 // <Button
... ... @@ -1493,13 +1712,15 @@ const OrderPage = () =&gt; {
1493 1712 sorter,
1494 1713 filter,
1495 1714 ) => {
  1715 + //保存这个搜索条件
  1716 + setSearchParam(params);
1496 1717 const { data } = await postServiceOrderQueryServiceOrder({
1497 1718 // ...params,
1498 1719 // FIXME: remove @ts-ignore
1499 1720 // @ts-ignore
1500 1721 sorter,
1501 1722 filter,
1502   - data: params,
  1723 + data: { ...params, isDeleteQueryOrder: onlyShowCancelOrder },
1503 1724 });
1504 1725  
1505 1726 let mainOrderIds = data?.data?.map((d) => d.id);
... ... @@ -1663,6 +1884,7 @@ const OrderPage = () =&gt; {
1663 1884 {historyModalVisible && (
1664 1885 <HistoryModal
1665 1886 subOrders={selectedRows}
  1887 + isCancelledOrder={onlyShowCancelOrder}
1666 1888 onClose={() => {
1667 1889 setHistoryModalVisible(false);
1668 1890 setSelectedRows({});
... ...
src/services/request.ts
... ... @@ -5707,6 +5707,77 @@ export const postServiceOrderInvoicing = /* #__PURE__ */ (() =&gt; {
5707 5707 return request;
5708 5708 })();
5709 5709  
  5710 +/** @description request parameter type for postServiceOrderNoNeedSend */
  5711 +export interface PostServiceOrderNoNeedSendOption {
  5712 + /**
  5713 + * @description
  5714 + * dto
  5715 + */
  5716 + body: {
  5717 + /**
  5718 + @description
  5719 + dto */
  5720 + dto: Dto;
  5721 + };
  5722 +}
  5723 +
  5724 +/** @description response type for postServiceOrderNoNeedSend */
  5725 +export interface PostServiceOrderNoNeedSendResponse {
  5726 + /**
  5727 + * @description
  5728 + * OK
  5729 + */
  5730 + 200: ServerResult;
  5731 + /**
  5732 + * @description
  5733 + * Created
  5734 + */
  5735 + 201: any;
  5736 + /**
  5737 + * @description
  5738 + * Unauthorized
  5739 + */
  5740 + 401: any;
  5741 + /**
  5742 + * @description
  5743 + * Forbidden
  5744 + */
  5745 + 403: any;
  5746 + /**
  5747 + * @description
  5748 + * Not Found
  5749 + */
  5750 + 404: any;
  5751 +}
  5752 +
  5753 +export type PostServiceOrderNoNeedSendResponseSuccess =
  5754 + PostServiceOrderNoNeedSendResponse[200];
  5755 +/**
  5756 + * @description
  5757 + * 无需发货
  5758 + * @tags 内部订单
  5759 + * @produces *
  5760 + * @consumes application/json
  5761 + */
  5762 +export const postServiceOrderNoNeedSend = /* #__PURE__ */ (() => {
  5763 + const method = 'post';
  5764 + const url = '/service/order/noNeedSend';
  5765 + function request(
  5766 + option: PostServiceOrderNoNeedSendOption,
  5767 + ): Promise<PostServiceOrderNoNeedSendResponseSuccess> {
  5768 + return requester(request.url, {
  5769 + method: request.method,
  5770 + ...option,
  5771 + }) as unknown as Promise<PostServiceOrderNoNeedSendResponseSuccess>;
  5772 + }
  5773 +
  5774 + /** http method */
  5775 + request.method = method;
  5776 + /** request url */
  5777 + request.url = url;
  5778 + return request;
  5779 +})();
  5780 +
5710 5781 /** @description request parameter type for postServiceOrderOrderCancel */
5711 5782 export interface PostServiceOrderOrderCancelOption {
5712 5783 /**
... ...