Commit 62bc5c393f5ba413a9fa56b6fb0fceccf40242cd

Authored by zhongnanhuang
1 parent 695fadca

feat: update 申请售后功能修改

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 &#39;antd&#39;; @@ -27,6 +28,7 @@ import { Button, Form, message } from &#39;antd&#39;;
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 }) =&gt; { @@ -54,6 +57,7 @@ export default ({ onClose, data, subOrders, orderOptType }) =&gt; {
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 }) =&gt; { @@ -107,7 +111,6 @@ export default ({ onClose, data, subOrders, orderOptType }) =&gt; {
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 }) =&gt; { @@ -117,6 +120,20 @@ export default ({ onClose, data, subOrders, orderOptType }) =&gt; {
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 }) =&gt; { @@ -127,7 +144,7 @@ export default ({ onClose, data, subOrders, orderOptType }) =&gt; {
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 }) =&gt; { @@ -251,7 +268,7 @@ export default ({ onClose, data, subOrders, orderOptType }) =&gt; {
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 }) =&gt; { @@ -285,9 +302,12 @@ export default ({ onClose, data, subOrders, orderOptType }) =&gt; {
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 }) =&gt; { @@ -297,7 +317,21 @@ export default ({ onClose, data, subOrders, orderOptType }) =&gt; {
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 }) =&gt; { @@ -311,6 +345,39 @@ export default ({ onClose, data, subOrders, orderOptType }) =&gt; {
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 }) =&gt; { @@ -602,10 +669,11 @@ export default ({ onClose, data, subOrders, orderOptType }) =&gt; {
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 = () =&gt; { @@ -1049,7 +1049,7 @@ const OrderPage = () =&gt; {
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 = () =&gt; { @@ -1063,7 +1063,7 @@ const OrderPage = () =&gt; {
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 = () =&gt; { @@ -1924,8 +1924,9 @@ const OrderPage = () =&gt; {
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 = () =&gt; { @@ -2204,6 +2205,11 @@ const OrderPage = () =&gt; {
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 >