Commit db1ae137a197b3d303ef04505ede510e06463dd8

Authored by PurelzMgnead
1 parent 6376c35a

feat: 分期账单审核功能

.umirc.ts
... ... @@ -113,7 +113,7 @@ export default defineConfig({
113 113 path: '/instalment',
114 114 component: './Instalment',
115 115 icon: 'BookOutlined',
116   - access: 'canReadLinda',
  116 + access: 'canReadProcure',
117 117 },
118 118 {
119 119 name: '区域管理',
... ...
src/access.ts
1 1 export default (initialState: API.UserInfo) => {
2 2 // 在这里按照初始化数据定义项目中的权限,统一管理
3 3 // 参考文档 https://umijs.org/docs/max/access
4   - const { roleSmallVO, username } = initialState;
  4 + const { roleSmallVO, username, roles } = initialState;
  5 +
5 6 const canReadAdmin = roleSmallVO?.code === 'admin';
6   - const canReadProcure = roleSmallVO?.code === 'procure';
  7 + const canReadProcure =
  8 + roleSmallVO?.code === 'procure' || roles.includes('PROCURE_MANAGER');
7 9 const canReadFinance = roleSmallVO?.code === 'finance';
8 10 const canReadWarehouseKeeper = roleSmallVO?.code === 'warehouseKeeper';
9 11 const canReadSales =
... ...
src/pages/Instalment/components/checkModal/checkModal.tsx 0 → 100644
  1 +import { postOrderErpOrderStagesCheckOrderStages } from '@/services';
  2 +import { ModalForm, ProFormTextArea } from '@ant-design/pro-components';
  3 +import { Button, Form, Space, message } from 'antd';
  4 +
  5 +const waitTime = (time: number = 100) => {
  6 + return new Promise((resolve) => {
  7 + setTimeout(() => {
  8 + resolve(true);
  9 + }, time);
  10 + });
  11 +};
  12 +
  13 +export default ({ id, toReload }) => {
  14 + const [form] = Form.useForm<{ mark: string }>();
  15 +
  16 + return (
  17 + <Space>
  18 + <ModalForm<{
  19 + mark: string;
  20 + }>
  21 + title="账单审核"
  22 + width={460}
  23 + form={form}
  24 + trigger={<a>审核</a>}
  25 + modalProps={{
  26 + okText: '通过',
  27 + cancelText: '驳回',
  28 + destroyOnClose: true,
  29 + }}
  30 + submitter={{
  31 + render: (props, defaultDoms) => {
  32 + let myDoms = [];
  33 + myDoms.push(
  34 + <Button
  35 + key="驳回"
  36 + onClick={async () => {
  37 + const res = await postOrderErpOrderStagesCheckOrderStages({
  38 + data: {
  39 + id: id,
  40 + isPass: false,
  41 + mark: form.getFieldValue('mark'),
  42 + },
  43 + });
  44 + await waitTime(2000);
  45 + if (res.message === '成功') {
  46 + message.success('操作成功');
  47 + }
  48 + toReload();
  49 + return;
  50 + }}
  51 + >
  52 + 驳回
  53 + </Button>,
  54 + );
  55 + myDoms.push(defaultDoms[1]);
  56 + return myDoms;
  57 + },
  58 + }}
  59 + onFinish={async (values) => {
  60 + const res = await postOrderErpOrderStagesCheckOrderStages({
  61 + data: {
  62 + id: id,
  63 + isPass: true,
  64 + mark: values.mark,
  65 + },
  66 + });
  67 + await waitTime(2000);
  68 + if (res.message === '成功') {
  69 + message.success('操作成功');
  70 + }
  71 + toReload();
  72 + return true;
  73 + }}
  74 + >
  75 + <ProFormTextArea
  76 + width="lg"
  77 + name="mark"
  78 + label="备注"
  79 + tooltip="请特别注意订单总金额与订单金额。"
  80 + placeholder="请输入名称"
  81 + />
  82 + </ModalForm>
  83 + </Space>
  84 + );
  85 +};
... ...
src/pages/Instalment/components/edit/edit.tsx
... ... @@ -27,7 +27,7 @@ const waitTime = (time: number = 100) =&gt; {
27 27 });
28 28 };
29 29  
30   -export default ({ currentContract, toReload }) => {
  30 +export default ({ currentContract, toReload, showTarget }) => {
31 31 const [form] = Form.useForm<{ name: string; company: string }>();
32 32 const [contextBody, setContextBody] = useState({});
33 33 const [total, setTotal] = useState(0);
... ... @@ -76,10 +76,10 @@ export default ({ currentContract, toReload }) =&gt; {
76 76 });
77 77 const context = res.data[0];
78 78  
79   - if (context.contract !== null) {
  79 + if (context?.contract !== null) {
80 80 setContextBody(context);
81   - setTotal(context.totalPrice);
82   - form.setFieldValue('totalPrice', context.totalPrice);
  81 + setTotal(context?.totalPrice);
  82 + form.setFieldValue('totalPrice', context?.totalPrice);
83 83 }
84 84 }
85 85  
... ... @@ -95,7 +95,11 @@ export default ({ currentContract, toReload }) =&gt; {
95 95  
96 96 const handleInputChange = (value: string, no: number, priceNow?: number) => {
97 97 let totalPay = 0;
98   - const payValue: string[] = value.split('/');
  98 + let payValue: string[] = [];
  99 + if (value) {
  100 + payValue = value.split('/');
  101 + }
  102 +
99 103 let body:
100 104 | ((prevState: never[]) => never[])
101 105 | { proportion: string; payPrice: number }[] = [];
... ... @@ -141,24 +145,23 @@ export default ({ currentContract, toReload }) =&gt; {
141 145 });
142 146 const context = res.data[0];
143 147 console.log(context);
144   - if (context.contract !== null) {
  148 + if (context?.contract !== null) {
145 149 setContextBody(context);
146   - setTotal(context.totalPrice);
147   - form.setFieldValue('totalPrice', context.totalPrice);
  150 + setTotal(context?.totalPrice);
  151 + form.setFieldValue('totalPrice', context?.totalPrice);
148 152 }
149   - handleInputChange(context.payWay, 0, context.totalPrice);
  153 + handleInputChange(context?.payWay, 0, context?.totalPrice);
150 154 } else {
151 155 const res = await postOrderErpOrderStagesSearch({
152 156 data: { contract: currentContract },
153 157 });
154 158 const context = res.data[0];
155   - console.log(context);
156   - if (context.contract !== null) {
  159 + if (context?.contract !== null) {
157 160 setContextBody(context);
158   - setTotal(context.totalPrice);
159   - form.setFieldValue('totalPrice', context.totalPrice);
  161 + setTotal(context?.totalPrice);
  162 + form.setFieldValue('totalPrice', context?.totalPrice);
160 163 }
161   - handleInputChange(context.payWay, 0, context.totalPrice);
  164 + handleInputChange(context?.payWay, 0, context?.totalPrice);
162 165 }
163 166 }
164 167  
... ... @@ -167,18 +170,17 @@ export default ({ currentContract, toReload }) =&gt; {
167 170 value.map((obj) => (price += obj.count * obj.unitPrice));
168 171 setTotal(price);
169 172 setContextBody({ ...contextBody, orderStagesDeviceVoList: value });
170   - handleInputChange(contextBody.payWay, 0, price);
  173 + handleInputChange(contextBody?.payWay, 0, price);
171 174 }
172 175  
173 176 useEffect(() => {
174   - console.log('1');
175 177 getBody(null);
176 178 }, []);
177 179  
178 180 return (
179 181 <ModalForm<OrderStagesWithListItem>
180   - title="新建"
181   - trigger={<a onClick={refresh}>编辑</a>}
  182 + title="订单编辑"
  183 + trigger={<a onClick={refresh}>{showTarget}</a>}
182 184 form={form}
183 185 autoFocusFirstInput
184 186 modalProps={{
... ... @@ -277,7 +279,7 @@ export default ({ currentContract, toReload }) =&gt; {
277 279 rules={[{ required: true, message: '此项为必填项' }]}
278 280 label="供应商名称"
279 281 placeholder="请输入"
280   - initialValue={contextBody.vendor}
  282 + initialValue={contextBody?.vendor}
281 283 />
282 284  
283 285 <ProFormText
... ... @@ -286,7 +288,7 @@ export default ({ currentContract, toReload }) =&gt; {
286 288 rules={[{ required: true, message: '此项为必填项' }]}
287 289 label="终端名称"
288 290 placeholder="请输入"
289   - initialValue={contextBody.terminal}
  291 + initialValue={contextBody?.terminal}
290 292 />
291 293  
292 294 <ProFormDatePicker
... ... @@ -297,7 +299,7 @@ export default ({ currentContract, toReload }) =&gt; {
297 299 fieldProps={{
298 300 format: (value) => value.format('YYYY-MM-DD'),
299 301 }}
300   - initialValue={contextBody.dateRange}
  302 + initialValue={contextBody?.dateRange}
301 303 />
302 304  
303 305 <ProFormText
... ... @@ -306,7 +308,7 @@ export default ({ currentContract, toReload }) =&gt; {
306 308 rules={[{ required: true, message: '此项为必填项' }]}
307 309 label="付款比例"
308 310 placeholder="请输入"
309   - initialValue={contextBody.payWay}
  311 + initialValue={contextBody?.payWay}
310 312 onBlur={(e) => {
311 313 handleInputChange(e.target.value, 1);
312 314 }}
... ... @@ -318,7 +320,7 @@ export default ({ currentContract, toReload }) =&gt; {
318 320 rules={[{ required: true, message: '此项为必填项' }]}
319 321 label="合同编号"
320 322 placeholder="请输入"
321   - initialValue={contextBody.contract}
  323 + initialValue={contextBody?.contract}
322 324 />
323 325  
324 326 <ProFormUploadButton
... ... @@ -334,7 +336,7 @@ export default ({ currentContract, toReload }) =&gt; {
334 336 label="合同金额"
335 337 placeholder="请输入"
336 338 disabled
337   - initialValue={contextBody.totalPrice}
  339 + initialValue={contextBody?.totalPrice}
338 340 />
339 341 </ProForm.Group>
340 342 </ProCard>
... ... @@ -350,7 +352,7 @@ export default ({ currentContract, toReload }) =&gt; {
350 352 bordered
351 353 >
352 354 <ProductDetail
353   - productBody={contextBody.orderStagesDeviceVoList}
  355 + productBody={contextBody?.orderStagesDeviceVoList}
354 356 EditProductBody={getEditProductBody}
355 357 ></ProductDetail>
356 358 </ProCard>
... ... @@ -363,7 +365,7 @@ export default ({ currentContract, toReload }) =&gt; {
363 365 >
364 366 <PayWayDetail
365 367 payBody={payWayBody}
366   - thisId={contextBody.id}
  368 + thisId={contextBody?.id}
367 369 currtSave={setSave}
368 370 ></PayWayDetail>
369 371 </ProCard>
... ... @@ -372,7 +374,7 @@ export default ({ currentContract, toReload }) =&gt; {
372 374 <ProFormTextArea
373 375 label="备注"
374 376 name="remark"
375   - initialValue={contextBody.remark}
  377 + initialValue={contextBody?.remark}
376 378 />
377 379 </ProCard>
378 380 </ModalForm>
... ...
src/pages/Instalment/components/productDetail/productDetail.tsx
... ... @@ -28,8 +28,10 @@ export default ({ productBody, EditProductBody }) =&gt; {
28 28 'bottom',
29 29 );
30 30 function getDataSourece() {
31   - if (productBody.length !== 0) {
32   - setDataSource(productBody);
  31 + if (productBody?.length) {
  32 + if (productBody?.length !== 0) {
  33 + setDataSource(productBody);
  34 + }
33 35 }
34 36 }
35 37 function setEditProductBody(value) {
... ...
src/pages/Instalment/components/read/read.tsx
... ... @@ -168,7 +168,7 @@ export default ({ currentContract }) =&gt; {
168 168  
169 169 return (
170 170 <ModalForm<OrderStagesWithListItem>
171   - title="新建"
  171 + title="查看"
172 172 trigger={<a onClick={refresh}>查看</a>}
173 173 form={form}
174 174 autoFocusFirstInput
... ... @@ -176,6 +176,14 @@ export default ({ currentContract }) =&gt; {
176 176 destroyOnClose: true,
177 177 // onCancel: () => console.log('run'),
178 178 }}
  179 + submitter={{
  180 + resetButtonProps: {},
  181 + submitButtonProps: {
  182 + style: {
  183 + display: 'none',
  184 + },
  185 + },
  186 + }}
179 187 submitTimeout={2000}
180 188 onFinish={async (values) => {
181 189 // console.log(values);
... ...
src/pages/Instalment/components/read/readPayWay.tsx
... ... @@ -89,18 +89,20 @@ export default ({ payBody, thisId, currtSave }) =&gt; {
89 89 const context = res.data;
90 90 const remake = arr.map((obj) => {
91 91 let currt = obj;
92   - context.forEach((object) => {
93   - if (object.number === obj.id) {
94   - currt = {
95   - ...obj,
96   - ossId: value,
97   - payDate: object.dateRange,
98   - fileName: object.fileName,
99   - fileUrl: object.fileUrl,
100   - };
101   - return currt;
102   - }
103   - });
  92 + if (Array.isArray(context)) {
  93 + context.forEach((object) => {
  94 + if (object.number === obj.id) {
  95 + currt = {
  96 + ...obj,
  97 + ossId: value,
  98 + payDate: object.dateRange,
  99 + fileName: object.fileName,
  100 + fileUrl: object.fileUrl,
  101 + };
  102 + return currt;
  103 + }
  104 + });
  105 + }
104 106 return currt;
105 107 });
106 108 setPayWayDetailBody(remake);
... ...
src/pages/Instalment/components/title/titletest.tsx
1   -// import type { ProColumns } from '@ant-design/pro-components';
2   -// import {
3   -// EditableProTable,
4   -// ProCard,
5   -// ProFormField,
6   -// ProFormRadio,
7   -// useRefFunction,
8   -// } from '@ant-design/pro-components';
9   -// import {
10   -// deleteOrderErpOrderStagesDelect,
11   -// getOrderErpOrderStagesListAll,
12   -// postOrderErpOrderStagesSearch,
13   -// } from '@/services';
14   -// import { orderExport } from '@/services/order';
15   -// import { VerticalAlignTopOutlined } from '@ant-design/icons';
16   -// import { ProTable } from '@ant-design/pro-components';
17   -// import { Button, message } from 'antd';
18   -// import { useRef } from 'react';
19   -// import Comfire from '../comfire/comfire';
20   -// import AddModel from '../detail/detail';
21   -// import EditorModel from '../edit/edit';
22   -// import ReadModel from '../read/read';
23   -// import UploadModel from '../upload/uploadModel';
24   -// import './title.less';
25   -// import React, { useState } from 'react';
  1 +import {
  2 + deleteOrderErpOrderStagesDelect,
  3 + getOrderErpOrderStagesListAll,
  4 + postOrderErpOrderStagesSearch,
  5 +} from '@/services';
  6 +import { orderExport } from '@/services/order';
  7 +import { VerticalAlignTopOutlined } from '@ant-design/icons';
  8 +import type { ProColumns } from '@ant-design/pro-components';
  9 +import { EditableProTable } from '@ant-design/pro-components';
  10 +import { Button, Tag, message } from 'antd';
  11 +import { useRef } from 'react';
  12 +import CheckModal from '../checkModal/checkModal';
  13 +import Comfire from '../comfire/comfire';
  14 +import AddModel from '../detail/detail';
  15 +import EditorModel from '../edit/edit';
  16 +import ReadModel from '../read/read';
  17 +import UploadModel from '../upload/uploadModel';
  18 +import './title.less';
26 19  
27   -// export const waitTimePromise = async (time: number = 100) => {
28   -// return new Promise((resolve) => {
29   -// setTimeout(() => {
30   -// resolve(true);
31   -// }, time);
32   -// });
33   -// };
34   -
35   -// export const waitTime = async (time: number = 100) => {
36   -// await waitTimePromise(time);
37   -// };
38   -
39   -// type OrderStagesItem = {
40   -// //文件编号
41   -// id?: number;
42   -// //合同编号
43   -// contract?: string;
44   -// //供应商名称
45   -// vendor?: string;
46   -// //签合同日期
47   -// dateRange?: Date;
48   -// //终端名称
49   -// terminal?: string;
50   -// //设备编号
51   -// dId?: number;
52   -// //设备名称
53   -// deviceName?: string;
54   -// //设备型号
55   -// deviceModel?: string;
56   -// //数量
57   -// count?: number;
58   -// //单价
59   -// unitPrice?: number;
60   -// //总价
61   -// price?: number;
62   -// //合同总金额
63   -// totalPrice?: number;
64   -// //付款方式
65   -// payWay?: string;
66   -// //附件
67   -// annex?: string;
68   -// //备注
69   -// remark?: string;
70   -// //可选操作
71   -// opt?: string[];
72   -// //子类
73   -// children?:OrderStagesItem[]
74   -// };
  20 +export const waitTimePromise = async (time: number = 100) => {
  21 + return new Promise((resolve) => {
  22 + setTimeout(() => {
  23 + resolve(true);
  24 + }, time);
  25 + });
  26 +};
75 27  
76   -// type OrderStagesWithListItem = {
77   -// //文件编号
78   -// id: number;
79   -// //合同编号
80   -// contract: string;
81   -// //供应商名称
82   -// vendor: string;
83   -// //签合同日期
84   -// dateRange: Date;
85   -// //终端名称
86   -// terminal: string;
87   -// orderStagesDeviceVoList: orderStagesDevice[];
88   -// //合同总金额
89   -// totalPrice: number;
90   -// //付款方式
91   -// payWay: string;
92   -// //附件
93   -// annex: string;
94   -// //备注
95   -// remark: string;
96   -// //可选操作
97   -// paths:string[];
98   -// };
  28 +export const waitTime = async (time: number = 100) => {
  29 + await waitTimePromise(time);
  30 +};
99 31  
100   -// type orderStagesDevice = {
101   -// //设备id
102   -// dId: number;
103   -// //设备名称
104   -// deviceName: string;
105   -// //设备型号
106   -// deviceModel: string;
107   -// //数量
108   -// count: number;
109   -// //单价
110   -// unitPrice: number;
111   -// //总价
112   -// price: number;
113   -// };
  32 +type OrderStagesItem = {
  33 + //文件编号
  34 + id?: number;
  35 + //合同编号
  36 + contract?: string;
  37 + //供应商名称
  38 + vendor?: string;
  39 + //签合同日期
  40 + dateRange?: Date;
  41 + //终端名称
  42 + terminal?: string;
  43 + //设备编号
  44 + dId?: number;
  45 + //设备名称
  46 + deviceName?: string;
  47 + //设备型号
  48 + deviceModel?: string;
  49 + //数量
  50 + count?: number;
  51 + //单价
  52 + unitPrice?: number;
  53 + //总价
  54 + price?: number;
  55 + //合同总金额
  56 + totalPrice?: number;
  57 + //付款方式
  58 + payWay?: string;
  59 + //附件
  60 + annex?: string;
  61 + //备注
  62 + remark?: string;
  63 + //可选操作
  64 + opt?: string[];
  65 + //账单状态
  66 + status?: string;
  67 + //审核备注
  68 + statusMark?: string;
  69 + //子类
  70 + children?: OrderStagesItem[];
  71 +};
114 72  
115   -// const filterOrderStages = (
116   -// data: readonly OrderStagesWithListItem[],
117   -// id: number | undefined,
118   -// ): OrderStagesWithListItem[] => {
119   -// return data.reduce<OrderStagesWithListItem[]>((accumulator, item) => {
120   -// // If the current item's id does not match the given id
121   -// if (item.id !== id) {
122   -// // If the item has a device list, we can also filter it if needed
123   -// const filteredDevices = item.orderStagesDeviceVoList.filter(device => device.dId !== id);
  73 +type OrderStagesWithListItem = {
  74 + //文件编号
  75 + id: number;
  76 + //合同编号
  77 + contract: string;
  78 + //供应商名称
  79 + vendor: string;
  80 + //签合同日期
  81 + dateRange: Date;
  82 + //终端名称
  83 + terminal: string;
  84 + orderStagesDeviceVoList: orderStagesDevice[];
  85 + //合同总金额
  86 + totalPrice: number;
  87 + //付款方式
  88 + payWay: string;
  89 + //附件
  90 + annex: string;
  91 + //备注
  92 + remark: string;
  93 + //可选操作
  94 + paths: string[];
  95 + //账单状态
  96 + status?: string;
  97 + //审核备注
  98 + statusMark?: string;
  99 +};
124 100  
125   -// // Create a new item without the filtered devices
126   -// const newItem: OrderStagesWithListItem = {
127   -// ...item,
128   -// orderStagesDeviceVoList: filteredDevices,
129   -// };
  101 +type orderStagesDevice = {
  102 + //设备id
  103 + dId: number;
  104 + //设备名称
  105 + deviceName: string;
  106 + //设备型号
  107 + deviceModel: string;
  108 + //数量
  109 + count: number;
  110 + //单价
  111 + unitPrice: number;
  112 + //总价
  113 + price: number;
  114 +};
130 115  
131   -// // Add the new item to the accumulator
132   -// accumulator.push(newItem);
133   -// }
134   -// return accumulator;
135   -// }, []);
  116 +// const loopOrderStagesFilter = (
  117 +// data: readonly OrderStagesItem[],
  118 +// dId: React.Key | undefined,
  119 +// ): OrderStagesItem[] => {
  120 +// return data
  121 +// .map((item) => {
  122 +// if (item.dId !== dId) {
  123 +// if (item.children) {
  124 +// if (item.children.length !== 0) {
  125 +// const newChildren = loopOrderStagesFilter(item.children, dId);
  126 +// return {
  127 +// ...item,
  128 +// children: newChildren.length > 0 ? newChildren : undefined,
  129 +// };
  130 +// }
  131 +// }
  132 +// return item;
  133 +// }
  134 +// return null;
  135 +// })
  136 +// .filter(Boolean) as OrderStagesItem[];
136 137 // };
137 138  
138   -// export default () => {
139   -// const [editableKeys, setEditableRowKeys] = useState<React.Key[]>([]);
140   -// const [dataSource, setDataSource] = useState<readonly OrderStagesWithListItem[]>(
141   -// []
142   -// );
  139 +export default () => {
  140 + interface ActionType {
  141 + reload: (resetPageIndex?: boolean) => void;
  142 + reloadAndRest: () => void;
  143 + reset: () => void;
  144 + clearSelected?: () => void;
  145 + startEditable: (rowKey: Key) => boolean;
  146 + cancelEditable: (rowKey: Key) => boolean;
  147 + }
143 148  
144   -// interface ActionType {
145   -// reload: (resetPageIndex?: boolean) => void;
146   -// reloadAndRest: () => void;
147   -// reset: () => void;
148   -// clearSelected?: () => void;
149   -// startEditable: (rowKey: Key) => boolean;
150   -// cancelEditable: (rowKey: Key) => boolean;
151   -// }
  149 + const ref = useRef<ActionType>({
  150 + reload: () => {
  151 + // implementation for reload
  152 + },
  153 + reloadAndRest: () => {
  154 + // implementation for reloadAndRest
  155 + },
  156 + reset: () => {
  157 + // implementation for reset
  158 + },
  159 + startEditable: () => {
  160 + // implementation for startEditable
  161 + },
  162 + cancelEditable: () => {
  163 + // implementation for cancelEditable
  164 + },
  165 + });
152 166  
153   -// const ref = useRef<ActionType>({
154   -// reload: () => {
155   -// // implementation for reload
156   -// },
157   -// reloadAndRest: () => {
158   -// // implementation for reloadAndRest
159   -// },
160   -// reset: () => {
161   -// // implementation for reset
162   -// },
163   -// startEditable: () => {
164   -// // implementation for startEditable
165   -// },
166   -// cancelEditable: () => {
167   -// // implementation for cancelEditable
168   -// },
169   -// });
  167 + function reload() {
  168 + ref.current.reload();
  169 + }
170 170  
171   -// function reload() {
172   -// ref.current.reload();
173   -// }
  171 + async function toDelete(value) {
  172 + const res = await deleteOrderErpOrderStagesDelect({
  173 + data: {
  174 + ids: null,
  175 + deviceIds: value,
  176 + },
  177 + });
  178 + if (res) {
  179 + message.success('删除成功');
  180 + ref.current.reload();
  181 + } else {
  182 + message.error('删除失败');
  183 + }
  184 + }
174 185  
175   -// async function toDelete(value) {
176   -// const res = await deleteOrderErpOrderStagesDelect({
177   -// data: {
178   -// ids: null,
179   -// deviceIds: value,
180   -// },
181   -// });
182   -// if (res) {
183   -// message.success('删除成功');
184   -// ref.current.reload();
185   -// } else {
186   -// message.error('删除失败');
187   -// }
188   -// }
  186 + const exportLoadingDestory = () => {
  187 + message.success('导出成功');
  188 + };
189 189  
190   -// const exportLoadingDestory = () => {
191   -// message.success('导出成功');
192   -// };
  190 + async function toExport() {
  191 + // await getOrderErpOrderStagesExport()
  192 + orderExport(
  193 + '/api/order/erp/orderStages/export',
  194 + '分期订单.xlsx',
  195 + 'get',
  196 + {},
  197 + exportLoadingDestory,
  198 + );
  199 + }
193 200  
194   -// async function toExport() {
195   -// // await getOrderErpOrderStagesExport()
196   -// orderExport(
197   -// '/api/order/erp/orderStages/export',
198   -// '分期订单.xlsx',
199   -// 'get',
200   -// {},
201   -// exportLoadingDestory,
202   -// );
203   -// }
  201 + const columns: ProColumns<OrderStagesItem>[] = [
  202 + {
  203 + title: '文件编号',
  204 + dataIndex: 'id',
  205 + width: 100,
  206 + disable: true,
  207 + onFilter: true,
  208 + ellipsis: true,
  209 + // render: (_, record) => {
  210 + // if (record.id) {
  211 + // const text = record?.id.toString();
  212 + // const paddedText = '0'.repeat(4 - text.length) + text;
  213 + // return paddedText;
  214 + // }
  215 + // },
  216 + },
  217 + {
  218 + title: '签合同日期',
  219 + dataIndex: 'dateRange',
  220 + valueType: 'date',
  221 + width: 100,
  222 + disable: true,
  223 + onFilter: true,
  224 + ellipsis: true,
  225 + },
  226 + {
  227 + title: '合同编号',
  228 + dataIndex: 'contract',
  229 + width: 200,
  230 + disable: true,
  231 + onFilter: true,
  232 + ellipsis: true,
  233 + copyable: true,
  234 + },
  235 + {
  236 + title: '供应商名称',
  237 + dataIndex: 'vendor',
  238 + width: 200,
  239 + disable: true,
  240 + onFilter: true,
  241 + ellipsis: true,
  242 + },
  243 + {
  244 + title: '终端名称',
  245 + dataIndex: 'terminal',
  246 + width: 200,
  247 + disable: true,
  248 + onFilter: true,
  249 + ellipsis: true,
  250 + },
  251 + {
  252 + title: '状态',
  253 + dataIndex: 'status',
  254 + width: 200,
  255 + disable: true,
  256 + onFilter: true,
  257 + ellipsis: true,
  258 + valueType: 'select',
  259 + valueEnum: {
  260 + CHECK: { text: '待审核', status: 'CHECK' },
  261 + PASS: { text: '审核通过', status: 'PASS' },
  262 + NOT_PASS: { text: '审核未通过', status: 'NOT_PASS' },
  263 + },
  264 + render: (_, record) => {
  265 + if (record.status !== null) {
  266 + if (
  267 + record.status === 'UPDATE_CHECK' ||
  268 + record.status === 'SAVE_CHECK' ||
  269 + record.status === 'IMPORT_CHECK'
  270 + ) {
  271 + return <Tag color="blue">待审核</Tag>;
  272 + }
  273 + if (record.status === 'PASS') {
  274 + return <Tag color="green">审核通过</Tag>;
  275 + }
  276 + if (record.status === 'NOT_PASS') {
  277 + return <Tag color="red">审核未通过</Tag>;
  278 + }
  279 + }
  280 + return <Tag color="orange">暂无状态</Tag>;
  281 + },
  282 + },
  283 + {
  284 + title: '设备名称',
  285 + dataIndex: 'deviceName',
  286 + width: 200,
  287 + disable: true,
  288 + onFilter: true,
  289 + ellipsis: true,
  290 + },
  291 + {
  292 + title: '设备型号',
  293 + dataIndex: 'deviceModel',
  294 + hideInSearch: true,
  295 + width: 200,
  296 + disable: true,
  297 + onFilter: true,
  298 + ellipsis: true,
  299 + },
  300 + {
  301 + title: '数量',
  302 + dataIndex: 'count',
  303 + hideInSearch: true,
  304 + width: 100,
  305 + disable: true,
  306 + onFilter: true,
  307 + ellipsis: true,
  308 + },
  309 + {
  310 + title: '单价',
  311 + dataIndex: 'unitPrice',
  312 + hideInSearch: true,
  313 + width: 100,
  314 + disable: true,
  315 + onFilter: true,
  316 + ellipsis: true,
  317 + },
  318 + {
  319 + title: '总价',
  320 + dataIndex: 'price',
  321 + hideInSearch: true,
  322 + width: 100,
  323 + disable: true,
  324 + onFilter: true,
  325 + ellipsis: true,
  326 + },
  327 + {
  328 + title: '合同总金额',
  329 + dataIndex: 'totalPrice',
  330 + hideInSearch: true,
  331 + width: 100,
  332 + disable: true,
  333 + onFilter: true,
  334 + ellipsis: true,
  335 + },
  336 + {
  337 + title: '付款方式',
  338 + dataIndex: 'payWay',
  339 + hideInSearch: true,
  340 + width: 100,
  341 + disable: true,
  342 + onFilter: true,
  343 + ellipsis: true,
  344 + },
  345 + {
  346 + title: '附件',
  347 + dataIndex: 'annex',
  348 + hideInSearch: true,
  349 + width: 100,
  350 + disable: true,
  351 + onFilter: true,
  352 + ellipsis: true,
  353 + render: (_, record) => {
  354 + if (record.id && record.annex !== null) {
  355 + return <a href={record.annex}>附件文件</a>;
  356 + }
  357 + },
  358 + },
  359 + {
  360 + disable: true,
  361 + title: '备注',
  362 + dataIndex: 'remark',
  363 + filters: true,
  364 + hideInSearch: true,
  365 + onFilter: false,
  366 + ellipsis: true,
  367 + width: 100,
  368 + hideInTable: false,
  369 + },
  370 + {
  371 + disable: true,
  372 + title: '审核备注',
  373 + dataIndex: 'statusMark',
  374 + filters: true,
  375 + hideInSearch: true,
  376 + onFilter: false,
  377 + ellipsis: true,
  378 + width: 100,
  379 + hideInTable: false,
  380 + },
  381 + {
  382 + title: '操作',
  383 + valueType: 'option',
  384 + fixed: 'right',
  385 + width: 160,
  386 + disable: true,
  387 + onFilter: true,
  388 + ellipsis: true,
  389 + render: (_text, record) => {
  390 + if (record?.id) {
  391 + const hasOnlyReaderPermission = record?.opt?.includes('ONLYREAD');
  392 + // const hasReaderPermission = record?.opt?.includes("READ");
  393 + const hasDeletePermission = record?.opt?.includes('DELETE');
  394 + const hasCheckPermission = record?.opt?.includes('CHECK');
  395 + const hasEditPermission = record?.opt?.includes('EDIT');
  396 + const hasRePutPermission = record?.opt?.includes('REPUT');
  397 + return (
  398 + <>
  399 + {hasCheckPermission && (
  400 + <>
  401 + <CheckModal id={record.id} toReload={reload}></CheckModal>
  402 + &nbsp;
  403 + </>
  404 + )}
204 405  
205   -// const columns: ProColumns<OrderStagesItem>[] = [
206   -// {
207   -// title: '文件编号',
208   -// dataIndex: 'id',
209   -// width: 100,
210   -// disable: true,
211   -// onFilter: true,
212   -// ellipsis: true,
213   -// // render: (_, record) => {
214   -// // if (record.id) {
215   -// // const text = record?.id.toString();
216   -// // const paddedText = '0'.repeat(4 - text.length) + text;
217   -// // return paddedText;
218   -// // }
219   -// // },
220   -// },
221   -// {
222   -// title: '签合同日期',
223   -// dataIndex: 'dateRange',
224   -// valueType: 'date',
225   -// width: 100,
226   -// disable: true,
227   -// onFilter: true,
228   -// ellipsis: true,
229   -// },
230   -// {
231   -// title: '合同编号',
232   -// dataIndex: 'contract',
233   -// width: 200,
234   -// disable: true,
235   -// onFilter: true,
236   -// ellipsis: true,
237   -// },
238   -// {
239   -// title: '供应商名称',
240   -// dataIndex: 'vendor',
241   -// width: 200,
242   -// disable: true,
243   -// onFilter: true,
244   -// ellipsis: true,
245   -// },
246   -// {
247   -// title: '终端名称',
248   -// dataIndex: 'terminal',
249   -// width: 200,
250   -// disable: true,
251   -// onFilter: true,
252   -// ellipsis: true,
253   -// },
254   -// {
255   -// title: '设备名称',
256   -// dataIndex: 'deviceName',
257   -// width: 200,
258   -// disable: true,
259   -// onFilter: true,
260   -// ellipsis: true,
261   -// },
262   -// {
263   -// title: '设备型号',
264   -// dataIndex: 'deviceModel',
265   -// hideInSearch: true,
266   -// width: 200,
267   -// disable: true,
268   -// onFilter: true,
269   -// ellipsis: true,
270   -// },
271   -// {
272   -// title: '数量',
273   -// dataIndex: 'count',
274   -// hideInSearch: true,
275   -// width: 100,
276   -// disable: true,
277   -// onFilter: true,
278   -// ellipsis: true,
279   -// },
280   -// {
281   -// title: '单价',
282   -// dataIndex: 'unitPrice',
283   -// hideInSearch: true,
284   -// width: 100,
285   -// disable: true,
286   -// onFilter: true,
287   -// ellipsis: true,
288   -// },
289   -// {
290   -// title: '总价',
291   -// dataIndex: 'price',
292   -// hideInSearch: true,
293   -// width: 100,
294   -// disable: true,
295   -// onFilter: true,
296   -// ellipsis: true,
297   -// },
298   -// {
299   -// title: '合同总金额',
300   -// dataIndex: 'totalPrice',
301   -// hideInSearch: true,
302   -// width: 100,
303   -// disable: true,
304   -// onFilter: true,
305   -// ellipsis: true,
306   -// },
307   -// {
308   -// title: '付款方式',
309   -// dataIndex: 'payWay',
310   -// hideInSearch: true,
311   -// width: 100,
312   -// disable: true,
313   -// onFilter: true,
314   -// ellipsis: true,
315   -// },
316   -// {
317   -// title: '附件',
318   -// dataIndex: 'annex',
319   -// hideInSearch: true,
320   -// width: 100,
321   -// disable: true,
322   -// onFilter: true,
323   -// ellipsis: true,
324   -// render: (_, record) => {
325   -// if (record.id && record.annex !== null) {
326   -// return <a href={record.annex}>附件文件</a>;
327   -// }
328   -// },
329   -// },
330   -// {
331   -// disable: true,
332   -// title: '备注',
333   -// dataIndex: 'remark',
334   -// filters: true,
335   -// hideInSearch: true,
336   -// onFilter: false,
337   -// ellipsis: true,
338   -// width: 100,
339   -// },
340   -// {
341   -// disable: true,
342   -// title: '备注',
343   -// dataIndex: 'remark',
344   -// filters: true,
345   -// hideInSearch: false,
346   -// onFilter: false,
347   -// ellipsis: true,
348   -// width: 100,
349   -// hideInTable: true
350   -// },
351   -// {
352   -// title: '操作',
353   -// valueType: 'option',
354   -// key: 'option',
355   -// fixed: 'right',
356   -// width: 160,
357   -// disable: true,
358   -// onFilter: true,
359   -// ellipsis: true,
360   -// render: (_text, record) => {
361   -// if (record?.id) {
362   -// return (
363   -// <>
364   -// <a key="check" target="_blank" onClick={() => {
365   -// console.log(record);
366   -// }}>
367   -// 审核
368   -// </a>
369   -// &nbsp;
370   -// <ReadModel currentContract={record.contract}></ReadModel>
371   -// &nbsp;
372   -// <EditorModel
373   -// currentContract={record.contract}
374   -// toReload={reload}
375   -// ></EditorModel>
376   -// &nbsp;
377   -// <Comfire currtDid={record.dId} sureDelete={toDelete}></Comfire>
378   -// </>
379   -// );
380   -// }
381   -// return null;
382   -// },
383   -// },
384   -// ];
  406 + {hasOnlyReaderPermission && (
  407 + <>
  408 + <ReadModel currentContract={record.contract}></ReadModel>
  409 + &nbsp;
  410 + </>
  411 + )}
  412 + {hasEditPermission && (
  413 + <>
  414 + <EditorModel
  415 + currentContract={record.contract}
  416 + toReload={reload}
  417 + showTarget={'编辑'}
  418 + ></EditorModel>
  419 + &nbsp;
  420 + </>
  421 + )}
  422 + {hasRePutPermission && (
  423 + <>
  424 + <EditorModel
  425 + currentContract={record.contract}
  426 + toReload={reload}
  427 + showTarget={'重新上传'}
  428 + ></EditorModel>
  429 + &nbsp;
  430 + </>
  431 + )}
  432 + {hasDeletePermission && (
  433 + <>
  434 + <Comfire
  435 + currtDid={record.dId}
  436 + sureDelete={toDelete}
  437 + ></Comfire>
  438 + </>
  439 + )}
  440 + </>
  441 + );
  442 + }
  443 + return null;
  444 + },
  445 + },
  446 + ];
385 447  
386   -// return (
387   -// <>
388   -// <EditableProTable<OrderStagesItem>
389   -// request={async (params) => {
390   -// if (
391   -// params.id !== null ||
392   -// params.contract !== null ||
393   -// params.vendor !== null ||
394   -// params.terminal !== null ||
395   -// params.deviceName !== null ||
396   -// params.dateRange !== null
397   -// ) {
398   -// let PostOrderErpOrderStagesSearchOption = {
399   -// id: params.id,
400   -// contract: params.contract,
401   -// vendor: params.vendor,
402   -// terminal: params.terminal,
403   -// deviceName: params.deviceName,
404   -// dateRange: params.dateRange,
405   -// };
406   -// let res = await postOrderErpOrderStagesSearch({
407   -// data: { ...PostOrderErpOrderStagesSearchOption },
408   -// });
409   -// await waitTime(2000);
410   -// if (res) {
411   -// // setTableItem(res.data)
412   -// const orderStagesWithList: OrderStagesWithListItem[] = res?.data;
413   -// let orderStagesList: OrderStagesItem[] = [];
414   -// for (let ind = 0; ind < orderStagesWithList.length; ind++) {
415   -// for (
416   -// let index = 0;
417   -// index < orderStagesWithList[ind].orderStagesDeviceVoList.length;
418   -// index++
419   -// ) {
420   -// let item: OrderStagesItem = {
421   -// id: undefined,
422   -// contract: undefined,
423   -// vendor: undefined,
424   -// dateRange: undefined,
425   -// terminal: undefined,
426   -// dId: undefined,
427   -// deviceName: undefined,
428   -// deviceModel: undefined,
429   -// count: undefined,
430   -// unitPrice: undefined,
431   -// price: undefined,
432   -// totalPrice: undefined,
433   -// payWay: undefined,
434   -// annex: undefined,
435   -// remark: undefined,
436   -// opt:undefined,
437   -// children:undefined
438   -// };
439   -// if (index === 0) {
440   -// item.id = orderStagesWithList[ind].id;
441   -// item.contract = orderStagesWithList[ind].contract;
442   -// item.vendor = orderStagesWithList[ind].vendor;
443   -// item.dateRange = orderStagesWithList[ind].dateRange;
444   -// item.terminal = orderStagesWithList[ind].terminal;
445   -// item.dId =
446   -// orderStagesWithList[ind].orderStagesDeviceVoList[index].dId;
447   -// item.deviceName =
448   -// orderStagesWithList[ind].orderStagesDeviceVoList[
449   -// index
450   -// ].deviceName;
451   -// item.deviceModel =
452   -// orderStagesWithList[ind].orderStagesDeviceVoList[
453   -// index
454   -// ].deviceModel;
455   -// item.count =
456   -// orderStagesWithList[ind].orderStagesDeviceVoList[
457   -// index
458   -// ].count;
459   -// item.unitPrice =
460   -// orderStagesWithList[ind].orderStagesDeviceVoList[
461   -// index
462   -// ].unitPrice;
463   -// item.price =
464   -// orderStagesWithList[ind].orderStagesDeviceVoList[
465   -// index
466   -// ].price;
467   -// item.totalPrice = orderStagesWithList[ind].totalPrice;
468   -// item.payWay = orderStagesWithList[ind].payWay;
469   -// item.annex = orderStagesWithList[ind].annex;
470   -// item.remark = orderStagesWithList[ind].remark;
471   -// item.opt=orderStagesWithList[ind].paths
472   -// orderStagesList.push(item);
473   -// } else {
474   -// item.id = orderStagesWithList[ind].id;
475   -// item.contract = orderStagesWithList[ind].contract;
476   -// item.vendor = orderStagesWithList[ind].vendor;
477   -// item.dateRange = orderStagesWithList[ind].dateRange;
478   -// item.terminal = orderStagesWithList[ind].terminal;
479   -// item.dId =
480   -// orderStagesWithList[ind].orderStagesDeviceVoList[index].dId;
481   -// item.deviceName =
482   -// orderStagesWithList[ind].orderStagesDeviceVoList[
483   -// index
484   -// ].deviceName;
485   -// item.deviceModel =
486   -// orderStagesWithList[ind].orderStagesDeviceVoList[
487   -// index
488   -// ].deviceModel;
489   -// item.count =
490   -// orderStagesWithList[ind].orderStagesDeviceVoList[
491   -// index
492   -// ].count;
493   -// item.unitPrice =
494   -// orderStagesWithList[ind].orderStagesDeviceVoList[
495   -// index
496   -// ].unitPrice;
497   -// item.price =
498   -// orderStagesWithList[ind].orderStagesDeviceVoList[
499   -// index
500   -// ].price;
501   -// item.totalPrice = orderStagesWithList[ind].totalPrice;
502   -// item.payWay = orderStagesWithList[ind].payWay;
503   -// item.annex = orderStagesWithList[ind].annex;
504   -// item.remark = orderStagesWithList[ind].remark;
505   -// item.opt=orderStagesWithList[ind].paths
506   -// if (orderStagesList[ind]) {
507   -// orderStagesList[ind].children.push(item);
508   -// }
509   -// }
510   -// }
511   -// }
512   -// return {
513   -// data: orderStagesList || [],
514   -// };
515   -// }
516   -// } else {
517   -// let res = await getOrderErpOrderStagesListAll();
518   -// await waitTime(2000);
519   -// if (res) {
520   -// const orderStagesWithList: OrderStagesWithListItem[] = res?.data;
521   -// let orderStagesList: OrderStagesItem[] = [];
522   -// for (let ind = 0; ind < orderStagesWithList.length; ind++) {
523   -// for (
524   -// let index = 0;
525   -// index < orderStagesWithList[ind].orderStagesDeviceVoList.length;
526   -// index++
527   -// ) {
528   -// let item: OrderStagesItem = {
529   -// id: undefined,
530   -// contract: undefined,
531   -// vendor: undefined,
532   -// dateRange: undefined,
533   -// terminal: undefined,
534   -// dId: undefined,
535   -// deviceName: undefined,
536   -// deviceModel: undefined,
537   -// count: undefined,
538   -// unitPrice: undefined,
539   -// price: undefined,
540   -// totalPrice: undefined,
541   -// payWay: undefined,
542   -// annex: undefined,
543   -// remark: undefined,
544   -// opt:undefined,
545   -// children:[]
546   -// };
547   -// if (index === 0) {
548   -// item.id = orderStagesWithList[ind].id;
549   -// item.contract = orderStagesWithList[ind].contract;
550   -// item.vendor = orderStagesWithList[ind].vendor;
551   -// item.dateRange = orderStagesWithList[ind].dateRange;
552   -// item.terminal = orderStagesWithList[ind].terminal;
553   -// item.dId =
554   -// orderStagesWithList[ind].orderStagesDeviceVoList[index].dId;
555   -// item.deviceName =
556   -// orderStagesWithList[ind].orderStagesDeviceVoList[
557   -// index
558   -// ].deviceName;
559   -// item.deviceModel =
560   -// orderStagesWithList[ind].orderStagesDeviceVoList[
561   -// index
562   -// ].deviceModel;
563   -// item.count =
564   -// orderStagesWithList[ind].orderStagesDeviceVoList[
565   -// index
566   -// ].count;
567   -// item.unitPrice =
568   -// orderStagesWithList[ind].orderStagesDeviceVoList[
569   -// index
570   -// ].unitPrice;
571   -// item.price =
572   -// orderStagesWithList[ind].orderStagesDeviceVoList[
573   -// index
574   -// ].price;
575   -// item.totalPrice = orderStagesWithList[ind].totalPrice;
576   -// item.payWay = orderStagesWithList[ind].payWay;
577   -// item.annex = orderStagesWithList[ind].annex;
578   -// item.remark = orderStagesWithList[ind].remark;
579   -// item.opt=orderStagesWithList[ind].paths
580   -// orderStagesList.push(item);
581   -// } else {
582   -// item.id = orderStagesWithList[ind].id;
583   -// item.contract = orderStagesWithList[ind].contract;
584   -// item.vendor = orderStagesWithList[ind].vendor;
585   -// item.dateRange = orderStagesWithList[ind].dateRange;
586   -// item.terminal = orderStagesWithList[ind].terminal;
587   -// item.dId =
588   -// orderStagesWithList[ind].orderStagesDeviceVoList[index].dId;
589   -// item.deviceName =
590   -// orderStagesWithList[ind].orderStagesDeviceVoList[
591   -// index
592   -// ].deviceName;
593   -// item.deviceModel =
594   -// orderStagesWithList[ind].orderStagesDeviceVoList[
595   -// index
596   -// ].deviceModel;
597   -// item.count =
598   -// orderStagesWithList[ind].orderStagesDeviceVoList[
599   -// index
600   -// ].count;
601   -// item.unitPrice =
602   -// orderStagesWithList[ind].orderStagesDeviceVoList[
603   -// index
604   -// ].unitPrice;
605   -// item.price =
606   -// orderStagesWithList[ind].orderStagesDeviceVoList[
607   -// index
608   -// ].price;
609   -// item.totalPrice = orderStagesWithList[ind].totalPrice;
610   -// item.payWay = orderStagesWithList[ind].payWay;
611   -// item.annex = orderStagesWithList[ind].annex;
612   -// item.remark = orderStagesWithList[ind].remark;
613   -// item.opt=orderStagesWithList[ind].paths
614   -// if (orderStagesList&&ind) {
615   -// orderStagesList[ind].children.push(item);
616   -// }
617   -// }
618   -// }
619   -// }
620   -// return {
621   -// data: orderStagesList || [],
622   -// };
623   -// }
624   -// }
625   -// }}
626   -// />
627   -// </>
628   -// );
629   -// };
  448 + return (
  449 + <>
  450 + <EditableProTable<OrderStagesItem>
  451 + className="title-index"
  452 + columnEmptyText=""
  453 + columns={columns}
  454 + cardBordered
  455 + actionRef={ref}
  456 + scroll={{ x: 1400, y: 360 }}
  457 + recordCreatorProps={false}
  458 + request={async (params) => {
  459 + if (
  460 + params.id !== null ||
  461 + params.contract !== null ||
  462 + params.vendor !== null ||
  463 + params.terminal !== null ||
  464 + params.deviceName !== null ||
  465 + params.dateRange !== null ||
  466 + params.status !== null
  467 + ) {
  468 + let PostOrderErpOrderStagesSearchOption = {
  469 + id: params.id,
  470 + contract: params.contract,
  471 + vendor: params.vendor,
  472 + terminal: params.terminal,
  473 + deviceName: params.deviceName,
  474 + dateRange: params.dateRange,
  475 + statusText: params.status,
  476 + };
  477 + let res = await postOrderErpOrderStagesSearch({
  478 + data: { ...PostOrderErpOrderStagesSearchOption },
  479 + });
  480 + await waitTime(2000);
  481 + if (res) {
  482 + const orderStagesWithList: OrderStagesWithListItem[] = res?.data;
  483 + let orderStagesList: OrderStagesItem[] = [];
  484 + for (let ind = 0; ind < orderStagesWithList.length; ind++) {
  485 + for (
  486 + let index = 0;
  487 + index <
  488 + orderStagesWithList[ind].orderStagesDeviceVoList.length;
  489 + index++
  490 + ) {
  491 + let item: OrderStagesItem = {
  492 + id: undefined,
  493 + contract: undefined,
  494 + vendor: undefined,
  495 + dateRange: undefined,
  496 + terminal: undefined,
  497 + dId: undefined,
  498 + deviceName: undefined,
  499 + deviceModel: undefined,
  500 + count: undefined,
  501 + unitPrice: undefined,
  502 + price: undefined,
  503 + totalPrice: undefined,
  504 + payWay: undefined,
  505 + annex: undefined,
  506 + remark: undefined,
  507 + opt: undefined,
  508 + status: undefined,
  509 + statusMark: undefined,
  510 + };
  511 + if (index === 0) {
  512 + item.id = orderStagesWithList[ind].id;
  513 + item.contract = orderStagesWithList[ind].contract;
  514 + item.vendor = orderStagesWithList[ind].vendor;
  515 + item.dateRange = orderStagesWithList[ind].dateRange;
  516 + item.terminal = orderStagesWithList[ind].terminal;
  517 + item.dId =
  518 + orderStagesWithList[ind].orderStagesDeviceVoList[
  519 + index
  520 + ].dId;
  521 + item.deviceName =
  522 + orderStagesWithList[ind].orderStagesDeviceVoList[
  523 + index
  524 + ].deviceName;
  525 + item.deviceModel =
  526 + orderStagesWithList[ind].orderStagesDeviceVoList[
  527 + index
  528 + ].deviceModel;
  529 + item.count =
  530 + orderStagesWithList[ind].orderStagesDeviceVoList[
  531 + index
  532 + ].count;
  533 + item.unitPrice =
  534 + orderStagesWithList[ind].orderStagesDeviceVoList[
  535 + index
  536 + ].unitPrice;
  537 + item.price =
  538 + orderStagesWithList[ind].orderStagesDeviceVoList[
  539 + index
  540 + ].price;
  541 + item.totalPrice = orderStagesWithList[ind].totalPrice;
  542 + item.payWay = orderStagesWithList[ind].payWay;
  543 + item.annex = orderStagesWithList[ind].annex;
  544 + item.remark = orderStagesWithList[ind].remark;
  545 + item.status = orderStagesWithList[ind].status;
  546 + item.statusMark = orderStagesWithList[ind].statusMark;
  547 + if (orderStagesWithList[ind].paths) {
  548 + item.opt = [...orderStagesWithList[ind].paths];
  549 + if (orderStagesWithList[ind]?.paths?.includes('READ')) {
  550 + item.opt.push('ONLYREAD');
  551 + }
  552 + }
  553 + item.children = [];
  554 + if (
  555 + orderStagesWithList[ind].orderStagesDeviceVoList.length <=
  556 + 1
  557 + ) {
  558 + delete item.children;
  559 + }
  560 + orderStagesList.push(item);
  561 + } else {
  562 + item.id = orderStagesWithList[ind].id;
  563 + item.contract = orderStagesWithList[ind].contract;
  564 + item.vendor = orderStagesWithList[ind].vendor;
  565 + item.dateRange = orderStagesWithList[ind].dateRange;
  566 + item.terminal = orderStagesWithList[ind].terminal;
  567 + item.dId =
  568 + orderStagesWithList[ind].orderStagesDeviceVoList[
  569 + index
  570 + ].dId;
  571 + item.deviceName =
  572 + orderStagesWithList[ind].orderStagesDeviceVoList[
  573 + index
  574 + ].deviceName;
  575 + item.deviceModel =
  576 + orderStagesWithList[ind].orderStagesDeviceVoList[
  577 + index
  578 + ].deviceModel;
  579 + item.count =
  580 + orderStagesWithList[ind].orderStagesDeviceVoList[
  581 + index
  582 + ].count;
  583 + item.unitPrice =
  584 + orderStagesWithList[ind].orderStagesDeviceVoList[
  585 + index
  586 + ].unitPrice;
  587 + item.price =
  588 + orderStagesWithList[ind].orderStagesDeviceVoList[
  589 + index
  590 + ].price;
  591 + item.totalPrice = orderStagesWithList[ind].totalPrice;
  592 + item.payWay = orderStagesWithList[ind].payWay;
  593 + item.annex = orderStagesWithList[ind].annex;
  594 + item.remark = orderStagesWithList[ind].remark;
  595 + if (orderStagesWithList[ind].paths) {
  596 + if (orderStagesList[ind]?.opt?.includes('READ')) {
  597 + item.opt = ['ONLYREAD'];
  598 + }
  599 + }
  600 + item.status = orderStagesWithList[ind].status;
  601 + item.statusMark = orderStagesWithList[ind].statusMark;
  602 + if (
  603 + orderStagesWithList[ind].orderStagesDeviceVoList.length >
  604 + 1
  605 + ) {
  606 + orderStagesList[ind].children?.push(item);
  607 + }
  608 + }
  609 + }
  610 + }
  611 + return {
  612 + data: orderStagesList || [],
  613 + };
  614 + }
  615 + } else {
  616 + let res = await getOrderErpOrderStagesListAll();
  617 + await waitTime(2000);
  618 + if (res) {
  619 + const orderStagesWithList: OrderStagesWithListItem[] = res?.data;
  620 + let orderStagesList: OrderStagesItem[] = [];
  621 + for (let ind = 0; ind < orderStagesWithList.length; ind++) {
  622 + for (
  623 + let index = 0;
  624 + index <
  625 + orderStagesWithList[ind].orderStagesDeviceVoList.length;
  626 + index++
  627 + ) {
  628 + let item: OrderStagesItem = {
  629 + id: undefined,
  630 + contract: undefined,
  631 + vendor: undefined,
  632 + dateRange: undefined,
  633 + terminal: undefined,
  634 + dId: undefined,
  635 + deviceName: undefined,
  636 + deviceModel: undefined,
  637 + count: undefined,
  638 + unitPrice: undefined,
  639 + price: undefined,
  640 + totalPrice: undefined,
  641 + payWay: undefined,
  642 + annex: undefined,
  643 + remark: undefined,
  644 + opt: undefined,
  645 + children: undefined,
  646 + status: undefined,
  647 + statusMark: undefined,
  648 + };
  649 + if (index === 0) {
  650 + item.id = orderStagesWithList[ind].id;
  651 + item.contract = orderStagesWithList[ind].contract;
  652 + item.vendor = orderStagesWithList[ind].vendor;
  653 + item.dateRange = orderStagesWithList[ind].dateRange;
  654 + item.terminal = orderStagesWithList[ind].terminal;
  655 + item.dId =
  656 + orderStagesWithList[ind].orderStagesDeviceVoList[
  657 + index
  658 + ].dId;
  659 + item.deviceName =
  660 + orderStagesWithList[ind].orderStagesDeviceVoList[
  661 + index
  662 + ].deviceName;
  663 + item.deviceModel =
  664 + orderStagesWithList[ind].orderStagesDeviceVoList[
  665 + index
  666 + ].deviceModel;
  667 + item.count =
  668 + orderStagesWithList[ind].orderStagesDeviceVoList[
  669 + index
  670 + ].count;
  671 + item.unitPrice =
  672 + orderStagesWithList[ind].orderStagesDeviceVoList[
  673 + index
  674 + ].unitPrice;
  675 + item.price =
  676 + orderStagesWithList[ind].orderStagesDeviceVoList[
  677 + index
  678 + ].price;
  679 + item.totalPrice = orderStagesWithList[ind].totalPrice;
  680 + item.payWay = orderStagesWithList[ind].payWay;
  681 + item.annex = orderStagesWithList[ind].annex;
  682 + item.remark = orderStagesWithList[ind].remark;
  683 + item.opt = orderStagesWithList[ind].paths;
  684 + item.status = orderStagesWithList[ind].status;
  685 + item.statusMark = orderStagesWithList[ind].statusMark;
  686 + if (orderStagesWithList[ind].paths) {
  687 + item.opt = [...orderStagesWithList[ind].paths];
  688 + if (orderStagesWithList[ind]?.paths?.includes('READ')) {
  689 + item.opt.push('ONLYREAD');
  690 + }
  691 + }
  692 + if (
  693 + orderStagesWithList[ind].orderStagesDeviceVoList.length <=
  694 + 1
  695 + ) {
  696 + delete item.children;
  697 + }
  698 + orderStagesList.push(item);
  699 + } else {
  700 + item.id = orderStagesWithList[ind].id;
  701 + item.contract = orderStagesWithList[ind].contract;
  702 + item.vendor = orderStagesWithList[ind].vendor;
  703 + item.dateRange = orderStagesWithList[ind].dateRange;
  704 + item.terminal = orderStagesWithList[ind].terminal;
  705 + item.dId =
  706 + orderStagesWithList[ind].orderStagesDeviceVoList[
  707 + index
  708 + ].dId;
  709 + item.deviceName =
  710 + orderStagesWithList[ind].orderStagesDeviceVoList[
  711 + index
  712 + ].deviceName;
  713 + item.deviceModel =
  714 + orderStagesWithList[ind].orderStagesDeviceVoList[
  715 + index
  716 + ].deviceModel;
  717 + item.count =
  718 + orderStagesWithList[ind].orderStagesDeviceVoList[
  719 + index
  720 + ].count;
  721 + item.unitPrice =
  722 + orderStagesWithList[ind].orderStagesDeviceVoList[
  723 + index
  724 + ].unitPrice;
  725 + item.price =
  726 + orderStagesWithList[ind].orderStagesDeviceVoList[
  727 + index
  728 + ].price;
  729 + item.totalPrice = orderStagesWithList[ind].totalPrice;
  730 + item.payWay = orderStagesWithList[ind].payWay;
  731 + item.annex = orderStagesWithList[ind].annex;
  732 + item.remark = orderStagesWithList[ind].remark;
  733 + if (orderStagesWithList[ind].paths) {
  734 + if (orderStagesList[ind].opt?.includes('READ')) {
  735 + item.opt = ['ONLYREAD'];
  736 + }
  737 + }
  738 + item.status = orderStagesWithList[ind].status;
  739 + item.statusMark = orderStagesWithList[ind].statusMark;
  740 + if (
  741 + orderStagesWithList[ind].orderStagesDeviceVoList.length >
  742 + 1
  743 + ) {
  744 + orderStagesList[ind].children?.push(item);
  745 + }
  746 + }
  747 + }
  748 + }
  749 + return {
  750 + data: orderStagesList || [],
  751 + };
  752 + }
  753 + }
  754 + }}
  755 + editable={{
  756 + type: 'multiple',
  757 + }}
  758 + columnsState={{
  759 + persistenceKey: 'pro-table-singe-demos',
  760 + persistenceType: 'localStorage',
  761 + defaultValue: {
  762 + option: { fixed: 'right', disable: true },
  763 + },
  764 + }}
  765 + rowKey="dId"
  766 + search={{
  767 + labelWidth: 'auto',
  768 + }}
  769 + options={{
  770 + setting: {
  771 + listsHeight: 800,
  772 + },
  773 + }}
  774 + form={{
  775 + syncToUrl: (values, type) => {
  776 + if (type === 'get') {
  777 + return {
  778 + ...values,
  779 + created_at: [values.startTime, values.endTime],
  780 + };
  781 + }
  782 + return values;
  783 + },
  784 + }}
  785 + pagination={{
  786 + pageSize: 10,
  787 + // onChange: (page) => console.log(page),
  788 + }}
  789 + dateFormatter="string"
  790 + headerTitle={[]}
  791 + toolBarRender={() => [
  792 + <>
  793 + <AddModel toReload={reload}></AddModel>
  794 + <UploadModel toReload={reload}></UploadModel>
  795 + <Button
  796 + type="primary"
  797 + onClick={() => {
  798 + toExport();
  799 + }}
  800 + >
  801 + <VerticalAlignTopOutlined />
  802 + 导出
  803 + </Button>
  804 + </>,
  805 + ]}
  806 + />
  807 + </>
  808 + );
  809 +};
... ...
src/pages/Instalment/index.tsx
1   -import Title from './components/title/title';
  1 +// import Title from './components/title/title';
  2 +import Titletest from './components/title/titletest';
2 3  
3 4 const instalment_contect: React.FC = () => (
4 5 <>
5   - <Title />
  6 + {/* <Title /> */}
  7 + <Titletest />
6 8 </>
7 9 );
8 10  
... ...
src/services/definition.ts
... ... @@ -1381,32 +1381,6 @@ export interface Entry {
1381 1381 unEmpInsuranceC?: string;
1382 1382 }
1383 1383  
1384   -export interface File {
1385   - absolute?: boolean;
1386   - absoluteFile?: File;
1387   - absolutePath?: string;
1388   - canonicalFile?: File;
1389   - canonicalPath?: string;
1390   - directory?: boolean;
1391   - executable?: boolean;
1392   - file?: boolean;
1393   - /** @format int64 */
1394   - freeSpace?: number;
1395   - hidden?: boolean;
1396   - /** @format int64 */
1397   - lastModified?: number;
1398   - name?: string;
1399   - parent?: string;
1400   - parentFile?: File;
1401   - path?: string;
1402   - readable?: boolean;
1403   - /** @format int64 */
1404   - totalSpace?: number;
1405   - /** @format int64 */
1406   - usableSpace?: number;
1407   - writable?: boolean;
1408   -}
1409   -
1410 1384 export interface FilePathDto {
1411 1385 url?: string;
1412 1386 }
... ... @@ -2429,39 +2403,47 @@ export interface OrderStagesDeviceDo {
2429 2403 export interface OrderStagesFromDo {
2430 2404 annex?: string;
2431 2405 contract?: string;
2432   - createByName?: string;
  2406 + createBy?: string;
2433 2407 /** @format date-time */
2434 2408 createTime?: string;
2435 2409 /** @format date-time */
2436 2410 dateRange?: string;
2437 2411 /** @format int32 */
  2412 + enableFlag?: number;
  2413 + /** @format int32 */
2438 2414 id?: number;
2439   - logicDelete?: boolean;
  2415 + modifyBy?: string;
  2416 + /** @format date-time */
  2417 + modifyTime?: string;
2440 2418 orderStagesDeviceDoList?: Array<OrderStagesDeviceDo>;
2441 2419 payWay?: string;
2442 2420 remark?: string;
2443 2421 terminal?: string;
2444 2422 /** @format double */
2445 2423 totalPrice?: number;
2446   - updateByName?: string;
2447   - /** @format date-time */
2448   - updateTime?: string;
2449 2424 vendor?: string;
2450 2425 /** @format int32 */
2451 2426 version?: number;
2452 2427 }
2453 2428  
2454 2429 export interface OrderStagesPayWay {
  2430 + createByName?: string;
  2431 + /** @format date-time */
  2432 + createTime?: string;
2455 2433 /** @format date-time */
2456 2434 dateRange?: string;
2457 2435 fileName?: string;
2458 2436 fileUrl?: string;
2459 2437 /** @format int32 */
2460 2438 id?: number;
  2439 + logicDelete?: boolean;
2461 2440 /** @format int32 */
2462 2441 number?: number;
2463 2442 /** @format int32 */
2464 2443 ossId?: number;
  2444 + updateByName?: string;
  2445 + /** @format date-time */
  2446 + updateTime?: string;
2465 2447 }
2466 2448  
2467 2449 export interface OrderStagesPayWayDo {
... ... @@ -2475,11 +2457,14 @@ export interface OrderStagesPayWayFileDo {
2475 2457  
2476 2458 export interface OrderStagesSelDo {
2477 2459 contract?: string;
  2460 + createName?: string;
2478 2461 /** @format date-time */
2479 2462 dateRange?: string;
2480 2463 deviceName?: string;
2481 2464 /** @format int64 */
2482 2465 id?: number;
  2466 + /** @format int32 */
  2467 + status?: number;
2483 2468 terminal?: string;
2484 2469 vendor?: string;
2485 2470 }
... ... @@ -3535,7 +3520,7 @@ export interface ResetPwdVO {
3535 3520  
3536 3521 export interface Resource {
3537 3522 description?: string;
3538   - file?: File;
  3523 + file?: TsgFile;
3539 3524 filename?: string;
3540 3525 inputStream?: InputStream;
3541 3526 open?: boolean;
... ... @@ -4061,6 +4046,32 @@ export interface CompanyInfo {
4061 4046 taxIdIsNotNull?: boolean;
4062 4047 }
4063 4048  
  4049 +export interface TsgFile {
  4050 + absolute?: boolean;
  4051 + absoluteFile?: TsgFile;
  4052 + absolutePath?: string;
  4053 + canonicalFile?: TsgFile;
  4054 + canonicalPath?: string;
  4055 + directory?: boolean;
  4056 + executable?: boolean;
  4057 + file?: boolean;
  4058 + /** @format int64 */
  4059 + freeSpace?: number;
  4060 + hidden?: boolean;
  4061 + /** @format int64 */
  4062 + lastModified?: number;
  4063 + name?: string;
  4064 + parent?: string;
  4065 + parentFile?: TsgFile;
  4066 + path?: string;
  4067 + readable?: boolean;
  4068 + /** @format int64 */
  4069 + totalSpace?: number;
  4070 + /** @format int64 */
  4071 + usableSpace?: number;
  4072 + writable?: boolean;
  4073 +}
  4074 +
4064 4075 export interface InvoiceDetail {
4065 4076 /** @format int64 */
4066 4077 id?: number;
... ...
src/services/request.ts
... ... @@ -8077,7 +8077,7 @@ export type PostOrderErpOrderStagesAddResponseSuccess =
8077 8077 PostOrderErpOrderStagesAddResponse[200];
8078 8078 /**
8079 8079 * @description
8080   - * 添加或者修改分期账单
  8080 + * 添加分期账单
8081 8081 * @tags order-stages-controller
8082 8082 * @produces *
8083 8083 * @consumes application/json
... ... @@ -8101,6 +8101,74 @@ export const postOrderErpOrderStagesAdd = /* #__PURE__ */ (() =&gt; {
8101 8101 return request;
8102 8102 })();
8103 8103  
  8104 +/** @description request parameter type for postOrderErpOrderStagesCheckOrderStages */
  8105 +export interface PostOrderErpOrderStagesCheckOrderStagesOption {
  8106 + /** @format int32 */
  8107 + query?: {
  8108 + /**
  8109 + @format int32 */
  8110 + id?: number;
  8111 + isPass?: boolean;
  8112 + };
  8113 +}
  8114 +
  8115 +/** @description response type for postOrderErpOrderStagesCheckOrderStages */
  8116 +export interface PostOrderErpOrderStagesCheckOrderStagesResponse {
  8117 + /**
  8118 + * @description
  8119 + * OK
  8120 + */
  8121 + 200: ServerResult;
  8122 + /**
  8123 + * @description
  8124 + * Created
  8125 + */
  8126 + 201: any;
  8127 + /**
  8128 + * @description
  8129 + * Unauthorized
  8130 + */
  8131 + 401: any;
  8132 + /**
  8133 + * @description
  8134 + * Forbidden
  8135 + */
  8136 + 403: any;
  8137 + /**
  8138 + * @description
  8139 + * Not Found
  8140 + */
  8141 + 404: any;
  8142 +}
  8143 +
  8144 +export type PostOrderErpOrderStagesCheckOrderStagesResponseSuccess =
  8145 + PostOrderErpOrderStagesCheckOrderStagesResponse[200];
  8146 +/**
  8147 + * @description
  8148 + * 对分期账单审核
  8149 + * @tags order-stages-controller
  8150 + * @produces *
  8151 + * @consumes application/json
  8152 + */
  8153 +export const postOrderErpOrderStagesCheckOrderStages = /* #__PURE__ */ (() => {
  8154 + const method = 'post';
  8155 + const url = '/order/erp/orderStages/checkOrderStages';
  8156 + function request(
  8157 + option?: PostOrderErpOrderStagesCheckOrderStagesOption,
  8158 + ): Promise<PostOrderErpOrderStagesCheckOrderStagesResponseSuccess> {
  8159 + return requester(request.url, {
  8160 + method: request.method,
  8161 + ...option,
  8162 + }) as unknown as Promise<PostOrderErpOrderStagesCheckOrderStagesResponseSuccess>;
  8163 + }
  8164 +
  8165 + /** http method */
  8166 + request.method = method;
  8167 + /** request url */
  8168 + request.url = url;
  8169 + return request;
  8170 +})();
  8171 +
8104 8172 /** @description request parameter type for deleteOrderErpOrderStagesDelect */
8105 8173 export interface DeleteOrderErpOrderStagesDelectOption {
8106 8174 /**
... ... @@ -8172,7 +8240,7 @@ export interface GetOrderErpOrderStagesExportResponse {
8172 8240 * @description
8173 8241 * OK
8174 8242 */
8175   - 200: any;
  8243 + 200: ServerResult;
8176 8244 /**
8177 8245 * @description
8178 8246 * Unauthorized
... ...
src/utils/index.ts
... ... @@ -17,7 +17,6 @@ export function enum2ReverseSelect(data: any) {
17 17  
18 18 //将枚举的value值转换为label
19 19 function enumValueToLabel(value: any, enumObj: any) {
20   - console.log(value, enumObj);
21 20 if (enumObj !== undefined) {
22 21 return enumObj[value];
23 22 }
... ...