Commit 699fa04cbefe2b6f583e2ddb9396fdecb0c7a5d8

Authored by zhongnanhuang
1 parent 6718e7eb

feat: update

src/pages/Order/components/DeliverModal.tsx
... ... @@ -13,7 +13,12 @@ import { cloneDeep } from 'lodash';
13 13 import { useEffect, useRef, useState } from 'react';
14 14 import { LOGISTICS_STATUS_OPTIONS } from '../constant';
15 15  
16   -const DeliverModal = ({ data: propsData, isSendProduct, onClose }) => {
  16 +const DeliverModal = ({
  17 + data: propsData,
  18 + isSendProduct,
  19 + setVisible,
  20 + onClose,
  21 +}) => {
17 22 const [data, setData] = useState(propsData || {});
18 23 const form = useRef();
19 24  
... ... @@ -69,7 +74,9 @@ const DeliverModal = ({ data: propsData, isSendProduct, onClose }) => {
69 74 dataIndex: 'packageNumber',
70 75 render: (_, record, index) => (
71 76 <InputNumber
  77 + min={1}
72 78 value={record.packageNumber}
  79 + defaultValue={1}
73 80 onChange={(value) => handleChange('packageNumber', index, value)}
74 81 />
75 82 ),
... ... @@ -118,7 +125,8 @@ const DeliverModal = ({ data: propsData, isSendProduct, onClose }) =&gt; {
118 125 id: item.id,
119 126 logisticsMethod: item.logisticsMethod,
120 127 serialNumber: item.serialNumber,
121   - packageNumber: item.packageNumber,
  128 + packageNumber:
  129 + item.packageNumber === undefined ? 1 : item.packageNumber,
122 130 };
123 131 });
124 132 let body = { id: data[0].mainOrderId, list: list, flag: false };
... ... @@ -133,7 +141,7 @@ const DeliverModal = ({ data: propsData, isSendProduct, onClose }) =&gt; {
133 141 }
134 142 }}
135 143 onCancel={() => {
136   - onClose();
  144 + setVisible(false);
137 145 }}
138 146 >
139 147 <strong>将物流方式和物流单号更新到下方所有订单</strong>
... ...
src/pages/Order/components/HistoryModal.tsx
1 1 import { postServiceOrderQueryHistoryOrderRecord } from '@/services';
2 2 import { enumValueToLabel, formatDateTime } from '@/utils';
3   -import { Button, Col, Empty, Flex, Modal, Row } from 'antd';
  3 +import { Button, Col, Empty, Flex, Modal, Row, Spin } from 'antd';
4 4 import { useEffect, useState } from 'react';
5 5 import { HISTORY_OPT_TYPE, ORDER_STATUS_OPTIONS } from '../constant';
6 6  
... ... @@ -9,7 +9,8 @@ export default ({ subOrders, onClose }) =&gt; {
9 9 return subOrder.id;
10 10 });
11 11 const [data, setData] = useState([]);
12   - let i = 1;
  12 + const [loading, setLoading] = useState(true);
  13 + let i = 0;
13 14  
14 15 const handleOk = () => {
15 16 onClose();
... ... @@ -20,7 +21,7 @@ export default ({ subOrders, onClose }) =&gt; {
20 21 data: { ids: subOrderIds },
21 22 });
22 23 setData(res.data);
23   - console.log(data);
  24 + setLoading(false);
24 25 };
25 26  
26 27 useEffect(() => {
... ... @@ -36,6 +37,7 @@ export default ({ subOrders, onClose }) =&gt; {
36 37 <Modal
37 38 title="订单历史记录"
38 39 open
  40 + width={650}
39 41 onOk={handleOk}
40 42 onCancel={handleCancel}
41 43 footer={() => (
... ... @@ -44,59 +46,69 @@ export default ({ subOrders, onClose }) =&gt; {
44 46 </>
45 47 )}
46 48 >
47   - <Row>
48   - {data.map((item) => {
49   - return (
50   - <Col span={24} key="key">
51   - <Flex vertical>
52   - <span className="py-2 text-[#5E5E5E]">{'商品' + i++}</span>
  49 + <Spin tip="加载中" spinning={loading}>
  50 + <Row className="max-h-[500px] overflow-auto" gutter={[0, 14]}>
  51 + {data.map((item) => {
  52 + return (
  53 + <Col span={24} key="key">
53 54 <Flex vertical>
54   - {item.historySubOrderRecordDto?.map((history) => {
55   - return (
56   - <div className="py-1" key="key">
57   - <span className="pr-2 text-[#5E5E5E]">
58   - {formatDateTime(history.createTime)}
59   - </span>
60   - <span className="text-[#3b83e5]">
61   - {history.createByName}
62   - </span>
63   - 进行了
64   - <span className="text-[#3b83e5]">
65   - {HISTORY_OPT_TYPE.get(history.record)}
66   - </span>
67   - ,
68   - {enumValueToLabel(
69   - history.status,
70   - ORDER_STATUS_OPTIONS,
71   - ) === undefined
72   - ? '子订单开票状态为'
73   - : '子订单状态为'}
74   - :
75   - <span className="text-[#3b83e5]">
  55 + <div>
  56 + <span className="py-2 text-[#5E5E5E]">
  57 + {'商品' + ++i}
  58 + </span>
  59 + <span className="text-[#8C8C8C]">
  60 + -【{subOrders[i - 1].productName}】
  61 + </span>
  62 + </div>
  63 +
  64 + <Flex vertical>
  65 + {item.historySubOrderRecordDto?.map((history) => {
  66 + return (
  67 + <div className="py-1" key="key">
  68 + <span className="pr-2 text-[#5E5E5E]">
  69 + {formatDateTime(history.createTime)}
  70 + </span>
  71 + <span className="text-[#3b83e5]">
  72 + {history.createByName}
  73 + </span>
  74 + 进行了
  75 + <span className="text-[#3b83e5]">
  76 + {HISTORY_OPT_TYPE.get(history.record)}
  77 + </span>
  78 + ,
76 79 {enumValueToLabel(
77 80 history.status,
78 81 ORDER_STATUS_OPTIONS,
79 82 ) === undefined
80   - ? '已开票'
81   - : enumValueToLabel(
82   - history.status,
83   - ORDER_STATUS_OPTIONS,
84   - )}
85   - </span>
86   - </div>
87   - );
88   - })}
  83 + ? '子订单开票状态为'
  84 + : '子订单状态为'}
  85 + :
  86 + <span className="text-[#3b83e5]">
  87 + {enumValueToLabel(
  88 + history.status,
  89 + ORDER_STATUS_OPTIONS,
  90 + ) === undefined
  91 + ? '已开票'
  92 + : enumValueToLabel(
  93 + history.status,
  94 + ORDER_STATUS_OPTIONS,
  95 + )}
  96 + </span>
  97 + </div>
  98 + );
  99 + })}
  100 + </Flex>
89 101 </Flex>
90   - </Flex>
91   - </Col>
92   - );
93   - })}
94   - </Row>
95   - {data?.length <= 0 ? (
96   - <Empty image={Empty.PRESENTED_IMAGE_SIMPLE} />
97   - ) : (
98   - ''
99   - )}
  102 + </Col>
  103 + );
  104 + })}
  105 + </Row>
  106 + {data?.length <= 0 ? (
  107 + <Empty image={Empty.PRESENTED_IMAGE_SIMPLE} />
  108 + ) : (
  109 + ''
  110 + )}
  111 + </Spin>
100 112 </Modal>
101 113 </>
102 114 );
... ...
src/pages/Order/components/OrderDrawer.tsx
... ... @@ -508,6 +508,12 @@ export default ({ onClose, data, subOrders, orderOptType }) =&gt; {
508 508 label="备注"
509 509 // disabled={mainInfoDisbled}
510 510 placeholder="请输入备注"
  511 + rules={[
  512 + {
  513 + max: 120, // 最大长度为120个字符
  514 + message: '备注不能超过120个字符',
  515 + },
  516 + ]}
511 517 />
512 518  
513 519 <h2>商品信息</h2>
... ... @@ -730,6 +736,12 @@ export default ({ onClose, data, subOrders, orderOptType }) =&gt; {
730 736 name="notes"
731 737 label="备注"
732 738 placeholder="请输入备注"
  739 + rules={[
  740 + {
  741 + max: 120, // 最大长度为120个字符
  742 + message: '备注不能超过120个字符',
  743 + },
  744 + ]}
733 745 />,
734 746 <>
735 747 <ProFormUploadDragger
... ...
src/pages/Order/constant.ts
... ... @@ -27,6 +27,7 @@ export const INVOCING_STATUS_OPTIONS = {
27 27 UN_INVOICE: '不需开票',
28 28 SPECIALLY_INVOICED: '专票',
29 29 COMMON_INVOICED: '普票',
  30 + INVOICED: '需要开票',
30 31 };
31 32  
32 33 export const INVOCING_STATUS = {
... ... @@ -86,6 +87,8 @@ export const ORDER_STATUS_OPTIONS = {
86 87 export const TAGS_COLOR = new Map<string, string>([
87 88 ['UN_INVOICE', 'success'],
88 89 ['INVOICED', 'processing'],
  90 + ['SPECIALLY_INVOICED', 'processing'],
  91 + ['COMMON_INVOICED', 'processing'],
89 92 ['AFTER_INVOICED', 'success'],
90 93 ['UNAUDITED', 'warning'],
91 94 ['AUDITED', 'processing'],
... ... @@ -148,6 +151,7 @@ export const HISTORY_OPT_TYPE = new Map&lt;string, string&gt;([
148 151 ['PRINT_ORDER', '打印'],
149 152 ['INVOICING', '财务开票'],
150 153 ['EDIT_ORDER', '财务编辑'],
  154 + ['MODIFY_SEN_INFORMATION', '发货信息编辑'],
151 155 ]);
152 156  
153 157 export const MAIN_ORDER_COLUMNS = [
... ...
src/pages/Order/index.tsx
... ... @@ -30,6 +30,7 @@ import {
30 30 MenuProps,
31 31 Space,
32 32 Tag,
  33 + Tooltip,
33 34 message,
34 35 } from 'antd';
35 36 import { cloneDeep } from 'lodash';
... ... @@ -47,6 +48,7 @@ import OrderDrawer from &#39;./components/OrderDrawer&#39;;
47 48 import OrderNotesEditModal from './components/OrderNotesEditModal';
48 49 import SubOrderComfirmReceiptImagesModal from './components/SubOrderComfirmReceiptImagesModal';
49 50 import {
  51 + LOGISTICS_STATUS_OPTIONS,
50 52 MAIN_ORDER_COLUMNS,
51 53 ORDER_STATUS_OPTIONS,
52 54 PAYMENT_CHANNEL_OPTIONS,
... ... @@ -198,12 +200,18 @@ const OrderPage = () =&gt; {
198 200 <Flex className="w-full border-b-indigo-500">
199 201 <Flex vertical className="w-[31%]" gap="small">
200 202 {/* 商品名称 */}
201   - <div className="whitespace-no-wrap overflow-hidden overflow-ellipsis">
  203 + <div
  204 + className="whitespace-no-wrap overflow-hidden overflow-ellipsis"
  205 + title={optRecord.productName}
  206 + >
202 207 <span className="text-black font-medium ">
203 208 {optRecord.productName}
204 209 </span>
205 210 </div>
206   - <div className="whitespace-no-wrap overflow-hidden overflow-ellipsis">
  211 + <div
  212 + className="whitespace-no-wrap overflow-hidden overflow-ellipsis"
  213 + title={optRecord.parameters}
  214 + >
207 215 <span className="text-[#8C8C8C]">参数:{optRecord.parameters}</span>
208 216 </div>
209 217 <Flex title={optRecord.notes}>
... ... @@ -224,15 +232,24 @@ const OrderPage = () =&gt; {
224 232 </Flex>
225 233 </Flex>
226 234 <Flex className="w-[16%]" vertical gap="small">
227   - <div className="whitespace-no-wrap overflow-hidden overflow-ellipsis">
  235 + <div
  236 + className="whitespace-no-wrap overflow-hidden overflow-ellipsis"
  237 + title={optRecord.productPrice}
  238 + >
228 239 <span className="text-[#8C8C8C]">单价:</span>
229 240 <span className="text-slate-700">¥{optRecord.productPrice}</span>
230 241 </div>
231   - <div className="whitespace-no-wrap overflow-hidden overflow-ellipsis">
  242 + <div
  243 + className="whitespace-no-wrap overflow-hidden overflow-ellipsis"
  244 + title={optRecord.quantity}
  245 + >
232 246 <span className="text-[#8C8C8C]">数量:</span>
233 247 <span className="text-slate-700">x{optRecord.quantity}</span>
234 248 </div>
235   - <div className="whitespace-no-wrap overflow-hidden overflow-ellipsis">
  249 + <div
  250 + className="whitespace-no-wrap overflow-hidden overflow-ellipsis"
  251 + title={optRecord.subOrderPayment}
  252 + >
236 253 <span className="text-[#8C8C8C]">合计:</span>
237 254 <span className="text-slate-700">
238 255 ¥{optRecord.subOrderPayment}
... ... @@ -261,7 +278,13 @@ const OrderPage = () =&gt; {
261 278 </Flex>
262 279 <Flex className="w-[15%]" vertical gap="small">
263 280 {/* 所属部门 */}
264   - <div className="whitespace-no-wrap overflow-hidden overflow-ellipsis">
  281 + <div
  282 + className="whitespace-no-wrap overflow-hidden overflow-ellipsis"
  283 + title={enumValueToLabel(
  284 + optRecord.productBelongBusiness,
  285 + PRODUCT_BELONG_DEPARTMENT_OPTIONS,
  286 + )}
  287 + >
265 288 <span className="text-slate-700">
266 289 {enumValueToLabel(
267 290 optRecord.productBelongBusiness,
... ... @@ -300,9 +323,31 @@ const OrderPage = () =&gt; {
300 323  
301 324 {/* 物流信息 */}
302 325 <div className="whitespace-no-wrap overflow-hidden overflow-ellipsis">
303   - <Button type="link" size="small" className="px-0">
304   - 物流信息
305   - </Button>
  326 + {optRecord.orderStatus === 'CONFIRM_RECEIPT' ||
  327 + optRecord.orderStatus === 'SHIPPED' ? (
  328 + <Tooltip
  329 + color="#FFFFFF"
  330 + placement="bottom"
  331 + title={
  332 + <div className="text-black px-5 py-4">
  333 + {optRecord.serialNumber === undefined
  334 + ? '暂无物流信息'
  335 + : enumValueToLabel(
  336 + optRecord.logisticsMethod,
  337 + LOGISTICS_STATUS_OPTIONS,
  338 + ) +
  339 + ' ' +
  340 + optRecord.serialNumber}
  341 + </div>
  342 + }
  343 + >
  344 + <Button type="link" size="small" style={{ padding: 0 }}>
  345 + 物流信息
  346 + </Button>
  347 + </Tooltip>
  348 + ) : (
  349 + ''
  350 + )}
306 351 </div>
307 352 </Flex>
308 353 <Flex className="w-[18%]" wrap="wrap" gap="small">
... ... @@ -339,26 +384,6 @@ const OrderPage = () =&gt; {
339 384 ''
340 385 )}
341 386  
342   - {optRecord.subPath.includes('orderCancel') ? (
343   - <ButtonConfirm
344   - className="p-0"
345   - title="确认作废?"
346   - text="作废"
347   - onConfirm={async () => {
348   - let body = { ids: [optRecord.id], checkIsMainOrderId: false };
349   - const data = await postServiceOrderOrderCancel({
350   - data: body,
351   - });
352   - if (data.result === RESPONSE_CODE.SUCCESS) {
353   - message.success(data.message);
354   - refreshTable();
355   - }
356   - }}
357   - />
358   - ) : (
359   - ''
360   - )}
361   -
362 387 {optRecord.subPath.includes('modifySendInformation') ? (
363 388 <Button
364 389 className="p-0"
... ... @@ -484,6 +509,26 @@ const OrderPage = () =&gt; {
484 509 ) : (
485 510 ''
486 511 )}
  512 +
  513 + {optRecord.subPath.includes('orderCancel') ? (
  514 + <ButtonConfirm
  515 + className="p-0"
  516 + title="确认作废?"
  517 + text="作废"
  518 + onConfirm={async () => {
  519 + let body = { ids: [optRecord.id], checkIsMainOrderId: false };
  520 + const data = await postServiceOrderOrderCancel({
  521 + data: body,
  522 + });
  523 + if (data.result === RESPONSE_CODE.SUCCESS) {
  524 + message.success(data.message);
  525 + refreshTable();
  526 + }
  527 + }}
  528 + />
  529 + ) : (
  530 + ''
  531 + )}
487 532 </Flex>
488 533 </Flex>
489 534 );
... ... @@ -854,7 +899,7 @@ const OrderPage = () =&gt; {
854 899 </Flex>
855 900 </Flex>
856 901  
857   - <Flex className="p-0 py-[24px] pl-[23px] pr-[5px] bg-white rounded-b-lg">
  902 + <Flex className="p-0 pb-[24px] pt-[4px] pl-[23px] pr-[5px] bg-white rounded-b-lg">
858 903 {expandedRowRender(record)}
859 904 </Flex>
860 905 </Flex>
... ... @@ -1134,6 +1179,9 @@ const OrderPage = () =&gt; {
1134 1179 <DeliverModal
1135 1180 data={selectedRows}
1136 1181 isSendProduct={isSendProduct}
  1182 + setVisible={(b: boolean) => {
  1183 + setDeliverVisible(b);
  1184 + }}
1137 1185 onClose={() => {
1138 1186 setDeliverVisible(false);
1139 1187 setOrderRow({});
... ... @@ -1161,6 +1209,9 @@ const OrderPage = () =&gt; {
1161 1209 mainOrder={orderRow}
1162 1210 subOrders={selectedRows}
1163 1211 isRePrint={isRePrintOrder}
  1212 + setVisible={(b: boolean) => {
  1213 + setOrderPrintVisible(b);
  1214 + }}
1164 1215 onClose={() => {
1165 1216 setOrderPrintVisible(false);
1166 1217 setOrderRow({});
... ...
src/pages/OrderPrint/OrderPrintModal.tsx
... ... @@ -10,7 +10,7 @@ import DalangPrinter from &#39;./components/DalangPrinter&#39;;
10 10 import HoujiePrinter from './components/HoujiePrinter';
11 11 import ZhuguangPrinter from './components/ZhuguangPrinter';
12 12  
13   -export default ({ mainOrder, subOrders, isRePrint, onClose }) => {
  13 +export default ({ mainOrder, subOrders, isRePrint, setVisible, onClose }) => {
14 14 const [printerType, setPrinterType] = useState('Houjie');
15 15 const { confirm } = Modal;
16 16 const handleChange = (value: string) => {
... ... @@ -67,7 +67,7 @@ export default ({ mainOrder, subOrders, isRePrint, onClose }) =&gt; {
67 67  
68 68 // onClose();
69 69 }}
70   - onCancel={() => onClose()}
  70 + onCancel={() => setVisible(false)}
71 71 width={1000}
72 72 >
73 73 <Space direction="vertical" className="py-2">
... ...