提交 57ecd804 作者: 龚洪江

修复:加盟入驻编辑可修改部分字段,实名认证,飞手中心

上级 3018428e
import { InterFunction, InterListFunction } from '~/api/interface';
import { InterFunction, InterItemFunction, InterListFunction } from '~/api/interface';
// 客户列表
export type listAppUserType = InterListFunction<
......@@ -189,6 +189,9 @@ export type editUserApplyTagDetails = InterFunction<
lon: number;
name: string;
score: number;
licenseImg: string;
remark: string;
attachmentList?: { userApplyTagId: number; url: string; type: number }[];
}
>;
// 后台-编辑服务商信息
......@@ -233,3 +236,16 @@ export type listUserRcdType = InterListFunction<
userSex: null;
}
>;
//实名认证列表返回类型
export type listAuthPageType = InterItemFunction<
{ keyword?: string },
{
id: number;
nickName: string;
phoneNum: string;
uid: string;
userName: string;
createTime: string;
}[]
>;
......@@ -10,6 +10,7 @@ import {
editUserApplyTag,
editUserApplyTagDetails,
listAppUserType,
listAuthPageType,
listUserApplyTag,
listUserRcdType,
userAccountUpdateType,
......@@ -55,4 +56,7 @@ export class CustomManageAPI {
// 裂变-邀请列表
static listUserRcd: listUserRcdType = (data) =>
axios.post('/userapp/user-account/listUserRcd', data);
// 客户-实名认证列表
static getListAuth: listAuthPageType = (data) =>
axios.post('/userapp/real-name-auth/listPage', data);
}
......@@ -110,11 +110,6 @@ $page-background: #f3f6ff;
justify-content: space-between;
align-items: center;
.logo-img {
width: 32px;
height: 32px;
border-radius: 4px;
}
.logo-text {
min-width: 100px;
......@@ -187,6 +182,7 @@ $page-background: #f3f6ff;
.ant-layout-header {
padding: 0 10px;
//line-height: normal;
}
.ant-layout-sider-collapsed {
......
import React, { useState } from 'react';
import { Header } from 'antd/es/layout/layout';
import { DownOutlined, UpOutlined } from '@ant-design/icons';
import { Button, Dropdown, MenuProps, Modal } from 'antd';
import { Button, Dropdown, Image, MenuProps, Modal } from 'antd';
import Logo from '../../../assets/icon/logo_big.png';
import './index.scss';
import { REMOVE_MENU, REMOVE_MENU_ID, SET_COLLAPSE } from '~/store/module/menu';
......@@ -60,7 +60,15 @@ export function TitleView() {
}}
>
<div className='layout-logo'>
<img src={userInfo.companyInfoVO.brandLogo || Logo} className='logo-img' alt='云享飞' />
<div className='logo-img'>
<Image
preview={false}
src={userInfo.companyInfoVO.brandLogo || Logo}
alt='云享飞'
width={32}
height={32}
/>
</div>
<div className='logo-text'>{userInfo.companyInfoVO.brandName || '云享飞管理后台'}</div>
<div onClick={setMenuCollapsed}>
<svg
......
......@@ -29,8 +29,6 @@ export const Uploader: React.FC<PropsType> = (props) => {
fileSize: 2,
fileLength: 1,
fileType: ['image/png', 'image/jpeg', 'image/jpg', 'image/gif'],
// eslint-disable-next-line @typescript-eslint/no-empty-function
onChange: () => {},
defaultFileList: [],
disabled: false,
};
......@@ -56,7 +54,7 @@ export const Uploader: React.FC<PropsType> = (props) => {
listType,
fileList,
beforeUpload: (res) => {
// console.log(fileType, res.type);
console.log('文件类型-->', res);
const isType = fileType?.includes(res.type);
const isSize = res.size / 1024 / 1024 < (fileSize || 2);
if (!isType) {
......@@ -79,21 +77,13 @@ export const Uploader: React.FC<PropsType> = (props) => {
// 上传到服务器
const formData = new FormData();
formData.append('uploadFile', res.file);
CommonAPI.uploadOssBP(formData).then(
// eslint-disable-next-line @typescript-eslint/ban-ts-comment
// @ts-ignore
//(val: { result: { filePath: string } }) => {
({ result }) => {
// console.log(result);
CommonAPI.uploadOssBP(formData).then(({ result }) => {
setFileList([
...fileList,
{
id: new Date().getTime(),
uid: new Date().getTime(),
// eslint-disable-next-line @typescript-eslint/ban-ts-comment
// @ts-ignore
name: res.file.name,
// url: val.result.filePath,
name: (res.file as any).name,
url: result,
},
]);
......@@ -102,15 +92,11 @@ export const Uploader: React.FC<PropsType> = (props) => {
{
id: new Date().getTime(),
uid: new Date().getTime(),
// eslint-disable-next-line @typescript-eslint/ban-ts-comment
// @ts-ignore
name: res.file.name,
// url: val.result.filePath,
name: (res.file as any).name,
url: result,
},
]);
},
);
});
} else {
setFileList([...fileList, res.file]);
onChange?.([...fileList, res.file]);
......
......@@ -131,6 +131,7 @@ function LoginView() {
{qrCodeUrl ? (
<Image src={qrCodeUrl} alt='' width={200} height={200} preview={false} />
) : (
// 加载二维码
<QRCode value='https://ant.design/' status='loading' />
)}
</div>
......
......@@ -5,9 +5,11 @@ import {
listUserApplyTag,
} from '~/api/interface/customManageType';
import { InterDataType, InterListType, InterReqType } from '~/api/interface';
import { Button, Form, Input, message, Modal, Rate, Select } from 'antd';
import { Button, Form, Image, Input, message, Modal, Rate, Select } from 'antd';
import { CustomManageAPI } from '~/api';
import SelectMapModal from '~/components/select-map';
import { Uploader } from '~/components/uploader';
import { UploadOutlined } from '@ant-design/icons';
// 数据类型
type DataType = InterDataType<editUserApplyTagDetails>;
......@@ -36,6 +38,10 @@ const AddEditModal: FC<propType> = (props) => {
const [cooperationList, setCooperationList] = useState<{ label: string; value: number }[]>([]);
// 选择的地址
const [address, setAddress] = useState<{ lat: number; lon: number; address: string }>();
//附件
const [fileList, setFileList] = useState<
{ id: number; uid: number; url: string; name: string }[]
>([]);
// 关闭弹窗
const handleCancel = () => {
form.resetFields();
......@@ -51,9 +57,17 @@ const AddEditModal: FC<propType> = (props) => {
...res.result,
name: res.result.name || data?.companyName,
address: res.result.address || detail?.address,
attachmentList: res.result.attachmentList || undefined,
});
setDetail(res.result);
// console.log('获取审批详情 -->', res.result);
const fileList =
res.result.attachmentList?.map((v) => ({
id: Math.random(),
uid: Math.random(),
name: v.url.split('/')[v.url.split('/').length - 1],
url: v.url,
})) || [];
setFileList(fileList);
}
};
// 获取加盟列表
......@@ -64,6 +78,24 @@ const AddEditModal: FC<propType> = (props) => {
setCooperationList(list.map((i) => ({ label: i.tagName, value: i.id })));
}
};
//附件上传成功
const attachmentUploadSuccess = (
value: { id: number; uid: number; url: string; name: string }[],
) => {
setFileList(value);
form.setFieldValue(
'attachmentList',
value.map((v) => ({
type: ['.doc', '.docx', '.xls', '.xlsx', '.ppt', '.pptx', '.pdf'].includes(
v.url.match(/\.[^.]+$/)?.[0] as any,
)
? 1
: 0,
url: v.url,
})),
);
};
// 确认事件
const handleOk = () => {
form
......@@ -157,6 +189,40 @@ const AddEditModal: FC<propType> = (props) => {
>
<Rate allowClear />
</Form.Item>
<Form.Item label='营业执照'>
<Image src={detail?.licenseImg} width={50} height={50} />
</Form.Item>
<Form.Item label='附件' name='attachmentList'>
<Uploader
fileUpload
listType='text'
defaultFileList={fileList}
fileLength={10}
fileSize={50}
onChange={attachmentUploadSuccess}
fileType={[
'application/vnd.openxmlformats-officedocument.wordprocessingml.document',
'application/msword',
'application/vnd.openxmlformats-officedocument.spreadsheetml.sheet',
'application/vnd.ms-excel',
'application/pdf',
'application/vnd.ms-powerpoint',
'application/vnd.openxmlformats-officedocument.presentationml.presentation',
'image/png',
'image/jpeg',
'image/jpg',
'image/gif',
'image/bmp',
]}
>
<Button type='primary' icon={<UploadOutlined />}>
上传
</Button>
</Uploader>
</Form.Item>
<Form.Item label='备注' name='remark'>
<Input.TextArea placeholder='请输入备注' maxLength={70} showCount rows={4} />
</Form.Item>
</Form>
</Modal>
<SelectMapModal
......
import SearchBox, { searchColumns as searchColumnsType } from '~/components/search-box';
import { Table } from 'antd';
import { ColumnsType } from 'antd/es/table';
import { useEffect, useState } from 'react';
import { CustomManageAPI } from '~/api';
import { InterDataType, InterReqListType, PaginationProps } from '~/api/interface';
import { listAuthPageType } from '~/api/interface/customManageType';
//实名认证列表返回类型
type listAuthType = InterDataType<listAuthPageType>['list'];
//实名认证列表请求类型
type listAuthParametersType = InterReqListType<listAuthPageType>;
const CustomVerification = () => {
const searchColumns: searchColumnsType[] = [
{
name: 'keyword',
label: '用户信息',
type: 'input',
placeholder: '请输入UID,姓名或手机号',
},
];
const tableColumns: ColumnsType<any> = [
{
title: 'UID',
align: 'center',
dataIndex: 'uid',
},
{
title: '昵称',
align: 'center',
dataIndex: 'nickName',
},
{
title: '姓名',
align: 'center',
dataIndex: 'userName',
},
{
title: '手机号',
align: 'center',
dataIndex: 'phoneNum',
},
{
title: '时间',
align: 'center',
dataIndex: 'createTime',
},
{
title: '备注',
align: 'center',
dataIndex: 'remark',
},
{
title: '操作',
align: 'center',
},
];
const [tableData, setTableData] = useState<listAuthType>([]);
const [query, setQuery] = useState<listAuthParametersType>();
const [pagination, setPagination] = useState<PaginationProps & { totalCount: number }>({
pageNo: 1,
pageSize: 10,
totalCount: 0,
});
const getAuthList = (query?: listAuthParametersType) => {
CustomManageAPI.getListAuth({
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;
getAuthList(query);
};
//筛选成功
const searchSuccess = (value: listAuthParametersType) => {
pagination.pageNo = 1;
pagination.pageSize = 10;
setQuery(value);
getAuthList(value);
};
useEffect(() => {
getAuthList();
}, []);
return (
<div className='custom-verification'>
<SearchBox search={searchColumns} searchData={searchSuccess} />
<Table
columns={tableColumns}
bordered
dataSource={tableData}
rowKey='id'
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 CustomVerification;
import SearchBox, { searchColumns as searchColumnsType } from '~/components/search-box';
import { Table } from 'antd';
import { ColumnsType } from 'antd/es/table';
const FlyerList = () => {
const searchColumns: searchColumnsType[] = [
{
name: '',
label: '账号',
placeholder: '请输入UID,姓名或手机号',
type: 'input',
},
{
name: '',
label: '执照认证状态',
placeholder: '请选择执照认证状态',
type: 'select',
options: [],
},
{
name: '',
label: '场景培训认证',
placeholder: '请选择场景培训认证状态',
type: 'select',
options: [],
},
];
const tableColumns: ColumnsType<any> = [
{
title: 'UID',
align: 'center',
},
{
title: '姓名',
align: 'center',
},
{
title: '执照认证状态',
align: 'center',
},
{
title: '场景培训认证',
align: 'center',
},
{
title: '手机号',
align: 'center',
},
{
title: '申请认证时间',
align: 'center',
},
{
title: '备注',
align: 'center',
},
{
title: '操作',
align: 'center',
},
];
return (
<div className='flyer-list'>
<SearchBox search={searchColumns} />
<Table bordered columns={tableColumns} />
</div>
);
};
export default FlyerList;
......@@ -202,7 +202,7 @@ const AddEditModal: React.FC<propType> = (props) => {
wrapperCol={{ span: 20 }}
>
<RichText
value={form.getFieldValue('detailContent')}
richTextContent={form.getFieldValue('detailContent')}
onChange={(e) => form.setFieldValue('detailContent', e)}
height={250}
/>
......
......@@ -56,6 +56,8 @@ import LoginView from '~/pages/common/login';
import CustomListView from '~/pages/customManage/customList';
import CustomMoneyView from '~/pages/customManage/customMoney';
import CustomMoneyDetail from '~/pages/customManage/customMoney/detail';
const CustomVerificationView = React.lazy(() => import('~/pages/customManage/customVerification'));
//资源管理
import MaterielManageView from '~/pages/resourceManage/materielManage';
import MaterielManageDetail from '~/pages/resourceManage/materielManage/detail';
......@@ -106,14 +108,16 @@ const CategoryDetail = React.lazy(() => import('~/pages/categoryManage/category/
// 目录管理
const DirectoryManage = React.lazy(() => import('~/pages/categoryManage/directoryManage'));
//飞手培训
//执照培训
const InstitutionsListView = React.lazy(
() => import('~/pages/pilotTraining/ licensureExamination/institutionsList'),
);
//机构上传
); //机构列表
const AddInstitutionsView = React.lazy(
() => import('~/pages/pilotTraining/ licensureExamination/addOrEditInstitution'),
);
); //机构上传
//飞手中心
const FlyerListView = React.lazy(() => import('~/pages/flyerCenter/flyerList'));
// 系统管理
import AccountManageView from '~/pages/systemManage/accountManage';
......@@ -128,7 +132,7 @@ const CompanyDetailView = React.lazy(
);
import AccountLimit from '~/pages/systemManage/limitManage/roleList'; //账号权限
import LimitInfo from '~/pages/systemManage/limitManage/limitInfo';
import CustomListDetail from '~/pages/customManage/customList/detail'; //权限信息
import CustomListDetail from '~/pages/customManage/customList/detail';
// const IndustryListView = React.lazy(() => import('~/pages/mallManage/industryManage/industryList')); //行业列表
// const IndustryDetailView = React.lazy(
......@@ -206,6 +210,16 @@ export const routerList: Array<RouteObjectType> = [
},
},
{
path: '/customManage/customVerification',
element: withLoadingComponent(<CustomVerificationView />),
errorElement: <ErrorPage />,
meta: {
id: 230,
title: '实名认证',
icon: <SolutionOutlined />,
},
},
{
path: '/customManage/customList/detail',
element: withLoadingComponent(<CustomListDetail />),
errorElement: <ErrorPage />,
......@@ -957,6 +971,28 @@ export const routerList: Array<RouteObjectType> = [
],
},
{
path: '/flyerCenter',
element: <LayoutView />,
errorElement: <ErrorPage />,
meta: {
id: 1500,
icon: <UserOutlined />,
title: '飞手中心',
},
children: [
{
path: '/flyerCenter/flyerList',
element: withLoadingComponent(<FlyerListView />),
errorElement: <ErrorPage />,
meta: {
id: 1510,
title: '飞手列表',
icon: <UserOutlined />,
},
},
],
},
{
path: '/systemManage',
element: <LayoutView />,
errorElement: <ErrorPage />,
......
Markdown 格式
0%
您添加了 0 到此讨论。请谨慎行事。
请先完成此评论的编辑!
注册 或者 后发表评论