Commit 495e4c27 authored by XieZhiXiong's avatar XieZhiXiong

对接售后退货相关

parent 9c848afe
......@@ -1342,79 +1342,6 @@ export const REPAIR_OUTER_STATUS = {
[REPAIR_OUTER_STATUS_FINISHED]: '售后完成',
};
// 售后退货内部状态
/**
* 待提交退货
*/
export const RETURN_INNER_STATUS_UNCOMMITTED = 1;
/**
* 已提交
*/
export const RETURN_INNER_STATUS_COMMITTED = 2;
/**
* 一级审核通过
*/
export const RETURN_INNER_STATUS_SUCCESS_1 = 3;
/**
* 二级审核通过
*/
export const RETURN_INNER_STATUS_SUCCESS_2 = 4;
/**
* 审核不通过(不接受申请)
*/
export const RETURN_INNER_STATUS_FAILED = 5;
/**
* 确认审核通过
*/
export const RETURN_INNER_STATUS_CONFIRM_SUCCESS = 6;
/**
* 确认审核不通过
*/
export const RETURN_INNER_STATUS_CONFIRM_FAILED = 7;
/**
* 确认售后完成
*/
export const RETURN_INNER_STATUS_FINISHED = 8;
export const RETURN_INNER_STATUS = {
[REPAIR_INNER_STATUS_UNCOMMITTED]: '待提交',
[REPAIR_INNER_STATUS_COMMITTED]: '已提交',
[REPAIR_INNER_STATUS_SUCCESS_1]: '一级审核通过',
[REPAIR_INNER_STATUS_SUCCESS_2]: '二级审核通过',
[REPAIR_INNER_STATUS_FAILED]: '审核不通过',
[REPAIR_INNER_STATUS_CONFIRM_SUCCESS]: '确认审核通过',
[REPAIR_INNER_STATUS_CONFIRM_FAILED]: '确认审核不通过',
[REPAIR_INNER_STATUS_FINISHED]: '确认售后完成',
};
// 售后退货外部状态
/**
* 待提交申请单
*/
export const RETURN_OUTER_STATUS_UNCOMMITTED = 1;
/**
* 待确认
*/
export const RETURN_OUTER_STATUS_UNCONFIRMED = 2;
/**
* 不接受申请
*/
export const RETURN_OUTER_STATUS_FAILED = 3;
/**
* 接受申请
*/
export const RETURN_OUTER_STATUS_SUCCESS = 4;
/**
* 售后完成
*/
export const RETURN_OUTER_STATUS_FINISHED = 5;
export const RETURN_OUTER_STATUS = {
[REPAIR_OUTER_STATUS_UNCOMMITTED]: '待提交',
[REPAIR_OUTER_STATUS_UNCONFIRMED]: '待确认',
[REPAIR_OUTER_STATUS_FAILED]: '不接受申请',
[REPAIR_OUTER_STATUS_SUCCESS]: '接受申请',
[REPAIR_OUTER_STATUS_FINISHED]: '售后完成',
};
// 售后换货内部状态
/**
* 待提交换货
......@@ -1647,3 +1574,196 @@ export const EXCHANGE_OUTER_STATUS = {
[EXCHANGE_OUTER_STATUS_UNCONFIRMED_FINISHED]: '待确认售后完成',
[EXCHANGE_OUTER_STATUS_FINISHED]: '售后完成',
};
// 售后退货内部状态
/**
* 待提交换货
*/
export const RETURN_INNER_STATUS_UNCOMMITTED = 1;
/**
* 已提交
*/
export const RETURN_INNER_STATUS_COMMITTED = 2;
/**
* 一级审核通过
*/
export const RETURN_INNER_STATUS_SUCCESS_1 = 3;
/**
* 二级审核通过
*/
export const RETURN_INNER_STATUS_SUCCESS_2 = 4;
/**
* 审核不通过(不接受申请)
*/
export const RETURN_INNER_STATUS_FAILED = 5;
/**
* 确认审核通过
*/
export const RETURN_INNER_STATUS_CONFIRM_SUCCESS = 6;
/**
* 确认审核不通过
*/
export const RETURN_INNER_STATUS_CONFIRM_FAILED = 7;
/**
* 待新增退货发货单
*/
export const RETURN_INNER_STATUS_NOT_ADDED_RETURN_DELIVERY = 8;
/**
* 待审核退货发货单
*/
export const RETURN_INNER_STATUS_UNREVIEWED_RETURN_DELIVERY = 9;
/**
* 采购商待新增物流单
*/
export const RETURN_INNER_STATUS_CONSUMER_NOT_ADDED_LOGISTICS = 10;
/**
* 采购商待确认物流单
*/
export const RETURN_INNER_STATUS_CONSUMER_UNCONFIRMED_LOGISTICS = 11;
/**
* 待确认退货发货
*/
export const RETURN_INNER_STATUS_UNCONFIRMED_RETURN_DELIVERY = 12;
/**
* 待新增退货入库单
*/
export const RETURN_INNER_STATUS_NOT_ADDED_RETURN_STORAGE = 13;
/**
* 待审核退货入库单
*/
export const RETURN_INNER_STATUS_UNREVIEWED_RETURN_STORAGE = 14;
/**
* 待确认退货收货
*/
export const RETURN_INNER_STATUS_UNCONFIRMED_RETURN_RECEIVE = 15;
/**
* 待确认退货回单
*/
export const RETURN_INNER_STATUS_UNCONFIRMED_RETURN_RECEIPT = 16;
/**
* 待退款
*/
export const RETURN_INNER_STATUS_TO_BE_REFUNDED = 17;
/**
* 待确认退款
*/
export const RETURN_INNER_STATUS_UNCONFIRMED_REFUNDED = 18;
/**
* 退款失败
*/
export const RETURN_INNER_STATUS_REFUNDED_FAIL = 19;
/**
* 退款成功
*/
export const RETURN_INNER_STATUS_REFUNDED_SUCCESS = 20;
/**
* 待确认售后完成
*/
export const RETURN_INNER_STATUS_UNCONFIRMED_FINISHED = 21;
/**
* 已确认售后完成
*/
export const RETURN_INNER_STATUS_FINISHED = 22;
export const RETURN_INNER_STATUS = {
[RETURN_INNER_STATUS_UNCOMMITTED]: '待提交',
[RETURN_INNER_STATUS_COMMITTED]: '已提交',
[RETURN_INNER_STATUS_SUCCESS_1]: '一级审核通过',
[RETURN_INNER_STATUS_SUCCESS_2]: '二级审核通过',
[RETURN_INNER_STATUS_FAILED]: '审核不通过',
[RETURN_INNER_STATUS_CONFIRM_SUCCESS]: '确认审核通过',
[RETURN_INNER_STATUS_CONFIRM_FAILED]: '确认审核不通过',
[RETURN_INNER_STATUS_NOT_ADDED_RETURN_DELIVERY]: '待新增退货发货单',
[RETURN_INNER_STATUS_UNREVIEWED_RETURN_DELIVERY]: '待审核退货发货单',
[RETURN_INNER_STATUS_CONSUMER_NOT_ADDED_LOGISTICS]: '采购商待新增物流单',
[RETURN_INNER_STATUS_CONSUMER_UNCONFIRMED_LOGISTICS]: '采购商待确认物流单',
[RETURN_INNER_STATUS_UNCONFIRMED_RETURN_DELIVERY]: '待确认退货发货',
[RETURN_INNER_STATUS_NOT_ADDED_RETURN_STORAGE]: '待新增退货入库单',
[RETURN_INNER_STATUS_UNREVIEWED_RETURN_STORAGE]: '待审核退货入库单',
[RETURN_INNER_STATUS_UNCONFIRMED_RETURN_RECEIVE]: '待确认退货收货',
[RETURN_INNER_STATUS_UNCONFIRMED_RETURN_RECEIPT]: '待确认退货回单',
[RETURN_INNER_STATUS_TO_BE_REFUNDED]: '待退款',
[RETURN_INNER_STATUS_UNCONFIRMED_REFUNDED]: '待确认退款',
[RETURN_INNER_STATUS_REFUNDED_FAIL]: '待确认退款',
[RETURN_INNER_STATUS_REFUNDED_SUCCESS]: '待确认退款',
[RETURN_INNER_STATUS_UNCONFIRMED_FINISHED]: '待确认售后完成',
[RETURN_INNER_STATUS_FINISHED]: '已确认售后完成',
};
// 售后退货外部状态
/**
* 待提交
*/
export const RETURN_OUTER_STATUS_UNCOMMITTED = 1;
/**
* 待确认申请单
*/
export const RETURN_OUTER_UNCONFIRMED = 2;
/**
* 不接受申请
*/
export const RETURN_OUTER_STATUS_FAILED = 3;
/**
* 接受申请
*/
export const RETURN_OUTER_STATUS_SUCCESS = 4;
/**
* 待新增退货发货单
*/
export const RETURN_OUTER_STATUS_NOT_ADDED_RETURN_DELIVERY = 5;
/**
* 采购商待新增物流单
*/
export const RETURN_OUTER_STATUS_CONSUMER_NOT_ADDED_LOGISTICS = 6;
/**
* 待退货发货
*/
export const RETURN_OUTER_STATUS_RETURN_DELIVERY = 7;
/**
* 待新增退货入库单
*/
export const RETURN_OUTER_STATUS_NOT_ADDED_RETURN_STORAGE = 8;
/**
* 待退货收货
*/
export const RETURN_OUTER_STATUS_RETURN_RECEIVE = 9;
/**
* 待确认退货回单
*/
export const RETURN_OUTER_STATUS_UNCONFIRMED_RETURN_RECEIPT = 10;
/**
* 待退款
*/
export const RETURN_OUTER_STATUS_TO_BE_REFUNDED = 11;
/**
* 待确认退款
*/
export const RETURN_OUTER_STATUS_UNCONFIRMED_REFUNDED = 12;
/**
* 确认退款未到账
*/
export const RETURN_OUTER_STATUS_NOT_RECEIVED = 13;
/**
* 待确认售后完成
*/
export const RETURN_OUTER_STATUS_UNCONFIRMED_FINISHED = 14;
/**
* 售后完成
*/
export const RETURN_OUTER_STATUS_FINISHED = 15;
export const RETURN_OUTER_STATUS = {
[RETURN_OUTER_STATUS_UNCOMMITTED]: '待提交',
[RETURN_OUTER_UNCONFIRMED]: '待确认申请单',
[RETURN_OUTER_STATUS_FAILED]: '不接受申请',
[RETURN_OUTER_STATUS_SUCCESS]: '接受申请',
[RETURN_OUTER_STATUS_NOT_ADDED_RETURN_DELIVERY]: '待新增退货发货单',
[RETURN_OUTER_STATUS_CONSUMER_NOT_ADDED_LOGISTICS]: '采购商待新增物流单',
[RETURN_OUTER_STATUS_RETURN_DELIVERY]: '待退货发货',
[RETURN_OUTER_STATUS_NOT_ADDED_RETURN_STORAGE]: '待新增退货入库单',
[RETURN_OUTER_STATUS_RETURN_RECEIVE]: '待退货收货',
[RETURN_OUTER_STATUS_UNCONFIRMED_RETURN_RECEIPT]: '待确认退货回单',
[RETURN_OUTER_STATUS_TO_BE_REFUNDED]: '待退款',
[RETURN_OUTER_STATUS_UNCONFIRMED_REFUNDED]: '待确认退款',
[RETURN_OUTER_STATUS_NOT_RECEIVED]: '确认退款未到账',
[RETURN_OUTER_STATUS_UNCONFIRMED_FINISHED]: '待确认售后完成',
[RETURN_OUTER_STATUS_FINISHED]: '售后完成',
}
......@@ -14,9 +14,9 @@ import { EditableColumns } from '@/components/PolymericTable/interface';
import PolymericTable from '@/components/PolymericTable';
import EyePreview from '@/components/EyePreview';
import {
EXCHANGE_INNER_STATUS_UNCONFIRMED_DELIVER,
EXCHANGE_INNER_STATUS_CONFIRMED_RECEIVING,
EXCHANGE_INNER_STATUS_CONFIRMED_DELIVER,
MAIL_INNER_STATUS_UNCONFIRMED_DELIVER,
MAIL_INNER_STATUS_CONFIRMED_RECEIVING,
MAIL_INNER_STATUS_CONFIRMED_DELIVER,
} from '../../constants';
import styles from './index.less';
......@@ -282,7 +282,7 @@ const ExchangeDeliverInfo: React.FC<ExchangeDeliverInfoProps> = ({
<Badge color={'#6C9CEB'} text={item.innerStatusName} />
</Descriptions.Item>
<Descriptions.Item>
{item.innerStatus === EXCHANGE_INNER_STATUS_UNCONFIRMED_DELIVER && (
{item.innerStatus === MAIL_INNER_STATUS_UNCONFIRMED_DELIVER && (
<a
style={{
textAlign: 'right',
......@@ -293,7 +293,7 @@ const ExchangeDeliverInfo: React.FC<ExchangeDeliverInfoProps> = ({
确认换货发货
</a>
)}
{item.innerStatus === EXCHANGE_INNER_STATUS_CONFIRMED_DELIVER && (
{item.innerStatus === MAIL_INNER_STATUS_CONFIRMED_DELIVER && (
<a
style={{
textAlign: 'right',
......@@ -304,7 +304,7 @@ const ExchangeDeliverInfo: React.FC<ExchangeDeliverInfoProps> = ({
确认换货收货
</a>
)}
{item.innerStatus === EXCHANGE_INNER_STATUS_CONFIRMED_RECEIVING && (
{item.innerStatus === MAIL_INNER_STATUS_CONFIRMED_RECEIVING && (
<a
style={{
textAlign: 'right',
......
......@@ -2,7 +2,7 @@
* @Author: XieZhiXiong
* @Date: 2020-11-05 15:18:15
* @LastEditors: XieZhiXiong
* @LastEditTime: 2020-12-03 16:19:41
* @LastEditTime: 2020-12-08 16:29:30
* @Description: 退货收货统计、退货发货明细
*/
import React from 'react';
......@@ -17,9 +17,9 @@ import { EditableColumns } from '@/components/PolymericTable/interface';
import PolymericTable from '@/components/PolymericTable';
import EyePreview from '@/components/EyePreview';
import {
EXCHANGE_INNER_STATUS_UNCONFIRMED_DELIVER,
EXCHANGE_INNER_STATUS_CONFIRMED_DELIVER,
EXCHANGE_INNER_STATUS_CONFIRMED_RECEIVING,
MAIL_INNER_STATUS_UNCONFIRMED_DELIVER,
MAIL_INNER_STATUS_CONFIRMED_DELIVER,
MAIL_INNER_STATUS_CONFIRMED_RECEIVING,
} from '../../constants';
import styles from './index.less';
......@@ -292,7 +292,7 @@ const ExchangeReceivedInfo: React.FC<ExchangeReceivedInfoProps> = ({
<Badge color={'#6C9CEB'} text={item.innerStatusName} />
</Descriptions.Item>
<Descriptions.Item>
{item.innerStatus === EXCHANGE_INNER_STATUS_UNCONFIRMED_DELIVER && (
{item.innerStatus === MAIL_INNER_STATUS_UNCONFIRMED_DELIVER && (
<a
style={{
textAlign: 'right',
......@@ -303,7 +303,7 @@ const ExchangeReceivedInfo: React.FC<ExchangeReceivedInfoProps> = ({
确认退货发货
</a>
)}
{item.innerStatus === EXCHANGE_INNER_STATUS_CONFIRMED_DELIVER && (
{item.innerStatus === MAIL_INNER_STATUS_CONFIRMED_DELIVER && (
<a
style={{
textAlign: 'right',
......@@ -314,7 +314,7 @@ const ExchangeReceivedInfo: React.FC<ExchangeReceivedInfoProps> = ({
确认退货收货
</a>
)}
{item.innerStatus === EXCHANGE_INNER_STATUS_CONFIRMED_RECEIVING && (
{item.innerStatus === MAIL_INNER_STATUS_CONFIRMED_RECEIVING && (
<a
style={{
textAlign: 'right',
......
......@@ -2,7 +2,7 @@
* @Author: XieZhiXiong
* @Date: 2020-11-06 09:54:04
* @LastEditors: XieZhiXiong
* @LastEditTime: 2020-12-04 18:00:18
* @LastEditTime: 2020-12-08 14:31:40
* @Description: 退货地址信息
*/
import React from 'react';
......@@ -124,6 +124,7 @@ const ReturnAddressInfo: React.FC<ReturnAddressInfo> = ({
deliveryType: shippingAddress.deliveryType,
deliveryAddress: deliveryAddress.id,
}}
previewPlaceholder=" "
effects={($, { setFieldState, getFieldValue }) => {
useAsyncSelect('deliveryAddress', fetchDeliveryAddress, ['label', 'value']);
......
.deliver {
&-item {
position: relative;
&-check {
position: absolute;
top: 0;
right: 0;
padding: 4px 12px;
background: #606266;
border-radius: 0px 4px 0px 4px;
color: #ffffff;
cursor: pointer;
}
}
.detailedWrap {
padding: 25px 24px 9px;
margin: 16px 0;
background-color: #F7F8FA;
}
\ No newline at end of file
/*
* @Author: XieZhiXiong
* @Date: 2020-11-30 18:44:40
* @LastEditors: XieZhiXiong
* @LastEditTime: 2020-11-30 18:44:41
* @Description:
*/
export interface SummaryData {
/**
* 订单号
*/
orderNo: string
/**
* 商品id
*/
productId: number
/**
* 商品名称
*/
productName: string
/**
* 品类
*/
category: string
/**
* 品牌
*/
brand: string
/**
* 单位
*/
unit: string
/**
* 退货数量
*/
returnCount: number
/**
* 发货数量
*/
deliveryCount: number
/**
* 未退货发货数量,(未退货发货=换货数量-已退货发货)
*/
unDeliveryCount: number
/**
* 收货数量
*/
receiveCount: number
/**
* 差异数量,(差异数量=已退货发货-已退货收货)
*/
differenceCount: number
}
export interface Detailed {
/**
* 发货Id
*/
deliveryId: number
/**
* 批次
*/
batch: number
/**
* 发货单号
*/
deliveryNo: string
/**
* 发货时间(yyyy-MM-ddHH:mm)
*/
deliveryTime: string
/**
* 物流单号
*/
logisticsOrderNo: string
/**
* 物流公司
*/
logisticsName: string
/**
* 入库单号
*/
storageNo: string
/**
* 入库时间(yyyy-MM-ddHH:mm)
*/
storageTime: string
/**
* 内部状态
*/
innerStatus: number
/**
* 内部状态名称
*/
innerStatusName: string
/**
* 发货明细 ,DeliveryGoodsDetailVO
*/
detailList: {
/**
* 订单号
*/
orderNo?: string
/**
* 商品id
*/
productId?: number
/**
* 商品名称
*/
productName?: string
/**
* 品类
*/
category?: string
/**
* 品牌
*/
brand?: string
/**
* 单位
*/
unit?: string
/**
* 数量
*/
count?: number
/**
* 发货数量
*/
deliveryCount?: number
/**
* 入库数量
*/
storageCount?: number
/**
* 差异数量,(差异数量=发货数量-入库数量)
*/
differenceCount?: number
}[]
}
\ No newline at end of file
......@@ -2,15 +2,26 @@
&-item {
position: relative;
&-check {
&-actions {
position: absolute;
top: 0;
right: 0;
}
&-check {
padding: 4px 12px;
background: #606266;
border-radius: 0px 4px 0px 4px;
color: #ffffff;
cursor: pointer;
}
&-return {
padding: 4px 12px;
background: #00B37A;
border-radius: 0px 4px 0px 4px;
color: #ffffff;
cursor: pointer;
}
}
}
\ No newline at end of file
......@@ -2,12 +2,12 @@
* @Author: XieZhiXiong
* @Date: 2020-11-05 18:02:18
* @LastEditors: XieZhiXiong
* @LastEditTime: 2020-11-05 18:10:58
* @LastEditTime: 2020-12-08 18:30:16
* @Description: 退款明细
*/
import React from 'react';
import { Row, Col } from 'antd';
import { CaretRightOutlined, CaretDownOutlined, RightOutlined } from '@ant-design/icons';
import { Row, Col, Modal } from 'antd';
import { CaretRightOutlined, CaretDownOutlined, RightOutlined, ExclamationCircleOutlined } from '@ant-design/icons';
import MellowCard from '@/components/MellowCard';
import { EditableColumns } from '@/components/PolymericTable/interface';
import PolymericTable from '@/components/PolymericTable';
......@@ -16,14 +16,22 @@ import Stamp from '../Stamp';
import DescribeLine from '../DescribeLine';
import styles from './index.less';
const { confirm } = Modal;
interface ReturnDetailInfoProps {
dataSource: {
[key: string]: any,
}[];
/**
* 退款事件
*/
onRefund?: (id: number) => Promise<any>;
};
const ReturnDetailInfo: React.FC<ReturnDetailInfoProps> = ({
dataSource = [],
dataSource = [],
onRefund,
}) => {
const columns: EditableColumns[] = [
......@@ -33,8 +41,8 @@ const ReturnDetailInfo: React.FC<ReturnDetailInfoProps> = ({
render: (text, record) => text,
},
{
title: 'ID',
dataIndex: 'id',
title: '商品ID',
dataIndex: 'productId',
align: 'center',
},
{
......@@ -59,40 +67,53 @@ const ReturnDetailInfo: React.FC<ReturnDetailInfoProps> = ({
},
{
title: '采购数量',
dataIndex: 'num',
dataIndex: 'purchaseCount',
align: 'center',
},
{
title: '采购单价',
dataIndex: 'returnAmount2',
dataIndex: 'purchasePrice',
align: 'center',
},
{
title: '采购金额',
dataIndex: 'status3',
dataIndex: 'purchaseAmount',
align: 'center',
},
{
title: '已支付金额',
dataIndex: 'reason2',
dataIndex: 'payAmount',
align: 'center',
},
{
title: '退货数量',
dataIndex: 'reason1',
dataIndex: 'returnCount',
align: 'center',
},
{
title: '退款金额',
dataIndex: 'reason1',
dataIndex: 'refundAmount',
align: 'center',
},
];
const handleRefund = id => {
if (onRefund) {
confirm({
title: '提示',
icon: <ExclamationCircleOutlined />,
content: `是否确认退款?`,
onOk() {
return onRefund(id);
},
});
}
};
return (
<MellowCard title="退款明细">
<PolymericTable
rowKey="id"
rowKey={record => `${record.orderNo}+${record.productId}`}
dataSource={dataSource}
columns={columns}
loading={false}
......@@ -106,48 +127,48 @@ const ReturnDetailInfo: React.FC<ReturnDetailInfoProps> = ({
),
expandedRowRender: record => (
<Row
gutter={16}
gutter={[16, 16]}
className={styles.deliver}
>
<Col span={8} className={styles['deliver-item']}>
<Stamp>
<DescribeLine column={2}>
<DescribeLine.Item title="支付次数">1</DescribeLine.Item>
<DescribeLine.Item title="状态">
<StatusTag type="success" title="确认退款到账" />
</DescribeLine.Item>
<DescribeLine.Item title="支付环节">订单确认后支付</DescribeLine.Item>
<DescribeLine.Item title="已支付金额(元)">12,000</DescribeLine.Item>
<DescribeLine.Item title="支付比例">30%</DescribeLine.Item>
<DescribeLine.Item title="退款金额(元)">6,000</DescribeLine.Item>
<DescribeLine.Item title="支付方式">授信额度支付方式</DescribeLine.Item>
<DescribeLine.Item title="退款时间">2020-05-20 10:00</DescribeLine.Item>
<DescribeLine.Item title="支付渠道">授信额度支付</DescribeLine.Item>
</DescribeLine>
{record.detailList.map(item => (
<Col
span={8}
className={styles['deliver-item']}
key={item.refundId}
>
<Stamp>
<DescribeLine column={2}>
<DescribeLine.Item title="支付次数">1</DescribeLine.Item>
<DescribeLine.Item title="状态">
<StatusTag type="success" title={item.innerStatusName} />
</DescribeLine.Item>
<DescribeLine.Item title="支付环节">{item.payNode}</DescribeLine.Item>
<DescribeLine.Item title="已支付金额(元)">{item.payAmount}</DescribeLine.Item>
<DescribeLine.Item title="支付比例">{item.payRatio}%</DescribeLine.Item>
<DescribeLine.Item title="退款金额(元)">{item.refundAmount}</DescribeLine.Item>
<DescribeLine.Item title="支付方式">{item.payWayName}</DescribeLine.Item>
<DescribeLine.Item title="退款时间">{item.refundTime}</DescribeLine.Item>
<DescribeLine.Item title="支付渠道">{item.channelName}</DescribeLine.Item>
</DescribeLine>
<div className={styles['deliver-item-check']}>
查看
<RightOutlined />
</div>
</Stamp>
</Col>
<Col span={8}>
<Stamp>
<DescribeLine column={2}>
<DescribeLine.Item title="支付次数">1</DescribeLine.Item>
<DescribeLine.Item title="状态">
<StatusTag type="success" title="确认退款到账" />
</DescribeLine.Item>
<DescribeLine.Item title="支付环节">订单确认后支付</DescribeLine.Item>
<DescribeLine.Item title="已支付金额(元)">12,000</DescribeLine.Item>
<DescribeLine.Item title="支付比例">30%</DescribeLine.Item>
<DescribeLine.Item title="退款金额(元)">6,000</DescribeLine.Item>
<DescribeLine.Item title="支付方式">授信额度支付方式</DescribeLine.Item>
<DescribeLine.Item title="退款时间">2020-05-20 10:00</DescribeLine.Item>
<DescribeLine.Item title="支付渠道">授信额度支付</DescribeLine.Item>
</DescribeLine>
</Stamp>
</Col>
<div className={styles['deliver-item-actions']}>
<div
className={styles['deliver-item-return']}
onClick={() => handleRefund(item.refundId)}
>
退款
<RightOutlined />
</div>
<div
className={styles['deliver-item-check']}
>
查看
<RightOutlined />
</div>
</div>
</Stamp>
</Col>
))}
</Row>
),
}}
......
import React from 'react';
import { SchemaForm, SchemaField, FormPath } from '@formily/antd';
import { toArr } from '@formily/shared';
import { ArrayList } from '@formily/react-shared-components';
import Stamp from '../../../Stamp';
const ArrayCustom = props => {
const { value, schema, className, editable, path, mutators } = props;
const {
renderAddition,
renderRemove,
renderMoveDown,
renderMoveUp,
renderEmpty,
renderExtraOperations,
...componentProps
} = schema.getExtendsComponentProps() || {};
return (
<ArrayList
value={value}
minItems={schema.minItems}
maxItems={schema.maxItems}
editable={editable}
components={{}}
renders={{
renderAddition,
renderRemove,
renderMoveDown,
renderMoveUp,
renderEmpty // 允许开发者覆盖默认
}}
>
{toArr(value).map((item, index) => {
return (
<div {...componentProps} key={index}>
<Stamp imprinted>
<SchemaField path={FormPath.parse(path).concat(index)} />
</Stamp>
</div>
)
})}
</ArrayList>
)
}
ArrayCustom.isFieldComponent = true;
export default ArrayCustom;
\ No newline at end of file
/*
* @Author: XieZhiXiong
* @Date: 2020-12-07 15:59:30
* @LastEditors: XieZhiXiong
* @LastEditTime: 2020-11-19 15:18:29
* @Description:
*/
import { useBusinessEffects } from './useBusinessEffects';
import { useAsyncSelect } from '@/formSchema/effects/useAsyncSelect';
import { PublicApi } from '@/services/api';
export const createEffects = (context, actions) => {
const { setFieldState } = actions;
useBusinessEffects(context, actions);
};
\ No newline at end of file
/*
* @Author: XieZhiXiong
* @Date: 2020-11-03 18:30:47
* @LastEditors: XieZhiXiong
* @LastEditTime: 2020-12-08 09:53:29
* @Description: 联动逻辑相关
*/
import { Modal } from 'antd';
import { FormEffectHooks, FormPath } from '@formily/antd';
import { useLinkageUtils } from '@/utils/formEffectUtils';
import { useStateFilterSearchLinkageEffect } from '@/formSchema/effects/useFilterSearch';
import { PublicApi } from '@/services/api';
const {
onFieldInputChange$,
onFieldValueChange$,
} = FormEffectHooks;
export const useBusinessEffects = (context, actions) => {
const {
getFieldValue,
setFieldValue,
getFieldState,
setFieldState,
} = actions;
const linkage = useLinkageUtils();
// 联动退款金额
onFieldValueChange$('payList.*.refundAmount').subscribe(fieldState => {
const payListValue = getFieldValue('payList');
const amount = payListValue.reduce((pre, now) => +now.refundAmount + pre, 0);
setFieldValue('returnAmount', amount);
});
// 退款数量 联动,支付信息里边的 退款金额
onFieldInputChange$('returnCount').subscribe(fieldState => {
const { value } = fieldState;
const purchasePriceValue = getFieldValue('purchasePrice');
const newData = [...getFieldValue('payList')].map(item => {
return {
...item,
refundAmount: +(+value * purchasePriceValue * (item.payRatio / 100)).toFixed(2),
};
});
setFieldValue('payList', newData);
});
// 校验退货数量
onFieldInputChange$('returnCount').subscribe(fieldState => {
const { name, value } = fieldState;
// 采购数量
const purchaseCountValue = getFieldValue('purchaseCount');
setFieldState(
'returnCount',
state => {
if (+value > purchaseCountValue) {
state.errors = '填写值已超过最大可退货数量,请重新填写';
} else {
state.errors = '';
}
}
);
});
}
\ No newline at end of file
......@@ -2,7 +2,7 @@
* @Author: XieZhiXiong
* @Date: 2020-11-05 17:36:45
* @LastEditors: XieZhiXiong
* @LastEditTime: 2020-11-06 15:45:19
* @LastEditTime: 2020-12-07 18:19:57
* @Description: 查看退货数量与退款金额 抽屉
*/
import React from 'react';
......@@ -10,21 +10,109 @@ import { Drawer, Button } from 'antd';
import NiceForm from '@/components/NiceForm';
import { createFormActions } from '@formily/antd';
import schema from './schema';
import { createEffects } from './effects';
import Stamp from '../Stamp';
import SteamerTicket from './components/SteamerTicket';
import styles from './index.less';
const schemaAction = createFormActions();
export interface PayListItem {
/**
* 支付次数
*/
payCount: number,
/**
* 支付环节
*/
payNode: string,
/**
* 支付比例
*/
payRatio: number,
/**
* 支付金额
*/
payAmount: number,
/**
* 支付方式
*/
payWay: string,
/**
* 支付渠道
*/
channel: string,
/**
* 支付时间
*/
payTime: string,
/**
* 退款金额
*/
refundAmount: number,
};
export interface OrderInfo {
/**
* 列表索引
*/
index: number;
/**
* 订单号
*/
orderNo: string;
/**
* 订单id
*/
orderId: number;
/**
* 商品名称
*/
productName: string;
/**
* 品类
*/
category: string;
/**
* 品牌
*/
brand: string;
/**
* 单位
*/
unit: string;
/**
* 采购数量
*/
purchaseCount: string;
/**
* 采购单价
*/
purchasePrice: string;
/**
* 采购金额
*/
purchaseAmount: string;
/**
* 支付记录
*/
payList: PayListItem;
};
interface ReturnInfoDrawerProps {
visible: boolean;
orderInfo: OrderInfo;
onClose: () => void;
onSubmit?: (values: { [key: string]: any }) => void;
// 是否是编辑的
/**
* 是否是编辑的
*/
isEdit?: boolean;
};
const ReturnInfoDrawer: React.FC<ReturnInfoDrawerProps> = ({
visible = false,
orderInfo = {},
onClose,
onSubmit,
isEdit = false,
......@@ -37,7 +125,6 @@ const ReturnInfoDrawer: React.FC<ReturnInfoDrawerProps> = ({
};
const handleSubmit = values => {
console.log('values', values)
if (onSubmit) {
onSubmit(values);
}
......@@ -73,13 +160,14 @@ const ReturnInfoDrawer: React.FC<ReturnInfoDrawerProps> = ({
}
>
<NiceForm
initialValues={{}}
initialValues={orderInfo}
components={{
Stamp,
SteamerTicket,
}}
editable={isEdit}
effects={($, actions) => {
createEffects($, actions);
}}
onSubmit={handleSubmit}
actions={schemaAction}
......
......@@ -2,7 +2,7 @@
* @Author: XieZhiXiong
* @Date: 2020-11-06 14:20:17
* @LastEditors: XieZhiXiong
* @LastEditTime: 2020-11-06 15:40:09
* @LastEditTime: 2020-12-08 10:07:44
* @Description:
*/
import { ISchema } from '@formily/antd';
......@@ -36,63 +36,67 @@ const schema: ISchema = {
orderNo: {
type: 'string',
title: '订单号',
default: 'SPTY12',
'x-component': 'Text',
},
productName: {
type: 'string',
title: '商品名称',
default: '进口头层牛皮荔枝纹/红色/XL',
'x-component': 'Text',
},
category: {
type: 'string',
title: '品类',
default: '牛皮',
'x-component': 'Text',
},
brand: {
type: 'string',
title: '品牌',
default: '阿比巴斯',
'x-component': 'Text',
},
unit: {
type: 'string',
title: '单位',
default: '尺',
'x-component': 'Text',
},
quantity: {
purchaseCount: {
type: 'string',
title: '采购数量',
default: '2,000',
'x-component': 'Text',
},
price: {
purchasePrice: {
type: 'string',
title: '采购单价',
default: '¥ 20.00',
'x-component': 'Text',
editable: false,
'x-component-props': {
addonBefore: '¥ '
},
},
amount: {
purchaseAmount: {
type: 'string',
title: '采购金额',
default: '¥ 40,000.00',
'x-component': 'Text',
editable: false,
'x-component-props': {
addonBefore: '¥ '
},
},
returnNum: {
returnCount: {
type: 'string',
title: '退货数量',
'x-component-props': {
allowClear: true,
style: {
maxWidth: 150,
},
},
'x-rules': [
{
required: true,
message: '请填写退货数量',
},
},
{
pattern: PATTERN_MAPS.quantity,
message: '请填写大于等于1的正整数',
},
pattern: PATTERN_MAPS.weight,
message: '请填写正数,最多保留3位小数',
},
],
},
},
......@@ -106,68 +110,73 @@ const schema: ISchema = {
tab: '支付信息',
},
properties: {
STAMP_1: {
type: 'object',
'x-component': 'Stamp',
'x-component-props': {
imprinted: true,
},
properties: {
MEGA_LAYOUT_1: {
type: 'object',
'x-component': 'Mega-Layout',
'x-component-props': {
labelCol: 6,
wrapperCol: 18,
grid: true,
columns: 2,
autoRow: true,
},
properties: {
payCount: {
type: 'string',
title: '支付次数',
default: '1',
'x-component': 'Text',
},
payLink: {
type: 'string',
title: '支付环节',
default: '1',
'x-component': 'Text',
},
payProportion: {
type: 'string',
title: '支付比例',
default: '1',
'x-component': 'Text',
},
payWay: {
type: 'string',
title: '支付方式',
default: '1',
'x-component': 'Text',
payList: {
type: 'array',
'x-component': 'SteamerTicket',
items: {
type: 'object',
properties: {
MEGA_LAYOUT_2: {
'x-component': 'Mega-Layout',
'x-component-props': {
labelCol: 6,
wrapperCol: 14,
grid: true,
columns: 2,
autoRow: true,
},
payReturnAmount: {
type: 'string',
title: '退款金额(元)',
properties: {
payCount: {
type: 'string',
title: '支付次数',
'x-component': 'Text',
},
payNode: {
type: 'string',
title: '支付环节',
'x-component': 'Text',
},
payRatio: {
type: 'string',
title: '支付比例',
editable: false,
'x-component-props': {
addonAfter: '%'
},
},
payAmount: {
type: 'string',
title: '支付金额',
editable: false,
'x-component-props': {
addonBefore: '¥ '
},
},
payWay: {
type: 'string',
title: '支付方式',
'x-component': 'Text',
},
channel: {
type: 'string',
title: '支付渠道',
'x-component': 'Text',
},
refundAmount: {
type: 'string',
title: '退款金额(元)',
},
payTime: {
type: 'string',
title: '支付时间',
default: +new Date(),
'x-component': 'Text',
},
},
payChannel: {
type: 'string',
title: '支付渠道',
default: '授信额度支付',
'x-component': 'Text',
},
payTime: {
type: 'string',
title: '支付时间',
default: '2020-05-20 10:00',
'x-component': 'Text',
},
},
}
},
},
},
},
},
},
},
'tab-3': {
......@@ -187,10 +196,9 @@ const schema: ISchema = {
returnAmount: {
type: 'string',
title: '退款金额(元)',
default: '20,000.00',
'x-component': 'Text',
},
reason: {
returnReason: {
type: 'string',
title: '退货原因',
'x-component': 'textarea',
......
......@@ -60,6 +60,45 @@ import {
EXCHANGE_INNER_STATUS_UNCONFIRMED_REPLACE_RECEIPT,
EXCHANGE_INNER_STATUS_UNCONFIRMED_FINISHED,
EXCHANGE_INNER_STATUS_FINISHED,
RETURN_INNER_STATUS_UNCOMMITTED,
RETURN_INNER_STATUS_COMMITTED,
RETURN_INNER_STATUS_SUCCESS_1,
RETURN_INNER_STATUS_SUCCESS_2,
RETURN_INNER_STATUS_FAILED,
RETURN_INNER_STATUS_CONFIRM_SUCCESS,
RETURN_INNER_STATUS_CONFIRM_FAILED,
RETURN_INNER_STATUS_NOT_ADDED_RETURN_DELIVERY,
RETURN_INNER_STATUS_UNREVIEWED_RETURN_DELIVERY,
RETURN_INNER_STATUS_CONSUMER_NOT_ADDED_LOGISTICS,
RETURN_INNER_STATUS_CONSUMER_UNCONFIRMED_LOGISTICS,
RETURN_INNER_STATUS_UNCONFIRMED_RETURN_DELIVERY,
RETURN_INNER_STATUS_NOT_ADDED_RETURN_STORAGE,
RETURN_INNER_STATUS_UNREVIEWED_RETURN_STORAGE,
RETURN_INNER_STATUS_UNCONFIRMED_RETURN_RECEIVE,
RETURN_INNER_STATUS_UNCONFIRMED_RETURN_RECEIPT,
RETURN_INNER_STATUS_TO_BE_REFUNDED,
RETURN_INNER_STATUS_UNCONFIRMED_REFUNDED,
RETURN_INNER_STATUS_REFUNDED_FAIL,
RETURN_INNER_STATUS_REFUNDED_SUCCESS,
RETURN_INNER_STATUS_UNCONFIRMED_FINISHED,
RETURN_INNER_STATUS_FINISHED,
RETURN_OUTER_STATUS_UNCOMMITTED,
RETURN_OUTER_UNCONFIRMED,
RETURN_OUTER_STATUS_FAILED,
RETURN_OUTER_STATUS_SUCCESS,
RETURN_OUTER_STATUS_NOT_ADDED_RETURN_DELIVERY,
RETURN_OUTER_STATUS_CONSUMER_NOT_ADDED_LOGISTICS,
RETURN_OUTER_STATUS_RETURN_DELIVERY,
RETURN_OUTER_STATUS_NOT_ADDED_RETURN_STORAGE,
RETURN_OUTER_STATUS_RETURN_RECEIVE,
RETURN_OUTER_STATUS_UNCONFIRMED_RETURN_RECEIPT,
RETURN_OUTER_STATUS_TO_BE_REFUNDED,
RETURN_OUTER_STATUS_UNCONFIRMED_REFUNDED,
RETURN_OUTER_STATUS_NOT_RECEIVED,
RETURN_OUTER_STATUS_UNCONFIRMED_FINISHED,
RETURN_OUTER_STATUS_FINISHED,
} from '@/constants';
// 售后维修外部状态 StatusTag map
......@@ -105,7 +144,7 @@ export const EXCHANGE_OUTER_STATUS_TAG_MAP = {
[EXCHANGE_OUTER_STATUS_FINISHED]: 'success',
};
// 售后换货部状态 Badge map
// 售后换货部状态 Badge map
export const EXCHANGE_INNER_STATUS_BADGE_MAP = {
[EXCHANGE_INNER_STATUS_UNCOMMITTED]: '#669EDE',
[EXCHANGE_INNER_STATUS_COMMITTED]: '#41CC9E',
......@@ -136,20 +175,65 @@ export const EXCHANGE_INNER_STATUS_BADGE_MAP = {
[EXCHANGE_INNER_STATUS_FINISHED]: '#41CC9E',
};
// 货明细内部状态
// 退货明细内部状态
/**
* 未确认发货
*/
export const EXCHANGE_INNER_STATUS_UNCONFIRMED_DELIVER = 1;
export const MAIL_INNER_STATUS_UNCONFIRMED_DELIVER = 1;
/**
* 已确认发货
*/
export const EXCHANGE_INNER_STATUS_CONFIRMED_DELIVER = 2;
export const MAIL_INNER_STATUS_CONFIRMED_DELIVER = 2;
/**
* 已确认收货
*/
export const EXCHANGE_INNER_STATUS_CONFIRMED_RECEIVING = 3;
export const MAIL_INNER_STATUS_CONFIRMED_RECEIVING = 3;
/**
* 确认回单
*/
export const EXCHANGE_INNER_STATUS_CONFIRMED_BACK = 4;
\ No newline at end of file
export const MAIL_INNER_STATUS_CONFIRMED_BACK = 4;
// 售后退货外部状态 StatusTag map
export const RETURN_OUTER_STATUS_TAG_MAP = {
[RETURN_OUTER_STATUS_UNCOMMITTED]: 'default',
[RETURN_OUTER_UNCONFIRMED]: 'primary',
[RETURN_OUTER_STATUS_FAILED]: 'danger',
[RETURN_OUTER_STATUS_SUCCESS]: 'primary',
[RETURN_OUTER_STATUS_NOT_ADDED_RETURN_DELIVERY]: 'danger',
[RETURN_OUTER_STATUS_CONSUMER_NOT_ADDED_LOGISTICS]: 'warning',
[RETURN_OUTER_STATUS_RETURN_DELIVERY]: 'danger',
[RETURN_OUTER_STATUS_NOT_ADDED_RETURN_STORAGE]: 'danger',
[RETURN_OUTER_STATUS_RETURN_RECEIVE]: 'danger',
[RETURN_OUTER_STATUS_UNCONFIRMED_RETURN_RECEIPT]: 'danger',
[RETURN_OUTER_STATUS_TO_BE_REFUNDED]: 'danger',
[RETURN_OUTER_STATUS_UNCONFIRMED_REFUNDED]: 'primary',
[RETURN_OUTER_STATUS_NOT_RECEIVED]: 'warning',
[RETURN_OUTER_STATUS_UNCONFIRMED_FINISHED]: 'primary',
[RETURN_OUTER_STATUS_FINISHED]: 'success',
};
// 售后退货内部状态 Badge map
export const RETURN_INNER_STATUS_BADGE_MAP = {
[RETURN_INNER_STATUS_UNCOMMITTED]: '#669EDE',
[RETURN_INNER_STATUS_COMMITTED]: '#41CC9E',
[RETURN_INNER_STATUS_SUCCESS_1]: '#41CC9E',
[RETURN_INNER_STATUS_SUCCESS_2]: '#41CC9E',
[RETURN_INNER_STATUS_FAILED]: '#EF6260',
[RETURN_INNER_STATUS_CONFIRM_SUCCESS]: '#41CC9E',
[RETURN_INNER_STATUS_CONFIRM_FAILED]: '#EF6260',
[RETURN_INNER_STATUS_NOT_ADDED_RETURN_DELIVERY]: '#E63F3B',
[RETURN_INNER_STATUS_UNREVIEWED_RETURN_DELIVERY]: '#FF991F',
[RETURN_INNER_STATUS_CONSUMER_NOT_ADDED_LOGISTICS]: '#E63F3B',
[RETURN_INNER_STATUS_CONSUMER_UNCONFIRMED_LOGISTICS]: '#6C9CEB',
[RETURN_INNER_STATUS_UNCONFIRMED_RETURN_DELIVERY]: '#6C9CEB',
[RETURN_INNER_STATUS_NOT_ADDED_RETURN_STORAGE]: '#E63F3B',
[RETURN_INNER_STATUS_UNREVIEWED_RETURN_STORAGE]: '#FF991F',
[RETURN_INNER_STATUS_UNCONFIRMED_RETURN_RECEIVE]: '#6C9CEB',
[RETURN_INNER_STATUS_UNCONFIRMED_RETURN_RECEIPT]: '#6C9CEB',
[RETURN_INNER_STATUS_TO_BE_REFUNDED]: '#E63F3B',
[RETURN_INNER_STATUS_UNCONFIRMED_REFUNDED]: '#6C9CEB',
[RETURN_INNER_STATUS_REFUNDED_FAIL]: '#EF6260',
[RETURN_INNER_STATUS_REFUNDED_SUCCESS]: '#41CC9E',
[RETURN_INNER_STATUS_UNCONFIRMED_FINISHED]: '#6C9CEB',
[RETURN_INNER_STATUS_FINISHED]: '#41CC9E',
};
\ No newline at end of file
......@@ -217,7 +217,7 @@ const DetailInfo: React.FC<DetailInfoProps> = ({
const fetchOuterHistory = (params): Promise<OuterHistoryData> => {
return new Promise((resolve, reject) => {
PublicApi.getAsReturnGoodsPageOuterWorkflowRecord({
PublicApi.getAsReplaceGoodsPageOuterWorkflowRecord({
...params,
dataId: id,
})
......@@ -235,7 +235,7 @@ const DetailInfo: React.FC<DetailInfoProps> = ({
const fetchInnerHistory = (params): Promise<InnerHistoryData> => {
return new Promise((resolve, reject) => {
PublicApi.getAsReturnGoodsPageInnerWorkflowRecord({
PublicApi.getAsReplaceGoodsPageInnerWorkflowRecord({
...params,
dataId: id,
})
......
......@@ -132,7 +132,7 @@ const ExchangePrAddDeliver: React.FC = () => {
onClick={
() =>
history.push(`/memberCenter/tranactionAbility/stockSellStorage/bills/add?relevanceInvoicesId=${record.replaceId}&invoicesTypeId=${DOC_TYPE_EXCHANGE_RETURN_INVOICE}&relevanceInvoices=${DEPENDENT_DOC_EXCHANGE}`)
}
}
>
新增
</Button>
......
......@@ -9,20 +9,6 @@ import { useBusinessEffects } from './useBusinessEffects';
import { useAsyncSelect } from '@/formSchema/effects/useAsyncSelect';
import { PublicApi } from '@/services/api';
// 获取单据类型
const fetchInvoicesType = (): Promise<any[]> => {
return new Promise((resolve, reject) => {
PublicApi.getWarehouseInvoicesTypeAll().then(res => {
if (res.code === 1000) {
resolve(res.data);
}
reject();
}).catch(() => {
reject();
});
});
};
export const createEffects = (context, actions) => {
const { setFieldState } = actions;
......
......@@ -2,7 +2,7 @@
* @Author: XieZhiXiong
* @Date: 2020-11-03 18:30:47
* @LastEditors: XieZhiXiong
* @LastEditTime: 2020-11-19 15:47:21
* @LastEditTime: 2020-12-08 13:51:21
* @Description: 联动逻辑相关
*/
import { Modal } from 'antd';
......
......@@ -10,7 +10,7 @@ import { SaveOutlined, PlusOutlined } from '@ant-design/icons';
import { createFormActions, FormEffectHooks } from '@formily/antd';
import { PublicApi } from '@/services/api';
import { GetAsReplaceGoodsPageReturnedGoodsResponse } from '@/services/AfterServiceApi';
import { normalizeFiledata, FileData, isJSONStr } from '@/utils'
import { normalizeFiledata, FileData, isJSONStr } from '@/utils';
import { PurchaseOrderInsideWorkStateTexts, ORDER_TYPE2 } from '@/constants';
import ReutrnEle from '@/components/ReturnEle';
import StatusTag from '@/components/StatusTag';
......@@ -215,6 +215,7 @@ const ExchangeForm: React.FC<BillsFormProps> = ({
phone: returnGoodsAddress.sendUserTel,
receiverName: returnGoodsAddress.sendUserName,
} : undefined,
deliveryType: returnGoodsAddress.deliveryType,
supplierMember:
supplierName ?
[
......
......@@ -378,7 +378,7 @@ export const addBillSchema: ISchema = {
tab: '退货收货地址',
},
properties: {
MEGA_LAYOUT3: {
MEGA_LAYOUT4: {
type: 'object',
'x-component': 'mega-layout',
'x-component-props': {
......@@ -390,13 +390,22 @@ export const addBillSchema: ISchema = {
deliveryType: {
title: '配送方式',
type: 'string',
default: 1,
enum: DELIVERY_TYPE_ENUM,
enum: DELIVERY_TYPE_ENUM,
'x-component-props': {
placeholder: '请选择',
},
'x-rules': [
{
required: true,
message: '请选择配送方式',
},
],
},
// 退货发货地址
shippingAddress: {
title: '退货发货地址',
type: 'string',
visible: false,
'x-component': 'AddressFormItem',
'x-component-props': {
dataSource: [],
......@@ -412,6 +421,7 @@ export const addBillSchema: ISchema = {
pickupAddress: {
title: '退货自提地址',
type: 'string',
visible: false,
'x-component': 'AddressFormItem',
'x-component-props': {
dataSource: [],
......
......@@ -121,14 +121,20 @@ const DetailInfo: React.FC<DetailInfoProps> = ({
if (!isEdit || !id) {
return;
}
const msg = message.loading({
content: '正在更改',
duration: 0,
});
PublicApi.postAsReplaceGoodsSetNeedReturnGoods({
replaceId: +id,
replaceGoodsId: record.productId,
replaceGoodsId: record.detailId,
isNeed: record.isNeedReturn === 1 ? 0 : 1,
}).then(res => {
if (res.code === 1000) {
getReplaceGoods();
}
}).finally(() => {
msg();
});
};
......@@ -210,7 +216,7 @@ const DetailInfo: React.FC<DetailInfoProps> = ({
{!isEdit ? (
text
) : (
<Switch checked={text} onChange={() => handleReturn(record)} />
<Switch checked={record.isNeedReturn} onChange={() => handleReturn(record)} />
)}
</>
),
......
......@@ -2,7 +2,7 @@
* @Author: XieZhiXiong
* @Date: 2020-11-06 16:30:44
* @LastEditors: XieZhiXiong
* @LastEditTime: 2020-11-17 17:20:43
* @LastEditTime: 2020-12-08 15:56:51
* @Description: 待新增退货发货单
*/
import React, { useState, useRef } from 'react';
......@@ -18,6 +18,12 @@ import { ColumnType } from 'antd/lib/table/interface';
import { PageHeaderWrapper } from '@ant-design/pro-layout';
import { createFormActions } from '@formily/antd';
import { PublicApi } from '@/services/api';
import {
DOC_TYPE_RETURN_INVOICE,
DEPENDENT_DOC_RETURN,
RETURN_INNER_STATUS_NOT_ADDED_RETURN_DELIVERY,
RETURN_INNER_STATUS_UNREVIEWED_RETURN_DELIVERY,
} from '@/constants';
import { useStateFilterSearchLinkageEffect } from '@/formSchema/effects/useFilterSearch';
import { FORM_FILTER_PATH } from '@/formSchema/const';
import EyePreview from '@/components/EyePreview';
......@@ -25,9 +31,9 @@ import NiceForm from '@/components/NiceForm';
import StatusTag from '@/components/StatusTag';
import { listSearchSchema } from './schema';
import {
CREDIT_OUTER_STATUS_TAG_MAP,
CREDIT_INNER_STATUS_BADGE_MAP,
} from '../../contants';
RETURN_OUTER_STATUS_TAG_MAP,
RETURN_INNER_STATUS_BADGE_MAP,
} from '../../constants';
import styles from './index.less';
const { confirm } = Modal;
......@@ -41,9 +47,20 @@ const ReturnPrAddDeliver: React.FC = () => {
confirm({
title: '确认审核操作',
icon: <ExclamationCircleOutlined />,
content: `是否确认审核退货发货单号为${'FH5421039'}的退货发货单?`,
content: `是否确认审核退货发货单号为${record.returnDeliveryNo}的退货发货单?`,
onOk() {
// do something
return new Promise((resolve, reject) => {
PublicApi.postAsReturnGoodsVerifyReturnDeliveryGoods({
dataId: record.returnId,
}).then(res => {
if (res.code === 1000) {
ref.current.reload();
}
resolve(res);
}).catch(err => {
reject(err);
});
});
},
});
};
......@@ -56,7 +73,7 @@ const ReturnPrAddDeliver: React.FC = () => {
render: (text, record) => (
<>
<EyePreview
url={`/memberCenter/afterService/returnApplication/returnPrAddDeliver/detail?id=${record.id}`}
url={`/memberCenter/afterService/returnApplication/returnPrAddDeliver/detail?id=${record.returnId}`}
>
{text}
</EyePreview>
......@@ -99,33 +116,40 @@ const ReturnPrAddDeliver: React.FC = () => {
dataIndex: 'outerStatusName',
align: 'center',
render: (text, record) => (
<StatusTag type="success" title="售后完成" />
<StatusTag type={RETURN_OUTER_STATUS_TAG_MAP[record.outerStatus]} title={text} />
),
},
{
title: '内部状态',
dataIndex: 'innerStatusName',
align: 'center',
render: (text, record) => <Badge color={'#6C9CEB'} text="待确认售后完成" />,
},
render: (text, record) => <Badge color={RETURN_INNER_STATUS_BADGE_MAP[record.innerStatus]} text={text} />,
},
{
title: '操作',
dataIndex: 'option',
align: 'center',
render: (text, record) => (
<>
<Button
type="link"
onClick={() => () => history.push(``)}
>
新增
</Button>
<Button
type="link"
onClick={() => handleVerify(record.id)}
>
审核
</Button>
{record.innerStatus === RETURN_INNER_STATUS_NOT_ADDED_RETURN_DELIVERY && (
<Button
type="link"
onClick={
() =>
history.push(`/memberCenter/tranactionAbility/stockSellStorage/bills/add?relevanceInvoicesId=${record.returnId}&invoicesTypeId=${DOC_TYPE_RETURN_INVOICE}&relevanceInvoices=${DEPENDENT_DOC_RETURN}`)
}
>
新增
</Button>
)}
{record.innerStatus === RETURN_INNER_STATUS_UNREVIEWED_RETURN_DELIVERY && (
<Button
type="link"
onClick={() => handleVerify(record)}
>
审核
</Button>
)}
</>
),
},
......
......@@ -24,9 +24,9 @@ import NiceForm from '@/components/NiceForm';
import StatusTag from '@/components/StatusTag';
import { listSearchSchema } from './schema';
import {
CREDIT_OUTER_STATUS_TAG_MAP,
CREDIT_INNER_STATUS_BADGE_MAP,
} from '../../contants';
RETURN_OUTER_STATUS_TAG_MAP,
RETURN_INNER_STATUS_BADGE_MAP,
} from '../../constants';
import styles from './index.less';
const formActions = createFormActions();
......@@ -42,7 +42,7 @@ const ReturnPrAddLogistics: React.FC = () => {
render: (text, record) => (
<>
<EyePreview
url={`/memberCenter/afterService/returnApplication/returnPrAddLogistics/detail?id=${record.id}`}
url={`/memberCenter/afterService/returnApplication/returnPrAddLogistics/detail?id=${record.returnId}`}
>
{text}
</EyePreview>
......@@ -85,15 +85,15 @@ const ReturnPrAddLogistics: React.FC = () => {
dataIndex: 'outerStatusName',
align: 'center',
render: (text, record) => (
<StatusTag type="success" title="售后完成" />
<StatusTag type={RETURN_OUTER_STATUS_TAG_MAP[record.outerStatus]} title={text} />
),
},
{
title: '内部状态',
dataIndex: 'innerStatusName',
align: 'center',
render: (text, record) => <Badge color={'#6C9CEB'} text="待确认售后完成" />,
},
render: (text, record) => <Badge color={RETURN_INNER_STATUS_BADGE_MAP[record.innerStatus]} text={text} />,
},
{
title: '操作',
dataIndex: 'option',
......
......@@ -25,9 +25,9 @@ import NiceForm from '@/components/NiceForm';
import StatusTag from '@/components/StatusTag';
import { listSearchSchema } from './schema';
import {
CREDIT_OUTER_STATUS_TAG_MAP,
CREDIT_INNER_STATUS_BADGE_MAP,
} from '../../contants';
RETURN_OUTER_STATUS_TAG_MAP,
RETURN_INNER_STATUS_BADGE_MAP,
} from '../../constants';
import styles from './index.less';
const { confirm } = Modal;
......@@ -45,7 +45,7 @@ const ReturnPrConfirmBack: React.FC = () => {
render: (text, record) => (
<>
<EyePreview
url={`/memberCenter/afterService/returnApplication/returnPrConfirmBack/detail?id=${record.id}`}
url={`/memberCenter/afterService/returnApplication/returnPrConfirmBack/detail?id=${record.returnId}`}
>
{text}
</EyePreview>
......@@ -88,15 +88,15 @@ const ReturnPrConfirmBack: React.FC = () => {
dataIndex: 'outerStatusName',
align: 'center',
render: (text, record) => (
<StatusTag type="success" title="售后完成" />
<StatusTag type={RETURN_OUTER_STATUS_TAG_MAP[record.outerStatus]} title={text} />
),
},
{
title: '内部状态',
dataIndex: 'innerStatusName',
align: 'center',
render: (text, record) => <Badge color={'#6C9CEB'} text="待确认售后完成" />,
},
render: (text, record) => <Badge color={RETURN_INNER_STATUS_BADGE_MAP[record.innerStatus]} text={text} />,
},
{
title: '操作',
dataIndex: 'option',
......@@ -105,7 +105,7 @@ const ReturnPrConfirmBack: React.FC = () => {
<>
<Button
type="link"
onClick={() => history.push(`/memberCenter/afterService/returnApplication/returnPrConfirmBack/verify`)}
onClick={() => history.push(`/memberCenter/afterService/returnApplication/returnPrConfirmBack/verify?id=${record.returnId}`)}
>
确认退货回单
</Button>
......
......@@ -35,7 +35,7 @@ const ReturnPrConfirmBackVerify: React.FC = () => {
type="primary"
icon={<FormOutlined />}
loading={submitLoading}
onClick={() => handleSubmit}
onClick={handleSubmit}
>
确认全部退货发货单已收到回单
</Button>
......
......@@ -2,7 +2,7 @@
* @Author: XieZhiXiong
* @Date: 2020-11-06 16:30:44
* @LastEditors: XieZhiXiong
* @LastEditTime: 2020-11-25 15:48:01
* @LastEditTime: 2020-12-07 13:44:16
* @Description: 待新增退货发货单
*/
import React, { useState, useRef } from 'react';
......@@ -25,9 +25,9 @@ import NiceForm from '@/components/NiceForm';
import StatusTag from '@/components/StatusTag';
import { listSearchSchema } from './schema';
import {
CREDIT_OUTER_STATUS_TAG_MAP,
CREDIT_INNER_STATUS_BADGE_MAP,
} from '../../contants';
RETURN_OUTER_STATUS_TAG_MAP,
RETURN_INNER_STATUS_BADGE_MAP,
} from '../../constants';
import styles from './index.less';
const { confirm } = Modal;
......@@ -45,7 +45,7 @@ const ReturnPrConfirmFinish: React.FC = () => {
render: (text, record) => (
<>
<EyePreview
url={`/memberCenter/afterService/returnApplication/returnPrConfirmFinish/detail?id=${record.id}`}
url={`/memberCenter/afterService/returnApplication/returnPrConfirmFinish/detail?id=${record.returnId}`}
>
{text}
</EyePreview>
......@@ -77,15 +77,15 @@ const ReturnPrConfirmFinish: React.FC = () => {
dataIndex: 'outerStatusName',
align: 'center',
render: (text, record) => (
<StatusTag type="success" title="售后完成" />
<StatusTag type={RETURN_OUTER_STATUS_TAG_MAP[record.outerStatus]} title={text} />
),
},
{
title: '内部状态',
dataIndex: 'innerStatusName',
align: 'center',
render: (text, record) => <Badge color={'#6C9CEB'} text="待确认售后完成" />,
},
render: (text, record) => <Badge color={RETURN_INNER_STATUS_BADGE_MAP[record.innerStatus]} text={text} />,
},
{
title: '操作',
dataIndex: 'option',
......@@ -94,7 +94,7 @@ const ReturnPrConfirmFinish: React.FC = () => {
<>
<Button
type="link"
onClick={() => history.push(`/memberCenter/afterService/returnApplication/returnPrConfirmFinish/verify`)}
onClick={() => history.push(`/memberCenter/afterService/returnApplication/returnPrConfirmFinish/verify?id=${record.returnId}`)}
>
确认售后完成
</Button>
......
......@@ -2,7 +2,7 @@
* @Author: XieZhiXiong
* @Date: 2020-11-06 16:30:44
* @LastEditors: XieZhiXiong
* @LastEditTime: 2020-11-11 10:30:24
* @LastEditTime: 2020-12-08 16:07:01
* @Description: 待新增退货发货单
*/
import React, { useState, useRef } from 'react';
......@@ -25,9 +25,9 @@ import NiceForm from '@/components/NiceForm';
import StatusTag from '@/components/StatusTag';
import { listSearchSchema } from './schema';
import {
CREDIT_OUTER_STATUS_TAG_MAP,
CREDIT_INNER_STATUS_BADGE_MAP,
} from '../../contants';
RETURN_OUTER_STATUS_TAG_MAP,
RETURN_INNER_STATUS_BADGE_MAP,
} from '../../constants';
import styles from './index.less';
const { confirm } = Modal;
......@@ -45,7 +45,7 @@ const ReturnPrConfirmResult: React.FC = () => {
render: (text, record) => (
<>
<EyePreview
url={`/memberCenter/afterService/returnApplication/returnPrConfirmResult/detail?id=${record.id}`}
url={`/memberCenter/afterService/returnApplication/returnPrConfirmResult/detail?id=${record.returnId}`}
>
{text}
</EyePreview>
......@@ -82,15 +82,15 @@ const ReturnPrConfirmResult: React.FC = () => {
dataIndex: 'outerStatusName',
align: 'center',
render: (text, record) => (
<StatusTag type="success" title="售后完成" />
<StatusTag type={RETURN_OUTER_STATUS_TAG_MAP[record.outerStatus]} title={text} />
),
},
{
title: '内部状态',
dataIndex: 'innerStatusName',
align: 'center',
render: (text, record) => <Badge color={'#6C9CEB'} text="待确认售后完成" />,
},
render: (text, record) => <Badge color={RETURN_INNER_STATUS_BADGE_MAP[record.innerStatus]} text={text} />,
},
{
title: '操作',
dataIndex: 'option',
......@@ -99,7 +99,7 @@ const ReturnPrConfirmResult: React.FC = () => {
<>
<Button
type="link"
onClick={() => history.push(`/memberCenter/afterService/returnApplication/returnPrConfirmResult/verify`)}
onClick={() => history.push(`/memberCenter/afterService/returnApplication/returnPrConfirmResult/verify?id=${record.returnId}`)}
>
确认
</Button>
......
......@@ -3,7 +3,7 @@ import { usePageStatus } from '@/hooks/usePageStatus';
import DetailInfo from '../components/DetailInfo';
const ReturnPrDeliverDetail: React.FC = () => {
const { id, creditId } = usePageStatus();
const { id } = usePageStatus();
return (
<DetailInfo
......
......@@ -25,9 +25,9 @@ import NiceForm from '@/components/NiceForm';
import StatusTag from '@/components/StatusTag';
import { listSearchSchema } from './schema';
import {
CREDIT_OUTER_STATUS_TAG_MAP,
CREDIT_INNER_STATUS_BADGE_MAP,
} from '../../contants';
RETURN_OUTER_STATUS_TAG_MAP,
RETURN_INNER_STATUS_BADGE_MAP,
} from '../../constants';
import styles from './index.less';
const { confirm } = Modal;
......@@ -45,7 +45,7 @@ const ReturnPrDeliver: React.FC = () => {
render: (text, record) => (
<>
<EyePreview
url={`/memberCenter/afterService/returnApplication/returnPrDeliver/detail?id=${record.id}`}
url={`/memberCenter/afterService/returnApplication/returnPrDeliver/detail?id=${record.returnId}`}
>
{text}
</EyePreview>
......@@ -69,7 +69,7 @@ const ReturnPrDeliver: React.FC = () => {
},
{
title: '单据时间',
dataIndex: 'created',
dataIndex: 'applyTime',
align: 'center',
},
{
......@@ -88,15 +88,15 @@ const ReturnPrDeliver: React.FC = () => {
dataIndex: 'outerStatusName',
align: 'center',
render: (text, record) => (
<StatusTag type="success" title="售后完成" />
<StatusTag type={RETURN_OUTER_STATUS_TAG_MAP[record.outerStatus]} title={text} />
),
},
{
title: '内部状态',
dataIndex: 'innerStatusName',
align: 'center',
render: (text, record) => <Badge color={'#6C9CEB'} text="待确认售后完成" />,
},
render: (text, record) => <Badge color={RETURN_INNER_STATUS_BADGE_MAP[record.innerStatus]} text={text} />,
},
{
title: '操作',
dataIndex: 'option',
......@@ -105,7 +105,7 @@ const ReturnPrDeliver: React.FC = () => {
<>
<Button
type="link"
onClick={() => history.push(`/memberCenter/afterService/returnApplication/returnPrDeliver/verify`)}
onClick={() => history.push(`/memberCenter/afterService/returnApplication/returnPrDeliver/verify?id=${record.returnId}`)}
>
退货发货
</Button>
......
......@@ -8,7 +8,7 @@ import ManualDeliveryModal from '../../components/ManualDeliveryModal';
import DetailInfo from '../components/DetailInfo';
const ReturnPrDeliverVerify: React.FC = () => {
const { id, creditId } = usePageStatus();
const { id } = usePageStatus();
const [modalVisible, setModalVisible] = useState(false);
const [submitLoading, setSubmitLoading] = useState(false);
......
......@@ -9,22 +9,17 @@ import { useBusinessEffects } from './useBusinessEffects';
import { useAsyncSelect } from '@/formSchema/effects/useAsyncSelect';
import { PublicApi } from '@/services/api';
// 获取单据类型
const fetchInvoicesType = (): Promise<any[]> => {
return new Promise((resolve, reject) => {
PublicApi.getWarehouseInvoicesTypeAll().then(res => {
if (res.code === 1000) {
resolve(res.data);
}
reject();
}).catch(() => {
reject();
});
});
};
export const createEffects = (context, actions) => {
const { setFieldState } = actions;
useBusinessEffects(context, actions);
// useAsyncSelect('invoicesTypeId', fetchInvoicesType, ['name', 'id']);
// 获取发货地址
PublicApi.getLogisticsSelectListShipperAddress().then(res => {
if (res.code === 1000) {
setFieldState('*(shippingAddress,pickupAddress)', state => {
state.props['x-component-props'].dataSource = res.data;
});
}
});
};
\ No newline at end of file
......@@ -2,17 +2,11 @@
* @Author: XieZhiXiong
* @Date: 2020-11-03 18:30:47
* @LastEditors: XieZhiXiong
* @LastEditTime: 2020-11-17 16:13:43
* @LastEditTime: 2020-12-08 13:48:59
* @Description: 联动逻辑相关
*/
import { Modal } from 'antd';
import { FormEffectHooks, FormPath } from '@formily/antd';
import { useLinkageUtils } from '@/utils/formEffectUtils';
import { useStateFilterSearchLinkageEffect } from '@/formSchema/effects/useFilterSearch';
import {
} from '@/constants';
import { PublicApi } from '@/services/api';
const {
onFieldInputChange$,
......@@ -32,11 +26,26 @@ export const useBusinessEffects = (context, actions) => {
onFieldValueChange$('deliveryType').subscribe(fieldState => {
const { name, value } = fieldState;
// 如果选中 自提
if (value === 2) {
linkage.show('shippingAddress');
} else {
linkage.hide('shippingAddress');
}
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
};
});
}
\ No newline at end of file
......@@ -265,7 +265,7 @@ export const addBillSchema: ISchema = {
title: '采购单价',
'x-component': 'Text',
},
costPrice3: {
purchaseAmount: {
type: 'string',
title: '采购金额',
'x-component': 'Text',
......@@ -280,23 +280,13 @@ export const addBillSchema: ISchema = {
title: '退货数量',
'x-component': 'Text',
},
costPrice6: {
returnAmount: {
type: 'string',
title: '退款金额',
'x-component': 'Text',
},
// 退货理由,不用于展示,只用于收集值
returnReason: {
type: 'string',
display: false,
},
// 不用于展示,只用于收集值
id: {
type: 'string',
display: false,
},
// 不用于展示,只用于收集值
orderId: {
},
// 其他数据,不用于展示,只用于收集值
extraData: {
type: 'string',
display: false,
},
......@@ -353,7 +343,7 @@ export const addBillSchema: ISchema = {
tab: '退货收货地址',
},
properties: {
MEGA_LAYOUT3: {
MEGA_LAYOUT4: {
type: 'object',
'x-component': 'mega-layout',
'x-component-props': {
......@@ -365,40 +355,48 @@ export const addBillSchema: ISchema = {
deliveryType: {
title: '配送方式',
type: 'string',
default: 1,
enum: DELIVERY_TYPE_ENUM,
'x-component-props': {
placeholder: '请选择',
},
'x-rules': [
{
required: true,
message: '请选择配送方式',
},
],
},
// 退货货地址
// 退货货地址
shippingAddress: {
title: '退货货地址',
title: '退货货地址',
type: 'string',
visible: false,
'x-component': 'AddressFormItem',
'x-component-props': {
dataSource: [
{
id: 1,
receiverName: '收件人1',
phone: '18128131762',
fullAddress: '不告诉你1',
},
],
dataSource: [],
},
'x-rules': [
{
required: true,
message: '请选择退货发货地址',
},
],
},
// 退货发货地址
deliveryAddress: {
title: '退货发货地址',
// 退货自提地址
pickupAddress: {
title: '退货自提地址',
type: 'string',
visible: false,
'x-component': 'AddressFormItem',
'x-component-props': {
dataSource: [
{
id: 1,
receiverName: '收件人1',
phone: '18128131762',
fullAddress: '不告诉你1',
},
],
dataSource: [],
},
'x-rules': [
{
required: true,
message: '请选择退货自提地址',
},
],
},
},
},
......
......@@ -2,7 +2,7 @@
* @Author: XieZhiXiong
* @Date: 2020-11-06 10:13:18
* @LastEditors: XieZhiXiong
* @LastEditTime: 2020-11-25 15:41:45
* @LastEditTime: 2020-12-08 13:54:58
* @Description: 待提交退货申请单
*/
import React, { useState, useRef } from 'react';
......@@ -13,6 +13,7 @@ import {
Button,
Popconfirm,
Space,
message,
} from 'antd';
import { history } from 'umi';
import {
......@@ -32,9 +33,9 @@ import NiceForm from '@/components/NiceForm';
import StatusTag from '@/components/StatusTag';
import { listSearchSchema } from './schema';
import {
CREDIT_OUTER_STATUS_TAG_MAP,
CREDIT_INNER_STATUS_BADGE_MAP,
} from '../../contants';
RETURN_OUTER_STATUS_TAG_MAP,
RETURN_INNER_STATUS_BADGE_MAP,
} from '../../constants';
import styles from './index.less';
const formActions = createFormActions();
......@@ -42,10 +43,38 @@ const formActions = createFormActions();
const ReturnPrSubmit: React.FC = () => {
const ref = useRef<any>({});
const handleDelete = () => {
const handleDelete = record => {
const msg = message.loading({
content: '正在删除',
duration: 0,
});
PublicApi.postAsReturnGoodsDelete({
dataId: record.returnId,
}).then(res => {
if (res.code === 1000) {
ref.current.reload();
}
}).finally(() => {
msg();
});
};
const handleSubmit = record => {
const msg = message.loading({
content: '正在提交',
duration: 0,
});
PublicApi.postAsReturnGoodsSubmit({
dataId: record.returnId,
}).then(res => {
if (res.code === 1000) {
ref.current.reload();
}
}).finally(() => {
msg();
});
};
const defaultColumns: ColumnType<any>[] = [
{
title: '申请单号',
......@@ -54,7 +83,7 @@ const ReturnPrSubmit: React.FC = () => {
render: (text, record) => (
<>
<EyePreview
url={`/memberCenter/afterService/returnApplication/returnPrSubmit/detail?id=${record.id}`}
url={`/memberCenter/afterService/returnApplication/returnPrSubmit/detail?id=${record.returnId}`}
>
{text}
</EyePreview>
......@@ -86,15 +115,15 @@ const ReturnPrSubmit: React.FC = () => {
dataIndex: 'outerStatusName',
align: 'center',
render: (text, record) => (
<StatusTag type="success" title="售后完成" />
<StatusTag type={RETURN_OUTER_STATUS_TAG_MAP[record.outerStatus]} title={text} />
),
},
{
title: '内部状态',
dataIndex: 'innerStatusName',
align: 'center',
render: (text, record) => <Badge color={'#6C9CEB'} text="待确认售后完成" />,
},
render: (text, record) => <Badge color={RETURN_INNER_STATUS_BADGE_MAP[record.innerStatus]} text={text} />,
},
{
title: '操作',
dataIndex: 'option',
......@@ -103,19 +132,19 @@ const ReturnPrSubmit: React.FC = () => {
<>
<Button
type="link"
onClick={() => {}}
onClick={() => handleSubmit(record)}
>
提交
</Button>
<Button
type="link"
onClick={() => history.push(`/memberCenter/afterService/returnApplication/returnPrSubmit/edit`)}
onClick={() => history.push(`/memberCenter/afterService/returnApplication/returnPrSubmit/edit?id=${record.returnId}`)}
>
编辑
</Button>
<Button
type="link"
onClick={() => handleDelete()}
onClick={() => handleDelete(record)}
danger
>
删除
......
......@@ -2,7 +2,7 @@
* @Author: XieZhiXiong
* @Date: 2020-11-05 14:25:41
* @LastEditors: XieZhiXiong
* @LastEditTime: 2020-11-25 15:39:32
* @LastEditTime: 2020-12-08 14:24:55
* @Description: 退货申请单查询
*/
import React, { useState, useRef } from 'react';
......@@ -25,9 +25,9 @@ import NiceForm from '@/components/NiceForm';
import StatusTag from '@/components/StatusTag';
import { listSearchSchema } from './schema';
import {
CREDIT_OUTER_STATUS_TAG_MAP,
CREDIT_INNER_STATUS_BADGE_MAP,
} from '../../contants';
RETURN_OUTER_STATUS_TAG_MAP,
RETURN_INNER_STATUS_BADGE_MAP,
} from '../../constants';
import styles from './index.less';
const formActions = createFormActions();
......@@ -43,7 +43,7 @@ const ReturnQuery: React.FC = () => {
render: (text, record) => (
<>
<EyePreview
url={`/memberCenter/afterService/returnApplication/returnQuery/detail?id=${record.id}`}
url={`/memberCenter/afterService/returnApplication/returnQuery/detail?id=${record.returnId}`}
>
{text}
</EyePreview>
......@@ -77,7 +77,7 @@ const ReturnQuery: React.FC = () => {
filters: [],
onFilter: (value, record) => record.outerStatus === value,
render: (text, record) => (
<StatusTag type="success" title="售后完成" />
<StatusTag type={RETURN_OUTER_STATUS_TAG_MAP[record.outerStatus]} title={text} />
),
},
{
......@@ -86,7 +86,7 @@ const ReturnQuery: React.FC = () => {
align: 'center',
filters: [],
onFilter: (value, record) => record.innerStatus === value,
render: (text, record) => <Badge color={'#6C9CEB'} text="待确认售后完成" />,
render: (text, record) => <Badge color={RETURN_INNER_STATUS_BADGE_MAP[record.innerStatus]} text={text} />,
},
];
......
......@@ -24,9 +24,9 @@ import NiceForm from '@/components/NiceForm';
import StatusTag from '@/components/StatusTag';
import { listSearchSchema } from './schema';
import {
CREDIT_OUTER_STATUS_TAG_MAP,
CREDIT_INNER_STATUS_BADGE_MAP,
} from '../../contants';
RETURN_OUTER_STATUS_TAG_MAP,
RETURN_INNER_STATUS_BADGE_MAP,
} from '../../constants';
import styles from './index.less';
const formActions = createFormActions();
......@@ -74,15 +74,15 @@ const ReturnPr1: React.FC = () => {
dataIndex: 'outerStatusName',
align: 'center',
render: (text, record) => (
<StatusTag type="success" title="售后完成" />
<StatusTag type={RETURN_OUTER_STATUS_TAG_MAP[record.outerStatus]} title={text} />
),
},
{
title: '内部状态',
dataIndex: 'innerStatusName',
align: 'center',
render: (text, record) => <Badge color={'#6C9CEB'} text="待确认售后完成" />,
},
render: (text, record) => <Badge color={RETURN_INNER_STATUS_BADGE_MAP[record.innerStatus]} text={text} />,
},
{
title: '操作',
dataIndex: 'option',
......
......@@ -41,7 +41,7 @@ const ReturnPr1Verify: React.FC = () => {
<DetailInfo
id={id}
target="/memberCenter/payandSettle/creditApplication/quotaFormQuery/detail"
headExtra={(
headExtra={() => (
<Button
type="primary"
icon={<FormOutlined />}
......
......@@ -24,9 +24,9 @@ import NiceForm from '@/components/NiceForm';
import StatusTag from '@/components/StatusTag';
import { listSearchSchema } from './schema';
import {
CREDIT_OUTER_STATUS_TAG_MAP,
CREDIT_INNER_STATUS_BADGE_MAP,
} from '../../contants';
RETURN_OUTER_STATUS_TAG_MAP,
RETURN_INNER_STATUS_BADGE_MAP,
} from '../../constants';
import styles from './index.less';
const formActions = createFormActions();
......@@ -74,15 +74,15 @@ const ReturnPr2: React.FC = () => {
dataIndex: 'outerStatusName',
align: 'center',
render: (text, record) => (
<StatusTag type="success" title="售后完成" />
<StatusTag type={RETURN_OUTER_STATUS_TAG_MAP[record.outerStatus]} title={text} />
),
},
{
title: '内部状态',
dataIndex: 'innerStatusName',
align: 'center',
render: (text, record) => <Badge color={'#6C9CEB'} text="待确认售后完成" />,
},
render: (text, record) => <Badge color={RETURN_INNER_STATUS_BADGE_MAP[record.innerStatus]} text={text} />,
},
{
title: '操作',
dataIndex: 'option',
......
......@@ -2,7 +2,7 @@
* @Author: XieZhiXiong
* @Date: 2020-11-04 17:22:07
* @LastEditors: XieZhiXiong
* @LastEditTime: 2020-11-09 17:27:30
* @LastEditTime: 2020-12-08 14:53:31
* @Description:
*/
import React, { useState } from 'react';
......@@ -41,7 +41,7 @@ const ReturnPr2Verify: React.FC = () => {
<DetailInfo
id={id}
target="/memberCenter/payandSettle/creditApplication/quotaFormQuery/detail"
headExtra={(
headExtra={() => (
<Button
type="primary"
icon={<FormOutlined />}
......
......@@ -2,7 +2,7 @@
* @Author: XieZhiXiong
* @Date: 2020-11-06 16:30:44
* @LastEditors: XieZhiXiong
* @LastEditTime: 2020-11-09 17:59:16
* @LastEditTime: 2020-12-08 17:19:58
* @Description: 待新增退货发货单
*/
import React, { useState, useRef } from 'react';
......@@ -18,6 +18,12 @@ import { ColumnType } from 'antd/lib/table/interface';
import { PageHeaderWrapper } from '@ant-design/pro-layout';
import { createFormActions } from '@formily/antd';
import { PublicApi } from '@/services/api';
import {
DOC_TYPE_RETURN_RECEIPT,
DEPENDENT_DOC_RETURN,
RETURN_INNER_STATUS_NOT_ADDED_RETURN_STORAGE,
RETURN_INNER_STATUS_UNREVIEWED_RETURN_STORAGE,
} from '@/constants';
import { useStateFilterSearchLinkageEffect } from '@/formSchema/effects/useFilterSearch';
import { FORM_FILTER_PATH } from '@/formSchema/const';
import EyePreview from '@/components/EyePreview';
......@@ -25,9 +31,9 @@ import NiceForm from '@/components/NiceForm';
import StatusTag from '@/components/StatusTag';
import { listSearchSchema } from './schema';
import {
CREDIT_OUTER_STATUS_TAG_MAP,
CREDIT_INNER_STATUS_BADGE_MAP,
} from '../../contants';
RETURN_OUTER_STATUS_TAG_MAP,
RETURN_INNER_STATUS_BADGE_MAP,
} from '../../constants';
import styles from './index.less';
const { confirm } = Modal;
......@@ -41,9 +47,20 @@ const ReturnPrAddWarehousing: React.FC = () => {
confirm({
title: '确认审核操作',
icon: <ExclamationCircleOutlined />,
content: `是否确认审核退货入库单号为${'FH5421039'}的退货入库单?`,
content: `是否确认审核退货入库单号为${record.returnStorageNo}的退货入库单?`,
onOk() {
// do something
return new Promise((resolve, reject) => {
PublicApi.postAsReturnGoodsVerifyReturnGoodsStorage({
dataId: record.returnId,
}).then(res => {
if (res.code === 1000) {
ref.current.reload();
}
resolve(res);
}).catch(err => {
reject(err);
});
});
},
});
};
......@@ -65,32 +82,32 @@ const ReturnPrAddWarehousing: React.FC = () => {
},
{
title: '申请单摘要',
dataIndex: 'parentMemberName',
dataIndex: 'applyAbstract',
align: 'center',
},
{
title: '采购会员',
dataIndex: 'supplier',
dataIndex: 'consumerName',
align: 'center',
},
{
title: '退款金额',
dataIndex: 'returnAmount',
dataIndex: 'refundAmount',
align: 'center',
},
{
title: '单据时间',
dataIndex: 'created',
dataIndex: 'applyTime',
align: 'center',
},
{
title: '退货批次',
dataIndex: 'batch',
dataIndex: 'returnBatch',
align: 'center',
},
{
title: '退货发货单号',
dataIndex: 'deliverNo',
title: '退货入库单号',
dataIndex: 'returnStorageNo',
align: 'center',
render: text => <a>{text}</a>,
},
......@@ -99,33 +116,40 @@ const ReturnPrAddWarehousing: React.FC = () => {
dataIndex: 'outerStatusName',
align: 'center',
render: (text, record) => (
<StatusTag type="success" title="售后完成" />
<StatusTag type={RETURN_OUTER_STATUS_TAG_MAP[record.outerStatus]} title={text} />
),
},
{
title: '内部状态',
dataIndex: 'innerStatusName',
align: 'center',
render: (text, record) => <Badge color={'#6C9CEB'} text="待确认售后完成" />,
},
render: (text, record) => <Badge color={RETURN_INNER_STATUS_BADGE_MAP[record.innerStatus]} text={text} />,
},
{
title: '操作',
dataIndex: 'option',
align: 'center',
render: (text, record) => (
<>
<Button
type="link"
onClick={() => () => history.push(``)}
>
新增
</Button>
<Button
type="link"
onClick={() => handleVerify(record.id)}
>
审核
</Button>
{record.innerStatus === RETURN_INNER_STATUS_NOT_ADDED_RETURN_STORAGE && (
<Button
type="link"
onClick={
() =>
history.push(`/memberCenter/tranactionAbility/stockSellStorage/bills/add?relevanceInvoicesId=${record.returnId}&invoicesTypeId=${DOC_TYPE_RETURN_RECEIPT}&relevanceInvoices=${DEPENDENT_DOC_RETURN}`)
}
>
新增
</Button>
)}
{record.innerStatus === RETURN_INNER_STATUS_UNREVIEWED_RETURN_STORAGE && (
<Button
type="link"
onClick={() => handleVerify(record)}
>
审核
</Button>
)}
</>
),
},
......@@ -135,32 +159,21 @@ const ReturnPrAddWarehousing: React.FC = () => {
const fetchListData = (params: any) => {
const { startTime, endTime, ...rest } = params;
// return new Promise((resolve, reject) => {
// PublicApi.getPayCreditApplyPageCreditApply({
// startTime: startTime ? moment(startTime).format('YYYY-MM-DD') : null,
// endTime: startTime ? moment(startTime).format('YYYY-MM-DD') : null,
// ...rest,
// })
// .then(res => {
// if (res.code === 1000) {
// resolve(res.data);
// }
// reject();
// })
// .catch(() => {
// reject();
// });
// });
return Promise.resolve({
data: [
{
id: 1,
applyNo: '123',
parentMemberName: '申请单摘要',
created: '2020-11-03 11:46:00',
},
],
total: 10,
return new Promise((resolve, reject) => {
PublicApi.getAsReturnGoodsPageToBeAddReturnGoodsStorage({
startTime: startTime ? moment(startTime).format('YYYY-MM-DD') : null,
endTime: startTime ? moment(startTime).format('YYYY-MM-DD') : null,
...rest,
})
.then(res => {
if (res.code === 1000) {
resolve(res.data);
}
reject();
})
.catch(() => {
reject();
});
});
};
......
......@@ -35,14 +35,14 @@ export const listSearchSchema: ISchema = {
columns: 6,
},
properties: {
abstract: {
applyAbstract: {
type: 'string',
'x-component-props': {
placeholder: '申请单摘要',
allowClear: true,
},
},
supplier: {
consumerName: {
type: 'string',
'x-component-props': {
placeholder: '采购会员',
......
......@@ -24,9 +24,9 @@ import NiceForm from '@/components/NiceForm';
import StatusTag from '@/components/StatusTag';
import { listSearchSchema } from './schema';
import {
CREDIT_OUTER_STATUS_TAG_MAP,
CREDIT_INNER_STATUS_BADGE_MAP,
} from '../../contants';
RETURN_OUTER_STATUS_TAG_MAP,
RETURN_INNER_STATUS_BADGE_MAP,
} from '../../constants';
import styles from './index.less';
const formActions = createFormActions();
......@@ -74,15 +74,15 @@ const ReturnPrConfirm: React.FC = () => {
dataIndex: 'outerStatusName',
align: 'center',
render: (text, record) => (
<StatusTag type="success" title="售后完成" />
<StatusTag type={RETURN_OUTER_STATUS_TAG_MAP[record.outerStatus]} title={text} />
),
},
{
title: '内部状态',
dataIndex: 'innerStatusName',
align: 'center',
render: (text, record) => <Badge color={'#6C9CEB'} text="待确认售后完成" />,
},
render: (text, record) => <Badge color={RETURN_INNER_STATUS_BADGE_MAP[record.innerStatus]} text={text} />,
},
{
title: '操作',
dataIndex: 'option',
......
......@@ -2,7 +2,7 @@
* @Author: XieZhiXiong
* @Date: 2020-11-04 17:22:07
* @LastEditors: XieZhiXiong
* @LastEditTime: 2020-11-09 17:27:30
* @LastEditTime: 2020-12-08 14:53:59
* @Description:
*/
import React, { useState } from 'react';
......@@ -41,7 +41,7 @@ const ReturnPrConfirmVerify: React.FC = () => {
<DetailInfo
id={id}
target="/memberCenter/payandSettle/creditApplication/quotaFormQuery/detail"
headExtra={(
headExtra={() => (
<Button
type="primary"
icon={<FormOutlined />}
......
......@@ -2,7 +2,7 @@
* @Author: XieZhiXiong
* @Date: 2020-11-06 16:30:44
* @LastEditors: XieZhiXiong
* @LastEditTime: 2020-11-18 11:02:22
* @LastEditTime: 2020-12-08 17:22:57
* @Description: 待新增退货入库单
*/
import React, { useState, useRef } from 'react';
......@@ -25,9 +25,9 @@ import NiceForm from '@/components/NiceForm';
import StatusTag from '@/components/StatusTag';
import { listSearchSchema } from './schema';
import {
CREDIT_OUTER_STATUS_TAG_MAP,
CREDIT_INNER_STATUS_BADGE_MAP,
} from '../../contants';
RETURN_OUTER_STATUS_TAG_MAP,
RETURN_INNER_STATUS_BADGE_MAP,
} from '../../constants';
import styles from './index.less';
const { confirm } = Modal;
......@@ -54,32 +54,32 @@ const ReturnPrReceived: React.FC = () => {
},
{
title: '申请单摘要',
dataIndex: 'parentMemberName',
dataIndex: 'applyAbstract',
align: 'center',
},
{
title: '采购会员',
dataIndex: 'supplier',
dataIndex: 'consumerName',
align: 'center',
},
{
title: '退款金额',
dataIndex: 'returnAmount',
dataIndex: 'refundAmount',
align: 'center',
},
{
title: '单据时间',
dataIndex: 'created',
dataIndex: 'applyTime',
align: 'center',
},
{
title: '退货批次',
dataIndex: 'batch',
dataIndex: 'returnBatch',
align: 'center',
},
{
title: '退货发货单号',
dataIndex: 'deliverNo',
title: '退货入库单号',
dataIndex: 'returnStorageNo',
align: 'center',
render: text => <a>{text}</a>,
},
......@@ -88,15 +88,15 @@ const ReturnPrReceived: React.FC = () => {
dataIndex: 'outerStatusName',
align: 'center',
render: (text, record) => (
<StatusTag type="success" title="售后完成" />
<StatusTag type={RETURN_OUTER_STATUS_TAG_MAP[record.outerStatus]} title={text} />
),
},
{
title: '内部状态',
dataIndex: 'innerStatusName',
align: 'center',
render: (text, record) => <Badge color={'#6C9CEB'} text="待确认售后完成" />,
},
render: (text, record) => <Badge color={RETURN_INNER_STATUS_BADGE_MAP[record.innerStatus]} text={text} />,
},
{
title: '操作',
dataIndex: 'option',
......@@ -118,32 +118,21 @@ const ReturnPrReceived: React.FC = () => {
const fetchListData = (params: any) => {
const { startTime, endTime, ...rest } = params;
// return new Promise((resolve, reject) => {
// PublicApi.getPayCreditApplyPageCreditApply({
// startTime: startTime ? moment(startTime).format('YYYY-MM-DD') : null,
// endTime: startTime ? moment(startTime).format('YYYY-MM-DD') : null,
// ...rest,
// })
// .then(res => {
// if (res.code === 1000) {
// resolve(res.data);
// }
// reject();
// })
// .catch(() => {
// reject();
// });
// });
return Promise.resolve({
data: [
{
id: 1,
applyNo: '123',
parentMemberName: '申请单摘要',
created: '2020-11-03 11:46:00',
},
],
total: 10,
return new Promise((resolve, reject) => {
PublicApi.getAsReturnGoodsPageToBeReturnReceiveGoods({
startTime: startTime ? moment(startTime).format('YYYY-MM-DD') : null,
endTime: startTime ? moment(startTime).format('YYYY-MM-DD') : null,
...rest,
})
.then(res => {
if (res.code === 1000) {
resolve(res.data);
}
reject();
})
.catch(() => {
reject();
});
});
};
......
......@@ -35,28 +35,26 @@ export const listSearchSchema: ISchema = {
columns: 6,
},
properties: {
abstract: {
applyAbstract: {
type: 'string',
'x-component-props': {
placeholder: '申请单摘要',
allowClear: true,
},
},
'[startTime, endTime]': {
consumerName: {
type: 'string',
default: '',
'x-component': 'dateSelect',
'x-component-props': {
placeholder: '单据时间(全部)',
placeholder: '采购会员',
allowClear: true,
},
},
supplier: {
'[startTime, endTime]': {
type: 'string',
default: undefined,
enum: [],
default: '',
'x-component': 'dateSelect',
'x-component-props': {
placeholder: '采购会员(全部)',
placeholder: '单据时间(全部)',
allowClear: true,
},
},
......
......@@ -38,7 +38,7 @@ const ReturnPrReceivedVerify: React.FC = () => {
<>
<DetailInfo
id={id}
headExtra={(
headExtra={() => (
<Button
type="default"
icon={<SettingOutlined />}
......
......@@ -2,7 +2,7 @@
* @Author: XieZhiXiong
* @Date: 2020-11-05 14:25:41
* @LastEditors: XieZhiXiong
* @LastEditTime: 2020-11-25 15:56:53
* @LastEditTime: 2020-12-08 17:32:59
* @Description: 退货申请单查询
*/
import React, { useState, useRef } from 'react';
......@@ -24,9 +24,9 @@ import NiceForm from '@/components/NiceForm';
import StatusTag from '@/components/StatusTag';
import { listSearchSchema } from './schema';
import {
CREDIT_OUTER_STATUS_TAG_MAP,
CREDIT_INNER_STATUS_BADGE_MAP,
} from '../../contants';
RETURN_OUTER_STATUS_TAG_MAP,
RETURN_INNER_STATUS_BADGE_MAP,
} from '../../constants';
import styles from './index.less';
const formActions = createFormActions();
......@@ -51,22 +51,22 @@ const ReturnPrReturn: React.FC = () => {
},
{
title: '申请单摘要',
dataIndex: 'parentMemberName',
dataIndex: 'applyAbstract',
align: 'center',
},
{
title: '采购会员',
dataIndex: 'supplier',
dataIndex: 'consumerName',
align: 'center',
},
{
title: '退款金额',
dataIndex: 'returnAmount',
dataIndex: 'refundAmount',
align: 'center',
},
{
title: '单据时间',
dataIndex: 'created',
dataIndex: 'applyTime',
align: 'center',
},
{
......@@ -79,15 +79,15 @@ const ReturnPrReturn: React.FC = () => {
dataIndex: 'outerStatusName',
align: 'center',
render: (text, record) => (
<StatusTag type="success" title="售后完成" />
<StatusTag type={RETURN_OUTER_STATUS_TAG_MAP[record.outerStatus]} title={text} />
),
},
{
title: '内部状态',
dataIndex: 'innerStatusName',
align: 'center',
render: (text, record) => <Badge color={'#6C9CEB'} text="待确认售后完成" />,
},
render: (text, record) => <Badge color={RETURN_INNER_STATUS_BADGE_MAP[record.innerStatus]} text={text} />,
},
{
title: '操作',
dataIndex: 'option',
......@@ -109,32 +109,21 @@ const ReturnPrReturn: React.FC = () => {
const fetchListData = (params: any) => {
const { startTime, endTime, ...rest } = params;
// return new Promise((resolve, reject) => {
// PublicApi.getPayCreditApplyPageCreditApply({
// startTime: startTime ? moment(startTime).format('YYYY-MM-DD') : null,
// endTime: startTime ? moment(startTime).format('YYYY-MM-DD') : null,
// ...rest,
// })
// .then(res => {
// if (res.code === 1000) {
// resolve(res.data);
// }
// reject();
// })
// .catch(() => {
// reject();
// });
// });
return Promise.resolve({
data: [
{
id: 1,
applyNo: '123',
parentMemberName: '申请单摘要',
created: '2020-11-03 11:46:00',
},
],
total: 10,
return new Promise((resolve, reject) => {
PublicApi.getAsReturnGoodsPageToBeRefund({
startTime: startTime ? moment(startTime).format('YYYY-MM-DD') : null,
endTime: startTime ? moment(startTime).format('YYYY-MM-DD') : null,
...rest,
})
.then(res => {
if (res.code === 1000) {
resolve(res.data);
}
reject();
})
.catch(() => {
reject();
});
});
};
......
......@@ -35,28 +35,26 @@ export const listSearchSchema: ISchema = {
columns: 6,
},
properties: {
abstract: {
applyAbstract: {
type: 'string',
'x-component-props': {
placeholder: '申请单摘要',
allowClear: true,
},
},
'[startTime, endTime]': {
consumerName: {
type: 'string',
default: '',
'x-component': 'dateSelect',
'x-component-props': {
placeholder: '单据时间(全部)',
placeholder: '采购会员',
allowClear: true,
},
},
supplier: {
'[startTime, endTime]': {
type: 'string',
default: undefined,
enum: [],
default: '',
'x-component': 'dateSelect',
'x-component-props': {
placeholder: '采购会员(全部)',
placeholder: '单据时间(全部)',
allowClear: true,
},
},
......
......@@ -2,7 +2,7 @@
* @Author: XieZhiXiong
* @Date: 2020-11-04 17:22:07
* @LastEditors: XieZhiXiong
* @LastEditTime: 2020-11-09 17:27:30
* @LastEditTime: 2020-12-08 18:34:46
* @Description:
*/
import React, { useState } from 'react';
......@@ -12,15 +12,26 @@ import { PublicApi } from '@/services/api';
import { FormOutlined } from '@ant-design/icons';
import { usePageStatus } from '@/hooks/usePageStatus';
import DetailInfo from '../components/DetailInfo';
import VerifyModal from '../../components/VerifyModal';
const ReturnPrReturnVerify: React.FC = () => {
const { id, creditId } = usePageStatus();
const [visible, setVisible] = useState(false);
const [confirmLoading, setConfirmLoading] = useState(false);
const [submitLoading, setSubmitLoading] = useState(false);
const handleSubmit = values => {
if (!id) {
return;
}
// setSubmitLoading(true);
// PublicApi.postAsReturnGoodsConfirmAllRefund({
// dataId: id,
// }).then(res => {
// if (res.code === 1000) {
// history.goBack();
// }
// }).finally(() => {
// setSubmitLoading(false);
// });
};
return (
......@@ -28,23 +39,16 @@ const ReturnPrReturnVerify: React.FC = () => {
<DetailInfo
id={id}
target="/memberCenter/payandSettle/creditApplication/quotaFormQuery/detail"
headExtra={(
headExtra={() => (
<Button
type="primary"
icon={<FormOutlined />}
onClick={() => setVisible(true)}
loading={submitLoading}
>
单据审核
确认本单已完成所有退款
</Button>
)}
/>
<VerifyModal
visible={visible}
confirmLoading={confirmLoading}
onSubmit={handleSubmit}
onVisible={() => setVisible(false)}
/>
</>
);
};
......
......@@ -2,7 +2,7 @@
* @Author: XieZhiXiong
* @Date: 2020-11-05 14:25:41
* @LastEditors: XieZhiXiong
* @LastEditTime: 2020-11-11 15:28:20
* @LastEditTime: 2020-12-08 17:10:49
* @Description: 退货申请单查询
*/
import React, { useState, useRef } from 'react';
......@@ -24,9 +24,9 @@ import NiceForm from '@/components/NiceForm';
import StatusTag from '@/components/StatusTag';
import { listSearchSchema } from './schema';
import {
CREDIT_OUTER_STATUS_TAG_MAP,
CREDIT_INNER_STATUS_BADGE_MAP,
} from '../../contants';
RETURN_OUTER_STATUS_TAG_MAP,
RETURN_INNER_STATUS_BADGE_MAP,
} from '../../constants';
import styles from './index.less';
const formActions = createFormActions();
......@@ -74,15 +74,15 @@ const ReturnPrSubmit: React.FC = () => {
dataIndex: 'outerStatusName',
align: 'center',
render: (text, record) => (
<StatusTag type="success" title="售后完成" />
<StatusTag type={RETURN_OUTER_STATUS_TAG_MAP[record.outerStatus]} title={text} />
),
},
{
title: '内部状态',
dataIndex: 'innerStatusName',
align: 'center',
render: (text, record) => <Badge color={'#6C9CEB'} text="待确认售后完成" />,
},
render: (text, record) => <Badge color={RETURN_INNER_STATUS_BADGE_MAP[record.innerStatus]} text={text} />,
},
{
title: '操作',
dataIndex: 'option',
......
......@@ -2,11 +2,11 @@
* @Author: XieZhiXiong
* @Date: 2020-11-04 17:22:07
* @LastEditors: XieZhiXiong
* @LastEditTime: 2020-11-09 17:03:54
* @LastEditTime: 2020-12-08 14:51:53
* @Description:
*/
import React, { useState } from 'react';
import { Button } from 'antd';
import { Button, message } from 'antd';
import { history } from 'umi';
import { PublicApi } from '@/services/api';
import { FormOutlined } from '@ant-design/icons';
......@@ -14,10 +14,30 @@ import { usePageStatus } from '@/hooks/usePageStatus';
import DetailInfo from '../components/DetailInfo';
import VerifyModal from '../../components/VerifyModal';
interface ReturnAddress {
/**
* 收货地址id
*/
receiveId: number;
/**
* 收货地址
*/
receiveAddress: string;
/**
* 收货者名称
*/
receiveUserName: string;
/**
* 收货者电话
*/
receiveUserTel: string;
};
const ReturnPrSubmitVerify: React.FC = () => {
const { id } = usePageStatus();
const [visible, setVisible] = useState(false);
const [confirmLoading, setConfirmLoading] = useState(false);
const [returnAddress, setReturnAddress] = useState<ReturnAddress>(null);
const handleSubmit = values => {
if (!id) {
......@@ -27,6 +47,7 @@ const ReturnPrSubmitVerify: React.FC = () => {
PublicApi.postAsReturnGoodsSubmitVerify({
applyId: id,
...values,
...returnAddress,
}).then(res => {
if (res.code === 1000) {
history.goBack();
......@@ -35,17 +56,35 @@ const ReturnPrSubmitVerify: React.FC = () => {
setConfirmLoading(false);
});
};
const handleSubmitVerify = (info, returnAddress) => {
// 退货方式为 物流,并且退货收货地址为空时
if (
info.returnGoodsAddress.deliveryType === 1 &&
!returnAddress
) {
message.error('请选择退货收货地址');
return;
}
setReturnAddress({
receiveId: returnAddress.id,
receiveAddress: returnAddress.receiveAddress,
receiveUserName: returnAddress.receiveUserName,
receiveUserTel: returnAddress.receiveUserTel,
});
setVisible(true);
};
return (
<>
<DetailInfo
id={id}
target="/memberCenter/payandSettle/creditApplication/quotaFormQuery/detail"
headExtra={(
headExtra={(info, returnAddress) => (
<Button
type="primary"
icon={<FormOutlined />}
onClick={() => setVisible(true)}
onClick={() => handleSubmitVerify(info, returnAddress)}
>
提交审核
</Button>
......
......@@ -25,9 +25,9 @@ import NiceForm from '@/components/NiceForm';
import StatusTag from '@/components/StatusTag';
import { listSearchSchema } from './schema';
import {
CREDIT_OUTER_STATUS_TAG_MAP,
CREDIT_INNER_STATUS_BADGE_MAP,
} from '../../contants';
RETURN_OUTER_STATUS_TAG_MAP,
RETURN_INNER_STATUS_BADGE_MAP,
} from '../../constants';
import styles from './index.less';
const formActions = createFormActions();
......@@ -77,7 +77,7 @@ const ReturnQuery: React.FC = () => {
filters: [],
onFilter: (value, record) => record.outerStatus === value,
render: (text, record) => (
<StatusTag type="success" title="售后完成" />
<StatusTag type={RETURN_OUTER_STATUS_TAG_MAP[record.outerStatus]} title={text} />
),
},
{
......@@ -86,7 +86,7 @@ const ReturnQuery: React.FC = () => {
align: 'center',
filters: [],
onFilter: (value, record) => record.innerStatus === value,
render: (text, record) => <Badge color={'#6C9CEB'} text="待确认售后完成" />,
render: (text, record) => <Badge color={RETURN_INNER_STATUS_BADGE_MAP[record.innerStatus]} text={text} />,
},
];
......@@ -114,36 +114,36 @@ const ReturnQuery: React.FC = () => {
// 初始化高级筛选选项
const fetchSearchItems = async () => {
// const res = await PublicApi.getPayCreditApplyPageItemsByConsumer();
const res = await PublicApi.getAsReturnGoodsPageItems();
// if (res.code === 1000) {
// const { data } = res;
// const {
// outerStatusList = [],
// innerStatusList = [],
// } = data;
if (res.code === 1000) {
const { data } = res;
const {
outerStatusList = [],
innerStatusList = [],
} = data;
// const newColumns = columns.slice();
const newColumns = columns.slice();
// // filter 0 过滤掉全部选项
// coverColFiltersItem(
// newColumns,
// 'outerStatusName',
// outerStatusList.map(item => ({ text: item.name, value: item.status })).filter(item => item.value),
// );
// coverColFiltersItem(
// newColumns,
// 'innerStatusName',
// innerStatusList.map(item => ({ text: item.name, value: item.status })).filter(item => item.value),
// );
// filter 0 过滤掉全部选项
coverColFiltersItem(
newColumns,
'outerStatusName',
outerStatusList.map(item => ({ text: item.name, value: item.status })).filter(item => item.value),
);
coverColFiltersItem(
newColumns,
'innerStatusName',
innerStatusList.map(item => ({ text: item.name, value: item.status })).filter(item => item.value),
);
// setColumns(newColumns);
setColumns(newColumns);
// return {
// outerStatus: outerStatusList.map(item => ({ label: item.name, value: item.status })).filter(item => item.value),
// innerStatus: innerStatusList.map(item => ({ label: item.name, value: item.status })).filter(item => item.value),
// };
// }
return {
outerStatus: outerStatusList.map(item => ({ label: item.name, value: item.status })).filter(item => item.value),
innerStatus: innerStatusList.map(item => ({ label: item.name, value: item.status })).filter(item => item.value),
};
}
return {};
};
......
......@@ -2,7 +2,7 @@
* @Author: XieZhiXiong
* @Date: 2020-09-29 10:03:06
* @LastEditors: XieZhiXiong
* @LastEditTime: 2020-11-05 14:28:08
* @LastEditTime: 2020-12-08 17:25:43
* @Description:
*/
import { ISchema } from '@formily/antd';
......
......@@ -615,41 +615,61 @@ export const useBusinessEffects = (context, actions) => {
case DOC_TYPE_EXCHANGE_INVOICE:
// 换货入库单
case DOC_TYPE_EXCHANGE_RECEIPT: {
switch (relevanceInvoicesVal) {
// 换货申请单
case DEPENDENT_DOC_EXCHANGE: {
// 获取明细数据 商品 数据
PublicApi.getAsReplaceGoodsPageReturnedGoods({
replaceId: first.id,
current: `${1}`,
pageSize: `${99999}`,
}).then(res => {
if (res.code !== 1000) {
return;
}
const {
data = [],
} = res.data;
const goodOptions = data.map(item => ({
label: `${item.productName}---订单号:${item.orderNo}`,
value: item.productId,
}));
setFieldState('invoicesDetailsRequests.*.product', state => {
FormPath.setIn(state, 'originAsyncData', data.map(item => ({
...item,
price: item.purchasePrice, // 与采购入库单、销售发货单统一
})));
FormPath.setIn(state, 'props.enum', goodOptions);
});
});
break;
// 获取明细数据 商品 数据
PublicApi.getAsReplaceGoodsPageReturnedGoods({
replaceId: first.id,
current: `${1}`,
pageSize: `${99999}`,
}).then(res => {
if (res.code !== 1000) {
return;
}
// 退货申请单
case DEPENDENT_DOC_RETURN: {
break;
const {
data = [],
} = res.data;
const goodOptions = data.map(item => ({
label: `${item.productName}---订单号:${item.orderNo}`,
value: item.productId,
}));
setFieldState('invoicesDetailsRequests.*.product', state => {
FormPath.setIn(state, 'originAsyncData', data.map(item => ({
...item,
price: item.purchasePrice, // 与采购入库单、销售发货单统一
})));
FormPath.setIn(state, 'props.enum', goodOptions);
});
});
break;
}
// 退货发货单
case DOC_TYPE_RETURN_INVOICE:
// 退货入库单
case DOC_TYPE_RETURN_RECEIPT: {
// 获取明细数据 商品 数据
PublicApi.getAsReturnGoodsPageReturnedGoods({
returnId: first.id,
current: `${1}`,
pageSize: `${99999}`,
}).then(res => {
if (res.code !== 1000) {
return;
}
};
const {
data = [],
} = res.data;
const goodOptions = data.map(item => ({
label: `${item.productName}---订单号:${item.orderNo}`,
value: item.productId,
}));
setFieldState('invoicesDetailsRequests.*.product', state => {
FormPath.setIn(state, 'originAsyncData', data.map(item => ({
...item,
price: item.purchasePrice, // 与采购入库单、销售发货单统一
})));
FormPath.setIn(state, 'props.enum', goodOptions);
});
});
break;
}
......@@ -849,34 +869,47 @@ export const useBusinessEffects = (context, actions) => {
case DOC_TYPE_EXCHANGE_INVOICE:
// 换货入库单
case DOC_TYPE_EXCHANGE_RECEIPT: {
switch (relevanceInvoicesVal) {
// 换货申请单
case DEPENDENT_DOC_EXCHANGE: {
// 设置单据数量,取换货数量
setFieldState(
FormPath.transform(name, /\d/, $1 => {
return `invoicesDetailsRequests.${$1}.productCount`
}),
state => {
state.value = current.replaceCount;
}
);
setFieldState(
FormPath.transform(name, /\d/, $1 => {
return `invoicesDetailsRequests.${$1}.amount`
}),
state => {
state.value = current.price ? `¥${(current.replaceCount * current.price).toFixed(2)}` : null;
}
);
break;
// 设置单据数量,取换货数量
setFieldState(
FormPath.transform(name, /\d/, $1 => {
return `invoicesDetailsRequests.${$1}.productCount`
}),
state => {
state.value = current.replaceCount;
}
// 退货申请单
case DEPENDENT_DOC_RETURN: {
break;
);
setFieldState(
FormPath.transform(name, /\d/, $1 => {
return `invoicesDetailsRequests.${$1}.amount`
}),
state => {
state.value = current.price ? `¥${(current.replaceCount * current.price).toFixed(2)}` : null;
}
};
);
break;
}
// 退货发货单
case DOC_TYPE_RETURN_INVOICE:
// 退货入库单
case DOC_TYPE_RETURN_RECEIPT: {
// 设置单据数量,取退货数量
setFieldState(
FormPath.transform(name, /\d/, $1 => {
return `invoicesDetailsRequests.${$1}.productCount`
}),
state => {
state.value = current.returnCount;
}
);
setFieldState(
FormPath.transform(name, /\d/, $1 => {
return `invoicesDetailsRequests.${$1}.amount`
}),
state => {
state.value = current.price ? `¥${(current.returnCount * current.price).toFixed(2)}` : null;
}
);
break;
}
......@@ -977,31 +1010,41 @@ export const useBusinessEffects = (context, actions) => {
case DOC_TYPE_EXCHANGE_INVOICE:
// 换货入库单
case DOC_TYPE_EXCHANGE_RECEIPT: {
switch (relevanceInvoicesVal) {
// 换货申请单
case DEPENDENT_DOC_EXCHANGE: {
if (+value > current.replaceCount) {
Modal.destroyAll();
Modal.confirm({
title: '提示',
content: '单据数量已超过换货数量',
okText: '确认',
cancelText: '取消',
cancelButtonProps: {
style: {
display: 'none',
},
},
});
}
break;
}
// 退货申请单
case DEPENDENT_DOC_RETURN: {
break;
}
};
if (+value > current.replaceCount) {
Modal.destroyAll();
Modal.confirm({
title: '提示',
content: '单据数量已超过换货数量',
okText: '确认',
cancelText: '取消',
cancelButtonProps: {
style: {
display: 'none',
},
},
});
}
break;
}
// 退货发货单
case DOC_TYPE_RETURN_INVOICE:
// 退货入库单
case DOC_TYPE_RETURN_RECEIPT: {
if (+value > current.returnCount) {
Modal.destroyAll();
Modal.confirm({
title: '提示',
content: '单据数量已超过退货数量',
okText: '确认',
cancelText: '取消',
cancelButtonProps: {
style: {
display: 'none',
},
},
});
}
break;
}
......
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