Commit 62bc5c393f5ba413a9fa56b6fb0fceccf40242cd
1 parent
695fadca
feat: update 申请售后功能修改
Showing
4 changed files
with
117 additions
and
24 deletions
src/pages/Order/components/ApplyForInvoicingModal.tsx
@@ -19,14 +19,20 @@ export default ({ | @@ -19,14 +19,20 @@ export default ({ | ||
19 | isMainOrder, | 19 | isMainOrder, |
20 | onClose, | 20 | onClose, |
21 | }) => { | 21 | }) => { |
22 | - console.log(subOrders); | ||
23 | let ids = []; | 22 | let ids = []; |
24 | let newSubOrder = {}; | 23 | let newSubOrder = {}; |
24 | + let sumPrice = 0; | ||
25 | + | ||
26 | + for (let order of subOrders) { | ||
27 | + sumPrice += parseFloat(order.totalPayment); | ||
28 | + } | ||
29 | + | ||
25 | if (isMainOrder) { | 30 | if (isMainOrder) { |
26 | ids = data; | 31 | ids = data; |
27 | } else { | 32 | } else { |
28 | newSubOrder = cloneDeep(subOrders[0]); | 33 | newSubOrder = cloneDeep(subOrders[0]); |
29 | ids = subOrders?.map((item) => { | 34 | ids = subOrders?.map((item) => { |
35 | + sumPrice += parseFloat(item.totalPayment); | ||
30 | return item.id; | 36 | return item.id; |
31 | }); | 37 | }); |
32 | } | 38 | } |
@@ -126,6 +132,15 @@ export default ({ | @@ -126,6 +132,15 @@ export default ({ | ||
126 | }} | 132 | }} |
127 | onOpenChange={setCheckVisible} | 133 | onOpenChange={setCheckVisible} |
128 | > | 134 | > |
135 | + {isMainOrder ? ( | ||
136 | + <div className="mb-[24px]"> | ||
137 | + <span>总订单金额:</span> | ||
138 | + <span className="text-red-500">{sumPrice}¥</span> | ||
139 | + </div> | ||
140 | + ) : ( | ||
141 | + '' | ||
142 | + )} | ||
143 | + | ||
129 | <div className="mb-1"> | 144 | <div className="mb-1"> |
130 | 如果需要合并订单,请将需要合并的订单id写在备注中,id之间用英文逗号隔开。 | 145 | 如果需要合并订单,请将需要合并的订单id写在备注中,id之间用英文逗号隔开。 |
131 | </div> | 146 | </div> |
src/pages/Order/components/CheckModal.tsx
@@ -247,19 +247,23 @@ export default ({ | @@ -247,19 +247,23 @@ export default ({ | ||
247 | let formData = new FormData(); | 247 | let formData = new FormData(); |
248 | //附件处理 | 248 | //附件处理 |
249 | for (let file of fileList) { | 249 | for (let file of fileList) { |
250 | - //有url的话取url(源文件),没url取thumbUrl。有url的时候thumbUrl是略缩图 | ||
251 | - if (file?.url === undefined || file?.url === null) { | ||
252 | - formData.append( | ||
253 | - 'files', | ||
254 | - transImageFile(file?.thumbUrl), | ||
255 | - file?.originFileObj?.name, | ||
256 | - ); | 250 | + if (file.originFileObj) { |
251 | + formData.append('files', file.originFileObj as RcFile); | ||
257 | } else { | 252 | } else { |
258 | - formData.append( | ||
259 | - 'files', | ||
260 | - transImageFile(file?.url), | ||
261 | - file?.originFileObj?.name, | ||
262 | - ); | 253 | + //有url的话取url(源文件),没url取thumbUrl。有url的时候thumbUrl是略缩图 |
254 | + if (file?.url === undefined || file?.url === null) { | ||
255 | + formData.append( | ||
256 | + 'files', | ||
257 | + transImageFile(file?.thumbUrl), | ||
258 | + file?.originFileObj?.name, | ||
259 | + ); | ||
260 | + } else { | ||
261 | + formData.append( | ||
262 | + 'files', | ||
263 | + transImageFile(file?.url), | ||
264 | + file?.originFileObj?.name, | ||
265 | + ); | ||
266 | + } | ||
263 | } | 267 | } |
264 | } | 268 | } |
265 | let res = await postServiceOrderFileProcess({ | 269 | let res = await postServiceOrderFileProcess({ |
src/pages/Order/components/OrderDrawer.tsx
1 | import { RESPONSE_CODE } from '@/constants/enum'; | 1 | import { RESPONSE_CODE } from '@/constants/enum'; |
2 | import { | 2 | import { |
3 | postServiceOrderAddOrder, | 3 | postServiceOrderAddOrder, |
4 | + postServiceOrderApplyAfterSales, | ||
4 | postServiceOrderQueryCustomerNameInformation, | 5 | postServiceOrderQueryCustomerNameInformation, |
5 | postServiceOrderQueryProductInformation, | 6 | postServiceOrderQueryProductInformation, |
6 | postServiceOrderQuerySalesCode, | 7 | postServiceOrderQuerySalesCode, |
@@ -27,6 +28,7 @@ import { Button, Form, message } from 'antd'; | @@ -27,6 +28,7 @@ import { Button, Form, message } from 'antd'; | ||
27 | import { cloneDeep } from 'lodash'; | 28 | import { cloneDeep } from 'lodash'; |
28 | import { useEffect, useRef, useState } from 'react'; | 29 | import { useEffect, useRef, useState } from 'react'; |
29 | import { | 30 | import { |
31 | + AFTE_SALES_PLAN_OPTIONS, | ||
30 | INVOCING_STATUS_OPTIONS, | 32 | INVOCING_STATUS_OPTIONS, |
31 | INVOCING_STATUS_OPTIONS_OLD, | 33 | INVOCING_STATUS_OPTIONS_OLD, |
32 | PAYMENT_CHANNEL_OPTIONS, | 34 | PAYMENT_CHANNEL_OPTIONS, |
@@ -37,6 +39,7 @@ import { | @@ -37,6 +39,7 @@ import { | ||
37 | export default ({ onClose, data, subOrders, orderOptType }) => { | 39 | export default ({ onClose, data, subOrders, orderOptType }) => { |
38 | const [invoicingStatus, setInvoicingStatus] = useState(''); | 40 | const [invoicingStatus, setInvoicingStatus] = useState(''); |
39 | const [salesCodeOptions, setSalesCodeOptions] = useState([]); | 41 | const [salesCodeOptions, setSalesCodeOptions] = useState([]); |
42 | + const [drawerTitle, setDrawerTitle] = useState(''); | ||
40 | const [form] = Form.useForm<{ | 43 | const [form] = Form.useForm<{ |
41 | salesCode: ''; | 44 | salesCode: ''; |
42 | customerName: ''; | 45 | customerName: ''; |
@@ -54,6 +57,7 @@ export default ({ onClose, data, subOrders, orderOptType }) => { | @@ -54,6 +57,7 @@ export default ({ onClose, data, subOrders, orderOptType }) => { | ||
54 | bank: ''; | 57 | bank: ''; |
55 | bankAccountNumber: ''; | 58 | bankAccountNumber: ''; |
56 | deleteSubOrderLists: []; | 59 | deleteSubOrderLists: []; |
60 | + filePaths: []; | ||
57 | notes: ''; | 61 | notes: ''; |
58 | list: [ | 62 | list: [ |
59 | { | 63 | { |
@@ -107,7 +111,6 @@ export default ({ onClose, data, subOrders, orderOptType }) => { | @@ -107,7 +111,6 @@ export default ({ onClose, data, subOrders, orderOptType }) => { | ||
107 | includeFlag = true; | 111 | includeFlag = true; |
108 | } | 112 | } |
109 | } | 113 | } |
110 | - console.log(includeFlag); | ||
111 | if (!includeFlag) { | 114 | if (!includeFlag) { |
112 | form.resetFields(['salesCode']); | 115 | form.resetFields(['salesCode']); |
113 | message.warning('检测到销售代码为旧的,已清空,请重新选择'); | 116 | message.warning('检测到销售代码为旧的,已清空,请重新选择'); |
@@ -117,6 +120,20 @@ export default ({ onClose, data, subOrders, orderOptType }) => { | @@ -117,6 +120,20 @@ export default ({ onClose, data, subOrders, orderOptType }) => { | ||
117 | 120 | ||
118 | useEffect(() => { | 121 | useEffect(() => { |
119 | getSalesCodeOptions(); | 122 | getSalesCodeOptions(); |
123 | + | ||
124 | + //弹窗标题 | ||
125 | + if (optType('add')) { | ||
126 | + setDrawerTitle('新增订单'); | ||
127 | + } | ||
128 | + if (optType('copy')) { | ||
129 | + setDrawerTitle('复制订单'); | ||
130 | + } | ||
131 | + if (optType('edit')) { | ||
132 | + setDrawerTitle('修改订单'); | ||
133 | + } | ||
134 | + if (optType('after-sales')) { | ||
135 | + setDrawerTitle('申请售后'); | ||
136 | + } | ||
120 | }, []); | 137 | }, []); |
121 | 138 | ||
122 | useEffect(() => { | 139 | useEffect(() => { |
@@ -127,7 +144,7 @@ export default ({ onClose, data, subOrders, orderOptType }) => { | @@ -127,7 +144,7 @@ export default ({ onClose, data, subOrders, orderOptType }) => { | ||
127 | }, [data]); | 144 | }, [data]); |
128 | 145 | ||
129 | // let mainInfoDisbled = optType('edit'); | 146 | // let mainInfoDisbled = optType('edit'); |
130 | - if (optType('edit') || optType('copy')) { | 147 | + if (optType('edit') || optType('copy') || optType('after-sales')) { |
131 | //如果是复制,需要开票,不回显是否需要开票字段 | 148 | //如果是复制,需要开票,不回显是否需要开票字段 |
132 | if (optType('copy')) { | 149 | if (optType('copy')) { |
133 | if (data.invoicingStatus === 'INVOICED') { | 150 | if (data.invoicingStatus === 'INVOICED') { |
@@ -251,7 +268,7 @@ export default ({ onClose, data, subOrders, orderOptType }) => { | @@ -251,7 +268,7 @@ export default ({ onClose, data, subOrders, orderOptType }) => { | ||
251 | }> | 268 | }> |
252 | open | 269 | open |
253 | width="35%" | 270 | width="35%" |
254 | - title={optType('add') || optType('copy') ? '新建订单' : '修改订单'} | 271 | + title={drawerTitle} |
255 | resize={{ | 272 | resize={{ |
256 | onResize() { | 273 | onResize() { |
257 | console.log('resize!'); | 274 | console.log('resize!'); |
@@ -285,9 +302,12 @@ export default ({ onClose, data, subOrders, orderOptType }) => { | @@ -285,9 +302,12 @@ export default ({ onClose, data, subOrders, orderOptType }) => { | ||
285 | values.institution = values.institution?.trim(); | 302 | values.institution = values.institution?.trim(); |
286 | values.institutionContactName = values.institutionContactName?.trim(); | 303 | values.institutionContactName = values.institutionContactName?.trim(); |
287 | 304 | ||
305 | + //新增 | ||
288 | if (optType('add') || optType('copy')) { | 306 | if (optType('add') || optType('copy')) { |
289 | res = await postServiceOrderAddOrder({ data: values }); | 307 | res = await postServiceOrderAddOrder({ data: values }); |
290 | - } else { | 308 | + } |
309 | + //修改或者申请售后 | ||
310 | + if (optType('edit') || optType('after-sales')) { | ||
291 | //计算已删除的子订单id | 311 | //计算已删除的子订单id |
292 | const originIds = originSubOrders.map((item) => { | 312 | const originIds = originSubOrders.map((item) => { |
293 | return item.id; | 313 | return item.id; |
@@ -297,7 +317,21 @@ export default ({ onClose, data, subOrders, orderOptType }) => { | @@ -297,7 +317,21 @@ export default ({ onClose, data, subOrders, orderOptType }) => { | ||
297 | }); | 317 | }); |
298 | let diff = originIds.filter((item) => !curIds.includes(item)); | 318 | let diff = originIds.filter((item) => !curIds.includes(item)); |
299 | values.deleteSubOrderLists = diff; | 319 | values.deleteSubOrderLists = diff; |
300 | - res = await postServiceOrderUpdateOrder({ data: values }); | 320 | + |
321 | + if (optType('edit')) { | ||
322 | + res = await postServiceOrderUpdateOrder({ data: values }); | ||
323 | + } | ||
324 | + | ||
325 | + if (optType('after-sales')) { | ||
326 | + values.filePaths = values.filePaths?.map((file) => { | ||
327 | + return { url: file.response.data[0] }; | ||
328 | + }); | ||
329 | + let res = await postServiceOrderApplyAfterSales({ data: values }); | ||
330 | + if (res?.result === RESPONSE_CODE.SUCCESS) { | ||
331 | + message.success(res.message); | ||
332 | + onClose(); | ||
333 | + } | ||
334 | + } | ||
301 | } | 335 | } |
302 | 336 | ||
303 | if (res.result === RESPONSE_CODE.SUCCESS) { | 337 | if (res.result === RESPONSE_CODE.SUCCESS) { |
@@ -311,6 +345,39 @@ export default ({ onClose, data, subOrders, orderOptType }) => { | @@ -311,6 +345,39 @@ export default ({ onClose, data, subOrders, orderOptType }) => { | ||
311 | return !val && onClose(); | 345 | return !val && onClose(); |
312 | }} | 346 | }} |
313 | > | 347 | > |
348 | + {optType('after-sales') ? ( | ||
349 | + <> | ||
350 | + <h2>售后信息</h2> | ||
351 | + <ProFormSelect | ||
352 | + key="key" | ||
353 | + label="售后方案" | ||
354 | + width="lg" | ||
355 | + showSearch | ||
356 | + name="afterSalesPlan" | ||
357 | + options={enumToSelect(AFTE_SALES_PLAN_OPTIONS)} | ||
358 | + placeholder="请搜索" | ||
359 | + rules={[{ required: true, message: '售后方案必填' }]} | ||
360 | + ></ProFormSelect> | ||
361 | + <ProFormTextArea | ||
362 | + width="lg" | ||
363 | + label="售后原因" | ||
364 | + name="afterSalesNotes" | ||
365 | + rules={[{ required: true, message: '售后原因必填' }]} | ||
366 | + /> | ||
367 | + <ProFormUploadDragger | ||
368 | + key="filePaths" | ||
369 | + label="售后附件" | ||
370 | + name="filePaths" | ||
371 | + action="/api/service/order/fileProcess" | ||
372 | + fieldProps={{ | ||
373 | + headers: { Authorization: localStorage.getItem('token') }, | ||
374 | + }} | ||
375 | + /> | ||
376 | + </> | ||
377 | + ) : ( | ||
378 | + '' | ||
379 | + )} | ||
380 | + | ||
314 | <h2>订单基本信息</h2> | 381 | <h2>订单基本信息</h2> |
315 | <ProFormText | 382 | <ProFormText |
316 | key="id" | 383 | key="id" |
@@ -602,10 +669,11 @@ export default ({ onClose, data, subOrders, orderOptType }) => { | @@ -602,10 +669,11 @@ export default ({ onClose, data, subOrders, orderOptType }) => { | ||
602 | }, | 669 | }, |
603 | ]} | 670 | ]} |
604 | actionGuard={{ | 671 | actionGuard={{ |
605 | - beforeRemoveRow: async (index) => { | 672 | + beforeRemoveRow: async () => { |
606 | return new Promise((resolve) => { | 673 | return new Promise((resolve) => { |
607 | - if (index === 0) { | ||
608 | - message.error('第一行数据不能删除'); | 674 | + let list = form.getFieldValue('list'); |
675 | + if (list?.length === 1) { | ||
676 | + message.error('删除失败,至少要有一个商品'); | ||
609 | resolve(false); | 677 | resolve(false); |
610 | return; | 678 | return; |
611 | } | 679 | } |
src/pages/Order/index.tsx
@@ -1049,7 +1049,7 @@ const OrderPage = () => { | @@ -1049,7 +1049,7 @@ const OrderPage = () => { | ||
1049 | '' | 1049 | '' |
1050 | )} | 1050 | )} |
1051 | 1051 | ||
1052 | - {optRecord.subPath?.includes('applyAfterSales') ? ( | 1052 | + {/* {optRecord.subPath?.includes('applyAfterSales') ? ( |
1053 | <Button | 1053 | <Button |
1054 | className="p-0" | 1054 | className="p-0" |
1055 | type="link" | 1055 | type="link" |
@@ -1063,7 +1063,7 @@ const OrderPage = () => { | @@ -1063,7 +1063,7 @@ const OrderPage = () => { | ||
1063 | </Button> | 1063 | </Button> |
1064 | ) : ( | 1064 | ) : ( |
1065 | '' | 1065 | '' |
1066 | - )} | 1066 | + )} */} |
1067 | 1067 | ||
1068 | {optRecord.subPath?.includes('afterSalesCompletion') ? ( | 1068 | {optRecord.subPath?.includes('afterSalesCompletion') ? ( |
1069 | <ButtonConfirm | 1069 | <ButtonConfirm |
@@ -1924,8 +1924,9 @@ const OrderPage = () => { | @@ -1924,8 +1924,9 @@ const OrderPage = () => { | ||
1924 | return; | 1924 | return; |
1925 | } | 1925 | } |
1926 | } | 1926 | } |
1927 | - setAfterSalesDrawerVisible(true); | 1927 | + setOrderDrawerVisible(true); |
1928 | setOrderRow(record); | 1928 | setOrderRow(record); |
1929 | + setOrderOptType('after-sales'); | ||
1929 | }} | 1930 | }} |
1930 | > | 1931 | > |
1931 | 申请售后 | 1932 | 申请售后 |
@@ -2204,6 +2205,11 @@ const OrderPage = () => { | @@ -2204,6 +2205,11 @@ const OrderPage = () => { | ||
2204 | //选中订单 | 2205 | //选中订单 |
2205 | setIsEdit(false); | 2206 | setIsEdit(false); |
2206 | setIsMainOrder(true); | 2207 | setIsMainOrder(true); |
2208 | + let mainOrderList = []; | ||
2209 | + for (let order of mainOrderSelectedMap.values()) { | ||
2210 | + mainOrderList.push(order); | ||
2211 | + } | ||
2212 | + setSelectedRows(mainOrderList); | ||
2207 | }} | 2213 | }} |
2208 | disabled={selectedItems?.length === 0} | 2214 | disabled={selectedItems?.length === 0} |
2209 | > | 2215 | > |