Commit 3fca9d3d5e57c457d59f1732ee3987a60125de1b
1 parent
77557615
分期订单
Showing
14 changed files
with
2850 additions
and
170 deletions
Too many changes to show.
To preserve performance only 14 of 15 files are displayed.
.umirc.ts
@@ -59,6 +59,13 @@ export default defineConfig({ | @@ -59,6 +59,13 @@ export default defineConfig({ | ||
59 | access: 'canReadAdminAndFinance', | 59 | access: 'canReadAdminAndFinance', |
60 | }, | 60 | }, |
61 | { | 61 | { |
62 | + name: '分期账单', | ||
63 | + path: '/instalment', | ||
64 | + component: './Instalment', | ||
65 | + icon: 'BookOutlined', | ||
66 | + access: 'canReadAdminAndFinance', | ||
67 | + }, | ||
68 | + { | ||
62 | name: '打印', | 69 | name: '打印', |
63 | path: '/print', | 70 | path: '/print', |
64 | component: './OrderPrint', | 71 | component: './OrderPrint', |
src/pages/Instalment/components/detail/detail.tsx
0 → 100644
1 | +import { PlusOutlined } from '@ant-design/icons'; | ||
2 | +import { | ||
3 | + ModalForm, | ||
4 | + ProCard, | ||
5 | + ProForm, | ||
6 | + ProFormDatePicker, | ||
7 | + ProFormText, | ||
8 | + ProFormTextArea, | ||
9 | + ProFormUploadButton, | ||
10 | +} from '@ant-design/pro-components'; | ||
11 | +import ProductDetail from '../productDetail/productDetail'; | ||
12 | +import PayWayDetail from '../payWayDetail/payWayDetail'; | ||
13 | +import { Button, Form,message } from 'antd'; | ||
14 | +import { useEffect,useState } from 'react'; | ||
15 | +import { postOrderErpOrderStagesPayWaySaveOrUpdate, postOrderErpOrderStagesSaveOrUpdate, postOrderErpOrderStagesSearch, postOrderErpOrderStagesUpload } from '@/services'; | ||
16 | +import { RcFile } from 'antd/es/upload'; | ||
17 | + | ||
18 | +const waitTime = (time: number = 100) => { | ||
19 | + return new Promise((resolve) => { | ||
20 | + setTimeout(() => { | ||
21 | + resolve(true); | ||
22 | + }, time); | ||
23 | + }); | ||
24 | +}; | ||
25 | + | ||
26 | +export default ({ toReload }) => { | ||
27 | + const [form] = Form.useForm<{ name: string; company: string }>(); | ||
28 | + const [contextBody, setContextBody] = useState<OrderStagesWithListItem>({ | ||
29 | + id:undefined, | ||
30 | + contract:undefined, | ||
31 | + dateRange:undefined, | ||
32 | + terminal:undefined, | ||
33 | + orderStagesDeviceVoList:[], | ||
34 | + totalPrice:undefined, | ||
35 | + payWay:"30/30/30/10", | ||
36 | + annex:undefined, | ||
37 | + remark:undefined | ||
38 | + }); | ||
39 | + const [editProductBody, setEditProductBody] = useState([]); | ||
40 | + const [total, setTotal] = useState(0); | ||
41 | + const [payWayBody, setPayWayBody] = useState([]) | ||
42 | + const [otherBody, setOtherBody] = useState([]) | ||
43 | + const [isDis,setIsDis]=useState(true) | ||
44 | + | ||
45 | + | ||
46 | + type OrderStagesWithListItem = { | ||
47 | + //文件编号 | ||
48 | + id?: number; | ||
49 | + //合同编号 | ||
50 | + contract?: string; | ||
51 | + //供应商名称 | ||
52 | + vendor?: string; | ||
53 | + //签合同日期 | ||
54 | + dateRange?: Date; | ||
55 | + //终端名称 | ||
56 | + terminal?: string; | ||
57 | + orderStagesDeviceVoList: orderStagesDevice[] | ||
58 | + //合同总金额 | ||
59 | + totalPrice?: number; | ||
60 | + //付款方式 | ||
61 | + payWay?: string; | ||
62 | + //附件 | ||
63 | + annex?: string; | ||
64 | + //备注 | ||
65 | + remark?: string; | ||
66 | + }; | ||
67 | + | ||
68 | + type orderStagesDevice = { | ||
69 | + //设备id | ||
70 | + dId: number; | ||
71 | + //设备名称 | ||
72 | + deviceName: string; | ||
73 | + //设备型号 | ||
74 | + deviceModel: string; | ||
75 | + //数量 | ||
76 | + count: number; | ||
77 | + //单价 | ||
78 | + unitPrice: number; | ||
79 | + //总价 | ||
80 | + price: number; | ||
81 | + } | ||
82 | + | ||
83 | + function getEditProductBody(value) { | ||
84 | + console.log(value); | ||
85 | + | ||
86 | + setEditProductBody(value) | ||
87 | + let price = 0; | ||
88 | + value.map(obj => ( | ||
89 | + price += (obj.count * obj.unitPrice) | ||
90 | + )); | ||
91 | + setTotal(price); | ||
92 | + setContextBody({ ...contextBody, orderStagesDeviceVoList: value }) | ||
93 | + if (contextBody.payWay==="") { | ||
94 | + handleInputChange("30/30/30/10", 0, price) | ||
95 | + }else{ | ||
96 | + handleInputChange(contextBody.payWay, 0, price) | ||
97 | + } | ||
98 | + } | ||
99 | + [] | ||
100 | + function setSave(value) { | ||
101 | + console.log(value); | ||
102 | + setOtherBody(value) | ||
103 | + } | ||
104 | + | ||
105 | + useEffect(() => { | ||
106 | + setContextBody({ ...contextBody, totalPrice: total }) | ||
107 | + form.setFieldValue('totalPrice', total); | ||
108 | + }, [total]) | ||
109 | + | ||
110 | + const handleInputChange = (value: string, no: number, priceNow?: number) => { | ||
111 | + if (value==="") { | ||
112 | + message.info("请输入比例!") | ||
113 | + }else{ | ||
114 | + let totalPay = 0; | ||
115 | + const payValue: string[] = value.split("/") | ||
116 | + let body: ((prevState: never[]) => never[]) | { proportion: string; payPrice: number; }[] = []; | ||
117 | + if (no === 1) { | ||
118 | + if (payValue.length !== 4) { | ||
119 | + message.warning('比例个数总和不为4个!'); | ||
120 | + } else { | ||
121 | + payValue.forEach((item, index) => { | ||
122 | + totalPay += Number(item) | ||
123 | + }) | ||
124 | + } | ||
125 | + if (totalPay != 100) { | ||
126 | + message.warning('比例总和不为100!'); | ||
127 | + } else { | ||
128 | + message.success('输入有效!'); | ||
129 | + payValue.forEach((item, index) => { | ||
130 | + body.push({ proportion: item + "%", payPrice: Number(item) * total / 100 }) | ||
131 | + }) | ||
132 | + setPayWayBody(body) | ||
133 | + } | ||
134 | + } else { | ||
135 | + payValue.forEach((item, index) => { | ||
136 | + totalPay += Number(item) | ||
137 | + }) | ||
138 | + payValue.forEach((item, index) => { | ||
139 | + body.push({ proportion: item + "%", payPrice: Number(item) * priceNow / 100 }) | ||
140 | + }) | ||
141 | + setPayWayBody(body) | ||
142 | + } | ||
143 | + } | ||
144 | + }; | ||
145 | + | ||
146 | + return ( | ||
147 | + <ModalForm<OrderStagesWithListItem> | ||
148 | + title="新建" | ||
149 | + trigger={ | ||
150 | + <Button | ||
151 | + key="button" | ||
152 | + icon={<PlusOutlined />} | ||
153 | + type="primary" | ||
154 | + > | ||
155 | + 新增 | ||
156 | + </Button> | ||
157 | + } | ||
158 | + form={form} | ||
159 | + autoFocusFirstInput | ||
160 | + modalProps={{ | ||
161 | + destroyOnClose: true, | ||
162 | + onCancel: () => console.log('run'), | ||
163 | + }} | ||
164 | + onChange={(value) => { | ||
165 | + console.log(value); | ||
166 | + }} | ||
167 | + submitTimeout={2000} | ||
168 | + onFinish={async (values) => { | ||
169 | + console.log(values); | ||
170 | + console.log(otherBody); | ||
171 | + let remakeValue = []; | ||
172 | + let remakeItem = {} | ||
173 | + | ||
174 | + const formData = new FormData(); | ||
175 | + // let toSendEdit={...values,orderStagesDeviceVoList:contextBody.orderStagesDeviceVoList}; | ||
176 | + let toSendEdit = { | ||
177 | + id: values.id || contextBody.id, | ||
178 | + contract: values.contract || contextBody.contract, | ||
179 | + vendor: values.vendor || contextBody.vendor, | ||
180 | + dateRange: values.dateRange || contextBody.dateRange, | ||
181 | + terminal: values.terminal || contextBody.terminal, | ||
182 | + orderStagesDeviceDoList: values.orderStagesDeviceVoList || contextBody.orderStagesDeviceVoList, | ||
183 | + totalPrice: values.totalPrice || contextBody.totalPrice, | ||
184 | + payWay: values.payWay || contextBody.payWay, | ||
185 | + annex: contextBody.annex, | ||
186 | + remark: values.remark || contextBody.remark, | ||
187 | + }; | ||
188 | + if (values.annex) { | ||
189 | + formData.append('file', values.annex[0].originFileObj as RcFile); | ||
190 | + const res = await postOrderErpOrderStagesUpload({ | ||
191 | + data: formData, | ||
192 | + headers: { | ||
193 | + 'Content-Type': | ||
194 | + 'multipart/form-data; boundary=----WebKitFormBoundarynl6gT1BKdPWIejNq', | ||
195 | + } | ||
196 | + }); | ||
197 | + if (res.data) { | ||
198 | + console.log(values) | ||
199 | + console.log(contextBody); | ||
200 | + toSendEdit.annex = res.data | ||
201 | + } | ||
202 | + } | ||
203 | + const isSaveOrUpdate = await postOrderErpOrderStagesSaveOrUpdate({ | ||
204 | + data: { ...toSendEdit } | ||
205 | + }) | ||
206 | + | ||
207 | + if (isSaveOrUpdate) { | ||
208 | + // 创建一个用于存储所有异步操作的Promise数组 | ||
209 | + const promises = []; | ||
210 | + | ||
211 | + otherBody.forEach(item => { | ||
212 | + let remakeItem = { ossId: item.ossId, number: item.id, dataRange: item.payDate, fileName: item.fileName }; | ||
213 | + if (typeof item.fileUrl === 'object' && item.fileUrl instanceof File) { | ||
214 | + const formData = new FormData(); | ||
215 | + formData.append('file', item.fileUrl as RcFile); | ||
216 | + const uploadPromise = async () => { | ||
217 | + const res = await postOrderErpOrderStagesUpload({ | ||
218 | + data: formData, | ||
219 | + headers: { | ||
220 | + 'Content-Type': 'multipart/form-data; boundary=----WebKitFormBoundarynl6gT1BKdPWIejNq', | ||
221 | + } | ||
222 | + }); | ||
223 | + if (res.data) { | ||
224 | + remakeItem.fileUrl = res.data; | ||
225 | + } | ||
226 | + }; | ||
227 | + promises.push(uploadPromise()); | ||
228 | + } | ||
229 | + remakeValue.push(remakeItem); | ||
230 | + }); | ||
231 | + | ||
232 | + let makeEnd=[] | ||
233 | + const getRetrunIDPromise=async()=>{ | ||
234 | + let returnOssID=await postOrderErpOrderStagesSearch({ | ||
235 | + data:{contract: values.contract || contextBody.contract,}, | ||
236 | + }) | ||
237 | + console.log(returnOssID.data); | ||
238 | + | ||
239 | + if (returnOssID) { | ||
240 | + makeEnd = remakeValue.map(item => { | ||
241 | + return { ...item, ossId: returnOssID.data[0].id }; | ||
242 | + }); | ||
243 | + | ||
244 | + console.log(makeEnd); | ||
245 | + } | ||
246 | + } | ||
247 | + | ||
248 | + promises.push(getRetrunIDPromise()); | ||
249 | + | ||
250 | + // 使用Promise.all等待所有异步操作完成后再执行保存操作 | ||
251 | + Promise.all(promises).then( | ||
252 | + async () => { | ||
253 | + console.log(makeEnd); | ||
254 | + await postOrderErpOrderStagesPayWaySaveOrUpdate({ | ||
255 | + data: makeEnd | ||
256 | + }); | ||
257 | + }); | ||
258 | + console.log(isSaveOrUpdate); | ||
259 | + toReload() | ||
260 | + } | ||
261 | + await waitTime(2000); | ||
262 | + message.success('提交成功'); | ||
263 | + return true; | ||
264 | + }} | ||
265 | + > | ||
266 | + <ProCard | ||
267 | + title="基本信息" | ||
268 | + headerBordered | ||
269 | + bordered | ||
270 | + > | ||
271 | + <ProForm.Group> | ||
272 | + <ProFormText | ||
273 | + width="md" | ||
274 | + name="vendor" | ||
275 | + rules={[{ required: true, message: '此项为必填项' }]} | ||
276 | + label="供应商名称" | ||
277 | + placeholder="请输入" | ||
278 | + initialValue={contextBody.vendor} | ||
279 | + /> | ||
280 | + | ||
281 | + <ProFormText | ||
282 | + width="md" | ||
283 | + name="terminal" | ||
284 | + rules={[{ required: true, message: '此项为必填项' }]} | ||
285 | + label="终端名称" | ||
286 | + placeholder="请输入" | ||
287 | + initialValue={contextBody.terminal} | ||
288 | + /> | ||
289 | + | ||
290 | + <ProFormDatePicker | ||
291 | + name="dateRange" | ||
292 | + width="md" | ||
293 | + label="签合同日期" | ||
294 | + placeholder="请选择日期" | ||
295 | + fieldProps={{ | ||
296 | + format: (value) => value.format('YYYY-MM-DD'), | ||
297 | + }} | ||
298 | + initialValue={contextBody.dateRange} | ||
299 | + /> | ||
300 | + | ||
301 | + <ProFormText | ||
302 | + width="md" | ||
303 | + name="payWay" | ||
304 | + rules={[{ required: true, message: '此项为必填项' }]} | ||
305 | + label="付款比例" | ||
306 | + placeholder="请输入" | ||
307 | + initialValue={contextBody.payWay} | ||
308 | + disabled={!isDis} | ||
309 | + // onBlur={(e) => { | ||
310 | + // setContextBody({...contextBody,payWay:e.target.value}) | ||
311 | + // handleInputChange(e.target.value, 1); | ||
312 | + // }} | ||
313 | + /> | ||
314 | + | ||
315 | + <ProFormText | ||
316 | + width="md" | ||
317 | + name="contract" | ||
318 | + rules={[{ required: true, message: '此项为必填项' }]} | ||
319 | + label="合同编号" | ||
320 | + placeholder="请输入" | ||
321 | + initialValue={contextBody.contract} | ||
322 | + /> | ||
323 | + | ||
324 | + <ProFormUploadButton width="md" | ||
325 | + name="annex" | ||
326 | + max={1} | ||
327 | + onChange={(value) => { | ||
328 | + console.log(value); | ||
329 | + }} | ||
330 | + label="合同附件" /> | ||
331 | + | ||
332 | + <ProFormText | ||
333 | + width="md" | ||
334 | + name="totalPrice" | ||
335 | + label="合同金额" | ||
336 | + placeholder="请输入" | ||
337 | + // rules={[{ required: true, message: '此项为必填项' }]} | ||
338 | + // value={contextBody.totalPrice} | ||
339 | + // onBlur={(e) => { | ||
340 | + // if (e.target.value !== '0') { | ||
341 | + // setIsDis(false); | ||
342 | + // setTotal(e.target.value); | ||
343 | + // } else { | ||
344 | + // setIsDis(true); | ||
345 | + // } | ||
346 | + // }} | ||
347 | + disabled={isDis} | ||
348 | + initialValue={"0"} | ||
349 | + /> | ||
350 | + </ProForm.Group> | ||
351 | + </ProCard> | ||
352 | + <ProCard | ||
353 | + title="产品明细" | ||
354 | + style={{ marginTop: 10 }} | ||
355 | + headerBordered | ||
356 | + bordered | ||
357 | + > | ||
358 | + <ProductDetail productBody={[]} EditProductBody={getEditProductBody}></ProductDetail> | ||
359 | + </ProCard> | ||
360 | + | ||
361 | + <ProCard | ||
362 | + title="付款信息" | ||
363 | + style={{ marginTop: 10 }} | ||
364 | + headerBordered | ||
365 | + bordered | ||
366 | + > | ||
367 | + <PayWayDetail payBody={payWayBody} thisId={null} currtSave={setSave}></PayWayDetail> | ||
368 | + </ProCard> | ||
369 | + | ||
370 | + <ProCard | ||
371 | + style={{ marginTop: 10 }} | ||
372 | + headerBordered | ||
373 | + bordered | ||
374 | + > | ||
375 | + <ProFormTextArea label="备注" name="remark" initialValue={contextBody.remark} /> | ||
376 | + </ProCard> | ||
377 | + </ModalForm> | ||
378 | + ); | ||
379 | +}; | ||
0 | \ No newline at end of file | 380 | \ No newline at end of file |
src/pages/Instalment/components/edit/edit.tsx
0 → 100644
1 | +import { | ||
2 | + ModalForm, | ||
3 | + ProCard, | ||
4 | + ProForm, | ||
5 | + ProFormDatePicker, | ||
6 | + ProFormText, | ||
7 | + ProFormTextArea, | ||
8 | + ProFormUploadButton, | ||
9 | +} from '@ant-design/pro-components'; | ||
10 | +import ProductDetail from '../productDetail/productDetail'; | ||
11 | +import PayWayDetail from '../payWayDetail/payWayDetail'; | ||
12 | +import { Form,message } from 'antd'; | ||
13 | +import { useEffect, useState } from 'react'; | ||
14 | +import { postOrderErpOrderStagesPayWaySaveOrUpdate, postOrderErpOrderStagesSaveOrUpdate, postOrderErpOrderStagesSearch, postOrderErpOrderStagesUpload } from '@/services'; | ||
15 | +import { RcFile } from 'antd/es/upload'; | ||
16 | + | ||
17 | +const waitTime = (time: number = 100) => { | ||
18 | + return new Promise((resolve) => { | ||
19 | + setTimeout(() => { | ||
20 | + resolve(true); | ||
21 | + }, time); | ||
22 | + }); | ||
23 | +}; | ||
24 | + | ||
25 | +export default ({ currentContract,toReload }) => { | ||
26 | + const [form] = Form.useForm<{ name: string; company: string }>(); | ||
27 | + const [contextBody, setContextBody] = useState({}); | ||
28 | + const [editProductBody, setEditProductBody] = useState([]); | ||
29 | + const [total, setTotal] = useState(0); | ||
30 | + const [payWayBody, setPayWayBody] = useState([]) | ||
31 | + const [otherBody, setOtherBody] = useState([]) | ||
32 | + | ||
33 | + type OrderStagesWithListItem = { | ||
34 | + //文件编号 | ||
35 | + id: number; | ||
36 | + //合同编号 | ||
37 | + contract: string; | ||
38 | + //供应商名称 | ||
39 | + vendor: string; | ||
40 | + //签合同日期 | ||
41 | + dateRange: Date; | ||
42 | + //终端名称 | ||
43 | + terminal: string; | ||
44 | + orderStagesDeviceVoList: orderStagesDevice[] | ||
45 | + //合同总金额 | ||
46 | + totalPrice: number; | ||
47 | + //付款方式 | ||
48 | + payWay: string; | ||
49 | + //附件 | ||
50 | + annex: string; | ||
51 | + //备注 | ||
52 | + remark: string; | ||
53 | + }; | ||
54 | + | ||
55 | + type orderStagesDevice = { | ||
56 | + //设备id | ||
57 | + dId: number; | ||
58 | + //设备名称 | ||
59 | + deviceName: string; | ||
60 | + //设备型号 | ||
61 | + deviceModel: string; | ||
62 | + //数量 | ||
63 | + count: number; | ||
64 | + //单价 | ||
65 | + unitPrice: number; | ||
66 | + //总价 | ||
67 | + price: number; | ||
68 | + } | ||
69 | + | ||
70 | + async function getBody() { | ||
71 | + const res = await postOrderErpOrderStagesSearch({ | ||
72 | + data: { contract: currentContract }, | ||
73 | + }); | ||
74 | + const context = res.data[0]; | ||
75 | + console.log(context); | ||
76 | + | ||
77 | + if (context.contract != null) { | ||
78 | + setContextBody(context); | ||
79 | + setTotal(context.totalPrice) | ||
80 | + form.setFieldValue('totalPrice', context.totalPrice); | ||
81 | + } | ||
82 | + handleInputChange(context.payWay, 0, context.totalPrice) | ||
83 | + } | ||
84 | + | ||
85 | + function getEditProductBody(value) { | ||
86 | + console.log(value); | ||
87 | + | ||
88 | + setEditProductBody(value) | ||
89 | + let price = 0; | ||
90 | + value.map(obj => ( | ||
91 | + price += (obj.count * obj.unitPrice) | ||
92 | + )); | ||
93 | + setTotal(price); | ||
94 | + setContextBody({ ...contextBody, orderStagesDeviceVoList: value }) | ||
95 | + handleInputChange(contextBody.payWay, 0, price) | ||
96 | + } | ||
97 | + [] | ||
98 | + function setSave(value) { | ||
99 | + console.log(value); | ||
100 | + setOtherBody(value) | ||
101 | + } | ||
102 | + | ||
103 | + useEffect(() => { | ||
104 | + setContextBody({ ...contextBody, totalPrice: total }) | ||
105 | + form.setFieldValue('totalPrice', total); | ||
106 | + }, [total]) | ||
107 | + | ||
108 | + useEffect(() => { | ||
109 | + getBody() | ||
110 | + }, []) | ||
111 | + | ||
112 | + const handleInputChange = (value: string, no: number, priceNow?: number) => { | ||
113 | + let totalPay = 0; | ||
114 | + const payValue: string[] = value.split("/") | ||
115 | + let body: ((prevState: never[]) => never[]) | { proportion: string; payPrice: number; }[] = []; | ||
116 | + if (no === 1) { | ||
117 | + if (payValue.length !== 4) { | ||
118 | + message.warning('比例个数总和不为4个!'); | ||
119 | + } else { | ||
120 | + payValue.forEach((item, index) => { | ||
121 | + totalPay += Number(item) | ||
122 | + }) | ||
123 | + } | ||
124 | + if (totalPay != 100) { | ||
125 | + message.warning('比例总和不为100!'); | ||
126 | + } else { | ||
127 | + message.success('输入有效!'); | ||
128 | + const price = total | ||
129 | + payValue.forEach((item, index) => { | ||
130 | + body.push({ proportion: item + "%", payPrice: Number(item) * price / 100 }) | ||
131 | + }) | ||
132 | + setPayWayBody(body) | ||
133 | + } | ||
134 | + } else { | ||
135 | + payValue.forEach((item, index) => { | ||
136 | + totalPay += Number(item) | ||
137 | + }) | ||
138 | + payValue.forEach((item, index) => { | ||
139 | + body.push({ proportion: item + "%", payPrice: Number(item) * priceNow / 100 }) | ||
140 | + }) | ||
141 | + setPayWayBody(body) | ||
142 | + } | ||
143 | + }; | ||
144 | + | ||
145 | + return ( | ||
146 | + <ModalForm<OrderStagesWithListItem> | ||
147 | + title="新建" | ||
148 | + trigger={ | ||
149 | + <a> | ||
150 | + 编辑 | ||
151 | + </a> | ||
152 | + } | ||
153 | + form={form} | ||
154 | + autoFocusFirstInput | ||
155 | + modalProps={{ | ||
156 | + destroyOnClose: true, | ||
157 | + onCancel: () => console.log('run'), | ||
158 | + }} | ||
159 | + submitTimeout={2000} | ||
160 | + onFinish={async (values) => { | ||
161 | + console.log(values); | ||
162 | + console.log(otherBody); | ||
163 | + let remakeValue = []; | ||
164 | + let remakeItem = {} | ||
165 | + // 创建一个用于存储所有异步操作的Promise数组 | ||
166 | + const promises = []; | ||
167 | + | ||
168 | + otherBody.forEach(item => { | ||
169 | + let remakeItem = { ossId: item.ossId, number: item.id, dataRange: item.payDate, fileName: item.fileName }; | ||
170 | + if (typeof item.fileUrl === 'object' && item.fileUrl instanceof File) { | ||
171 | + const formData = new FormData(); | ||
172 | + formData.append('file', item.fileUrl as RcFile); | ||
173 | + const uploadPromise = async () => { | ||
174 | + const res = await postOrderErpOrderStagesUpload({ | ||
175 | + data: formData, | ||
176 | + headers: { | ||
177 | + 'Content-Type': 'multipart/form-data; boundary=----WebKitFormBoundarynl6gT1BKdPWIejNq', | ||
178 | + } | ||
179 | + }); | ||
180 | + if (res.data) { | ||
181 | + remakeItem.fileUrl = res.data; | ||
182 | + } | ||
183 | + }; | ||
184 | + promises.push(uploadPromise()); | ||
185 | + } | ||
186 | + remakeValue.push(remakeItem); | ||
187 | + }); | ||
188 | + | ||
189 | + // 使用Promise.all等待所有异步操作完成后再执行保存操作 | ||
190 | + Promise.all(promises).then(async () => { | ||
191 | + const resp = await postOrderErpOrderStagesPayWaySaveOrUpdate({ | ||
192 | + data: remakeValue | ||
193 | + }); | ||
194 | + }); | ||
195 | + const formData = new FormData(); | ||
196 | + // let toSendEdit={...values,orderStagesDeviceVoList:contextBody.orderStagesDeviceVoList}; | ||
197 | + let toSendEdit = { | ||
198 | + id: values.id || contextBody.id, | ||
199 | + contract: values.contract || contextBody.contract, | ||
200 | + vendor: values.vendor || contextBody.vendor, | ||
201 | + dateRange: values.dateRange || contextBody.dateRange, | ||
202 | + terminal: values.terminal || contextBody.terminal, | ||
203 | + orderStagesDeviceDoList: values.orderStagesDeviceVoList || contextBody.orderStagesDeviceVoList, | ||
204 | + totalPrice: values.totalPrice || contextBody.totalPrice, | ||
205 | + payWay: values.payWay || contextBody.payWay, | ||
206 | + annex: contextBody.annex, | ||
207 | + remark: values.remark || contextBody.remark, | ||
208 | + }; | ||
209 | + if (values.annex) { | ||
210 | + formData.append('file', values.annex[0].originFileObj as RcFile); | ||
211 | + const res = await postOrderErpOrderStagesUpload({ | ||
212 | + data: formData, | ||
213 | + headers: { | ||
214 | + 'Content-Type': | ||
215 | + 'multipart/form-data; boundary=----WebKitFormBoundarynl6gT1BKdPWIejNq', | ||
216 | + } | ||
217 | + }); | ||
218 | + if (res.data) { | ||
219 | + console.log(values) | ||
220 | + console.log(contextBody); | ||
221 | + toSendEdit.annex = res.data | ||
222 | + } | ||
223 | + } | ||
224 | + const isSaveOrUpdate = await postOrderErpOrderStagesSaveOrUpdate({ | ||
225 | + data: { ...toSendEdit } | ||
226 | + }) | ||
227 | + if (isSaveOrUpdate) { | ||
228 | + console.log(isSaveOrUpdate); | ||
229 | + getBody() | ||
230 | + toReload() | ||
231 | + } | ||
232 | + await waitTime(2000); | ||
233 | + message.success('提交成功'); | ||
234 | + return true; | ||
235 | + }} | ||
236 | + > | ||
237 | + <ProCard | ||
238 | + title="基本信息" | ||
239 | + headerBordered | ||
240 | + bordered | ||
241 | + > | ||
242 | + <ProForm.Group> | ||
243 | + <ProFormText | ||
244 | + width="md" | ||
245 | + name="vendor" | ||
246 | + rules={[{ required: true, message: '此项为必填项' }]} | ||
247 | + label="供应商名称" | ||
248 | + placeholder="请输入" | ||
249 | + initialValue={contextBody.vendor} | ||
250 | + /> | ||
251 | + | ||
252 | + <ProFormText | ||
253 | + width="md" | ||
254 | + name="terminal" | ||
255 | + rules={[{ required: true, message: '此项为必填项' }]} | ||
256 | + label="终端名称" | ||
257 | + placeholder="请输入" | ||
258 | + initialValue={contextBody.terminal} | ||
259 | + /> | ||
260 | + | ||
261 | + <ProFormDatePicker | ||
262 | + name="dateRange" | ||
263 | + width="md" | ||
264 | + label="签合同日期" | ||
265 | + placeholder="请选择日期" | ||
266 | + fieldProps={{ | ||
267 | + format: (value) => value.format('YYYY-MM-DD'), | ||
268 | + }} | ||
269 | + initialValue={contextBody.dateRange} | ||
270 | + /> | ||
271 | + | ||
272 | + <ProFormText | ||
273 | + width="md" | ||
274 | + name="payWay" | ||
275 | + rules={[{ required: true, message: '此项为必填项' }]} | ||
276 | + label="付款比例" | ||
277 | + placeholder="请输入" | ||
278 | + initialValue={contextBody.payWay} | ||
279 | + onBlur={(e) => { | ||
280 | + handleInputChange(e.target.value, 1); | ||
281 | + }} | ||
282 | + /> | ||
283 | + | ||
284 | + <ProFormText | ||
285 | + width="md" | ||
286 | + name="contract" | ||
287 | + rules={[{ required: true, message: '此项为必填项' }]} | ||
288 | + label="合同编号" | ||
289 | + placeholder="请输入" | ||
290 | + initialValue={contextBody.contract} | ||
291 | + /> | ||
292 | + | ||
293 | + <ProFormUploadButton width="md" | ||
294 | + name="annex" | ||
295 | + max={1} | ||
296 | + onChange={(value) => { | ||
297 | + console.log(value); | ||
298 | + }} | ||
299 | + label="合同附件" /> | ||
300 | + | ||
301 | + <ProFormText | ||
302 | + width="md" | ||
303 | + name="totalPrice" | ||
304 | + label="合同金额" | ||
305 | + placeholder="请输入" | ||
306 | + disabled | ||
307 | + // rules={[{ required: true, message: '此项为必填项' }]} | ||
308 | + // value={contextBody.totalPrice} | ||
309 | + initialValue={contextBody.totalPrice} | ||
310 | + /> | ||
311 | + </ProForm.Group> | ||
312 | + </ProCard> | ||
313 | + <ProCard | ||
314 | + title="产品明细" | ||
315 | + style={{ marginTop: 10 }} | ||
316 | + headerBordered | ||
317 | + bordered | ||
318 | + > | ||
319 | + <ProductDetail productBody={contextBody.orderStagesDeviceVoList} EditProductBody={getEditProductBody}></ProductDetail> | ||
320 | + </ProCard> | ||
321 | + | ||
322 | + <ProCard | ||
323 | + title="付款信息" | ||
324 | + style={{ marginTop: 10 }} | ||
325 | + headerBordered | ||
326 | + bordered | ||
327 | + > | ||
328 | + <PayWayDetail payBody={payWayBody} thisId={contextBody.id} currtSave={setSave}></PayWayDetail> | ||
329 | + </ProCard> | ||
330 | + | ||
331 | + <ProCard | ||
332 | + style={{ marginTop: 10 }} | ||
333 | + headerBordered | ||
334 | + bordered | ||
335 | + > | ||
336 | + <ProFormTextArea label="备注" name="remark" initialValue={contextBody.remark} /> | ||
337 | + </ProCard> | ||
338 | + </ModalForm> | ||
339 | + ); | ||
340 | +}; | ||
0 | \ No newline at end of file | 341 | \ No newline at end of file |
src/pages/Instalment/components/payWayDetail/payWayDetail.less
0 → 100644
1 | +.payway-detail-index td{ | ||
2 | + font-family: 'San Francisco', 'Helvetica Neue', Helvetica, Arial, | ||
3 | + 'Microsoft YaHei', 'PingFang SC', 'Hiragino Sans GB', 'Heiti SC', | ||
4 | + 'WenQuanYi Micro Hei', sans-serif; | ||
5 | + font-size: 14px; | ||
6 | + margin: 0; | ||
7 | + | ||
8 | + .css-dev-only-do-not-override-nllxry{ | ||
9 | + margin-bottom: 0px !important; | ||
10 | + } | ||
11 | + } | ||
12 | + | ||
13 | + .dataChoose{ | ||
14 | + margin: 0; | ||
15 | + } | ||
16 | + | ||
17 | + // .pay-way-detail-index td .css-dev-only-do-not-override-nllxry{ | ||
18 | + // margin-bottom: 0px !important; | ||
19 | + // } |
src/pages/Instalment/components/payWayDetail/payWayDetail.tsx
0 → 100644
1 | +import type { ProColumns } from '@ant-design/pro-components'; | ||
2 | +import { | ||
3 | + EditableProTable, | ||
4 | + ProFormDatePicker, | ||
5 | + ProFormRadio, | ||
6 | + ProFormUploadButton, | ||
7 | +} from '@ant-design/pro-components'; | ||
8 | +import React, { useEffect, useState } from 'react'; | ||
9 | +import './payWayDetail.less' | ||
10 | +import { postOrderErpOrderStagesPayWaySelect } from '@/services'; | ||
11 | +import { message } from 'antd'; | ||
12 | + | ||
13 | +const waitTime = (time: number = 100) => { | ||
14 | + return new Promise((resolve) => { | ||
15 | + setTimeout(() => { | ||
16 | + resolve(true); | ||
17 | + }, time); | ||
18 | + }); | ||
19 | +}; | ||
20 | + | ||
21 | +type DataSourceType = { | ||
22 | + id: number; | ||
23 | + payStep?: string; | ||
24 | + proportion?: string; | ||
25 | + ossId?: number, | ||
26 | + payPrice?: number; | ||
27 | + payDate?: Date; | ||
28 | + fileName?: string; | ||
29 | + fileUrl?: string; | ||
30 | +}; | ||
31 | + | ||
32 | +export default ({ payBody, thisId, currtSave }) => { | ||
33 | + const defaultData: DataSourceType[] = [ | ||
34 | + { | ||
35 | + id: 1, | ||
36 | + payStep: '预付款', | ||
37 | + proportion: undefined, | ||
38 | + payPrice: undefined, | ||
39 | + ossId: undefined, | ||
40 | + payDate: undefined, | ||
41 | + fileName: undefined, | ||
42 | + fileUrl: undefined | ||
43 | + }, | ||
44 | + { | ||
45 | + id: 2, | ||
46 | + payStep: '发贷款', | ||
47 | + proportion: undefined, | ||
48 | + payPrice: undefined, | ||
49 | + ossId: undefined, | ||
50 | + payDate: undefined, | ||
51 | + fileName: undefined, | ||
52 | + fileUrl: undefined | ||
53 | + }, | ||
54 | + { | ||
55 | + id: 3, | ||
56 | + payStep: '验收款', | ||
57 | + proportion: undefined, | ||
58 | + payPrice: undefined, | ||
59 | + ossId: undefined, | ||
60 | + payDate: undefined, | ||
61 | + fileName: undefined, | ||
62 | + fileUrl: undefined | ||
63 | + }, | ||
64 | + { | ||
65 | + id: 4, | ||
66 | + payStep: '质保金', | ||
67 | + proportion: undefined, | ||
68 | + payPrice: undefined, | ||
69 | + ossId: undefined, | ||
70 | + payDate: undefined, | ||
71 | + fileName: undefined, | ||
72 | + fileUrl: undefined | ||
73 | + } | ||
74 | + ]; | ||
75 | + | ||
76 | + const [editableKeys, setEditableRowKeys] = useState<React.Key[]>([]); | ||
77 | + const [dataSource, setDataSource] = useState<readonly DataSourceType[]>([]); | ||
78 | + const [position, setPosition] = useState<'top' | 'bottom' | 'hidden'>('hidden',); | ||
79 | + const [payWayDetailBody, setPayWayDetailBody] = useState<readonly DataSourceType[]>([...defaultData]) | ||
80 | + const [body, setBody] = useState([]) | ||
81 | + const [isAccept, setIsAccept] = useState(null) | ||
82 | + const [isCurrtSave, setIsCurrtSave] = useState(false); | ||
83 | + | ||
84 | + async function getOther(value, arr) { | ||
85 | + console.log(value); | ||
86 | + const res = await postOrderErpOrderStagesPayWaySelect({ | ||
87 | + data: { ossId: value } | ||
88 | + }); | ||
89 | + if (res.data) { | ||
90 | + const context = res.data; | ||
91 | + const remake = arr.map(obj => { | ||
92 | + let currt = obj; | ||
93 | + context.forEach(object => { | ||
94 | + if (object.number == obj.id) { | ||
95 | + currt = { | ||
96 | + ...obj, | ||
97 | + ossId: object.ossId, | ||
98 | + payDate: object.dateRange, | ||
99 | + fileName: object.fileName, | ||
100 | + fileUrl: object.fileUrl | ||
101 | + }; | ||
102 | + return currt; | ||
103 | + } | ||
104 | + }); | ||
105 | + console.log(currt); | ||
106 | + return currt; | ||
107 | + }); | ||
108 | + console.log(context); | ||
109 | + setPayWayDetailBody(remake); | ||
110 | + } | ||
111 | + } | ||
112 | + | ||
113 | + function setPayWay(value) { | ||
114 | + const remakeData = payWayDetailBody.map(obj => { | ||
115 | + return { ...obj, proportion: value[obj.id - 1]?.proportion, payPrice: value[obj.id - 1]?.payPrice } | ||
116 | + }) | ||
117 | + console.log(remakeData); | ||
118 | + | ||
119 | + setPayWayDetailBody(remakeData) | ||
120 | + console.log(thisId); | ||
121 | + | ||
122 | + if (thisId!=null) { | ||
123 | + getOther(thisId, remakeData) | ||
124 | + } | ||
125 | + } | ||
126 | + // useEffect(() => { | ||
127 | + // getOther(thisId) | ||
128 | + // }, [thisId]) | ||
129 | + | ||
130 | + useEffect(() => { | ||
131 | + setPayWay(payBody) | ||
132 | + }, [payBody]) | ||
133 | + | ||
134 | + function setCurrtSave(value) { | ||
135 | + console.log(value); | ||
136 | + setIsCurrtSave(payWayDetailBody) | ||
137 | + } | ||
138 | + | ||
139 | + | ||
140 | + const columns: ProColumns<DataSourceType>[] = [ | ||
141 | + { | ||
142 | + title: '编号', | ||
143 | + dataIndex: 'id', | ||
144 | + hideInTable: true, | ||
145 | + editable: false | ||
146 | + }, | ||
147 | + { | ||
148 | + title: '付款信息', | ||
149 | + dataIndex: 'payStep', | ||
150 | + editable: false | ||
151 | + }, | ||
152 | + { | ||
153 | + title: '付款比例', | ||
154 | + dataIndex: 'proportion', | ||
155 | + editable: false | ||
156 | + }, | ||
157 | + { | ||
158 | + title: '付款金额', | ||
159 | + dataIndex: 'payPrice', | ||
160 | + editable: false | ||
161 | + }, | ||
162 | + { | ||
163 | + title: '对应的订单', | ||
164 | + dataIndex: 'ossId', | ||
165 | + editable: false, | ||
166 | + hideInTable: true, | ||
167 | + }, | ||
168 | + { | ||
169 | + title: '付款时间', | ||
170 | + dataIndex: 'payDate', | ||
171 | + editable: false, | ||
172 | + render: (text, record, _, action) => { | ||
173 | + const handleChange = (value) => { | ||
174 | + const updatedDataSource = payWayDetailBody.map(item => { | ||
175 | + if (item.id === record.id) { | ||
176 | + return { | ||
177 | + ...item, | ||
178 | + payDate: value | ||
179 | + }; | ||
180 | + } | ||
181 | + return item; | ||
182 | + }); | ||
183 | + console.log(updatedDataSource); | ||
184 | + | ||
185 | + setPayWayDetailBody(updatedDataSource); | ||
186 | + currtSave(updatedDataSource) | ||
187 | + }; | ||
188 | + | ||
189 | + return ( | ||
190 | + <ProFormDatePicker | ||
191 | + className='dataChoose' | ||
192 | + initialValue={record.payDate} | ||
193 | + value={record.payDate} | ||
194 | + placeholder={"请填写时间"} | ||
195 | + fieldProps={{ | ||
196 | + format: (value) => value.format('YYYY-MM-DD'), | ||
197 | + onChange: handleChange, | ||
198 | + }} | ||
199 | + /> | ||
200 | + ); | ||
201 | + } | ||
202 | + }, | ||
203 | + { | ||
204 | + title: '付款单回执', | ||
205 | + dataIndex: 'fileName', | ||
206 | + render: (text, record, _, action) => { | ||
207 | + if (isAccept !== record.id) { | ||
208 | + if (typeof record.fileUrl === 'object' && record.fileUrl instanceof File) { | ||
209 | + return (<a onClick={() => message.error("请先保存")}>{record.fileName}</a>) | ||
210 | + } else { | ||
211 | + return (<a href={record.fileUrl}>{record.fileName}</a>) | ||
212 | + } | ||
213 | + } else { | ||
214 | + return ( | ||
215 | + <ProFormUploadButton | ||
216 | + name={record.id} | ||
217 | + onChange={(value) => { | ||
218 | + console.log(value); | ||
219 | + console.log(payWayDetailBody); | ||
220 | + let remakeBody = []; | ||
221 | + let remakeBodyItem = {}; | ||
222 | + payWayDetailBody.forEach(item => { | ||
223 | + if (item.id === record.id) { | ||
224 | + remakeBodyItem = { ...item, fileUrl: value.file.originFileObj, fileName: value.file.name } | ||
225 | + } else { | ||
226 | + remakeBodyItem = { ...item } | ||
227 | + } if (value.fileList.length == 0) { | ||
228 | + remakeBodyItem = { ...item, fileUrl: undefined, fileName: undefined } | ||
229 | + } | ||
230 | + remakeBody.push(remakeBodyItem) | ||
231 | + }) | ||
232 | + setPayWayDetailBody(remakeBody) | ||
233 | + currtSave(remakeBody) | ||
234 | + }} | ||
235 | + width="md" | ||
236 | + max={1} /> | ||
237 | + ) | ||
238 | + } | ||
239 | + }, | ||
240 | + }, | ||
241 | + { | ||
242 | + title: '操作', | ||
243 | + valueType: 'option', | ||
244 | + width: 200, | ||
245 | + render: (text, record, _, action) => [ | ||
246 | + <a | ||
247 | + key="editable" | ||
248 | + onClick={() => { | ||
249 | + if (isAccept !== record.id) { | ||
250 | + setIsAccept(record.id) | ||
251 | + } else { | ||
252 | + setIsAccept(null) | ||
253 | + } | ||
254 | + | ||
255 | + }} | ||
256 | + > | ||
257 | + {(record.fileName !== undefined || record.fileName !== '') ? '重新上传' : '上传回执'} | ||
258 | + </a> | ||
259 | + ], | ||
260 | + }, | ||
261 | + ]; | ||
262 | + | ||
263 | + return ( | ||
264 | + <> | ||
265 | + <EditableProTable<DataSourceType> | ||
266 | + rowKey="id" | ||
267 | + className='payWayDetail-index' | ||
268 | + toolbar={{ style: { display: 'none' } }} | ||
269 | + ghost={true} | ||
270 | + scroll={{ | ||
271 | + x: 960, | ||
272 | + }} | ||
273 | + recordCreatorProps={ | ||
274 | + position !== 'hidden' | ||
275 | + ? { | ||
276 | + position: position as 'top', | ||
277 | + record: () => ({ id: (Math.random() * 1000000).toFixed(0) }), | ||
278 | + } | ||
279 | + : false | ||
280 | + } | ||
281 | + loading={false} | ||
282 | + toolBarRender={() => [ | ||
283 | + <ProFormRadio.Group | ||
284 | + key="render" | ||
285 | + fieldProps={{ | ||
286 | + value: position, | ||
287 | + onChange: (e) => setPosition(e.target.value), | ||
288 | + }} | ||
289 | + />, | ||
290 | + ]} | ||
291 | + columns={columns} | ||
292 | + request={payWayDetailBody} | ||
293 | + value={payWayDetailBody} | ||
294 | + onChange={() => { | ||
295 | + setPayWayDetailBody; | ||
296 | + setCurrtSave(payWayDetailBody) | ||
297 | + }} | ||
298 | + editable={{ | ||
299 | + type: 'multiple', | ||
300 | + editableKeys, | ||
301 | + onSave: async (rowKey, data, row) => { | ||
302 | + console.log(rowKey, data, row); | ||
303 | + await waitTime(2000); | ||
304 | + }, | ||
305 | + onChange: setEditableRowKeys, | ||
306 | + }} | ||
307 | + /> | ||
308 | + </> | ||
309 | + ); | ||
310 | +}; | ||
0 | \ No newline at end of file | 311 | \ No newline at end of file |
src/pages/Instalment/components/productDetail/productDetail.css
0 → 100644
src/pages/Instalment/components/productDetail/productDetail.less
0 → 100644
src/pages/Instalment/components/productDetail/productDetail.tsx
0 → 100644
1 | +import type { ProColumns } from '@ant-design/pro-components'; | ||
2 | +import { | ||
3 | + EditableProTable, | ||
4 | + ProCard, | ||
5 | + ProFormField, | ||
6 | + ProFormRadio, | ||
7 | +} from '@ant-design/pro-components'; | ||
8 | +import React, { useEffect, useState } from 'react'; | ||
9 | +import './productDetail.less' | ||
10 | +import { countBy } from 'lodash'; | ||
11 | + | ||
12 | +const waitTime = (time: number = 100) => { | ||
13 | + return new Promise((resolve) => { | ||
14 | + setTimeout(() => { | ||
15 | + resolve(true); | ||
16 | + }, time); | ||
17 | + }); | ||
18 | +}; | ||
19 | + | ||
20 | +type DataSourceType = { | ||
21 | + count?: number; | ||
22 | + id: React.Key; | ||
23 | + deviceModel?: string; | ||
24 | + deviceName?: string; | ||
25 | + price?: number; | ||
26 | + unitPrice?: number; | ||
27 | +}; | ||
28 | + | ||
29 | +const defaultData: DataSourceType[] = [ | ||
30 | + // { | ||
31 | + // id:1, | ||
32 | + // deviceName: '高低温试验箱', | ||
33 | + // deviceModel: 'CAN-TES36-0049ST', | ||
34 | + // count: 1, | ||
35 | + // unitPrice: 24500, | ||
36 | + // price: 24500, | ||
37 | + // } | ||
38 | +]; | ||
39 | + | ||
40 | +export default ({ productBody, EditProductBody }) => { | ||
41 | + const [editableKeys, setEditableRowKeys] = useState<React.Key[]>([]); | ||
42 | + const [dataSource, setDataSource] = useState<readonly DataSourceType[]>([]); | ||
43 | + const [position, setPosition] = useState<'top' | 'bottom' | 'hidden'>( | ||
44 | + 'bottom', | ||
45 | + ); | ||
46 | + function getDataSourece() { | ||
47 | + if (productBody.length!=0) { | ||
48 | + setDataSource(productBody) | ||
49 | + } | ||
50 | + } | ||
51 | + function setEditProductBody(value) { | ||
52 | + console.log(value); | ||
53 | + console.log(dataSource); | ||
54 | + | ||
55 | + const modifiedArray = value.map(obj => { | ||
56 | + if (obj.dId && Number(obj.dId) <= 1000) { | ||
57 | + return { | ||
58 | + ...obj, | ||
59 | + count:obj.count, | ||
60 | + dId: null, | ||
61 | + deviceModel:obj.deviceModel, | ||
62 | + deviceName:obj.deviceName, | ||
63 | + price:obj.price, | ||
64 | + unitPrice:obj.unitPrice | ||
65 | + }; | ||
66 | + } else { | ||
67 | + return obj; | ||
68 | + } | ||
69 | + }); | ||
70 | + console.log(modifiedArray); | ||
71 | + | ||
72 | + EditProductBody(modifiedArray) | ||
73 | + setDataSource(value) | ||
74 | + } | ||
75 | + | ||
76 | + useEffect(() => { | ||
77 | + getDataSourece() | ||
78 | + }, [productBody]) | ||
79 | + | ||
80 | + type DataSourceType = { | ||
81 | + id: React.Key, | ||
82 | + count: number, | ||
83 | + dId?: number, | ||
84 | + deviceModel: string, | ||
85 | + deviceName: string, | ||
86 | + price: number | ||
87 | + unitPrice: number, | ||
88 | + } | ||
89 | + | ||
90 | + | ||
91 | + const columns: ProColumns<DataSourceType>[] = [ | ||
92 | + { | ||
93 | + title: '设备编号', | ||
94 | + dataIndex: 'dId', | ||
95 | + hideInTable: true | ||
96 | + }, | ||
97 | + { | ||
98 | + title: '设备名称', | ||
99 | + dataIndex: 'deviceName', | ||
100 | + formItemProps: (form, { rowIndex }) => { | ||
101 | + return { | ||
102 | + rules: | ||
103 | + [{ required: true, message: '此项为必填项' }] | ||
104 | + }; | ||
105 | + } | ||
106 | + }, | ||
107 | + { | ||
108 | + title: '设备型号', | ||
109 | + dataIndex: 'deviceModel', | ||
110 | + width: '15%', | ||
111 | + formItemProps: (form, { rowIndex }) => { | ||
112 | + return { | ||
113 | + rules: | ||
114 | + [{ required: true, message: '此项为必填项' }] | ||
115 | + }; | ||
116 | + } | ||
117 | + }, | ||
118 | + { | ||
119 | + title: '数量', | ||
120 | + dataIndex: 'count', | ||
121 | + formItemProps: (form, { rowIndex }) => { | ||
122 | + return { | ||
123 | + rules: | ||
124 | + [{ required: true, message: '此项为必填项' }] | ||
125 | + }; | ||
126 | + } | ||
127 | + }, | ||
128 | + { | ||
129 | + title: '单价', | ||
130 | + dataIndex: 'unitPrice', | ||
131 | + formItemProps: (form, { rowIndex }) => { | ||
132 | + return { | ||
133 | + rules: | ||
134 | + [{ required: true, message: '此项为必填项' }] | ||
135 | + }; | ||
136 | + } | ||
137 | + }, | ||
138 | + { | ||
139 | + title: '总价', | ||
140 | + dataIndex: 'price', | ||
141 | + formItemProps: (form, { rowIndex }) => { | ||
142 | + return { | ||
143 | + rules: | ||
144 | + [{ required: true, message: '此项为必填项' }] | ||
145 | + }; | ||
146 | + } | ||
147 | + }, | ||
148 | + { | ||
149 | + title: '操作', | ||
150 | + valueType: 'option', | ||
151 | + width: 200, | ||
152 | + render: (text, record, _, action) => [ | ||
153 | + <a | ||
154 | + key="editable" | ||
155 | + onClick={() => { | ||
156 | + if (record.dId) { | ||
157 | + action?.startEditable?.(record.dId); | ||
158 | + } | ||
159 | + }} | ||
160 | + > | ||
161 | + 编辑 | ||
162 | + </a>, | ||
163 | + <a | ||
164 | + key="delete" | ||
165 | + onClick={() => { | ||
166 | + setDataSource(dataSource.filter((item) => item.dId !== record.dId)); | ||
167 | + }} | ||
168 | + > | ||
169 | + 删除 | ||
170 | + </a>, | ||
171 | + ], | ||
172 | + }, | ||
173 | + ]; | ||
174 | + | ||
175 | + return ( | ||
176 | + <> | ||
177 | + <EditableProTable<DataSourceType> | ||
178 | + className='product-detail-index' | ||
179 | + rowKey="dId" | ||
180 | + toolbar={{ style: { display: 'none' } }} | ||
181 | + ghost={true} | ||
182 | + scroll={{ | ||
183 | + x: 960, | ||
184 | + }} | ||
185 | + recordCreatorProps={ | ||
186 | + position !== 'hidden' | ||
187 | + ? { | ||
188 | + position: position as 'top', | ||
189 | + record: () => ({ dId: (Math.random() * 1000).toFixed(0) }), | ||
190 | + } | ||
191 | + : false | ||
192 | + } | ||
193 | + loading={false} | ||
194 | + toolBarRender={() => [ | ||
195 | + <ProFormRadio.Group | ||
196 | + key="render" | ||
197 | + fieldProps={{ | ||
198 | + value: position, | ||
199 | + onChange: (e) => setPosition(e.target.value), | ||
200 | + }} | ||
201 | + />, | ||
202 | + ]} | ||
203 | + columns={columns} | ||
204 | + request={dataSource} | ||
205 | + value={dataSource} | ||
206 | + onChange={setEditProductBody} | ||
207 | + editable={{ | ||
208 | + type: 'multiple', | ||
209 | + editableKeys, | ||
210 | + onSave: async (rowKey, data, row) => { | ||
211 | + await waitTime(2000); | ||
212 | + }, | ||
213 | + onChange: setEditableRowKeys, | ||
214 | + }} | ||
215 | + /> | ||
216 | + </> | ||
217 | + ); | ||
218 | +}; | ||
0 | \ No newline at end of file | 219 | \ No newline at end of file |
src/pages/Instalment/components/title/title.less
0 → 100644
1 | +.item { | ||
2 | + background: '#0092ff'; | ||
3 | + padding: '8px 0'; | ||
4 | + display: flex; | ||
5 | + flex-flow: row nowrap; | ||
6 | + // flex-direction: row; | ||
7 | + // flex-wrap: nowrap; | ||
8 | + align-content: normal; | ||
9 | + align-items: center; | ||
10 | + padding-bottom: 20px; | ||
11 | +} | ||
12 | + | ||
13 | +// .titleSpan{ | ||
14 | +// font-weight: bold; | ||
15 | +// width: 100px; | ||
16 | +// } | ||
17 | + | ||
18 | +// .Btn{ | ||
19 | +// background: '#0092ff'; | ||
20 | +// padding: '8px 0'; | ||
21 | +// display: flex; | ||
22 | +// flex-flow: row nowrap; | ||
23 | +// // flex-direction: row; | ||
24 | +// // flex-wrap: nowrap; | ||
25 | +// align-content: normal; | ||
26 | +// align-items: center; | ||
27 | +// padding-bottom: 20px; | ||
28 | +// justify-content: space-between; | ||
29 | +// width: 160px; | ||
30 | +// } | ||
31 | + | ||
32 | +.title-index td { | ||
33 | + font-family: 'San Francisco', 'Helvetica Neue', Helvetica, Arial, | ||
34 | + 'Microsoft YaHei', 'PingFang SC', 'Hiragino Sans GB', 'Heiti SC', | ||
35 | + 'WenQuanYi Micro Hei', sans-serif; | ||
36 | + font-size: 14px; | ||
37 | + } | ||
0 | \ No newline at end of file | 38 | \ No newline at end of file |
src/pages/Instalment/components/title/title.tsx
0 → 100644
1 | +import { deleteOrderErpOrderStagesDelect, getOrderErpOrderStagesExport, getOrderErpOrderStagesListAll, postOrderErpOrderStagesSaveOrUpdate, postOrderErpOrderStagesSearch } from '@/services'; | ||
2 | +import { EllipsisOutlined, MinusOutlined, PlusOutlined, VerticalAlignBottomOutlined, VerticalAlignTopOutlined } from '@ant-design/icons'; | ||
3 | +import Icon from '@ant-design/icons/lib/components/AntdIcon'; | ||
4 | +import type { ActionType, ProColumns, ProFormInstance } from '@ant-design/pro-components'; | ||
5 | +import { ProTable, TableDropdown } from '@ant-design/pro-components'; | ||
6 | +import { Button, Dropdown, Modal, Space, Tag, message } from 'antd'; | ||
7 | +import { ReactNode, useEffect, useRef, useState } from 'react'; | ||
8 | +import { request } from 'umi'; | ||
9 | +import AddModel from '../detail/detail'; | ||
10 | +import EditorModel from '../edit/edit'; | ||
11 | +import UploadModel from '../upload/uploadModel'; | ||
12 | +import './title.less' | ||
13 | +export const waitTimePromise = async (time: number = 100) => { | ||
14 | + return new Promise((resolve) => { | ||
15 | + setTimeout(() => { | ||
16 | + resolve(true); | ||
17 | + }, time); | ||
18 | + }); | ||
19 | +}; | ||
20 | + | ||
21 | +export const waitTime = async (time: number = 100) => { | ||
22 | + await waitTimePromise(time); | ||
23 | +}; | ||
24 | + | ||
25 | +type OrderStagesItem = { | ||
26 | + //文件编号 | ||
27 | + id?: number; | ||
28 | + //合同编号 | ||
29 | + contract?: string; | ||
30 | + //供应商名称 | ||
31 | + vendor?: string; | ||
32 | + //签合同日期 | ||
33 | + dateRange?: Date; | ||
34 | + //终端名称 | ||
35 | + terminal?: string; | ||
36 | + //设备名称 | ||
37 | + deviceName?: string; | ||
38 | + //设备型号 | ||
39 | + deviceModel?: string; | ||
40 | + //数量 | ||
41 | + count?: number; | ||
42 | + //单价 | ||
43 | + unitPrice?: number; | ||
44 | + //总价 | ||
45 | + price?: number; | ||
46 | + //合同总金额 | ||
47 | + totalPrice?: number; | ||
48 | + //付款方式 | ||
49 | + payWay?: string; | ||
50 | + //附件 | ||
51 | + annex?: string; | ||
52 | + //备注 | ||
53 | + remark?: string; | ||
54 | +}; | ||
55 | + | ||
56 | +type OrderStagesWithListItem = { | ||
57 | + //文件编号 | ||
58 | + id: number; | ||
59 | + //合同编号 | ||
60 | + contract: string; | ||
61 | + //供应商名称 | ||
62 | + vendor: string; | ||
63 | + //签合同日期 | ||
64 | + dateRange: Date; | ||
65 | + //终端名称 | ||
66 | + terminal: string; | ||
67 | + orderStagesDeviceVoList: orderStagesDevice[] | ||
68 | + //合同总金额 | ||
69 | + totalPrice: number; | ||
70 | + //付款方式 | ||
71 | + payWay: string; | ||
72 | + //附件 | ||
73 | + annex: string; | ||
74 | + //备注 | ||
75 | + remark: string; | ||
76 | +}; | ||
77 | + | ||
78 | +type orderStagesDevice = { | ||
79 | + //设备id | ||
80 | + dId: number; | ||
81 | + //设备名称 | ||
82 | + deviceName: string; | ||
83 | + //设备型号 | ||
84 | + deviceModel: string; | ||
85 | + //数量 | ||
86 | + count: number; | ||
87 | + //单价 | ||
88 | + unitPrice: number; | ||
89 | + //总价 | ||
90 | + price: number; | ||
91 | +} | ||
92 | + | ||
93 | +export default () => { | ||
94 | + const actionRef = useRef<ActionType>(); | ||
95 | + const [TableItem, setTableItem] = useState([]); | ||
96 | + const [modal1Open, setModal1Open] = useState(false); | ||
97 | + // const [currentContract, setCurrentContract] = useState(''); | ||
98 | + | ||
99 | + // const getContract=(contract:string)=>{ | ||
100 | + // setCurrentContract(contract) | ||
101 | + // } | ||
102 | + | ||
103 | + interface ActionType { | ||
104 | + reload: (resetPageIndex?: boolean) => void; | ||
105 | + reloadAndRest: () => void; | ||
106 | + reset: () => void; | ||
107 | + clearSelected?: () => void; | ||
108 | + startEditable: (rowKey: Key) => boolean; | ||
109 | + cancelEditable: (rowKey: Key) => boolean; | ||
110 | + } | ||
111 | + | ||
112 | + const ref = useRef<ActionType>( | ||
113 | + { | ||
114 | + reload: (resetPageIndex?: boolean) => { | ||
115 | + // implementation for reload | ||
116 | + }, | ||
117 | + reloadAndRest: () => { | ||
118 | + // implementation for reloadAndRest | ||
119 | + }, | ||
120 | + reset: () => { | ||
121 | + // implementation for reset | ||
122 | + }, | ||
123 | + startEditable: (rowKey: Key) => { | ||
124 | + // implementation for startEditable | ||
125 | + }, | ||
126 | + cancelEditable: (rowKey: Key) => { | ||
127 | + // implementation for cancelEditable | ||
128 | + }, | ||
129 | + } | ||
130 | + ); | ||
131 | + | ||
132 | + function reload() { | ||
133 | + ref.current.reload(); | ||
134 | + } | ||
135 | + | ||
136 | + async function toDelete(value) { | ||
137 | + const res = await deleteOrderErpOrderStagesDelect({ | ||
138 | + data: { | ||
139 | + ids: value, | ||
140 | + deviceIds: null | ||
141 | + } | ||
142 | + }) | ||
143 | + if (res) { | ||
144 | + message.success("删除成功") | ||
145 | + ref.current.reload() | ||
146 | + } else { | ||
147 | + message.error("删除失败") | ||
148 | + } | ||
149 | + } | ||
150 | + | ||
151 | + async function toExport() { | ||
152 | + await getOrderErpOrderStagesExport() | ||
153 | + } | ||
154 | + | ||
155 | + | ||
156 | + const columns: ProColumns<OrderStagesItem>[] = [ | ||
157 | + { | ||
158 | + title: '文件编号', | ||
159 | + dataIndex: 'id', | ||
160 | + width: '5%', | ||
161 | + render: (_, record) => { | ||
162 | + if (record.id) { | ||
163 | + const text = record.id.toString(); | ||
164 | + const paddedText = '0'.repeat(4 - text.length) + text; | ||
165 | + return paddedText; | ||
166 | + } | ||
167 | + }, | ||
168 | + }, | ||
169 | + { | ||
170 | + title: '签合同日期', | ||
171 | + dataIndex: 'dateRange', | ||
172 | + valueType: 'date', | ||
173 | + filters: true, | ||
174 | + onFilter: true, | ||
175 | + ellipsis: true, | ||
176 | + width: '6%' | ||
177 | + }, | ||
178 | + { | ||
179 | + disable: true, | ||
180 | + title: '合同编号', | ||
181 | + dataIndex: 'contract', | ||
182 | + filters: true, | ||
183 | + onFilter: true, | ||
184 | + ellipsis: true, | ||
185 | + width: '9%' | ||
186 | + }, | ||
187 | + { | ||
188 | + disable: true, | ||
189 | + title: '供应商名称', | ||
190 | + dataIndex: 'vendor', | ||
191 | + filters: true, | ||
192 | + onFilter: true, | ||
193 | + ellipsis: true, | ||
194 | + }, | ||
195 | + { | ||
196 | + disable: true, | ||
197 | + title: '终端名称', | ||
198 | + dataIndex: 'terminal', | ||
199 | + filters: true, | ||
200 | + onFilter: true, | ||
201 | + ellipsis: true, | ||
202 | + width: '6%' | ||
203 | + }, | ||
204 | + { | ||
205 | + disable: true, | ||
206 | + title: '设备名称', | ||
207 | + dataIndex: 'deviceName', | ||
208 | + filters: true, | ||
209 | + onFilter: true, | ||
210 | + ellipsis: true, | ||
211 | + }, | ||
212 | + { | ||
213 | + disable: true, | ||
214 | + title: '设备型号', | ||
215 | + dataIndex: 'deviceModel', | ||
216 | + filters: true, | ||
217 | + hideInSearch: true, | ||
218 | + onFilter: false, | ||
219 | + ellipsis: true, | ||
220 | + width: '10%' | ||
221 | + }, | ||
222 | + { | ||
223 | + disable: true, | ||
224 | + title: '数量', | ||
225 | + dataIndex: 'count', | ||
226 | + filters: true, | ||
227 | + hideInSearch: true, | ||
228 | + onFilter: false, | ||
229 | + ellipsis: true, | ||
230 | + width: '4%' | ||
231 | + }, | ||
232 | + { | ||
233 | + disable: true, | ||
234 | + title: '单价', | ||
235 | + dataIndex: 'unitPrice', | ||
236 | + filters: true, | ||
237 | + hideInSearch: true, | ||
238 | + onFilter: false, | ||
239 | + ellipsis: true, | ||
240 | + width: '5%' | ||
241 | + }, | ||
242 | + { | ||
243 | + disable: true, | ||
244 | + title: '总价', | ||
245 | + dataIndex: 'price', | ||
246 | + filters: true, | ||
247 | + hideInSearch: true, | ||
248 | + onFilter: false, | ||
249 | + ellipsis: true, | ||
250 | + width: '5%' | ||
251 | + }, | ||
252 | + { | ||
253 | + disable: true, | ||
254 | + title: '合同总金额', | ||
255 | + dataIndex: 'totalPrice', | ||
256 | + filters: true, | ||
257 | + hideInSearch: true, | ||
258 | + onFilter: false, | ||
259 | + ellipsis: true, | ||
260 | + width: '6%' | ||
261 | + }, | ||
262 | + { | ||
263 | + disable: true, | ||
264 | + title: '付款方式', | ||
265 | + dataIndex: 'payWay', | ||
266 | + filters: true, | ||
267 | + hideInSearch: true, | ||
268 | + onFilter: false, | ||
269 | + ellipsis: true, | ||
270 | + }, | ||
271 | + { | ||
272 | + disable: true, | ||
273 | + title: '附件', | ||
274 | + dataIndex: 'annex', | ||
275 | + filters: true, | ||
276 | + hideInSearch: true, | ||
277 | + onFilter: false, | ||
278 | + ellipsis: true, | ||
279 | + width: '5%', | ||
280 | + render: (_, record) => { | ||
281 | + if (record.id) { | ||
282 | + return <a href={record.annex}>{record.annex}</a>; | ||
283 | + } | ||
284 | + }, | ||
285 | + }, | ||
286 | + { | ||
287 | + disable: true, | ||
288 | + title: '备注', | ||
289 | + dataIndex: 'remark', | ||
290 | + filters: true, | ||
291 | + hideInSearch: true, | ||
292 | + onFilter: false, | ||
293 | + ellipsis: true, | ||
294 | + width: '5%', | ||
295 | + }, | ||
296 | + { | ||
297 | + title: '操作', | ||
298 | + valueType: 'option', | ||
299 | + key: 'option', | ||
300 | + width: '10%', | ||
301 | + render: (text, record, _, action) => { | ||
302 | + if (record?.id) { | ||
303 | + return ( | ||
304 | + <> | ||
305 | + <a href={record.annex} target="_blank" rel="noopener noreferrer" key="view"> | ||
306 | + 查看 | ||
307 | + </a> | ||
308 | + | ||
309 | + <EditorModel currentContract={record.contract} toReload={reload}></EditorModel> | ||
310 | + | ||
311 | + <a key="delect" target="_blank" rel="noopener noreferrer" onClick={() => { toDelete([record.id]) }}> | ||
312 | + 删除 | ||
313 | + </a> | ||
314 | + </> | ||
315 | + ) | ||
316 | + | ||
317 | + } | ||
318 | + return null; | ||
319 | + }, | ||
320 | + }, | ||
321 | + ]; | ||
322 | + | ||
323 | + return ( | ||
324 | + <ProTable<OrderStagesItem> | ||
325 | + className='title-index' | ||
326 | + columnEmptyText='' | ||
327 | + columns={columns} | ||
328 | + actionRef={ref} | ||
329 | + cardBordered | ||
330 | + request={async (params, sort, filter) => { | ||
331 | + console.log(params); | ||
332 | + if (params.id != null || params.contract != null || params.vendor != null || params.terminal != null || params.deviceName != null || params.dateRange != null) { | ||
333 | + console.log(params.id); | ||
334 | + console.log(params.contract); | ||
335 | + console.log(params.vendor); | ||
336 | + let PostOrderErpOrderStagesSearchOption = { | ||
337 | + id: params.id, | ||
338 | + contract: params.contract, | ||
339 | + vendor: params.vendor, | ||
340 | + terminal: params.terminal, | ||
341 | + deviceName: params.deviceName, | ||
342 | + dateRange: params.dateRange | ||
343 | + } | ||
344 | + let res = await postOrderErpOrderStagesSearch({ | ||
345 | + data: { ...PostOrderErpOrderStagesSearchOption } | ||
346 | + }) | ||
347 | + await waitTime(2000); | ||
348 | + if (res) { | ||
349 | + setTableItem(res.data) | ||
350 | + const orderStagesWithList: OrderStagesWithListItem[] = res?.data | ||
351 | + let orderStagesList: OrderStagesItem[] = [] | ||
352 | + for (let ind = 0; ind < orderStagesWithList.length; ind++) { | ||
353 | + for (let index = 0; index < orderStagesWithList[ind].orderStagesDeviceVoList.length; index++) { | ||
354 | + let item: OrderStagesItem = { | ||
355 | + id: undefined, | ||
356 | + contract: undefined, | ||
357 | + vendor: undefined, | ||
358 | + dateRange: undefined, | ||
359 | + terminal: undefined, | ||
360 | + deviceName: undefined, | ||
361 | + deviceModel: undefined, | ||
362 | + count: undefined, | ||
363 | + unitPrice: undefined, | ||
364 | + price: undefined, | ||
365 | + totalPrice: undefined, | ||
366 | + payWay: undefined, | ||
367 | + annex: undefined, | ||
368 | + remark: undefined | ||
369 | + }; | ||
370 | + if (index == 0) { | ||
371 | + orderStagesWithList[ind].orderStagesDeviceVoList[index]; | ||
372 | + item.id = orderStagesWithList[ind].id; | ||
373 | + item.contract = orderStagesWithList[ind].contract; | ||
374 | + item.vendor = orderStagesWithList[ind].vendor; | ||
375 | + item.dateRange = orderStagesWithList[ind].dateRange; | ||
376 | + item.terminal = orderStagesWithList[ind].terminal; | ||
377 | + item.deviceName = orderStagesWithList[ind].orderStagesDeviceVoList[index].deviceName; | ||
378 | + item.deviceModel = orderStagesWithList[ind].orderStagesDeviceVoList[index].deviceModel; | ||
379 | + item.count = orderStagesWithList[ind].orderStagesDeviceVoList[index].count; | ||
380 | + item.unitPrice = orderStagesWithList[ind].orderStagesDeviceVoList[index].unitPrice; | ||
381 | + item.price = orderStagesWithList[ind].orderStagesDeviceVoList[index].price; | ||
382 | + item.totalPrice = orderStagesWithList[ind].totalPrice; | ||
383 | + item.payWay = orderStagesWithList[ind].payWay; | ||
384 | + item.annex = orderStagesWithList[ind].annex; | ||
385 | + item.remark = orderStagesWithList[ind].remark; | ||
386 | + orderStagesList.push(item); | ||
387 | + } else { | ||
388 | + item.deviceName = orderStagesWithList[ind].orderStagesDeviceVoList[index].deviceName; | ||
389 | + item.deviceModel = orderStagesWithList[ind].orderStagesDeviceVoList[index].deviceModel; | ||
390 | + item.count = orderStagesWithList[ind].orderStagesDeviceVoList[index].count; | ||
391 | + item.unitPrice = orderStagesWithList[ind].orderStagesDeviceVoList[index].unitPrice; | ||
392 | + item.price = orderStagesWithList[ind].orderStagesDeviceVoList[index].price; | ||
393 | + orderStagesList.push(item); | ||
394 | + } | ||
395 | + } | ||
396 | + } | ||
397 | + return { | ||
398 | + data: orderStagesList || [] | ||
399 | + } | ||
400 | + } | ||
401 | + } else { | ||
402 | + let res = await getOrderErpOrderStagesListAll(); | ||
403 | + await waitTime(2000); | ||
404 | + if (res) { | ||
405 | + setTableItem(res.data) | ||
406 | + const orderStagesWithList: OrderStagesWithListItem[] = res?.data | ||
407 | + let orderStagesList: OrderStagesItem[] = [] | ||
408 | + for (let ind = 0; ind < orderStagesWithList.length; ind++) { | ||
409 | + for (let index = 0; index < orderStagesWithList[ind].orderStagesDeviceVoList.length; index++) { | ||
410 | + let item: OrderStagesItem = { | ||
411 | + id: undefined, | ||
412 | + contract: undefined, | ||
413 | + vendor: undefined, | ||
414 | + dateRange: undefined, | ||
415 | + terminal: undefined, | ||
416 | + deviceName: undefined, | ||
417 | + deviceModel: undefined, | ||
418 | + count: undefined, | ||
419 | + unitPrice: undefined, | ||
420 | + price: undefined, | ||
421 | + totalPrice: undefined, | ||
422 | + payWay: undefined, | ||
423 | + annex: undefined, | ||
424 | + remark: undefined | ||
425 | + }; | ||
426 | + if (index == 0) { | ||
427 | + orderStagesWithList[ind].orderStagesDeviceVoList[index]; | ||
428 | + item.id = orderStagesWithList[ind].id; | ||
429 | + item.contract = orderStagesWithList[ind].contract; | ||
430 | + item.vendor = orderStagesWithList[ind].vendor; | ||
431 | + item.dateRange = orderStagesWithList[ind].dateRange; | ||
432 | + item.terminal = orderStagesWithList[ind].terminal; | ||
433 | + item.deviceName = orderStagesWithList[ind].orderStagesDeviceVoList[index].deviceName; | ||
434 | + item.deviceModel = orderStagesWithList[ind].orderStagesDeviceVoList[index].deviceModel; | ||
435 | + item.count = orderStagesWithList[ind].orderStagesDeviceVoList[index].count; | ||
436 | + item.unitPrice = orderStagesWithList[ind].orderStagesDeviceVoList[index].unitPrice; | ||
437 | + item.price = orderStagesWithList[ind].orderStagesDeviceVoList[index].price; | ||
438 | + item.totalPrice = orderStagesWithList[ind].totalPrice; | ||
439 | + item.payWay = orderStagesWithList[ind].payWay; | ||
440 | + item.annex = orderStagesWithList[ind].annex; | ||
441 | + item.remark = orderStagesWithList[ind].remark; | ||
442 | + orderStagesList.push(item); | ||
443 | + } else { | ||
444 | + item.deviceName = orderStagesWithList[ind].orderStagesDeviceVoList[index].deviceName; | ||
445 | + item.deviceModel = orderStagesWithList[ind].orderStagesDeviceVoList[index].deviceModel; | ||
446 | + item.count = orderStagesWithList[ind].orderStagesDeviceVoList[index].count; | ||
447 | + item.unitPrice = orderStagesWithList[ind].orderStagesDeviceVoList[index].unitPrice; | ||
448 | + item.price = orderStagesWithList[ind].orderStagesDeviceVoList[index].price; | ||
449 | + orderStagesList.push(item); | ||
450 | + } | ||
451 | + } | ||
452 | + } | ||
453 | + return { | ||
454 | + data: orderStagesList || [] | ||
455 | + } | ||
456 | + } | ||
457 | + } | ||
458 | + }} | ||
459 | + editable={{ | ||
460 | + type: 'multiple', | ||
461 | + }} | ||
462 | + columnsState={{ | ||
463 | + persistenceKey: 'pro-table-singe-demos', | ||
464 | + persistenceType: 'localStorage', | ||
465 | + defaultValue: { | ||
466 | + option: { fixed: 'right', disable: true }, | ||
467 | + }, | ||
468 | + onChange(value) { | ||
469 | + console.log('value: ', value); | ||
470 | + }, | ||
471 | + }} | ||
472 | + rowKey="id" | ||
473 | + search={{ | ||
474 | + labelWidth: 'auto', | ||
475 | + }} | ||
476 | + options={{ | ||
477 | + setting: { | ||
478 | + listsHeight: 800, | ||
479 | + }, | ||
480 | + }} | ||
481 | + form={{ | ||
482 | + // 由于配置了 transform,提交的参与与定义的不同这里需要转化一下 | ||
483 | + syncToUrl: (values, type) => { | ||
484 | + if (type === 'get') { | ||
485 | + return { | ||
486 | + ...values, | ||
487 | + created_at: [values.startTime, values.endTime], | ||
488 | + }; | ||
489 | + } | ||
490 | + return values; | ||
491 | + }, | ||
492 | + }} | ||
493 | + pagination={{ | ||
494 | + pageSize: 10, | ||
495 | + onChange: (page) => console.log(page), | ||
496 | + }} | ||
497 | + dateFormatter="string" | ||
498 | + headerTitle={[ | ||
499 | + | ||
500 | + ]} | ||
501 | + toolBarRender={() => [ | ||
502 | + <> | ||
503 | + <AddModel toReload={reload}></AddModel> | ||
504 | + <UploadModel toReload={reload}></UploadModel> | ||
505 | + {/* <Button type="primary" onClick={()=>{toExport()}}> | ||
506 | + <VerticalAlignTopOutlined /> | ||
507 | + 导出 | ||
508 | + </Button> */} | ||
509 | + </> | ||
510 | + ]} | ||
511 | + /> | ||
512 | + ); | ||
513 | +}; | ||
0 | \ No newline at end of file | 514 | \ No newline at end of file |
src/pages/Instalment/components/upload/uploadApp.tsx
0 → 100644
1 | +import React from 'react'; | ||
2 | +import { Upload, message } from 'antd'; | ||
3 | +import { InboxOutlined } from '@ant-design/icons'; | ||
4 | + | ||
5 | +const App: React.FC = ({ uploadFile }) => { | ||
6 | + const { Dragger } = Upload; | ||
7 | + | ||
8 | + const props = { | ||
9 | + name: 'file', | ||
10 | + multiple: true, | ||
11 | + maxCount: 1, | ||
12 | + onChange:(info)=> { | ||
13 | + console.log(info.file.originFileObj); | ||
14 | + uploadFile(info.file.originFileObj) | ||
15 | + }, | ||
16 | + onDrop(e) { | ||
17 | + console.log('Dropped files', e.dataTransfer.files); | ||
18 | + }, | ||
19 | + }; | ||
20 | + | ||
21 | + return ( | ||
22 | + <Dragger {...props}> | ||
23 | + <p className="ant-upload-drag-icon"> | ||
24 | + <InboxOutlined /> | ||
25 | + </p> | ||
26 | + <p className="ant-upload-text">Click or drag file to this area to upload</p> | ||
27 | + <p className="ant-upload-hint"> | ||
28 | + Support for a single or bulk upload. Strictly prohibited from uploading company data or other | ||
29 | + banned files. | ||
30 | + </p> | ||
31 | + </Dragger> | ||
32 | + ); | ||
33 | +}; | ||
34 | + | ||
35 | +export default App; | ||
0 | \ No newline at end of file | 36 | \ No newline at end of file |
src/pages/Instalment/components/upload/uploadModel.tsx
0 → 100644
1 | +import { PlusOutlined, VerticalAlignBottomOutlined } from '@ant-design/icons'; | ||
2 | +import { | ||
3 | + ModalForm, | ||
4 | + ProForm, | ||
5 | + ProFormDateRangePicker, | ||
6 | + ProFormSelect, | ||
7 | + ProFormText, | ||
8 | +} from '@ant-design/pro-components'; | ||
9 | +import { Button, Form, message } from 'antd'; | ||
10 | +import App from './uploadApp' | ||
11 | +import { useState } from 'react'; | ||
12 | +import { postOrderErpOrderStagesImport } from '@/services/request'; | ||
13 | +import { RcFile } from 'antd/es/upload'; | ||
14 | + | ||
15 | +const waitTime = (time: number = 100) => { | ||
16 | + return new Promise((resolve) => { | ||
17 | + setTimeout(() => { | ||
18 | + resolve(true); | ||
19 | + }, time); | ||
20 | + }); | ||
21 | +}; | ||
22 | + | ||
23 | +export default ({toReload}) => { | ||
24 | + const [form] = Form.useForm<{ name: string; company: string }>(); | ||
25 | + const [uploadFile, setUploadFile] = useState({}) | ||
26 | + function setUploadFileWay(value) { | ||
27 | + console.log(value); | ||
28 | + setUploadFile(value) | ||
29 | + } | ||
30 | + return ( | ||
31 | + <ModalForm<{ | ||
32 | + name: string; | ||
33 | + company: string; | ||
34 | + }> | ||
35 | + title="新建表单" | ||
36 | + trigger={ | ||
37 | + <Button type="primary"> | ||
38 | + <VerticalAlignBottomOutlined /> | ||
39 | + 导入 | ||
40 | + </Button> | ||
41 | + } | ||
42 | + form={form} | ||
43 | + autoFocusFirstInput | ||
44 | + modalProps={{ | ||
45 | + destroyOnClose: true, | ||
46 | + onCancel: () => console.log('run'), | ||
47 | + }} | ||
48 | + submitTimeout={2000} | ||
49 | + onFinish={async (values) => { | ||
50 | + const formData = new FormData(); | ||
51 | + formData.append('file', uploadFile as RcFile); | ||
52 | + const res = await postOrderErpOrderStagesImport({ | ||
53 | + data: formData, | ||
54 | + headers: { | ||
55 | + 'Content-Type': 'multipart/form-data; boundary=----WebKitFormBoundarynl6gT1BKdPWIejNq', | ||
56 | + } | ||
57 | + }); | ||
58 | + if (res) { | ||
59 | + message.success('提交成功'); | ||
60 | + toReload() | ||
61 | + return true; | ||
62 | + } | ||
63 | + }} | ||
64 | + > | ||
65 | + <App uploadFile={setUploadFile}></App> | ||
66 | + </ModalForm> | ||
67 | + ); | ||
68 | +}; | ||
0 | \ No newline at end of file | 69 | \ No newline at end of file |
src/pages/Instalment/index.tsx
0 → 100644
src/services/definition.ts
@@ -347,6 +347,148 @@ export interface ApiApplyAfterSalesRequest { | @@ -347,6 +347,148 @@ export interface ApiApplyAfterSalesRequest { | ||
347 | uid?: number; | 347 | uid?: number; |
348 | } | 348 | } |
349 | 349 | ||
350 | +export interface ApiCreateOrderRequest { | ||
351 | + /** | ||
352 | + * @description | ||
353 | + * 收货人联系方式 | ||
354 | + */ | ||
355 | + customerContactNumber?: string; | ||
356 | + /** | ||
357 | + * @description | ||
358 | + * 收货人 | ||
359 | + */ | ||
360 | + customerName?: string; | ||
361 | + /** | ||
362 | + * @description | ||
363 | + * 收货地址 | ||
364 | + */ | ||
365 | + customerShippingAddress?: string; | ||
366 | + /** | ||
367 | + * @description | ||
368 | + * 单位 | ||
369 | + */ | ||
370 | + institution?: string; | ||
371 | + /** | ||
372 | + * @description | ||
373 | + * 课题组老师 | ||
374 | + */ | ||
375 | + institutionContactName?: string; | ||
376 | + /** | ||
377 | + * @description | ||
378 | + * 商品列表 | ||
379 | + */ | ||
380 | + list?: Array<ApiCreateProductRequest>; | ||
381 | + /** | ||
382 | + * @description | ||
383 | + * 备注 | ||
384 | + */ | ||
385 | + notes?: string; | ||
386 | + /** | ||
387 | + * @description | ||
388 | + * 支付渠道 | ||
389 | + */ | ||
390 | + paymentChannel?: string; | ||
391 | + /** | ||
392 | + * @description | ||
393 | + * 支付方式 | ||
394 | + */ | ||
395 | + paymentMethod?: string; | ||
396 | + /** | ||
397 | + * @description | ||
398 | + * 运费 | ||
399 | + */ | ||
400 | + shippingFee?: number; | ||
401 | + /** | ||
402 | + * @description | ||
403 | + * 支付总额 | ||
404 | + * @example | ||
405 | + * 2343 | ||
406 | + */ | ||
407 | + totalPayment?: number; | ||
408 | + /** | ||
409 | + * @description | ||
410 | + * 用户id | ||
411 | + * @format int32 | ||
412 | + */ | ||
413 | + uid?: number; | ||
414 | +} | ||
415 | + | ||
416 | +export interface ApiCreateProductRequest { | ||
417 | + /** | ||
418 | + * @description | ||
419 | + * 规格id | ||
420 | + * @format int32 | ||
421 | + */ | ||
422 | + attrId?: number; | ||
423 | + /** | ||
424 | + * @description | ||
425 | + * 商品封面图 | ||
426 | + */ | ||
427 | + image?: string; | ||
428 | + /** | ||
429 | + * @description | ||
430 | + * 备注 | ||
431 | + */ | ||
432 | + notes?: string; | ||
433 | + /** | ||
434 | + * @description | ||
435 | + * 商品参数 | ||
436 | + */ | ||
437 | + parameters?: string; | ||
438 | + /** | ||
439 | + * @description | ||
440 | + * 商品编码 | ||
441 | + */ | ||
442 | + productCode?: string; | ||
443 | + /** | ||
444 | + * @description | ||
445 | + * 商品id | ||
446 | + * @format int32 | ||
447 | + */ | ||
448 | + productId?: number; | ||
449 | + /** | ||
450 | + * @description | ||
451 | + * 商品名称 | ||
452 | + */ | ||
453 | + productName?: string; | ||
454 | + /** | ||
455 | + * @description | ||
456 | + * 商品单价 | ||
457 | + * @example | ||
458 | + * 2343 | ||
459 | + */ | ||
460 | + productPrice?: number; | ||
461 | + /** | ||
462 | + * @description | ||
463 | + * 商品数量 | ||
464 | + * @format int32 | ||
465 | + */ | ||
466 | + quantity?: number; | ||
467 | + /** | ||
468 | + * @description | ||
469 | + * 子订单总价格 | ||
470 | + */ | ||
471 | + subOrderPayment?: number; | ||
472 | + /** | ||
473 | + * @description | ||
474 | + * 商品单位 | ||
475 | + */ | ||
476 | + unit?: string; | ||
477 | +} | ||
478 | + | ||
479 | +export interface ApiOrderCustomersRequest { | ||
480 | + /** @format int32 */ | ||
481 | + current?: number; | ||
482 | + /** @format int32 */ | ||
483 | + pageSize?: number; | ||
484 | + /** @format int32 */ | ||
485 | + total?: number; | ||
486 | +} | ||
487 | + | ||
488 | +export interface ApiOrderEvaluatedRequest { | ||
489 | + subOrderIds?: Array<number>; | ||
490 | +} | ||
491 | + | ||
350 | export interface ApiQueryOrderDetailRequest { | 492 | export interface ApiQueryOrderDetailRequest { |
351 | /** | 493 | /** |
352 | * @description | 494 | * @description |
@@ -360,6 +502,12 @@ export interface ApiQueryOrderDetailRequest { | @@ -360,6 +502,12 @@ export interface ApiQueryOrderDetailRequest { | ||
360 | orderId?: string; | 502 | orderId?: string; |
361 | /** | 503 | /** |
362 | * @description | 504 | * @description |
505 | + * 子订单状态 | ||
506 | + * @format int32 | ||
507 | + */ | ||
508 | + orderStatus?: number; | ||
509 | + /** | ||
510 | + * @description | ||
363 | * 账号id | 511 | * 账号id |
364 | * @format int32 | 512 | * @format int32 |
365 | */ | 513 | */ |
@@ -381,6 +529,12 @@ export interface ApiQueryOrderStatusCountsRequest { | @@ -381,6 +529,12 @@ export interface ApiQueryOrderStatusCountsRequest { | ||
381 | } | 529 | } |
382 | 530 | ||
383 | export interface AuditDto { | 531 | export interface AuditDto { |
532 | + /** | ||
533 | + * @description | ||
534 | + * 主订单id | ||
535 | + * @format int64 | ||
536 | + */ | ||
537 | + mainOrderId?: number; | ||
384 | notes?: string; | 538 | notes?: string; |
385 | /** | 539 | /** |
386 | * @description | 540 | * @description |
@@ -728,6 +882,8 @@ export interface FilePathDto { | @@ -728,6 +882,8 @@ export interface FilePathDto { | ||
728 | url?: string; | 882 | url?: string; |
729 | } | 883 | } |
730 | 884 | ||
885 | +export type InputStream = any; | ||
886 | + | ||
731 | export interface InventoryMaterialStockReq { | 887 | export interface InventoryMaterialStockReq { |
732 | auxPropId?: string; | 888 | auxPropId?: string; |
733 | isShowStockPosition?: boolean; | 889 | isShowStockPosition?: boolean; |
@@ -735,6 +891,93 @@ export interface InventoryMaterialStockReq { | @@ -735,6 +891,93 @@ export interface InventoryMaterialStockReq { | ||
735 | materialId?: string; | 891 | materialId?: string; |
736 | } | 892 | } |
737 | 893 | ||
894 | +export interface InvoiceDto { | ||
895 | + /** | ||
896 | + * @description | ||
897 | + * 收款时间 | ||
898 | + * @format date-time | ||
899 | + */ | ||
900 | + collectionTime?: string; | ||
901 | + /** | ||
902 | + * @description | ||
903 | + * 联系人 | ||
904 | + */ | ||
905 | + contacts?: string; | ||
906 | + /** | ||
907 | + * @description | ||
908 | + * id | ||
909 | + * @format int64 | ||
910 | + */ | ||
911 | + id?: number; | ||
912 | + /** | ||
913 | + * @description | ||
914 | + * 发票号码 | ||
915 | + */ | ||
916 | + invoiceNumber?: string; | ||
917 | + /** | ||
918 | + * @description | ||
919 | + * 发票类型 | ||
920 | + */ | ||
921 | + invoiceStatus?: string; | ||
922 | + /** | ||
923 | + * @description | ||
924 | + * 开票日期 | ||
925 | + * @format date-time | ||
926 | + */ | ||
927 | + invoicingTime?: string; | ||
928 | + /** | ||
929 | + * @description | ||
930 | + * 关联主订单id | ||
931 | + */ | ||
932 | + mainOrderIds?: Array<number>; | ||
933 | + /** | ||
934 | + * @description | ||
935 | + * 金额 | ||
936 | + */ | ||
937 | + money?: number; | ||
938 | + /** | ||
939 | + * @description | ||
940 | + * 备注 | ||
941 | + */ | ||
942 | + notes?: string; | ||
943 | + /** | ||
944 | + * @description | ||
945 | + * 收款单位 | ||
946 | + */ | ||
947 | + payee?: string; | ||
948 | + /** | ||
949 | + * @description | ||
950 | + * 购买方 | ||
951 | + */ | ||
952 | + purchaser?: string; | ||
953 | + /** | ||
954 | + * @description | ||
955 | + * 销售 | ||
956 | + */ | ||
957 | + sale?: string; | ||
958 | + /** | ||
959 | + * @description | ||
960 | + * 状态 | ||
961 | + */ | ||
962 | + status?: string; | ||
963 | +} | ||
964 | + | ||
965 | +export interface InvoiceRecordQueryRequest { | ||
966 | + /** @format date */ | ||
967 | + createTimeGe?: string; | ||
968 | + /** @format date */ | ||
969 | + createTimeLe?: string; | ||
970 | + /** @format int32 */ | ||
971 | + pageNumber?: number; | ||
972 | + /** @format int32 */ | ||
973 | + pageSize?: number; | ||
974 | + /** | ||
975 | + * @description | ||
976 | + * 用户id | ||
977 | + */ | ||
978 | + uid?: string; | ||
979 | +} | ||
980 | + | ||
738 | export interface Item { | 981 | export interface Item { |
739 | billDate?: string; | 982 | billDate?: string; |
740 | billNo?: string; | 983 | billNo?: string; |
@@ -748,6 +991,20 @@ export interface ItemSaItem { | @@ -748,6 +991,20 @@ export interface ItemSaItem { | ||
748 | itemValue?: string; | 991 | itemValue?: string; |
749 | } | 992 | } |
750 | 993 | ||
994 | +export interface MainOrderqueryRequest { | ||
995 | + afterInvoicingStatusIsNull?: boolean; | ||
996 | + orderStatusNotIn?: Array<string>; | ||
997 | + /** @format int32 */ | ||
998 | + pageNumber?: number; | ||
999 | + /** @format int32 */ | ||
1000 | + pageSize?: number; | ||
1001 | + /** | ||
1002 | + * @description | ||
1003 | + * 用户id | ||
1004 | + */ | ||
1005 | + uid?: string; | ||
1006 | +} | ||
1007 | + | ||
751 | export interface MaterialListReply { | 1008 | export interface MaterialListReply { |
752 | count?: string; | 1009 | count?: string; |
753 | /** @format int32 */ | 1010 | /** @format int32 */ |
@@ -1154,6 +1411,93 @@ export interface OrderProfitAnalysisVo { | @@ -1154,6 +1411,93 @@ export interface OrderProfitAnalysisVo { | ||
1154 | orderIds?: Array<number>; | 1411 | orderIds?: Array<number>; |
1155 | } | 1412 | } |
1156 | 1413 | ||
1414 | +export interface OrderStageFileDo { | ||
1415 | + file?: File; | ||
1416 | +} | ||
1417 | + | ||
1418 | +export interface OrderStagesDelDo { | ||
1419 | + deviceIds?: Array<number>; | ||
1420 | + ids?: Array<number>; | ||
1421 | +} | ||
1422 | + | ||
1423 | +export interface OrderStagesDeviceDo { | ||
1424 | + /** @format int32 */ | ||
1425 | + count?: number; | ||
1426 | + createByName?: string; | ||
1427 | + /** @format date-time */ | ||
1428 | + createTime?: string; | ||
1429 | + deviceModel?: string; | ||
1430 | + deviceName?: string; | ||
1431 | + /** @format int32 */ | ||
1432 | + did?: number; | ||
1433 | + logicDelete?: boolean; | ||
1434 | + /** @format double */ | ||
1435 | + price?: number; | ||
1436 | + /** @format double */ | ||
1437 | + unitPrice?: number; | ||
1438 | + updateByName?: string; | ||
1439 | + /** @format date-time */ | ||
1440 | + updateTime?: string; | ||
1441 | +} | ||
1442 | + | ||
1443 | +export interface OrderStagesFromDo { | ||
1444 | + annex?: string; | ||
1445 | + contract?: string; | ||
1446 | + createByName?: string; | ||
1447 | + /** @format date-time */ | ||
1448 | + createTime?: string; | ||
1449 | + /** @format date-time */ | ||
1450 | + dateRange?: string; | ||
1451 | + /** @format int32 */ | ||
1452 | + id?: number; | ||
1453 | + logicDelete?: boolean; | ||
1454 | + orderStagesDeviceDoList?: Array<OrderStagesDeviceDo>; | ||
1455 | + payWay?: string; | ||
1456 | + remark?: string; | ||
1457 | + terminal?: string; | ||
1458 | + /** @format double */ | ||
1459 | + totalPrice?: number; | ||
1460 | + updateByName?: string; | ||
1461 | + /** @format date-time */ | ||
1462 | + updateTime?: string; | ||
1463 | + vendor?: string; | ||
1464 | + /** @format int32 */ | ||
1465 | + version?: number; | ||
1466 | +} | ||
1467 | + | ||
1468 | +export interface OrderStagesPayWay { | ||
1469 | + /** @format date-time */ | ||
1470 | + dateRange?: string; | ||
1471 | + fileName?: string; | ||
1472 | + fileUrl?: string; | ||
1473 | + /** @format int32 */ | ||
1474 | + id?: number; | ||
1475 | + /** @format int32 */ | ||
1476 | + number?: number; | ||
1477 | + /** @format int32 */ | ||
1478 | + ossId?: number; | ||
1479 | +} | ||
1480 | + | ||
1481 | +export interface OrderStagesPayWayDo { | ||
1482 | + /** @format int32 */ | ||
1483 | + ossId?: number; | ||
1484 | +} | ||
1485 | + | ||
1486 | +export interface OrderStagesPayWayFileDo { | ||
1487 | + fileList?: Array<OrderStageFileDo>; | ||
1488 | +} | ||
1489 | + | ||
1490 | +export interface OrderStagesSelDo { | ||
1491 | + contract?: string; | ||
1492 | + /** @format date-time */ | ||
1493 | + dateRange?: string; | ||
1494 | + deviceName?: string; | ||
1495 | + /** @format int64 */ | ||
1496 | + id?: number; | ||
1497 | + terminal?: string; | ||
1498 | + vendor?: string; | ||
1499 | +} | ||
1500 | + | ||
1157 | export interface OrderTrackStageFieldVO { | 1501 | export interface OrderTrackStageFieldVO { |
1158 | aitexTestFinishResult?: string; | 1502 | aitexTestFinishResult?: string; |
1159 | aitexTestSendTime?: string; | 1503 | aitexTestSendTime?: string; |
@@ -1285,201 +1629,69 @@ export interface QueryAnnexDto { | @@ -1285,201 +1629,69 @@ export interface QueryAnnexDto { | ||
1285 | export interface QueryBankStatementDto { | 1629 | export interface QueryBankStatementDto { |
1286 | /** | 1630 | /** |
1287 | * @description | 1631 | * @description |
1288 | - * 帐号名称 | 1632 | + * amount |
1633 | + * @format double | ||
1289 | */ | 1634 | */ |
1290 | - accountName?: string; | 1635 | + amount?: number; |
1291 | /** | 1636 | /** |
1292 | * @description | 1637 | * @description |
1293 | - * 账号 | 1638 | + * collection_date |
1639 | + * @format date | ||
1294 | */ | 1640 | */ |
1295 | - accountNumber?: string; | 1641 | + collectionDatetimeBegin?: string; |
1296 | /** | 1642 | /** |
1297 | * @description | 1643 | * @description |
1298 | - * 实付金额 | 1644 | + * collection_date |
1645 | + * @format date | ||
1299 | */ | 1646 | */ |
1300 | - actualPaymentAmount?: number; | 1647 | + collectionDatetimeEnd?: string; |
1648 | + /** @format int32 */ | ||
1649 | + current?: number; | ||
1650 | + /** @format int64 */ | ||
1651 | + id?: number; | ||
1652 | + /** @format int32 */ | ||
1653 | + pageSize?: number; | ||
1301 | /** | 1654 | /** |
1302 | * @description | 1655 | * @description |
1303 | - * 余额 | 1656 | + * payee |
1304 | */ | 1657 | */ |
1305 | - balance?: number; | 1658 | + payee?: string; |
1306 | /** | 1659 | /** |
1307 | * @description | 1660 | * @description |
1308 | - * 银行订单号 | 1661 | + * payer |
1309 | */ | 1662 | */ |
1310 | - bankOrderNumber?: string; | 1663 | + payer?: string; |
1311 | /** | 1664 | /** |
1312 | * @description | 1665 | * @description |
1313 | - * 交易日-开始 | ||
1314 | - * @format date | 1666 | + * remark |
1315 | */ | 1667 | */ |
1316 | - beginTransactionDate?: string; | 1668 | + remark?: string; |
1669 | + remarkNote?: string; | ||
1670 | + serialNumber?: string; | ||
1671 | + status?: string; | ||
1672 | + /** @format int32 */ | ||
1673 | + total?: number; | ||
1674 | +} | ||
1675 | + | ||
1676 | +export interface QueryCustomerInformationDto { | ||
1317 | /** | 1677 | /** |
1318 | * @description | 1678 | * @description |
1319 | - * 起息日-开始 | ||
1320 | - * @format date | 1679 | + * 单位 |
1321 | */ | 1680 | */ |
1322 | - beginValueDate?: string; | 1681 | + institution?: string; |
1323 | /** | 1682 | /** |
1324 | * @description | 1683 | * @description |
1325 | - * 借方金额 | 1684 | + * 单位联系人 |
1326 | */ | 1685 | */ |
1327 | - borrowedAmount?: number; | 1686 | + institutionContactName?: string; |
1328 | /** | 1687 | /** |
1329 | * @description | 1688 | * @description |
1330 | - * 收银员 | 1689 | + * 名称 |
1331 | */ | 1690 | */ |
1332 | - cashier?: string; | ||
1333 | - /** | ||
1334 | - * @description | ||
1335 | - * 收款渠道 | ||
1336 | - */ | ||
1337 | - collectionChannel?: string; | ||
1338 | - /** | ||
1339 | - * @description | ||
1340 | - * 币种 | ||
1341 | - */ | ||
1342 | - currency?: string; | ||
1343 | - /** @format int32 */ | ||
1344 | - current?: number; | ||
1345 | - /** | ||
1346 | - * @description | ||
1347 | - * 交易日-结束 | ||
1348 | - * @format date | ||
1349 | - */ | ||
1350 | - endTransactionDate?: string; | ||
1351 | - /** | ||
1352 | - * @description | ||
1353 | - * 起息日-结束 | ||
1354 | - * @format date | ||
1355 | - */ | ||
1356 | - endValueDate?: string; | ||
1357 | - /** | ||
1358 | - * @description | ||
1359 | - * 扩展摘要 | ||
1360 | - */ | ||
1361 | - extendedSummary?: string; | ||
1362 | - /** | ||
1363 | - * @description | ||
1364 | - * id | ||
1365 | - * @format int64 | ||
1366 | - */ | ||
1367 | - id?: number; | ||
1368 | - /** | ||
1369 | - * @description | ||
1370 | - * 贷方金额 | ||
1371 | - */ | ||
1372 | - loanAmount?: number; | ||
1373 | - /** | ||
1374 | - * @description | ||
1375 | - * 商户订单号 | ||
1376 | - */ | ||
1377 | - merchantOrderNumber?: string; | ||
1378 | - /** @format int32 */ | ||
1379 | - pageSize?: number; | ||
1380 | - /** | ||
1381 | - * @description | ||
1382 | - * 收(付)方账号 | ||
1383 | - */ | ||
1384 | - payeePayerAccountNumber?: string; | ||
1385 | - /** | ||
1386 | - * @description | ||
1387 | - * 收(付)方开户行地址 | ||
1388 | - */ | ||
1389 | - payeePayerBankAddress?: string; | ||
1390 | - /** | ||
1391 | - * @description | ||
1392 | - * 收(付)方开户行行号 | ||
1393 | - */ | ||
1394 | - payeePayerBankBranchCode?: string; | ||
1395 | - /** | ||
1396 | - * @description | ||
1397 | - * 收(付)方开户行名 | ||
1398 | - */ | ||
1399 | - payeePayerBankName?: string; | ||
1400 | - /** | ||
1401 | - * @description | ||
1402 | - * 收(付)方名称 | ||
1403 | - */ | ||
1404 | - payeePayerName?: string; | ||
1405 | - /** | ||
1406 | - * @description | ||
1407 | - * 收(付)方单位 | ||
1408 | - */ | ||
1409 | - payeePayerUnit?: string; | ||
1410 | - /** | ||
1411 | - * @description | ||
1412 | - * 支付类型 | ||
1413 | - */ | ||
1414 | - paymentType?: string; | ||
1415 | - /** | ||
1416 | - * @description | ||
1417 | - * 附言 | ||
1418 | - */ | ||
1419 | - remarkNote?: string; | ||
1420 | - /** | ||
1421 | - * @description | ||
1422 | - * 流水号 | ||
1423 | - */ | ||
1424 | - serialNumber?: string; | ||
1425 | - /** | ||
1426 | - * @description | ||
1427 | - * 状态 | ||
1428 | - */ | ||
1429 | - status?: string; | ||
1430 | - /** | ||
1431 | - * @description | ||
1432 | - * 摘要 | ||
1433 | - */ | ||
1434 | - summary?: string; | ||
1435 | - /** | ||
1436 | - * @description | ||
1437 | - * 第三方订单号 | ||
1438 | - */ | ||
1439 | - thirdPartyOrderNumber?: string; | ||
1440 | - /** @format int32 */ | ||
1441 | - total?: number; | ||
1442 | - /** | ||
1443 | - * @description | ||
1444 | - * 交易金额 | ||
1445 | - */ | ||
1446 | - transactionAmount?: number; | ||
1447 | - /** | ||
1448 | - * @description | ||
1449 | - * 交易分析码 | ||
1450 | - */ | ||
1451 | - transactionAnalysisCode?: string; | ||
1452 | - /** | ||
1453 | - * @description | ||
1454 | - * 交易行所 | ||
1455 | - */ | ||
1456 | - transactionBankBranch?: string; | ||
1457 | - /** | ||
1458 | - * @description | ||
1459 | - * 交易类型 | ||
1460 | - */ | ||
1461 | - transactionType?: string; | ||
1462 | -} | ||
1463 | - | ||
1464 | -export interface QueryCustomerInformationDto { | ||
1465 | - /** | ||
1466 | - * @description | ||
1467 | - * 单位 | ||
1468 | - */ | ||
1469 | - institution?: string; | ||
1470 | - /** | ||
1471 | - * @description | ||
1472 | - * 单位联系人 | ||
1473 | - */ | ||
1474 | - institutionContactName?: string; | ||
1475 | - /** | ||
1476 | - * @description | ||
1477 | - * 名称 | ||
1478 | - */ | ||
1479 | - name?: string; | ||
1480 | -} | ||
1481 | - | ||
1482 | -export interface QueryHistoryRecordDto { | 1691 | + name?: string; |
1692 | +} | ||
1693 | + | ||
1694 | +export interface QueryHistoryRecordDto { | ||
1483 | /** | 1695 | /** |
1484 | * @description | 1696 | * @description |
1485 | * 子订单id集合 | 1697 | * 子订单id集合 |
@@ -1539,11 +1751,28 @@ export interface QueryReportFormsDto { | @@ -1539,11 +1751,28 @@ export interface QueryReportFormsDto { | ||
1539 | statisticsMethod?: string; | 1751 | statisticsMethod?: string; |
1540 | } | 1752 | } |
1541 | 1753 | ||
1754 | +export interface ReissueInvoiceDto { | ||
1755 | + /** @format int64 */ | ||
1756 | + invoiceId?: number; | ||
1757 | + notes?: string; | ||
1758 | +} | ||
1759 | + | ||
1542 | export interface ResetPwdVO { | 1760 | export interface ResetPwdVO { |
1543 | /** @format int64 */ | 1761 | /** @format int64 */ |
1544 | userId?: number; | 1762 | userId?: number; |
1545 | } | 1763 | } |
1546 | 1764 | ||
1765 | +export interface Resource { | ||
1766 | + description?: string; | ||
1767 | + file?: TsgFile; | ||
1768 | + filename?: string; | ||
1769 | + inputStream?: InputStream; | ||
1770 | + open?: boolean; | ||
1771 | + readable?: boolean; | ||
1772 | + uri?: URI; | ||
1773 | + url?: TsgURL; | ||
1774 | +} | ||
1775 | + | ||
1547 | export interface SalOrderSaveDto { | 1776 | export interface SalOrderSaveDto { |
1548 | id?: string; | 1777 | id?: string; |
1549 | } | 1778 | } |
@@ -1605,6 +1834,29 @@ export interface TokenApiDto { | @@ -1605,6 +1834,29 @@ export interface TokenApiDto { | ||
1605 | username?: string; | 1834 | username?: string; |
1606 | } | 1835 | } |
1607 | 1836 | ||
1837 | +export interface URI { | ||
1838 | + absolute?: boolean; | ||
1839 | + authority?: string; | ||
1840 | + fragment?: string; | ||
1841 | + host?: string; | ||
1842 | + opaque?: boolean; | ||
1843 | + path?: string; | ||
1844 | + /** @format int32 */ | ||
1845 | + port?: number; | ||
1846 | + query?: string; | ||
1847 | + rawAuthority?: string; | ||
1848 | + rawFragment?: string; | ||
1849 | + rawPath?: string; | ||
1850 | + rawQuery?: string; | ||
1851 | + rawSchemeSpecificPart?: string; | ||
1852 | + rawUserInfo?: string; | ||
1853 | + scheme?: string; | ||
1854 | + schemeSpecificPart?: string; | ||
1855 | + userInfo?: string; | ||
1856 | +} | ||
1857 | + | ||
1858 | +export type URLStreamHandler = any; | ||
1859 | + | ||
1608 | export interface Unit { | 1860 | export interface Unit { |
1609 | /** @format float */ | 1861 | /** @format float */ |
1610 | coefficient?: number; | 1862 | coefficient?: number; |
@@ -1713,10 +1965,493 @@ export interface UpdatePwdVO { | @@ -1713,10 +1965,493 @@ export interface UpdatePwdVO { | ||
1713 | userId?: number; | 1965 | userId?: number; |
1714 | } | 1966 | } |
1715 | 1967 | ||
1968 | +export interface UserAddressListRequest { | ||
1969 | + keywords?: string; | ||
1970 | + /** @format int32 */ | ||
1971 | + limit?: number; | ||
1972 | +} | ||
1973 | + | ||
1974 | +export interface UserCenterInfoRequest { | ||
1975 | + /** @format int32 */ | ||
1976 | + current?: number; | ||
1977 | + /** @format int32 */ | ||
1978 | + pageSize?: number; | ||
1979 | + /** @format int32 */ | ||
1980 | + total?: number; | ||
1981 | + /** | ||
1982 | + * @description | ||
1983 | + * 类型:0=消费记录,1=积分明细,2=签到记录,3=持有优惠券,4=余额变动,5=好友关系 | ||
1984 | + * @format int32 | ||
1985 | + */ | ||
1986 | + type?: number; | ||
1987 | + /** | ||
1988 | + * @description | ||
1989 | + * 用户id | ||
1990 | + * @format int32 | ||
1991 | + */ | ||
1992 | + uid?: number; | ||
1993 | +} | ||
1994 | + | ||
1995 | +export interface UserDetailRequest { | ||
1996 | + /** @format int32 */ | ||
1997 | + current?: number; | ||
1998 | + /** @format int32 */ | ||
1999 | + pageSize?: number; | ||
2000 | + /** | ||
2001 | + * @description | ||
2002 | + * 手机号 | ||
2003 | + */ | ||
2004 | + phone?: string; | ||
2005 | + /** @format int32 */ | ||
2006 | + total?: number; | ||
2007 | + /** | ||
2008 | + * @description | ||
2009 | + * uid | ||
2010 | + */ | ||
2011 | + uid?: string; | ||
2012 | +} | ||
2013 | + | ||
2014 | +export interface UserListRequest { | ||
2015 | + /** @format int32 */ | ||
2016 | + current?: number; | ||
2017 | + /** | ||
2018 | + * @description | ||
2019 | + * 创建日期开始时间 | ||
2020 | + */ | ||
2021 | + dateLimit?: string; | ||
2022 | + /** | ||
2023 | + * @description | ||
2024 | + * 单位 | ||
2025 | + */ | ||
2026 | + institution?: string; | ||
2027 | + /** | ||
2028 | + * @description | ||
2029 | + * 课题组老师 | ||
2030 | + */ | ||
2031 | + institutionContactName?: string; | ||
2032 | + /** | ||
2033 | + * @description | ||
2034 | + * 关键字 | ||
2035 | + */ | ||
2036 | + keywords?: string; | ||
2037 | + /** @format int32 */ | ||
2038 | + pageSize?: number; | ||
2039 | + /** | ||
2040 | + * @description | ||
2041 | + * 手机号 | ||
2042 | + */ | ||
2043 | + phone?: string; | ||
2044 | + /** | ||
2045 | + * @description | ||
2046 | + * salesCode | ||
2047 | + */ | ||
2048 | + salesCode?: string; | ||
2049 | + /** @format int32 */ | ||
2050 | + total?: number; | ||
2051 | + /** | ||
2052 | + * @description | ||
2053 | + * id | ||
2054 | + * @format int32 | ||
2055 | + */ | ||
2056 | + uid?: number; | ||
2057 | + /** | ||
2058 | + * @description | ||
2059 | + * 用户名 | ||
2060 | + */ | ||
2061 | + username?: string; | ||
2062 | +} | ||
2063 | + | ||
1716 | export interface View { | 2064 | export interface View { |
1717 | contentType?: string; | 2065 | contentType?: string; |
1718 | } | 2066 | } |
1719 | 2067 | ||
2068 | +/** | ||
2069 | + * @description | ||
2070 | + * 确认收货请求 | ||
2071 | + */ | ||
2072 | +export interface ApiOrderConfirmReceiveRequest { | ||
2073 | + /** | ||
2074 | + * @description | ||
2075 | + * 主订单id | ||
2076 | + * @format int64 | ||
2077 | + */ | ||
2078 | + orderId?: number; | ||
2079 | + /** | ||
2080 | + * @description | ||
2081 | + * 子订单id | ||
2082 | + */ | ||
2083 | + subOrderIds?: Array<number>; | ||
2084 | +} | ||
2085 | + | ||
2086 | +export interface TsgFile { | ||
2087 | + absolute?: boolean; | ||
2088 | + absoluteFile?: TsgFile; | ||
2089 | + absolutePath?: string; | ||
2090 | + canonicalFile?: TsgFile; | ||
2091 | + canonicalPath?: string; | ||
2092 | + directory?: boolean; | ||
2093 | + executable?: boolean; | ||
2094 | + file?: boolean; | ||
2095 | + /** @format int64 */ | ||
2096 | + freeSpace?: number; | ||
2097 | + hidden?: boolean; | ||
2098 | + /** @format int64 */ | ||
2099 | + lastModified?: number; | ||
2100 | + name?: string; | ||
2101 | + parent?: string; | ||
2102 | + parentFile?: TsgFile; | ||
2103 | + path?: string; | ||
2104 | + readable?: boolean; | ||
2105 | + /** @format int64 */ | ||
2106 | + totalSpace?: number; | ||
2107 | + /** @format int64 */ | ||
2108 | + usableSpace?: number; | ||
2109 | + writable?: boolean; | ||
2110 | +} | ||
2111 | + | ||
2112 | +export interface SalesRechargePrepaymentAuditRequest { | ||
2113 | + /** | ||
2114 | + * @description | ||
2115 | + * 审核意见 | ||
2116 | + */ | ||
2117 | + auditNotes?: string; | ||
2118 | + /** | ||
2119 | + * @description | ||
2120 | + * id集合 | ||
2121 | + */ | ||
2122 | + ids?: Array<number>; | ||
2123 | + /** | ||
2124 | + * @description | ||
2125 | + * 是否通过 | ||
2126 | + */ | ||
2127 | + pass?: boolean; | ||
2128 | +} | ||
2129 | + | ||
2130 | +export interface SalesRechargePrepaymentCreateRequest { | ||
2131 | + /** | ||
2132 | + * @description | ||
2133 | + * 联系人 | ||
2134 | + */ | ||
2135 | + contactPerson?: string; | ||
2136 | + /** | ||
2137 | + * @description | ||
2138 | + * 客户名称 | ||
2139 | + */ | ||
2140 | + customerName?: string; | ||
2141 | + /** | ||
2142 | + * @description | ||
2143 | + * 备注 | ||
2144 | + */ | ||
2145 | + notes?: string; | ||
2146 | + /** | ||
2147 | + * @description | ||
2148 | + * 手机号 | ||
2149 | + */ | ||
2150 | + phone?: string; | ||
2151 | + /** | ||
2152 | + * @description | ||
2153 | + * 凭证 | ||
2154 | + */ | ||
2155 | + proofImages?: Array<string>; | ||
2156 | + /** | ||
2157 | + * @description | ||
2158 | + * 充值金额 | ||
2159 | + */ | ||
2160 | + rechargeAmount?: number; | ||
2161 | + /** | ||
2162 | + * @description | ||
2163 | + * 来源 | ||
2164 | + */ | ||
2165 | + rechargeSource?: string; | ||
2166 | + /** | ||
2167 | + * @description | ||
2168 | + * 销售代表 | ||
2169 | + */ | ||
2170 | + salesCode?: string; | ||
2171 | +} | ||
2172 | + | ||
2173 | +export interface SalesRechargePrepaymentDeleteRequest { | ||
2174 | + /** | ||
2175 | + * @description | ||
2176 | + * id集合 | ||
2177 | + */ | ||
2178 | + ids?: Array<number>; | ||
2179 | +} | ||
2180 | + | ||
2181 | +export interface SalesRechargePrepaymentRequest { | ||
2182 | + /** | ||
2183 | + * @description | ||
2184 | + * 审核时间 | ||
2185 | + * @format date-time | ||
2186 | + */ | ||
2187 | + auditDate?: string; | ||
2188 | + /** | ||
2189 | + * @description | ||
2190 | + * 审核备注 | ||
2191 | + */ | ||
2192 | + auditNotes?: string; | ||
2193 | + /** | ||
2194 | + * @description | ||
2195 | + * 审核人员 | ||
2196 | + */ | ||
2197 | + auditors?: string; | ||
2198 | + /** | ||
2199 | + * @description | ||
2200 | + * 联系人 | ||
2201 | + */ | ||
2202 | + contactPerson?: string; | ||
2203 | + /** | ||
2204 | + * @description | ||
2205 | + * 创建人员 | ||
2206 | + */ | ||
2207 | + createBy?: string; | ||
2208 | + /** | ||
2209 | + * @description | ||
2210 | + * 创建时间开始时间 | ||
2211 | + * @format date-time | ||
2212 | + */ | ||
2213 | + createTimeBeginTime?: string; | ||
2214 | + /** | ||
2215 | + * @description | ||
2216 | + * 创建时间结束时间 | ||
2217 | + * @format date-time | ||
2218 | + */ | ||
2219 | + createTimeEndTime?: string; | ||
2220 | + /** @format int32 */ | ||
2221 | + current?: number; | ||
2222 | + /** | ||
2223 | + * @description | ||
2224 | + * 客户名称 | ||
2225 | + */ | ||
2226 | + customerName?: string; | ||
2227 | + /** | ||
2228 | + * @description | ||
2229 | + * 是否启用 | ||
2230 | + * @format int32 | ||
2231 | + */ | ||
2232 | + enableFlag?: number; | ||
2233 | + /** | ||
2234 | + * @description | ||
2235 | + * id | ||
2236 | + * @format int32 | ||
2237 | + */ | ||
2238 | + id?: number; | ||
2239 | + /** | ||
2240 | + * @description | ||
2241 | + * 修改人员 | ||
2242 | + */ | ||
2243 | + modifyBy?: string; | ||
2244 | + /** | ||
2245 | + * @description | ||
2246 | + * 修改时间 | ||
2247 | + * @format date-time | ||
2248 | + */ | ||
2249 | + modifyTime?: string; | ||
2250 | + /** | ||
2251 | + * @description | ||
2252 | + * 备注 | ||
2253 | + */ | ||
2254 | + notes?: string; | ||
2255 | + /** @format int32 */ | ||
2256 | + pageSize?: number; | ||
2257 | + /** | ||
2258 | + * @description | ||
2259 | + * 手机号 | ||
2260 | + */ | ||
2261 | + phone?: string; | ||
2262 | + /** | ||
2263 | + * @description | ||
2264 | + * 充值金额 | ||
2265 | + */ | ||
2266 | + rechargeAmount?: number; | ||
2267 | + /** | ||
2268 | + * @description | ||
2269 | + * 来源 | ||
2270 | + */ | ||
2271 | + rechargeSource?: string; | ||
2272 | + /** | ||
2273 | + * @description | ||
2274 | + * 销售代表 | ||
2275 | + */ | ||
2276 | + salesCode?: string; | ||
2277 | + /** | ||
2278 | + * @description | ||
2279 | + * 状态 | ||
2280 | + */ | ||
2281 | + status?: string; | ||
2282 | + /** @format int32 */ | ||
2283 | + total?: number; | ||
2284 | + /** | ||
2285 | + * @description | ||
2286 | + * 版本号 | ||
2287 | + * @format int32 | ||
2288 | + */ | ||
2289 | + version?: number; | ||
2290 | +} | ||
2291 | + | ||
2292 | +export interface SalesRechargePrepaymentUpdateRequest { | ||
2293 | + /** | ||
2294 | + * @description | ||
2295 | + * 联系人 | ||
2296 | + */ | ||
2297 | + contactPerson?: string; | ||
2298 | + /** | ||
2299 | + * @description | ||
2300 | + * 客户名称 | ||
2301 | + */ | ||
2302 | + customerName?: string; | ||
2303 | + /** | ||
2304 | + * @description | ||
2305 | + * 编号 | ||
2306 | + * @format int32 | ||
2307 | + */ | ||
2308 | + id?: number; | ||
2309 | + /** | ||
2310 | + * @description | ||
2311 | + * 备注 | ||
2312 | + */ | ||
2313 | + notes?: string; | ||
2314 | + /** | ||
2315 | + * @description | ||
2316 | + * 手机号 | ||
2317 | + */ | ||
2318 | + phone?: string; | ||
2319 | + /** | ||
2320 | + * @description | ||
2321 | + * 凭证 | ||
2322 | + */ | ||
2323 | + proofImages?: Array<string>; | ||
2324 | + /** | ||
2325 | + * @description | ||
2326 | + * 充值金额 | ||
2327 | + */ | ||
2328 | + rechargeAmount?: number; | ||
2329 | + /** | ||
2330 | + * @description | ||
2331 | + * 来源 | ||
2332 | + */ | ||
2333 | + rechargeSource?: string; | ||
2334 | + /** | ||
2335 | + * @description | ||
2336 | + * 销售代表 | ||
2337 | + */ | ||
2338 | + salesCode?: string; | ||
2339 | +} | ||
2340 | + | ||
2341 | +/** | ||
2342 | + * @description | ||
2343 | + * 开票添加对象 | ||
2344 | + */ | ||
2345 | +export interface StoreOrderInvoiceRequest { | ||
2346 | + /** | ||
2347 | + * @description | ||
2348 | + * 开票备注 | ||
2349 | + */ | ||
2350 | + comment?: string; | ||
2351 | + /** | ||
2352 | + * @description | ||
2353 | + * 开票内容 | ||
2354 | + */ | ||
2355 | + content?: string; | ||
2356 | + /** | ||
2357 | + * @description | ||
2358 | + * 创建时间 | ||
2359 | + * @format date-time | ||
2360 | + */ | ||
2361 | + createTime?: string; | ||
2362 | + /** | ||
2363 | + * @description | ||
2364 | + * 关联订单id | ||
2365 | + */ | ||
2366 | + orderIdList?: Array<number>; | ||
2367 | + /** | ||
2368 | + * @description | ||
2369 | + * 买方注册地址 | ||
2370 | + */ | ||
2371 | + partyAAddress?: string; | ||
2372 | + /** | ||
2373 | + * @description | ||
2374 | + * 买方开户行账号 | ||
2375 | + */ | ||
2376 | + partyABankAccount?: string; | ||
2377 | + /** | ||
2378 | + * @description | ||
2379 | + * 买方名称 | ||
2380 | + */ | ||
2381 | + partyAName?: string; | ||
2382 | + /** | ||
2383 | + * @description | ||
2384 | + * 买方开户行 | ||
2385 | + */ | ||
2386 | + partyAOpenBank?: string; | ||
2387 | + /** | ||
2388 | + * @description | ||
2389 | + * 买方电话号码 | ||
2390 | + */ | ||
2391 | + partyAPhoneNumber?: string; | ||
2392 | + /** | ||
2393 | + * @description | ||
2394 | + * 买方税号 | ||
2395 | + */ | ||
2396 | + partyATaxid?: string; | ||
2397 | + /** | ||
2398 | + * @description | ||
2399 | + * 抬头类型 | ||
2400 | + */ | ||
2401 | + partyAType?: string; | ||
2402 | + /** | ||
2403 | + * @description | ||
2404 | + * 卖方名称 | ||
2405 | + */ | ||
2406 | + partyBName?: string; | ||
2407 | + /** | ||
2408 | + * @description | ||
2409 | + * 发票金额 | ||
2410 | + * @format double | ||
2411 | + */ | ||
2412 | + price?: number; | ||
2413 | + /** | ||
2414 | + * @description | ||
2415 | + * 接收邮箱地址 | ||
2416 | + */ | ||
2417 | + receiveEmail?: string; | ||
2418 | + /** | ||
2419 | + * @description | ||
2420 | + * 发票类型 | ||
2421 | + */ | ||
2422 | + type?: string; | ||
2423 | + /** | ||
2424 | + * @description | ||
2425 | + * 用户id | ||
2426 | + */ | ||
2427 | + uid?: string; | ||
2428 | + /** | ||
2429 | + * @description | ||
2430 | + * 更新时间 | ||
2431 | + * @format date-time | ||
2432 | + */ | ||
2433 | + updateTime?: string; | ||
2434 | +} | ||
2435 | + | ||
2436 | +export interface TsgURL { | ||
2437 | + authority?: string; | ||
2438 | + content?: any; | ||
2439 | + /** @format int32 */ | ||
2440 | + defaultPort?: number; | ||
2441 | + deserializedFields?: URLStreamHandler; | ||
2442 | + file?: string; | ||
2443 | + host?: string; | ||
2444 | + path?: string; | ||
2445 | + /** @format int32 */ | ||
2446 | + port?: number; | ||
2447 | + protocol?: string; | ||
2448 | + query?: string; | ||
2449 | + ref?: string; | ||
2450 | + /** @format int32 */ | ||
2451 | + serializedHashCode?: number; | ||
2452 | + userInfo?: string; | ||
2453 | +} | ||
2454 | + | ||
1720 | export interface UploadPaymentReceiptDTO { | 2455 | export interface UploadPaymentReceiptDTO { |
1721 | /** | 2456 | /** |
1722 | * @description | 2457 | * @description |