Commit 05511112 authored by XieZhiXiong's avatar XieZhiXiong

Merge branch 'dev' into test

parents 8917f098 ed41bf7b
...@@ -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 (
......
...@@ -175,7 +175,7 @@ ...@@ -175,7 +175,7 @@
&_content { &_content {
display: flex; display: flex;
margin-top: 24px; margin-top: 28px;
.content_text { .content_text {
flex: 1; flex: 1;
......
...@@ -44,6 +44,7 @@ const BablancePayWay: React.FC<BablancePayWayPropsType> = (props) => { ...@@ -44,6 +44,7 @@ const BablancePayWay: React.FC<BablancePayWayPropsType> = (props) => {
const fetchBalanceInfo = () => { const fetchBalanceInfo = () => {
let param = { let param = {
payType: orderInfo.ruleConfigurationId,
parentMemberId: orderInfo.supplyMembersId, parentMemberId: orderInfo.supplyMembersId,
parentMemberRoleId: orderInfo.supplyMembersRoleId parentMemberRoleId: orderInfo.supplyMembersRoleId
} }
......
...@@ -22,6 +22,7 @@ ...@@ -22,6 +22,7 @@
.bank_payway_upload_dragger { .bank_payway_upload_dragger {
position: relative; position: relative;
margin-top: 20px; margin-top: 20px;
overflow: hidden;
} }
.bank_payway_upload { .bank_payway_upload {
......
...@@ -64,7 +64,7 @@ const WechatPayWay: React.FC<WechatPayWayPropsType> = (props) => { ...@@ -64,7 +64,7 @@ const WechatPayWay: React.FC<WechatPayWayPropsType> = (props) => {
} }
const checkPayState = () => { const checkPayState = () => {
if (checkCount < 12) { if (checkCount < 20) {
let param = { let param = {
id: Number(orderId), id: Number(orderId),
paymentInformationId: payInfo.paymentInformationId, paymentInformationId: payInfo.paymentInformationId,
...@@ -82,7 +82,7 @@ const WechatPayWay: React.FC<WechatPayWayPropsType> = (props) => { ...@@ -82,7 +82,7 @@ const WechatPayWay: React.FC<WechatPayWayPropsType> = (props) => {
checkCount++ checkCount++
checkTimer = setTimeout(() => { checkTimer = setTimeout(() => {
checkPayState() checkPayState()
}, 5000) }, 8000)
} }
} else { } else {
message.error(res.message) message.error(res.message)
......
...@@ -73,11 +73,11 @@ ...@@ -73,11 +73,11 @@
.codeItem { .codeItem {
width: 48px; width: 48px;
height: 48px; height: 48px;
line-height: 48px; line-height: 0.5;
text-align: center; text-align: center;
background: #FFFFFF; background: #FFFFFF;
border: 1px solid #EBECF0; border: 1px solid #EBECF0;
font-size: 26px; font-size: 80px;
} }
.codeInput { .codeInput {
height: 48px; height: 48px;
......
...@@ -407,7 +407,7 @@ const OrderPayModal: React.FC<OrderPayModalProps> = (props) => { ...@@ -407,7 +407,7 @@ const OrderPayModal: React.FC<OrderPayModalProps> = (props) => {
className={style.codeItem} className={style.codeItem}
key={index} key={index}
> >
{code[index]} {code[index]?.replace(/[0-9]/g, '·')}
</div>) </div>)
} }
<Input.Password <Input.Password
......
...@@ -2,7 +2,7 @@ ...@@ -2,7 +2,7 @@
* @Author: XieZhiXiong * @Author: XieZhiXiong
* @Date: 2020-09-16 15:16:47 * @Date: 2020-09-16 15:16:47
* @LastEditors: XieZhiXiong * @LastEditors: XieZhiXiong
* @LastEditTime: 2020-10-23 16:00:01 * @LastEditTime: 2020-11-20 19:01:57
* @Description: 联动逻辑相关 * @Description: 联动逻辑相关
*/ */
import { Modal } from 'antd'; import { Modal } from 'antd';
...@@ -321,14 +321,12 @@ export const useBusinessEffects = (context, actions) => { ...@@ -321,14 +321,12 @@ export const useBusinessEffects = (context, actions) => {
setFieldValue('supplyMembersName', first ? first.supplyMembersName : ''); setFieldValue('supplyMembersName', first ? first.supplyMembersName : '');
setFieldValue('relevanceInvoicesId', first ? first.id : null); setFieldValue('relevanceInvoicesId', first ? first.id : null);
setFieldValue('address', first ? `${first.fullAddress} ${first.receiverName}/${first.phone}` : ''); setFieldValue('address', first ? `${first.fullAddress} ${first.receiverName}/${first.phone}` : '');
setFieldValue('transport', first && first.deliveryType ? DELIVERY_TYPE[first.deliveryType] : '');
// 以下数据只用于收集,不用于展示 // 以下数据只用于收集,不用于展示
setFieldValue('deliveryAddresId', first ? first.deliveryAddresId : null); setFieldValue('deliveryAddresId', first ? first.deliveryAddresId : null);
setFieldValue('receiverName', first ? first.receiverName : ''); setFieldValue('receiverName', first ? first.receiverName : '');
setFieldValue('fullAddress', first ? first.fullAddress : ''); setFieldValue('fullAddress', first ? first.fullAddress : '');
setFieldValue('phone', first ? first.phone : ''); setFieldValue('phone', first ? first.phone : '');
setFieldValue('deliveryType', first ? first.deliveryType : null);
setFieldValue('isDefault', first ? first.isDefault : false); setFieldValue('isDefault', first ? first.isDefault : false);
if (!first) { if (!first) {
...@@ -388,6 +386,17 @@ export const useBusinessEffects = (context, actions) => { ...@@ -388,6 +386,17 @@ export const useBusinessEffects = (context, actions) => {
onFieldInputChange$('orderNo').subscribe(fieldState => { onFieldInputChange$('orderNo').subscribe(fieldState => {
setFieldValue('invoicesDetailsRequests', []); setFieldValue('invoicesDetailsRequests', []);
}); });
// 关联明细
onFieldInputChange$('invoicesDetailsRequests').subscribe(fieldState => {
const { value } = fieldState;
if (!value.length) {
// 明细数据为空,或者明细每项数据的 商品 未选,物流方式都设置成 ''
setFieldValue('transport', '');
setFieldValue('deliveryType', null);
}
});
// 关联明细 商品下拉框 联动商品ID、单价 // 关联明细 商品下拉框 联动商品ID、单价
onFieldInputChange$('invoicesDetailsRequests.*.product').subscribe(fieldState => { onFieldInputChange$('invoicesDetailsRequests.*.product').subscribe(fieldState => {
...@@ -436,6 +445,25 @@ export const useBusinessEffects = (context, actions) => { ...@@ -436,6 +445,25 @@ export const useBusinessEffects = (context, actions) => {
state.value = `¥0.00`; state.value = `¥0.00`;
} }
); );
// 配送方式,一个单据只能有一个配送方式
setFieldState(
FormPath.transform(name, /\d/, $1 => {
return `invoicesDetailsRequests.${$1}.deliveryType`
}),
state => {
state.value = undefined;
}
);
const invoicesDetailsRequestsValue = getFieldValue('invoicesDetailsRequests');
// 明细每项数据的 商品 未选中,物流方式设置成 ''
if (
invoicesDetailsRequestsValue.every(item => !item.product)
) {
setFieldValue('transport', '');
setFieldValue('deliveryType', null);
}
} }
if (!current) { if (!current) {
...@@ -482,6 +510,46 @@ export const useBusinessEffects = (context, actions) => { ...@@ -482,6 +510,46 @@ export const useBusinessEffects = (context, actions) => {
state.value = `¥${(current.purchaseCount * current.price).toFixed(2)}`; state.value = `¥${(current.purchaseCount * current.price).toFixed(2)}`;
} }
); );
// 配送方式,一个单据只能有一个配送方式
setFieldState(
FormPath.transform(name, /\d/, $1 => {
return `invoicesDetailsRequests.${$1}.deliveryType`
}),
state => {
state.value = current.logistics && current.logistics.deliveryType ? current.logistics.deliveryType : undefined;
}
);
setTimeout(() => {
const invoicesDetailsRequestsValue = getFieldValue('invoicesDetailsRequests');
// 配送方式,一个单据只能有一个配送方式
setFieldState(
FormPath.transform(name, /\d/, $1 => {
return `invoicesDetailsRequests.${$1}.product`
}),
state => {
if (
current.logistics &&
invoicesDetailsRequestsValue.some(item => item.deliveryType && item.deliveryType !== current.logistics.deliveryType)
) {
state.errors = '商品配送方式不一致,请保持一次性';
} else {
state.errors = '';
}
}
);
// 明细每项数据的 商品 选中,物流方式设置成 为对应商品的物流方式
if (
current.logistics &&
current.logistics.deliveryType &&
invoicesDetailsRequestsValue.every(item => item.deliveryType === current.logistics.deliveryType)
) {
setFieldValue('transport', DELIVERY_TYPE[current.logistics.deliveryType]);
setFieldValue('deliveryType', current.logistics.deliveryType);
}
}, 0);
}); });
// 关联明细 商品数量 联动计算商品金额 // 关联明细 商品数量 联动计算商品金额
......
...@@ -33,6 +33,8 @@ import { ...@@ -33,6 +33,8 @@ import {
DOC_TYPE_RETURN_RECEIPT, DOC_TYPE_RETURN_RECEIPT,
DOC_TYPE_EXCHANGE_INVOICE, DOC_TYPE_EXCHANGE_INVOICE,
DOC_TYPE_EXCHANGE_RECEIPT, DOC_TYPE_EXCHANGE_RECEIPT,
DELIVERY_TYPE,
} from '@/constants'; } from '@/constants';
import { addBillSchema, goodsSearchSchema } from './schema'; import { addBillSchema, goodsSearchSchema } from './schema';
import { createEffects } from './effects'; import { createEffects } from './effects';
...@@ -141,6 +143,7 @@ const BillsForm: React.FC<BillsFormProps> = ({ ...@@ -141,6 +143,7 @@ const BillsForm: React.FC<BillsFormProps> = ({
deliveryType, deliveryType,
isDefault, isDefault,
invoicesDetailsList, invoicesDetailsList,
transport,
...rest ...rest
} = res.data; } = res.data;
...@@ -148,6 +151,7 @@ const BillsForm: React.FC<BillsFormProps> = ({ ...@@ -148,6 +151,7 @@ const BillsForm: React.FC<BillsFormProps> = ({
...item, ...item,
product: item.productId, product: item.productId,
amount: `¥${(+item.productCount * item.price).toFixed(2)}`, amount: `¥${(+item.productCount * item.price).toFixed(2)}`,
deliveryType,
})) : []; })) : [];
addSchemaAction.setFieldState( addSchemaAction.setFieldState(
...@@ -170,7 +174,7 @@ const BillsForm: React.FC<BillsFormProps> = ({ ...@@ -170,7 +174,7 @@ const BillsForm: React.FC<BillsFormProps> = ({
fullAddress: fullAddress || '', fullAddress: fullAddress || '',
receiverName: receiverName || '', receiverName: receiverName || '',
phone: phone || '', phone: phone || '',
deliveryType, // deliveryType,
isDefault, isDefault,
} }
] : ] :
...@@ -178,10 +182,9 @@ const BillsForm: React.FC<BillsFormProps> = ({ ...@@ -178,10 +182,9 @@ const BillsForm: React.FC<BillsFormProps> = ({
, ,
invoicesDetailsRequests: details, invoicesDetailsRequests: details,
...rest, ...rest,
deliveryType,
transport: DELIVERY_TYPE[deliveryType],
}); });
productRowCtl.setSelectRow(details);
productRowCtl.setSelectedRowKeys(details.map(item => item.id));
}).finally(() => { }).finally(() => {
setInfoLoading(false); setInfoLoading(false);
}); });
...@@ -378,6 +381,7 @@ const BillsForm: React.FC<BillsFormProps> = ({ ...@@ -378,6 +381,7 @@ const BillsForm: React.FC<BillsFormProps> = ({
const newInvoicesDetailsRequests = invoicesDetailsRequests.map(({ const newInvoicesDetailsRequests = invoicesDetailsRequests.map(({
product, product,
productCount, productCount,
deliveryType,
...rest ...rest
}) => ({ }) => ({
productCount: +productCount, productCount: +productCount,
...@@ -537,29 +541,27 @@ const BillsForm: React.FC<BillsFormProps> = ({ ...@@ -537,29 +541,27 @@ const BillsForm: React.FC<BillsFormProps> = ({
const values = []; const values = [];
productRowCtl.selectRow.forEach(item => { productRowCtl.selectRow.forEach(item => {
const existing = preValues.find(val => val.goodsId === item.id); const atom = {
const atom = itemNo: item.code,
existing ? goodsId: item.id,
existing : itemNmae: item.name,
{ specifications: item.type,
itemNo: item.code, category: item.customerCategory ? item.customerCategory.name : '',
goodsId: item.id, brand: item.brand ? item.brand.name : '',
itemNmae: item.name, unit: item.unitName,
specifications: item.type, costPrice: item.costPrice,
category: item.customerCategory ? item.customerCategory.name : '', product: undefined,
brand: item.brand ? item.brand.name : '', productName: item.productName,
unit: item.unitName, productId: '',
costPrice: item.costPrice, price: '',
product: undefined, productCount: 0,
productName: item.productName, amount: '',
productId: '', };
price: '',
productCount: 0,
amount: '',
};
values.push(atom); values.push(atom);
}); });
addSchemaAction.setFieldValue('invoicesDetailsRequests', values); addSchemaAction.setFieldValue('invoicesDetailsRequests', preValues.concat(values));
productRowCtl.setSelectRow([]);
productRowCtl.setSelectedRowKeys([]);
setVisible(false); setVisible(false);
} }
...@@ -575,15 +577,7 @@ const BillsForm: React.FC<BillsFormProps> = ({ ...@@ -575,15 +577,7 @@ const BillsForm: React.FC<BillsFormProps> = ({
} }
const handleRemoveItem = (index: number) => { const handleRemoveItem = (index: number) => {
const newSelectRow = [...productRowCtl.selectRow];
const newSelectedRowKeys = [...productRowCtl.selectedRowKeys];
const newValue = [...addSchemaAction.getFieldValue('invoicesDetailsRequests')]; const newValue = [...addSchemaAction.getFieldValue('invoicesDetailsRequests')];
newSelectRow.splice(index, 1);
newSelectedRowKeys.splice(index, 1);
productRowCtl.setSelectRow(newSelectRow);
productRowCtl.setSelectedRowKeys(newSelectedRowKeys);
newValue.splice(index, 1); newValue.splice(index, 1);
addSchemaAction.setFieldValue('invoicesDetailsRequests', newValue); addSchemaAction.setFieldValue('invoicesDetailsRequests', newValue);
}; };
......
...@@ -340,7 +340,7 @@ export const addBillSchema: ISchema = { ...@@ -340,7 +340,7 @@ export const addBillSchema: ISchema = {
type: 'string', type: 'string',
'x-component': 'Text', 'x-component': 'Text',
title: '物流方式', title: '物流方式',
default: '', // default: '', // 奇了怪了,initialValues 覆盖不了 default,就这个字段会
}, },
// 不用于展示,只用于收集值 // 不用于展示,只用于收集值
deliveryAddresId: { deliveryAddresId: {
...@@ -450,7 +450,7 @@ export const addBillSchema: ISchema = { ...@@ -450,7 +450,7 @@ export const addBillSchema: ISchema = {
'x-component-props': { 'x-component-props': {
allowClear: true, allowClear: true,
style: { style: {
width: 100, width: 180,
}, },
}, },
'x-rules': [ 'x-rules': [
...@@ -460,11 +460,6 @@ export const addBillSchema: ISchema = { ...@@ -460,11 +460,6 @@ export const addBillSchema: ISchema = {
}, },
], ],
}, },
// 不用于展示,只收集值
productName: {
type: 'string',
display: false,
},
productId: { productId: {
type: 'string', type: 'string',
title: '商品ID', title: '商品ID',
...@@ -497,6 +492,16 @@ export const addBillSchema: ISchema = { ...@@ -497,6 +492,16 @@ export const addBillSchema: ISchema = {
title: '金额', title: '金额',
'x-component': 'Text', 'x-component': 'Text',
}, },
// 不用于展示,只收集值
productName: {
type: 'string',
display: false,
},
// 配送方式,不用于展示,只收集值
deliveryType: {
type: 'string',
display: false,
},
}, },
} }
}, },
......
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