Commit 8b12357b9fbd82fa27415aacb9fe556e23aec999

Authored by 曾国涛
1 parent eee7cccd

feat(order): 添加订单交期提醒功能

- 新增订单交期提醒弹窗,展示待交期提醒和交期提醒数量
- 实现订单交期统计接口调用和数据展示
- 优化模态框样式,调整卡片布局和样式
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 = () =&gt; {
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__ */ (() =&gt; {
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 /**
... ...