提交 74586053 作者: 龚洪江

功能:飞手认证,客户实名认证联调

上级 af391b01
...@@ -249,3 +249,16 @@ export type listAuthPageType = InterItemFunction< ...@@ -249,3 +249,16 @@ export type listAuthPageType = InterItemFunction<
createTime: string; createTime: string;
}[] }[]
>; >;
//实名认证详情返回类型
export type authDetailType = InterFunction<
{ id: number },
{
backIdImg: string;
checkStatus: number;
frontIdImg: string;
id: number;
idNumber: string;
userAccountId: number;
userName: string;
}
>;
import { InterFunction, InterItemFunction } from '~/api/interface'; import { InterFunction, InterItemFunction } from '~/api/interface';
//飞手列表 //飞手列表
type flyerItemType = {
abilityUrl: string;
age: number;
areaNumber: number;
auditStatus: number;
createTime: string;
id: number;
individualResume: string;
licenseNumber: number;
licenseType: string;
licenseUrl: string;
phoneNum: number;
pilotAbility: {
abilityId: number;
abilityName: string;
id: number;
}[];
remark: string;
residentCity: string;
sex: number;
timeOfApplication: string;
updateTime: string;
userAccountId: number;
userName: number;
yearsOfWorking: number;
};
export type backListPilotType = InterItemFunction< export type backListPilotType = InterItemFunction<
{ {
abilityId?: number; abilityId?: number;
...@@ -10,32 +36,35 @@ export type backListPilotType = InterItemFunction< ...@@ -10,32 +36,35 @@ export type backListPilotType = InterItemFunction<
id?: number; id?: number;
licenseType?: string; licenseType?: string;
}, },
flyerItemType[]
>;
//修改备注
export type updateRemarkType = InterFunction<{ id: number; remark: string }, any>;
//能力类型
export type abilityListType = InterFunction<any, { abilityId: number; abilityName: string }[]>;
//飞手认证日志类型
export type backPilotLogListType = InterItemFunction<
{ accountNumber?: string },
{ {
abilityUrl: string; certificationDate: number;
age: number; certificationMessage: number;
areaNumber: number;
auditStatus: number;
createTime: string; createTime: string;
id: number; id: number;
individualResume: string; operatorUserAccount: number;
licenseNumber: number; operatorUserId: number;
licenseType: string; operatorUserName: number;
licenseUrl: string;
phoneNum: number; phoneNum: number;
pilotAbility: {
abilityId: number;
abilityName: string;
id: number;
}[];
remark: string;
residentCity: string;
sex: number;
timeOfApplication: string;
updateTime: string; updateTime: string;
userAccountId: number; userAccountId: number;
userName: number; userName: number;
yearsOfWorking: number;
}[] }[]
>; >;
//能力类型 //飞手详情
export type abilityListType = InterFunction<any, { abilityId: number; abilityName: string }[]>; export type backDetailPilotType = InterFunction<{ id: number }, flyerItemType>;
//飞手审批
export type updateAuditStatusType = InterFunction<
{ auditStatus: number; reasonId?: number; id: number },
any
>;
//飞手审批不通过原因列表
export type backListReasonType = InterFunction<any, { id: number; reason: string }[]>;
...@@ -2,6 +2,7 @@ import axios from '../request'; ...@@ -2,6 +2,7 @@ import axios from '../request';
import { import {
applyTagDetails, applyTagDetails,
approvalApplyTag, approvalApplyTag,
authDetailType,
changeUserTagNew, changeUserTagNew,
changeUserTagType, changeUserTagType,
CompanyListTag, CompanyListTag,
...@@ -59,4 +60,7 @@ export class CustomManageAPI { ...@@ -59,4 +60,7 @@ export class CustomManageAPI {
// 客户-实名认证列表 // 客户-实名认证列表
static getListAuth: listAuthPageType = (data) => static getListAuth: listAuthPageType = (data) =>
axios.post('/userapp/real-name-auth/listPage', data); axios.post('/userapp/real-name-auth/listPage', data);
// 客户-实名认证详情
static getAuthDetail: authDetailType = (params) =>
axios.get('/userapp/real-name-auth/detail', { params });
} }
import { abilityListType, backListPilotType } from '~/api/interface/flyerCenterType'; import {
abilityListType,
backDetailPilotType,
backListPilotType,
backListReasonType,
backPilotLogListType,
updateAuditStatusType,
updateRemarkType,
} from '~/api/interface/flyerCenterType';
import axios from '../request'; import axios from '../request';
export class FlyerCenterAPI { export class FlyerCenterAPI {
//飞手列表 //飞手列表
static getBackListPilot: backListPilotType = (data) => static getBackListPilot: backListPilotType = (data) =>
axios.post('/userapp/pilot/backListPilot', data); axios.post('/userapp/pilot/backListPilot', data);
//修改备注
static updateRemark: updateRemarkType = (data) => axios.post('/userapp/pilot/updateRemark', data);
// 飞手能力类型 // 飞手能力类型
static getAbilityList: abilityListType = () => axios.get('/userapp/pilot/abilityList'); static getAbilityList: abilityListType = () => axios.get('/userapp/pilot/abilityList');
// 飞手认证日志
static getBackPilotLogList: backPilotLogListType = (data) =>
axios.post('/userapp/pilot/backPilotLogList', data);
// 飞手详情
static getBackDetailPilot: backDetailPilotType = (params) =>
axios.get('/userapp/pilot/backDetailPilot', { params });
// 飞手审批
static updateAuditStatus: updateAuditStatusType = (data) =>
axios.post('/userapp/pilot/updateAuditStatus', data);
// 飞手审批不通过原因
static getBackListReason: backListReasonType = () => axios.get('/userapp/pilot/backListReason');
} }
import { CustomManageAPI } from '~/api';
import { useSearchParams, useNavigate } from 'react-router-dom';
import { useEffect, useState } from 'react';
import { InterDataType } from '~/api/interface';
import { authDetailType } from '~/api/interface/customManageType';
import { Button, Descriptions, Image } from 'antd';
//实名认证详情返回类信息
type detailType = InterDataType<authDetailType>;
const CustomVerificationDetail = () => {
const [searchParams] = useSearchParams();
const navigate = useNavigate();
const [detail, setDetail] = useState<detailType>();
const getAuthDetail = (id: number) => {
CustomManageAPI.getAuthDetail({ id }).then(({ result }) => {
setDetail(result);
});
};
//返回
const backRoute = () => {
navigate(-1);
};
useEffect(() => {
getAuthDetail(Number(searchParams.get('id')));
}, []);
return (
<div className='custom-verification-detail'>
<Descriptions
title='认证信息'
bordered
column={2}
extra={
<Button type='primary' onClick={backRoute}>
返回
</Button>
}
>
<Descriptions.Item label='姓名'>{detail?.userName}</Descriptions.Item>
<Descriptions.Item label='身份证号码'>{detail?.idNumber}</Descriptions.Item>
<Descriptions.Item label='身份证正面'>
<Image src={detail?.frontIdImg} width={50} />
</Descriptions.Item>
<Descriptions.Item label='身份证反面'>
<Image src={detail?.backIdImg} width={50} />
</Descriptions.Item>
</Descriptions>
</div>
);
};
export default CustomVerificationDetail;
import SearchBox, { searchColumns as searchColumnsType } from '~/components/search-box'; import SearchBox, { searchColumns as searchColumnsType } from '~/components/search-box';
import { Table } from 'antd'; import { Button, Table } from 'antd';
import { ColumnsType } from 'antd/es/table'; import { ColumnsType } from 'antd/es/table';
import { useEffect, useState } from 'react'; import { useEffect, useState } from 'react';
import { CustomManageAPI } from '~/api'; import { CustomManageAPI } from '~/api';
import { InterDataType, InterReqListType, PaginationProps } from '~/api/interface'; import { InterDataType, InterReqListType, PaginationProps } from '~/api/interface';
import { listAuthPageType } from '~/api/interface/customManageType'; import { listAuthPageType } from '~/api/interface/customManageType';
import { useNavigate } from 'react-router-dom';
//实名认证列表返回类型 //实名认证列表返回类型
type listAuthType = InterDataType<listAuthPageType>['list']; type listAuthType = InterDataType<listAuthPageType>['list'];
...@@ -12,6 +13,8 @@ type listAuthType = InterDataType<listAuthPageType>['list']; ...@@ -12,6 +13,8 @@ type listAuthType = InterDataType<listAuthPageType>['list'];
type listAuthParametersType = InterReqListType<listAuthPageType>; type listAuthParametersType = InterReqListType<listAuthPageType>;
const CustomVerification = () => { const CustomVerification = () => {
const navigate = useNavigate();
const searchColumns: searchColumnsType[] = [ const searchColumns: searchColumnsType[] = [
{ {
name: 'keyword', name: 'keyword',
...@@ -54,6 +57,11 @@ const CustomVerification = () => { ...@@ -54,6 +57,11 @@ const CustomVerification = () => {
{ {
title: '操作', title: '操作',
align: 'center', align: 'center',
render: (_text: string, record) => (
<Button type='link' onClick={() => toCustomVerificationDetail(record)}>
详情
</Button>
),
}, },
]; ];
const [tableData, setTableData] = useState<listAuthType>([]); const [tableData, setTableData] = useState<listAuthType>([]);
...@@ -89,6 +97,10 @@ const CustomVerification = () => { ...@@ -89,6 +97,10 @@ const CustomVerification = () => {
setQuery(value); setQuery(value);
getAuthList(value); getAuthList(value);
}; };
//认证详情
const toCustomVerificationDetail = (record: listAuthType[0]) => {
navigate({ pathname: '/customManage/customVerificationDetail', search: `id=${record.id}` });
};
useEffect(() => { useEffect(() => {
getAuthList(); getAuthList();
......
import SearchBox, { searchColumns as searchColumnsType } from '~/components/search-box';
import { Button, Table } from 'antd';
import { ColumnsType } from 'antd/es/table';
import { FlyerCenterAPI } from '~/api';
import { useEffect, useState } from 'react';
import { InterDataType, InterReqListType, PaginationProps } from '~/api/interface';
import { backPilotLogListType } from '~/api/interface/flyerCenterType';
import { useNavigate } from 'react-router-dom';
//日志列表返回类型
type logListType = InterDataType<backPilotLogListType>['list'];
//日志列表请求类型
type logParametersType = InterReqListType<backPilotLogListType>;
const FlyerAuthDaily = () => {
const navigate = useNavigate();
const searchColumns: searchColumnsType[] = [
{
label: '账号',
type: 'input',
placeholder: '请输入UID,姓名或手机号',
name: 'accountNumber',
},
];
const tableColumns: ColumnsType<logListType[0]> = [
{
title: '审批及认证时间',
align: 'center',
dataIndex: 'certificationDate',
},
{
title: '账号',
align: 'center',
dataIndex: 'userName',
},
{
title: '手机号',
align: 'center',
dataIndex: 'phoneNum',
},
{
title: '申请及审批信息',
align: 'center',
dataIndex: 'certificationMessage',
},
{
title: '操作人员',
align: 'center',
dataIndex: 'operatorUserName',
},
];
const [tableData, setTableData] = useState<logListType>([]);
const [pagination, setPagination] = useState<PaginationProps & { totalCount: number }>({
pageNo: 1,
pageSize: 10,
totalCount: 0,
});
const [query, setQuery] = useState<logParametersType>();
//认证日志列表
const getBackPilotLogList = (query?: logParametersType) => {
FlyerCenterAPI.getBackPilotLogList({
pageNo: pagination.pageNo,
pageSize: pagination.pageSize,
...query,
}).then(({ result }) => {
pagination.totalCount = result.totalCount;
setPagination(pagination);
setTableData(result.list || []);
});
};
//分页
const paginationChange = (pageNo: number, pageSize: number) => {
pagination.pageNo = pageNo;
pagination.pageSize = pageSize;
getBackPilotLogList(query);
};
//筛选成功
const searchSuccess = (value: logParametersType) => {
pagination.pageNo = 1;
pagination.pageSize = 10;
setQuery(value);
getBackPilotLogList(value);
};
//返回
const backRoute = () => {
navigate(-1);
};
useEffect(() => {
getBackPilotLogList();
}, []);
return (
<div className='flyer-auth-daily'>
<SearchBox
search={searchColumns}
searchData={searchSuccess}
otherChild={
<Button type='primary' onClick={backRoute}>
返回
</Button>
}
/>
<Table
columns={tableColumns}
dataSource={tableData}
pagination={{
total: pagination.totalCount,
pageSize: pagination.pageSize,
current: pagination.pageNo,
showSizeChanger: true,
showQuickJumper: true,
onChange: (page: number, pageSize: number) => paginationChange(page, pageSize),
showTotal: (total, range) => `当前 ${range[0]}-${range[1]} 条记录 / 共 ${total} 条数据`,
}}
/>
</div>
);
};
export default FlyerAuthDaily;
import { Form, message, Modal, ModalProps, Radio, RadioChangeEvent, Select } from 'antd';
import { FC, useState } from 'react';
import { FlyerCenterAPI } from '~/api';
import { InterDataType } from '~/api/interface';
import { backListReasonType } from '~/api/interface/flyerCenterType';
interface selfProps {
onCancel: () => void;
onOk: () => void;
flyerId: number;
}
//原因列表返回类型
type reasonType = InterDataType<backListReasonType>;
const ApproveModal: FC<ModalProps & selfProps> = ({ open, onCancel, onOk, flyerId }) => {
const [form] = Form.useForm();
const [auditStatus, setAuditStatus] = useState<number>(1);
const [reasonList, setReasonList] = useState<reasonType>([]);
const handleCancel = () => {
form.resetFields();
setAuditStatus(-1);
onCancel();
};
const handleOk = () => {
form.validateFields().then((values) => {
FlyerCenterAPI.updateAuditStatus({ ...values, id: flyerId }).then(({ code }) => {
if (code === '200') {
message.success('审批成功');
onOk();
form.resetFields();
setAuditStatus(-1);
}
});
});
};
const radioChange = (e: RadioChangeEvent) => {
if (!e.target.value) {
getBackListReason();
}
setAuditStatus(e.target.value);
};
//不通过原因列表
const getBackListReason = () => {
FlyerCenterAPI.getBackListReason().then(({ result }) => {
setReasonList(result || []);
});
};
return (
<Modal open={open} onCancel={handleCancel} onOk={handleOk} title='审批飞手'>
<Form form={form} initialValues={{ auditStatus: 1 }}>
<Form.Item label='状态' name='auditStatus'>
<Radio.Group onChange={radioChange}>
<Radio value={1}>已通过</Radio>
<Radio value={0}>未通过</Radio>
</Radio.Group>
</Form.Item>
{auditStatus ? (
''
) : (
<Form.Item
label='原因'
name='reasonId'
rules={[{ required: true, message: '请选择原因' }]}
>
<Select placeholder='请选择原因'>
{reasonList.map((v) => (
<Select.Option value={v.id} key={v.id}>
{v.reason}
</Select.Option>
))}
</Select>
</Form.Item>
)}
</Form>
</Modal>
);
};
export default ApproveModal;
.flyer-detail{
height: 100%;
padding: 20px;
box-sizing: border-box;
.ant-row{
height: 100%;
}
&-header{
display: flex;
align-items: center;
justify-content: space-between;
margin-bottom: 20px;
}
&-auth{
}
&-ability{
.ability-img{
margin-right: 10px;
margin-bottom: 10px;
}
}
}
import { FlyerCenterAPI } from '~/api';
import { useSearchParams, useNavigate } from 'react-router-dom';
import { useEffect, useState } from 'react';
import { InterDataType } from '~/api/interface';
import { backDetailPilotType } from '~/api/interface/flyerCenterType';
import { Button, Col, Descriptions, Image, Row, Tag } from 'antd';
import './index.scss';
import ApproveModal from './components/approveModal';
//飞手详情返回类型
type flyerDetailType = InterDataType<backDetailPilotType>;
const FlyerDetail = () => {
const [searchParams] = useSearchParams();
const navigate = useNavigate();
const [isApprove, setIsApprove] = useState<boolean>(false);
const [flyerId, setFlyerId] = useState<number>(-1);
const [flyerDetail, setFlyerDetail] = useState<flyerDetailType>();
const [approveModalShow, setApproveModalShow] = useState<boolean>(false);
const getFlyerDetail = (id: number) => {
FlyerCenterAPI.getBackDetailPilot({ id }).then(({ result }) => {
setFlyerDetail(result);
});
};
//审批弹窗
const approveFlyerClick = () => {
setApproveModalShow(true);
};
const approveModalCancel = () => {
setApproveModalShow(false);
};
const approveModalOk = () => {
setApproveModalShow(false);
getFlyerDetail(flyerId);
};
//返回
const backRoute = () => {
navigate(-1);
};
useEffect(() => {
getFlyerDetail(Number(searchParams.get('id')));
setFlyerId(Number(searchParams.get('id')));
setIsApprove(!!searchParams.get('isApprove'));
}, []);
return (
<div className='flyer-detail'>
<div className='flyer-detail-header'>
<div className='header-info'>
{flyerDetail?.userAccountId}({flyerDetail?.userName})
</div>
<div className='header-operate'>
{isApprove && flyerDetail?.auditStatus === 0 ? (
<Button type='primary' style={{ marginRight: '10px' }} onClick={approveFlyerClick}>
审批
</Button>
) : (
''
)}
<Button type='primary' onClick={backRoute}>
返回
</Button>
</div>
</div>
<Row justify='space-between'>
<Col span={11}>
<div className='flyer-detail-auth'>
<Descriptions title='执照认证' bordered column={1} labelStyle={{ width: '100px' }}>
<Descriptions.Item label='执照类型'>{flyerDetail?.licenseType}</Descriptions.Item>
<Descriptions.Item label='执照编号'>{flyerDetail?.licenseNumber}</Descriptions.Item>
<Descriptions.Item label='执照图片'>
<Image src={flyerDetail?.licenseUrl} width={100} />
</Descriptions.Item>
<Descriptions.Item label='个人简介'>
{flyerDetail?.individualResume}
</Descriptions.Item>
</Descriptions>
</div>
</Col>
<Col span={11}>
<div className='flyer-detail-ability'>
<Descriptions title='能力认证' bordered column={1} labelStyle={{ minWidth: '100px' }}>
<Descriptions.Item label='常驻地'>{flyerDetail?.residentCity}</Descriptions.Item>
<Descriptions.Item label='工作年限'>{flyerDetail?.yearsOfWorking}</Descriptions.Item>
<Descriptions.Item label='能力'>
{flyerDetail?.pilotAbility.map((v) => (
<Tag key={v.id}>{v.abilityName}</Tag>
))}
</Descriptions.Item>
<Descriptions.Item label='业务案例'>
{flyerDetail?.abilityUrl ? (
<Image.PreviewGroup items={JSON.parse(flyerDetail?.abilityUrl)}>
{JSON.parse(flyerDetail?.abilityUrl).map((v: string, index: number) => (
<Image src={v} key={index} width={100} rootClassName='ability-img' />
))}
</Image.PreviewGroup>
) : (
''
)}
</Descriptions.Item>
</Descriptions>
</div>
</Col>
</Row>
{/* 审批弹窗*/}
<ApproveModal
open={approveModalShow}
onCancel={approveModalCancel}
onOk={approveModalOk}
flyerId={flyerId}
/>
</div>
);
};
export default FlyerDetail;
import { Form, Input, message, Modal, ModalProps } from 'antd';
import { FC, useEffect } from 'react';
import { InterDataType } from '~/api/interface';
import { backListPilotType } from '~/api/interface/flyerCenterType';
import { FlyerCenterAPI } from '~/api';
//飞手列表返回类型
type flyerListType = InterDataType<backListPilotType>['list'];
interface selfProps {
onOk: () => void;
flyerItem: flyerListType[0] | undefined;
}
const UpdateRemarkModal: FC<ModalProps & selfProps> = ({ open, onCancel, onOk, flyerItem }) => {
const [form] = Form.useForm<{ remark: string }>();
const handleOk = () => {
if (flyerItem) {
form.validateFields().then((values) => {
FlyerCenterAPI.updateRemark({ id: flyerItem.id, ...values }).then(({ code }) => {
if (code === '200') {
message.success('编辑备注成功');
onOk();
}
});
});
}
};
useEffect(() => {
if (flyerItem) {
form.setFieldValue('remark', flyerItem.remark);
}
}, [flyerItem]);
return (
<Modal open={open} onCancel={onCancel} onOk={handleOk} title='备注修改'>
<Form form={form}>
<Form.Item label='备注' name='remark'>
<Input.TextArea placeholder='请输入备注' maxLength={70} showCount rows={4} />
</Form.Item>
</Form>
</Modal>
);
};
export default UpdateRemarkModal;
...@@ -6,6 +6,8 @@ import { useEffect, useState } from 'react'; ...@@ -6,6 +6,8 @@ import { useEffect, useState } from 'react';
import { InterDataType, InterReqListType, PaginationProps } from '~/api/interface'; import { InterDataType, InterReqListType, PaginationProps } from '~/api/interface';
import { backListPilotType } from '~/api/interface/flyerCenterType'; import { backListPilotType } from '~/api/interface/flyerCenterType';
import { getSecondDistrictInfoType } from '~/api/interface/commonType'; import { getSecondDistrictInfoType } from '~/api/interface/commonType';
import { useNavigate } from 'react-router-dom';
import UpdateRemarkModal from './components/updateRemarkModal';
//飞手列表返回类型 //飞手列表返回类型
type flyerListType = InterDataType<backListPilotType>['list']; type flyerListType = InterDataType<backListPilotType>['list'];
...@@ -15,6 +17,8 @@ type flyerListParameters = InterReqListType<backListPilotType>; ...@@ -15,6 +17,8 @@ type flyerListParameters = InterReqListType<backListPilotType>;
type locationType = InterDataType<getSecondDistrictInfoType>; type locationType = InterDataType<getSecondDistrictInfoType>;
const FlyerList = () => { const FlyerList = () => {
const navigate = useNavigate();
const [searchColumns, setSearchColumns] = useState<searchColumnsType[]>([ const [searchColumns, setSearchColumns] = useState<searchColumnsType[]>([
{ {
name: 'accountNumber', name: 'accountNumber',
...@@ -51,7 +55,7 @@ const FlyerList = () => { ...@@ -51,7 +55,7 @@ const FlyerList = () => {
const tableColumns: ColumnsType<flyerListType[0]> = [ const tableColumns: ColumnsType<flyerListType[0]> = [
{ {
title: 'UID', title: 'UID',
dataIndex: 'uid', dataIndex: 'userAccountId',
align: 'center', align: 'center',
}, },
{ {
...@@ -91,29 +95,43 @@ const FlyerList = () => { ...@@ -91,29 +95,43 @@ const FlyerList = () => {
title: '备注', title: '备注',
align: 'center', align: 'center',
dataIndex: 'remark', dataIndex: 'remark',
render: (text: string, record) => (
<Button type='link' onClick={() => updateRemarkClick(record)}>
{text || '--'}
</Button>
),
}, },
{ {
title: '操作', title: '操作',
align: 'center', align: 'center',
render: (_text: string, record) => ( render: (_text: string, record) => (
<> <>
<Button type='link' danger disabled={record.auditStatus !== 0}> <Button
type='link'
danger
disabled={record.auditStatus !== 0}
onClick={() => toFlyerApprove(record)}
>
审批 审批
</Button> </Button>
<Button type='link'>变更</Button> <Button type='link' onClick={() => toFlyerDetail(record)}>
<Button type='link'>详情</Button> 详情
</Button>
</> </>
), ),
}, },
]; ];
const [tableData, setTableData] = useState<flyerListType>([]); const [tableData, setTableData] = useState<flyerListType>([]);
const [currentTableItem, setCurrentTableItem] = useState<flyerListType[0]>();
const [query, setQuery] = useState<flyerListParameters>(); const [query, setQuery] = useState<flyerListParameters>();
const [pagination, setPagination] = useState<PaginationProps & { totalCount: number }>({ const [pagination, setPagination] = useState<PaginationProps & { totalCount: number }>({
pageNo: 1, pageNo: 1,
pageSize: 10, pageSize: 10,
totalCount: 0, totalCount: 0,
}); });
//修改备注弹窗
const [updateRemarkModalShow, setUpdateRemarkModalShow] = useState<boolean>(false);
//飞手列表 //飞手列表
const getFlyerList = (query?: flyerListParameters) => { const getFlyerList = (query?: flyerListParameters) => {
...@@ -165,6 +183,30 @@ const FlyerList = () => { ...@@ -165,6 +183,30 @@ const FlyerList = () => {
setSearchColumns([...searchColumns]); setSearchColumns([...searchColumns]);
}); });
}; };
//认证日志页面
const toFlyerAuthDaily = () => {
navigate('/flyerCenter/flyerAuthDaily');
};
//飞手审批页面
const toFlyerApprove = (record: flyerListType[0]) => {
navigate({ pathname: '/flyerCenter/flyerDetail', search: `id=${record.id}&isApprove=1` });
};
//飞手详情页面
const toFlyerDetail = (record: flyerListType[0]) => {
navigate({ pathname: '/flyerCenter/flyerApprove', search: `id=${record.id}` });
};
//修改备注
const updateRemarkClick = (record: flyerListType[0]) => {
setCurrentTableItem(record);
setUpdateRemarkModalShow(true);
};
const updateRemarkModalCancel = () => {
setUpdateRemarkModalShow(false);
};
const updateRemarkModalOk = () => {
getFlyerList(query);
setUpdateRemarkModalShow(false);
};
useEffect(() => { useEffect(() => {
getFlyerList(); getFlyerList();
...@@ -174,7 +216,15 @@ const FlyerList = () => { ...@@ -174,7 +216,15 @@ const FlyerList = () => {
return ( return (
<div className='flyer-list'> <div className='flyer-list'>
<SearchBox search={searchColumns} searchData={searchSuccess} /> <SearchBox
search={searchColumns}
searchData={searchSuccess}
sufFixBtn={
<Button type='primary' onClick={toFlyerAuthDaily}>
认证日志
</Button>
}
/>
<Table <Table
bordered bordered
columns={tableColumns} columns={tableColumns}
...@@ -190,6 +240,13 @@ const FlyerList = () => { ...@@ -190,6 +240,13 @@ const FlyerList = () => {
showTotal: (total, range) => `当前 ${range[0]}-${range[1]} 条记录 / 共 ${total} 条数据`, showTotal: (total, range) => `当前 ${range[0]}-${range[1]} 条记录 / 共 ${total} 条数据`,
}} }}
/> />
{/*修改备注*/}
<UpdateRemarkModal
open={updateRemarkModalShow}
onOk={updateRemarkModalOk}
onCancel={updateRemarkModalCancel}
flyerItem={currentTableItem}
/>
</div> </div>
); );
}; };
......
...@@ -79,7 +79,7 @@ const SkuAddOrEditModal: FC<ModalProps & selfProps> = ({ ...@@ -79,7 +79,7 @@ const SkuAddOrEditModal: FC<ModalProps & selfProps> = ({
return Promise.reject(new Error('请输入正整数')); return Promise.reject(new Error('请输入正整数'));
} }
} else { } else {
return Promise.reject(new Error('请输入库存')); return Promise.resolve();
} }
}; };
...@@ -153,7 +153,7 @@ const SkuAddOrEditModal: FC<ModalProps & selfProps> = ({ ...@@ -153,7 +153,7 @@ const SkuAddOrEditModal: FC<ModalProps & selfProps> = ({
editable: true, editable: true,
align: 'center', align: 'center',
dataIndex: 'stock', dataIndex: 'stock',
rules: [{ required: true, validator: stockPriceValidator }], rules: [{ required: false, validator: stockPriceValidator }],
inputType: 'number', inputType: 'number',
}, },
{ {
......
...@@ -56,7 +56,12 @@ import LoginView from '~/pages/common/login'; ...@@ -56,7 +56,12 @@ import LoginView from '~/pages/common/login';
import CustomListView from '~/pages/customManage/customList'; import CustomListView from '~/pages/customManage/customList';
import CustomMoneyView from '~/pages/customManage/customMoney'; import CustomMoneyView from '~/pages/customManage/customMoney';
import CustomMoneyDetail from '~/pages/customManage/customMoney/detail'; import CustomMoneyDetail from '~/pages/customManage/customMoney/detail';
const CustomVerificationView = React.lazy(() => import('~/pages/customManage/customVerification')); const CustomVerificationView = React.lazy(
() => import('~/pages/customManage/customVerification/list'),
); //实名认证
const CustomVerificationDetailView = React.lazy(
() => import('~/pages/customManage/customVerification/details'),
);
//资源管理 //资源管理
import MaterielManageView from '~/pages/resourceManage/materielManage'; import MaterielManageView from '~/pages/resourceManage/materielManage';
...@@ -117,7 +122,11 @@ const AddInstitutionsView = React.lazy( ...@@ -117,7 +122,11 @@ const AddInstitutionsView = React.lazy(
); //机构上传 ); //机构上传
//飞手中心 //飞手中心
const FlyerListView = React.lazy(() => import('~/pages/flyerCenter/flyerList')); const FlyerListView = React.lazy(() => import('~/pages/flyerCenter/flyerManage/flyerList')); //飞手列表
const FlyerAuthDailyView = React.lazy(
() => import('~/pages/flyerCenter/flyerManage/flyerAuthDaily'),
); //飞手认证日志;
const FlyerDetailsView = React.lazy(() => import('~/pages/flyerCenter/flyerManage/flyerDetail')); //飞手详情、飞手审批
// 系统管理 // 系统管理
import AccountManageView from '~/pages/systemManage/accountManage'; import AccountManageView from '~/pages/systemManage/accountManage';
...@@ -220,6 +229,17 @@ export const routerList: Array<RouteObjectType> = [ ...@@ -220,6 +229,17 @@ export const routerList: Array<RouteObjectType> = [
}, },
}, },
{ {
path: '/customManage/customVerificationDetail',
element: withLoadingComponent(<CustomVerificationDetailView />),
errorElement: <ErrorPage />,
meta: {
id: 240,
title: '实名认证详情',
hidden: true,
icon: <SolutionOutlined />,
},
},
{
path: '/customManage/customList/detail', path: '/customManage/customList/detail',
element: withLoadingComponent(<CustomListDetail />), element: withLoadingComponent(<CustomListDetail />),
errorElement: <ErrorPage />, errorElement: <ErrorPage />,
...@@ -990,6 +1010,39 @@ export const routerList: Array<RouteObjectType> = [ ...@@ -990,6 +1010,39 @@ export const routerList: Array<RouteObjectType> = [
icon: <UserOutlined />, icon: <UserOutlined />,
}, },
}, },
{
path: '/flyerCenter/flyerAuthDaily',
element: withLoadingComponent(<FlyerAuthDailyView />),
errorElement: <ErrorPage />,
meta: {
id: 1520,
title: '认证日志',
hidden: true,
icon: <UserOutlined />,
},
},
{
path: '/flyerCenter/flyerDetail',
element: withLoadingComponent(<FlyerDetailsView />),
errorElement: <ErrorPage />,
meta: {
id: 1530,
title: '飞手详情',
hidden: true,
icon: <UserOutlined />,
},
},
{
path: '/flyerCenter/flyerApprove',
element: withLoadingComponent(<FlyerDetailsView />),
errorElement: <ErrorPage />,
meta: {
id: 1540,
title: '飞手审批',
hidden: true,
icon: <UserOutlined />,
},
},
], ],
}, },
{ {
......
Markdown 格式
0%
您添加了 0 到此讨论。请谨慎行事。
请先完成此评论的编辑!
注册 或者 后发表评论