Commit 8b12357b9fbd82fa27415aacb9fe556e23aec999
1 parent
eee7cccd
feat(order): 添加订单交期提醒功能
- 新增订单交期提醒弹窗,展示待交期提醒和交期提醒数量 - 实现订单交期统计接口调用和数据展示 - 优化模态框样式,调整卡片布局和样式
Showing
5 changed files
with
233 additions
and
30 deletions
src/models/count.ts
... | ... | @@ -3,9 +3,12 @@ import { useState } from 'react'; |
3 | 3 | |
4 | 4 | const useOpenModal = () => { |
5 | 5 | const [openCount, setOpenCount] = useState(0); |
6 | + const [deliveryOpenCount, setDeliveryOpenCount] = useState(0); | |
6 | 7 | return { |
7 | 8 | openCount, |
8 | 9 | setOpenCount, |
10 | + deliveryOpenCount, | |
11 | + setDeliveryOpenCount, | |
9 | 12 | }; |
10 | 13 | }; |
11 | 14 | ... | ... |
src/pages/Order/Order/index.tsx
1 | -import { postServiceOrderWarningOrderStatistics } from '@/services'; | |
1 | +import { | |
2 | + postServiceOrderDeliverStatistics, | |
3 | + postServiceOrderWarningOrderStatistics, | |
4 | +} from '@/services'; | |
2 | 5 | import { getUserInfo } from '@/utils/user'; |
3 | 6 | import { useModel } from '@umijs/max'; |
4 | 7 | import { Button, Card, Col, Modal, Row } from 'antd'; |
... | ... | @@ -35,8 +38,12 @@ const OrderPage = () => { |
35 | 38 | const [waitFeedback, setWaitFeedback] = useState(0); |
36 | 39 | const [invoiceCreateWarningNum, setInvoiceCreateWarningNum] = useState(0); |
37 | 40 | const [open, setOpen] = useState(false); |
38 | - const { openCount, setOpenCount } = useModel('count'); | |
41 | + const { openCount, setOpenCount, deliveryOpenCount, setDeliveryOpenCount } = | |
42 | + useModel('count'); | |
39 | 43 | |
44 | + const [pendingDelivery, setPendingDelivery] = useState(0); | |
45 | + const [pendingCompletion, setPendingCompletion] = useState(0); | |
46 | + const [deliveryOpen, setDeliveryOpen] = useState(false); | |
40 | 47 | async function getInvoiceWarningNum() { |
41 | 48 | const res = await postServiceOrderWarningOrderStatistics({ |
42 | 49 | data: { |
... | ... | @@ -66,13 +73,28 @@ const OrderPage = () => { |
66 | 73 | setInvoiceCreateWarningNum(res.data.waitInvoicing); |
67 | 74 | } |
68 | 75 | |
76 | + async function getOrderDeliverStatistics() { | |
77 | + const res = await postServiceOrderDeliverStatistics(); | |
78 | + if ( | |
79 | + (res.data.pendingDelivery !== 0 || res.data.pendingCompletion !== 0) && | |
80 | + deliveryOpenCount !== 'true' | |
81 | + ) { | |
82 | + setDeliveryOpenCount('true'); | |
83 | + setDeliveryOpen(true); | |
84 | + } | |
85 | + setPendingCompletion(res.data.pendingCompletion); | |
86 | + setPendingDelivery(res.data.pendingDelivery); | |
87 | + } | |
88 | + | |
69 | 89 | useEffect(() => { |
70 | 90 | //预警订单数 |
71 | 91 | getInvoiceWarningNum(); |
92 | + getOrderDeliverStatistics(); | |
72 | 93 | }, []); |
73 | 94 | // 隐藏弹窗 |
74 | 95 | const navigateToWarning = () => { |
75 | 96 | setOpen(false); |
97 | + setDeliveryOpen(false); | |
76 | 98 | // history.push('/order/OrderWarning'); |
77 | 99 | // window.location.replace = '/order/OrderWarning'; |
78 | 100 | // navigate('/order/OrderWarning'); |
... | ... | @@ -421,6 +443,126 @@ const OrderPage = () => { |
421 | 443 | </div> |
422 | 444 | </Modal> |
423 | 445 | )} |
446 | + {roleCode === 'WAREHOUSE_KEEPER' && ( | |
447 | + <Modal | |
448 | + title="订单交期提醒" | |
449 | + open={deliveryOpen} | |
450 | + width={600} | |
451 | + closable={false} | |
452 | + footer={[ | |
453 | + <Button | |
454 | + key="confirm" | |
455 | + size="large" | |
456 | + type="primary" | |
457 | + onClick={navigateToWarning} | |
458 | + > | |
459 | + 去处理 | |
460 | + </Button>, | |
461 | + ]} | |
462 | + > | |
463 | + <Row | |
464 | + gutter={4} // 调整间距,例如改为 8 | |
465 | + justify="space-between" // Aligns Cols to the start and end | |
466 | + align="middle" // Vertically center contents | |
467 | + > | |
468 | + {/* 新增卡片1: 待确认收货订单 */} | |
469 | + <Col span={8}> | |
470 | + {' '} | |
471 | + {/* 修改位置:将 span 改为 6,以保证一行四个卡片 */} | |
472 | + <div | |
473 | + style={{ | |
474 | + display: 'flex', | |
475 | + justifyContent: 'center', | |
476 | + marginTop: '20px', | |
477 | + }} | |
478 | + > | |
479 | + <Card | |
480 | + bordered={true} | |
481 | + style={{ | |
482 | + backgroundColor: '#f0f0f0', // 背景颜色 | |
483 | + width: '250px', // 卡片宽度 | |
484 | + height: '200px', // 卡片高度 | |
485 | + display: 'flex', | |
486 | + alignItems: 'center', | |
487 | + justifyContent: 'center', | |
488 | + }} | |
489 | + > | |
490 | + <div | |
491 | + style={{ | |
492 | + fontWeight: 'bold', // 字体加粗 | |
493 | + color: 'black', // 字体颜色 | |
494 | + fontSize: '18px', // 字体大小 | |
495 | + }} | |
496 | + > | |
497 | + <div | |
498 | + style={{ | |
499 | + fontWeight: 'bold', // 字体加粗 | |
500 | + color: 'black', // 字体颜色 | |
501 | + fontSize: '40px', // 字体大小 | |
502 | + justifyContent: 'center', | |
503 | + display: 'flex', | |
504 | + alignItems: 'center', | |
505 | + marginBottom: '20px', | |
506 | + }} | |
507 | + > | |
508 | + {pendingDelivery} | |
509 | + </div> | |
510 | + 待交期提醒 | |
511 | + </div> | |
512 | + </Card> | |
513 | + </div> | |
514 | + </Col> | |
515 | + | |
516 | + {/* 新增卡片1: 待确认收货订单 */} | |
517 | + <Col span={8}> | |
518 | + {' '} | |
519 | + {/* 修改位置:将 span 改为 6,以保证一行四个卡片 */} | |
520 | + <div | |
521 | + style={{ | |
522 | + display: 'flex', | |
523 | + justifyContent: 'center', | |
524 | + marginTop: '20px', | |
525 | + }} | |
526 | + > | |
527 | + <Card | |
528 | + bordered={true} | |
529 | + style={{ | |
530 | + backgroundColor: '#f0f0f0', // 背景颜色 | |
531 | + width: '250px', // 卡片宽度 | |
532 | + height: '200px', // 卡片高度 | |
533 | + display: 'flex', | |
534 | + alignItems: 'center', | |
535 | + justifyContent: 'center', | |
536 | + }} | |
537 | + > | |
538 | + <div | |
539 | + style={{ | |
540 | + fontWeight: 'bold', // 字体加粗 | |
541 | + color: 'black', // 字体颜色 | |
542 | + fontSize: '18px', // 字体大小 | |
543 | + }} | |
544 | + > | |
545 | + <div | |
546 | + style={{ | |
547 | + fontWeight: 'bold', // 字体加粗 | |
548 | + color: 'black', // 字体颜色 | |
549 | + fontSize: '40px', // 字体大小 | |
550 | + justifyContent: 'center', | |
551 | + display: 'flex', | |
552 | + alignItems: 'center', | |
553 | + marginBottom: '20px', | |
554 | + }} | |
555 | + > | |
556 | + {pendingCompletion} | |
557 | + </div> | |
558 | + 交期提醒 | |
559 | + </div> | |
560 | + </Card> | |
561 | + </div> | |
562 | + </Col> | |
563 | + </Row> | |
564 | + </Modal> | |
565 | + )} | |
424 | 566 | |
425 | 567 | <OrderList paramsNew={{}} searchShow={true} toolbarShow={true} /> |
426 | 568 | </div> | ... | ... |
src/pages/ResearchGroup/index.tsx
... | ... | @@ -677,7 +677,7 @@ const PrepaidPage = () => { |
677 | 677 | key="button" |
678 | 678 | icon={<PlusOutlined />} |
679 | 679 | onClick={() => { |
680 | - setRequestType(null); | |
680 | + setRequestType('ADD_MEMBER'); | |
681 | 681 | setResearchGroupMemberRequestAddModalVisible(true); |
682 | 682 | }} |
683 | 683 | type="primary" | ... | ... |
src/services/definition.ts
... | ... | @@ -1516,6 +1516,32 @@ export interface Entry { |
1516 | 1516 | unEmpInsuranceC?: string; |
1517 | 1517 | } |
1518 | 1518 | |
1519 | +export interface File { | |
1520 | + absolute?: boolean; | |
1521 | + absoluteFile?: File; | |
1522 | + absolutePath?: string; | |
1523 | + canonicalFile?: File; | |
1524 | + canonicalPath?: string; | |
1525 | + directory?: boolean; | |
1526 | + executable?: boolean; | |
1527 | + file?: boolean; | |
1528 | + /** @format int64 */ | |
1529 | + freeSpace?: number; | |
1530 | + hidden?: boolean; | |
1531 | + /** @format int64 */ | |
1532 | + lastModified?: number; | |
1533 | + name?: string; | |
1534 | + parent?: string; | |
1535 | + parentFile?: File; | |
1536 | + path?: string; | |
1537 | + readable?: boolean; | |
1538 | + /** @format int64 */ | |
1539 | + totalSpace?: number; | |
1540 | + /** @format int64 */ | |
1541 | + usableSpace?: number; | |
1542 | + writable?: boolean; | |
1543 | +} | |
1544 | + | |
1519 | 1545 | export interface FilePathDto { |
1520 | 1546 | url?: string; |
1521 | 1547 | } |
... | ... | @@ -4030,7 +4056,7 @@ export interface ResetPwdVO { |
4030 | 4056 | |
4031 | 4057 | export interface Resource { |
4032 | 4058 | description?: string; |
4033 | - file?: TsgFile; | |
4059 | + file?: File; | |
4034 | 4060 | filename?: string; |
4035 | 4061 | inputStream?: InputStream; |
4036 | 4062 | open?: boolean; |
... | ... | @@ -4076,6 +4102,8 @@ export interface SubOrder { |
4076 | 4102 | applyTime?: string; |
4077 | 4103 | /** @format int32 */ |
4078 | 4104 | attrId?: number; |
4105 | + /** @format date-time */ | |
4106 | + auditedDatetime?: string; | |
4079 | 4107 | checkNotes?: string; |
4080 | 4108 | /** @format date-time */ |
4081 | 4109 | collectMoneyTime?: string; |
... | ... | @@ -4088,6 +4116,8 @@ export interface SubOrder { |
4088 | 4116 | createTime?: string; |
4089 | 4117 | /** @format date-time */ |
4090 | 4118 | deadline?: string; |
4119 | + /** @format int64 */ | |
4120 | + deductedPayment?: number; | |
4091 | 4121 | /** @format date-time */ |
4092 | 4122 | deliveryDatetime?: string; |
4093 | 4123 | deliveryStatus?: SubOrderDeliveryStatus; |
... | ... | @@ -4730,32 +4760,6 @@ export interface CompanyInfo { |
4730 | 4760 | taxIdIsNotNull?: boolean; |
4731 | 4761 | } |
4732 | 4762 | |
4733 | -export interface TsgFile { | |
4734 | - absolute?: boolean; | |
4735 | - absoluteFile?: TsgFile; | |
4736 | - absolutePath?: string; | |
4737 | - canonicalFile?: TsgFile; | |
4738 | - canonicalPath?: string; | |
4739 | - directory?: boolean; | |
4740 | - executable?: boolean; | |
4741 | - file?: boolean; | |
4742 | - /** @format int64 */ | |
4743 | - freeSpace?: number; | |
4744 | - hidden?: boolean; | |
4745 | - /** @format int64 */ | |
4746 | - lastModified?: number; | |
4747 | - name?: string; | |
4748 | - parent?: string; | |
4749 | - parentFile?: TsgFile; | |
4750 | - path?: string; | |
4751 | - readable?: boolean; | |
4752 | - /** @format int64 */ | |
4753 | - totalSpace?: number; | |
4754 | - /** @format int64 */ | |
4755 | - usableSpace?: number; | |
4756 | - writable?: boolean; | |
4757 | -} | |
4758 | - | |
4759 | 4763 | export interface InvoiceDetail { |
4760 | 4764 | createByName?: string; |
4761 | 4765 | /** @format date-time */ | ... | ... |
src/services/request.ts
... | ... | @@ -20874,6 +20874,60 @@ export const postServiceOrderDeliverOrders = /* #__PURE__ */ (() => { |
20874 | 20874 | return request; |
20875 | 20875 | })(); |
20876 | 20876 | |
20877 | +/** @description response type for postServiceOrderDeliverStatistics */ | |
20878 | +export interface PostServiceOrderDeliverStatisticsResponse { | |
20879 | + /** | |
20880 | + * @description | |
20881 | + * OK | |
20882 | + */ | |
20883 | + 200: ServerResult; | |
20884 | + /** | |
20885 | + * @description | |
20886 | + * Created | |
20887 | + */ | |
20888 | + 201: any; | |
20889 | + /** | |
20890 | + * @description | |
20891 | + * Unauthorized | |
20892 | + */ | |
20893 | + 401: any; | |
20894 | + /** | |
20895 | + * @description | |
20896 | + * Forbidden | |
20897 | + */ | |
20898 | + 403: any; | |
20899 | + /** | |
20900 | + * @description | |
20901 | + * Not Found | |
20902 | + */ | |
20903 | + 404: any; | |
20904 | +} | |
20905 | + | |
20906 | +export type PostServiceOrderDeliverStatisticsResponseSuccess = | |
20907 | + PostServiceOrderDeliverStatisticsResponse[200]; | |
20908 | +/** | |
20909 | + * @description | |
20910 | + * orderDeliverStatistics | |
20911 | + * @tags 内部订单 | |
20912 | + * @produces * | |
20913 | + * @consumes application/json | |
20914 | + */ | |
20915 | +export const postServiceOrderDeliverStatistics = /* #__PURE__ */ (() => { | |
20916 | + const method = 'post'; | |
20917 | + const url = '/service/order/deliverStatistics'; | |
20918 | + function request(): Promise<PostServiceOrderDeliverStatisticsResponseSuccess> { | |
20919 | + return requester(request.url, { | |
20920 | + method: request.method, | |
20921 | + }) as unknown as Promise<PostServiceOrderDeliverStatisticsResponseSuccess>; | |
20922 | + } | |
20923 | + | |
20924 | + /** http method */ | |
20925 | + request.method = method; | |
20926 | + /** request url */ | |
20927 | + request.url = url; | |
20928 | + return request; | |
20929 | +})(); | |
20930 | + | |
20877 | 20931 | /** @description request parameter type for postServiceOrderEditOrder */ |
20878 | 20932 | export interface PostServiceOrderEditOrderOption { |
20879 | 20933 | /** | ... | ... |