Commit 31d64090 authored by XieZhiXiong's avatar XieZhiXiong

基本完成售后维护相关静态

parent 802a503f
......@@ -11,7 +11,7 @@ import ExchangeHandleRoute from './exchangeHandleRoute'
import ReturnedRoute from './returnedRoute'
import ReturnedHandleRoute from './returnHandleRoute'
import RepairRoute from './repairRoute'
import RepairHandleRoute from './repairHandleRoute'
import RepairManageRoute from './repairManageRoute'
const AfterServiceRoute = {
path: '/memberCenter/afterService',
......@@ -23,7 +23,7 @@ const AfterServiceRoute = {
ReturnedRoute,
ReturnedHandleRoute,
RepairRoute,
RepairHandleRoute
RepairManageRoute,
]
}
......
/*
* 维修处理路由
* @Author: ghua
* @Date: 2020-10-29 11:18:10
* @Last Modified by: ghua
* @Last Modified time: 2020-10-29 11:18:10
*/
import { RouterChild } from '../../utils/index';
const route: RouterChild = {
// 维修处理
path: '/memberCenter/afterService/handleRepair',
name: 'handleRepair',
routes: [
{
// 维修申请单查询
path: '/memberCenter/afterService/handleRepair/orderList',
name: 'orderList',
},
{
// 待提交审核维修申请单
path: '/memberCenter/afterService/handleRepair/waitSubmitExamineOrder',
name: 'waitSubmitExamineOrder',
},
{
// 待审核维修申请单(一级)
path: '/memberCenter/afterService/handleRepair/waitExamineLevelOne',
name: 'waitExamineLevelOne',
},
{
// 待审核维修申请单(二级)
path: '/memberCenter/afterService/handleRepair/waitExamineLevelTwo',
name: 'waitExamineLevelTwo',
},
{
// 待确认维修申请单
path: '/memberCenter/afterService/handleRepair/waitConfirmOrder',
name: 'waitConfirmOrder',
},
]
}
export default route;
\ No newline at end of file
/*
* 维修处理路由
* @Author: ghua
* @Date: 2020-10-29 11:18:10
* @Last Modified by: ghua
* @Last Modified time: 2020-10-29 11:18:10
*/
import { RouterChild } from '../../utils/index';
// 维修处理
const route: RouterChild = {
path: '/memberCenter/afterService/repairManage',
name: 'repairManage',
routes: [
// 维修申请单查询
{
path: '/memberCenter/afterService/repairManage/repairQuery',
name: 'repairQuery',
component: '@/pages/afterService/repairManage/repairQuery/index',
},
// 维修申请单查询-详情
{
path: '/memberCenter/afterService/repairManage/repairQuery/detail',
name: 'repairQueryDetail',
component: '@/pages/afterService/repairManage/repairQuery/detail',
hideInMenu: true,
noMargin: true,
},
// 待提交审核维修申请单
{
path: '/memberCenter/afterService/repairManage/repairPrSubmit',
name: 'repairPrSubmit',
component: '@/pages/afterService/repairManage/repairPrSubmit/index',
},
// 待提交审核维修申请单-详情
{
path: '/memberCenter/afterService/repairManage/repairPrSubmit/detail',
name: 'repairPrSubmitDetail',
component: '@/pages/afterService/repairManage/repairPrSubmit/detail',
hideInMenu: true,
noMargin: true,
},
// 待提交审核维修申请单-审核
{
path: '/memberCenter/afterService/repairManage/repairPrSubmit/verify',
name: 'verifyRepairPrSubmit',
component: '@/pages/afterService/repairManage/repairPrSubmit/verify',
hideInMenu: true,
noMargin: true,
},
// 待审核维修申请单(一级)
{
path: '/memberCenter/afterService/repairManage/repairPr1',
name: 'repairPr1',
component: '@/pages/afterService/repairManage/repairPr1/index',
},
// 待审核维修申请单(一级)-详情
{
path: '/memberCenter/afterService/repairManage/repairPr1/detail',
name: 'repairPr1Detail',
component: '@/pages/afterService/repairManage/repairPr1/detail',
hideInMenu: true,
noMargin: true,
},
// 待审核维修申请单(一级)-审核
{
path: '/memberCenter/afterService/repairManage/repairPr1/verify',
name: 'verifyRepairPr1',
component: '@/pages/afterService/repairManage/repairPr1/verify',
hideInMenu: true,
noMargin: true,
},
// 待审核维修申请单(二级)
{
path: '/memberCenter/afterService/repairManage/repairPr2',
name: 'repairPr2',
component: '@/pages/afterService/repairManage/repairPr2/index',
},
// 待审核维修申请单(二级)-详情
{
path: '/memberCenter/afterService/repairManage/repairPr2/detail',
name: 'repairPr2Detail',
component: '@/pages/afterService/repairManage/repairPr2/detail',
hideInMenu: true,
noMargin: true,
},
// 待审核维修申请单(二级)-审核
{
path: '/memberCenter/afterService/repairManage/repairPr2/verify',
name: 'verifyRepairPr2',
component: '@/pages/afterService/repairManage/repairPr2/verify',
hideInMenu: true,
noMargin: true,
},
// 待确认维修申请单
{
path: '/memberCenter/afterService/repairManage/repairPrConfirm',
name: 'repairPrConfirm',
component: '@/pages/afterService/repairManage/repairPrConfirm/index',
},
// 待确认维修申请单-详情
{
path: '/memberCenter/afterService/repairManage/repairPrConfirm/detail',
name: 'repairPrConfirmDetail',
component: '@/pages/afterService/repairManage/repairPrConfirm/detail',
hideInMenu: true,
noMargin: true,
},
// 待确认维修申请单-审核
{
path: '/memberCenter/afterService/repairManage/repairPrConfirm/verify',
name: 'verifyRepairPrConfirm',
component: '@/pages/afterService/repairManage/repairPrConfirm/verify',
hideInMenu: true,
noMargin: true,
},
]
}
export default route;
\ No newline at end of file
......@@ -51,6 +51,23 @@ const route: RouterChild = {
{
path: '/memberCenter/afterService/repairApplication/repairPrFinished',
name: 'repairPrFinished',
component: '@/pages/afterService/repairApplication/repairPrFinished/index',
},
// 待确认售后完成-详情
{
path: '/memberCenter/afterService/repairApplication/repairPrFinished/detail',
name: 'repairPrFinishedDetail',
component: '@/pages/afterService/repairApplication/repairPrFinished/detail',
hideInMenu: true,
noMargin: true,
},
// 待确认售后完成-审核
{
path: '/memberCenter/afterService/repairApplication/repairPrFinished/verify',
name: 'verifyRepairPrFinished',
component: '@/pages/afterService/repairApplication/repairPrFinished/verify',
hideInMenu: true,
noMargin: true,
},
]
}
......
......@@ -533,13 +533,25 @@ export default {
'menu.afterService.repairApplication.repairPrSubmitDetail': '查看维修申请单',
'menu.afterService.repairApplication.addRepair': '新建维修申请单',
'menu.afterService.repairApplication.repairPrFinished': '待确认售后完成',
'menu.afterService.repairApplication.repairPrFinishedDetail': '查看维修申请单',
'menu.afterService.repairApplication.verifyRepairPrFinished': '确认售后完成',
'menu.afterService.repairManage': '维修处理',
'menu.afterService.repairManage.repairQuery': '维修申请单查询',
'menu.afterService.repairManage.repairQueryDetail': '查看维修申请单',
'menu.afterService.repairManage.repairPrSubmit': '待提交审核维修申请单',
'menu.afterService.repairManage.repairPrSubmitDetail': '查看维修申请单',
'menu.afterService.repairManage.verifyRepairPrSubmit': '审核维修申请单',
'menu.afterService.repairManage.repairPr1': '待审核维修申请单(一级)',
'menu.afterService.repairManage.repairPr1Detail': '查看维修申请单',
'menu.afterService.repairManage.verifyRepairPr1': '审核维修申请单',
'menu.afterService.repairManage.repairPr2': '待审核维修申请单(二级)',
'menu.afterService.repairManage.repairPr2Detail': '查看维修申请单',
'menu.afterService.repairManage.verifyRepairPr2': '审核维修申请单',
'menu.afterService.repairManage.repairPrConfirm': '待确认维修申请单',
'menu.afterService.repairManage.repairPrConfirmDetail': '查看维修申请单',
'menu.afterService.repairManage.verifyRepairPrConfirm': '审核维修申请单',
'menu.afterService.handleRepair': '维修处理',
'menu.afterService.handleRepair.orderList': '维修申请单查询',
'menu.afterService.handleRepair.waitSubmitExamineOrder': '待提交审核维修申请单',
'menu.afterService.handleRepair.waitExamineLevelOne': '待审核维修申请单(一级)',
'menu.afterService.handleRepair.waitExamineLevelTwo': '待审核维修申请单(二级)',
'menu.afterService.handleRepair.waitConfirmOrder': '待确认维修申请单',
// 结算能力
'menu.balance': '结算',
'menu.balance.settleRules': '结算规则配置',
......
import React, { Suspense } from 'react';
import { Row, Col } from 'antd';
const FileList = React.lazy(() => import('../FileList'));
const AddressInfo = React.lazy(() => import('../AddressInfo'));
const Score = React.lazy(() => import('../Score'));
const IntroduceRow: React.FC = () => {
return (
<Row
gutter={24}
>
<Col span={6}>
<Suspense fallback={null}>
<FileList />
</Suspense>
</Col>
<Col span={12}>
<Suspense fallback={null}>
<AddressInfo />
</Suspense>
</Col>
<Col span={6}>
<Suspense fallback={null}>
<Score />
</Suspense>
</Col>
</Row>
);
};
export default IntroduceRow;
\ No newline at end of file
......@@ -30,9 +30,6 @@ const OuterCirculation: React.FC<OuterCirculation> = ({
return (
<MellowCard
title="外部流转"
style={{
marginBottom: 24,
}}
>
{(steps && steps.length > 0) ? (
<Steps style={{ marginTop: 30 }} progressDot current={current}>
......
......@@ -75,9 +75,6 @@ const OuterCirculationRecord: React.FC<OuterCirculationRecordProps> = ({
return (
<MellowCard
title="外部流转记录"
style={{
marginBottom: 24,
}}
>
<PolymericTable
rowKey="operateTime"
......
......@@ -85,9 +85,6 @@ const ProductList: React.FC<HistoryListHistoryListProps> = ({
return (
<MellowCard
title="维修商品"
style={{
marginBottom: 24,
}}
>
<PolymericTable
rowKey="id"
......
/*
* @Author: XieZhiXiong
* @Date: 2020-10-28 17:29:14
* @LastEditors: XieZhiXiong
* @LastEditTime: 2020-10-28 17:38:06
* @Description: 提交审核 Modal
*/
import React from 'react';
import { Modal } from 'antd';
import { createFormActions, FormEffectHooks, FormPath } from '@formily/antd';
import NiceForm from '@/components/NiceForm';
import { auditModalSchema } from './schema';
const modalFormActions = createFormActions();
const {
onFieldValueChange$,
onFieldInputChange$,
} = FormEffectHooks;
interface VerifyModalProps {
visible: boolean;
confirmLoading: boolean;
onSubmit: (values: { agree: 0 | 1, reason: string }) => void;
onVisible: (flag: boolean) => void;
};
const VerifyModal: React.FC<VerifyModalProps> = ({
visible,
confirmLoading,
onSubmit,
onVisible,
}) => {
const handleSubmit = values => {
if (onSubmit) {
onSubmit(values);
}
};
return (
<Modal
title="提交审核"
visible={visible}
confirmLoading={confirmLoading}
onOk={() => modalFormActions.submit()}
onCancel={() => onVisible(false)}
destroyOnClose
>
<NiceForm
effects={($, { setFieldState }) => {
onFieldValueChange$('agree').subscribe(fieldState => {
setFieldState('reason', state => {
state.visible = !fieldState.value;
});
});
}}
actions={modalFormActions}
schema={auditModalSchema}
onSubmit={handleSubmit}
/>
</Modal>
);
};
export default VerifyModal;
\ No newline at end of file
import { ISchema } from '@formily/antd';
export const auditModalSchema: ISchema = {
type: 'object',
properties: {
MEGA_LAYOUT: {
type: 'object',
'x-component': 'mega-layout',
'x-component-props': {
labelAlign: 'top',
},
properties: {
agree: {
type: 'string',
default: 1,
enum: [
{ label: '审核通过', value: 1 },
{ label: '审核不通过', value: 0 },
],
'x-component': 'radio',
'x-component-props': {},
},
reason: {
type: 'string',
title: '审核不通过原因',
'x-component': 'textarea',
required: true,
'x-component-props': {
placeholder: '在此输入你的内容,最长120个字符,60个汉字',
rows: 5,
},
'x-rules': [
{
limitByte: true, // 自定义校验规则
maxByte: 120,
}
],
},
},
},
},
};
\ No newline at end of file
......@@ -21,12 +21,10 @@ import AvatarWrap from '@/components/AvatarWrap';
import StatusTag from '@/components/StatusTag';
import { } from '../../../constants';
const OuterCirculation = React.lazy(() => import('../OuterCirculation'));
const ProductList = React.lazy(() => import('../ProductList'));
const FileList = React.lazy(() => import('../FileList'));
const AddressInfo = React.lazy(() => import('../AddressInfo'));
const Score = React.lazy(() => import('../Score'));
const OuterCirculationRecord = React.lazy(() => import('../OuterCirculationRecord'));
const OuterCirculation = React.lazy(() => import('../../../components/OuterCirculation'));
const ProductList = React.lazy(() => import('../../../components/ProductList'));
const IntroduceRow = React.lazy(() => import('../../../components/IntroduceRow'));
const OuterCirculationRecord = React.lazy(() => import('../../../components/OuterCirculationRecord'));
interface DetailInfoProps {
// 记录id
......@@ -35,12 +33,15 @@ interface DetailInfoProps {
isEdit?: boolean;
// 历史记录目标路径
target?: string;
// 头部右侧拓展
headExtra?: React.ReactNode;
};
const DetailInfo: React.FC<DetailInfoProps> = ({
id,
isEdit = false,
target,
headExtra = null,
}) => {
const [detailInfo, setDetailInfo] = useState<GetPayCreditApplyGetApplyDetailResponse>(null);
const [infoLoading, setInfoloading] = useState(false);
......@@ -93,7 +94,7 @@ const DetailInfo: React.FC<DetailInfoProps> = ({
}
extra={(
<>
{headExtra}
</>
)}
>
......@@ -118,6 +119,8 @@ const DetailInfo: React.FC<DetailInfoProps> = ({
</>
}
>
<Row gutter={[24, 24]}>
<Col span={24}>
<Suspense fallback={null}>
<OuterCirculation
steps={[
......@@ -137,39 +140,26 @@ const DetailInfo: React.FC<DetailInfoProps> = ({
current={1}
/>
</Suspense>
</Col>
<Col span={24}>
<Suspense fallback={null}>
<ProductList dataSource={[]} />
</Suspense>
<Row
gutter={24}
style={{
marginBottom: 24,
}}
>
<Col span={6}>
<Suspense fallback={null}>
<FileList />
</Suspense>
</Col>
<Col span={12}>
<Col span={24}>
<Suspense fallback={null}>
<AddressInfo />
<IntroduceRow />
</Suspense>
</Col>
<Col span={6}>
<Col span={24}>
<Suspense fallback={null}>
<Score />
<OuterCirculationRecord dataSource={[]} />
</Suspense>
</Col>
</Row>
<Suspense fallback={null}>
<OuterCirculationRecord dataSource={[]} />
</Suspense>
</PageHeaderWrapper>
</Spin>
);
......
/*
* @Author: XieZhiXiong
* @Date: 2020-10-28 17:29:14
* @LastEditors: XieZhiXiong
* @LastEditTime: 2020-11-04 17:18:55
* @Description: 确认完成审核 Modal
*/
import React from 'react';
import { Modal } from 'antd';
import { createFormActions, FormEffectHooks, FormPath } from '@formily/antd';
import NiceForm from '@/components/NiceForm';
import { auditModalSchema } from './schema';
const modalFormActions = createFormActions();
const {
onFieldValueChange$,
onFieldInputChange$,
} = FormEffectHooks;
interface VerifyModalProps {
visible: boolean;
confirmLoading: boolean;
onSubmit: (values: { agree: 0 | 1, reason: string }) => void;
onVisible: (flag: boolean) => void;
};
const FinishedModal: React.FC<VerifyModalProps> = ({
visible,
confirmLoading,
onSubmit,
onVisible,
}) => {
const handleSubmit = values => {
if (onSubmit) {
onSubmit(values);
}
};
return (
<Modal
title="售后评价"
visible={visible}
confirmLoading={confirmLoading}
onOk={() => modalFormActions.submit()}
onCancel={() => onVisible(false)}
destroyOnClose
>
<NiceForm
effects={($, { setFieldState }) => {
}}
actions={modalFormActions}
schema={auditModalSchema}
onSubmit={handleSubmit}
/>
</Modal>
);
};
export default FinishedModal;
\ No newline at end of file
import { ISchema } from '@formily/antd';
export const auditModalSchema: ISchema = {
type: 'object',
properties: {
MEGA_LAYOUT: {
type: 'object',
'x-component': 'mega-layout',
'x-component-props': {
labelAlign: 'top',
},
properties: {
star: {
type: 'string',
title: '售后满意度',
default: 5,
enum: [
{ label: '5分', value: 5 },
{ label: '4分', value: 4 },
{ label: '3分', value: 3 },
{ label: '2分', value: 2 },
{ label: '1分', value: 1 },
],
'x-component': 'radio',
'x-component-props': {},
},
comment: {
type: 'string',
title: '售后评价',
'x-component': 'textarea',
required: true,
'x-component-props': {
placeholder: '在此输入你的内容,最长120个字符,60个汉字',
rows: 5,
},
'x-rules': [
{
limitByte: true, // 自定义校验规则
maxByte: 120,
}
],
},
},
},
},
};
\ No newline at end of file
import React from 'react';
import { usePageStatus } from '@/hooks/usePageStatus';
import DetailInfo from '../components/DetailInfo';
const RepairPrFinishedDetail: React.FC = () => {
const { id, creditId } = usePageStatus();
return (
<DetailInfo
id={id}
target="/memberCenter/payandSettle/creditApplication/quotaFormQuery/detail"
/>
);
};
export default RepairPrFinishedDetail;
\ No newline at end of file
import React, { useState, useRef } from 'react';
import {
Card,
Badge,
Progress,
Button,
Popconfirm,
Space,
} from 'antd';
import { history } from 'umi';
import {
ClockCircleOutlined,
PlusOutlined,
} from '@ant-design/icons';
import { StandardTable } from 'god';
import moment from 'moment';
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 { useStateFilterSearchLinkageEffect } from '@/formSchema/effects/useFilterSearch';
import { useAsyncInitSelect } from '@/formSchema/effects/useAsyncInitSelect';
import { FORM_FILTER_PATH } from '@/formSchema/const';
import { coverColFiltersItem } from '@/utils';
import EyePreview from '@/components/EyePreview';
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';
import styles from './index.less';
const formActions = createFormActions();
const RepairPrFinished: React.FC = () => {
const ref = useRef<any>({});
const defaultColumns: ColumnType<any>[] = [
{
title: '申请单号',
dataIndex: 'applyNo',
align: 'center',
render: (text, record) => (
<>
<EyePreview
url={`/memberCenter/afterService/repairApplication/repairPrFinished/detail?id=${record.id}`}
>
{text}
</EyePreview>
</>
),
},
{
title: '申请单摘要',
dataIndex: 'parentMemberName',
align: 'center',
},
{
title: '供应会员',
dataIndex: 'supplier',
align: 'center',
},
{
title: '单据时间',
dataIndex: 'created',
align: 'center',
},
{
title: '外部状态',
dataIndex: 'outerStatusName',
align: 'center',
filters: [],
onFilter: (value, record) => record.outerStatus === value,
render: (text, record) => (
<StatusTag type="success" title="售后完成" />
),
},
{
title: '内部状态',
dataIndex: 'innerStatusName',
align: 'center',
filters: [],
onFilter: (value, record) => record.innerStatus === value,
render: (text, record) => <Badge color={'#6C9CEB'} text="待确认售后完成" />,
},
{
title: '操作',
dataIndex: 'option',
align: 'center',
render: (text, record) => (
<>
<Button
type="link"
onClick={() => history.push(`/memberCenter/afterService/repairApplication/repairPrFinished/verify`)}
>
确认售后完成
</Button>
</>
),
},
];
const [columns, setColumns] = useState<any[]>(defaultColumns);
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,
});
};
// 初始化高级筛选选项
const fetchSearchItems = async () => {
// const res = await PublicApi.getPayCreditApplyPageItemsByConsumer();
// if (res.code === 1000) {
// const { data } = res;
// const {
// outerStatusList = [],
// innerStatusList = [],
// } = data;
// 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),
// );
// 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 {};
};
return (
<PageHeaderWrapper>
<Card>
<StandardTable
tableProps={{
rowKey: 'id',
}}
columns={columns}
currentRef={ref}
fetchTableData={(params: any) => fetchListData(params)}
controlRender={
<NiceForm
actions={formActions}
onSubmit={values => ref.current.reload(values)}
effects={($, actions) => {
useStateFilterSearchLinkageEffect(
$,
actions,
'applyNo',
FORM_FILTER_PATH,
);
useAsyncInitSelect(
['innerStatus', 'outerStatus'],
fetchSearchItems,
);
}}
schema={listSearchSchema}
/>
}
/>
</Card>
</PageHeaderWrapper>
);
};
export default RepairPrFinished;
\ No newline at end of file
/*
* @Author: XieZhiXiong
* @Date: 2020-11-04 10:03:06
* @LastEditors: XieZhiXiong
* @LastEditTime: 2020-11-02 13:47:58
* @Description:
*/
import { ISchema } from '@formily/antd';
import { FORM_FILTER_PATH } from '@/formSchema/const';
import { UPLOAD_TYPE } from '@/constants';
export const listSearchSchema: ISchema = {
type: 'object',
properties: {
megaLayout: {
type: 'object',
'x-component': 'mega-layout',
properties: {
applyNo: {
type: 'string',
'x-component': 'Search',
'x-component-props': {
placeholder: '搜索',
align: 'flex-left',
tip: '输入 申请单号 进行搜索',
},
},
[FORM_FILTER_PATH]: {
type: 'object',
'x-component': 'mega-layout',
'x-component-props': {
grid: true,
full: true,
autoRow: true,
columns: 6,
},
properties: {
abstract: {
type: 'string',
'x-component-props': {
placeholder: '申请单摘要',
allowClear: true,
},
},
'[startTime, endTime]': {
type: 'string',
default: '',
'x-component': 'dateSelect',
'x-component-props': {
placeholder: '单据时间(全部)',
allowClear: true,
},
},
supplier: {
type: 'string',
'x-component-props': {
placeholder: '供应会员(全部)',
allowClear: true,
},
},
submit: {
'x-component': 'Submit',
'x-mega-props': {
span: 1,
},
'x-component-props': {
children: '查询',
},
},
},
},
},
},
},
};
\ No newline at end of file
/*
* @Author: XieZhiXiong
* @Date: 2020-11-04 17:22:07
* @LastEditors: XieZhiXiong
* @LastEditTime: 2020-11-04 17:29:08
* @Description:
*/
import React, { useState } from 'react';
import { Button } from 'antd';
import { history } from 'umi';
import { PublicApi } from '@/services/api';
import { FormOutlined } from '@ant-design/icons';
import { usePageStatus } from '@/hooks/usePageStatus';
import DetailInfo from '../components/DetailInfo';
import FinishedModal from '../components/FinishedModal';
const RepairPrFinishedDetailVerify: React.FC = () => {
const { id, creditId } = usePageStatus();
const [visible, setVisible] = useState(false);
const [confirmLoading, setConfirmLoading] = useState(false);
const handleSubmit = values => {
};
return (
<>
<DetailInfo
id={id}
target="/memberCenter/payandSettle/creditApplication/quotaFormQuery/detail"
headExtra={(
<Button
type="primary"
icon={<FormOutlined />}
onClick={() => setVisible(true)}
>
提交
</Button>
)}
isEdit
/>
<FinishedModal
visible={visible}
confirmLoading={confirmLoading}
onSubmit={handleSubmit}
onVisible={() => setVisible(false)}
/>
</>
);
};
export default RepairPrFinishedDetailVerify;
\ No newline at end of file
import React, { Suspense, useEffect, useState } from 'react';
import {
PageHeader,
Descriptions,
Card,
Spin,
Button,
Row,
Col,
Badge,
message,
} from 'antd';
import { FormOutlined } from '@ant-design/icons';
import { PageHeaderWrapper } from '@ant-design/pro-layout';
import { history } from 'umi';
import { PublicApi } from '@/services/api';
import { GetPayCreditApplyGetApplyDetailResponse } from '@/services/PayApi';
import { CREDIT_INNER_STATUS, CREDIT_OUTER_STATUS, CREDIT_STATUS } from '@/constants';
import { normalizeFiledata, FileData } from '@/utils';
import AvatarWrap from '@/components/AvatarWrap';
import StatusTag from '@/components/StatusTag';
import AuditProcess from '@/components/AuditProcess';
import { } from '../../../constants';
const ProductList = React.lazy(() => import('../../../components/ProductList'));
const IntroduceRow = React.lazy(() => import('../../../components/IntroduceRow'));
const FlowRecords = React.lazy(() => import('../FlowRecords'));
interface DetailInfoProps {
// 记录id
id: string;
// 是否是编辑的
isEdit?: boolean;
// 历史记录目标路径
target?: string;
// 头部右侧拓展
headExtra?: React.ReactNode;
};
const DetailInfo: React.FC<DetailInfoProps> = ({
id,
isEdit = false,
target,
headExtra = null,
}) => {
const [detailInfo, setDetailInfo] = useState<GetPayCreditApplyGetApplyDetailResponse>(null);
const [infoLoading, setInfoloading] = useState(false);
// 获取授信详情
const getDetailInfo = () => {
if (!id) {
return;
}
// setInfoloading(true);
// PublicApi.getPayCreditApplyGetApplyDetail({
// applyId: id,
// }).then(res => {
// if (res.code === 1000) {
// setDetailInfo(res.data);
// setQuotaValues({
// applyQuota: res.data.apply.applyQuota,
// billDay: res.data.apply.billDay,
// repayPeriod: res.data.apply.repayPeriod,
// fileList: res.data.apply.fileList ? res.data.apply.fileList.map(item => normalizeFiledata(item.fileUrl)) : [],
// });
// }
// }).finally(() => {
// setInfoloading(false);
// });
};
useEffect(() => {
getDetailInfo();
}, []);
return (
<Spin spinning={infoLoading}>
<PageHeaderWrapper
style={{
padding: 24,
}}
title={
<>
<PageHeader
style={{ padding: '0' }}
onBack={() => history.goBack()}
title={
<AvatarWrap
info={{
aloneTxt: '单',
name: `申请单号:FPTY12}`,
}}
/>
}
extra={(
<>
{headExtra}
</>
)}
>
<Descriptions
size="small"
column={3}
style={{
padding: '0 32px',
}}
>
<Descriptions.Item label="申请单摘要:">进口头层黄牛皮荔枝纹</Descriptions.Item>
<Descriptions.Item label="供应会员">温州隆昌手袋有限公司</Descriptions.Item>
<Descriptions.Item label="单据时间">2020-09-09 12:58:25</Descriptions.Item>
<Descriptions.Item label="外部状态">
<StatusTag type="success" title={'售后完成'} />
</Descriptions.Item>
<Descriptions.Item label="内部状态">
<Badge color={'#41CC9E'} text={'已确认售后完成'} />
</Descriptions.Item>
</Descriptions>
</PageHeader>
</>
}
>
<Row gutter={[24, 24]}>
<Col span={24}>
<Suspense fallback={null}>
<AuditProcess
outerVerifySteps={[
{
step: 1,
stepName: '提交维修申请单',
roleName: '采购商'
},
{
step: 2,
stepName: '提交维修申请单',
roleName: '采购商'
},
{
step: 3,
stepName: '提交维修申请单',
roleName: '采购商'
},
]}
outerVerifyCurrent={1}
innerVerifySteps={[
{
step: 1,
stepName: '提交维修申请单',
roleName: '采购商'
},
{
step: 2,
stepName: '提交维修申请单',
roleName: '采购商'
},
]}
innerVerifyCurrent={0}
/>
</Suspense>
</Col>
<Col span={24}>
<Suspense fallback={null}>
<ProductList dataSource={[]} />
</Suspense>
</Col>
<Col span={24}>
<Suspense fallback={null}>
<IntroduceRow />
</Suspense>
</Col>
<Col span={24}>
<Suspense fallback={null}>
<FlowRecords innerHistory={[]} />
</Suspense>
</Col>
</Row>
</PageHeaderWrapper>
</Spin>
);
};
export default DetailInfo;
\ No newline at end of file
/*
* @Author: XieZhiXiong
* @Date: 2020-11-04 18:22:57
* @LastEditors: XieZhiXiong
* @LastEditTime: 2020-11-04 18:30:47
* @Description: 内、外部流转记录
*/
import React from 'react';
import {
Tabs,
Badge,
} from 'antd';
import PolymericTable from '@/components/PolymericTable';
import { EditableColumns } from '@/components/PolymericTable/interface';
import MellowCard from '@/components/MellowCard';
import StatusTag from '@/components/StatusTag';
import {
CREDIT_INNER_STATUS,
CREDIT_OUTER_STATUS,
} from '@/constants';
// import {
// CREDIT_INNER_STATUS_BADGE_MAP,
// CREDIT_OUTER_STATUS_TAG_MAP,
// } from '../../../constant';
import styles from './index.less';
export interface InnerHistoryItem {
step: number;
operator: string;
department: string;
jobTitle: string;
status: number;
operate: string;
operateTime: string,
opinion: string;
};
export interface OuterHistoryItem {
roleName: string;
status: number;
operate: string;
operateTime: string;
opinion: string;
};
interface FlowRecordsProps {
outerHistory?: OuterHistoryItem[];
innerHistory: InnerHistoryItem[];
};
const FlowRecords: React.FC<FlowRecordsProps> = ({ outerHistory = [], innerHistory }) => {
const outerColumns: EditableColumns[] = [
{
title: '序号',
dataIndex: 'index',
align: 'center',
render: (_, record, index) => index + 1,
},
{
title: '操作角色',
dataIndex: 'roleName',
align: 'center',
},
{
title: '状态',
dataIndex: 'status',
align: 'center',
render: (text, record) => (
<StatusTag type="success" title="待确认售后完成" />
),
},
{
title: '操作',
dataIndex: 'operate',
align: 'center',
},
{
title: '操作时间',
dataIndex: 'operateTime',
align: 'center',
ellipsis: true,
},
{
title: '审核意见',
dataIndex: 'opinion',
align: 'center',
ellipsis: true,
},
];
const innerColumns: EditableColumns[] = [
{
title: '序号',
dataIndex: 'step',
align: 'center',
},
{
title: '操作人',
dataIndex: 'operator',
align: 'center',
},
{
title: '部门',
dataIndex: 'department',
align: 'center',
},
{
title: '职位',
dataIndex: 'jobTitle',
align: 'center',
},
{
title: '状态',
dataIndex: 'status',
align: 'center',
render: (text, record) => (
<Badge color="#6C9CEB" text="待确认售后完成" />
),
},
{
title: '操作',
dataIndex: 'operate',
align: 'center',
},
{
title: '操作时间',
dataIndex: 'operateTime',
align: 'center',
ellipsis: true,
},
{
title: '审核意见',
dataIndex: 'opinion',
align: 'center',
ellipsis: true,
},
];
return (
<MellowCard>
<Tabs onChange={() => {}}>
{outerHistory ? (
<Tabs.TabPane tab="外部流转记录" key="1">
<PolymericTable
rowKey="operateTime"
dataSource={outerHistory}
columns={outerColumns}
loading={false}
pagination={null}
/>
</Tabs.TabPane>
) : null}
<Tabs.TabPane tab="内部流转记录" key="2">
<PolymericTable
rowKey="operateTime"
dataSource={innerHistory}
columns={innerColumns}
loading={false}
pagination={null}
/>
</Tabs.TabPane>
</Tabs>
</MellowCard>
);
};
export default FlowRecords;
\ No newline at end of file
import React from 'react';
import { usePageStatus } from '@/hooks/usePageStatus';
import DetailInfo from '../components/DetailInfo';
const RepairPr1Detail: React.FC = () => {
const { id, creditId } = usePageStatus();
return (
<DetailInfo
id={id}
target="/memberCenter/payandSettle/creditApplication/quotaFormQuery/detail"
/>
);
};
export default RepairPr1Detail;
\ No newline at end of file
import React, { useState, useRef } from 'react';
import { Card, Badge, Progress, Button } from 'antd';
import {
ClockCircleOutlined,
} from '@ant-design/icons';
import { history } from 'umi';
import { StandardTable } from 'god';
import moment from 'moment';
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 { useStateFilterSearchLinkageEffect } from '@/formSchema/effects/useFilterSearch';
import { useAsyncInitSelect } from '@/formSchema/effects/useAsyncInitSelect';
import { FORM_FILTER_PATH } from '@/formSchema/const';
import { coverColFiltersItem } from '@/utils';
import EyePreview from '@/components/EyePreview';
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';
import styles from './index.less';
const formActions = createFormActions();
const RepairPr1: React.FC = () => {
const ref = useRef<any>({});
const defaultColumns: ColumnType<any>[] = [
{
title: '申请单号',
dataIndex: 'applyNo',
align: 'center',
render: (text, record) => (
<>
<EyePreview
url={`/memberCenter/afterService/repairManage/repairPr1/detail?id=${record.id}`}
>
{text}
</EyePreview>
</>
),
},
{
title: '申请单摘要',
dataIndex: 'parentMemberName',
align: 'center',
},
{
title: '单据时间',
dataIndex: 'created',
align: 'center',
},
{
title: '外部状态',
dataIndex: 'outerStatusName',
align: 'center',
filters: [],
onFilter: (value, record) => record.outerStatus === value,
render: (text, record) => (
<StatusTag type="success" title="售后完成" />
),
},
{
title: '内部状态',
dataIndex: 'innerStatusName',
align: 'center',
filters: [],
onFilter: (value, record) => record.innerStatus === value,
render: (text, record) => <Badge color={'#6C9CEB'} text="待确认售后完成" />,
},
{
title: '操作',
dataIndex: 'option',
align: 'center',
render: (text, record) => (
<>
<Button
type="link"
onClick={() => history.push(`/memberCenter/afterService/repairManage/repairPr1/verify?id=${record.id}`)}
>
提交审核
</Button>
</>
),
},
];
const [columns, setColumns] = useState<any[]>(defaultColumns);
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,
});
};
// 初始化高级筛选选项
const fetchSearchItems = async () => {
// const res = await PublicApi.getPayCreditApplyPageItemsByConsumer();
// if (res.code === 1000) {
// const { data } = res;
// const {
// outerStatusList = [],
// innerStatusList = [],
// } = data;
// 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),
// );
// 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 {};
};
return (
<PageHeaderWrapper>
<Card>
<StandardTable
tableProps={{
rowKey: 'id',
}}
columns={columns}
currentRef={ref}
fetchTableData={(params: any) => fetchListData(params)}
controlRender={
<NiceForm
actions={formActions}
onSubmit={values => ref.current.reload(values)}
effects={($, actions) => {
useStateFilterSearchLinkageEffect(
$,
actions,
'applyNo',
FORM_FILTER_PATH,
);
useAsyncInitSelect(
['innerStatus', 'outerStatus'],
fetchSearchItems,
);
}}
schema={listSearchSchema}
/>
}
/>
</Card>
</PageHeaderWrapper>
);
};
export default RepairPr1;
\ No newline at end of file
/*
* @Author: XieZhiXiong
* @Date: 2020-09-29 10:03:06
* @LastEditors: XieZhiXiong
* @LastEditTime: 2020-11-04 18:43:24
* @Description:
*/
import { ISchema } from '@formily/antd';
import { FORM_FILTER_PATH } from '@/formSchema/const';
import { UPLOAD_TYPE } from '@/constants';
export const listSearchSchema: ISchema = {
type: 'object',
properties: {
megaLayout: {
type: 'object',
'x-component': 'mega-layout',
properties: {
applyNo: {
type: 'string',
'x-component': 'Search',
'x-component-props': {
placeholder: '搜索',
align: 'flex-left',
tip: '输入 申请单号 进行搜索',
},
},
[FORM_FILTER_PATH]: {
type: 'object',
'x-component': 'mega-layout',
'x-component-props': {
grid: true,
full: true,
autoRow: true,
columns: 6,
},
properties: {
abstract: {
type: 'string',
'x-component-props': {
placeholder: '申请单摘要',
allowClear: true,
},
},
'[startTime, endTime]': {
type: 'string',
default: '',
'x-component': 'dateSelect',
'x-component-props': {
placeholder: '单据时间(全部)',
allowClear: true,
},
},
supplier: {
type: 'string',
enum: [],
'x-component-props': {
placeholder: '供应会员(全部)',
allowClear: true,
},
},
submit: {
'x-component': 'Submit',
'x-mega-props': {
span: 1,
},
'x-component-props': {
children: '查询',
},
},
},
},
},
},
},
};
\ No newline at end of file
/*
* @Author: XieZhiXiong
* @Date: 2020-11-04 17:22:07
* @LastEditors: XieZhiXiong
* @LastEditTime: 2020-11-04 17:29:08
* @Description:
*/
import React, { useState } from 'react';
import { Button } from 'antd';
import { history } from 'umi';
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 RepairPr1Verify: React.FC = () => {
const { id, creditId } = usePageStatus();
const [visible, setVisible] = useState(false);
const [confirmLoading, setConfirmLoading] = useState(false);
const handleSubmit = values => {
};
return (
<>
<DetailInfo
id={id}
target="/memberCenter/payandSettle/creditApplication/quotaFormQuery/detail"
headExtra={(
<Button
type="primary"
icon={<FormOutlined />}
onClick={() => setVisible(true)}
>
提交审核
</Button>
)}
isEdit
/>
<VerifyModal
visible={visible}
confirmLoading={confirmLoading}
onSubmit={handleSubmit}
onVisible={() => setVisible(false)}
/>
</>
);
};
export default RepairPr1Verify;
\ No newline at end of file
import React from 'react';
import { usePageStatus } from '@/hooks/usePageStatus';
import DetailInfo from '../components/DetailInfo';
const RepairPr2Detail: React.FC = () => {
const { id, creditId } = usePageStatus();
return (
<DetailInfo
id={id}
target="/memberCenter/payandSettle/creditApplication/quotaFormQuery/detail"
/>
);
};
export default RepairPr2Detail;
\ No newline at end of file
import React, { useState, useRef } from 'react';
import { Card, Badge, Progress, Button } from 'antd';
import {
ClockCircleOutlined,
} from '@ant-design/icons';
import { history } from 'umi';
import { StandardTable } from 'god';
import moment from 'moment';
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 { useStateFilterSearchLinkageEffect } from '@/formSchema/effects/useFilterSearch';
import { useAsyncInitSelect } from '@/formSchema/effects/useAsyncInitSelect';
import { FORM_FILTER_PATH } from '@/formSchema/const';
import { coverColFiltersItem } from '@/utils';
import EyePreview from '@/components/EyePreview';
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';
import styles from './index.less';
const formActions = createFormActions();
const RepairPr2: React.FC = () => {
const ref = useRef<any>({});
const defaultColumns: ColumnType<any>[] = [
{
title: '申请单号',
dataIndex: 'applyNo',
align: 'center',
render: (text, record) => (
<>
<EyePreview
url={`/memberCenter/afterService/repairManage/repairPr2/detail?id=${record.id}`}
>
{text}
</EyePreview>
</>
),
},
{
title: '申请单摘要',
dataIndex: 'parentMemberName',
align: 'center',
},
{
title: '单据时间',
dataIndex: 'created',
align: 'center',
},
{
title: '外部状态',
dataIndex: 'outerStatusName',
align: 'center',
filters: [],
onFilter: (value, record) => record.outerStatus === value,
render: (text, record) => (
<StatusTag type="success" title="售后完成" />
),
},
{
title: '内部状态',
dataIndex: 'innerStatusName',
align: 'center',
filters: [],
onFilter: (value, record) => record.innerStatus === value,
render: (text, record) => <Badge color={'#6C9CEB'} text="待确认售后完成" />,
},
{
title: '操作',
dataIndex: 'option',
align: 'center',
render: (text, record) => (
<>
<Button
type="link"
onClick={() => history.push(`/memberCenter/afterService/repairManage/repairPr2/verify?id=${record.id}`)}
>
提交审核
</Button>
</>
),
},
];
const [columns, setColumns] = useState<any[]>(defaultColumns);
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,
});
};
// 初始化高级筛选选项
const fetchSearchItems = async () => {
// const res = await PublicApi.getPayCreditApplyPageItemsByConsumer();
// if (res.code === 1000) {
// const { data } = res;
// const {
// outerStatusList = [],
// innerStatusList = [],
// } = data;
// 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),
// );
// 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 {};
};
return (
<PageHeaderWrapper>
<Card>
<StandardTable
tableProps={{
rowKey: 'id',
}}
columns={columns}
currentRef={ref}
fetchTableData={(params: any) => fetchListData(params)}
controlRender={
<NiceForm
actions={formActions}
onSubmit={values => ref.current.reload(values)}
effects={($, actions) => {
useStateFilterSearchLinkageEffect(
$,
actions,
'applyNo',
FORM_FILTER_PATH,
);
useAsyncInitSelect(
['innerStatus', 'outerStatus'],
fetchSearchItems,
);
}}
schema={listSearchSchema}
/>
}
/>
</Card>
</PageHeaderWrapper>
);
};
export default RepairPr2;
\ No newline at end of file
/*
* @Author: XieZhiXiong
* @Date: 2020-09-29 10:03:06
* @LastEditors: XieZhiXiong
* @LastEditTime: 2020-11-04 18:43:24
* @Description:
*/
import { ISchema } from '@formily/antd';
import { FORM_FILTER_PATH } from '@/formSchema/const';
import { UPLOAD_TYPE } from '@/constants';
export const listSearchSchema: ISchema = {
type: 'object',
properties: {
megaLayout: {
type: 'object',
'x-component': 'mega-layout',
properties: {
applyNo: {
type: 'string',
'x-component': 'Search',
'x-component-props': {
placeholder: '搜索',
align: 'flex-left',
tip: '输入 申请单号 进行搜索',
},
},
[FORM_FILTER_PATH]: {
type: 'object',
'x-component': 'mega-layout',
'x-component-props': {
grid: true,
full: true,
autoRow: true,
columns: 6,
},
properties: {
abstract: {
type: 'string',
'x-component-props': {
placeholder: '申请单摘要',
allowClear: true,
},
},
'[startTime, endTime]': {
type: 'string',
default: '',
'x-component': 'dateSelect',
'x-component-props': {
placeholder: '单据时间(全部)',
allowClear: true,
},
},
supplier: {
type: 'string',
enum: [],
'x-component-props': {
placeholder: '供应会员(全部)',
allowClear: true,
},
},
submit: {
'x-component': 'Submit',
'x-mega-props': {
span: 1,
},
'x-component-props': {
children: '查询',
},
},
},
},
},
},
},
};
\ No newline at end of file
/*
* @Author: XieZhiXiong
* @Date: 2020-11-04 17:22:07
* @LastEditors: XieZhiXiong
* @LastEditTime: 2020-11-04 17:29:08
* @Description:
*/
import React, { useState } from 'react';
import { Button } from 'antd';
import { history } from 'umi';
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 RepairPr2Verify: React.FC = () => {
const { id, creditId } = usePageStatus();
const [visible, setVisible] = useState(false);
const [confirmLoading, setConfirmLoading] = useState(false);
const handleSubmit = values => {
};
return (
<>
<DetailInfo
id={id}
target="/memberCenter/payandSettle/creditApplication/quotaFormQuery/detail"
headExtra={(
<Button
type="primary"
icon={<FormOutlined />}
onClick={() => setVisible(true)}
>
提交审核
</Button>
)}
isEdit
/>
<VerifyModal
visible={visible}
confirmLoading={confirmLoading}
onSubmit={handleSubmit}
onVisible={() => setVisible(false)}
/>
</>
);
};
export default RepairPr2Verify;
\ No newline at end of file
import React from 'react';
import { usePageStatus } from '@/hooks/usePageStatus';
import DetailInfo from '../components/DetailInfo';
const RepairPrConfirmDetail: React.FC = () => {
const { id, creditId } = usePageStatus();
return (
<DetailInfo
id={id}
target="/memberCenter/payandSettle/creditApplication/quotaFormQuery/detail"
/>
);
};
export default RepairPrConfirmDetail;
\ No newline at end of file
import React, { useState, useRef } from 'react';
import { Card, Badge, Progress, Button } from 'antd';
import {
ClockCircleOutlined,
} from '@ant-design/icons';
import { history } from 'umi';
import { StandardTable } from 'god';
import moment from 'moment';
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 { useStateFilterSearchLinkageEffect } from '@/formSchema/effects/useFilterSearch';
import { useAsyncInitSelect } from '@/formSchema/effects/useAsyncInitSelect';
import { FORM_FILTER_PATH } from '@/formSchema/const';
import { coverColFiltersItem } from '@/utils';
import EyePreview from '@/components/EyePreview';
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';
import styles from './index.less';
const formActions = createFormActions();
const RepairPrConfirm: React.FC = () => {
const ref = useRef<any>({});
const defaultColumns: ColumnType<any>[] = [
{
title: '申请单号',
dataIndex: 'applyNo',
align: 'center',
render: (text, record) => (
<>
<EyePreview
url={`/memberCenter/afterService/repairManage/repairPrConfirm/detail?id=${record.id}`}
>
{text}
</EyePreview>
</>
),
},
{
title: '申请单摘要',
dataIndex: 'parentMemberName',
align: 'center',
},
{
title: '单据时间',
dataIndex: 'created',
align: 'center',
},
{
title: '外部状态',
dataIndex: 'outerStatusName',
align: 'center',
filters: [],
onFilter: (value, record) => record.outerStatus === value,
render: (text, record) => (
<StatusTag type="success" title="售后完成" />
),
},
{
title: '内部状态',
dataIndex: 'innerStatusName',
align: 'center',
filters: [],
onFilter: (value, record) => record.innerStatus === value,
render: (text, record) => <Badge color={'#6C9CEB'} text="待确认售后完成" />,
},
{
title: '操作',
dataIndex: 'option',
align: 'center',
render: (text, record) => (
<>
<Button
type="link"
onClick={() => history.push(`/memberCenter/afterService/repairManage/repairPrConfirm/verify?id=${record.id}`)}
>
提交审核
</Button>
</>
),
},
];
const [columns, setColumns] = useState<any[]>(defaultColumns);
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,
});
};
// 初始化高级筛选选项
const fetchSearchItems = async () => {
// const res = await PublicApi.getPayCreditApplyPageItemsByConsumer();
// if (res.code === 1000) {
// const { data } = res;
// const {
// outerStatusList = [],
// innerStatusList = [],
// } = data;
// 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),
// );
// 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 {};
};
return (
<PageHeaderWrapper>
<Card>
<StandardTable
tableProps={{
rowKey: 'id',
}}
columns={columns}
currentRef={ref}
fetchTableData={(params: any) => fetchListData(params)}
controlRender={
<NiceForm
actions={formActions}
onSubmit={values => ref.current.reload(values)}
effects={($, actions) => {
useStateFilterSearchLinkageEffect(
$,
actions,
'applyNo',
FORM_FILTER_PATH,
);
useAsyncInitSelect(
['innerStatus', 'outerStatus'],
fetchSearchItems,
);
}}
schema={listSearchSchema}
/>
}
/>
</Card>
</PageHeaderWrapper>
);
};
export default RepairPrConfirm;
\ No newline at end of file
/*
* @Author: XieZhiXiong
* @Date: 2020-09-29 10:03:06
* @LastEditors: XieZhiXiong
* @LastEditTime: 2020-11-04 18:43:24
* @Description:
*/
import { ISchema } from '@formily/antd';
import { FORM_FILTER_PATH } from '@/formSchema/const';
import { UPLOAD_TYPE } from '@/constants';
export const listSearchSchema: ISchema = {
type: 'object',
properties: {
megaLayout: {
type: 'object',
'x-component': 'mega-layout',
properties: {
applyNo: {
type: 'string',
'x-component': 'Search',
'x-component-props': {
placeholder: '搜索',
align: 'flex-left',
tip: '输入 申请单号 进行搜索',
},
},
[FORM_FILTER_PATH]: {
type: 'object',
'x-component': 'mega-layout',
'x-component-props': {
grid: true,
full: true,
autoRow: true,
columns: 6,
},
properties: {
abstract: {
type: 'string',
'x-component-props': {
placeholder: '申请单摘要',
allowClear: true,
},
},
'[startTime, endTime]': {
type: 'string',
default: '',
'x-component': 'dateSelect',
'x-component-props': {
placeholder: '单据时间(全部)',
allowClear: true,
},
},
supplier: {
type: 'string',
enum: [],
'x-component-props': {
placeholder: '供应会员(全部)',
allowClear: true,
},
},
submit: {
'x-component': 'Submit',
'x-mega-props': {
span: 1,
},
'x-component-props': {
children: '查询',
},
},
},
},
},
},
},
};
\ No newline at end of file
/*
* @Author: XieZhiXiong
* @Date: 2020-11-04 17:22:07
* @LastEditors: XieZhiXiong
* @LastEditTime: 2020-11-04 18:59:54
* @Description:
*/
import React, { useState } from 'react';
import { Button } from 'antd';
import { history } from 'umi';
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 RepairPrConfirmVerify: React.FC = () => {
const { id, creditId } = usePageStatus();
const [visible, setVisible] = useState(false);
const [confirmLoading, setConfirmLoading] = useState(false);
const handleSubmit = values => {
};
return (
<>
<DetailInfo
id={id}
target="/memberCenter/payandSettle/creditApplication/quotaFormQuery/detail"
headExtra={(
<Button
type="primary"
icon={<FormOutlined />}
onClick={() => setVisible(true)}
>
提交审核
</Button>
)}
isEdit
/>
<VerifyModal
visible={visible}
confirmLoading={confirmLoading}
onSubmit={handleSubmit}
onVisible={() => setVisible(false)}
/>
</>
);
};
export default RepairPrConfirmVerify;
\ No newline at end of file
import React from 'react';
import { usePageStatus } from '@/hooks/usePageStatus';
import DetailInfo from '../components/DetailInfo';
const RepairPrSubmitDetail: React.FC = () => {
const { id, creditId } = usePageStatus();
return (
<DetailInfo
id={id}
target="/memberCenter/payandSettle/creditApplication/quotaFormQuery/detail"
/>
);
};
export default RepairPrSubmitDetail;
\ No newline at end of file
import React, { useState, useRef } from 'react';
import { Card, Badge, Progress, Button } from 'antd';
import {
ClockCircleOutlined,
} from '@ant-design/icons';
import { history } from 'umi';
import { StandardTable } from 'god';
import moment from 'moment';
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 { useStateFilterSearchLinkageEffect } from '@/formSchema/effects/useFilterSearch';
import { useAsyncInitSelect } from '@/formSchema/effects/useAsyncInitSelect';
import { FORM_FILTER_PATH } from '@/formSchema/const';
import { coverColFiltersItem } from '@/utils';
import EyePreview from '@/components/EyePreview';
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';
import styles from './index.less';
const formActions = createFormActions();
const RepairPrSubmit: React.FC = () => {
const ref = useRef<any>({});
const defaultColumns: ColumnType<any>[] = [
{
title: '申请单号',
dataIndex: 'applyNo',
align: 'center',
render: (text, record) => (
<>
<EyePreview
url={`/memberCenter/afterService/repairManage/repairPrSubmit/detail?id=${record.id}`}
>
{text}
</EyePreview>
</>
),
},
{
title: '申请单摘要',
dataIndex: 'parentMemberName',
align: 'center',
},
{
title: '单据时间',
dataIndex: 'created',
align: 'center',
},
{
title: '外部状态',
dataIndex: 'outerStatusName',
align: 'center',
filters: [],
onFilter: (value, record) => record.outerStatus === value,
render: (text, record) => (
<StatusTag type="success" title="售后完成" />
),
},
{
title: '内部状态',
dataIndex: 'innerStatusName',
align: 'center',
filters: [],
onFilter: (value, record) => record.innerStatus === value,
render: (text, record) => <Badge color={'#6C9CEB'} text="待确认售后完成" />,
},
{
title: '操作',
dataIndex: 'option',
align: 'center',
render: (text, record) => (
<>
<Button
type="link"
onClick={() => history.push(`/memberCenter/afterService/repairManage/repairPrSubmit/verify?id=${record.id}`)}
>
提交审核
</Button>
</>
),
},
];
const [columns, setColumns] = useState<any[]>(defaultColumns);
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,
});
};
// 初始化高级筛选选项
const fetchSearchItems = async () => {
// const res = await PublicApi.getPayCreditApplyPageItemsByConsumer();
// if (res.code === 1000) {
// const { data } = res;
// const {
// outerStatusList = [],
// innerStatusList = [],
// } = data;
// 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),
// );
// 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 {};
};
return (
<PageHeaderWrapper>
<Card>
<StandardTable
tableProps={{
rowKey: 'id',
}}
columns={columns}
currentRef={ref}
fetchTableData={(params: any) => fetchListData(params)}
controlRender={
<NiceForm
actions={formActions}
onSubmit={values => ref.current.reload(values)}
effects={($, actions) => {
useStateFilterSearchLinkageEffect(
$,
actions,
'applyNo',
FORM_FILTER_PATH,
);
useAsyncInitSelect(
['innerStatus', 'outerStatus'],
fetchSearchItems,
);
}}
schema={listSearchSchema}
/>
}
/>
</Card>
</PageHeaderWrapper>
);
};
export default RepairPrSubmit;
\ No newline at end of file
/*
* @Author: XieZhiXiong
* @Date: 2020-09-29 10:03:06
* @LastEditors: XieZhiXiong
* @LastEditTime: 2020-11-04 18:43:24
* @Description:
*/
import { ISchema } from '@formily/antd';
import { FORM_FILTER_PATH } from '@/formSchema/const';
import { UPLOAD_TYPE } from '@/constants';
export const listSearchSchema: ISchema = {
type: 'object',
properties: {
megaLayout: {
type: 'object',
'x-component': 'mega-layout',
properties: {
applyNo: {
type: 'string',
'x-component': 'Search',
'x-component-props': {
placeholder: '搜索',
align: 'flex-left',
tip: '输入 申请单号 进行搜索',
},
},
[FORM_FILTER_PATH]: {
type: 'object',
'x-component': 'mega-layout',
'x-component-props': {
grid: true,
full: true,
autoRow: true,
columns: 6,
},
properties: {
abstract: {
type: 'string',
'x-component-props': {
placeholder: '申请单摘要',
allowClear: true,
},
},
'[startTime, endTime]': {
type: 'string',
default: '',
'x-component': 'dateSelect',
'x-component-props': {
placeholder: '单据时间(全部)',
allowClear: true,
},
},
supplier: {
type: 'string',
enum: [],
'x-component-props': {
placeholder: '供应会员(全部)',
allowClear: true,
},
},
submit: {
'x-component': 'Submit',
'x-mega-props': {
span: 1,
},
'x-component-props': {
children: '查询',
},
},
},
},
},
},
},
};
\ No newline at end of file
/*
* @Author: XieZhiXiong
* @Date: 2020-11-04 17:22:07
* @LastEditors: XieZhiXiong
* @LastEditTime: 2020-11-04 19:01:31
* @Description:
*/
import React, { useState } from 'react';
import { Button } from 'antd';
import { history } from 'umi';
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 RepairPrSubmitVerify: React.FC = () => {
const { id, creditId } = usePageStatus();
const [visible, setVisible] = useState(false);
const [confirmLoading, setConfirmLoading] = useState(false);
const handleSubmit = values => {
};
return (
<>
<DetailInfo
id={id}
target="/memberCenter/payandSettle/creditApplication/quotaFormQuery/detail"
headExtra={(
<Button
type="primary"
icon={<FormOutlined />}
onClick={() => setVisible(true)}
>
单据确认
</Button>
)}
isEdit
/>
<VerifyModal
visible={visible}
confirmLoading={confirmLoading}
onSubmit={handleSubmit}
onVisible={() => setVisible(false)}
/>
</>
);
};
export default RepairPrSubmitVerify;
\ No newline at end of file
import React from 'react';
import { usePageStatus } from '@/hooks/usePageStatus';
import DetailInfo from '../components/DetailInfo';
const RepairQueryDetail: React.FC = () => {
const { id, creditId } = usePageStatus();
return (
<DetailInfo
id={id}
target="/memberCenter/payandSettle/creditApplication/quotaFormQuery/detail"
/>
);
};
export default RepairQueryDetail;
\ No newline at end of file
import React, { useState, useRef } from 'react';
import { Card, Badge, Progress, Button } from 'antd';
import {
ClockCircleOutlined,
} from '@ant-design/icons';
import { StandardTable } from 'god';
import moment from 'moment';
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 { useStateFilterSearchLinkageEffect } from '@/formSchema/effects/useFilterSearch';
import { useAsyncInitSelect } from '@/formSchema/effects/useAsyncInitSelect';
import { FORM_FILTER_PATH } from '@/formSchema/const';
import { coverColFiltersItem } from '@/utils';
import EyePreview from '@/components/EyePreview';
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';
import styles from './index.less';
const formActions = createFormActions();
const RepairManageQuery: React.FC = () => {
const ref = useRef<any>({});
const defaultColumns: ColumnType<any>[] = [
{
title: '申请单号',
dataIndex: 'applyNo',
align: 'center',
render: (text, record) => (
<>
<EyePreview
url={`/memberCenter/afterService/repairManage/repairQuery/detail?id=${record.id}`}
>
{text}
</EyePreview>
</>
),
},
{
title: '申请单摘要',
dataIndex: 'parentMemberName',
align: 'center',
},
{
title: '单据时间',
dataIndex: 'created',
align: 'center',
},
{
title: '外部状态',
dataIndex: 'outerStatusName',
align: 'center',
filters: [],
onFilter: (value, record) => record.outerStatus === value,
render: (text, record) => (
<StatusTag type="success" title="售后完成" />
),
},
{
title: '内部状态',
dataIndex: 'innerStatusName',
align: 'center',
filters: [],
onFilter: (value, record) => record.innerStatus === value,
render: (text, record) => <Badge color={'#6C9CEB'} text="待确认售后完成" />,
},
];
const [columns, setColumns] = useState<any[]>(defaultColumns);
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,
});
};
// 初始化高级筛选选项
const fetchSearchItems = async () => {
// const res = await PublicApi.getPayCreditApplyPageItemsByConsumer();
// if (res.code === 1000) {
// const { data } = res;
// const {
// outerStatusList = [],
// innerStatusList = [],
// } = data;
// 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),
// );
// 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 {};
};
return (
<PageHeaderWrapper>
<Card>
<StandardTable
tableProps={{
rowKey: 'id',
}}
columns={columns}
currentRef={ref}
fetchTableData={(params: any) => fetchListData(params)}
controlRender={
<NiceForm
actions={formActions}
onSubmit={values => ref.current.reload(values)}
effects={($, actions) => {
useStateFilterSearchLinkageEffect(
$,
actions,
'applyNo',
FORM_FILTER_PATH,
);
useAsyncInitSelect(
['innerStatus', 'outerStatus'],
fetchSearchItems,
);
}}
schema={listSearchSchema}
/>
}
/>
</Card>
</PageHeaderWrapper>
);
};
export default RepairManageQuery;
\ No newline at end of file
/*
* @Author: XieZhiXiong
* @Date: 2020-09-29 10:03:06
* @LastEditors: XieZhiXiong
* @LastEditTime: 2020-11-04 18:43:15
* @Description:
*/
import { ISchema } from '@formily/antd';
import { FORM_FILTER_PATH } from '@/formSchema/const';
import { UPLOAD_TYPE } from '@/constants';
export const listSearchSchema: ISchema = {
type: 'object',
properties: {
megaLayout: {
type: 'object',
'x-component': 'mega-layout',
properties: {
applyNo: {
type: 'string',
'x-component': 'Search',
'x-component-props': {
placeholder: '搜索',
align: 'flex-left',
tip: '输入 申请单号 进行搜索',
},
},
[FORM_FILTER_PATH]: {
type: 'object',
'x-component': 'mega-layout',
'x-component-props': {
grid: true,
full: true,
autoRow: true,
columns: 6,
},
properties: {
abstract: {
type: 'string',
'x-component-props': {
placeholder: '申请单摘要',
allowClear: true,
},
},
'[startTime, endTime]': {
type: 'string',
default: '',
'x-component': 'dateSelect',
'x-component-props': {
placeholder: '单据时间(全部)',
allowClear: true,
},
},
supplier: {
type: 'string',
enum: [],
'x-component-props': {
placeholder: '供应会员(全部)',
allowClear: true,
},
},
outerStatus: {
type: 'string',
default: undefined,
enum: [],
'x-component-props': {
placeholder: '外部状态(全部)',
allowClear: true,
},
},
innerStatus: {
type: 'string',
default: undefined,
enum: [],
'x-component-props': {
placeholder: '内部状态(全部)',
allowClear: true,
},
},
submit: {
'x-component': 'Submit',
'x-mega-props': {
span: 1,
},
'x-component-props': {
children: '查询',
},
},
},
},
},
},
},
};
\ No newline at end of file
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