Commit 42e2522f authored by XieZhiXiong's avatar XieZhiXiong

对接售后换货中

parent 0ca4ecdc
......@@ -2,12 +2,15 @@
* @Author: XieZhiXiong
* @Date: 2020-11-06 09:54:04
* @LastEditors: XieZhiXiong
* @LastEditTime: 2020-11-17 17:49:19
* @Description: 退货地址信息
* @LastEditTime: 2020-11-20 14:43:15
* @Description: 换货收货地址
*/
import React from 'react';
import MellowCard from '@/components/MellowCard';
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 { schema } from './schema';
import styles from './index.less';
......@@ -18,23 +21,88 @@ const {
onFieldInputChange$,
} = FormEffectHooks;
export interface Values {
deliveryType: number,
id: number,
isDefault: number,
sendAddress: string | undefined,
sendUserName: string | undefined,
sendUserTel: string | undefined,
};
interface ExchangeAddressInfo {
// 是否是编辑的
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> = ({
isEdit = false,
deliveryAddress = {},
shippingAddress = {},
onSubmit,
}) => {
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>
<p>张三 / 185 2929 6475</p>
<p>广东省广州市海珠区新港东路1068号中洲中心北塔6楼</p>
<p>{deliveryAddress.name || ''} / {deliveryAddress.phone || ''}</p>
<p>{deliveryAddress.fullAddress || ''}</p>
</div>
);
......@@ -44,11 +112,62 @@ const ExchangeAddressInfo: React.FC<ExchangeAddressInfo> = ({
fullHeight
>
<NiceForm
initialValues={{
deliveryType: shippingAddress.deliveryType,
shippingAddress: shippingAddress.id,
pickupAddress: shippingAddress.id,
}}
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}
actions={modalFormActions}
......
......@@ -2,10 +2,11 @@
* @Author: XieZhiXiong
* @Date: 2020-11-09 15:56:35
* @LastEditors: XieZhiXiong
* @LastEditTime: 2020-11-17 17:46:41
* @LastEditTime: 2020-11-20 14:54:37
* @Description:
*/
import { ISchema } from '@formily/antd';
import { UPLOAD_TYPE, DELIVERY_TYPE_ENUM } from '@/constants';
export const schema: ISchema = {
type: 'object',
......@@ -14,34 +15,63 @@ export const schema: ISchema = {
type: 'object',
'x-component': 'mega-layout',
'x-component-props': {
labelCol: 6,
full: true,
labelCol: 8,
wrapperCol: 16,
labelAlign: 'left',
},
properties: {
mode: {
type: 'string',
deliveryType: {
title: '配送方式',
default: '物流',
'x-component': 'Text',
'x-component-props': {},
type: 'string',
default: 1,
enum: DELIVERY_TYPE_ENUM,
'x-component-props': {
style: {
width: '80%',
},
shippingAddress: {
},
},
deliveryAddress: {
type: 'string',
title: '换货收货地址',
'x-component': 'Children',
'x-component-props': {
children: '{{Address}}',
},
},
shippingAddress: {
type: 'string',
title: '换货发货地址',
enum: [],
required: true,
'x-component-props': {
placeholder: '请选择',
style: {
width: '80%',
},
},
deliveryAddress: {
'x-rules': [
{
required: true,
message: '请选择换货发货地址',
},
],
},
pickupAddress: {
type: 'string',
title: '换货发货地址',
'x-component': 'Children',
title: '换货自提地址',
enum: [],
'x-component-props': {
children: '{{DeliveryAddress}}',
placeholder: '请选择',
style: {
width: '80%',
},
},
'x-rules': [
{
required: true,
message: '请选择换货自提地址',
},
],
},
},
},
......
......@@ -2,12 +2,15 @@
* @Author: XieZhiXiong
* @Date: 2020-11-06 09:54:04
* @LastEditors: XieZhiXiong
* @LastEditTime: 2020-11-12 13:48:08
* @LastEditTime: 2020-11-20 15:40:21
* @Description: 退货地址信息
*/
import React from 'react';
import MellowCard from '@/components/MellowCard';
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 { schema } from './schema';
import styles from './index.less';
......@@ -18,23 +21,88 @@ const {
onFieldInputChange$,
} = FormEffectHooks;
export interface Values {
deliveryType: number,
id: number,
isDefault: number,
receiveAddress: string | undefined,
receiveUserName: string | undefined,
receiveUserTel: string | undefined,
};
interface ReturnAddressInfo {
// 是否是编辑的
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> = ({
isEdit = false,
deliveryAddress = {},
shippingAddress = {},
onSubmit,
}) => {
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>
<p>张三 / 185 2929 6475</p>
<p>广东省广州市海珠区新港东路1068号中洲中心北塔6楼</p>
<p>{shippingAddress.name || ''} / {shippingAddress.phone || ''}</p>
<p>{shippingAddress.fullAddress || ''}</p>
</div>
);
......@@ -44,13 +112,61 @@ const ReturnAddressInfo: React.FC<ReturnAddressInfo> = ({
fullHeight
>
<NiceForm
effects={($, { setFieldState }) => {
onFieldValueChange$('shippingAddress').subscribe(fieldState => {
console.log('配送方式', fieldState.value);
initialValues={{
deliveryType: shippingAddress.deliveryType,
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={{
DeliveryAddress,
Address,
}}
editable={isEdit}
actions={modalFormActions}
......
......@@ -2,10 +2,11 @@
* @Author: XieZhiXiong
* @Date: 2020-11-09 15:56:35
* @LastEditors: XieZhiXiong
* @LastEditTime: 2020-11-09 16:19:24
* @LastEditTime: 2020-11-20 15:41:12
* @Description:
*/
import { ISchema } from '@formily/antd';
import { UPLOAD_TYPE, DELIVERY_TYPE_ENUM } from '@/constants';
export const schema: ISchema = {
type: 'object',
......@@ -14,33 +15,53 @@ export const schema: ISchema = {
type: 'object',
'x-component': 'mega-layout',
'x-component-props': {
labelCol: 6,
full: true,
labelCol: 8,
wrapperCol: 16,
labelAlign: 'left',
},
properties: {
mode: {
type: 'string',
deliveryType: {
title: '配送方式',
default: '物流',
'x-component': 'Text',
'x-component-props': {},
type: 'string',
enum: DELIVERY_TYPE_ENUM,
editable: false,
'x-component-props': {
style: {
width: '80%',
},
shippingAddress: {
},
},
deliveryAddress: {
type: 'string',
title: '退货收货地址',
enum: [],
required: true,
'x-component-props': {
placeholder: '请选择',
style: {
width: '80%',
},
},
deliveryAddress: {
'x-rules': [
{
required: true,
message: '请选择退货收货地址',
},
],
},
shippingAddress: {
type: 'string',
title: '退货发货地址',
'x-component': 'Children',
'x-component-props': {
children: '{{DeliveryAddress}}',
children: '{{Address}}',
},
},
pickupAddress: {
type: 'string',
title: '退货自提地址',
'x-component': 'Children',
'x-component-props': {
children: '{{Address}}',
},
},
},
......
......@@ -2,7 +2,7 @@
* @Author: XieZhiXiong
* @Date: 2020-11-06 16:30:44
* @LastEditors: XieZhiXiong
* @LastEditTime: 2020-11-19 18:15:56
* @LastEditTime: 2020-11-20 16:03:42
* @Description: 待新增退货发货单
*/
import React, { useState, useRef } from 'react';
......@@ -67,7 +67,7 @@ const ExchangePrAddDeliver: React.FC = () => {
},
{
title: '申请单摘要',
dataIndex: 'parentMemberName',
dataIndex: 'applyAbstract',
align: 'center',
},
{
......@@ -77,17 +77,17 @@ const ExchangePrAddDeliver: React.FC = () => {
},
{
title: '单据时间',
dataIndex: 'created',
dataIndex: 'applyTime',
align: 'center',
},
{
title: '退货批次',
dataIndex: 'batch',
dataIndex: 'returnBatch',
align: 'center',
},
{
title: '退货发货单号',
dataIndex: 'deliverNo',
dataIndex: 'returnDeliveryNo',
align: 'center',
render: text => <a>{text}</a>,
},
......
......@@ -58,7 +58,7 @@ const ExchangeForm: React.FC<BillsFormProps> = ({
const [replaceGoodsList, setReplaceGoodsList] = useState<GetAsReplaceGoodsPageReturnedGoodsResponse>({ data: [], totalCount: 0 });
const [unsaved, setUnsaved] = useState(false);
const [infoLoading, setInfoLoading] = useState(false);
const [replaceGoodsLoading, setRepairGoodsLoading] = useState(false);
const [replaceGoodsLoading, setExchangeGoodsLoading] = useState(false);
const [goodsValue, setGoodsValue] = useState([]);
const [submitLoading, setSubmitLoading] = useState(false);
const [visibleGoodsDrawer, setVisibleGoodsDrawer] = useState(false);
......@@ -194,14 +194,13 @@ const ExchangeForm: React.FC<BillsFormProps> = ({
);
setDetailInfo({
...detailInfo,
proofFileList: faultFileList.map(item => normalizeFiledata(item.filePath)),
deliveryAddress: {
fullAddress: replaceGoodsAddress.sendAddress,
fullAddress: replaceGoodsAddress.receiveAddress,
id: 123, // 缺
isDefault: 1, // 缺
phone: replaceGoodsAddress.sendUserTel,
receiverName: replaceGoodsAddress.sendUserName,
phone: replaceGoodsAddress.receiveUserTel,
receiverName: replaceGoodsAddress.receiveUserName,
},
// 物流
shippingAddress: returnGoodsAddress.deliveryType === 1 ? {
......@@ -243,7 +242,7 @@ const ExchangeForm: React.FC<BillsFormProps> = ({
if (!id) {
return;
}
setRepairGoodsLoading(true);
setExchangeGoodsLoading(true);
PublicApi.getAsReplaceGoodsPageReturnedGoods({
replaceId: id,
current: `${1}`,
......@@ -254,7 +253,7 @@ const ExchangeForm: React.FC<BillsFormProps> = ({
setGoodsValue(res.data && res.data.data ? res.data.data.map(item => item.orderRecordId) : []);
}
}).finally(() => {
setRepairGoodsLoading(false);
setExchangeGoodsLoading(false);
});
};
......
......@@ -2,7 +2,7 @@
* @Author: XieZhiXiong
* @Date: 2020-11-17 18:07:41
* @LastEditors: XieZhiXiong
* @LastEditTime: 2020-11-19 18:28:16
* @LastEditTime: 2020-11-20 15:43:56
* @Description: 待提交审核换货申请单
*/
import React, { useState, useRef } from 'react';
......@@ -42,7 +42,7 @@ const ExchangePr1: React.FC = () => {
render: (text, record) => (
<>
<EyePreview
url={`/memberCenter/afterService/exchangeManage/exchangPr1/detail?id=${record.replaceId}`}
url={`/memberCenter/afterService/exchangeManage/exchangePr1/detail?id=${record.replaceId}`}
>
{text}
</EyePreview>
......@@ -86,7 +86,7 @@ const ExchangePr1: React.FC = () => {
<>
<Button
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>
......
......@@ -2,7 +2,7 @@
* @Author: XieZhiXiong
* @Date: 2020-11-04 17:22:07
* @LastEditors: XieZhiXiong
* @LastEditTime: 2020-11-17 18:13:55
* @LastEditTime: 2020-11-20 15:46:31
* @Description:
*/
import React, { useState } from 'react';
......@@ -23,17 +23,17 @@ const ExchangePr1Verify: React.FC = () => {
if (!id) {
return;
}
// setConfirmLoading(true);
// PublicApi.postAsReturnGoodsSubmitVerify({
// applyId: id,
// ...values,
// }).then(res => {
// if (res.code === 1000) {
// history.goBack();
// }
// }).finally(() => {
// setConfirmLoading(false);
// });
setConfirmLoading(true);
PublicApi.postAsReplaceGoodsVerifyStepOne({
applyId: id,
...values,
}).then(res => {
if (res.code === 1000) {
history.goBack();
}
}).finally(() => {
setConfirmLoading(false);
});
};
return (
......@@ -50,7 +50,6 @@ const ExchangePr1Verify: React.FC = () => {
单据审核
</Button>
)}
isEdit
/>
<VerifyModal
......
......@@ -2,7 +2,7 @@
* @Author: XieZhiXiong
* @Date: 2020-11-17 18:07:41
* @LastEditors: XieZhiXiong
* @LastEditTime: 2020-11-18 10:11:17
* @LastEditTime: 2020-11-20 15:47:08
* @Description: 待提交审核换货申请单
*/
import React, { useState, useRef } from 'react';
......
......@@ -23,17 +23,17 @@ const ExchangePr2Verify: React.FC = () => {
if (!id) {
return;
}
// setConfirmLoading(true);
// PublicApi.postAsReturnGoodsSubmitVerify({
// applyId: id,
// ...values,
// }).then(res => {
// if (res.code === 1000) {
// history.goBack();
// }
// }).finally(() => {
// setConfirmLoading(false);
// });
setConfirmLoading(true);
PublicApi.postAsReplaceGoodsVerifyStepTwo({
applyId: id,
...values,
}).then(res => {
if (res.code === 1000) {
history.goBack();
}
}).finally(() => {
setConfirmLoading(false);
});
};
return (
......@@ -50,7 +50,6 @@ const ExchangePr2Verify: React.FC = () => {
单据审核
</Button>
)}
isEdit
/>
<VerifyModal
......
......@@ -2,7 +2,7 @@
* @Author: XieZhiXiong
* @Date: 2020-11-06 16:30:44
* @LastEditors: XieZhiXiong
* @LastEditTime: 2020-11-19 18:55:37
* @LastEditTime: 2020-11-20 16:02:32
* @Description: 待新增换货发货单
*/
import React, { useState, useRef } from 'react';
......@@ -67,7 +67,7 @@ const ExchangePrAddDeliver: React.FC = () => {
},
{
title: '申请单摘要',
dataIndex: 'parentMemberName',
dataIndex: 'applyAbstract',
align: 'center',
},
{
......@@ -77,7 +77,7 @@ const ExchangePrAddDeliver: React.FC = () => {
},
{
title: '单据时间',
dataIndex: 'created',
dataIndex: 'applyTime',
align: 'center',
},
{
......
......@@ -2,7 +2,7 @@
* @Author: XieZhiXiong
* @Date: 2020-11-04 17:22:07
* @LastEditors: XieZhiXiong
* @LastEditTime: 2020-11-18 10:19:22
* @LastEditTime: 2020-11-20 15:49:38
* @Description:
*/
import React, { useState } from 'react';
......@@ -23,17 +23,17 @@ const ExchangePrConfirmVerify: React.FC = () => {
if (!id) {
return;
}
// setConfirmLoading(true);
// PublicApi.postAsReturnGoodsSubmitVerify({
// applyId: id,
// ...values,
// }).then(res => {
// if (res.code === 1000) {
// history.goBack();
// }
// }).finally(() => {
// setConfirmLoading(false);
// });
setConfirmLoading(true);
PublicApi.postAsReplaceGoodsConfirmVerify({
applyId: id,
...values,
}).then(res => {
if (res.code === 1000) {
history.goBack();
}
}).finally(() => {
setConfirmLoading(false);
});
};
return (
......@@ -50,7 +50,6 @@ const ExchangePrConfirmVerify: React.FC = () => {
确认单据
</Button>
)}
isEdit
/>
<VerifyModal
......
......@@ -2,7 +2,7 @@
* @Author: XieZhiXiong
* @Date: 2020-11-04 17:22:07
* @LastEditors: XieZhiXiong
* @LastEditTime: 2020-11-17 18:13:55
* @LastEditTime: 2020-11-20 10:47:03
* @Description:
*/
import React, { useState } from 'react';
......@@ -23,17 +23,17 @@ const ExchangePrSubmitVerify: React.FC = () => {
if (!id) {
return;
}
// setConfirmLoading(true);
// PublicApi.postAsReturnGoodsSubmitVerify({
// applyId: id,
// ...values,
// }).then(res => {
// if (res.code === 1000) {
// history.goBack();
// }
// }).finally(() => {
// setConfirmLoading(false);
// });
setConfirmLoading(true);
PublicApi.postAsReplaceGoodsSubmitVerify({
applyId: id,
...values,
}).then(res => {
if (res.code === 1000) {
history.goBack();
}
}).finally(() => {
setConfirmLoading(false);
});
};
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