提交 918b5503 作者: 龚洪江

Merge remote-tracking branch 'origin/develop' into develop

# Conflicts:
#	src/api/modules/resourceManageAPI.ts
...@@ -14,4 +14,4 @@ patches: ...@@ -14,4 +14,4 @@ patches:
images: images:
- name: REGISTRY/NAMESPACE/IMAGE:TAG - name: REGISTRY/NAMESPACE/IMAGE:TAG
newName: mmc-registry.cn-shenzhen.cr.aliyuncs.com/sharefly-dev/admin newName: mmc-registry.cn-shenzhen.cr.aliyuncs.com/sharefly-dev/admin
newTag: bb0a9023c9147423a9fb101f688c4b69293d073b newTag: 3bc8a75cbf914acbcfe5a2003a5edac6a7b3d56d
...@@ -60,7 +60,7 @@ ...@@ -60,7 +60,7 @@
"prettier": "^2.6.2", "prettier": "^2.6.2",
"sass": "^1.62.0", "sass": "^1.62.0",
"typescript": "^4.6.3", "typescript": "^4.6.3",
"vite": "^4.3.5", "vite": "^4.3.9",
"vite-tsconfig-paths": "^3.5.0" "vite-tsconfig-paths": "^3.5.0"
} }
} }
...@@ -75,3 +75,70 @@ export type changeUserTagType = InterFunction< ...@@ -75,3 +75,70 @@ export type changeUserTagType = InterFunction<
}, },
NonNullable<unknown> NonNullable<unknown>
>; >;
// 加盟标签列表
export type cooperationListTag = InterFunction<
NonNullable<unknown>,
{
createTime: string;
id: number;
tagDescription: string;
tagImg: string;
tagName: string;
}[]
>;
// 后台申请列表
export type listUserApplyTag = InterListFunction<
{
applyStatus?: number;
cooperationTagId?: number;
endTime?: string;
startTime?: string;
},
{
applyName: string;
applyPhone: string;
applyTime: string;
approvalStatus: number;
attachmentList: null;
cooperationTagId: number;
cooperationTagName: string;
id: number;
remark: string;
userAccountId: number;
}
>;
// 审批详情
export type applyTagDetails = InterFunction<
{
id?: number;
userAccountId?: number;
},
{
attachmentList: {
/**
* 附件类型:0:图片 1:文件
*/
type: number;
url: string;
}[];
companyName: string;
creditCode: string;
licenseImg: string;
remark: string;
}
>;
// 审批
export type approvalApplyTag = InterFunction<
{
id: number;
status: boolean;
},
NonNullable<unknown>
>;
// 强制删除
export type deleteApplyTag = InterFunction<
{
id: number;
},
NonNullable<unknown>
>;
...@@ -39,6 +39,49 @@ export type releaseTenderNewsAdd = InterFunction<any, any>; ...@@ -39,6 +39,49 @@ export type releaseTenderNewsAdd = InterFunction<any, any>;
export type releaseTenderNewsUpdate = InterFunction<any, any>; export type releaseTenderNewsUpdate = InterFunction<any, any>;
// 删除招标快讯 // 删除招标快讯
export type releaseTenderNewsDelete = InterFunction<{ id: number }, any>; export type releaseTenderNewsDelete = InterFunction<{ id: number }, any>;
// 查询-招标快讯详情列表-分页
export type releaseTenderNewsInfo = InterListFunction<
{
tenderNewsId?: number;
},
{
createTime: string;
id: number;
tenderContent: string;
tenderInfoNo: string;
tenderNewsId: number;
tenderPrice: number;
tenderTitle: string;
}
>;
// 修改-招标快讯详情
export type releaseTenderNewsInfoUpdate = InterListFunction<
{
id: number;
tenderContent?: string;
tenderPrice?: number;
tenderTitle?: string;
},
NonNullable<unknown>
>;
// 用户反馈列表-分页
export type releaseTenderNewsApplyList = InterListFunction<
{
tenderInfoId?: number;
tenderNewsId?: number;
userName?: string;
},
{
createTime: string;
id: number;
nickName: string;
phoneNum: string;
tenderInfoId: number;
tenderInfoNo: string;
tenderTitle: string;
userName: string;
}
>;
//行业新闻-列表 //行业新闻-列表
export type industryNewsListType = InterItemFunction< export type industryNewsListType = InterItemFunction<
...@@ -91,3 +134,59 @@ export type industryNewsDetailType = InterFunction< ...@@ -91,3 +134,59 @@ export type industryNewsDetailType = InterFunction<
surfaceImg: string; surfaceImg: string;
} }
>; >;
// 案例列表
export type industryCaseListCasePage = InterListFunction<
{
cityCode?: number;
date?: string;
districtCode?: number;
keyword?: string;
provinceCode?: number;
requirementTypeId?: number;
},
{
caseAuthor: string;
caseContents: string;
caseTitle: string;
createTime: string;
id: number;
origin: string;
surfaceImg: null;
updateTime: string;
userAccountId: number;
}
>;
// 添加业务案例
export type industryCaseAddCase = InterFunction<
{
caseAuthor?: string;
caseContents?: string;
caseTitle?: string;
createTime?: string;
id?: number;
origin?: string;
surfaceImg?: string;
updateTime?: string;
userAccountId?: number;
},
NonNullable<unknown>
>;
// 修改业务案例
export type industryCaseUpdateCase = InterFunction<
{
caseAuthor?: string;
caseContents?: string;
caseTitle?: string;
createTime?: string;
id?: number;
origin?: string;
surfaceImg?: string;
updateTime?: string;
userAccountId?: number;
},
NonNullable<unknown>
>;
// 删除业务案例
export type industryCaseDeleteDetails = InterFunction<{ id: number }, NonNullable<unknown>>;
import axios from '../request'; import axios from '../request';
import { import {
applyTagDetails,
approvalApplyTag,
changeUserTagType, changeUserTagType,
CompanyListTag, CompanyListTag,
cooperationListTag,
deleteApplyTag,
listAppUserType, listAppUserType,
listUserApplyTag,
userAccountUpdateType, userAccountUpdateType,
} from '~/api/interface/customManageType'; } from '~/api/interface/customManageType';
...@@ -19,4 +24,20 @@ export class CustomManageAPI { ...@@ -19,4 +24,20 @@ export class CustomManageAPI {
// 后台设置小程序用户标签 // 后台设置小程序用户标签
static changeUserTag: changeUserTagType = (params) => static changeUserTag: changeUserTagType = (params) =>
axios.get('/userapp/cooperation/changeUserTag', { params }); axios.get('/userapp/cooperation/changeUserTag', { params });
// 加盟标签列表
static cooperationListTag: cooperationListTag = (params) =>
axios.get('/userapp/cooperation/listTag', { params });
// 后台申请列表
static listUserApplyTag: listUserApplyTag = (params) =>
axios.post('/userapp/cooperation/listUserApplyTag', params);
// 审批详情
static applyTagDetails: applyTagDetails = (params) =>
axios.get('/userapp/cooperation/applyTagDetails', { params });
// 审批
static approvalApplyTag: approvalApplyTag = (params) =>
axios.get('/userapp/cooperation/approvalApplyTag', { params });
// 强制删除
static deleteApplyTag: deleteApplyTag = (params) =>
axios.get('/userapp/cooperation/deleteApplyTag', { params });
} }
...@@ -5,10 +5,17 @@ import { ...@@ -5,10 +5,17 @@ import {
releaseTenderNewsAdd, releaseTenderNewsAdd,
releaseTenderNewsDelete, releaseTenderNewsDelete,
releaseTenderNewsUpdate, releaseTenderNewsUpdate,
releaseTenderNewsInfo,
releaseTenderNewsInfoUpdate,
releaseTenderNewsApplyList,
addIndustryNewsType, addIndustryNewsType,
industryNewsListType, industryNewsListType,
editIndustryNews, editIndustryNews,
industryNewsDetailType, industryNewsDetailType,
industryCaseListCasePage,
industryCaseAddCase,
industryCaseUpdateCase,
industryCaseDeleteDetails,
deleteIndustryNewsType, deleteIndustryNewsType,
deleteRequirementsType, deleteRequirementsType,
} from '~/api/interface/resourceManageType'; } from '~/api/interface/resourceManageType';
...@@ -40,6 +47,18 @@ export class ResourceManageAPI { ...@@ -40,6 +47,18 @@ export class ResourceManageAPI {
// 删除招标快讯 // 删除招标快讯
static releaseTenderNewsDelete: releaseTenderNewsDelete = (params) => static releaseTenderNewsDelete: releaseTenderNewsDelete = (params) =>
axios.delete(`/release/tender/news/${params?.id}`); axios.delete(`/release/tender/news/${params?.id}`);
// 查询-招标快讯详情列表-分页
static releaseTenderNewsInfo: releaseTenderNewsInfo = (params) =>
axios.get('/release/tender/info', { params });
// 修改-招标快讯详情
static releaseTenderNewsInfoUpdate: releaseTenderNewsInfoUpdate = (params) =>
axios.put('/release/tender/info', params);
// 用户反馈列表-分页
static releaseTenderNewsApplyList: releaseTenderNewsApplyList = (params) =>
axios.post('/release/tender/applyList', params);
// 行业新闻-新增 // 行业新闻-新增
static addIndustryNews: addIndustryNewsType = (data) => static addIndustryNews: addIndustryNewsType = (data) =>
axios.post('/release/industry-news/insertIndustryNews', data); axios.post('/release/industry-news/insertIndustryNews', data);
...@@ -55,4 +74,20 @@ export class ResourceManageAPI { ...@@ -55,4 +74,20 @@ export class ResourceManageAPI {
// 行业新闻-删除 // 行业新闻-删除
static removeIndustryNews: deleteIndustryNewsType = (params) => static removeIndustryNews: deleteIndustryNewsType = (params) =>
axios.get('/release/industry-news/deleteIndustryNews', { params }); axios.get('/release/industry-news/deleteIndustryNews', { params });
// 案例列表
static industryCaseListCasePage: industryCaseListCasePage = (params) =>
axios.post('/release/industry-case/listCasePage', params);
// 添加业务案例
static industryCaseAddCase: industryCaseAddCase = (params) =>
axios.post('/release/industry-case/addCase', params);
// 修改业务案例
static industryCaseUpdateCase: industryCaseUpdateCase = (params) =>
axios.post('/release/industry-case/updateCase', params);
// 删除业务案例
static industryCaseDeleteDetails: industryCaseDeleteDetails = (params) =>
axios.get('/release/industry-case/deleteDetails', { params });
} }
...@@ -6,13 +6,17 @@ import { CommonAPI } from '~/api'; ...@@ -6,13 +6,17 @@ import { CommonAPI } from '~/api';
let editor: any = null; let editor: any = null;
interface PropsType { interface PropsType {
onChange: (html?: string) => void; onChange?: (html?: string) => void;
value: string | undefined; value: string | undefined;
// eslint-disable-next-line react/require-default-props // eslint-disable-next-line react/require-default-props
isDetail?: boolean; isDetail?: boolean;
height?: number; height?: number;
} }
const RichText: React.FC<PropsType> = ({ onChange, value, isDetail, height }) => { const RichText: React.FC<PropsType> = ({ onChange, value, isDetail, height }) => {
RichText.defaultProps = {
// eslint-disable-next-line @typescript-eslint/no-empty-function
onChange: () => {},
};
useEffect(() => { useEffect(() => {
// 注:class写法需要在componentDidMount 创建编辑器 // 注:class写法需要在componentDidMount 创建编辑器
editor = new E('.edit'); editor = new E('.edit');
...@@ -38,9 +42,9 @@ const RichText: React.FC<PropsType> = ({ onChange, value, isDetail, height }) => ...@@ -38,9 +42,9 @@ const RichText: React.FC<PropsType> = ({ onChange, value, isDetail, height }) =>
}; };
editor.config.onchange = (newHtml: string) => { editor.config.onchange = (newHtml: string) => {
if (newHtml) { if (newHtml) {
onChange(newHtml); onChange?.(newHtml);
} else { } else {
onChange(undefined); onChange?.(undefined);
} }
}; };
......
...@@ -19,6 +19,7 @@ interface PropsType { ...@@ -19,6 +19,7 @@ interface PropsType {
}[], }[],
) => void; // 上传文件改变时的状态 ) => void; // 上传文件改变时的状态
defaultFileList?: any[]; // 默认文件列表 defaultFileList?: any[]; // 默认文件列表
disabled?: boolean; // 是否禁用
} }
export const Uploader: React.FC<PropsType> = (props) => { export const Uploader: React.FC<PropsType> = (props) => {
Uploader.defaultProps = { Uploader.defaultProps = {
...@@ -29,6 +30,7 @@ export const Uploader: React.FC<PropsType> = (props) => { ...@@ -29,6 +30,7 @@ export const Uploader: React.FC<PropsType> = (props) => {
// eslint-disable-next-line @typescript-eslint/no-empty-function // eslint-disable-next-line @typescript-eslint/no-empty-function
onChange: () => {}, onChange: () => {},
defaultFileList: [], defaultFileList: [],
disabled: false,
}; };
const { const {
fileType = ['image/png', 'image/jpeg', 'image/jpg', 'image/gif', 'image/bmp'], fileType = ['image/png', 'image/jpeg', 'image/jpg', 'image/gif', 'image/bmp'],
...@@ -39,6 +41,7 @@ export const Uploader: React.FC<PropsType> = (props) => { ...@@ -39,6 +41,7 @@ export const Uploader: React.FC<PropsType> = (props) => {
fileLength, fileLength,
onChange, onChange,
defaultFileList, defaultFileList,
disabled,
} = props; } = props;
const [fileList, setFileList] = useState<any[]>([]); const [fileList, setFileList] = useState<any[]>([]);
// 上传文件配置 // 上传文件配置
...@@ -124,11 +127,11 @@ export const Uploader: React.FC<PropsType> = (props) => { ...@@ -124,11 +127,11 @@ export const Uploader: React.FC<PropsType> = (props) => {
return ( return (
<div className='uploader-view'> <div className='uploader-view'>
{listType === 'text' ? ( {listType === 'text' ? (
<Upload {...uploadProps} style={{ width: '100%' }}> <Upload {...uploadProps} style={{ width: '100%' }} disabled={disabled}>
<>{fileList.length < (fileLength || 1) && children}</> <>{fileList.length < (fileLength || 1) && children}</>
</Upload> </Upload>
) : ( ) : (
<Upload {...uploadProps} style={{ width: '100%' }}> <Upload {...uploadProps} style={{ width: '100%' }} disabled={disabled}>
{fileList.length < (fileLength || 1) && children} {fileList.length < (fileLength || 1) && children}
</Upload> </Upload>
)} )}
......
.apply-detail{
position: relative;
.detail-title{
font-size: 13px;
font-weight: bold;
margin-bottom: 10px;
}
.detail-text{
width: 100%;
text-align: center;
margin: 30px 0;
}
.detail-action{
width: 100%;
display: flex;
justify-content: flex-end;
align-items: center;
margin-bottom: 20px;
.ant-btn{
width: 100px;
}
.ant-btn:first-child{
margin-right: 20px;
}
}
.detail-item{
width: 100%;
display: flex;
justify-content: flex-start;
align-items: flex-start;
margin-bottom: 15px;
.item-label{
width: 100px;
font-weight: normal;
text-align: right;
box-sizing: border-box;
padding-right: 20px;
}
}
}
import { FC, useEffect, useState } from 'react';
import { Button, message, Modal } from 'antd';
import { InterDataType, InterListType, InterReqType } from '~/api/interface';
import { CustomManageAPI } from '~/api';
import {
applyTagDetails,
approvalApplyTag,
listUserApplyTag,
} from '~/api/interface/customManageType';
import './index.scss';
import { PlusOutlined } from '@ant-design/icons';
import { Uploader } from '~/components/uploader';
// 列表的类型
type DataType = InterDataType<applyTagDetails>;
// 列表的类型
type TableType = InterListType<listUserApplyTag>;
// 请求的表单类型
type ReqType = InterReqType<approvalApplyTag>;
// 传参类型
interface propType {
title: string;
open: boolean;
closed: any;
data?: TableType[0];
}
const AddEditModal: FC<propType> = (props) => {
AddEditModal.defaultProps = {
data: undefined,
};
// 参数
const { title, open, closed, data } = props;
const [applyTagDetail, setApplyTagDetail] = useState<DataType>();
// 关闭弹窗
const handleCancel = () => {
closed();
};
// 点击事件
const handleOk = async (status: boolean) => {
await handleSubmit({ id: Number(data?.id), status });
};
// 提交事件
const handleSubmit = async (values: ReqType) => {
const res = await CustomManageAPI.approvalApplyTag(values);
if (res && res.code === '200') {
message.success('操作成功');
handleCancel();
}
};
// 获取审批详情
const getApplyTagDetails = async () => {
const res = await CustomManageAPI.applyTagDetails({
id: data?.id,
userAccountId: data?.userAccountId,
});
if (res && res.code === '200') {
const { result } = res;
setApplyTagDetail(result);
}
};
// componentDidMount
useEffect(() => {
if (!open) return;
if (!data) return;
getApplyTagDetails().then();
// console.log('data --->', data);
}, [open]);
return (
<Modal open={open} title={title} onCancel={handleCancel} destroyOnClose footer={null}>
<div className='apply-detail'>
<div className='detail-text'>确定通过用户提交的加盟申请成为加盟商吗?</div>
<div className='detail-action'>
<Button type={'default'} onClick={() => handleOk(false)}>
驳回
</Button>
<Button type={'primary'} onClick={() => handleOk(true)}>
通过
</Button>
</div>
<div className='detail-title'>企业认证信息</div>
<div className='detail-item'>
<div className='item-label'>企业名称:</div>
<div className='item-value'>{applyTagDetail?.companyName || '无'}</div>
</div>
<div className='detail-item'>
<div className='item-label'>社会信用代码:</div>
<div className='item-value'>{applyTagDetail?.creditCode || '无'}</div>
</div>
<div className='detail-item'>
<div className='item-label'>工商营业执照:</div>
<div className='item-value'>
<Uploader
listType={'picture-card'}
fileUpload
fileLength={1}
fileSize={10}
fileType={['image/png', 'image/jpeg', 'image/jpg', 'image/gif', 'image/bmp']}
defaultFileList={
applyTagDetail?.licenseImg ? [{ url: applyTagDetail?.licenseImg }] : []
}
disabled={true}
>
<PlusOutlined />
</Uploader>
</div>
</div>
<div className='detail-item'>
<div className='item-label'>附件信息:</div>
<div className='item-value'>
<Uploader
listType={'picture-card'}
fileUpload
fileLength={1}
fileSize={10}
fileType={['image/png', 'image/jpeg', 'image/jpg', 'image/gif', 'image/bmp']}
defaultFileList={
applyTagDetail?.attachmentList?.length
? applyTagDetail?.attachmentList.map((i) => ({ url: i.url }))
: []
}
disabled={true}
>
<PlusOutlined />
</Uploader>
</div>
</div>
<div className='detail-item'>
<div className='item-label'>备注:</div>
<div className='item-value'>{applyTagDetail?.remark || '无'}</div>
</div>
</div>
</Modal>
);
};
export default AddEditModal;
import { useEffect, useState } from 'react';
import SearchBox from '~/components/search-box';
import { CustomManageAPI } from '~/api';
import { Button, message, Modal, Table } from 'antd';
import { ColumnsType } from 'antd/es/table';
import { InterListType, InterReqListType } from '~/api/interface';
import { listUserApplyTag } from '~/api/interface/customManageType';
import AddEditModal from './comp/addEditModal';
// 列表类型
type TableType = InterListType<listUserApplyTag>;
// 请求的参数
type ReqType = InterReqListType<listUserApplyTag>;
// 搜索表单的数据
let query: ReqType = {};
// 审批状态
const applyStatusList = [
{ label: '待审核', value: 0 },
{ label: '已通过', value: 1 },
{ label: '不通过', value: 2 },
];
const CustomIdentityView = () => {
const { confirm } = Modal;
// 加盟列表
const [cooperationList, setCooperationList] = useState<{ label: string; value: number }[]>([]);
// 新增弹窗
const [addModalVisible, setAddModalVisible] = useState<boolean>(false);
// 需要编辑的数据
const [editData, setEditData] = useState<TableType[0]>();
// 表格数据
const [tableData, setTableData] = useState<TableType>([]);
// 表格分页配置
const [pagination, setPagination] = useState({
total: 0,
pageSize: 10,
current: 1,
totalPage: 0,
});
// 加载列表
const getTableList = async (value = {}) => {
// 只需要修改这个地方的接口即可
const res = await CustomManageAPI.listUserApplyTag({
pageNo: pagination.current,
pageSize: pagination.pageSize,
...value,
...query,
});
if (res && res.code === '200') {
const { list, pageNo, totalCount, pageSize, totalPage } = res.result; // 解构
setPagination({
total: totalCount,
current: pageNo,
pageSize,
totalPage,
});
setTableData(list);
}
};
// 翻页
const paginationChange = (pageNo: number, pageSize: number) => {
getTableList({ pageNo, pageSize }).then();
};
// 表单提交
const onFinish = (data: ReqType) => {
pagination.current = 1;
query = data;
getTableList(data).then();
};
// 获取加盟列表
const getCooperationList = async () => {
const res = await CustomManageAPI.cooperationListTag({});
if (res && res.code === '200') {
const list = res.result || [];
setCooperationList(list.map((i) => ({ label: i.tagName, value: i.id })));
}
};
// 删除数据
const handleDelete = (record: TableType[0]) => {
confirm({
title: '提示',
content: '是否删除该记录?',
onOk: async () => {
const res = await CustomManageAPI.deleteApplyTag({ id: record.id });
if (res && res.code === '200') {
message.success('删除成功');
paginationChange(
tableData.length === 1 ? pagination.current - 1 : pagination.current,
pagination.pageSize,
);
}
},
});
};
useEffect(() => {
getCooperationList().then();
getTableList().then();
}, []);
// 表格结构
const columns: ColumnsType<TableType[0]> = [
{
title: '序号',
dataIndex: 'accountNo',
align: 'center',
width: '50px',
render: (_text, _record, index) => (pagination.current - 1) * pagination.pageSize + index + 1,
},
{
title: '申请加盟类型',
dataIndex: 'cooperationTagId',
align: 'center',
render: (text) => cooperationList.find((i) => i.value === text)?.label || text,
},
{
title: '联系人',
dataIndex: 'applyName',
align: 'center',
},
{
title: '联系方式',
dataIndex: 'applyPhone',
align: 'center',
},
{
title: '申请时间',
dataIndex: 'applyTime',
align: 'center',
},
{
title: '审核状态',
dataIndex: 'approvalStatus',
align: 'center',
render: (text) => applyStatusList.find((i) => i.value === text)?.label || text,
},
{
title: '操作',
dataIndex: 'action',
align: 'center',
fixed: 'right',
width: '120px',
render: (_text, record) => (
<>
<Button
type={'link'}
onClick={() => {
setAddModalVisible(true);
setEditData(JSON.parse(JSON.stringify(record)));
}}
disabled={record.approvalStatus !== 0}
>
审批
</Button>
<Button type={'link'} danger onClick={() => handleDelete(record)}>
强制删除
</Button>
</>
),
},
];
return (
<>
<SearchBox
search={[
{
name: 'cooperationTagId',
label: '申请加盟类型',
type: 'Select',
placeholder: '请选择加盟类型',
options: cooperationList,
},
{
name: 'applyStatus',
label: '申请状态',
type: 'Select',
placeholder: '请选择申请状态',
options: applyStatusList,
},
{
name: 'rangeTime',
label: '申请时间',
type: 'rangePicker',
placeholder: '请选择开始时间和结束时间',
},
]}
searchData={onFinish}
/>
<Table
size='small'
dataSource={tableData}
columns={columns}
rowKey='id'
// scroll={{ x: 1500 }}
bordered
pagination={{
total: pagination.total,
pageSize: pagination.pageSize,
current: pagination.current,
showSizeChanger: true,
showQuickJumper: true,
onChange: (page: number, pageSize: number) => paginationChange(page, pageSize),
showTotal: (total, range) => `当前 ${range[0]}-${range[1]} 条记录 / 共 ${total} 条数据`,
}}
/>
<AddEditModal
open={addModalVisible}
title={editData?.id ? '审批' : '新增'}
data={editData}
closed={() => {
setAddModalVisible(false);
setEditData(undefined);
paginationChange(pagination.current, pagination.pageSize);
}}
/>
</>
);
};
export default CustomIdentityView;
import { FC, useEffect } from 'react';
import { Form, Input, message, Modal } from 'antd';
import { InterListType, InterReqType } from '~/api/interface';
import { industryCaseAddCase, industryCaseListCasePage } from '~/api/interface/resourceManageType';
import { ResourceManageAPI } from '~/api';
import RichText from '~/components/richText';
// 列表的类型
type TableType = InterListType<industryCaseListCasePage>;
// 请求的表单类型
type ReqType = InterReqType<industryCaseAddCase>;
// 传参类型
interface propType {
title: string;
open: boolean;
closed: any;
data?: TableType[0];
}
const AddEditModal: FC<propType> = (props) => {
AddEditModal.defaultProps = {
data: undefined,
};
// 参数
const { title, open, closed, data } = props;
// 表单钩子
const [form] = Form.useForm<ReqType>();
// 关闭弹窗
const handleCancel = () => {
form.resetFields();
closed();
};
// 确认事件
const handleOk = () => {
form
.validateFields()
.then(async (values) => {
await handleSubmit(values as ReqType & { file: any[] });
})
.catch((err) => {
message
.warning({
content: err.errorFields[0].errors[0],
})
.then();
});
};
// 提交事件
const handleSubmit = async (values: ReqType) => {
const res = await ResourceManageAPI[
data?.id ? 'industryCaseUpdateCase' : 'industryCaseAddCase'
]({
...values,
id: data?.id ? Number(data?.id) : undefined,
});
if (res && res.code === '200') {
message.success('操作成功');
handleCancel();
}
};
// componentDidMount
useEffect(() => {
if (!open) return;
if (!data) return;
form.setFieldsValue(data);
// console.log('data --->', data);
}, [open]);
return (
<Modal
open={open}
title={title}
onCancel={handleCancel}
onOk={handleOk}
destroyOnClose
width={768}
>
<Form
name='Form'
form={form}
labelAlign='right'
labelCol={{ span: 3 }}
wrapperCol={{ span: 20 }}
>
<Form.Item
label='文章标题'
name='caseTitle'
rules={[{ required: true, message: '请输入文章标题' }]}
>
<Input placeholder={'请输入文章标题'} maxLength={50} allowClear />
</Form.Item>
<Form.Item
label='文章来源'
name='origin'
rules={[{ required: true, message: '请输入文章来源' }]}
>
<Input placeholder={'请输入文章来源'} maxLength={50} allowClear />
</Form.Item>
<Form.Item
label='文章详情'
name='caseContents'
rules={[{ required: true, message: '请输入文章详情' }]}
>
<RichText
value={form.getFieldValue('caseContents')}
onChange={(e) => form.setFieldValue('caseContents', e)}
height={250}
/>
</Form.Item>
</Form>
</Modal>
);
};
export default AddEditModal;
import { FC, useEffect } from 'react';
import { Modal } from 'antd';
import { InterListType } from '~/api/interface';
import { industryCaseListCasePage } from '~/api/interface/resourceManageType';
import RichText from '~/components/richText';
// 列表的类型
type TableType = InterListType<industryCaseListCasePage>;
// 传参类型
interface propType {
title: string;
open: boolean;
closed: any;
data?: TableType[0];
}
const PreviewModal: FC<propType> = (props) => {
PreviewModal.defaultProps = {
data: undefined,
};
// 参数
const { title, open, closed, data } = props;
// 关闭弹窗
const handleCancel = () => {
closed();
};
// componentDidMount
useEffect(() => {
if (!open) return;
if (!data) return;
// console.log('data --->', data);
}, [open]);
return (
<Modal
open={open}
title={title}
onCancel={handleCancel}
destroyOnClose
width={768}
footer={null}
>
<div
style={{
display: 'flex',
justifyContent: 'center',
alignItems: 'flex-start',
flexDirection: 'column',
}}
>
<div style={{ fontSize: '20px', fontWeight: 'bold' }}>{data?.caseTitle}</div>
<div style={{ fontSize: '15px', marginBottom: '10px' }}>
{data?.updateTime || data?.createTime}
</div>
</div>
<RichText value={data?.caseContents} height={350} isDetail={true} />
</Modal>
);
};
export default PreviewModal;
import { useEffect, useState } from 'react';
import SearchBox from '~/components/search-box';
import { Button, message, Modal, Table } from 'antd';
import { PlusOutlined } from '@ant-design/icons';
import { InterListType, InterReqListType } from '~/api/interface';
import { ResourceManageAPI } from '~/api';
import { industryCaseListCasePage } from '~/api/interface/resourceManageType';
import { ColumnsType } from 'antd/es/table';
import AddEditModal from '~/pages/resourceManage/businessCaseManage/comp/addEditModal';
import PreviewModal from '~/pages/resourceManage/businessCaseManage/comp/previewModal';
// 列表类型
type TableType = InterListType<industryCaseListCasePage>;
// 请求的参数
type ReqType = InterReqListType<industryCaseListCasePage>;
// 搜索表单的数据
let query: ReqType = {};
const BusinessCaseManage = () => {
const { confirm } = Modal;
// 新增弹窗
const [addModalVisible, setAddModalVisible] = useState<boolean>(false);
// 预览弹窗
const [previewVisible, setPreviewVisible] = useState<boolean>(false);
// 需要编辑的数据
const [editData, setEditData] = useState<TableType[0]>();
// 表格数据
const [tableData, setTableData] = useState<TableType>([]);
// 表格分页配置
const [pagination, setPagination] = useState({
total: 0,
pageSize: 10,
current: 1,
totalPage: 0,
});
// 加载列表
const getTableList = async (value = {}) => {
// 只需要修改这个地方的接口即可
const res = await ResourceManageAPI.industryCaseListCasePage({
pageNo: pagination.current,
pageSize: pagination.pageSize,
...value,
...query,
});
if (res && res.code === '200') {
const { list, pageNo, totalCount, pageSize, totalPage } = res.result; // 解构
setPagination({
total: totalCount,
current: pageNo,
pageSize,
totalPage,
});
setTableData(list);
}
};
// 翻页
const paginationChange = (pageNo: number, pageSize: number) => {
getTableList({ pageNo, pageSize }).then();
};
// 表单提交
const onFinish = (data: ReqType) => {
pagination.current = 1;
query = data;
getTableList(data).then();
};
// 删除数据
const handleDelete = (record: TableType[0]) => {
confirm({
title: '提示',
content: '是否删除该记录?',
onOk: async () => {
const res = await ResourceManageAPI.industryCaseDeleteDetails({ id: record.id });
if (res && res.code === '200') {
message.success('删除成功');
paginationChange(
tableData.length === 1 ? pagination.current - 1 : pagination.current,
pagination.pageSize,
);
}
},
});
};
// componentDidMount
useEffect(() => {
query = {};
getTableList().then();
}, []);
// 表格结构
const columns: ColumnsType<TableType[0]> = [
{
title: '序号',
dataIndex: 'accountNo',
align: 'center',
width: '50px',
render: (_text, _record, index) => (pagination.current - 1) * pagination.pageSize + index + 1,
},
{
title: '文章名称',
dataIndex: 'caseTitle',
align: 'center',
ellipsis: true,
},
{
title: '发布时间',
dataIndex: 'updateTime',
align: 'center',
render: (text, record) => text || record.createTime,
},
{
title: '来源',
dataIndex: 'origin',
align: 'center',
},
{
title: '操作',
dataIndex: 'action',
align: 'center',
width: '150px',
fixed: 'right',
render: (_text, record) => (
<>
<Button
type={'link'}
onClick={() => {
setEditData(JSON.parse(JSON.stringify(record)));
setAddModalVisible(true);
}}
>
编辑
</Button>
<Button
type={'link'}
onClick={() => {
setEditData(JSON.parse(JSON.stringify(record)));
setPreviewVisible(true);
}}
>
预览
</Button>
<Button type={'link'} danger onClick={() => handleDelete(record)}>
删除
</Button>
</>
),
},
];
return (
<>
<SearchBox
search={[
{ name: 'keyword', label: '文章名称', type: 'input', placeholder: '请输入文章名称' },
]}
child={
<>
<Button
type={'primary'}
icon={<PlusOutlined />}
onClick={() => {
setAddModalVisible(true);
}}
>
新增
</Button>
</>
}
searchData={onFinish}
/>
<Table
size='small'
dataSource={tableData}
columns={columns}
rowKey='id'
// scroll={{ x: 1500 }}
bordered
pagination={{
total: pagination.total,
pageSize: pagination.pageSize,
current: pagination.current,
showSizeChanger: true,
showQuickJumper: true,
onChange: (page: number, pageSize: number) => paginationChange(page, pageSize),
showTotal: (total, range) => `当前 ${range[0]}-${range[1]} 条记录 / 共 ${total} 条数据`,
}}
/>
<AddEditModal
open={addModalVisible}
title={editData?.id ? '编辑' : '新增'}
data={editData}
closed={() => {
setAddModalVisible(false);
setEditData(undefined);
paginationChange(pagination.current, pagination.pageSize);
}}
/>
<PreviewModal
open={previewVisible}
title={editData?.id ? '预览' : '新增'}
data={editData}
closed={() => {
setPreviewVisible(false);
setEditData(undefined);
paginationChange(pagination.current, pagination.pageSize);
}}
/>
</>
);
};
export default BusinessCaseManage;
...@@ -207,7 +207,10 @@ const AddEditModal: React.FC<propType> = (props) => { ...@@ -207,7 +207,10 @@ const AddEditModal: React.FC<propType> = (props) => {
<Form.Item <Form.Item
label='链接地址' label='链接地址'
name='bannerUrl' name='bannerUrl'
rules={[{ required: true, message: '请输入链接地址' }]} rules={[
{ required: true, message: '请输入链接地址' },
{ pattern: /^[^\s]*$/, message: '地址不能包含空格' },
]}
> >
<Input placeholder={'请输入链接地址'} maxLength={100} allowClear /> <Input placeholder={'请输入链接地址'} maxLength={100} allowClear />
</Form.Item> </Form.Item>
......
import React, { useEffect } from 'react';
import { Form, Input, message, Modal } from 'antd';
import { InterListType, InterReqType } from '~/api/interface';
import {
releaseTenderNewsInfoUpdate,
releaseTenderNewsInfo,
} from '~/api/interface/resourceManageType';
import { ResourceManageAPI } from '~/api';
import RichText from '~/components/richText';
// 列表的类型
type TableType = InterListType<releaseTenderNewsInfo>;
// 请求的表单类型
type ReqType = InterReqType<releaseTenderNewsInfoUpdate>;
// 传参类型
interface propType {
title: string;
open: boolean;
closed: any;
data?: TableType[0];
}
const AddEditDetailModal: React.FC<propType> = (props) => {
AddEditDetailModal.defaultProps = {
data: undefined,
};
// 参数
const { title, open, closed, data } = props;
// 表单钩子
const [form] = Form.useForm<ReqType>();
// 关闭弹窗
const handleCancel = () => {
form.resetFields();
closed();
};
// 确认事件
const handleOk = () => {
form
.validateFields()
.then(async (values) => {
await handleSubmit(values as ReqType & { file: any[] });
})
.catch((err) => {
message
.warning({
content: err.errorFields[0].errors[0],
})
.then();
});
};
// 提交事件
const handleSubmit = async (values: ReqType) => {
const res = await ResourceManageAPI.releaseTenderNewsInfoUpdate({
...values,
id: Number(data?.id),
});
if (res && res.code === '200') {
message.success('操作成功');
handleCancel();
}
};
// componentDidMount
useEffect(() => {
if (!open) return;
if (!data) return;
form.setFieldsValue(data);
// console.log('data --->', data);
}, [open]);
return (
<Modal
open={open}
title={title}
onCancel={handleCancel}
onOk={handleOk}
destroyOnClose
width={768}
>
<Form
name='Form'
form={form}
labelAlign='right'
labelCol={{ span: 2 }}
wrapperCol={{ span: 21 }}
>
<Form.Item
label='标题'
name='tenderTitle'
rules={[{ required: true, message: '请输入标题' }]}
>
<Input placeholder={'请输入标题'} maxLength={50} allowClear />
</Form.Item>
<Form.Item
label='价格'
name='tenderPrice'
rules={[
{ required: true, message: '请输入价格' },
() => ({
validator(_, value) {
if (value && value.length > 10) {
return Promise.reject('金额不能超过十位数');
}
return Promise.resolve();
},
}),
]}
>
<Input
type={'number'}
placeholder={'请输入价格'}
maxLength={10}
allowClear
suffix={'万元'}
/>
</Form.Item>
<Form.Item
label='详情'
name='tenderContent'
rules={[{ required: true, message: '请输入详情' }]}
>
<RichText
value={form.getFieldValue('tenderContent')}
onChange={(e) => form.setFieldValue('tenderContent', e)}
height={250}
/>
</Form.Item>
</Form>
</Modal>
);
};
export default AddEditDetailModal;
import React from 'react'; import { useEffect, useState } from 'react';
import { useLocation, useNavigate } from 'react-router-dom';
import SearchBox from '~/components/search-box';
import { Button, Table } from 'antd';
import { ArrowLeftOutlined } from '@ant-design/icons';
import qs from 'query-string';
import { InterListType } from '~/api/interface';
import { releaseTenderNewsInfo } from '~/api/interface/resourceManageType';
import { ResourceManageAPI } from '~/api';
import { ColumnsType } from 'antd/es/table';
import AddEditDetailModal from '~/pages/resourceManage/tenderManage/comp/addEditDetailModal';
// 列表类型
type TableType = InterListType<releaseTenderNewsInfo>;
const TenderManageDetail = () => { const TenderManageDetail = () => {
return <div>TenderManageDetail</div>; // 路由钩子
const location = useLocation();
// 导航钩子
const navigate = useNavigate();
// 返回上一页
const handleBack = () => {
navigate(-1);
};
// 新增修改弹窗是否开启
const [addModalVisible, setAddModalVisible] = useState(false);
// 需要编辑的数据
const [editData, setEditData] = useState<TableType[0]>();
// 表格数据
const [tableData, setTableData] = useState<TableType>([]);
// 表格分页配置
const [pagination, setPagination] = useState({
total: 0,
pageSize: 10,
current: 1,
totalPage: 0,
});
// 加载列表
const getTableList = async (value = {}) => {
// 只需要修改这个地方的接口即可
const res = await ResourceManageAPI.releaseTenderNewsInfo({
pageNo: pagination.current,
pageSize: pagination.pageSize,
...value,
tenderNewsId: Number(qs.parse(location.search)?.id),
});
if (res && res.code === '200') {
const { list, pageNo, totalCount, pageSize, totalPage } = res.result; // 解构
setPagination({
total: totalCount,
current: pageNo,
pageSize,
totalPage,
});
setTableData(list || []);
}
};
// 翻页
const paginationChange = (pageNo: number, pageSize: number) => {
getTableList({ pageNo, pageSize }).then();
};
// componentDidMount
useEffect(() => {
getTableList().then();
}, []);
// 表格结构
const columns: ColumnsType<TableType[0]> = [
{
title: '序号',
dataIndex: 'accountNo',
align: 'center',
width: '50px',
render: (_text, _record, index) => (pagination.current - 1) * pagination.pageSize + index + 1,
},
{
title: '标题',
dataIndex: 'tenderTitle',
align: 'center',
width: '200px',
ellipsis: true,
},
{
title: '详情',
dataIndex: 'tenderContent',
align: 'center',
width: '300px',
ellipsis: true,
},
{
title: '价格(万元)',
dataIndex: 'tenderPrice',
align: 'center',
width: '100px',
ellipsis: true,
render: (text) => text?.toLocaleString(),
},
{
title: '操作',
dataIndex: 'action',
align: 'center',
width: '100px',
fixed: 'right',
render: (_text, record) => (
<Button
type={'link'}
onClick={() => {
setEditData(JSON.parse(JSON.stringify(record)));
setAddModalVisible(true);
}}
>
编辑
</Button>
),
},
];
return (
<>
<SearchBox
child={
<>
<Button type={'primary'} icon={<ArrowLeftOutlined />} onClick={handleBack}>
返回
</Button>
</>
}
/>
<Table
size='small'
dataSource={tableData}
columns={columns}
rowKey='id'
// scroll={{ x: 1500 }}
bordered
pagination={{
total: pagination.total,
pageSize: pagination.pageSize,
current: pagination.current,
showSizeChanger: true,
showQuickJumper: true,
onChange: (page: number, pageSize: number) => paginationChange(page, pageSize),
showTotal: (total, range) => `当前 ${range[0]}-${range[1]} 条记录 / 共 ${total} 条数据`,
}}
/>
<AddEditDetailModal
open={addModalVisible}
title={editData?.id ? '编辑' : '新增'}
data={editData}
closed={() => {
setAddModalVisible(false);
setEditData(undefined);
paginationChange(pagination.current, pagination.pageSize);
}}
/>
</>
);
}; };
export default TenderManageDetail; export default TenderManageDetail;
import { useEffect, useState } from 'react';
import SearchBox from '~/components/search-box';
import { ResourceManageAPI } from '~/api';
import qs from 'query-string';
import { useLocation, useNavigate } from 'react-router-dom';
import { Button, Table } from 'antd';
import { ArrowLeftOutlined } from '@ant-design/icons';
import {
releaseTenderNewsApplyList,
releaseTenderNewsInfo,
} from '~/api/interface/resourceManageType';
import { InterListType, InterReqListType } from '~/api/interface';
import { ColumnsType } from 'antd/es/table';
// 列表类型
type ListType = InterListType<releaseTenderNewsInfo>;
// 表格类型
type TableType = InterListType<releaseTenderNewsApplyList>;
// 请求的参数
type ReqType = InterReqListType<releaseTenderNewsApplyList>;
// 搜索表单的数据
let query: ReqType = {};
const TenderManageFeedback = () => {
// 路由钩子
const location = useLocation();
// 导航钩子
const navigate = useNavigate();
// 返回上一页
const handleBack = () => {
navigate(-1);
};
// 表格数据
const [tableData, setTableData] = useState<TableType>([]);
// 表格分页配置
const [pagination, setPagination] = useState({
total: 0,
pageSize: 10,
current: 1,
totalPage: 0,
});
// 快讯详情列表
const [tenderInfoList, setTenderInfoId] = useState<
{ value: number; label: string; data: ListType[0] }[]
>([]);
// 获取快讯详情列表
const getNewsInfoList = async () => {
const res = await ResourceManageAPI.releaseTenderNewsInfo({
pageNo: 1,
pageSize: 9999,
tenderNewsId: Number(qs.parse(location.search)?.id),
});
if (res && res.code === '200') {
const list = res.result?.list || [];
setTenderInfoId(
list?.map((i, j) => ({
value: i.id,
label: `${j + 1}${i.tenderTitle}`,
data: i,
})),
);
}
};
// 加载列表
const getTableList = async (value = {}) => {
// 只需要修改这个地方的接口即可
const res = await ResourceManageAPI.releaseTenderNewsApplyList({
pageNo: pagination.current,
pageSize: pagination.pageSize,
...value,
...query,
tenderNewsId: Number(qs.parse(location.search)?.id),
});
if (res && res.code === '200') {
const { list, pageNo, totalCount, pageSize, totalPage } = res.result; // 解构
setPagination({
total: totalCount,
current: pageNo,
pageSize,
totalPage,
});
setTableData(list);
}
};
// 翻页
const paginationChange = (pageNo: number, pageSize: number) => {
getTableList({ pageNo, pageSize }).then();
};
// 表单提交
const onFinish = (data: ReqType) => {
pagination.current = 1;
query = data;
getTableList(data).then();
};
// componentDidMount
useEffect(() => {
query = {};
getNewsInfoList().then();
getTableList().then();
}, []);
// 表格结构
const columns: ColumnsType<TableType[0]> = [
{
title: '编号',
dataIndex: 'tenderInfoNo',
align: 'center',
},
{
title: '标题',
dataIndex: 'tenderTitle',
align: 'center',
ellipsis: true,
},
{
title: '用户昵称',
dataIndex: 'nickName',
align: 'center',
},
{
title: '用户姓名',
dataIndex: 'userName',
align: 'center',
},
{
title: '电话号码',
dataIndex: 'phoneNum',
align: 'center',
},
];
return (
<>
<SearchBox
search={[
{
label: '项目编号',
name: 'tenderInfoId',
type: 'Select',
placeholder: '请选择编号',
options: tenderInfoList,
},
{ label: '用户姓名', name: 'userName', type: 'input', placeholder: '请输入编号' },
]}
searchData={onFinish}
child={
<>
<Button type={'primary'} icon={<ArrowLeftOutlined />} onClick={handleBack}>
返回
</Button>
</>
}
/>
<Table
size='small'
dataSource={tableData}
columns={columns}
rowKey='id'
// scroll={{ x: 1500 }}
bordered
pagination={{
total: pagination.total,
pageSize: pagination.pageSize,
current: pagination.current,
showSizeChanger: true,
showQuickJumper: true,
onChange: (page: number, pageSize: number) => paginationChange(page, pageSize),
showTotal: (total, range) => `当前 ${range[0]}-${range[1]} 条记录 / 共 ${total} 条数据`,
}}
/>
</>
);
};
export default TenderManageFeedback;
...@@ -9,6 +9,7 @@ import { releaseTenderNews } from '~/api/interface/resourceManageType'; ...@@ -9,6 +9,7 @@ import { releaseTenderNews } from '~/api/interface/resourceManageType';
import AddEditModal from './comp/addEditModal'; import AddEditModal from './comp/addEditModal';
import qs from 'query-string'; import qs from 'query-string';
import { useNavigate } from 'react-router-dom'; import { useNavigate } from 'react-router-dom';
import saveAs from 'file-saver';
// 列表类型 // 列表类型
type TableType = InterListType<releaseTenderNews>; type TableType = InterListType<releaseTenderNews>;
// 请求的参数 // 请求的参数
...@@ -87,6 +88,13 @@ const TenderManageView = () => { ...@@ -87,6 +88,13 @@ const TenderManageView = () => {
}; };
navigate(`/resourceManage/tenderManage/detail?${qs.stringify(search)}`); navigate(`/resourceManage/tenderManage/detail?${qs.stringify(search)}`);
}; };
// 跳转反馈
const handleFeedback = (record: TableType[0]) => {
const search = {
id: record.id,
};
navigate(`/resourceManage/tenderManage/feedback?${qs.stringify(search)}`);
};
// componentDidMount // componentDidMount
useEffect(() => { useEffect(() => {
query = {}; query = {};
...@@ -131,7 +139,9 @@ const TenderManageView = () => { ...@@ -131,7 +139,9 @@ const TenderManageView = () => {
> >
编辑 编辑
</Button> </Button>
<Button type={'link'}>用户反馈</Button> <Button type={'link'} onClick={() => handleFeedback(record)}>
用户反馈
</Button>
<Button type={'link'} danger onClick={() => handleDelete(record)}> <Button type={'link'} danger onClick={() => handleDelete(record)}>
删除 删除
</Button> </Button>
...@@ -143,7 +153,7 @@ const TenderManageView = () => { ...@@ -143,7 +153,7 @@ const TenderManageView = () => {
<> <>
<SearchBox <SearchBox
search={[ search={[
{ name: 'keywords', label: '名称', type: 'input', placeholder: '请输入招标快讯名称' }, { name: 'tenderName', label: '名称', type: 'input', placeholder: '请输入招标快讯名称' },
{ {
name: 'rangeTime', name: 'rangeTime',
label: '发布时间', label: '发布时间',
...@@ -171,7 +181,10 @@ const TenderManageView = () => { ...@@ -171,7 +181,10 @@ const TenderManageView = () => {
type={'primary'} type={'primary'}
icon={<DownloadOutlined />} icon={<DownloadOutlined />}
onClick={() => { onClick={() => {
console.log('新增'); saveAs(
'https://pad-video-x.oss-cn-shenzhen.aliyuncs.com/doc/%E6%8B%9B%E6%A0%87%E5%BF%AB%E8%AE%AF.xlsx',
`招标快讯模板_${new Date().getTime()}.xlsx`,
);
}} }}
> >
下载模板 下载模板
......
...@@ -3,10 +3,7 @@ import { Navigate, RouteObject } from 'react-router-dom'; ...@@ -3,10 +3,7 @@ import { Navigate, RouteObject } from 'react-router-dom';
import ErrorPage from '~/pages/common/error'; import ErrorPage from '~/pages/common/error';
import LayoutView from '~/components/layout'; import LayoutView from '~/components/layout';
import { import {
// AccountBookOutlined,
MacCommandOutlined, MacCommandOutlined,
// GiftOutlined,
// PayCircleOutlined,
BarsOutlined, BarsOutlined,
ShoppingOutlined, ShoppingOutlined,
ShopOutlined, ShopOutlined,
...@@ -28,6 +25,8 @@ import { ...@@ -28,6 +25,8 @@ import {
SketchOutlined, SketchOutlined,
DribbbleOutlined, DribbbleOutlined,
MessageOutlined, MessageOutlined,
AliwangwangOutlined,
AuditOutlined,
} from '@ant-design/icons'; } from '@ant-design/icons';
// eslint-disable-next-line @typescript-eslint/ban-ts-comment // eslint-disable-next-line @typescript-eslint/ban-ts-comment
// @ts-ignore // @ts-ignore
...@@ -100,6 +99,9 @@ const DirectoryManage = React.lazy(() => import('~/pages/categoryManage/director ...@@ -100,6 +99,9 @@ const DirectoryManage = React.lazy(() => import('~/pages/categoryManage/director
import AccountManageView from '~/pages/systemManage/accountManage'; import AccountManageView from '~/pages/systemManage/accountManage';
import TenderManageView from '~/pages/resourceManage/tenderManage'; import TenderManageView from '~/pages/resourceManage/tenderManage';
import TenderManageDetail from '~/pages/resourceManage/tenderManage/detail'; import TenderManageDetail from '~/pages/resourceManage/tenderManage/detail';
import TenderManageFeedback from '~/pages/resourceManage/tenderManage/feedback';
import BusinessCaseManage from '~/pages/resourceManage/businessCaseManage';
import CustomIdentityView from '~/pages/customManage/customIdentity';
// const IndustryListView = React.lazy(() => import('~/pages/mallManage/industryManage/industryList')); //行业列表 // const IndustryListView = React.lazy(() => import('~/pages/mallManage/industryManage/industryList')); //行业列表
// const IndustryDetailView = React.lazy( // const IndustryDetailView = React.lazy(
...@@ -205,6 +207,15 @@ export const routerList: Array<RouteObjectType> = [ ...@@ -205,6 +207,15 @@ export const routerList: Array<RouteObjectType> = [
hidden: true, hidden: true,
}, },
}, },
{
path: '/customManage/customIdentity',
element: withLoadingComponent(<CustomIdentityView />),
meta: {
id: 26300,
title: '加盟入驻',
icon: <AuditOutlined />,
},
},
], ],
}, },
{ {
...@@ -276,12 +287,31 @@ export const routerList: Array<RouteObjectType> = [ ...@@ -276,12 +287,31 @@ export const routerList: Array<RouteObjectType> = [
path: '/resourceManage/tenderManage/detail', path: '/resourceManage/tenderManage/detail',
element: withLoadingComponent(<TenderManageDetail />), element: withLoadingComponent(<TenderManageDetail />),
meta: { meta: {
id: 30200, id: 30500,
title: '招标快讯详情', title: '招标快讯详情',
icon: <CoffeeOutlined />, icon: <CoffeeOutlined />,
hidden: true, hidden: true,
}, },
}, },
{
path: '/resourceManage/tenderManage/feedback',
element: withLoadingComponent(<TenderManageFeedback />),
meta: {
id: 30500,
title: '用户反馈',
icon: <CoffeeOutlined />,
hidden: true,
},
},
{
path: '/resourceManage/businessCaseManage',
element: withLoadingComponent(<BusinessCaseManage />),
meta: {
id: 30600,
title: '业务案例',
icon: <AliwangwangOutlined />,
},
},
], ],
}, },
{ {
......
Markdown 格式
0%
您添加了 0 到此讨论。请谨慎行事。
请先完成此评论的编辑!
注册 或者 后发表评论