Commit 2eeef652db7e9dcb5ea0d3d9a6abc806f328bf96

Authored by 曾国涛
2 parents b7d02164 de89f453

Merge remote-tracking branch 'origin/master'

# Conflicts:
#	src/services/definition.ts
.umirc.ts
... ... @@ -16,12 +16,12 @@ export default defineConfig({
16 16 '/api/': {
17 17 target: 'http://localhost:8085/',
18 18 // target: 'http://192.168.1.6:8085/',
19   - //target: 'http://39.108.227.113:8085/',
  19 + // target: 'http://39.108.227.113:8085/',
20 20 changeOrigin: true,
21 21 pathRewrite: { '^/api': '' },
22 22 },
23 23 '/previewApi/': {
24   - //target: 'http://39.108.227.113:8092/',
  24 + target: 'http://39.108.227.113:8092/',
25 25 changeOrigin: true,
26 26 pathRewrite: { '^/previewApi': '' },
27 27 },
... ... @@ -59,11 +59,11 @@ export default defineConfig({
59 59 access: 'canReadAdminAndSalesManager',
60 60 component: './Order/WarningWhitelist',
61 61 },
62   - /*{
  62 + {
63 63 name: '订单售后',
64 64 path: 'FeedBack',
65 65 component: './Order/FeedBack',
66   - },*/
  66 + },
67 67 ],
68 68 },
69 69 {
... ...
src/pages/Order/FeedBack/CheckModal.tsx
... ... @@ -66,7 +66,7 @@ export default ({
66 66 const [messageApi, contextHolder] = message.useMessage();
67 67 const [form] = Form.useForm<{ name: string; company: string }>();
68 68 let subOrderIds: any[] = subOrders?.map((subOrder) => subOrder.id);
69   - const [mainOrderId] = useState(data.id);
  69 + const [mainOrderId] = useState(data?.id || null);
70 70  
71 71 const [afterSalesInfo, setAfterSalesInfo] = useState<any>();
72 72 const [prepaidProofImages, setPrepaidProofImages] = useState<any[]>([]);
... ... @@ -90,14 +90,18 @@ export default ({
90 90 let index = 1;
91 91 let annexLinks = annex?.map((f) => {
92 92 return (
93   - <Button className="p-0 pr-1" type="link" key="key" href={f}>
  93 + <Button
  94 + className="p-0 pr-1"
  95 + type="link"
  96 + key="key"
  97 + href={f}
  98 + onClick={console.log(data)}
  99 + >
94 100 {'附件' + index++}
95 101 </Button>
96 102 );
97 103 });
98 104  
99   - console.log(annexLinks);
100   -
101 105 setAfterSalesInfo(
102 106 <div className="my-5">
103 107 <Row gutter={[16, 24]}>
... ... @@ -670,7 +674,7 @@ export default ({
670 674 <ProFormTextArea
671 675 width="lg"
672 676 name="name"
673   - placeholder="若驳回,请填写驳回理由"
  677 + // placeholder="若驳回,请填写驳回理由"
674 678 />
675 679 ) : (
676 680 <></>
... ...
src/pages/Order/FeedBack/OrderDrawer.tsx
... ... @@ -122,6 +122,8 @@ export default ({ onClose, data, subOrders, orderOptType }) =&gt; {
122 122  
123 123 let originSubOrders = cloneDeep(subOrders);
124 124  
  125 + let currentSubOrders = cloneDeep(subOrders);
  126 +
125 127 /**
126 128 * 获取当前的操作类型boolean值
127 129 * @param type 操作类型,如果与当前匹配返回true
... ... @@ -277,8 +279,8 @@ export default ({ onClose, data, subOrders, orderOptType }) =&gt; {
277 279 function buildOrderData() {
278 280 // let mainInfoDisbled = optType('edit');
279 281 if (!optType('add')) {
280   - if (subOrders !== undefined && subOrders.length > 0) {
281   - copyData.subOrderInformationLists = subOrders;
  282 + if (currentSubOrders !== undefined && currentSubOrders.length > 0) {
  283 + copyData.subOrderInformationLists = currentSubOrders;
282 284 }
283 285  
284 286 //如果是复制,需要开票,不回显是否需要开票字段
... ... @@ -292,6 +294,7 @@ export default ({ onClose, data, subOrders, orderOptType }) =&gt; {
292 294 }
293 295 }
294 296 }
  297 + console.log(copyData);
295 298 //主订单事业部默认显示子订单第一条的事业部
296 299 copyData.productBelongBusiness =
297 300 copyData.subOrderInformationLists[0].productBelongBusiness;
... ... @@ -358,7 +361,7 @@ export default ({ onClose, data, subOrders, orderOptType }) =&gt; {
358 361 copyData = res.data.mainOrder;
359 362 copyData.subOrderInformationLists = res.data.subOrders;
360 363 originSubOrders = res.data.subOrders;
361   -
  364 + currentSubOrders = originSubOrders;
362 365 //客户显示
363 366 form.setFieldValue('erpCustomerId', {
364 367 label: copyData.erpCustomerName,
... ... @@ -1131,7 +1134,10 @@ export default ({ onClose, data, subOrders, orderOptType }) =&gt; {
1131 1134 console.log(form.getFieldValue('id'));
1132 1135 if (form.getFieldValue('id') !== undefined) {
1133 1136 const resp = await postDistrictSelOrderProvince({
1134   - data: form.getFieldValue('id'),
  1137 + data: {
  1138 + oId: form.getFieldValue('id'),
  1139 + orderType: orderOptType,
  1140 + },
1135 1141 });
1136 1142 if (resp && resp.data) {
1137 1143 if (resp.data.province) {
... ... @@ -1318,7 +1324,10 @@ export default ({ onClose, data, subOrders, orderOptType }) =&gt; {
1318 1324 console.log(form.getFieldValue('id'));
1319 1325 if (form.getFieldValue('id')) {
1320 1326 const resp = await postDistrictSelOrderProvince({
1321   - data: form.getFieldValue('id'),
  1327 + data: {
  1328 + oId: form.getFieldValue('id'),
  1329 + orderType: orderOptType,
  1330 + },
1322 1331 });
1323 1332 if (
1324 1333 resp.data.province !== null &&
... ... @@ -1378,7 +1387,10 @@ export default ({ onClose, data, subOrders, orderOptType }) =&gt; {
1378 1387 let districtOptions = [];
1379 1388 if (form.getFieldValue('id')) {
1380 1389 const resp = await postDistrictSelOrderProvince({
1381   - data: form.getFieldValue('id'),
  1390 + data: {
  1391 + oId: form.getFieldValue('id'),
  1392 + orderType: orderOptType,
  1393 + },
1382 1394 });
1383 1395 if (resp.data.city !== null && resp.data.city !== undefined) {
1384 1396 let res = await postDistrictSelectByNameAndLevel({
... ...
src/pages/Order/FeedBack/OrderList.tsx
... ... @@ -8,7 +8,6 @@ import {
8 8 postKingdeeRepSalOrderSave,
9 9 postServiceConstCanApplyAfterInvoicingStatus,
10 10 postServiceInvoiceCancelApply,
11   - postServiceOrderAfterSalesCheck,
12 11 postServiceOrderCancelSend,
13 12 postServiceOrderConfirmInvoice,
14 13 postServiceOrderGetCurrentOptNode,
... ... @@ -100,6 +99,7 @@ import ProcureCheckModal from &#39;./ProcureCheckModal&#39;;
100 99 import ProcureConvertModal from './ProcureConvertModal';
101 100 import ProductionTimeModal from './ProductionTimeModal';
102 101 import ShippingWarehouseChangeModal from './ShippingWarehouseChangeModal';
  102 +import StoreCheckModal from './StoreCheckModal';
103 103 import UploadPayBillModal from './UploadPayBillModal';
104 104 import {
105 105 AFTER_INVOICING_STATUS,
... ... @@ -128,6 +128,8 @@ import { OrderListItemType, OrderType } from &#39;./type.d&#39;;
128 128 const OrderList = ({ paramsNew, searchShow, toolbarShow }) => {
129 129 const [orderDrawerVisible, setOrderDrawerVisible] = useState<boolean>(false);
130 130 const [checkVisible, setCheckVisible] = useState<boolean>(false);
  131 + const [storeCheckModalVisible, setStoreCheckModalVisible] =
  132 + useState<boolean>(false);
131 133 const [orderPrintVisible, setOrderPrintVisible] = useState<boolean>(false);
132 134 const [allMainChecked, setAllMainChecked] = useState(false);
133 135 const [imagesViewerModalVisible, setImagesViewerModalVisible] =
... ... @@ -413,20 +415,21 @@ const OrderList = ({ paramsNew, searchShow, toolbarShow }) =&gt; {
413 415 return null;
414 416 }
415 417  
416   - async function doAfterSalesCheck(body: object) {
417   - const data = await postServiceOrderAfterSalesCheck({
418   - data: body,
419   - });
420   - console.log(data);
421   - if (data.data) {
422   - refreshTable();
423   - }
424   - }
  418 + // async function doAfterSalesCheck(body: object) {
  419 + // const data = await postServiceOrderAfterSalesCheck({
  420 + // data: body,
  421 + // });
  422 + // console.log(data);
  423 + // if (data.data) {
  424 + // refreshTable();
  425 + // }
  426 + // }
425 427  
426 428 /**
427 429 * 返回当前操作的主订单数据
428 430 */
429 431 function buildMainOrder() {
  432 + console.log(currentOptMainId);
430 433 if (currentOptMainId === undefined || currentOptMainId === null) {
431 434 message.error('页面错误:当前操作的主订单id不存在,请联系系统管理员');
432 435 return;
... ... @@ -704,7 +707,11 @@ const OrderList = ({ paramsNew, searchShow, toolbarShow }) =&gt; {
704 707 }
705 708  
706 709 //如果是未审核或者领导已审核,付款状态为预付款则需要财务审核【财务待审核】,否则仓库审核【】
707   - if (orderStatus === 'UNAUDITED' || orderStatus === 'LEADER_AUDITED') {
  710 + if (
  711 + orderStatus === 'UNAUDITED' ||
  712 + orderStatus === 'LEADER_AUDITED' ||
  713 + orderStatus === 'PROCURE_REJECT'
  714 + ) {
708 715 if (paymentMethod === 'PAYMENT_IN_ADVANCE') {
709 716 orderStatusTagText = '财务待审核';
710 717 } else {
... ... @@ -1895,6 +1902,8 @@ const OrderList = ({ paramsNew, searchShow, toolbarShow }) =&gt; {
1895 1902 className="p-0"
1896 1903 type="link"
1897 1904 onClick={() => {
  1905 + setCurrentMainId(record.id);
  1906 + console.log(currentOptMainId);
1898 1907 createOptObject(optRecord.id, record.id);
1899 1908 setCheckVisible(true);
1900 1909 setOrderCheckType(CHECK_TYPE.AFTER_SALES);
... ... @@ -1907,10 +1916,27 @@ const OrderList = ({ paramsNew, searchShow, toolbarShow }) =&gt; {
1907 1916 )}
1908 1917  
1909 1918 {optRecord.paths?.includes('afterSalesConfirm') ? (
  1919 + <Button
  1920 + className="p-0"
  1921 + type="link"
  1922 + onClick={() => {
  1923 + setCurrentMainId(record.id);
  1924 + createOptObject(optRecord.id, record.id);
  1925 + setStoreCheckModalVisible(true);
  1926 + setOrderCheckType(CHECK_TYPE.AFTER_SALES);
  1927 + }}
  1928 + >
  1929 + 仓库确认
  1930 + </Button>
  1931 + ) : (
  1932 + ''
  1933 + )}
  1934 +
  1935 + {/* {optRecord.paths?.includes('afterSalesConfirm') ? (
1910 1936 <ButtonConfirm
1911 1937 className="p-0"
1912 1938 title="确认通过?"
1913   - text="售后已审核待确认"
  1939 + text="仓库确认"
1914 1940 onConfirm={() => {
1915 1941 setIsMainOrder(false);
1916 1942 doAfterSalesCheck({
... ... @@ -1918,8 +1944,8 @@ const OrderList = ({ paramsNew, searchShow, toolbarShow }) =&gt; {
1918 1944 isAfterSalesSuccess: true,
1919 1945 subOrderIds: isMainOrder
1920 1946 ? [...record.subOrderInformationLists]
1921   - .flat()
1922   - ?.map((subOrder) => subOrder.id)
  1947 + .flat()
  1948 + ?.map((subOrder) => subOrder.id)
1923 1949 : [optRecord.id],
1924 1950 mainId: record.id,
1925 1951 });
... ... @@ -1927,7 +1953,7 @@ const OrderList = ({ paramsNew, searchShow, toolbarShow }) =&gt; {
1927 1953 />
1928 1954 ) : (
1929 1955 ''
1930   - )}
  1956 + )} */}
1931 1957  
1932 1958 {optRecord.paths?.includes('financeCheckOrder') ? (
1933 1959 <Button
... ... @@ -2015,7 +2041,7 @@ const OrderList = ({ paramsNew, searchShow, toolbarShow }) =&gt; {
2015 2041 onClick={() => {
2016 2042 createOptObject(optRecord.id, record.id);
2017 2043 setOrderDrawerVisible(true);
2018   - setOrderOptType('after_sales');
  2044 + setOrderOptType('after-sales');
2019 2045 }}
2020 2046 >
2021 2047 申请售后
... ... @@ -3539,6 +3565,7 @@ const OrderList = ({ paramsNew, searchShow, toolbarShow }) =&gt; {
3539 3565 //是审核通过及之后的订单
3540 3566 if (
3541 3567 orderStatus !== 'UNAUDITED' &&
  3568 + orderStatus !== 'PROCURE_REJECT' &&
3542 3569 orderStatus !== 'AUDIT_FAILED' &&
3543 3570 orderStatus !== 'LEADER_PROCESS' &&
3544 3571 orderStatus !== 'SALES_CONFIRM' &&
... ... @@ -3554,6 +3581,7 @@ const OrderList = ({ paramsNew, searchShow, toolbarShow }) =&gt; {
3554 3581 if (
3555 3582 roleCode !== 'admin' &&
3556 3583 (orderStatus === 'UNAUDITED' ||
  3584 + orderStatus === 'PROCURE_REJECT' ||
3557 3585 orderStatus === 'AUDIT_FAILED')
3558 3586 ) {
3559 3587 message.error('请选择已审核的订单进行编辑');
... ... @@ -3607,6 +3635,7 @@ const OrderList = ({ paramsNew, searchShow, toolbarShow }) =&gt; {
3607 3635 let orderStatus = selectedSubOrders[i].orderStatus;
3608 3636 if (
3609 3637 orderStatus !== 'UNAUDITED' &&
  3638 + orderStatus !== 'PROCURE_REJECT' &&
3610 3639 orderStatus !== 'FINANCE_PROCESS' &&
3611 3640 orderStatus !== 'LEADER_AUDITED'
3612 3641 ) {
... ... @@ -3633,6 +3662,8 @@ const OrderList = ({ paramsNew, searchShow, toolbarShow }) =&gt; {
3633 3662 className="p-0"
3634 3663 type="link"
3635 3664 onClick={() => {
  3665 + setCurrentMainId(record.id);
  3666 + console.log(currentOptMainId);
3636 3667 let selectedSubOrders = subOrderSelectedMap.get(
3637 3668 record.id,
3638 3669 );
... ... @@ -3649,7 +3680,6 @@ const OrderList = ({ paramsNew, searchShow, toolbarShow }) =&gt; {
3649 3680 return;
3650 3681 }
3651 3682 }
3652   -
3653 3683 createOptObject(null, record.id);
3654 3684 setCheckVisible(true);
3655 3685 setOrderCheckType(CHECK_TYPE.AFTER_SALES);
... ... @@ -3662,23 +3692,35 @@ const OrderList = ({ paramsNew, searchShow, toolbarShow }) =&gt; {
3662 3692 )}
3663 3693  
3664 3694 {record.paths?.includes('afterSalesConfirm') ? (
3665   - <ButtonConfirm
  3695 + <Button
3666 3696 className="p-0"
3667   - title="确认通过?"
3668   - text="售后已审核待确认"
3669   - onConfirm={() => {
3670   - setIsMainOrder(true);
3671   - doAfterSalesCheck({
3672   - applyType: 'after-sales',
3673   - isAfterSalesSuccess: true,
3674   - subOrderIds: [...record.subOrderInformationLists]
3675   - .flat()
3676   - ?.map((subOrder) => subOrder.id),
3677   - mainId: record.id,
3678   - });
  3697 + type="link"
  3698 + onClick={() => {
  3699 + setCurrentMainId(record.id);
  3700 + createOptObject(null, record.id);
  3701 + setStoreCheckModalVisible(true);
  3702 + setOrderCheckType(CHECK_TYPE.AFTER_SALES);
3679 3703 }}
3680   - />
  3704 + >
  3705 + 仓库确认
  3706 + </Button>
3681 3707 ) : (
  3708 + // <ButtonConfirm
  3709 + // className="p-0"
  3710 + // title="确认通过?"
  3711 + // text="仓库确认"
  3712 + // onConfirm={() => {
  3713 + // setIsMainOrder(true);
  3714 + // doAfterSalesCheck({
  3715 + // applyType: 'after-sales',
  3716 + // isAfterSalesSuccess: true,
  3717 + // subOrderIds: [...record.subOrderInformationLists]
  3718 + // .flat()
  3719 + // ?.map((subOrder) => subOrder.id),
  3720 + // mainId: record.id,
  3721 + // });
  3722 + // }}
  3723 + // />
3682 3724 ''
3683 3725 )}
3684 3726  
... ... @@ -3791,6 +3833,8 @@ const OrderList = ({ paramsNew, searchShow, toolbarShow }) =&gt; {
3791 3833 if (
3792 3834 selectedSubOrders[i].orderStatus !== 'UNAUDITED' &&
3793 3835 selectedSubOrders[i].orderStatus !==
  3836 + 'PROCURE_REJECT' &&
  3837 + selectedSubOrders[i].orderStatus !==
3794 3838 'FINANCE_PROCESS' &&
3795 3839 selectedSubOrders[i].orderStatus !==
3796 3840 'LEADER_AUDITED'
... ... @@ -3863,7 +3907,9 @@ const OrderList = ({ paramsNew, searchShow, toolbarShow }) =&gt; {
3863 3907 selectedSubOrders[i].orderStatus !==
3864 3908 'CONFIRM_RECEIPT' &&
3865 3909 selectedSubOrders[i].orderStatus !==
3866   - 'AFTER_SALES_FAILURE'
  3910 + 'AFTER_SALES_FAILURE' &&
  3911 + selectedSubOrders[i].orderStatus !==
  3912 + 'AFTER_SALES_COMPLETION'
3867 3913 ) {
3868 3914 message.error('请选择确认收货状态的子订单进行售后');
3869 3915 return;
... ... @@ -4807,7 +4853,7 @@ const OrderList = ({ paramsNew, searchShow, toolbarShow }) =&gt; {
4807 4853 subOrders={orderOptType === 'add' ? [] : buildSubOrders()}
4808 4854 onClose={(isSuccess: boolean) => {
4809 4855 setOrderDrawerVisible(false);
4810   - clearOptObject();
  4856 + // clearOptObject();
4811 4857 if (isSuccess) {
4812 4858 refreshTable();
4813 4859 }
... ... @@ -4844,6 +4890,34 @@ const OrderList = ({ paramsNew, searchShow, toolbarShow }) =&gt; {
4844 4890 />
4845 4891 )}
4846 4892  
  4893 + {storeCheckModalVisible && (
  4894 + <StoreCheckModal
  4895 + setCheckVisible={(val: boolean) => {
  4896 + setStoreCheckModalVisible(val);
  4897 + if (!val) {
  4898 + clearOptObject();
  4899 + }
  4900 + }}
  4901 + data={isMainOrder ? getFirstMainOrder() : buildMainOrder()}
  4902 + subOrders={
  4903 + isMainOrder
  4904 + ? [...subOrderSelectedMap.values()].flat()
  4905 + : buildSubOrders()
  4906 + }
  4907 + orderCheckType={orderCheckType}
  4908 + openOrderDrawer={(type: any, id: any) => {
  4909 + setCurrentMainId(id);
  4910 + setOrderOptType(type);
  4911 + setOrderDrawerVisible(true);
  4912 + }}
  4913 + onClose={() => {
  4914 + clearOptObject();
  4915 + setStoreCheckModalVisible(false);
  4916 + refreshTable();
  4917 + }}
  4918 + />
  4919 + )}
  4920 +
4847 4921 {applyForInvoicingVisible && (
4848 4922 <ApplyForInvoicingModal
4849 4923 setCheckVisible={(val: boolean) => {
... ...
src/pages/Order/FeedBack/StoreCheckModal.tsx 0 → 100644
  1 +import { RESPONSE_CODE } from '@/constants/enum';
  2 +import {
  3 + postPrepaidAudit,
  4 + postServiceOrderAfterSalesStoreSure,
  5 + postServiceOrderAudit,
  6 + postServiceOrderFileProcess,
  7 + postServiceOrderFinanceCheckOrder,
  8 + postServiceOrderLeaderAudit,
  9 + postServiceOrderToProcureAudit,
  10 +} from '@/services';
  11 +import {
  12 + ModalForm,
  13 + ProFormText,
  14 + ProFormTextArea,
  15 + ProList,
  16 +} from '@ant-design/pro-components';
  17 +import {
  18 + Button,
  19 + Col,
  20 + Divider,
  21 + Form,
  22 + Image,
  23 + Modal,
  24 + Row,
  25 + Space,
  26 + Tag,
  27 + UploadFile,
  28 + message,
  29 +} from 'antd';
  30 +import Upload, { RcFile, UploadProps } from 'antd/es/upload';
  31 +import { useEffect, useRef, useState } from 'react';
  32 +import {
  33 + AFTE_SALES_PLAN_OPTIONS,
  34 + CHECK_TYPE,
  35 + COMFIR_RECEIPT_IMAGES_NUMBER,
  36 +} from './constant';
  37 +// import { cloneDeep } from 'lodash';
  38 +import InvoiceSubOrderInfoTable from '@/pages/Order/Order/components/InvoiceSubOrderInfoTable';
  39 +import { enumValueToLabel, transImageFile } from '@/utils';
  40 +import { PlusOutlined } from '@ant-design/icons';
  41 +import { cloneDeep } from 'lodash';
  42 +
  43 +export default ({
  44 + setCheckVisible,
  45 + data,
  46 + subOrders,
  47 + orderCheckType,
  48 + openOrderDrawer,
  49 + onClose,
  50 +}) => {
  51 + const [previewOpen, setPreviewOpen] = useState(false);
  52 + const [aPopoverTitle, setAPopoverTitle] = useState('审核');
  53 + const [previewImage, setPreviewImage] = useState('');
  54 + const [previewTitle, setPreviewTitle] = useState('');
  55 + const [paymentReceiptsImages, setPymentReceiptsImages] = useState<any[]>([]);
  56 + const fileListObj = useRef<UploadFile[]>([]); //使用引用类型,使得在useEffect里面设置监听事件后,不用更新监听事件也能保持obj与外界一致
  57 + const getBase64 = (file: RcFile): Promise<string> =>
  58 + new Promise((resolve, reject) => {
  59 + const reader = new FileReader();
  60 + reader.readAsDataURL(file);
  61 + reader.onload = () => resolve(reader.result as string);
  62 + reader.onerror = (error) => reject(error);
  63 + });
  64 + const [fileList, setFileList] = useState<UploadFile[]>([]);
  65 + const handleCancel = () => setPreviewOpen(false);
  66 + const [messageApi, contextHolder] = message.useMessage();
  67 + const [form] = Form.useForm<{ name: string; company: string }>();
  68 + let subOrderIds: any[] = subOrders?.map((subOrder) => subOrder.id);
  69 + const [mainOrderId] = useState(data?.id || null);
  70 +
  71 + const [afterSalesInfo, setAfterSalesInfo] = useState<any>();
  72 + const [prepaidProofImages, setPrepaidProofImages] = useState<any[]>([]);
  73 + /**
  74 + * 审核类型
  75 + */
  76 + function checkType(check: string) {
  77 + if (orderCheckType === check) {
  78 + return true;
  79 + }
  80 + return false;
  81 + }
  82 +
  83 + const getOrderAfterSalesInfo = async () => {
  84 + // let res = await postServiceOrderQueryAfterSalesInfoSnapshot({
  85 + // data: { subOrderIds: subOrderIds },
  86 + // });
  87 +
  88 + //附件
  89 + let annex = subOrders[0].afterSalesAnnexList;
  90 + let index = 1;
  91 + let annexLinks = annex?.map((f) => {
  92 + return (
  93 + <Button
  94 + className="p-0 pr-1"
  95 + type="link"
  96 + key="key"
  97 + href={f}
  98 + onClick={console.log(data)}
  99 + >
  100 + {'附件' + index++}
  101 + </Button>
  102 + );
  103 + });
  104 +
  105 + setAfterSalesInfo(
  106 + <div className="my-5">
  107 + <Row gutter={[16, 24]}>
  108 + <Col span={6}>
  109 + <span className="text-[#333333]">售后方案</span>
  110 + </Col>
  111 + <Col span={18}>
  112 + {enumValueToLabel(
  113 + subOrders[0]?.afterSalesPlan,
  114 + AFTE_SALES_PLAN_OPTIONS,
  115 + )}
  116 + </Col>
  117 + <Col span={6}>
  118 + <span className="className='text-[#333333]'">售后原因</span>
  119 + </Col>
  120 + <Col span={18}>{subOrders[0]?.afterSalesNotes}</Col>
  121 + <Col span={6}>
  122 + <span className="className='text-[#333333]'">附件</span>
  123 + </Col>
  124 + <Col span={18}>{annexLinks}</Col>
  125 + </Row>
  126 + </div>,
  127 + );
  128 + };
  129 +
  130 + useEffect(() => {
  131 + if (checkType(CHECK_TYPE.CONFIRM_DELIVER)) {
  132 + setAPopoverTitle('确认发货');
  133 + }
  134 + getOrderAfterSalesInfo();
  135 +
  136 + let paymentReceiptsImagesList: any[] = [];
  137 + subOrders?.forEach((item: any) => {
  138 + if (item.paymentReceiptAnnexList) {
  139 + paymentReceiptsImagesList.push(...item.paymentReceiptAnnexList);
  140 + }
  141 + });
  142 + //去重
  143 + paymentReceiptsImagesList = [...new Set(paymentReceiptsImagesList)];
  144 + setPymentReceiptsImages(paymentReceiptsImagesList);
  145 +
  146 + //预存审核的凭证
  147 + let proofImages: any[] = [];
  148 + subOrders?.forEach((item) => {
  149 + let images = item.proofImages;
  150 + if (images !== null && images !== undefined) {
  151 + proofImages.push(...images);
  152 + }
  153 + });
  154 + setPrepaidProofImages(proofImages);
  155 + }, []);
  156 +
  157 + const handleChange: UploadProps['onChange'] = ({ fileList: newFileList }) => {
  158 + //fileListObj得在change里变化,change的参数是已经处理过的file数组
  159 + //beforeUpload中的参数file是未处理过,还需要Base64拿到文件数据处理
  160 + fileListObj.current = newFileList;
  161 + setFileList(newFileList);
  162 + };
  163 +
  164 + /** 粘贴快捷键的回调 */
  165 + const onPaste = async (e: any) => {
  166 + /** 获取剪切板的数据clipboardData */
  167 + let clipboardData = e.clipboardData,
  168 + i = 0,
  169 + items,
  170 + item,
  171 + types;
  172 +
  173 + /** 为空判断 */
  174 + if (clipboardData) {
  175 + items = clipboardData.items;
  176 + if (!items) {
  177 + message.info('您的剪贴板中没有照片');
  178 + return;
  179 + }
  180 +
  181 + item = items[0];
  182 + types = clipboardData.types || [];
  183 + /** 遍历剪切板的数据 */
  184 + for (; i < types.length; i++) {
  185 + if (types[i] === 'Files') {
  186 + item = items[i];
  187 + break;
  188 + }
  189 + }
  190 +
  191 + /** 判断文件是否为图片 */
  192 + if (item && item.kind === 'file' && item.type.match(/^image\//i)) {
  193 + const imgItem = item.getAsFile();
  194 + const newFileList = cloneDeep(fileListObj.current);
  195 + let filteredArray = newFileList.filter(
  196 + (obj) => obj.status !== 'removed',
  197 + ); //过滤掉状态为已删除的照片
  198 + const listItem = {
  199 + ...imgItem,
  200 + status: 'done',
  201 + url: await getBase64(imgItem),
  202 + originFileObj: imgItem,
  203 + };
  204 +
  205 + if (filteredArray.length >= COMFIR_RECEIPT_IMAGES_NUMBER) {
  206 + message.info('发货照片数量不能超过3');
  207 + return;
  208 + }
  209 + fileListObj.current = filteredArray;
  210 + filteredArray.push(listItem);
  211 + setFileList(filteredArray);
  212 + return;
  213 + }
  214 + }
  215 +
  216 + message.info('您的剪贴板中没有照片');
  217 + };
  218 + useEffect(() => {
  219 + //回显售后信息
  220 + // if (checkType(CHECK_TYPE.AFTER_SALES)) {
  221 + // getOrderAfterSalesInfo();
  222 + // }
  223 +
  224 + document.addEventListener('paste', onPaste);
  225 + return () => {
  226 + document.removeEventListener('paste', onPaste);
  227 + };
  228 + }, []);
  229 + const uploadButton = (
  230 + <div>
  231 + <PlusOutlined />
  232 + <div style={{ marginTop: 8 }}>上传凭证</div>
  233 + </div>
  234 + );
  235 + const handlePreview = async (file: UploadFile) => {
  236 + if (!file.url && !file.preview) {
  237 + file.preview = await getBase64(file.originFileObj as RcFile);
  238 + }
  239 + setPreviewImage(file.url || (file.preview as string));
  240 + setPreviewOpen(true);
  241 + setPreviewTitle(
  242 + file.name ||
  243 + file.originFileObj?.name ||
  244 + file.url!.substring(file.url!.lastIndexOf('/') + 1),
  245 + );
  246 + };
  247 +
  248 + const handleBeforeUpload = (file: any) => {
  249 + setFileList([...fileList, file]);
  250 + return false;
  251 + };
  252 +
  253 + const props: UploadProps = {
  254 + onRemove: (file) => {
  255 + const index = fileList.indexOf(file);
  256 + const newFileList = fileList.slice();
  257 + newFileList.splice(index, 1);
  258 + setFileList(newFileList);
  259 + },
  260 + beforeUpload: handleBeforeUpload,
  261 + listType: 'picture-card',
  262 + onPreview: handlePreview,
  263 + fileList,
  264 + onChange: handleChange,
  265 + accept: 'image/png, image/jpeg, image/png',
  266 + // action: '/api/service/order/fileProcess',
  267 + name: 'files',
  268 + headers: { Authorization: localStorage.getItem('token') },
  269 + };
  270 +
  271 + //仓库审核
  272 + async function doCheck(body: object) {
  273 + const data = await postServiceOrderAudit({
  274 + data: body,
  275 + });
  276 + if (data.result === RESPONSE_CODE.SUCCESS) {
  277 + message.success(data.message);
  278 + onClose();
  279 + }
  280 + }
  281 +
  282 + /**
  283 + *
  284 + * @param body 财务审核
  285 + */
  286 + async function doFinancailCheck(values: any, isAgree: boolean) {
  287 + if (fileList.length <= 0) {
  288 + message.error('凭证不能为空');
  289 + return;
  290 + }
  291 + messageApi.open({
  292 + type: 'loading',
  293 + content: '正在上传图片...',
  294 + duration: 0,
  295 + });
  296 + //附件处理
  297 + let formData = new FormData();
  298 + //附件处理
  299 + for (let file of fileList) {
  300 + if (file.originFileObj) {
  301 + formData.append('files', file.originFileObj as RcFile);
  302 + } else {
  303 + //有url的话取url(源文件),没url取thumbUrl。有url的时候thumbUrl是略缩图
  304 + if (file?.url === undefined || file?.url === null) {
  305 + formData.append(
  306 + 'files',
  307 + transImageFile(file?.thumbUrl),
  308 + file?.originFileObj?.name,
  309 + );
  310 + } else {
  311 + formData.append(
  312 + 'files',
  313 + transImageFile(file?.url),
  314 + file?.originFileObj?.name,
  315 + );
  316 + }
  317 + }
  318 + }
  319 + let res = await postServiceOrderFileProcess({
  320 + data: formData,
  321 + });
  322 + messageApi.destroy();
  323 + if (res.result === RESPONSE_CODE.SUCCESS) {
  324 + message.success('上传成功!');
  325 +
  326 + let fileUrls = res?.data?.map((item) => {
  327 + return { url: item };
  328 + });
  329 + //财务审核
  330 + const data = await postServiceOrderFinanceCheckOrder({
  331 + data: {
  332 + ...values,
  333 + checkNotes: values.name,
  334 + ids: subOrderIds,
  335 + checkPassOrReject: isAgree,
  336 + invoicingCheckAnnex: fileUrls,
  337 + },
  338 + });
  339 + if (data.result === RESPONSE_CODE.SUCCESS) {
  340 + message.success(data.message);
  341 + onClose();
  342 + }
  343 + } else {
  344 + message.success('上传失败');
  345 + }
  346 + }
  347 +
  348 + /**
  349 + *
  350 + * @param body 售后审核
  351 + */
  352 + async function doAfterSalesCheck(body: object) {
  353 + const data = await postServiceOrderAfterSalesStoreSure({
  354 + data: body,
  355 + });
  356 + if (data.result === RESPONSE_CODE.SUCCESS) {
  357 + message.success(data.message);
  358 + onClose();
  359 + }
  360 + }
  361 +
  362 + /**
  363 + *
  364 + * @param body 领导审核
  365 + */
  366 + async function doLeaderCheck(body: object) {
  367 + const data = await postServiceOrderLeaderAudit({
  368 + data: body,
  369 + });
  370 + if (data.result === RESPONSE_CODE.SUCCESS) {
  371 + message.success(data.message);
  372 + onClose();
  373 + }
  374 + }
  375 +
  376 + /**
  377 + * 预存审核
  378 + * @param body
  379 + */
  380 + async function doPrepaidAudit(body: any) {
  381 + const data = await postPrepaidAudit({
  382 + data: body,
  383 + });
  384 + if (data.result === RESPONSE_CODE.SUCCESS) {
  385 + message.success(data.message);
  386 + onClose();
  387 + }
  388 + }
  389 +
  390 + function computeType() {
  391 + let type: string = '';
  392 + if (checkType(CHECK_TYPE.CONFIRM_DELIVER)) {
  393 + type = 'confirm_deliver';
  394 + }
  395 + if (checkType(CHECK_TYPE.WEARHOUSE_KEEPER)) {
  396 + type = 'warehouse_audit';
  397 + }
  398 + if (checkType(CHECK_TYPE.WAITING_FOR_POST_AUDIT)) {
  399 + type = 'post_audit';
  400 + }
  401 + if (checkType(CHECK_TYPE.NODE_OPERATING_AUDIT)) {
  402 + type = 'node_operating_audit';
  403 + }
  404 + if (checkType(CHECK_TYPE.MODIFY_LEADER_AUDIT)) {
  405 + type = 'modify_leader_audit';
  406 + }
  407 + if (checkType(CHECK_TYPE.URGENT_INVOICE_AUDITING)) {
  408 + type = 'urgent_invoice_audit';
  409 + }
  410 + if (checkType(CHECK_TYPE.PAYMENT_RECEIPTS_AUDIT)) {
  411 + type = 'payment_receipt_audit';
  412 + }
  413 + if (checkType(CHECK_TYPE.CONFIRM_REISSUE)) {
  414 + type = 'confirm_reissue';
  415 + }
  416 + if (checkType(CHECK_TYPE.CREDIT_AUDIT)) {
  417 + type = 'credit_audit';
  418 + }
  419 + if (checkType(CHECK_TYPE.URGENT_INVOICE_AUDITING_OLD)) {
  420 + type = 'urgent_invoice_audit_old';
  421 + }
  422 + if (checkType(CHECK_TYPE.CONFIRM_REISSUE_OLD)) {
  423 + type = 'confirm_reissue_old';
  424 + }
  425 + return type;
  426 + }
  427 +
  428 + return (
  429 + <>
  430 + <ModalForm<{
  431 + name: string;
  432 + company: string;
  433 + }>
  434 + width={500}
  435 + open
  436 + title={aPopoverTitle}
  437 + form={form}
  438 + autoFocusFirstInput
  439 + modalProps={{
  440 + okText: '通过',
  441 + cancelText: '取消',
  442 + destroyOnClose: true,
  443 + onCancel: () => {
  444 + setCheckVisible(false);
  445 + },
  446 + }}
  447 + submitter={{
  448 + render: () => {
  449 + let myDoms = [];
  450 + if (!checkType(CHECK_TYPE.CONFIRM_DELIVER)) {
  451 + myDoms
  452 + .push
  453 + // <Button
  454 + // key="驳回"
  455 + // onClick={async () => {
  456 + // if (checkType(CHECK_TYPE.AFTER_SALES)) {
  457 + // doAfterSalesCheck({
  458 + // applyType: 'after-sales',
  459 + // isAfterSalesSuccess: false,
  460 + // subOrderIds: subOrderIds,
  461 + // mainId: mainOrderId,
  462 + // afterSalesRejectionNotes: form.getFieldValue('name'),
  463 + // });
  464 + // return;
  465 + // }
  466 +
  467 + // if (checkType(CHECK_TYPE.FINALCIAL)) {
  468 + // let values = { name: form.getFieldValue('name') };
  469 + // doFinancailCheck(values, false);
  470 + // return;
  471 + // }
  472 +
  473 + // if (checkType(CHECK_TYPE.LEADER_AUDIT)) {
  474 + // doLeaderCheck({
  475 + // pass: false,
  476 + // subOrderIds: subOrderIds,
  477 + // reason: form.getFieldValue('name'),
  478 + // });
  479 + // return;
  480 + // }
  481 +
  482 + // if (checkType(CHECK_TYPE.MODIFY_APPLY_WAIT_FOR_AUDIT)) {
  483 + // doAfterSalesCheck({
  484 + // applyType: 'order-change-normal',
  485 + // isAfterSalesSuccess: false,
  486 + // subOrderIds: subOrderIds,
  487 + // mainId: mainOrderId,
  488 + // afterSalesRejectionNotes: form.getFieldValue('name'),
  489 + // });
  490 + // return;
  491 + // }
  492 +
  493 + // //预存审核,先暂时共用同一个审核弹窗
  494 + // if (checkType(CHECK_TYPE.PREPAID_AUDIT)) {
  495 + // return doPrepaidAudit({
  496 + // pass: false,
  497 + // ids: subOrderIds,
  498 + // auditNotes: form.getFieldValue('name'),
  499 + // });
  500 + // }
  501 +
  502 + // let type = '';
  503 + // type = computeType();
  504 + // console.log('type:' + type);
  505 + // doCheck({
  506 + // pass: false,
  507 + // subOrderIds: subOrderIds,
  508 + // type: type,
  509 + // notes: form.getFieldValue('name'),
  510 + // });
  511 + // }}
  512 + // >
  513 + // 驳回
  514 + // </Button>,
  515 + ();
  516 + }
  517 +
  518 + //如果是仓库审核,那么显示这个外部采购
  519 + if (checkType(CHECK_TYPE.WEARHOUSE_KEEPER)) {
  520 + myDoms.push(
  521 + <Button
  522 + key="外部采购"
  523 + onClick={async () => {
  524 + let res = await postServiceOrderToProcureAudit({
  525 + data: {
  526 + subOrderIds: subOrderIds,
  527 + },
  528 + });
  529 +
  530 + if (res && res.result === RESPONSE_CODE.SUCCESS) {
  531 + message.success(res.message);
  532 + onClose();
  533 + }
  534 + }}
  535 + >
  536 + 外部采购
  537 + </Button>,
  538 + );
  539 + }
  540 +
  541 + //确认
  542 + // myDoms.push(defaultDoms[1]);
  543 + return myDoms;
  544 + },
  545 + }}
  546 + submitTimeout={2000}
  547 + onFinish={async (values) => {
  548 + if (checkType(CHECK_TYPE.AFTER_SALES)) {
  549 + //审核通过
  550 + return doAfterSalesCheck({
  551 + applyType: 'after-sales',
  552 + isAfterSalesSuccess: true,
  553 + subOrderIds: subOrderIds,
  554 + mainId: mainOrderId,
  555 + afterSalesRejectionNotes: values.name,
  556 + afterSalesStoreNotes: values.sure,
  557 + });
  558 + }
  559 + console.log('h');
  560 + if (checkType(CHECK_TYPE.FINALCIAL)) {
  561 + doFinancailCheck(values, true);
  562 + return;
  563 + }
  564 +
  565 + if (checkType(CHECK_TYPE.LEADER_AUDIT)) {
  566 + doLeaderCheck({
  567 + pass: true,
  568 + subOrderIds: subOrderIds,
  569 + reason: values.name,
  570 + });
  571 + return;
  572 + }
  573 +
  574 + if (checkType(CHECK_TYPE.MODIFY_APPLY_WAIT_FOR_AUDIT)) {
  575 + //审核通过
  576 + return doAfterSalesCheck({
  577 + applyType: 'order-change-normal',
  578 + isAfterSalesSuccess: true,
  579 + subOrderIds: subOrderIds,
  580 + mainId: mainOrderId,
  581 + afterSalesRejectionNotes: values.name,
  582 + afterSalesStoreNotes: values.sure,
  583 + });
  584 + }
  585 +
  586 + //预存审核,先暂时共用同一个审核弹窗
  587 + if (checkType(CHECK_TYPE.PREPAID_AUDIT)) {
  588 + return doPrepaidAudit({
  589 + pass: true,
  590 + ids: subOrderIds,
  591 + auditNotes: form.getFieldValue('name'),
  592 + });
  593 + }
  594 +
  595 + let type = '';
  596 + type = computeType();
  597 + doCheck({
  598 + ...values,
  599 + pass: true,
  600 + subOrderIds: subOrderIds,
  601 + type: type,
  602 + notes: form.getFieldValue('name'),
  603 + });
  604 + }}
  605 + onOpenChange={setCheckVisible}
  606 + >
  607 + {checkType(CHECK_TYPE.AFTER_SALES) ? (
  608 + <>
  609 + {afterSalesInfo}
  610 + <Button
  611 + className="px-0"
  612 + type="link"
  613 + onClick={() => {
  614 + console.log(data);
  615 + openOrderDrawer('after-sales-check', mainOrderId);
  616 + }}
  617 + >
  618 + 查看旧订单
  619 + </Button>
  620 + </>
  621 + ) : (
  622 + ''
  623 + )}
  624 + {checkType(CHECK_TYPE.PAYMENT_RECEIPTS_AUDIT) ? (
  625 + <>
  626 + <Divider orientation="center">
  627 + <span className="text-sm">回款凭证</span>
  628 + </Divider>
  629 + <Image.PreviewGroup
  630 + className="mr-10"
  631 + preview={{
  632 + onChange: (current, prev) =>
  633 + console.log(`current index: ${current}, prev index: ${prev}`),
  634 + }}
  635 + >
  636 + {paymentReceiptsImages.map((url) => (
  637 + <>
  638 + <Image width={120} src={url} /> <Divider type="vertical" />
  639 + </>
  640 + ))}
  641 + </Image.PreviewGroup>
  642 + <Divider></Divider>
  643 + </>
  644 + ) : (
  645 + ''
  646 + )}
  647 +
  648 + {checkType(CHECK_TYPE.PREPAID_AUDIT) && (
  649 + <>
  650 + <Divider orientation="center">
  651 + <span className="text-sm">凭证</span>
  652 + </Divider>
  653 + <Image.PreviewGroup
  654 + className="mr-10"
  655 + preview={{
  656 + onChange: (current, prev) =>
  657 + console.log(`current index: ${current}, prev index: ${prev}`),
  658 + }}
  659 + >
  660 + {prepaidProofImages.map((url) => (
  661 + <>
  662 + <Image width={120} src={url} /> <Divider type="vertical" />
  663 + </>
  664 + ))}
  665 + </Image.PreviewGroup>
  666 + <Divider></Divider>
  667 + </>
  668 + )}
  669 +
  670 + {/* {checkType('prepaidAudit') ? (
  671 + <div>请特别注意手机号码和充值金额。</div>
  672 + ) : (
  673 + <div>请特别注意订单总金额与订单金额。</div>
  674 + )} */}
  675 + {!checkType(CHECK_TYPE.CONFIRM_DELIVER) ? (
  676 + <ProFormTextArea
  677 + width="lg"
  678 + name="name"
  679 + readonly
  680 + initialValue={subOrders?.find((order) => order.notes)?.notes || ''}
  681 + // placeholder="若驳回,请填写驳回理由"
  682 + />
  683 + ) : (
  684 + <></>
  685 + )}
  686 +
  687 + <ProFormTextArea
  688 + width="lg"
  689 + name="sure"
  690 + label="确认原因 :"
  691 + rules={[
  692 + {
  693 + required: true,
  694 + message: '请输入确认原因!',
  695 + },
  696 + ]}
  697 + // placeholder="若驳回,请填写驳回理由"
  698 + />
  699 +
  700 + {checkType(CHECK_TYPE.FINALCIAL) ? (
  701 + <>
  702 + <ProFormText
  703 + width="md"
  704 + name="bankStatementSerialNumbersText"
  705 + label="流水号"
  706 + rules={[
  707 + {
  708 + required: true,
  709 + message: '请输入流水号!',
  710 + },
  711 + ]}
  712 + placeholder={'多个流水号用逗号隔开'}
  713 + />
  714 + <div className="pb-4 text-xs decoration-gray-50">
  715 + 可复制照片粘贴
  716 + </div>
  717 + <Upload {...props}>
  718 + {fileList.length < COMFIR_RECEIPT_IMAGES_NUMBER
  719 + ? uploadButton
  720 + : ''}
  721 + </Upload>
  722 + </>
  723 + ) : (
  724 + ''
  725 + )}
  726 + {checkType(CHECK_TYPE.CONFIRM_REISSUE) && (
  727 + <>
  728 + <InvoiceSubOrderInfoTable
  729 + subOrderIds={subOrderIds}
  730 + ></InvoiceSubOrderInfoTable>
  731 + </>
  732 + )}
  733 + {checkType(CHECK_TYPE.URGENT_INVOICE_AUDITING) ? (
  734 + <>
  735 + <ProList
  736 + rowKey="id"
  737 + headerTitle="发票信息"
  738 + metas={{
  739 + title: {
  740 + dataIndex: 'name',
  741 + },
  742 + avatar: {
  743 + dataIndex: 'image',
  744 + editable: false,
  745 + },
  746 + description: {
  747 + dataIndex: 'desc',
  748 + },
  749 + subTitle: {
  750 + render: () => {
  751 + return (
  752 + <Space size={0}>
  753 + <Tag color="blue">Ant Design</Tag>
  754 + <Tag color="#5BD8A6">TechUI</Tag>
  755 + </Space>
  756 + );
  757 + },
  758 + },
  759 + actions: {
  760 + render: (text, row, index, action) => [
  761 + <a
  762 + onClick={() => {
  763 + action?.startEditable(row.id);
  764 + }}
  765 + key="link"
  766 + >
  767 + 编辑
  768 + </a>,
  769 + ],
  770 + },
  771 + }}
  772 + ></ProList>
  773 + </>
  774 + ) : (
  775 + ''
  776 + )}
  777 +
  778 + <Form.Item>
  779 + <Button type="primary" htmlType="submit">
  780 + 确认
  781 + </Button>
  782 + </Form.Item>
  783 + </ModalForm>
  784 +
  785 + <Modal
  786 + open={previewOpen}
  787 + title={previewTitle}
  788 + footer={null}
  789 + onCancel={handleCancel}
  790 + >
  791 + <img alt="图片预览" style={{ width: '100%' }} src={previewImage} />
  792 + </Modal>
  793 + {contextHolder}
  794 + </>
  795 + );
  796 +};
... ...
src/pages/Order/FeedBack/constant.ts
... ... @@ -181,6 +181,7 @@ export const ORDER_STATUS_OPTIONS = {
181 181 WAIT_CONFIRM_DELIVER_AFTER_INVOICE: '待开票后确认发货',
182 182 SALES_CONFIRM: '销售待确认',
183 183 UNAUDITED: '未审核',
  184 + PROCURE_REJECT: '采购驳回至销售',
184 185 LEADER_PROCESS: '领导待审核',
185 186 MODIFY_APPLY_WAIT_FOR_AUDIT: '修改待审核',
186 187 LEADER_AUDITED: '领导已审核',
... ... @@ -265,6 +266,7 @@ export const TAGS_COLOR = new Map&lt;string, string&gt;([
265 266 ['COMMON_INVOICED', 'processing'],
266 267 ['AFTER_INVOICED', 'success'],
267 268 ['UNAUDITED', 'warning'],
  269 + ['PROCURE_REJECT', 'warning'],
268 270 ['AUDITED', 'processing'],
269 271 ['WAIT_SHIP', 'processing'],
270 272 ['SHIPPED', 'processing'],
... ...
src/pages/Order/Order/components/CheckModal.tsx
... ... @@ -66,7 +66,7 @@ export default ({
66 66 const [messageApi, contextHolder] = message.useMessage();
67 67 const [form] = Form.useForm<{ name: string; company: string }>();
68 68 let subOrderIds: any[] = subOrders?.map((subOrder) => subOrder.id);
69   - const [mainOrderId] = useState(data.id);
  69 + const [mainOrderId] = useState(data?.id || null);
70 70  
71 71 const [afterSalesInfo, setAfterSalesInfo] = useState<any>();
72 72 const [prepaidProofImages, setPrepaidProofImages] = useState<any[]>([]);
... ...
src/pages/Order/Order/components/OrderDrawer.tsx
... ... @@ -1140,7 +1140,10 @@ export default ({ onClose, data, subOrders, orderOptType }) =&gt; {
1140 1140 console.log(form.getFieldValue('id'));
1141 1141 if (form.getFieldValue('id') !== undefined) {
1142 1142 const resp = await postDistrictSelOrderProvince({
1143   - data: form.getFieldValue('id'),
  1143 + data: {
  1144 + oId: form.getFieldValue('id'),
  1145 + orderType: orderOptType,
  1146 + },
1144 1147 });
1145 1148 if (resp && resp.data) {
1146 1149 if (resp.data.province) {
... ... @@ -1327,7 +1330,10 @@ export default ({ onClose, data, subOrders, orderOptType }) =&gt; {
1327 1330 console.log(form.getFieldValue('id'));
1328 1331 if (form.getFieldValue('id')) {
1329 1332 const resp = await postDistrictSelOrderProvince({
1330   - data: form.getFieldValue('id'),
  1333 + data: {
  1334 + oId: form.getFieldValue('id'),
  1335 + orderType: orderOptType,
  1336 + },
1331 1337 });
1332 1338 if (
1333 1339 resp.data.province !== null &&
... ... @@ -1387,7 +1393,10 @@ export default ({ onClose, data, subOrders, orderOptType }) =&gt; {
1387 1393 let districtOptions = [];
1388 1394 if (form.getFieldValue('id')) {
1389 1395 const resp = await postDistrictSelOrderProvince({
1390   - data: form.getFieldValue('id'),
  1396 + data: {
  1397 + oId: form.getFieldValue('id'),
  1398 + orderType: orderOptType,
  1399 + },
1391 1400 });
1392 1401 if (resp.data.city !== null && resp.data.city !== undefined) {
1393 1402 let res = await postDistrictSelectByNameAndLevel({
... ...
src/pages/Order/Order/components/ProcureCheckModal.tsx
... ... @@ -2,6 +2,7 @@ import { RESPONSE_CODE } from &#39;@/constants/enum&#39;;
2 2 import {
3 3 postServiceOrderProcureCheckOrder,
4 4 postServiceOrderProcureConvertWarehouseKeeper,
  5 + postServiceOrderPurchaseRejectionToSale,
5 6 postServiceOrderQuerySupplier,
6 7 } from '@/services';
7 8 import {
... ... @@ -13,7 +14,7 @@ import { Button, Form, Input, Popconfirm, message } from &#39;antd&#39;;
13 14 import { useState } from 'react';
14 15 export default ({ setCheckVisible, isMainOrder, orders, onClose }) => {
15 16 const [form] = Form.useForm<{ supplier: string }>();
16   - const [checkNotes, setCheckNotes] = useState<string>('');
  17 + const [procureNotes, setProcureNotes] = useState<string>('');
17 18  
18 19 console.log(isMainOrder);
19 20  
... ... @@ -51,6 +52,38 @@ export default ({ setCheckVisible, isMainOrder, orders, onClose }) =&gt; {
51 52 defaultDoms[0],
52 53 <>
53 54 <Popconfirm
  55 + title="是否驳回至销售"
  56 + description={
  57 + <div>
  58 + <Input.TextArea
  59 + placeholder="请填写备注"
  60 + onChange={(e: any) => {
  61 + setProcureNotes(e.target.value);
  62 + }}
  63 + rows={4}
  64 + ></Input.TextArea>
  65 + </div>
  66 + }
  67 + onConfirm={async () => {
  68 + let res = await postServiceOrderPurchaseRejectionToSale({
  69 + data: {
  70 + subIds: ids,
  71 + procureNotes: procureNotes,
  72 + },
  73 + });
  74 +
  75 + if (res?.result === RESPONSE_CODE.SUCCESS) {
  76 + message.success(res.message);
  77 + onClose();
  78 + return true;
  79 + }
  80 + }}
  81 + okText="确定"
  82 + cancelText="取消"
  83 + >
  84 + <Button type="primary">驳回至销售</Button>
  85 + </Popconfirm>
  86 + <Popconfirm
54 87 title="是否转回仓库"
55 88 description={
56 89 <div>
... ... @@ -60,7 +93,7 @@ export default ({ setCheckVisible, isMainOrder, orders, onClose }) =&gt; {
60 93 <Input.TextArea
61 94 placeholder="请填写备注"
62 95 onChange={(e: any) => {
63   - setCheckNotes(e.target.value);
  96 + setProcureNotes(e.target.value);
64 97 }}
65 98 rows={4}
66 99 ></Input.TextArea>
... ... @@ -71,7 +104,7 @@ export default ({ setCheckVisible, isMainOrder, orders, onClose }) =&gt; {
71 104 {
72 105 data: {
73 106 subIds: ids,
74   - checkNotes: checkNotes,
  107 + procureNotes: procureNotes,
75 108 },
76 109 },
77 110 );
... ...
src/pages/Order/Order/index copy.tsx
... ... @@ -712,7 +712,11 @@ const OrderPage = () =&gt; {
712 712 }
713 713  
714 714 //如果是未审核或者领导已审核,付款状态为预付款则需要财务审核【财务待审核】,否则仓库审核【】
715   - if (orderStatus === 'UNAUDITED' || orderStatus === 'LEADER_AUDITED') {
  715 + if (
  716 + orderStatus === 'UNAUDITED' ||
  717 + orderStatus === 'LEADER_AUDITED' ||
  718 + orderStatus === 'PROCURE_REJECT'
  719 + ) {
716 720 if (paymentMethod === 'PAYMENT_IN_ADVANCE') {
717 721 orderStatusTagText = '财务待审核';
718 722 } else {
... ... @@ -1999,7 +2003,7 @@ const OrderPage = () =&gt; {
1999 2003 onClick={() => {
2000 2004 createOptObject(optRecord.id, record.id);
2001 2005 setOrderDrawerVisible(true);
2002   - setOrderOptType('after_sales');
  2006 + setOrderOptType('after-sales');
2003 2007 }}
2004 2008 >
2005 2009 申请售后
... ... @@ -3523,6 +3527,7 @@ const OrderPage = () =&gt; {
3523 3527 //是审核通过及之后的订单
3524 3528 if (
3525 3529 orderStatus !== 'UNAUDITED' &&
  3530 + orderStatus !== 'PROCURE_REJECT' &&
3526 3531 orderStatus !== 'AUDIT_FAILED' &&
3527 3532 orderStatus !== 'LEADER_PROCESS' &&
3528 3533 orderStatus !== 'SALES_CONFIRM' &&
... ... @@ -3538,6 +3543,7 @@ const OrderPage = () =&gt; {
3538 3543 if (
3539 3544 roleCode !== 'admin' &&
3540 3545 (orderStatus === 'UNAUDITED' ||
  3546 + orderStatus === 'PROCURE_REJECT' ||
3541 3547 orderStatus === 'AUDIT_FAILED')
3542 3548 ) {
3543 3549 message.error('请选择已审核的订单进行编辑');
... ... @@ -3591,6 +3597,7 @@ const OrderPage = () =&gt; {
3591 3597 let orderStatus = selectedSubOrders[i].orderStatus;
3592 3598 if (
3593 3599 orderStatus !== 'UNAUDITED' &&
  3600 + orderStatus !== 'PROCURE_REJECT' &&
3594 3601 orderStatus !== 'FINANCE_PROCESS' &&
3595 3602 orderStatus !== 'LEADER_AUDITED'
3596 3603 ) {
... ... @@ -3754,6 +3761,8 @@ const OrderPage = () =&gt; {
3754 3761 if (
3755 3762 selectedSubOrders[i].orderStatus !== 'UNAUDITED' &&
3756 3763 selectedSubOrders[i].orderStatus !==
  3764 + 'PROCURE_REJECT' &&
  3765 + selectedSubOrders[i].orderStatus !==
3757 3766 'FINANCE_PROCESS' &&
3758 3767 selectedSubOrders[i].orderStatus !==
3759 3768 'LEADER_AUDITED'
... ... @@ -3826,7 +3835,9 @@ const OrderPage = () =&gt; {
3826 3835 selectedSubOrders[i].orderStatus !==
3827 3836 'CONFIRM_RECEIPT' &&
3828 3837 selectedSubOrders[i].orderStatus !==
3829   - 'AFTER_SALES_FAILURE'
  3838 + 'AFTER_SALES_FAILURE' &&
  3839 + selectedSubOrders[i].orderStatus !==
  3840 + 'AFTER_SALES_COMPLETION'
3830 3841 ) {
3831 3842 message.error('请选择确认收货状态的子订单进行售后');
3832 3843 return;
... ... @@ -5062,7 +5073,7 @@ const OrderPage = () =&gt; {
5062 5073 subOrders={orderOptType === 'add' ? [] : buildSubOrders()}
5063 5074 onClose={(isSuccess: boolean) => {
5064 5075 setOrderDrawerVisible(false);
5065   - clearOptObject();
  5076 + // clearOptObject();
5066 5077 if (isSuccess) {
5067 5078 refreshTable();
5068 5079 }
... ...
src/pages/Order/OrderList/CheckModal.tsx
... ... @@ -66,7 +66,7 @@ export default ({
66 66 const [messageApi, contextHolder] = message.useMessage();
67 67 const [form] = Form.useForm<{ name: string; company: string }>();
68 68 let subOrderIds: any[] = subOrders?.map((subOrder) => subOrder.id);
69   - const [mainOrderId] = useState(data.id);
  69 + const [mainOrderId] = useState(data?.id || null);
70 70  
71 71 const [afterSalesInfo, setAfterSalesInfo] = useState<any>();
72 72 const [prepaidProofImages, setPrepaidProofImages] = useState<any[]>([]);
... ...
src/pages/Order/OrderList/OrderDrawer.tsx
... ... @@ -1162,7 +1162,10 @@ export default ({ onClose, data, subOrders, orderOptType }) =&gt; {
1162 1162 console.log(form.getFieldValue('id'));
1163 1163 if (form.getFieldValue('id') !== undefined) {
1164 1164 const resp = await postDistrictSelOrderProvince({
1165   - data: form.getFieldValue('id'),
  1165 + data: {
  1166 + oId: form.getFieldValue('id'),
  1167 + orderType: orderOptType,
  1168 + },
1166 1169 });
1167 1170 if (resp && resp.data) {
1168 1171 if (resp.data.province) {
... ... @@ -1349,7 +1352,10 @@ export default ({ onClose, data, subOrders, orderOptType }) =&gt; {
1349 1352 console.log(form.getFieldValue('id'));
1350 1353 if (form.getFieldValue('id')) {
1351 1354 const resp = await postDistrictSelOrderProvince({
1352   - data: form.getFieldValue('id'),
  1355 + data: {
  1356 + oId: form.getFieldValue('id'),
  1357 + orderType: orderOptType,
  1358 + },
1353 1359 });
1354 1360 if (
1355 1361 resp.data.province !== null &&
... ... @@ -1409,7 +1415,10 @@ export default ({ onClose, data, subOrders, orderOptType }) =&gt; {
1409 1415 let districtOptions = [];
1410 1416 if (form.getFieldValue('id')) {
1411 1417 const resp = await postDistrictSelOrderProvince({
1412   - data: form.getFieldValue('id'),
  1418 + data: {
  1419 + oId: form.getFieldValue('id'),
  1420 + orderType: orderOptType,
  1421 + },
1413 1422 });
1414 1423 if (resp.data.city !== null && resp.data.city !== undefined) {
1415 1424 let res = await postDistrictSelectByNameAndLevel({
... ...
src/pages/Order/OrderList/OrderList.tsx
... ... @@ -9,7 +9,6 @@ import {
9 9 postKingdeeRepSalOrderSave,
10 10 postServiceConstCanApplyAfterInvoicingStatus,
11 11 postServiceInvoiceCancelApply,
12   - postServiceOrderAfterSalesCheck,
13 12 postServiceOrderCancelSend,
14 13 postServiceOrderConfirmInvoice,
15 14 postServiceOrderGetCurrentOptNode,
... ... @@ -81,6 +80,7 @@ import Base64 from &#39;base-64&#39;;
81 80 import { cloneDeep } from 'lodash';
82 81 import React, { Key, useEffect, useMemo, useRef, useState } from 'react';
83 82 import OrderPrintModal from '../../OrderPrint/OrderPrintModal';
  83 +import StoreCheckModal from '../FeedBack/StoreCheckModal';
84 84 import {
85 85 AFTER_INVOICING_STATUS,
86 86 CHECK_TYPE,
... ... @@ -156,6 +156,8 @@ const OrderList = ({ paramsNew, searchShow, toolbarShow }) =&gt; {
156 156 useState<boolean>(false);
157 157 const [afterSalesDrawerVisible, setAfterSalesDrawerVisible] =
158 158 useState<boolean>(false);
  159 + const [storeCheckModalVisible, setStoreCheckModalVisible] =
  160 + useState<boolean>(false);
159 161 const [historyModalVisible, setHistoryModalVisible] =
160 162 useState<boolean>(false);
161 163 const [isRePrintOrder, setIsRePrintOrder] = useState<boolean>(false);
... ... @@ -563,15 +565,15 @@ const OrderList = ({ paramsNew, searchShow, toolbarShow }) =&gt; {
563 565 }
564 566 };
565 567  
566   - async function doAfterSalesCheck(body: object) {
567   - const data = await postServiceOrderAfterSalesCheck({
568   - data: body,
569   - });
570   - console.log(data);
571   - if (data.data) {
572   - refreshTable();
573   - }
574   - }
  568 + // async function doAfterSalesCheck(body: object) {
  569 + // const data = await postServiceOrderAfterSalesCheck({
  570 + // data: body,
  571 + // });
  572 + // console.log(data);
  573 + // if (data.data) {
  574 + // refreshTable();
  575 + // }
  576 + // }
575 577  
576 578 const onCheckboxChange = (record: never) => {
577 579 let newSelectedMainOrderKeys = [];
... ... @@ -718,7 +720,11 @@ const OrderList = ({ paramsNew, searchShow, toolbarShow }) =&gt; {
718 720 }
719 721  
720 722 //如果是未审核或者领导已审核,付款状态为预付款则需要财务审核【财务待审核】,否则仓库审核【】
721   - if (orderStatus === 'UNAUDITED' || orderStatus === 'LEADER_AUDITED') {
  723 + if (
  724 + orderStatus === 'UNAUDITED' ||
  725 + orderStatus === 'LEADER_AUDITED' ||
  726 + orderStatus === 'PROCURE_REJECT'
  727 + ) {
722 728 if (paymentMethod === 'PAYMENT_IN_ADVANCE') {
723 729 orderStatusTagText = '财务待审核';
724 730 } else {
... ... @@ -1234,6 +1240,16 @@ const OrderList = ({ paramsNew, searchShow, toolbarShow }) =&gt; {
1234 1240 ) : (
1235 1241 ''
1236 1242 )}
  1243 + {/* 后置审核状态 */}
  1244 + {optRecord.orderStatus === 'PROCURE_REJECT' ? (
  1245 + <div className="overflow-hidden whitespace-no-wrap overflow-ellipsis">
  1246 + <Tag color={'red'} style={{ marginRight: '4px' }}>
  1247 + {'采购驳回'}
  1248 + </Tag>
  1249 + </div>
  1250 + ) : (
  1251 + ''
  1252 + )}
1237 1253  
1238 1254 {/**采购是否已下单状态 */}
1239 1255 {optRecord.procureOrderStatus !== null &&
... ... @@ -1887,24 +1903,18 @@ const OrderList = ({ paramsNew, searchShow, toolbarShow }) =&gt; {
1887 1903 )}
1888 1904  
1889 1905 {optRecord.paths?.includes('afterSalesConfirm') ? (
1890   - <ButtonConfirm
  1906 + <Button
1891 1907 className="p-0"
1892   - title="确认通过?"
1893   - text="售后已审核待确认"
1894   - onConfirm={() => {
1895   - setIsMainOrder(false);
1896   - doAfterSalesCheck({
1897   - applyType: 'after-sales',
1898   - isAfterSalesSuccess: true,
1899   - subOrderIds: isMainOrder
1900   - ? [...record.subOrderInformationLists]
1901   - .flat()
1902   - ?.map((subOrder) => subOrder.id)
1903   - : [optRecord.id],
1904   - mainId: record.id,
1905   - });
  1908 + type="link"
  1909 + onClick={() => {
  1910 + setCurrentMainId(record.id);
  1911 + createOptObject(optRecord.id, record.id);
  1912 + setStoreCheckModalVisible(true);
  1913 + setOrderCheckType(CHECK_TYPE.AFTER_SALES);
1906 1914 }}
1907   - />
  1915 + >
  1916 + 仓库确认
  1917 + </Button>
1908 1918 ) : (
1909 1919 ''
1910 1920 )}
... ... @@ -1995,7 +2005,7 @@ const OrderList = ({ paramsNew, searchShow, toolbarShow }) =&gt; {
1995 2005 onClick={() => {
1996 2006 createOptObject(optRecord.id, record.id);
1997 2007 setOrderDrawerVisible(true);
1998   - setOrderOptType('after_sales');
  2008 + setOrderOptType('after-sales');
1999 2009 }}
2000 2010 >
2001 2011 申请售后
... ... @@ -3484,6 +3494,7 @@ const OrderList = ({ paramsNew, searchShow, toolbarShow }) =&gt; {
3484 3494 //是审核通过及之后的订单
3485 3495 if (
3486 3496 orderStatus !== 'UNAUDITED' &&
  3497 + orderStatus !== 'PROCURE_REJECT' &&
3487 3498 orderStatus !== 'AUDIT_FAILED' &&
3488 3499 orderStatus !== 'LEADER_PROCESS' &&
3489 3500 orderStatus !== 'SALES_CONFIRM' &&
... ... @@ -3499,6 +3510,7 @@ const OrderList = ({ paramsNew, searchShow, toolbarShow }) =&gt; {
3499 3510 if (
3500 3511 roleCode !== 'admin' &&
3501 3512 (orderStatus === 'UNAUDITED' ||
  3513 + orderStatus === 'PROCURE_REJECT' ||
3502 3514 orderStatus === 'AUDIT_FAILED')
3503 3515 ) {
3504 3516 message.error('请选择已审核的订单进行编辑');
... ... @@ -3552,6 +3564,7 @@ const OrderList = ({ paramsNew, searchShow, toolbarShow }) =&gt; {
3552 3564 let orderStatus = selectedSubOrders[i].orderStatus;
3553 3565 if (
3554 3566 orderStatus !== 'UNAUDITED' &&
  3567 + orderStatus !== 'PROCURE_REJECT' &&
3555 3568 orderStatus !== 'FINANCE_PROCESS' &&
3556 3569 orderStatus !== 'LEADER_AUDITED'
3557 3570 ) {
... ... @@ -3607,22 +3620,18 @@ const OrderList = ({ paramsNew, searchShow, toolbarShow }) =&gt; {
3607 3620 )}
3608 3621  
3609 3622 {record.paths?.includes('afterSalesConfirm') ? (
3610   - <ButtonConfirm
  3623 + <Button
3611 3624 className="p-0"
3612   - title="确认通过?"
3613   - text="售后已审核待确认"
3614   - onConfirm={() => {
3615   - setIsMainOrder(true);
3616   - doAfterSalesCheck({
3617   - applyType: 'after-sales',
3618   - isAfterSalesSuccess: true,
3619   - subOrderIds: [...record.subOrderInformationLists]
3620   - .flat()
3621   - ?.map((subOrder) => subOrder.id),
3622   - mainId: record.id,
3623   - });
  3625 + type="link"
  3626 + onClick={() => {
  3627 + setCurrentMainId(record.id);
  3628 + createOptObject(null, record.id);
  3629 + setStoreCheckModalVisible(true);
  3630 + setOrderCheckType(CHECK_TYPE.AFTER_SALES);
3624 3631 }}
3625   - />
  3632 + >
  3633 + 仓库确认
  3634 + </Button>
3626 3635 ) : (
3627 3636 ''
3628 3637 )}
... ... @@ -3736,6 +3745,8 @@ const OrderList = ({ paramsNew, searchShow, toolbarShow }) =&gt; {
3736 3745 if (
3737 3746 selectedSubOrders[i].orderStatus !== 'UNAUDITED' &&
3738 3747 selectedSubOrders[i].orderStatus !==
  3748 + 'PROCURE_REJECT' &&
  3749 + selectedSubOrders[i].orderStatus !==
3739 3750 'FINANCE_PROCESS' &&
3740 3751 selectedSubOrders[i].orderStatus !==
3741 3752 'LEADER_AUDITED'
... ... @@ -3808,7 +3819,9 @@ const OrderList = ({ paramsNew, searchShow, toolbarShow }) =&gt; {
3808 3819 selectedSubOrders[i].orderStatus !==
3809 3820 'CONFIRM_RECEIPT' &&
3810 3821 selectedSubOrders[i].orderStatus !==
3811   - 'AFTER_SALES_FAILURE'
  3822 + 'AFTER_SALES_FAILURE' &&
  3823 + selectedSubOrders[i].orderStatus !==
  3824 + 'AFTER_SALES_COMPLETION'
3812 3825 ) {
3813 3826 message.error('请选择确认收货状态的子订单进行售后');
3814 3827 return;
... ... @@ -4722,7 +4735,7 @@ const OrderList = ({ paramsNew, searchShow, toolbarShow }) =&gt; {
4722 4735 subOrders={orderOptType === 'add' ? [] : buildSubOrders()}
4723 4736 onClose={(isSuccess: boolean) => {
4724 4737 setOrderDrawerVisible(false);
4725   - clearOptObject();
  4738 + // clearOptObject();
4726 4739 if (isSuccess) {
4727 4740 refreshTable();
4728 4741 }
... ... @@ -4759,6 +4772,34 @@ const OrderList = ({ paramsNew, searchShow, toolbarShow }) =&gt; {
4759 4772 />
4760 4773 )}
4761 4774  
  4775 + {storeCheckModalVisible && (
  4776 + <StoreCheckModal
  4777 + setCheckVisible={(val: boolean) => {
  4778 + setStoreCheckModalVisible(val);
  4779 + if (!val) {
  4780 + clearOptObject();
  4781 + }
  4782 + }}
  4783 + data={isMainOrder ? getFirstMainOrder() : buildMainOrder()}
  4784 + subOrders={
  4785 + isMainOrder
  4786 + ? [...subOrderSelectedMap.values()].flat()
  4787 + : buildSubOrders()
  4788 + }
  4789 + orderCheckType={orderCheckType}
  4790 + openOrderDrawer={(type: any, id: any) => {
  4791 + setCurrentMainId(id);
  4792 + setOrderOptType(type);
  4793 + setOrderDrawerVisible(true);
  4794 + }}
  4795 + onClose={() => {
  4796 + clearOptObject();
  4797 + setStoreCheckModalVisible(false);
  4798 + refreshTable();
  4799 + }}
  4800 + />
  4801 + )}
  4802 +
4762 4803 {applyForInvoicingVisible && (
4763 4804 <ApplyForInvoicingModal
4764 4805 setCheckVisible={(val: boolean) => {
... ...
src/pages/Order/OrderList/ProcureCheckModal.tsx
... ... @@ -2,6 +2,7 @@ import { RESPONSE_CODE } from &#39;@/constants/enum&#39;;
2 2 import {
3 3 postServiceOrderProcureCheckOrder,
4 4 postServiceOrderProcureConvertWarehouseKeeper,
  5 + postServiceOrderPurchaseRejectionToSale,
5 6 postServiceOrderQuerySupplier,
6 7 } from '@/services';
7 8 import {
... ... @@ -13,7 +14,7 @@ import { Button, Form, Input, Popconfirm, message } from &#39;antd&#39;;
13 14 import { useState } from 'react';
14 15 export default ({ setCheckVisible, isMainOrder, orders, onClose }) => {
15 16 const [form] = Form.useForm<{ supplier: string }>();
16   - const [checkNotes, setCheckNotes] = useState<string>('');
  17 + const [procureNotes, setProcureNotes] = useState<string>('');
17 18  
18 19 console.log(isMainOrder);
19 20  
... ... @@ -51,6 +52,38 @@ export default ({ setCheckVisible, isMainOrder, orders, onClose }) =&gt; {
51 52 defaultDoms[0],
52 53 <>
53 54 <Popconfirm
  55 + title="是否驳回至销售"
  56 + description={
  57 + <div>
  58 + <Input.TextArea
  59 + placeholder="请填写备注"
  60 + onChange={(e: any) => {
  61 + setProcureNotes(e.target.value);
  62 + }}
  63 + rows={4}
  64 + ></Input.TextArea>
  65 + </div>
  66 + }
  67 + onConfirm={async () => {
  68 + let res = await postServiceOrderPurchaseRejectionToSale({
  69 + data: {
  70 + subIds: ids,
  71 + procureNotes: procureNotes,
  72 + },
  73 + });
  74 +
  75 + if (res?.result === RESPONSE_CODE.SUCCESS) {
  76 + message.success(res.message);
  77 + onClose();
  78 + return true;
  79 + }
  80 + }}
  81 + okText="确定"
  82 + cancelText="取消"
  83 + >
  84 + <Button type="primary">驳回至销售</Button>
  85 + </Popconfirm>
  86 + <Popconfirm
54 87 title="是否转回仓库"
55 88 description={
56 89 <div>
... ... @@ -60,7 +93,7 @@ export default ({ setCheckVisible, isMainOrder, orders, onClose }) =&gt; {
60 93 <Input.TextArea
61 94 placeholder="请填写备注"
62 95 onChange={(e: any) => {
63   - setCheckNotes(e.target.value);
  96 + setProcureNotes(e.target.value);
64 97 }}
65 98 rows={4}
66 99 ></Input.TextArea>
... ... @@ -71,7 +104,7 @@ export default ({ setCheckVisible, isMainOrder, orders, onClose }) =&gt; {
71 104 {
72 105 data: {
73 106 subIds: ids,
74   - checkNotes: checkNotes,
  107 + procureNotes: procureNotes,
75 108 },
76 109 },
77 110 );
... ...
src/pages/Order/OrderWarning/index copy.tsx
... ... @@ -662,7 +662,11 @@ const OrderPage = () =&gt; {
662 662 }
663 663  
664 664 //如果是未审核或者领导已审核,付款状态为预付款则需要财务审核【财务待审核】,否则仓库审核【】
665   - if (orderStatus === 'UNAUDITED' || orderStatus === 'LEADER_AUDITED') {
  665 + if (
  666 + orderStatus === 'UNAUDITED' ||
  667 + orderStatus === 'LEADER_AUDITED' ||
  668 + orderStatus === 'PROCURE_REJECT'
  669 + ) {
666 670 if (paymentMethod === 'PAYMENT_IN_ADVANCE') {
667 671 orderStatusTagText = '财务待审核';
668 672 } else {
... ... @@ -1935,7 +1939,7 @@ const OrderPage = () =&gt; {
1935 1939 onClick={() => {
1936 1940 createOptObject(optRecord.id, record.id);
1937 1941 setOrderDrawerVisible(true);
1938   - setOrderOptType('after_sales');
  1942 + setOrderOptType('after-sales');
1939 1943 }}
1940 1944 >
1941 1945 申请售后
... ... @@ -3481,6 +3485,7 @@ const OrderPage = () =&gt; {
3481 3485 //是审核通过及之后的订单
3482 3486 if (
3483 3487 orderStatus !== 'UNAUDITED' &&
  3488 + orderStatus !== 'PROCURE_REJECT' &&
3484 3489 orderStatus !== 'AUDIT_FAILED' &&
3485 3490 orderStatus !== 'LEADER_PROCESS' &&
3486 3491 orderStatus !== 'SALES_CONFIRM' &&
... ... @@ -3496,6 +3501,7 @@ const OrderPage = () =&gt; {
3496 3501 if (
3497 3502 roleCode !== 'admin' &&
3498 3503 (orderStatus === 'UNAUDITED' ||
  3504 + orderStatus === 'PROCURE_REJECT' ||
3499 3505 orderStatus === 'AUDIT_FAILED')
3500 3506 ) {
3501 3507 message.error('请选择已审核的订单进行编辑');
... ... @@ -3549,6 +3555,7 @@ const OrderPage = () =&gt; {
3549 3555 let orderStatus = selectedSubOrders[i].orderStatus;
3550 3556 if (
3551 3557 orderStatus !== 'UNAUDITED' &&
  3558 + orderStatus !== 'PROCURE_REJECT' &&
3552 3559 orderStatus !== 'FINANCE_PROCESS' &&
3553 3560 orderStatus !== 'LEADER_AUDITED'
3554 3561 ) {
... ... @@ -3712,6 +3719,8 @@ const OrderPage = () =&gt; {
3712 3719 if (
3713 3720 selectedSubOrders[i].orderStatus !== 'UNAUDITED' &&
3714 3721 selectedSubOrders[i].orderStatus !==
  3722 + 'PROCURE_REJECT' &&
  3723 + selectedSubOrders[i].orderStatus !==
3715 3724 'FINANCE_PROCESS' &&
3716 3725 selectedSubOrders[i].orderStatus !==
3717 3726 'LEADER_AUDITED'
... ... @@ -3784,7 +3793,9 @@ const OrderPage = () =&gt; {
3784 3793 selectedSubOrders[i].orderStatus !==
3785 3794 'CONFIRM_RECEIPT' &&
3786 3795 selectedSubOrders[i].orderStatus !==
3787   - 'AFTER_SALES_FAILURE'
  3796 + 'AFTER_SALES_FAILURE' &&
  3797 + selectedSubOrders[i].orderStatus !==
  3798 + 'AFTER_SALES_COMPLETION'
3788 3799 ) {
3789 3800 message.error('请选择确认收货状态的子订单进行售后');
3790 3801 return;
... ...
src/pages/Order/constant.ts
... ... @@ -195,6 +195,7 @@ export const ORDER_STATUS_OPTIONS = {
195 195 WAIT_CONFIRM_DELIVER_AFTER_INVOICE: '待开票后确认发货',
196 196 SALES_CONFIRM: '销售待确认',
197 197 UNAUDITED: '未审核',
  198 + PROCURE_REJECT: '采购驳回至销售',
198 199 LEADER_PROCESS: '领导待审核',
199 200 MODIFY_APPLY_WAIT_FOR_AUDIT: '修改待审核',
200 201 LEADER_AUDITED: '领导已审核',
... ... @@ -273,6 +274,7 @@ export const TAGS_COLOR = new Map&lt;string, string&gt;([
273 274 ['COMMON_INVOICED', 'processing'],
274 275 ['AFTER_INVOICED', 'success'],
275 276 ['UNAUDITED', 'warning'],
  277 + ['PROCURE_REJECT', 'warning'],
276 278 ['AUDITED', 'processing'],
277 279 ['WAIT_SHIP', 'processing'],
278 280 ['SHIPPED', 'processing'],
... ...