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,9 +3,12 @@ import { useState } from 'react'; | ||
3 | 3 | ||
4 | const useOpenModal = () => { | 4 | const useOpenModal = () => { |
5 | const [openCount, setOpenCount] = useState(0); | 5 | const [openCount, setOpenCount] = useState(0); |
6 | + const [deliveryOpenCount, setDeliveryOpenCount] = useState(0); | ||
6 | return { | 7 | return { |
7 | openCount, | 8 | openCount, |
8 | setOpenCount, | 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 | import { getUserInfo } from '@/utils/user'; | 5 | import { getUserInfo } from '@/utils/user'; |
3 | import { useModel } from '@umijs/max'; | 6 | import { useModel } from '@umijs/max'; |
4 | import { Button, Card, Col, Modal, Row } from 'antd'; | 7 | import { Button, Card, Col, Modal, Row } from 'antd'; |
@@ -35,8 +38,12 @@ const OrderPage = () => { | @@ -35,8 +38,12 @@ const OrderPage = () => { | ||
35 | const [waitFeedback, setWaitFeedback] = useState(0); | 38 | const [waitFeedback, setWaitFeedback] = useState(0); |
36 | const [invoiceCreateWarningNum, setInvoiceCreateWarningNum] = useState(0); | 39 | const [invoiceCreateWarningNum, setInvoiceCreateWarningNum] = useState(0); |
37 | const [open, setOpen] = useState(false); | 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 | async function getInvoiceWarningNum() { | 47 | async function getInvoiceWarningNum() { |
41 | const res = await postServiceOrderWarningOrderStatistics({ | 48 | const res = await postServiceOrderWarningOrderStatistics({ |
42 | data: { | 49 | data: { |
@@ -66,13 +73,28 @@ const OrderPage = () => { | @@ -66,13 +73,28 @@ const OrderPage = () => { | ||
66 | setInvoiceCreateWarningNum(res.data.waitInvoicing); | 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 | useEffect(() => { | 89 | useEffect(() => { |
70 | //预警订单数 | 90 | //预警订单数 |
71 | getInvoiceWarningNum(); | 91 | getInvoiceWarningNum(); |
92 | + getOrderDeliverStatistics(); | ||
72 | }, []); | 93 | }, []); |
73 | // 隐藏弹窗 | 94 | // 隐藏弹窗 |
74 | const navigateToWarning = () => { | 95 | const navigateToWarning = () => { |
75 | setOpen(false); | 96 | setOpen(false); |
97 | + setDeliveryOpen(false); | ||
76 | // history.push('/order/OrderWarning'); | 98 | // history.push('/order/OrderWarning'); |
77 | // window.location.replace = '/order/OrderWarning'; | 99 | // window.location.replace = '/order/OrderWarning'; |
78 | // navigate('/order/OrderWarning'); | 100 | // navigate('/order/OrderWarning'); |
@@ -421,6 +443,126 @@ const OrderPage = () => { | @@ -421,6 +443,126 @@ const OrderPage = () => { | ||
421 | </div> | 443 | </div> |
422 | </Modal> | 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 | <OrderList paramsNew={{}} searchShow={true} toolbarShow={true} /> | 567 | <OrderList paramsNew={{}} searchShow={true} toolbarShow={true} /> |
426 | </div> | 568 | </div> |
src/pages/ResearchGroup/index.tsx
@@ -677,7 +677,7 @@ const PrepaidPage = () => { | @@ -677,7 +677,7 @@ const PrepaidPage = () => { | ||
677 | key="button" | 677 | key="button" |
678 | icon={<PlusOutlined />} | 678 | icon={<PlusOutlined />} |
679 | onClick={() => { | 679 | onClick={() => { |
680 | - setRequestType(null); | 680 | + setRequestType('ADD_MEMBER'); |
681 | setResearchGroupMemberRequestAddModalVisible(true); | 681 | setResearchGroupMemberRequestAddModalVisible(true); |
682 | }} | 682 | }} |
683 | type="primary" | 683 | type="primary" |
src/services/definition.ts
@@ -1516,6 +1516,32 @@ export interface Entry { | @@ -1516,6 +1516,32 @@ export interface Entry { | ||
1516 | unEmpInsuranceC?: string; | 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 | export interface FilePathDto { | 1545 | export interface FilePathDto { |
1520 | url?: string; | 1546 | url?: string; |
1521 | } | 1547 | } |
@@ -4030,7 +4056,7 @@ export interface ResetPwdVO { | @@ -4030,7 +4056,7 @@ export interface ResetPwdVO { | ||
4030 | 4056 | ||
4031 | export interface Resource { | 4057 | export interface Resource { |
4032 | description?: string; | 4058 | description?: string; |
4033 | - file?: TsgFile; | 4059 | + file?: File; |
4034 | filename?: string; | 4060 | filename?: string; |
4035 | inputStream?: InputStream; | 4061 | inputStream?: InputStream; |
4036 | open?: boolean; | 4062 | open?: boolean; |
@@ -4076,6 +4102,8 @@ export interface SubOrder { | @@ -4076,6 +4102,8 @@ export interface SubOrder { | ||
4076 | applyTime?: string; | 4102 | applyTime?: string; |
4077 | /** @format int32 */ | 4103 | /** @format int32 */ |
4078 | attrId?: number; | 4104 | attrId?: number; |
4105 | + /** @format date-time */ | ||
4106 | + auditedDatetime?: string; | ||
4079 | checkNotes?: string; | 4107 | checkNotes?: string; |
4080 | /** @format date-time */ | 4108 | /** @format date-time */ |
4081 | collectMoneyTime?: string; | 4109 | collectMoneyTime?: string; |
@@ -4088,6 +4116,8 @@ export interface SubOrder { | @@ -4088,6 +4116,8 @@ export interface SubOrder { | ||
4088 | createTime?: string; | 4116 | createTime?: string; |
4089 | /** @format date-time */ | 4117 | /** @format date-time */ |
4090 | deadline?: string; | 4118 | deadline?: string; |
4119 | + /** @format int64 */ | ||
4120 | + deductedPayment?: number; | ||
4091 | /** @format date-time */ | 4121 | /** @format date-time */ |
4092 | deliveryDatetime?: string; | 4122 | deliveryDatetime?: string; |
4093 | deliveryStatus?: SubOrderDeliveryStatus; | 4123 | deliveryStatus?: SubOrderDeliveryStatus; |
@@ -4730,32 +4760,6 @@ export interface CompanyInfo { | @@ -4730,32 +4760,6 @@ export interface CompanyInfo { | ||
4730 | taxIdIsNotNull?: boolean; | 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 | export interface InvoiceDetail { | 4763 | export interface InvoiceDetail { |
4760 | createByName?: string; | 4764 | createByName?: string; |
4761 | /** @format date-time */ | 4765 | /** @format date-time */ |
src/services/request.ts
@@ -20874,6 +20874,60 @@ export const postServiceOrderDeliverOrders = /* #__PURE__ */ (() => { | @@ -20874,6 +20874,60 @@ export const postServiceOrderDeliverOrders = /* #__PURE__ */ (() => { | ||
20874 | return request; | 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 | /** @description request parameter type for postServiceOrderEditOrder */ | 20931 | /** @description request parameter type for postServiceOrderEditOrder */ |
20878 | export interface PostServiceOrderEditOrderOption { | 20932 | export interface PostServiceOrderEditOrderOption { |
20879 | /** | 20933 | /** |