Commit 06cdb868 authored by FE-安焕焕's avatar FE-安焕焕 👣

修改逻辑

parent 31511129
...@@ -128,6 +128,12 @@ export default { ...@@ -128,6 +128,12 @@ export default {
icon: 'smile', icon: 'smile',
component: './AfterSaleManage/Pending', component: './AfterSaleManage/Pending',
}, },
{
path: '/passAudit',
name: 'passAudit',
icon: 'smile',
component: './AfterSaleManage/PassAudit',
},
{ {
component: './404', component: './404',
}, },
......
import React, { useState, useRef } from 'react';
import { Button, notification, Popconfirm } from 'antd';
import ProTable from '@ant-design/pro-table';
import { PageHeaderWrapper } from '@ant-design/pro-layout';
import { searchList, shopCheck, jdInfo, trackInfo } from '../services';
import { columnPassAudit } from '../data';
import RejectModal from '../components/rejectModal';
import DetailTable from '../components/detailTable';
import ProofsModal from '../components/proofsModal';
import LogisticsCom from '../../orderManage/pendingDeliveryOrder/components/LogisticsCom';
export default () => {
const table = useRef();
const [visible, setVisible] = useState(false);
const [detailVisible, setDetailVisible] = useState(false);
const [detailInfo, setDetailInfo] = useState([]);
const [proofsVisible, setProofsVisible] = useState(false);
const [proofsData, setProofsData] = useState([]);
const [serviceNoInfo, setServiceNoInfo] = useState({});
const [LogisticsComList, setLogisticsComList] = useState({});
const [LogisticsComModalVisible, handleComModalVisible] = useState(false);
const viewDetail = async ({ serviceNo }) => {
const data = await jdInfo({ serviceNo });
setDetailInfo(data?.skuQuantity || []);
setDetailVisible(true);
};
const closeModal = isReload => {
if (isReload) {
// eslint-disable-next-line no-unused-expressions
table.current?.reload?.();
}
setVisible(false);
setDetailVisible(false);
setProofsVisible(false);
handleComModalVisible(false);
};
const reject = async ({ serviceNo }) => {
setServiceNoInfo(serviceNo);
setVisible(true);
};
const viewProofs = proofs => {
if (!proofs) {
notification.warning({ message: '该订单没有凭证' });
return;
}
setProofsData(proofs.split(','));
setProofsVisible(true);
};
const refund = async ({ serviceNo }) => {
const data = await shopCheck({
serviceNo,
auditResult: 1,
});
if (data.businessCode === '0000') {
notification.success({ message: '操作成功' });
closeModal(true);
}
};
const handleCom = async ({ companyCode, logisticsNo }) => {
const tempObj = {
expressCompanyCode: companyCode,
expressCompanyName: companyCode,
deliveryNo: logisticsNo,
detailList: [],
key: Date.now(),
};
const data = await trackInfo({ companyCode, logisticsNo });
if (!data) {
notification.info({ message: '暂无物流信息' });
return;
}
tempObj.expressCompanyName = data?.logisticsName || tempObj.expressCompanyName;
tempObj.deliveryNo = data?.logisticsBillNo || tempObj.deliveryNo;
if (data.logisticsList?.length) {
data.logisticsList.forEach(v => {
tempObj.detailList = [...tempObj.detailList, ...v.detailList];
});
}
handleComModalVisible(true);
setLogisticsComList(tempObj);
};
const columns = [
...columnPassAudit,
{
title: '售后凭证',
dataIndex: 'proofs',
hideInSearch: true,
order: 4,
render: proofs => <a onClick={() => viewProofs(proofs)}>查看凭证</a>,
},
{
title: '操作',
hideInSearch: true,
width: 450,
render: (_, r) => [
<Popconfirm
title="确定允许退款?"
onConfirm={() => refund(r)}
okText="确认"
cancelText="取消"
disabled={!r.showRefund || !r.showRefunded}
>
<Button
key="link1"
className="mr10"
type="primary"
disabled={!r.showRefund || !r.showRefunded}
>
{r.showRefunded ? '已退款' : '允许退款'}
</Button>
</Popconfirm>,
<Button
key="link"
onClick={() => reject(r)}
type="primary"
className="mr10"
disabled={!r.showRefuse}
>
驳回
</Button>,
<Button key="link" onClick={() => viewDetail(r)} type="primary" className="mr10">
订单详情
</Button>,
<Button
key="link"
onClick={() => handleCom(r)}
type="primary"
className="mr10"
disabled={!r.showLogistics}
>
查看物流
</Button>,
],
},
];
return (
<PageHeaderWrapper>
<ProTable
columns={columns}
request={params => searchList(params, 2)}
rowKey="orderNo"
pagination={{
pagesSize: 20,
}}
bordered
actionRef={table}
scroll={{ x: '100%' }}
search={{
collapsed: false,
}}
/>
<RejectModal visible={visible} onCancel={closeModal} serviceNo={serviceNoInfo} />
<DetailTable visible={detailVisible} onCancel={closeModal} dataSource={detailInfo} />
<ProofsModal visible={proofsVisible} onCancel={closeModal} data={proofsData} />
<LogisticsCom
onSubmit={closeModal}
onCancel={closeModal}
modalVisible={LogisticsComModalVisible}
value={LogisticsComList}
key={LogisticsComList.key}
/>
</PageHeaderWrapper>
);
};
export const appealType = {
1: '已申诉',
0: '未申诉',
};
import React, { useState, useRef } from 'react'; import React, { useState, useRef } from 'react';
import { Button, notification } from 'antd'; import { notification, Button } from 'antd';
import ProTable from '@ant-design/pro-table'; import ProTable from '@ant-design/pro-table';
import { PageHeaderWrapper } from '@ant-design/pro-layout'; import { PageHeaderWrapper } from '@ant-design/pro-layout';
import { searchList, auditInfoApi, jdInfo } from './services'; import { searchList, auditInfoApi, jdInfo } from '../services';
import { appealType } from './data'; import { columnSticData, appealType } from '../data';
import AuditModal from './auditModal'; import AuditModal from '../components/auditModal';
import DetailTable from './detailTable'; import DetailTable from '../components/detailTable';
import ProofsModal from './proofsModal'; import ProofsModal from '../components/proofsModal';
// 售后状态和售后类型,售后原因枚举,
export default () => { export default () => {
const table = useRef(); const table = useRef();
const [visible, setVisible] = useState(false); const [visible, setVisible] = useState(false);
...@@ -44,84 +43,29 @@ export default () => { ...@@ -44,84 +43,29 @@ export default () => {
setProofsData(proofs.split(',')); setProofsData(proofs.split(','));
setProofsVisible(true); setProofsVisible(true);
}; };
const viewAppeal = r => {
console.log(r);
};
const columns = [ const columns = [
{ ...columnSticData,
title: '订单ID',
dataIndex: 'orderNo',
hideInSearch: true,
},
{
title: '售后单ID',
dataIndex: 'serviceNo',
hideInSearch: true,
},
{
title: '收货人姓名',
dataIndex: 'receiverName',
},
{
title: '收货人手机号',
dataIndex: 'receiverPhone',
},
{
title: '收货人地址',
dataIndex: 'receiveAddress',
hideInSearch: true,
},
{
title: '售后类型',
dataIndex: 'serviceType',
hideInSearch: true,
valueEnum: {
1: '退款不退货',
2: '退货退款',
},
},
{
title: '售后原因',
dataIndex: 'serviceReason',
hideInSearch: true,
},
{ {
title: '售后凭证', title: '售后凭证',
dataIndex: 'proofs', dataIndex: 'proofs',
hideInSearch: true, hideInSearch: true,
order: 4,
render: proofs => <a onClick={() => viewProofs(proofs)}>查看凭证</a>, render: proofs => <a onClick={() => viewProofs(proofs)}>查看凭证</a>,
}, },
{
title: '售后发生时间',
dataIndex: 'serviceTime',
hideInSearch: true,
},
{
title: '超时时间',
dataIndex: 'overTime',
hideInSearch: true,
},
{
title: '是否催办',
dataIndex: 'reminderFlag',
hideInSearch: true,
valueEnum: {
1: '',
2: '',
},
},
{
title: '是否同意售后',
dataIndex: 'isAgree',
hideInSearch: true,
},
{
title: '拒绝原因',
dataIndex: 'refuseReason',
hideInSearch: true,
},
{ {
title: '售后申诉', title: '售后申诉',
dataIndex: 'appealFlag', dataIndex: 'appealFlag',
valueEnum: appealType, valueEnum: appealType,
hideInSearch: true, hideInSearch: true,
render: (appealFlag, r) => {
if (appealFlag === 1) {
return <a onClick={() => viewAppeal(r)}>{appealFlag}</a>;
}
return <div> 未申诉</div>;
},
}, },
{ {
title: '操作', title: '操作',
...@@ -141,7 +85,7 @@ export default () => { ...@@ -141,7 +85,7 @@ export default () => {
<PageHeaderWrapper> <PageHeaderWrapper>
<ProTable <ProTable
columns={columns} columns={columns}
request={searchList} request={params => searchList(params, 1)}
rowKey="orderNo" rowKey="orderNo"
pagination={{ pagination={{
pagesSize: 20, pagesSize: 20,
......
import React from 'react'; import React from 'react';
import { Modal, Form, Input, TreeSelect, notification } from 'antd'; import { Modal, Form, Input, TreeSelect, notification } from 'antd';
import { shopAudit } from './services'; import { shopAudit } from '../services';
const FormItem = Form.Item; const FormItem = Form.Item;
const { TextArea } = Input; const { TextArea } = Input;
...@@ -130,7 +130,13 @@ const AuditModal = props => { ...@@ -130,7 +130,13 @@ const AuditModal = props => {
message: '请填写拒绝原因!', message: '请填写拒绝原因!',
}, },
], ],
})(<TextArea placeholder="请填写拒绝原因" allowClear />)} })(
<TextArea
placeholder="请填写拒绝原因"
allowClear
autoSize={{ minRows: 3, maxRows: 6 }}
/>,
)}
</FormItem> </FormItem>
)} )}
</Form> </Form>
......
import React from 'react'; import React from 'react';
import { Modal } from 'antd'; import { Modal } from 'antd';
import style from './styles.less'; import style from '../styles.less';
export default props => { export default props => {
const { visible, onCancel, data } = props; const { visible, onCancel, data } = props;
......
import React from 'react';
import { Modal, Form, Input, notification } from 'antd';
import { shopCheck } from '../services';
const FormItem = Form.Item;
const { TextArea } = Input;
const RejectModal = props => {
const {
visible,
onCancel,
form: { getFieldDecorator, validateFields, resetFields },
serviceNo = null,
} = props;
const handleCancel = isSuccess => {
resetFields();
onCancel(isSuccess);
};
const handleOk = () => {
validateFields(async (error, fieldsValue) => {
if (!error) {
const data = await shopCheck({
...fieldsValue,
serviceNo,
auditResult: 2,
});
if (data.code === '0000') {
notification.success({ message: '操作成功' });
handleCancel(true);
}
}
});
};
const layout = {
labelCol: { span: 6 },
wrapperCol: { span: 16 },
};
return (
<Modal title="驳回" visible={visible} onOk={() => handleOk()} onCancel={() => handleCancel()}>
<Form {...layout} name="formData">
<FormItem label="原因">
{getFieldDecorator('refuseDesc', {
rules: [
{
required: true,
message: '请填写原因!',
},
],
})(
<TextArea placeholder="请填写原因" allowClear autoSize={{ minRows: 3, maxRows: 6 }} />,
)}
</FormItem>
</Form>
</Modal>
);
};
export default Form.create()(RejectModal);
export const appealType = {
1: '已申诉',
0: '未申诉',
};
export const columnSticData = [
{
title: '订单ID',
dataIndex: 'orderNo',
hideInSearch: true,
},
{
title: '售后单ID',
dataIndex: 'serviceNo',
hideInSearch: true,
},
{
title: '收货人姓名',
dataIndex: 'receiverName',
},
{
title: '收货人手机号',
dataIndex: 'receiverPhone',
},
{
title: '收货人地址',
dataIndex: 'receiveAddress',
hideInSearch: true,
},
{
title: '售后类型',
dataIndex: 'serviceType',
hideInSearch: true,
valueEnum: {
1: '退款不退货',
2: '退货退款',
},
},
{
title: '售后原因',
dataIndex: 'serviceReason',
hideInSearch: true,
},
{
title: '售后发生时间',
dataIndex: 'serviceTime',
hideInSearch: true,
},
{
title: '超时时间',
dataIndex: 'overTime',
hideInSearch: true,
},
{
title: '是否催办',
dataIndex: 'reminderFlag',
hideInSearch: true,
valueEnum: {
1: '',
2: '',
},
},
{
title: '是否同意售后',
dataIndex: 'isAgree',
hideInSearch: true,
},
{
title: '拒绝原因',
dataIndex: 'refuseReason',
hideInSearch: true,
},
];
export const columnPassAudit = [
...columnSticData,
{
title: '商家退货地址',
dataIndex: 'merchantAddress',
hideInSearch: true,
},
{
title: '退回物流',
dataIndex: 'expressCompanyName',
hideInSearch: true,
},
{
title: '退回物流单号',
dataIndex: 'deliveryNo',
hideInSearch: true,
},
{
title: '售后状态',
dataIndex: 'serviceStatus',
hideInSearch: true,
},
];
import request from '@/utils/request'; import request from '@/utils/request';
import config from '../../../../config/env.config'; import config from '../../../config/env.config';
let { kdspApi } = config; let { kdspApi } = config;
kdspApi = 'http://yapi.quantgroups.com/mock/351'; kdspApi = 'http://yapi.quantgroups.com/mock/351';
// 分页查询所有数据 // 分页查询所有数据
export async function searchList(params) { export async function searchList(params, queryStatus) {
const param = { const param = {
...params, ...params,
pageNo: params.current, pageNo: params.current,
queryStatus,
}; };
const data = await request.post('/api/kdsp/op/afs/shop/list', { const data = await request.post('/api/kdsp/op/afs/shop/list', {
data: param, data: param,
...@@ -48,3 +49,22 @@ export async function auditInfoApi(serviceNo) { ...@@ -48,3 +49,22 @@ export async function auditInfoApi(serviceNo) {
prefix: kdspApi, prefix: kdspApi,
}); });
} }
// 审核核检
export async function shopCheck(params) {
return request.post('/api/kdsp/op/afs/shop/check', {
params,
prefix: kdspApi,
});
}
// 查询物流信息
export async function trackInfo(params) {
const data = await request.get('/api/kdsp/logistics/kd100/track-list', {
params,
prefix: kdspApi,
});
if (data.businessCode === '0000') {
return data.data;
}
return {};
}
...@@ -13,7 +13,11 @@ const LogisticsCom = props => { ...@@ -13,7 +13,11 @@ const LogisticsCom = props => {
return ( return (
<Modal <Modal
destroyOnClose destroyOnClose
title={`${result?.expressCompanyName}-${result?.deliveryNo}`} title={`${
result?.expressCompanyName
? `${result?.expressCompanyName}-${result?.deliveryNo}`
: '物流信息'
}`}
visible={modalVisible} visible={modalVisible}
onCancel={() => onCancel()} onCancel={() => onCancel()}
onOk={() => onCancel()} onOk={() => onCancel()}
......
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