Commit 42e2522f authored by XieZhiXiong's avatar XieZhiXiong

对接售后换货中

parent 0ca4ecdc
...@@ -2,12 +2,15 @@ ...@@ -2,12 +2,15 @@
* @Author: XieZhiXiong * @Author: XieZhiXiong
* @Date: 2020-11-06 09:54:04 * @Date: 2020-11-06 09:54:04
* @LastEditors: XieZhiXiong * @LastEditors: XieZhiXiong
* @LastEditTime: 2020-11-17 17:49:19 * @LastEditTime: 2020-11-20 14:43:15
* @Description: 退货地址信息 * @Description: 换货收货地址
*/ */
import React from 'react'; import React from 'react';
import MellowCard from '@/components/MellowCard'; import MellowCard from '@/components/MellowCard';
import { createFormActions, FormEffectHooks, FormPath } from '@formily/antd'; import { createFormActions, FormEffectHooks, FormPath } from '@formily/antd';
import { PublicApi } from '@/services/api';
import { useAsyncSelect } from '@/formSchema/effects/useAsyncSelect';
import { useLinkageUtils } from '@/utils/formEffectUtils';
import NiceForm from '@/components/NiceForm'; import NiceForm from '@/components/NiceForm';
import { schema } from './schema'; import { schema } from './schema';
import styles from './index.less'; import styles from './index.less';
...@@ -18,23 +21,88 @@ const { ...@@ -18,23 +21,88 @@ const {
onFieldInputChange$, onFieldInputChange$,
} = FormEffectHooks; } = FormEffectHooks;
export interface Values {
deliveryType: number,
id: number,
isDefault: number,
sendAddress: string | undefined,
sendUserName: string | undefined,
sendUserTel: string | undefined,
};
interface ExchangeAddressInfo { interface ExchangeAddressInfo {
// 是否是编辑的 // 是否是编辑的
isEdit?: boolean; isEdit?: boolean;
// 换货收货地址
deliveryAddress: {
// id
id?: number;
// 配送方式
deliveryType?: number;
// 收件人姓名
name: string;
// phone
phone: string;
// 完整地址
fullAddress: string;
},
// 换货发货地址
shippingAddress: {
// id
id?: number;
// 配送方式
deliveryType?: number;
// 收件人姓名
name: string;
// phone
phone: string;
// 完整地址
fullAddress: string;
},
// onSubmit
onSubmit: (values: Values) => void;
}; };
const ExchangeAddressInfo: React.FC<ExchangeAddressInfo> = ({ const ExchangeAddressInfo: React.FC<ExchangeAddressInfo> = ({
isEdit = false, isEdit = false,
deliveryAddress = {},
shippingAddress = {},
onSubmit,
}) => { }) => {
const handleSubmit = values => { const handleSubmit = values => {
}; };
const DeliveryAddress = ( // 获取发货地址
const fetchShipperAddress = (): Promise<any[]> => {
return new Promise((resolve, reject) => {
PublicApi.getLogisticsSelectListShipperAddress().then(res => {
if (res.code === 1000) {
const options =
res.data ?
res.data.map(item => ({
label: `${item.fullAddress}/${item.shipperName}/${item.phone}`,
value: item.id,
...item,
})) :
[];
resolve(options);
}
reject();
}).catch(() => {
reject();
});
});
};
const Address = (
<div> <div>
<p>张三 / 185 2929 6475</p> <p>{deliveryAddress.name || ''} / {deliveryAddress.phone || ''}</p>
<p>广东省广州市海珠区新港东路1068号中洲中心北塔6楼</p> <p>{deliveryAddress.fullAddress || ''}</p>
</div> </div>
); );
...@@ -44,11 +112,62 @@ const ExchangeAddressInfo: React.FC<ExchangeAddressInfo> = ({ ...@@ -44,11 +112,62 @@ const ExchangeAddressInfo: React.FC<ExchangeAddressInfo> = ({
fullHeight fullHeight
> >
<NiceForm <NiceForm
initialValues={{
deliveryType: shippingAddress.deliveryType,
shippingAddress: shippingAddress.id,
pickupAddress: shippingAddress.id,
}}
expressionScope={{ expressionScope={{
DeliveryAddress, Address,
}} }}
effects={($, { setFieldState }) => { effects={($, { setFieldState, getFieldValue }) => {
useAsyncSelect('*(shippingAddress,pickupAddress)', fetchShipperAddress, ['label', 'value']);
const linkage = useLinkageUtils();
// 联动配送方式
onFieldValueChange$('deliveryType').subscribe(fieldState => {
const { name, value } = fieldState;
switch (value) {
// 物流
case 1: {
linkage.show('shippingAddress');
linkage.hide('pickupAddress');
break;
};
// 自提
case 2: {
linkage.hide('shippingAddress');
linkage.show('pickupAddress');
break;
};
// 无需物流
case 3: {
linkage.hide('*(shippingAddress,pickupAddress)');
break;
};
default:
break
};
});
onFieldInputChange$('*(shippingAddress,pickupAddress)').subscribe(fieldState => {
const { name, value, originAsyncData } = fieldState;
const deliveryTypeValue = getFieldValue('deliveryType');
const fullData = originAsyncData.find(item => item.id === value);
if (onSubmit) {
onSubmit({
deliveryType: deliveryTypeValue,
id: fullData ? fullData.id : undefined,
isDefault: fullData ? fullData.isDefault : undefined,
sendAddress: fullData ? fullData.fullAddress : undefined,
sendUserName: fullData ? fullData.shipperName : undefined,
sendUserTel: fullData ? fullData.phone : undefined,
});
}
});
}} }}
editable={isEdit} editable={isEdit}
actions={modalFormActions} actions={modalFormActions}
......
...@@ -2,10 +2,11 @@ ...@@ -2,10 +2,11 @@
* @Author: XieZhiXiong * @Author: XieZhiXiong
* @Date: 2020-11-09 15:56:35 * @Date: 2020-11-09 15:56:35
* @LastEditors: XieZhiXiong * @LastEditors: XieZhiXiong
* @LastEditTime: 2020-11-17 17:46:41 * @LastEditTime: 2020-11-20 14:54:37
* @Description: * @Description:
*/ */
import { ISchema } from '@formily/antd'; import { ISchema } from '@formily/antd';
import { UPLOAD_TYPE, DELIVERY_TYPE_ENUM } from '@/constants';
export const schema: ISchema = { export const schema: ISchema = {
type: 'object', type: 'object',
...@@ -14,35 +15,64 @@ export const schema: ISchema = { ...@@ -14,35 +15,64 @@ export const schema: ISchema = {
type: 'object', type: 'object',
'x-component': 'mega-layout', 'x-component': 'mega-layout',
'x-component-props': { 'x-component-props': {
labelCol: 6, labelCol: 8,
full: true, wrapperCol: 16,
labelAlign: 'left', labelAlign: 'left',
}, },
properties: { properties: {
mode: { deliveryType: {
type: 'string',
title: '配送方式', title: '配送方式',
default: '物流', type: 'string',
'x-component': 'Text', default: 1,
'x-component-props': {}, enum: DELIVERY_TYPE_ENUM,
'x-component-props': {
style: {
width: '80%',
},
},
}, },
shippingAddress: { deliveryAddress: {
type: 'string', type: 'string',
title: '换货收货地址', title: '换货收货地址',
enum: [], 'x-component': 'Children',
required: true,
'x-component-props': { 'x-component-props': {
placeholder: '请选择', children: '{{Address}}',
}, },
}, },
deliveryAddress: { shippingAddress: {
type: 'string', type: 'string',
title: '换货发货地址', title: '换货发货地址',
'x-component': 'Children', enum: [],
'x-component-props': { 'x-component-props': {
children: '{{DeliveryAddress}}', placeholder: '请选择',
style: {
width: '80%',
},
}, },
'x-rules': [
{
required: true,
message: '请选择换货发货地址',
},
],
}, },
pickupAddress: {
type: 'string',
title: '换货自提地址',
enum: [],
'x-component-props': {
placeholder: '请选择',
style: {
width: '80%',
},
},
'x-rules': [
{
required: true,
message: '请选择换货自提地址',
},
],
},
}, },
}, },
}, },
......
...@@ -2,12 +2,15 @@ ...@@ -2,12 +2,15 @@
* @Author: XieZhiXiong * @Author: XieZhiXiong
* @Date: 2020-11-06 09:54:04 * @Date: 2020-11-06 09:54:04
* @LastEditors: XieZhiXiong * @LastEditors: XieZhiXiong
* @LastEditTime: 2020-11-12 13:48:08 * @LastEditTime: 2020-11-20 15:40:21
* @Description: 退货地址信息 * @Description: 退货地址信息
*/ */
import React from 'react'; import React from 'react';
import MellowCard from '@/components/MellowCard'; import MellowCard from '@/components/MellowCard';
import { createFormActions, FormEffectHooks, FormPath } from '@formily/antd'; import { createFormActions, FormEffectHooks, FormPath } from '@formily/antd';
import { PublicApi } from '@/services/api';
import { useAsyncSelect } from '@/formSchema/effects/useAsyncSelect';
import { useLinkageUtils } from '@/utils/formEffectUtils';
import NiceForm from '@/components/NiceForm'; import NiceForm from '@/components/NiceForm';
import { schema } from './schema'; import { schema } from './schema';
import styles from './index.less'; import styles from './index.less';
...@@ -18,23 +21,88 @@ const { ...@@ -18,23 +21,88 @@ const {
onFieldInputChange$, onFieldInputChange$,
} = FormEffectHooks; } = FormEffectHooks;
export interface Values {
deliveryType: number,
id: number,
isDefault: number,
receiveAddress: string | undefined,
receiveUserName: string | undefined,
receiveUserTel: string | undefined,
};
interface ReturnAddressInfo { interface ReturnAddressInfo {
// 是否是编辑的 // 是否是编辑的
isEdit?: boolean; isEdit?: boolean;
// 退货收货地址
deliveryAddress: {
// id
id?: number;
// 配送方式
deliveryType?: number;
// 收件人姓名
name: string;
// phone
phone: string;
// 完整地址
fullAddress: string;
},
// 退货发货地址
shippingAddress: {
// id
id?: number;
// 配送方式
deliveryType?: number;
// 收件人姓名
name: string;
// phone
phone: string;
// 完整地址
fullAddress: string;
},
// onSubmit
onSubmit: (values: Values) => void;
}; };
const ReturnAddressInfo: React.FC<ReturnAddressInfo> = ({ const ReturnAddressInfo: React.FC<ReturnAddressInfo> = ({
isEdit = false, isEdit = false,
deliveryAddress = {},
shippingAddress = {},
onSubmit,
}) => { }) => {
const handleSubmit = values => { const handleSubmit = values => {
}; };
const DeliveryAddress = ( // 获取收货地址
const fetchDeliveryAddress = (): Promise<any[]> => {
return new Promise((resolve, reject) => {
PublicApi.getLogisticsSelectListReceiverAddress().then(res => {
if (res.code === 1000) {
const options =
res.data ?
res.data.map(item => ({
label: `${item.fullAddress}/${item.receiverName}/${item.phone}`,
value: item.id,
...item,
})) :
[];
resolve(options);
}
reject();
}).catch(() => {
reject();
});
});
};
const Address = (
<div> <div>
<p>张三 / 185 2929 6475</p> <p>{shippingAddress.name || ''} / {shippingAddress.phone || ''}</p>
<p>广东省广州市海珠区新港东路1068号中洲中心北塔6楼</p> <p>{shippingAddress.fullAddress || ''}</p>
</div> </div>
); );
...@@ -43,14 +111,62 @@ const ReturnAddressInfo: React.FC<ReturnAddressInfo> = ({ ...@@ -43,14 +111,62 @@ const ReturnAddressInfo: React.FC<ReturnAddressInfo> = ({
title="退货收货地址" title="退货收货地址"
fullHeight fullHeight
> >
<NiceForm <NiceForm
effects={($, { setFieldState }) => { initialValues={{
onFieldValueChange$('shippingAddress').subscribe(fieldState => { deliveryType: shippingAddress.deliveryType,
console.log('配送方式', fieldState.value); deliveryAddress: deliveryAddress.id,
}}
effects={($, { setFieldState, getFieldValue }) => {
useAsyncSelect('deliveryAddress', fetchDeliveryAddress, ['label', 'value']);
const linkage = useLinkageUtils();
// 联动配送方式
onFieldValueChange$('deliveryType').subscribe(fieldState => {
const { name, value } = fieldState;
switch (value) {
// 物流
case 1: {
linkage.show('shippingAddress');
linkage.hide('pickupAddress');
break;
};
// 自提
case 2: {
linkage.hide('shippingAddress');
linkage.show('pickupAddress');
break;
};
// 无需物流
case 3: {
linkage.hide('*(shippingAddress,pickupAddress)');
break;
};
default:
break
};
});
onFieldInputChange$('deliveryAddress').subscribe(fieldState => {
const { name, value, originAsyncData } = fieldState;
const deliveryTypeValue = getFieldValue('deliveryType');
const fullData = originAsyncData.find(item => item.id === value);
if (onSubmit) {
onSubmit({
deliveryType: deliveryTypeValue,
id: fullData ? fullData.id : undefined,
isDefault: fullData ? fullData.isDefault : undefined,
receiveAddress: fullData ? fullData.fullAddress : undefined,
receiveUserName: fullData ? fullData.receiverName : undefined,
receiveUserTel: fullData ? fullData.phone : undefined,
});
}
}); });
}} }}
expressionScope={{ expressionScope={{
DeliveryAddress, Address,
}} }}
editable={isEdit} editable={isEdit}
actions={modalFormActions} actions={modalFormActions}
......
...@@ -2,10 +2,11 @@ ...@@ -2,10 +2,11 @@
* @Author: XieZhiXiong * @Author: XieZhiXiong
* @Date: 2020-11-09 15:56:35 * @Date: 2020-11-09 15:56:35
* @LastEditors: XieZhiXiong * @LastEditors: XieZhiXiong
* @LastEditTime: 2020-11-09 16:19:24 * @LastEditTime: 2020-11-20 15:41:12
* @Description: * @Description:
*/ */
import { ISchema } from '@formily/antd'; import { ISchema } from '@formily/antd';
import { UPLOAD_TYPE, DELIVERY_TYPE_ENUM } from '@/constants';
export const schema: ISchema = { export const schema: ISchema = {
type: 'object', type: 'object',
...@@ -14,35 +15,55 @@ export const schema: ISchema = { ...@@ -14,35 +15,55 @@ export const schema: ISchema = {
type: 'object', type: 'object',
'x-component': 'mega-layout', 'x-component': 'mega-layout',
'x-component-props': { 'x-component-props': {
labelCol: 6, labelCol: 8,
full: true, wrapperCol: 16,
labelAlign: 'left', labelAlign: 'left',
}, },
properties: { properties: {
mode: { deliveryType: {
type: 'string',
title: '配送方式', title: '配送方式',
default: '物流', type: 'string',
'x-component': 'Text', enum: DELIVERY_TYPE_ENUM,
'x-component-props': {}, editable: false,
'x-component-props': {
style: {
width: '80%',
},
},
}, },
shippingAddress: { deliveryAddress: {
type: 'string', type: 'string',
title: '退货收货地址', title: '退货收货地址',
enum: [], enum: [],
required: true,
'x-component-props': { 'x-component-props': {
placeholder: '请选择', placeholder: '请选择',
}, style: {
width: '80%',
},
},
'x-rules': [
{
required: true,
message: '请选择退货收货地址',
},
],
}, },
deliveryAddress: { shippingAddress: {
type: 'string', type: 'string',
title: '退货发货地址', title: '退货发货地址',
'x-component': 'Children', 'x-component': 'Children',
'x-component-props': { 'x-component-props': {
children: '{{DeliveryAddress}}', children: '{{Address}}',
}, },
}, },
pickupAddress: {
type: 'string',
title: '退货自提地址',
'x-component': 'Children',
'x-component-props': {
children: '{{Address}}',
},
},
}, },
}, },
}, },
......
...@@ -2,7 +2,7 @@ ...@@ -2,7 +2,7 @@
* @Author: XieZhiXiong * @Author: XieZhiXiong
* @Date: 2020-11-06 16:30:44 * @Date: 2020-11-06 16:30:44
* @LastEditors: XieZhiXiong * @LastEditors: XieZhiXiong
* @LastEditTime: 2020-11-19 18:15:56 * @LastEditTime: 2020-11-20 16:03:42
* @Description: 待新增退货发货单 * @Description: 待新增退货发货单
*/ */
import React, { useState, useRef } from 'react'; import React, { useState, useRef } from 'react';
...@@ -67,7 +67,7 @@ const ExchangePrAddDeliver: React.FC = () => { ...@@ -67,7 +67,7 @@ const ExchangePrAddDeliver: React.FC = () => {
}, },
{ {
title: '申请单摘要', title: '申请单摘要',
dataIndex: 'parentMemberName', dataIndex: 'applyAbstract',
align: 'center', align: 'center',
}, },
{ {
...@@ -77,17 +77,17 @@ const ExchangePrAddDeliver: React.FC = () => { ...@@ -77,17 +77,17 @@ const ExchangePrAddDeliver: React.FC = () => {
}, },
{ {
title: '单据时间', title: '单据时间',
dataIndex: 'created', dataIndex: 'applyTime',
align: 'center', align: 'center',
}, },
{ {
title: '退货批次', title: '退货批次',
dataIndex: 'batch', dataIndex: 'returnBatch',
align: 'center', align: 'center',
}, },
{ {
title: '退货发货单号', title: '退货发货单号',
dataIndex: 'deliverNo', dataIndex: 'returnDeliveryNo',
align: 'center', align: 'center',
render: text => <a>{text}</a>, render: text => <a>{text}</a>,
}, },
......
...@@ -58,7 +58,7 @@ const ExchangeForm: React.FC<BillsFormProps> = ({ ...@@ -58,7 +58,7 @@ const ExchangeForm: React.FC<BillsFormProps> = ({
const [replaceGoodsList, setReplaceGoodsList] = useState<GetAsReplaceGoodsPageReturnedGoodsResponse>({ data: [], totalCount: 0 }); const [replaceGoodsList, setReplaceGoodsList] = useState<GetAsReplaceGoodsPageReturnedGoodsResponse>({ data: [], totalCount: 0 });
const [unsaved, setUnsaved] = useState(false); const [unsaved, setUnsaved] = useState(false);
const [infoLoading, setInfoLoading] = useState(false); const [infoLoading, setInfoLoading] = useState(false);
const [replaceGoodsLoading, setRepairGoodsLoading] = useState(false); const [replaceGoodsLoading, setExchangeGoodsLoading] = useState(false);
const [goodsValue, setGoodsValue] = useState([]); const [goodsValue, setGoodsValue] = useState([]);
const [submitLoading, setSubmitLoading] = useState(false); const [submitLoading, setSubmitLoading] = useState(false);
const [visibleGoodsDrawer, setVisibleGoodsDrawer] = useState(false); const [visibleGoodsDrawer, setVisibleGoodsDrawer] = useState(false);
...@@ -194,14 +194,13 @@ const ExchangeForm: React.FC<BillsFormProps> = ({ ...@@ -194,14 +194,13 @@ const ExchangeForm: React.FC<BillsFormProps> = ({
); );
setDetailInfo({ setDetailInfo({
...detailInfo,
proofFileList: faultFileList.map(item => normalizeFiledata(item.filePath)), proofFileList: faultFileList.map(item => normalizeFiledata(item.filePath)),
deliveryAddress: { deliveryAddress: {
fullAddress: replaceGoodsAddress.sendAddress, fullAddress: replaceGoodsAddress.receiveAddress,
id: 123, // 缺 id: 123, // 缺
isDefault: 1, // 缺 isDefault: 1, // 缺
phone: replaceGoodsAddress.sendUserTel, phone: replaceGoodsAddress.receiveUserTel,
receiverName: replaceGoodsAddress.sendUserName, receiverName: replaceGoodsAddress.receiveUserName,
}, },
// 物流 // 物流
shippingAddress: returnGoodsAddress.deliveryType === 1 ? { shippingAddress: returnGoodsAddress.deliveryType === 1 ? {
...@@ -243,7 +242,7 @@ const ExchangeForm: React.FC<BillsFormProps> = ({ ...@@ -243,7 +242,7 @@ const ExchangeForm: React.FC<BillsFormProps> = ({
if (!id) { if (!id) {
return; return;
} }
setRepairGoodsLoading(true); setExchangeGoodsLoading(true);
PublicApi.getAsReplaceGoodsPageReturnedGoods({ PublicApi.getAsReplaceGoodsPageReturnedGoods({
replaceId: id, replaceId: id,
current: `${1}`, current: `${1}`,
...@@ -254,7 +253,7 @@ const ExchangeForm: React.FC<BillsFormProps> = ({ ...@@ -254,7 +253,7 @@ const ExchangeForm: React.FC<BillsFormProps> = ({
setGoodsValue(res.data && res.data.data ? res.data.data.map(item => item.orderRecordId) : []); setGoodsValue(res.data && res.data.data ? res.data.data.map(item => item.orderRecordId) : []);
} }
}).finally(() => { }).finally(() => {
setRepairGoodsLoading(false); setExchangeGoodsLoading(false);
}); });
}; };
......
...@@ -9,22 +9,29 @@ import { ...@@ -9,22 +9,29 @@ import {
Col, Col,
Badge, Badge,
Switch, Switch,
Tooltip,
message, message,
} from 'antd'; } from 'antd';
import { FormOutlined } from '@ant-design/icons'; import { FormOutlined, QuestionCircleOutlined } from '@ant-design/icons';
import { PageHeaderWrapper } from '@ant-design/pro-layout'; import { PageHeaderWrapper } from '@ant-design/pro-layout';
import { history } from 'umi'; import { history } from 'umi';
import { PublicApi } from '@/services/api'; import { PublicApi } from '@/services/api';
import { GetAsReturnGoodsGetDetailBySupplierResponse } from '@/services/AfterServiceApi'; import {
import { CREDIT_INNER_STATUS, CREDIT_OUTER_STATUS, CREDIT_STATUS } from '@/constants'; GetAsReplaceGoodsGetDetailBySupplierResponse,
GetAsReplaceGoodsPageReturnedGoodsResponse,
} from '@/services/AfterServiceApi';
import { normalizeFiledata, FileData, findLastIndexFlowState } from '@/utils'; import { normalizeFiledata, FileData, findLastIndexFlowState } from '@/utils';
import AvatarWrap from '@/components/AvatarWrap'; import AvatarWrap from '@/components/AvatarWrap';
import StatusTag from '@/components/StatusTag'; import StatusTag from '@/components/StatusTag';
import EyePreview from '@/components/EyePreview'; import EyePreview from '@/components/EyePreview';
import AuditProcess from '@/components/AuditProcess'; import AuditProcess from '@/components/AuditProcess';
import { EditableColumns } from '@/components/PolymericTable/interface'; import { EditableColumns } from '@/components/PolymericTable/interface';
import ReturnInfoDrawer from '../../../components/ReturnInfoDrawer'; import { Values as ExchangeAddressValues } from '../../../components/ExchangeAddressInfo';
import { } from '../../../constants'; import { Values as ReturnAddressValues } from '../../../components/ReturnAddressInfo';
import {
EXCHANGE_OUTER_STATUS_TAG_MAP,
EXCHANGE_INNER_STATUS_BADGE_MAP,
} from '../../../constants';
const ProductList = React.lazy(() => import('../../../components/ProductList')); const ProductList = React.lazy(() => import('../../../components/ProductList'));
const ExchangeReceivedInfo = React.lazy(() => import('../../../components/ExchangeReceivedInfo')); const ExchangeReceivedInfo = React.lazy(() => import('../../../components/ExchangeReceivedInfo'));
...@@ -46,20 +53,81 @@ interface DetailInfoProps { ...@@ -46,20 +53,81 @@ interface DetailInfoProps {
headExtra?: React.ReactNode; headExtra?: React.ReactNode;
}; };
interface DetailInfo extends GetAsReplaceGoodsGetDetailBySupplierResponse {
fileList: FileData[];
};
const DetailInfo: React.FC<DetailInfoProps> = ({ const DetailInfo: React.FC<DetailInfoProps> = ({
id, id,
isEdit = false, isEdit = false,
target, target,
headExtra = null, headExtra = null,
}) => { }) => {
const [detailInfo, setDetailInfo] = useState<GetAsReturnGoodsGetDetailBySupplierResponse>(null); const [detailInfo, setDetailInfo] = useState<DetailInfo>(null);
const [replaceGoodsList, setReplaceGoodsList] = useState<GetAsReplaceGoodsPageReturnedGoodsResponse>({ data: [], totalCount: 0 });
const [infoLoading, setInfoloading] = useState(false); const [infoLoading, setInfoloading] = useState(false);
const [replaceGoodsLoading, setExchangeGoodsLoading] = useState(false);
const [exchangeAddress, setExchangeAddress] = useState<ExchangeAddressValues>(null);
const [returnAddress, setReturnAddress] = useState<ReturnAddressValues>(null);
// 获取换货申请详情
const getDetailInfo = () => {
if (!id) {
return;
}
setInfoloading(true);
PublicApi.getAsReplaceGoodsGetDetailBySupplier({
replaceId: id,
}).then(res => {
if (res.code === 1000) {
const {
faultFileList,
...rest
} = res.data;
setDetailInfo({
faultFileList,
fileList: faultFileList.map(item => normalizeFiledata(item.filePath)),
...rest,
});
}
}).finally(() => {
setInfoloading(false);
});
};
// 获取换货明细列表
const getReplaceGoods = () => {
if (!id) {
return;
}
setExchangeGoodsLoading(true);
PublicApi.getAsReplaceGoodsPageReturnedGoods({
replaceId: id,
current: `${1}`,
pageSize: `${99999}`,
}).then(res => {
if (res.code === 1000) {
setReplaceGoodsList(res.data);
}
}).finally(() => {
setExchangeGoodsLoading(false);
});
};
const handleReturn = record => { const handleReturn = record => {
if (!isEdit) { if (!isEdit || !id) {
return; return;
} }
console.log('否后退货', record) PublicApi.postAsReplaceGoodsSetNeedReturnGoods({
replaceId: +id,
replaceGoodsId: record.productId,
isNeed: record.needReplaceName === 1 ? 0 : 1,
}).then(res => {
if (res.code === 1000) {
getReplaceGoods();
}
});
}; };
const productColumns: EditableColumns[] = [ const productColumns: EditableColumns[] = [
...@@ -75,8 +143,8 @@ const DetailInfo: React.FC<DetailInfoProps> = ({ ...@@ -75,8 +143,8 @@ const DetailInfo: React.FC<DetailInfoProps> = ({
), ),
}, },
{ {
title: 'ID', title: '商品ID',
dataIndex: 'id', dataIndex: 'productId',
align: 'center', align: 'center',
}, },
{ {
...@@ -101,27 +169,39 @@ const DetailInfo: React.FC<DetailInfoProps> = ({ ...@@ -101,27 +169,39 @@ const DetailInfo: React.FC<DetailInfoProps> = ({
}, },
{ {
title: '采购数量', title: '采购数量',
dataIndex: 'quantity', dataIndex: 'purchaseCount',
align: 'center',
},
{
title: '采购单价',
dataIndex: 'purchasePrice',
align: 'center', align: 'center',
}, },
{ {
title: '采购金额', title: '采购金额',
dataIndex: 'amount', dataIndex: 'purchaseAmount',
align: 'center', align: 'center',
}, },
{ {
title: '换货数量', title: '换货数量',
dataIndex: 'num', dataIndex: 'replaceCount',
align: 'center', align: 'center',
}, },
{ {
title: '换货原因', title: '换货原因',
dataIndex: 'reason', dataIndex: 'replaceReason',
align: 'center', align: 'center',
}, },
{ {
title: '是否需要退货', title: (
dataIndex: 'status', <>
<span style={{ marginRight: 8 }}>是否需要退货</span>
<Tooltip title="如果商品因为缺陷原因,无法再退回加工后重新使用,可选择不需要退货,选择后,采购方无须退回不良品。">
<QuestionCircleOutlined />
</Tooltip>
</>
),
dataIndex: 'needReplaceName',
align: 'center', align: 'center',
render: (text, record) => ( render: (text, record) => (
<> <>
...@@ -135,27 +215,19 @@ const DetailInfo: React.FC<DetailInfoProps> = ({ ...@@ -135,27 +215,19 @@ const DetailInfo: React.FC<DetailInfoProps> = ({
}, },
]; ];
// 获取换货申请详情
const getDetailInfo = () => {
if (!id) {
return;
}
// setInfoloading(true);
// PublicApi.getAsReturnGoodsGetDetailBySupplier({
// returnId: id,
// }).then(res => {
// if (res.code === 1000) {
// setDetailInfo(res.data);
// }
// }).finally(() => {
// setInfoloading(false);
// });
};
useEffect(() => { useEffect(() => {
getDetailInfo(); getDetailInfo();
getReplaceGoods();
}, []); }, []);
const handleExchangeAddressSubmit = values => {
setExchangeAddress(values);
};
const handleReturnAddressSubmit = values => {
setReturnAddress(values);
};
return ( return (
<Spin spinning={infoLoading}> <Spin spinning={infoLoading}>
<PageHeaderWrapper <PageHeaderWrapper
...@@ -188,14 +260,14 @@ const DetailInfo: React.FC<DetailInfoProps> = ({ ...@@ -188,14 +260,14 @@ const DetailInfo: React.FC<DetailInfoProps> = ({
padding: '0 32px', padding: '0 32px',
}} }}
> >
<Descriptions.Item label="申请单摘要">{detailInfo?.applyAbstract}</Descriptions.Item> <Descriptions.Item label="申请单摘要">{detailInfo?.applyAbstract}</Descriptions.Item>
<Descriptions.Item label="采购会员">{detailInfo?.consumerName}</Descriptions.Item> <Descriptions.Item label="采购会员">{detailInfo?.consumerName}</Descriptions.Item>
<Descriptions.Item label="单据时间">{detailInfo?.applyTime}</Descriptions.Item> <Descriptions.Item label="单据时间">{detailInfo?.applyTime}</Descriptions.Item>
<Descriptions.Item label="外部状态"> <Descriptions.Item label="外部状态">
<StatusTag type="success" title={'售后完成'} /> <StatusTag type={EXCHANGE_OUTER_STATUS_TAG_MAP[detailInfo?.outerStatus]} title={detailInfo?.outerStatusName} />
</Descriptions.Item> </Descriptions.Item>
<Descriptions.Item label="内部状态"> <Descriptions.Item label="内部状态">
<Badge color={'#41CC9E'} text={'已确认售后完成'} /> <Badge color={EXCHANGE_INNER_STATUS_BADGE_MAP[detailInfo?.innerStatus]} text={detailInfo?.innerStatusName} />
</Descriptions.Item> </Descriptions.Item>
</Descriptions> </Descriptions>
</PageHeader> </PageHeader>
...@@ -238,13 +310,10 @@ const DetailInfo: React.FC<DetailInfoProps> = ({ ...@@ -238,13 +310,10 @@ const DetailInfo: React.FC<DetailInfoProps> = ({
<Suspense fallback={null}> <Suspense fallback={null}>
<ProductList <ProductList
title="换货商品" title="换货商品"
rowKey="orderRecordId"
columns={productColumns} columns={productColumns}
dataSource={[ loading={replaceGoodsLoading}
{ dataSource={replaceGoodsList.data}
id: 1,
applyNo: '123',
},
]}
/> />
</Suspense> </Suspense>
</Col> </Col>
...@@ -293,33 +362,65 @@ const DetailInfo: React.FC<DetailInfoProps> = ({ ...@@ -293,33 +362,65 @@ const DetailInfo: React.FC<DetailInfoProps> = ({
<Row <Row
gutter={24} gutter={24}
> >
<Col span={6}> <Col span={detailInfo && detailInfo.evaluate ? 6 : 8}>
{/* 相关不良原因举证附件 */} {/* 相关不良原因举证附件 */}
<Suspense fallback={null}> <Suspense fallback={null}>
<FileList /> <FileList fileList={detailInfo?.fileList} />
</Suspense> </Suspense>
</Col> </Col>
<Col span={6}> <Col span={detailInfo && detailInfo.evaluate ? 6 : 8}>
{/* 退货收货地址 */} {/* 退货收货地址 */}
<Suspense fallback={null}> <Suspense fallback={null}>
<ReturnAddressInfo isEdit={isEdit} /> <ReturnAddressInfo
deliveryAddress={{
id: 1, // 缺
name: detailInfo?.returnGoodsAddress?.receiveUserName,
phone: detailInfo?.returnGoodsAddress?.receiveUserTel,
fullAddress: detailInfo?.returnGoodsAddress?.receiveAddress,
}}
shippingAddress={{
deliveryType: detailInfo?.returnGoodsAddress?.deliveryType,
name: detailInfo?.returnGoodsAddress?.sendUserName,
phone: detailInfo?.returnGoodsAddress?.sendUserTel,
fullAddress: detailInfo?.returnGoodsAddress?.sendAddress,
}}
isEdit={isEdit}
onSubmit={handleReturnAddressSubmit}
/>
</Suspense> </Suspense>
</Col> </Col>
<Col span={6}> <Col span={detailInfo && detailInfo.evaluate ? 6 : 8}>
{/* 换货收货地址 */} {/* 换货收货地址 */}
<Suspense fallback={null}> <Suspense fallback={null}>
<ExchangeAddressInfo isEdit={isEdit} /> <ExchangeAddressInfo
deliveryAddress={{
name: detailInfo?.replaceGoodsAddress?.receiveUserName,
phone: detailInfo?.replaceGoodsAddress?.receiveUserTel,
fullAddress: detailInfo?.replaceGoodsAddress?.receiveAddress,
}}
shippingAddress={{
id: 1, // 缺
deliveryType: detailInfo?.replaceGoodsAddress?.deliveryType,
name: detailInfo?.replaceGoodsAddress?.sendUserName,
phone: detailInfo?.replaceGoodsAddress?.sendUserTel,
fullAddress: detailInfo?.replaceGoodsAddress?.sendAddress,
}}
isEdit={isEdit}
onSubmit={handleExchangeAddressSubmit}
/>
</Suspense> </Suspense>
</Col> </Col>
<Col span={6}> {detailInfo && detailInfo.evaluate && (
{/* 售后评价 */} <Col span={6}>
<Suspense fallback={null}> {/* 售后评价 */}
<Score /> <Suspense fallback={null}>
</Suspense> <Score score={detailInfo?.evaluate?.level} />
</Col> </Suspense>
</Col>
)}
</Row> </Row>
</Col> </Col>
...@@ -327,8 +428,8 @@ const DetailInfo: React.FC<DetailInfoProps> = ({ ...@@ -327,8 +428,8 @@ const DetailInfo: React.FC<DetailInfoProps> = ({
{/* 内、外部流转记录 */} {/* 内、外部流转记录 */}
<Suspense fallback={null}> <Suspense fallback={null}>
<FlowRecords <FlowRecords
outerHistory={[]} outerHistory={detailInfo?.outerRecordList}
innerHistory={[]} innerHistory={detailInfo?.innerRecordList}
/> />
</Suspense> </Suspense>
</Col> </Col>
......
...@@ -2,7 +2,7 @@ ...@@ -2,7 +2,7 @@
* @Author: XieZhiXiong * @Author: XieZhiXiong
* @Date: 2020-11-17 18:07:41 * @Date: 2020-11-17 18:07:41
* @LastEditors: XieZhiXiong * @LastEditors: XieZhiXiong
* @LastEditTime: 2020-11-19 18:28:16 * @LastEditTime: 2020-11-20 15:43:56
* @Description: 待提交审核换货申请单 * @Description: 待提交审核换货申请单
*/ */
import React, { useState, useRef } from 'react'; import React, { useState, useRef } from 'react';
...@@ -42,7 +42,7 @@ const ExchangePr1: React.FC = () => { ...@@ -42,7 +42,7 @@ const ExchangePr1: React.FC = () => {
render: (text, record) => ( render: (text, record) => (
<> <>
<EyePreview <EyePreview
url={`/memberCenter/afterService/exchangeManage/exchangPr1/detail?id=${record.replaceId}`} url={`/memberCenter/afterService/exchangeManage/exchangePr1/detail?id=${record.replaceId}`}
> >
{text} {text}
</EyePreview> </EyePreview>
...@@ -86,7 +86,7 @@ const ExchangePr1: React.FC = () => { ...@@ -86,7 +86,7 @@ const ExchangePr1: React.FC = () => {
<> <>
<Button <Button
type="link" type="link"
onClick={() => history.push(`/memberCenter/afterService/exchangeManage/exchangPr1/verify?id=${record.replaceId}`)} onClick={() => history.push(`/memberCenter/afterService/exchangeManage/exchangePr1/verify?id=${record.replaceId}`)}
> >
提交审核 提交审核
</Button> </Button>
......
...@@ -2,7 +2,7 @@ ...@@ -2,7 +2,7 @@
* @Author: XieZhiXiong * @Author: XieZhiXiong
* @Date: 2020-11-04 17:22:07 * @Date: 2020-11-04 17:22:07
* @LastEditors: XieZhiXiong * @LastEditors: XieZhiXiong
* @LastEditTime: 2020-11-17 18:13:55 * @LastEditTime: 2020-11-20 15:46:31
* @Description: * @Description:
*/ */
import React, { useState } from 'react'; import React, { useState } from 'react';
...@@ -23,17 +23,17 @@ const ExchangePr1Verify: React.FC = () => { ...@@ -23,17 +23,17 @@ const ExchangePr1Verify: React.FC = () => {
if (!id) { if (!id) {
return; return;
} }
// setConfirmLoading(true); setConfirmLoading(true);
// PublicApi.postAsReturnGoodsSubmitVerify({ PublicApi.postAsReplaceGoodsVerifyStepOne({
// applyId: id, applyId: id,
// ...values, ...values,
// }).then(res => { }).then(res => {
// if (res.code === 1000) { if (res.code === 1000) {
// history.goBack(); history.goBack();
// } }
// }).finally(() => { }).finally(() => {
// setConfirmLoading(false); setConfirmLoading(false);
// }); });
}; };
return ( return (
...@@ -50,7 +50,6 @@ const ExchangePr1Verify: React.FC = () => { ...@@ -50,7 +50,6 @@ const ExchangePr1Verify: React.FC = () => {
单据审核 单据审核
</Button> </Button>
)} )}
isEdit
/> />
<VerifyModal <VerifyModal
......
...@@ -2,7 +2,7 @@ ...@@ -2,7 +2,7 @@
* @Author: XieZhiXiong * @Author: XieZhiXiong
* @Date: 2020-11-17 18:07:41 * @Date: 2020-11-17 18:07:41
* @LastEditors: XieZhiXiong * @LastEditors: XieZhiXiong
* @LastEditTime: 2020-11-18 10:11:17 * @LastEditTime: 2020-11-20 15:47:08
* @Description: 待提交审核换货申请单 * @Description: 待提交审核换货申请单
*/ */
import React, { useState, useRef } from 'react'; import React, { useState, useRef } from 'react';
......
...@@ -23,17 +23,17 @@ const ExchangePr2Verify: React.FC = () => { ...@@ -23,17 +23,17 @@ const ExchangePr2Verify: React.FC = () => {
if (!id) { if (!id) {
return; return;
} }
// setConfirmLoading(true); setConfirmLoading(true);
// PublicApi.postAsReturnGoodsSubmitVerify({ PublicApi.postAsReplaceGoodsVerifyStepTwo({
// applyId: id, applyId: id,
// ...values, ...values,
// }).then(res => { }).then(res => {
// if (res.code === 1000) { if (res.code === 1000) {
// history.goBack(); history.goBack();
// } }
// }).finally(() => { }).finally(() => {
// setConfirmLoading(false); setConfirmLoading(false);
// }); });
}; };
return ( return (
...@@ -50,7 +50,6 @@ const ExchangePr2Verify: React.FC = () => { ...@@ -50,7 +50,6 @@ const ExchangePr2Verify: React.FC = () => {
单据审核 单据审核
</Button> </Button>
)} )}
isEdit
/> />
<VerifyModal <VerifyModal
......
...@@ -2,7 +2,7 @@ ...@@ -2,7 +2,7 @@
* @Author: XieZhiXiong * @Author: XieZhiXiong
* @Date: 2020-11-06 16:30:44 * @Date: 2020-11-06 16:30:44
* @LastEditors: XieZhiXiong * @LastEditors: XieZhiXiong
* @LastEditTime: 2020-11-19 18:55:37 * @LastEditTime: 2020-11-20 16:02:32
* @Description: 待新增换货发货单 * @Description: 待新增换货发货单
*/ */
import React, { useState, useRef } from 'react'; import React, { useState, useRef } from 'react';
...@@ -67,7 +67,7 @@ const ExchangePrAddDeliver: React.FC = () => { ...@@ -67,7 +67,7 @@ const ExchangePrAddDeliver: React.FC = () => {
}, },
{ {
title: '申请单摘要', title: '申请单摘要',
dataIndex: 'parentMemberName', dataIndex: 'applyAbstract',
align: 'center', align: 'center',
}, },
{ {
...@@ -77,7 +77,7 @@ const ExchangePrAddDeliver: React.FC = () => { ...@@ -77,7 +77,7 @@ const ExchangePrAddDeliver: React.FC = () => {
}, },
{ {
title: '单据时间', title: '单据时间',
dataIndex: 'created', dataIndex: 'applyTime',
align: 'center', align: 'center',
}, },
{ {
......
...@@ -2,7 +2,7 @@ ...@@ -2,7 +2,7 @@
* @Author: XieZhiXiong * @Author: XieZhiXiong
* @Date: 2020-11-04 17:22:07 * @Date: 2020-11-04 17:22:07
* @LastEditors: XieZhiXiong * @LastEditors: XieZhiXiong
* @LastEditTime: 2020-11-18 10:19:22 * @LastEditTime: 2020-11-20 15:49:38
* @Description: * @Description:
*/ */
import React, { useState } from 'react'; import React, { useState } from 'react';
...@@ -23,17 +23,17 @@ const ExchangePrConfirmVerify: React.FC = () => { ...@@ -23,17 +23,17 @@ const ExchangePrConfirmVerify: React.FC = () => {
if (!id) { if (!id) {
return; return;
} }
// setConfirmLoading(true); setConfirmLoading(true);
// PublicApi.postAsReturnGoodsSubmitVerify({ PublicApi.postAsReplaceGoodsConfirmVerify({
// applyId: id, applyId: id,
// ...values, ...values,
// }).then(res => { }).then(res => {
// if (res.code === 1000) { if (res.code === 1000) {
// history.goBack(); history.goBack();
// } }
// }).finally(() => { }).finally(() => {
// setConfirmLoading(false); setConfirmLoading(false);
// }); });
}; };
return ( return (
...@@ -50,7 +50,6 @@ const ExchangePrConfirmVerify: React.FC = () => { ...@@ -50,7 +50,6 @@ const ExchangePrConfirmVerify: React.FC = () => {
确认单据 确认单据
</Button> </Button>
)} )}
isEdit
/> />
<VerifyModal <VerifyModal
......
...@@ -2,7 +2,7 @@ ...@@ -2,7 +2,7 @@
* @Author: XieZhiXiong * @Author: XieZhiXiong
* @Date: 2020-11-04 17:22:07 * @Date: 2020-11-04 17:22:07
* @LastEditors: XieZhiXiong * @LastEditors: XieZhiXiong
* @LastEditTime: 2020-11-17 18:13:55 * @LastEditTime: 2020-11-20 10:47:03
* @Description: * @Description:
*/ */
import React, { useState } from 'react'; import React, { useState } from 'react';
...@@ -23,17 +23,17 @@ const ExchangePrSubmitVerify: React.FC = () => { ...@@ -23,17 +23,17 @@ const ExchangePrSubmitVerify: React.FC = () => {
if (!id) { if (!id) {
return; return;
} }
// setConfirmLoading(true); setConfirmLoading(true);
// PublicApi.postAsReturnGoodsSubmitVerify({ PublicApi.postAsReplaceGoodsSubmitVerify({
// applyId: id, applyId: id,
// ...values, ...values,
// }).then(res => { }).then(res => {
// if (res.code === 1000) { if (res.code === 1000) {
// history.goBack(); history.goBack();
// } }
// }).finally(() => { }).finally(() => {
// setConfirmLoading(false); setConfirmLoading(false);
// }); });
}; };
return ( return (
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment