Commit a79e7fb648b89d9df162e4ae64cf80f3e4e23e28
1 parent
979708ac
feat: update 财务合并开票
Showing
6 changed files
with
610 additions
and
69 deletions
src/pages/Order/components/FinancialEditDrawer.tsx
... | ... | @@ -26,6 +26,16 @@ export default ({ mainOrder, subOrders, setVisible, isMainOrder, onClose }) => { |
26 | 26 | subIds: []; |
27 | 27 | financialReceiptIssuanceTime: string; |
28 | 28 | }>(); |
29 | + | |
30 | + //回显开收据时间和收款时间 | |
31 | + if (!isMainOrder) { | |
32 | + form.setFieldValue('collectMoneyTime', subOrders[0].collectMoneyTime); | |
33 | + form.setFieldValue( | |
34 | + 'financialReceiptIssuanceTime', | |
35 | + subOrders[0].financialReceiptIssuanceTime, | |
36 | + ); | |
37 | + } | |
38 | + | |
29 | 39 | return ( |
30 | 40 | <DrawerForm<{ |
31 | 41 | collectMoneyTime: string; |
... | ... | @@ -49,12 +59,18 @@ export default ({ mainOrder, subOrders, setVisible, isMainOrder, onClose }) => { |
49 | 59 | }} |
50 | 60 | submitTimeout={2000} |
51 | 61 | onFinish={async (values) => { |
62 | + let body = { | |
63 | + ...values, | |
64 | + mainOrderId: mainOrderId, | |
65 | + subIds: subOrderIds, | |
66 | + }; | |
67 | + | |
68 | + if (!isMainOrder) { | |
69 | + body.invoicingStatus = 'UN_INVOICE'; | |
70 | + } | |
71 | + | |
52 | 72 | let res = await postServiceOrderNoNeedInvoicingEdit({ |
53 | - data: { | |
54 | - ...values, | |
55 | - mainOrderId: mainOrderId, | |
56 | - subIds: subOrderIds, | |
57 | - }, | |
73 | + data: body, | |
58 | 74 | }); |
59 | 75 | if (res.result === RESPONSE_CODE.SUCCESS) { |
60 | 76 | message.success(res.message); |
... | ... | @@ -115,24 +131,24 @@ export default ({ mainOrder, subOrders, setVisible, isMainOrder, onClose }) => { |
115 | 131 | width="lg" |
116 | 132 | name="financialReceiptIssuanceTime" |
117 | 133 | label="开收据时间" |
118 | - rules={[ | |
119 | - { | |
120 | - required: !isMainOrder && invoicingStatus === 'UN_INVOICE', | |
121 | - message: '开收据时间必填', | |
122 | - }, | |
123 | - ]} | |
134 | + // rules={[ | |
135 | + // { | |
136 | + // required: !isMainOrder && invoicingStatus === 'UN_INVOICE', | |
137 | + // message: '开收据时间必填', | |
138 | + // }, | |
139 | + // ]} | |
124 | 140 | /> |
125 | 141 | <ProFormDatePicker |
126 | 142 | key="collectMoneyTime" |
127 | 143 | width="lg" |
128 | 144 | name="collectMoneyTime" |
129 | 145 | label="收款时间" |
130 | - rules={[ | |
131 | - { | |
132 | - required: !isMainOrder && invoicingStatus === 'UN_INVOICE', | |
133 | - message: '收款时间必填', | |
134 | - }, | |
135 | - ]} | |
146 | + // rules={[ | |
147 | + // { | |
148 | + // required: !isMainOrder && invoicingStatus === 'UN_INVOICE', | |
149 | + // message: '收款时间必填', | |
150 | + // }, | |
151 | + // ]} | |
136 | 152 | /> |
137 | 153 | </DrawerForm> |
138 | 154 | ); | ... | ... |
src/pages/Order/components/FinancialMergeDrawer.tsx
0 → 100644
1 | +// import { PlusOutlined } from '@ant-design/icons'; | |
2 | +import { RESPONSE_CODE } from '@/constants/enum'; | |
3 | +import { postServiceOrderMergeInvoicing } from '@/services'; | |
4 | +import { | |
5 | + DrawerForm, | |
6 | + ProFormDatePicker, | |
7 | + ProFormSelect, | |
8 | + ProFormText, | |
9 | + ProFormTextArea, | |
10 | +} from '@ant-design/pro-components'; | |
11 | +import { Form, message } from 'antd'; | |
12 | + | |
13 | +export default ({ dataList, setVisible, onClose }) => { | |
14 | + let mainOrderIds = dataList?.map((item) => { | |
15 | + return item.id; | |
16 | + }); | |
17 | + let firstMainOrder = dataList[0]; | |
18 | + let bank = firstMainOrder?.bank; | |
19 | + let bankAccountNumber = firstMainOrder?.bankAccountNumber; | |
20 | + let invoiceIdentificationNumber = firstMainOrder?.invoiceIdentificationNumber; | |
21 | + | |
22 | + const [form] = Form.useForm<{ | |
23 | + invoicingTime: string; | |
24 | + financialReceiptIssuanceTime: string; | |
25 | + invoicingNotes: string; | |
26 | + afterInvoicingStatus: string; | |
27 | + collectMoneyTime: string; | |
28 | + }>(); | |
29 | + return ( | |
30 | + <DrawerForm | |
31 | + open | |
32 | + title="合并开票" | |
33 | + resize={{ | |
34 | + onResize() { | |
35 | + console.log('resize!'); | |
36 | + }, | |
37 | + maxWidth: window.innerWidth * 0.8, | |
38 | + minWidth: 400, | |
39 | + }} | |
40 | + form={form} | |
41 | + autoFocusFirstInput | |
42 | + drawerProps={{ | |
43 | + destroyOnClose: true, | |
44 | + }} | |
45 | + submitTimeout={2000} | |
46 | + onFinish={async (values) => { | |
47 | + let res = await postServiceOrderMergeInvoicing({ | |
48 | + data: { | |
49 | + ...values, | |
50 | + mainOrderIds: mainOrderIds, | |
51 | + }, | |
52 | + }); | |
53 | + | |
54 | + if (res.result === RESPONSE_CODE.SUCCESS) { | |
55 | + message.success(res.message); | |
56 | + onClose(); | |
57 | + } | |
58 | + }} | |
59 | + onOpenChange={(val) => { | |
60 | + return !val && setVisible(); | |
61 | + }} | |
62 | + > | |
63 | + <ProFormText | |
64 | + width="lg" | |
65 | + name="invoiceIdentificationNumber" | |
66 | + label="开票信息" | |
67 | + placeholder="请输入开票信息" | |
68 | + initialValue={invoiceIdentificationNumber} | |
69 | + disabled | |
70 | + /> | |
71 | + <ProFormText | |
72 | + width="lg" | |
73 | + name="bank" | |
74 | + label="开户银行" | |
75 | + placeholder="请输入开户银行" | |
76 | + initialValue={bank} | |
77 | + disabled | |
78 | + /> | |
79 | + <ProFormText | |
80 | + width="lg" | |
81 | + name="bankAccountNumber" | |
82 | + label="开户银行账号" | |
83 | + placeholder="请输入开户银行账号" | |
84 | + initialValue={bankAccountNumber} | |
85 | + disabled | |
86 | + /> | |
87 | + | |
88 | + <ProFormDatePicker | |
89 | + key="invoicingTime" | |
90 | + width="lg" | |
91 | + name="invoicingTime" | |
92 | + label="开票时间" | |
93 | + rules={[{ required: true, message: '这是必填项' }]} | |
94 | + /> | |
95 | + <ProFormDatePicker | |
96 | + key="financialReceiptIssuanceTime" | |
97 | + width="lg" | |
98 | + name="financialReceiptIssuanceTime" | |
99 | + label="开收据时间" | |
100 | + /> | |
101 | + <ProFormDatePicker | |
102 | + key="collectMoneyTime" | |
103 | + width="lg" | |
104 | + name="collectMoneyTime" | |
105 | + label="收款时间" | |
106 | + /> | |
107 | + | |
108 | + <ProFormSelect | |
109 | + placeholder="是否完全开票" | |
110 | + name="afterInvoicingStatus" | |
111 | + width="lg" | |
112 | + label="是否完全开票" | |
113 | + options={[ | |
114 | + { label: '完全开票', value: 'COMPLETE_INVOICING' }, | |
115 | + { label: '部分开票', value: 'PARTIAL_INVOICING' }, | |
116 | + ]} | |
117 | + initialValue={'COMPLETE_INVOICING'} | |
118 | + disabled | |
119 | + /> | |
120 | + <ProFormTextArea width="lg" name="invoicingNotes" label="备注" /> | |
121 | + </DrawerForm> | |
122 | + ); | |
123 | +}; | ... | ... |
src/pages/Order/components/FinancialReceiptsModal.tsx
1 | -import { ModalForm } from '@ant-design/pro-components'; | |
1 | +import { | |
2 | + EditableProTable, | |
3 | + ModalForm, | |
4 | + ProColumns, | |
5 | + ProForm, | |
6 | +} from '@ant-design/pro-components'; | |
2 | 7 | import { Form } from 'antd'; |
8 | +import { useState } from 'react'; | |
3 | 9 | |
4 | 10 | // import { cloneDeep } from 'lodash'; |
5 | 11 | export default ({ setVisible, onClose }) => { |
6 | 12 | const [form] = Form.useForm<{ name: string; company: string }>(); |
7 | - | |
13 | + type DataSourceType = { | |
14 | + id: React.Key; | |
15 | + receiptsType?: string; | |
16 | + receiptsPrice?: number; | |
17 | + receiptsTime?: string; | |
18 | + notes?: string; | |
19 | + }; | |
20 | + const defaultData: DataSourceType[] = [ | |
21 | + { | |
22 | + id: 1, | |
23 | + receiptsType: '预付款', | |
24 | + receiptsPrice: 1234, | |
25 | + receiptsTime: '2023-01-02', | |
26 | + notes: '备注', | |
27 | + }, | |
28 | + { | |
29 | + id: 2, | |
30 | + receiptsType: '发货款', | |
31 | + receiptsPrice: 1234, | |
32 | + receiptsTime: '2023-01-02', | |
33 | + notes: '备注', | |
34 | + }, | |
35 | + { | |
36 | + id: 3, | |
37 | + receiptsType: '验收款', | |
38 | + receiptsPrice: 1234, | |
39 | + receiptsTime: '2023-01-02', | |
40 | + notes: '备注', | |
41 | + }, | |
42 | + { | |
43 | + id: 4, | |
44 | + receiptsType: '尾款', | |
45 | + receiptsPrice: 1234, | |
46 | + receiptsTime: '2023-01-02', | |
47 | + notes: '备注', | |
48 | + }, | |
49 | + ]; | |
50 | + const [editableKeys, setEditableRowKeys] = useState<React.Key[]>(() => | |
51 | + // defaultData.map((item) => item.id), | |
52 | + [3, 4], | |
53 | + ); | |
54 | + const columns: ProColumns<DataSourceType>[] = [ | |
55 | + { | |
56 | + title: '款项', | |
57 | + dataIndex: 'receiptsType', | |
58 | + editable: false, | |
59 | + width: '10%', | |
60 | + }, | |
61 | + { | |
62 | + title: '已收金额', | |
63 | + dataIndex: 'receiptsPrice', | |
64 | + valueType: 'digit', | |
65 | + width: '15%', | |
66 | + }, | |
67 | + { | |
68 | + title: '收款时间', | |
69 | + dataIndex: 'receiptsTime', | |
70 | + valueType: 'dateTime', | |
71 | + width: '25%', | |
72 | + }, | |
73 | + { | |
74 | + title: '备注', | |
75 | + dataIndex: 'receiptsNotes', | |
76 | + }, | |
77 | + ]; | |
8 | 78 | return ( |
9 | 79 | <> |
10 | 80 | <ModalForm<{ |
11 | 81 | name: string; |
12 | 82 | company: string; |
13 | 83 | }> |
14 | - width={500} | |
84 | + width={1100} | |
15 | 85 | open |
16 | 86 | title="收款记录" |
17 | 87 | form={form} |
18 | 88 | autoFocusFirstInput |
19 | 89 | modalProps={{ |
20 | - okText: '通过', | |
90 | + okText: '保存', | |
21 | 91 | cancelText: '取消', |
22 | 92 | destroyOnClose: true, |
23 | 93 | onCancel: () => { |
... | ... | @@ -29,7 +99,160 @@ export default ({ setVisible, onClose }) => { |
29 | 99 | onClose(); |
30 | 100 | }} |
31 | 101 | onOpenChange={setVisible} |
32 | - ></ModalForm> | |
102 | + > | |
103 | + <ProForm.Item | |
104 | + label="" | |
105 | + name="dataSource" | |
106 | + initialValue={defaultData} | |
107 | + trigger="onValuesChange" | |
108 | + > | |
109 | + <EditableProTable<DataSourceType> | |
110 | + rowKey="id" | |
111 | + toolBarRender={false} | |
112 | + columns={columns} | |
113 | + recordCreatorProps={{ | |
114 | + newRecordType: 'dataSource', | |
115 | + position: 'top', | |
116 | + record: () => ({ | |
117 | + id: Date.now(), | |
118 | + addonBefore: 'ccccccc', | |
119 | + decs: 'testdesc', | |
120 | + }), | |
121 | + style: { | |
122 | + display: 'none', | |
123 | + }, | |
124 | + }} | |
125 | + editable={{ | |
126 | + type: 'multiple', | |
127 | + editableKeys, | |
128 | + onChange: setEditableRowKeys, | |
129 | + actionRender: (row, _, dom) => { | |
130 | + return [dom.delete]; | |
131 | + }, | |
132 | + }} | |
133 | + /> | |
134 | + </ProForm.Item> | |
135 | + | |
136 | + {/* <ProForm.Group> | |
137 | + <ProFormText | |
138 | + width="sm" | |
139 | + name="name1" | |
140 | + label="款项" | |
141 | + tooltip="最长为 24 位" | |
142 | + initialValue={"预付款"} | |
143 | + disabled | |
144 | + placeholder="请输入名称" | |
145 | + /> | |
146 | + | |
147 | + <ProFormText | |
148 | + width="sm" | |
149 | + name="company" | |
150 | + label="收款时间" | |
151 | + placeholder="请输入名称" | |
152 | + /> | |
153 | + | |
154 | + <ProFormText | |
155 | + width="sm" | |
156 | + name="price" | |
157 | + label="收款金额" | |
158 | + placeholder="请输入名称" | |
159 | + /> | |
160 | + | |
161 | + <ProFormText | |
162 | + width="sm" | |
163 | + name="notes" | |
164 | + label="备注" | |
165 | + placeholder="请输入名称" | |
166 | + /> | |
167 | + </ProForm.Group> | |
168 | + | |
169 | + <ProForm.Group> | |
170 | + <ProFormText | |
171 | + width="sm" | |
172 | + name="name2" | |
173 | + initialValue={"发货款"} | |
174 | + disabled | |
175 | + tooltip="最长为 24 位" | |
176 | + placeholder="请输入名称" | |
177 | + /> | |
178 | + | |
179 | + <ProFormText | |
180 | + width="sm" | |
181 | + name="company" | |
182 | + placeholder="请输入名称" | |
183 | + /> | |
184 | + | |
185 | + <ProFormText | |
186 | + width="sm" | |
187 | + name="price" | |
188 | + placeholder="请输入名称" | |
189 | + /> | |
190 | + | |
191 | + <ProFormText | |
192 | + width="sm" | |
193 | + name="notes" | |
194 | + placeholder="请输入名称" | |
195 | + /> | |
196 | + </ProForm.Group> | |
197 | + | |
198 | + <ProForm.Group> | |
199 | + <ProFormText | |
200 | + width="sm" | |
201 | + name="name3" | |
202 | + initialValue={"验收款"} | |
203 | + disabled | |
204 | + tooltip="最长为 24 位" | |
205 | + placeholder="请输入名称" | |
206 | + /> | |
207 | + | |
208 | + <ProFormText | |
209 | + width="sm" | |
210 | + name="company" | |
211 | + placeholder="请输入名称" | |
212 | + /> | |
213 | + | |
214 | + <ProFormText | |
215 | + width="sm" | |
216 | + name="price" | |
217 | + placeholder="请输入名称" | |
218 | + /> | |
219 | + | |
220 | + <ProFormText | |
221 | + width="sm" | |
222 | + name="notes" | |
223 | + placeholder="请输入名称" | |
224 | + /> | |
225 | + </ProForm.Group> | |
226 | + | |
227 | + <ProForm.Group> | |
228 | + <ProFormText | |
229 | + width="sm" | |
230 | + name="name4" | |
231 | + disabled | |
232 | + initialValue={"尾款"} | |
233 | + tooltip="最长为 24 位" | |
234 | + placeholder="请输入名称" | |
235 | + /> | |
236 | + | |
237 | + <ProFormText | |
238 | + width="sm" | |
239 | + name="company" | |
240 | + placeholder="请输入名称" | |
241 | + /> | |
242 | + | |
243 | + <ProFormText | |
244 | + width="sm" | |
245 | + name="price" | |
246 | + placeholder="请输入名称" | |
247 | + /> | |
248 | + | |
249 | + <ProFormText | |
250 | + width="sm" | |
251 | + name="notes" | |
252 | + placeholder="请输入名称" | |
253 | + /> | |
254 | + </ProForm.Group> */} | |
255 | + </ModalForm> | |
33 | 256 | </> |
34 | 257 | ); |
35 | 258 | }; | ... | ... |
src/pages/Order/constant.ts
... | ... | @@ -490,6 +490,14 @@ export const MAIN_ORDER_COLUMNS = [ |
490 | 490 | }, |
491 | 491 | }, |
492 | 492 | }, |
493 | + | |
494 | + // { | |
495 | + // title: '是否完全收款', | |
496 | + // dataIndex: 'receiptsStatus', | |
497 | + // valueType: 'select', | |
498 | + // hideInTable: true, | |
499 | + // valueEnum:[{text:'是',status:'YES'},{text:'否',status:'NO'}] | |
500 | + // } | |
493 | 501 | ]; |
494 | 502 | |
495 | 503 | export const SUB_ORDER_COLUMNS = [ | ... | ... |
src/pages/Order/index.tsx
... | ... | @@ -56,6 +56,7 @@ import DeliverInfoDrawer from './components/DeliverInfoDrawer'; |
56 | 56 | import DeliverModal from './components/DeliverModal'; |
57 | 57 | import FinancialDrawer from './components/FinancialDrawer'; |
58 | 58 | import FinancialEditDrawer from './components/FinancialEditDrawer'; |
59 | +import FinancialMergeDrawer from './components/FinancialMergeDrawer'; | |
59 | 60 | import FinancialReceiptsModal from './components/FinancialReceiptsModal'; |
60 | 61 | import HistoryModal from './components/HistoryModal'; |
61 | 62 | import ImportModal from './components/ImportModal'; |
... | ... | @@ -92,6 +93,8 @@ const OrderPage = () => { |
92 | 93 | ] = useState<boolean>(false); |
93 | 94 | const [data, setData] = useState([]); //列表数据 |
94 | 95 | const [notesEditVisible, setNotesEditVisible] = useState<boolean>(false); |
96 | + const [financialMergeDrawerVisible, setFinancialMergeDrawerVisible] = | |
97 | + useState<boolean>(false); | |
95 | 98 | const [attachmentModalVisible, setAttachmentModalVisible] = |
96 | 99 | useState<boolean>(false); |
97 | 100 | const [financialReceiptsModalVisible, setFinancialReceiptsModalVisible] = |
... | ... | @@ -136,6 +139,9 @@ const OrderPage = () => { |
136 | 139 | const [onlyShowCancelOrder, setOnlyShowCancelOrder] = useState(false); |
137 | 140 | const [onlyShowProcureToBeProcessed, setOnlyShowProcureToBeProcessed] = |
138 | 141 | useState(false); |
142 | + const [mainOrderSelectedMap, setMainOrderSelectedMap] = useState(new Map()); //选中的主订单Map | |
143 | + setMainOrderSelectedMap(new Map()); | |
144 | + const [mainOrderSelectedRows, setMainOrderSelectedRows] = useState([]); //选中的主订单集合 | |
139 | 145 | const [onlyShowFinancialToBeProcessed, setOnlyShowFinancialToBeProcessed] = |
140 | 146 | useState(false); |
141 | 147 | const mainTableRef = useRef(); |
... | ... | @@ -273,12 +279,16 @@ const OrderPage = () => { |
273 | 279 | if (selectedItems.includes(record.id)) { |
274 | 280 | newSelectedItems = selectedItems.filter((key) => key !== record.id); |
275 | 281 | setSelectedRowKeys([]); |
282 | + console.log(selectedRowObj); | |
276 | 283 | setSelectedRowObj({ |
277 | 284 | ...setSelectedRowObj, |
278 | 285 | [record.id]: [], |
279 | 286 | }); |
280 | 287 | selectedRowObj[record.id] = []; |
281 | 288 | setSelectedRows([]); |
289 | + | |
290 | + //取消选中主订单 | |
291 | + mainOrderSelectedMap.delete(record.id); | |
282 | 292 | } else { |
283 | 293 | newSelectedItems = [...selectedItems, record.id]; |
284 | 294 | //子订单全部自动选中 |
... | ... | @@ -286,12 +296,16 @@ const OrderPage = () => { |
286 | 296 | return item.id; |
287 | 297 | }); |
288 | 298 | setSelectedRowKeys(subIds); |
299 | + | |
289 | 300 | setSelectedRowObj({ |
290 | 301 | ...setSelectedRowObj, |
291 | 302 | [record.id]: record.subOrderInformationLists, |
292 | 303 | }); |
293 | 304 | selectedRowObj[record.id] = record.subOrderInformationLists; |
294 | 305 | setSelectedRows(record.subOrderInformationLists); |
306 | + | |
307 | + //选中主订单 | |
308 | + mainOrderSelectedMap.set(record.id, record); | |
295 | 309 | } |
296 | 310 | setSelectedItems(newSelectedItems); |
297 | 311 | }; |
... | ... | @@ -302,8 +316,11 @@ const OrderPage = () => { |
302 | 316 | const allMainCheckBoxChange = () => { |
303 | 317 | let checked = !allMainChecked; |
304 | 318 | setAllMainChecked(checked); |
319 | + | |
320 | + mainOrderSelectedMap.clear(); | |
305 | 321 | if (checked) { |
306 | 322 | let mainOrderIds = data?.map((item) => { |
323 | + mainOrderSelectedMap.set(item.id, item); | |
307 | 324 | return item.id; |
308 | 325 | }); |
309 | 326 | |
... | ... | @@ -882,7 +899,7 @@ const OrderPage = () => { |
882 | 899 | '' |
883 | 900 | )} |
884 | 901 | |
885 | - {true ? ( | |
902 | + {false ? ( | |
886 | 903 | <Button |
887 | 904 | className="p-0" |
888 | 905 | type="link" |
... | ... | @@ -2190,7 +2207,45 @@ const OrderPage = () => { |
2190 | 2207 | }} |
2191 | 2208 | disabled={selectedItems?.length === 0} |
2192 | 2209 | > |
2193 | - 合并开票 | |
2210 | + {userInfo?.roleSmallVO?.code === 'admin' ? '合并(销售)' : '合并开票'} | |
2211 | + </Button>, | |
2212 | + ); | |
2213 | + } | |
2214 | + | |
2215 | + if (rolePath?.includes('mergeInvoicing')) { | |
2216 | + toolBtns.push( | |
2217 | + <Button | |
2218 | + type="primary" | |
2219 | + key="out" | |
2220 | + onClick={() => { | |
2221 | + //检查订单状态是否正确 | |
2222 | + // 遍历Map中的键值对 | |
2223 | + let errorIds = []; | |
2224 | + let mainOrders = []; | |
2225 | + mainOrderSelectedMap.forEach((value) => { | |
2226 | + mainOrders.push(value); | |
2227 | + for (let subOrder of value.subOrderInformationLists) { | |
2228 | + if (subOrder.afterInvoicingStatus !== 'APPLY_FOR_INVOICING') { | |
2229 | + errorIds.push(value.id); | |
2230 | + return; | |
2231 | + } | |
2232 | + } | |
2233 | + }); | |
2234 | + if (errorIds.length > 0) { | |
2235 | + message.error( | |
2236 | + '订单号为:' + | |
2237 | + errorIds.join(',') + | |
2238 | + '的订单存在不是[申请开票]状态的子订单,请检查!', | |
2239 | + ); | |
2240 | + return; | |
2241 | + } | |
2242 | + | |
2243 | + setMainOrderSelectedRows(mainOrders); | |
2244 | + setFinancialMergeDrawerVisible(true); | |
2245 | + }} | |
2246 | + disabled={selectedItems?.length === 0} | |
2247 | + > | |
2248 | + {userInfo?.roleSmallVO?.code === 'admin' ? '合并(财务)' : '合并开票'} | |
2194 | 2249 | </Button>, |
2195 | 2250 | ); |
2196 | 2251 | } |
... | ... | @@ -2372,6 +2427,9 @@ const OrderPage = () => { |
2372 | 2427 | total: data?.total || 0, |
2373 | 2428 | }; |
2374 | 2429 | }} |
2430 | + toolbar={{ | |
2431 | + multipleLine: true, | |
2432 | + }} | |
2375 | 2433 | toolBarRender={() => { |
2376 | 2434 | return toolBarRender(); |
2377 | 2435 | }} |
... | ... | @@ -2622,6 +2680,18 @@ const OrderPage = () => { |
2622 | 2680 | /> |
2623 | 2681 | )} |
2624 | 2682 | |
2683 | + {financialMergeDrawerVisible && ( | |
2684 | + <FinancialMergeDrawer | |
2685 | + setVisible={setFinancialMergeDrawerVisible} | |
2686 | + dataList={mainOrderSelectedRows} | |
2687 | + onClose={() => { | |
2688 | + setFinancialMergeDrawerVisible(false); | |
2689 | + setMainOrderSelectedRows([]); | |
2690 | + refreshTable(); | |
2691 | + }} | |
2692 | + /> | |
2693 | + )} | |
2694 | + | |
2625 | 2695 | {financialReceiptsModalVisible && ( |
2626 | 2696 | <FinancialReceiptsModal |
2627 | 2697 | setVisible={setFinancialReceiptsModalVisible} | ... | ... |
src/services/request.ts
... | ... | @@ -26,6 +26,7 @@ import type { |
26 | 26 | DictionaryQueryVO, |
27 | 27 | DictionaryVO, |
28 | 28 | Dto, |
29 | + ModelAndView, | |
29 | 30 | OrderAddVO, |
30 | 31 | OrderAuditLogQueryVO, |
31 | 32 | OrderBaseInfoQueryVO, |
... | ... | @@ -228,9 +229,7 @@ export interface GetErrorResponse { |
228 | 229 | * @description |
229 | 230 | * OK |
230 | 231 | */ |
231 | - 200: { | |
232 | - [propertyName: string]: any; | |
233 | - }; | |
232 | + 200: ModelAndView; | |
234 | 233 | /** |
235 | 234 | * @description |
236 | 235 | * Unauthorized |
... | ... | @@ -251,9 +250,9 @@ export interface GetErrorResponse { |
251 | 250 | export type GetErrorResponseSuccess = GetErrorResponse[200]; |
252 | 251 | /** |
253 | 252 | * @description |
254 | - * error | |
253 | + * errorHtml | |
255 | 254 | * @tags basic-error-controller |
256 | - * @produces * | |
255 | + * @produces text/html | |
257 | 256 | */ |
258 | 257 | export const getError = /* #__PURE__ */ (() => { |
259 | 258 | const method = 'get'; |
... | ... | @@ -277,9 +276,7 @@ export interface PutErrorResponse { |
277 | 276 | * @description |
278 | 277 | * OK |
279 | 278 | */ |
280 | - 200: { | |
281 | - [propertyName: string]: any; | |
282 | - }; | |
279 | + 200: ModelAndView; | |
283 | 280 | /** |
284 | 281 | * @description |
285 | 282 | * Created |
... | ... | @@ -305,9 +302,9 @@ export interface PutErrorResponse { |
305 | 302 | export type PutErrorResponseSuccess = PutErrorResponse[200]; |
306 | 303 | /** |
307 | 304 | * @description |
308 | - * error | |
305 | + * errorHtml | |
309 | 306 | * @tags basic-error-controller |
310 | - * @produces * | |
307 | + * @produces text/html | |
311 | 308 | * @consumes application/json |
312 | 309 | */ |
313 | 310 | export const putError = /* #__PURE__ */ (() => { |
... | ... | @@ -332,9 +329,7 @@ export interface PostErrorResponse { |
332 | 329 | * @description |
333 | 330 | * OK |
334 | 331 | */ |
335 | - 200: { | |
336 | - [propertyName: string]: any; | |
337 | - }; | |
332 | + 200: ModelAndView; | |
338 | 333 | /** |
339 | 334 | * @description |
340 | 335 | * Created |
... | ... | @@ -360,9 +355,9 @@ export interface PostErrorResponse { |
360 | 355 | export type PostErrorResponseSuccess = PostErrorResponse[200]; |
361 | 356 | /** |
362 | 357 | * @description |
363 | - * error | |
358 | + * errorHtml | |
364 | 359 | * @tags basic-error-controller |
365 | - * @produces * | |
360 | + * @produces text/html | |
366 | 361 | * @consumes application/json |
367 | 362 | */ |
368 | 363 | export const postError = /* #__PURE__ */ (() => { |
... | ... | @@ -387,9 +382,7 @@ export interface DeleteErrorResponse { |
387 | 382 | * @description |
388 | 383 | * OK |
389 | 384 | */ |
390 | - 200: { | |
391 | - [propertyName: string]: any; | |
392 | - }; | |
385 | + 200: ModelAndView; | |
393 | 386 | /** |
394 | 387 | * @description |
395 | 388 | * No Content |
... | ... | @@ -410,9 +403,9 @@ export interface DeleteErrorResponse { |
410 | 403 | export type DeleteErrorResponseSuccess = DeleteErrorResponse[200]; |
411 | 404 | /** |
412 | 405 | * @description |
413 | - * error | |
406 | + * errorHtml | |
414 | 407 | * @tags basic-error-controller |
415 | - * @produces * | |
408 | + * @produces text/html | |
416 | 409 | */ |
417 | 410 | export const deleteError = /* #__PURE__ */ (() => { |
418 | 411 | const method = 'delete'; |
... | ... | @@ -436,9 +429,7 @@ export interface OptionsErrorResponse { |
436 | 429 | * @description |
437 | 430 | * OK |
438 | 431 | */ |
439 | - 200: { | |
440 | - [propertyName: string]: any; | |
441 | - }; | |
432 | + 200: ModelAndView; | |
442 | 433 | /** |
443 | 434 | * @description |
444 | 435 | * No Content |
... | ... | @@ -459,9 +450,9 @@ export interface OptionsErrorResponse { |
459 | 450 | export type OptionsErrorResponseSuccess = OptionsErrorResponse[200]; |
460 | 451 | /** |
461 | 452 | * @description |
462 | - * error | |
453 | + * errorHtml | |
463 | 454 | * @tags basic-error-controller |
464 | - * @produces * | |
455 | + * @produces text/html | |
465 | 456 | * @consumes application/json |
466 | 457 | */ |
467 | 458 | export const optionsError = /* #__PURE__ */ (() => { |
... | ... | @@ -486,9 +477,7 @@ export interface HeadErrorResponse { |
486 | 477 | * @description |
487 | 478 | * OK |
488 | 479 | */ |
489 | - 200: { | |
490 | - [propertyName: string]: any; | |
491 | - }; | |
480 | + 200: ModelAndView; | |
492 | 481 | /** |
493 | 482 | * @description |
494 | 483 | * No Content |
... | ... | @@ -509,9 +498,9 @@ export interface HeadErrorResponse { |
509 | 498 | export type HeadErrorResponseSuccess = HeadErrorResponse[200]; |
510 | 499 | /** |
511 | 500 | * @description |
512 | - * error | |
501 | + * errorHtml | |
513 | 502 | * @tags basic-error-controller |
514 | - * @produces * | |
503 | + * @produces text/html | |
515 | 504 | * @consumes application/json |
516 | 505 | */ |
517 | 506 | export const headError = /* #__PURE__ */ (() => { |
... | ... | @@ -536,9 +525,7 @@ export interface PatchErrorResponse { |
536 | 525 | * @description |
537 | 526 | * OK |
538 | 527 | */ |
539 | - 200: { | |
540 | - [propertyName: string]: any; | |
541 | - }; | |
528 | + 200: ModelAndView; | |
542 | 529 | /** |
543 | 530 | * @description |
544 | 531 | * No Content |
... | ... | @@ -559,9 +546,9 @@ export interface PatchErrorResponse { |
559 | 546 | export type PatchErrorResponseSuccess = PatchErrorResponse[200]; |
560 | 547 | /** |
561 | 548 | * @description |
562 | - * error | |
549 | + * errorHtml | |
563 | 550 | * @tags basic-error-controller |
564 | - * @produces * | |
551 | + * @produces text/html | |
565 | 552 | * @consumes application/json |
566 | 553 | */ |
567 | 554 | export const patchError = /* #__PURE__ */ (() => { |
... | ... | @@ -580,6 +567,54 @@ export const patchError = /* #__PURE__ */ (() => { |
580 | 567 | return request; |
581 | 568 | })(); |
582 | 569 | |
570 | +/** @description response type for getKingdeeTestGetToken */ | |
571 | +export interface GetKingdeeTestGetTokenResponse { | |
572 | + /** | |
573 | + * @description | |
574 | + * OK | |
575 | + */ | |
576 | + 200: string; | |
577 | + /** | |
578 | + * @description | |
579 | + * Unauthorized | |
580 | + */ | |
581 | + 401: any; | |
582 | + /** | |
583 | + * @description | |
584 | + * Forbidden | |
585 | + */ | |
586 | + 403: any; | |
587 | + /** | |
588 | + * @description | |
589 | + * Not Found | |
590 | + */ | |
591 | + 404: any; | |
592 | +} | |
593 | + | |
594 | +export type GetKingdeeTestGetTokenResponseSuccess = | |
595 | + GetKingdeeTestGetTokenResponse[200]; | |
596 | +/** | |
597 | + * @description | |
598 | + * getToken | |
599 | + * @tags kingdee-test-controller | |
600 | + * @produces * | |
601 | + */ | |
602 | +export const getKingdeeTestGetToken = /* #__PURE__ */ (() => { | |
603 | + const method = 'get'; | |
604 | + const url = '/kingdee/test/getToken'; | |
605 | + function request(): Promise<GetKingdeeTestGetTokenResponseSuccess> { | |
606 | + return requester(request.url, { | |
607 | + method: request.method, | |
608 | + }) as unknown as Promise<GetKingdeeTestGetTokenResponseSuccess>; | |
609 | + } | |
610 | + | |
611 | + /** http method */ | |
612 | + request.method = method; | |
613 | + /** request url */ | |
614 | + request.url = url; | |
615 | + return request; | |
616 | +})(); | |
617 | + | |
583 | 618 | /** @description request parameter type for postOfficialWebsiteUploadAliOss */ |
584 | 619 | export interface PostOfficialWebsiteUploadAliOssOption { |
585 | 620 | /** |
... | ... | @@ -5858,18 +5893,13 @@ export const postServiceOrderInvoicing = /* #__PURE__ */ (() => { |
5858 | 5893 | export interface PostServiceOrderMergeApplyInvoicingOption { |
5859 | 5894 | /** |
5860 | 5895 | * @description |
5861 | - * 销售发起开票备注 | |
5896 | + * dto | |
5862 | 5897 | */ |
5863 | - query?: { | |
5864 | - /** | |
5865 | - @description | |
5866 | - 销售发起开票备注 */ | |
5867 | - applyInvoicingNotes?: string; | |
5868 | - 'filePaths[0].url'?: string; | |
5898 | + body: { | |
5869 | 5899 | /** |
5870 | 5900 | @description |
5871 | - 主订单id集合 */ | |
5872 | - mainOrderIds?: Array<number>; | |
5901 | + dto */ | |
5902 | + dto: Dto; | |
5873 | 5903 | }; |
5874 | 5904 | } |
5875 | 5905 | |
... | ... | @@ -5915,7 +5945,7 @@ export const postServiceOrderMergeApplyInvoicing = /* #__PURE__ */ (() => { |
5915 | 5945 | const method = 'post'; |
5916 | 5946 | const url = '/service/order/mergeApplyInvoicing'; |
5917 | 5947 | function request( |
5918 | - option?: PostServiceOrderMergeApplyInvoicingOption, | |
5948 | + option: PostServiceOrderMergeApplyInvoicingOption, | |
5919 | 5949 | ): Promise<PostServiceOrderMergeApplyInvoicingResponseSuccess> { |
5920 | 5950 | return requester(request.url, { |
5921 | 5951 | method: request.method, |
... | ... | @@ -5930,6 +5960,77 @@ export const postServiceOrderMergeApplyInvoicing = /* #__PURE__ */ (() => { |
5930 | 5960 | return request; |
5931 | 5961 | })(); |
5932 | 5962 | |
5963 | +/** @description request parameter type for postServiceOrderMergeInvoicing */ | |
5964 | +export interface PostServiceOrderMergeInvoicingOption { | |
5965 | + /** | |
5966 | + * @description | |
5967 | + * dto | |
5968 | + */ | |
5969 | + body: { | |
5970 | + /** | |
5971 | + @description | |
5972 | + dto */ | |
5973 | + dto: Dto; | |
5974 | + }; | |
5975 | +} | |
5976 | + | |
5977 | +/** @description response type for postServiceOrderMergeInvoicing */ | |
5978 | +export interface PostServiceOrderMergeInvoicingResponse { | |
5979 | + /** | |
5980 | + * @description | |
5981 | + * OK | |
5982 | + */ | |
5983 | + 200: ServerResult; | |
5984 | + /** | |
5985 | + * @description | |
5986 | + * Created | |
5987 | + */ | |
5988 | + 201: any; | |
5989 | + /** | |
5990 | + * @description | |
5991 | + * Unauthorized | |
5992 | + */ | |
5993 | + 401: any; | |
5994 | + /** | |
5995 | + * @description | |
5996 | + * Forbidden | |
5997 | + */ | |
5998 | + 403: any; | |
5999 | + /** | |
6000 | + * @description | |
6001 | + * Not Found | |
6002 | + */ | |
6003 | + 404: any; | |
6004 | +} | |
6005 | + | |
6006 | +export type PostServiceOrderMergeInvoicingResponseSuccess = | |
6007 | + PostServiceOrderMergeInvoicingResponse[200]; | |
6008 | +/** | |
6009 | + * @description | |
6010 | + * 财务合并开票 | |
6011 | + * @tags 内部订单 | |
6012 | + * @produces * | |
6013 | + * @consumes application/json | |
6014 | + */ | |
6015 | +export const postServiceOrderMergeInvoicing = /* #__PURE__ */ (() => { | |
6016 | + const method = 'post'; | |
6017 | + const url = '/service/order/mergeInvoicing'; | |
6018 | + function request( | |
6019 | + option: PostServiceOrderMergeInvoicingOption, | |
6020 | + ): Promise<PostServiceOrderMergeInvoicingResponseSuccess> { | |
6021 | + return requester(request.url, { | |
6022 | + method: request.method, | |
6023 | + ...option, | |
6024 | + }) as unknown as Promise<PostServiceOrderMergeInvoicingResponseSuccess>; | |
6025 | + } | |
6026 | + | |
6027 | + /** http method */ | |
6028 | + request.method = method; | |
6029 | + /** request url */ | |
6030 | + request.url = url; | |
6031 | + return request; | |
6032 | +})(); | |
6033 | + | |
5933 | 6034 | /** @description request parameter type for postServiceOrderNoNeedInvoicingEdit */ |
5934 | 6035 | export interface PostServiceOrderNoNeedInvoicingEditOption { |
5935 | 6036 | /** | ... | ... |