提交 b0c8853c 作者: 龚洪江

Merge branch 'develop'

# Conflicts:
#	src/router/router.tsx
......@@ -14,4 +14,4 @@ patches:
images:
- name: REGISTRY/NAMESPACE/IMAGE:TAG
newName: mmc-registry.cn-shenzhen.cr.aliyuncs.com/sharefly-dev/admin
newTag: 72aefa215ad35ffd5c849a04f6c037c7089e9d20
newTag: 5ee7e014e51f387d5eaaf208b66cf1d55d47b605
......@@ -94,3 +94,37 @@ export type userJoinReportDataType = InterFunction<
trainingInstitution: number;
}
>;
// 数据看板-订单数据
export type orderReportDataType = InterFunction<
any,
{
/**
* 商品租赁交易总额
*/
leaseGMV: number;
/**
* 商品租赁订单总数
*/
leaseOrderCount: number;
/**
* 商城售卖交易总额
*/
saleGMV: number;
/**
* 商城售卖订单总数
*/
saleOrderCount: number;
/**
* 服务订单交易总额
*/
serviceGMV: number;
/**
* 服务订单订单总数
*/
serviceOrderCount: number;
/**
* 交易总额
*/
totalGMV: number;
}
>;
......@@ -8,6 +8,7 @@ export type forumListType = InterListFunction<
description: string;
mediaVO: null;
show: number;
gambitName: string[];
userBaseInfo: {
nickName: string;
userImg: string;
......@@ -53,3 +54,91 @@ export type checkDynamicType = InterFunction<
{ dynamicId: number; status: boolean },
NonNullable<unknown>
>;
// 话题-列表
export type listGambitType = InterListFunction<
{
/**
* 话题名称
*/
gambitName?: string;
/**
* 话题属性 1普通 2热门 3推荐
*/
gambitProperty?: number;
},
{
/**
* 话题参与讨论数量
*/
discussionCount?: number;
/**
* 话题封面
*/
gambitCover?: string;
/**
* 话题图标
*/
gambitIcon?: string;
/**
* 话题名称
*/
gambitName?: string;
/**
* 话题属性
*/
gambitProperty?: number;
id: number;
/**
* 贴子数
*/
postCount?: number;
}
>;
// 话题-新增
export type addGambitType = InterFunction<
{
/**
* 话题封面
*/
gambitCover: string;
/**
* 话题图标
*/
gambitIcon: string;
/**
* 话题名称
*/
gambitName: string;
/**
* 话题属性 话题属性 1普通 2热门 3推荐
*/
gambitProperty: number;
},
any
>;
// 话题-删除
export type deleteGambitType = InterFunction<{ id: number }, any>;
// 话题-编辑
export type updateGambitType = InterFunction<
{
/**
* 话题封面
*/
gambitCover: string;
/**
* 话题图标
*/
gambitIcon: string;
/**
* 话题名称
*/
gambitName: string;
/**
* 话题属性 话题属性 1普通 2热门 3推荐
*/
gambitProperty: number;
id?: number;
},
any
>;
import {
orderReportDataType,
releaseReportDataType,
userJoinReportDataType,
userReportDataType,
......@@ -15,4 +16,7 @@ export class DataDashboardsAPI {
// 数据看板-加盟信息
static getUserJoinReportData: userJoinReportDataType = () =>
axios.get('/pms/product/report/getProductReportData');
// 数据看板-订单信息
static getOrderReportData: orderReportDataType = () =>
axios.get('/oms/product/report/getOrderReportData');
}
import {
addGambitType,
checkDynamicType,
deleteForumType,
deleteGambitType,
forumDetailType,
forumListType,
hiddenForumType,
likeUserInfoType,
listGambitType,
updateGambitType,
} from '~/api/interface/forumManageType';
import axios from '~/api/request';
......@@ -27,4 +31,14 @@ export class ForumManageAPI {
// 动态审核
static checkDynamic: checkDynamicType = (params) =>
axios.get('/release/backstage/forum/checkDynamic', { params });
// 话题-列表
static getTopicList: listGambitType = (data) => axios.post('/release/gambit/listGambit', data);
// 话题-新增
static addGambit: addGambitType = (data) => axios.post('/release/gambit/insertGambit', data);
// 话题-删除
static deleteGambit: deleteGambitType = (params) =>
axios.get('/release/gambit/deleteGambit', { params });
// 话题-编辑
static updateGambit: updateGambitType = (data) =>
axios.post('/release/gambit/updateGambit', data);
}
......@@ -53,34 +53,47 @@ $design_height:856;
}
&-card-3{
height: toVh(346,1080);
.card-header{
display: flex;
.card-info-left{
flex: 1;
.card-header{
padding-right: 0 !important;
}
.card-progress{
padding-left: 39px;
margin-bottom: 19px;
.progress-item{
display: flex;
align-items: center;
&-label{
font-size: 1.2rem;
color: #707070;
font-weight: bold;
}
&-info{
flex: 1;
margin: 0 10px 0 24px;
}
}
}
}
.card-info-right{
padding: 20px 40px 0 0;
.sku-count{
font-size: 2.33rem;
font-weight: bold;
color: #010101;
line-height: 3.33rem;
margin-bottom: 26px;
}
}
.card-progress{
padding: 0 53px 0 39px;
margin-bottom: 19px;
.progress-item{
display: flex;
align-items: center;
&-label{
font-size: 1.2rem;
color: #707070;
font-weight: bold;
}
&-info{
flex: 1;
margin: 0 36px 0 24px;
}
&-value{
font-size: 1.67rem;
font-weight: bold;
color: #000000;
}
.progress-item-value{
font-size: 1.67rem;
font-weight: bold;
color: #000000;
line-height: 24px;
text-align: center;
}
}
}
......
......@@ -7,6 +7,8 @@ import { InterDataType } from '~/api/interface';
import { userJoinReportDataType } from '~/api/interface/dataDashboardsType';
// 数据看板-加盟返回类型
type joinReportDataType = InterDataType<userJoinReportDataType>;
let timer: any;
const JoinInfo = () => {
const [joinReportDataType, setJoinReportDataType] = useState<joinReportDataType>();
const [listingProducts, setListingProducts] = useState<{ label: string; value: number }[]>([]);
......@@ -59,7 +61,7 @@ const JoinInfo = () => {
series: [
{
type: 'pie',
radius: ['40%', '70%'],
radius: ['40%', '60%'],
avoidLabelOverlap: false,
itemStyle: {
normal: {
......@@ -69,6 +71,21 @@ const JoinInfo = () => {
},
},
},
label: {
formatter: '{value|{c}}\n{name|{b}}',
rich: {
name: {
fontSize: '0.8rem',
color: '#999',
},
value: {
fontSize: '1.2rem',
color: '#000',
fontWeight: 'bold',
align: 'center',
},
},
},
data,
},
],
......@@ -78,8 +95,16 @@ const JoinInfo = () => {
});
};
// 定时刷新数据
const refreshData = () => {
if (timer) clearInterval(timer);
timer = setInterval(() => {
getUserJoinReportData();
}, 600000);
};
useEffect(() => {
getUserJoinReportData();
refreshData();
}, []);
return (
<div className='join-info'>
......@@ -95,23 +120,33 @@ const JoinInfo = () => {
<div className='card-echarts' id='pie'></div>
</div>
<div className='join-info-card-3'>
<div className='card-header'>
<div className='card-header-icon'></div>
<div className='card-header-title'>上架商品 (SKU)</div>
<div className='sku-count'>{totalCount}</div>
<div className='card-info-left'>
<div className='card-header'>
<div className='card-header-icon'></div>
<div className='card-header-title'>上架商品 (SKU)</div>
{/*<div className='sku-count'>{totalCount}</div>*/}
</div>
<div className='card-progress'>
{listingProducts.map((v, i) => (
<div className='progress-item' key={i}>
<div className='progress-item-label'>{v.label}</div>
<div className='progress-item-info'>
<Progress
percent={(v.value / totalCount) * 100}
strokeColor='#F4872A'
showInfo={false}
/>
</div>
{/*<div className='progress-item-value'>{v.value}</div>*/}
</div>
))}
</div>
</div>
<div className='card-progress'>
<div className='card-info-right'>
<div className='sku-count'>{totalCount}</div>
{listingProducts.map((v, i) => (
<div className='progress-item' key={i}>
<div className='progress-item-label'>{v.label}</div>
<div className='progress-item-info'>
<Progress
percent={(v.value / totalCount) * 100}
strokeColor='#F4872A'
showInfo={false}
/>
</div>
<div className='progress-item-value'>{v.value}</div>
<div className='progress-item-value' key={i}>
{v.value}
</div>
))}
</div>
......
import './index.scss';
import * as echarts from 'echarts';
import { useEffect } from 'react';
import { useEffect, useState } from 'react';
import { DataDashboardsAPI } from '~/api';
import { InterDataType } from '~/api/interface';
import { orderReportDataType } from '~/api/interface/dataDashboardsType';
import dayjs from 'dayjs';
// 数据看板-订单数据返回类型
type orderDataType = InterDataType<orderReportDataType>;
let timer: any;
const TradeInfo = () => {
const [orderData, setOrderData] = useState<orderDataType>();
// 表格数据
const [tableData, setTableData] = useState<{ label: string; orderCount: number; GMV: number }[]>(
[],
);
// 初始化柱状图
const initEchartsBar = () => {
const initEchartsBar = (totalPriceCount: number[]) => {
const myChart = echarts.init(document.getElementById('histogram'));
myChart.setOption({
legend: {
......@@ -12,10 +25,6 @@ const TradeInfo = () => {
top: 0,
data: [
{
name: '总订单数',
icon: 'pin',
},
{
name: '总交易额',
icon: 'pin',
},
......@@ -31,22 +40,9 @@ const TradeInfo = () => {
yAxis: {},
series: [
{
name: '总订单数',
type: 'bar',
data: [50, 20, 36],
barWidth: '13',
itemStyle: {
barBorderRadius: [7, 7, 0, 0],
color: new echarts.graphic.LinearGradient(0, 0, 0, 1, [
{ offset: 0, color: '#0B7CFE' },
{ offset: 1, color: '#FFFFFF' },
]),
},
},
{
name: '总交易额',
type: 'bar',
data: [50, 20, 36],
data: totalPriceCount,
barWidth: '13',
itemStyle: {
barBorderRadius: [7, 7, 0, 0],
......@@ -62,17 +58,51 @@ const TradeInfo = () => {
myChart.resize();
});
};
// 数据看板-订单数据
const getOrderReportData = () => {
DataDashboardsAPI.getOrderReportData().then(({ result }) => {
if (result) {
setOrderData(result);
initEchartsBar([result.saleGMV, result.leaseGMV, result.serviceGMV]);
setTableData([
{
label: '商城售卖',
orderCount: result.saleOrderCount,
GMV: result.saleGMV,
},
{
label: '商品租赁',
orderCount: result.leaseOrderCount,
GMV: result.leaseGMV,
},
{
label: '服务订单',
orderCount: result.serviceOrderCount,
GMV: result.serviceGMV,
},
]);
}
});
};
// 定时刷新数据
const refreshData = () => {
if (timer) clearInterval(timer);
timer = setInterval(() => {
getOrderReportData();
}, 600000);
};
useEffect(() => {
initEchartsBar();
getOrderReportData();
refreshData();
}, []);
return (
<div className='trade-info'>
<div className='trade-info-card-1'>
<div className='total-price'>12987.00</div>
<div className='total-price'>{orderData?.totalGMV.toLocaleString()}</div>
<div className='total-price-meta'>实时交易总额 (GMV)</div>
<div className='time'>09.05更新</div>
<div className='time'>{dayjs().format('MM-DD')}更新</div>
</div>
<div className='trade-info-card-2'>
<div className='card-header'>
......@@ -86,21 +116,13 @@ const TradeInfo = () => {
<div className='header-td'>订单总数(个)</div>
<div className='header-td'>交易总额(元)</div>
</div>
<div className='card-table-tr'>
<div className='td'>商城售卖</div>
<div className='td'>123</div>
<div className='td'>¥187.00</div>
</div>
<div className='card-table-tr'>
<div className='td'>商品租赁</div>
<div className='td'>123</div>
<div className='td'>¥187.00</div>
</div>{' '}
<div className='card-table-tr'>
<div className='td'>服务订单</div>
<div className='td'>123</div>
<div className='td'>¥187.00</div>
</div>
{tableData.map((v, index) => (
<div className='card-table-tr' key={index}>
<div className='td'>{v.label}</div>
<div className='td'>{v.orderCount}</div>
<div className='td'>¥{v.GMV.toLocaleString()}</div>
</div>
))}
</div>
</div>
</div>
......
......@@ -9,6 +9,7 @@ type userInfoDataType = InterDataType<userReportDataType>;
// 数据报表-信息发布返回类型
type releaseReportData = InterDataType<releaseReportDataType>;
let timer: any;
const UserInfo = () => {
const [userReportData, setUserReportData] = useState<userInfoDataType>();
const [releaseReportData, setReleaseReportData] = useState<releaseReportData>();
......@@ -28,10 +29,19 @@ const UserInfo = () => {
}
});
};
// 定时刷新数据
const refreshData = () => {
if (timer) clearInterval(timer);
timer = setInterval(() => {
getUserReportData();
getReleaseReportData();
}, 600000);
};
useEffect(() => {
getUserReportData();
getReleaseReportData();
refreshData();
}, []);
return (
<div className='user-info'>
......@@ -56,11 +66,11 @@ const UserInfo = () => {
</div>
<div className='card-info-2'>
<div className='user-auth'>
<div className='value'>{userReportData?.dronePilotCount}</div>
<div className='value'>{userReportData?.realNameCount}</div>
<div className='label'>实名认证</div>
</div>
<div className='flyer-auth'>
<div className='value'>{userReportData?.realNameCount}</div>
<div className='value'>{userReportData?.dronePilotCount}</div>
<div className='label'>飞手认证</div>
</div>
</div>
......
......@@ -20,8 +20,8 @@
border-radius: 5px;
border: 1px solid #4E4E4E;
position: absolute;
top: 36px;
left: 25px;
top: 20px;
right: 25px;
font-size: 12px;
font-weight: bold;
color: #FFFFFF;
......
import SearchBox, { searchColumns } from '~/components/search-box';
import { Button, message, Modal, Table, Tooltip } from 'antd';
import { Button, message, Modal, Table, Tag, Tooltip } from 'antd';
import { ColumnsType } from 'antd/es/table';
import { useEffect, useState } from 'react';
import DynamicDetailModal from './components/dynamicDetailModal';
......@@ -44,6 +44,12 @@ const DynamicList = () => {
),
},
{
title: '话题',
align: 'center',
dataIndex: 'gambitName',
render: (text: string[]) => text?.map((v, index) => <Tag key={index}>{v}</Tag>),
},
{
title: '作者(用户名称)',
align: 'center',
render: (_text: string, record) => (
......
import { Form, Input, message, Modal, ModalProps, Select } from 'antd';
import { FC, useEffect, useState } from 'react';
import { Uploader } from '~/components/uploader';
import { UploadOutlined } from '@ant-design/icons';
import { InterListType, InterReqType } from '~/api/interface';
import { addGambitType, listGambitType } from '~/api/interface/forumManageType';
import { gambitPropertyList } from '~/utils/dictionary';
import { ForumManageAPI } from '~/api';
// 新增话题参数类型
type addTopicParams = Exclude<InterReqType<addGambitType>, undefined>;
// 话题列表返回类型
type topicListType = InterListType<listGambitType>;
interface selfProps {
onOk: () => void;
onCancel: () => void;
currentTopicItem: topicListType[0] | undefined;
}
const AddTopicModal: FC<ModalProps & selfProps> = ({ open, onCancel, onOk, currentTopicItem }) => {
const [form] = Form.useForm<addTopicParams>();
const [gambitIconFileList, setGambitIconFileList] = useState<any>([]);
const [gambitCoverFileList, setGambitCoverFileList] = useState<any>([]);
const handleOk = () => {
form.validateFields().then((values) => {
ForumManageAPI[currentTopicItem ? 'updateGambit' : 'addGambit']({
...values,
gambitName: values.gambitName,
id: currentTopicItem ? currentTopicItem.id : undefined,
}).then(({ code }) => {
if (code === '200') {
message.success(currentTopicItem ? '编辑成功' : '新增成功');
form.resetFields();
setGambitIconFileList([]);
setGambitCoverFileList([]);
onOk();
}
});
});
};
const handleCancel = () => {
form.resetFields();
setGambitIconFileList([]);
setGambitCoverFileList([]);
onCancel();
};
// 图标上传成功
const gambitIconUploadSuccess = (value: any) => {
setGambitIconFileList(value);
form.setFieldValue('gambitIcon', value.length ? value[0].url : undefined);
};
// 封面上传成功
const gambitCoverUploadSuccess = (value: any) => {
setGambitCoverFileList(value);
form.setFieldValue('gambitCover', value.length ? value[0].url : undefined);
};
useEffect(() => {
if (currentTopicItem) {
form.setFieldsValue({
gambitCover: currentTopicItem.gambitCover || undefined,
gambitIcon: currentTopicItem.gambitIcon || undefined,
gambitName: currentTopicItem.gambitName,
gambitProperty: currentTopicItem.gambitProperty,
});
setGambitIconFileList(
currentTopicItem.gambitIcon
? [
{
id: Math.random(),
uid: Math.random(),
name: 'icon',
url: currentTopicItem.gambitIcon,
},
]
: [],
);
setGambitCoverFileList(
currentTopicItem.gambitCover
? [
{
id: Math.random(),
uid: Math.random(),
name: 'icon',
url: currentTopicItem.gambitCover,
},
]
: [],
);
}
}, [currentTopicItem]);
return (
<Modal title='新增话题' open={open} onOk={handleOk} onCancel={handleCancel}>
<Form labelCol={{ span: 4 }} wrapperCol={{ span: 15 }} form={form}>
<Form.Item
label='名称'
name='gambitName'
rules={[{ required: true, message: '请输入名称' }]}
>
<Input placeholder='请输入名称' maxLength={30} />
</Form.Item>
<Form.Item label='图标' name='gambitIcon'>
<Uploader
fileUpload
listType='picture-card'
fileLength={1}
onChange={gambitIconUploadSuccess}
defaultFileList={gambitIconFileList}
>
<UploadOutlined />
</Uploader>
</Form.Item>
<Form.Item label='封面' name='gambitCover'>
<Uploader
fileUpload
listType='picture-card'
fileLength={1}
onChange={gambitCoverUploadSuccess}
defaultFileList={gambitCoverFileList}
>
<UploadOutlined />
</Uploader>
</Form.Item>
<Form.Item
label='属性'
name='gambitProperty'
rules={[{ required: true, message: '请选择属性' }]}
>
<Select placeholder='请选择属性' options={gambitPropertyList}></Select>
</Form.Item>
</Form>
</Modal>
);
};
export default AddTopicModal;
import { Button, Table, Image, Tag, Modal, message } from 'antd';
import SearchBox from '~/components/search-box';
import AddTopicModal from './components/addTopicModal';
import { useEffect, useState } from 'react';
import { ForumManageAPI } from '~/api';
import { InterListType, InterReqListType, PaginationProps } from '~/api/interface';
import { listGambitType } from '~/api/interface/forumManageType';
import { ColumnsType } from 'antd/es/table/InternalTable';
import { gambitPropertyList } from '~/utils/dictionary';
// 话题列表返回类型
type topicListType = InterListType<listGambitType>;
// 话题列表参数类型
type topicParameters = InterReqListType<listGambitType>;
const TopicList = () => {
const tableColumns: ColumnsType<topicListType[0]> = [
{
title: '名称',
align: 'center',
dataIndex: 'gambitName',
},
{
title: '属性',
align: 'center',
dataIndex: 'gambitProperty',
render: (text: number) => (
<Tag>{gambitPropertyList.find((v) => v.value === text)?.label}</Tag>
),
},
{
title: '图标',
align: 'center',
dataIndex: 'gambitIcon',
render: (text: string) => <Image src={text} width={50} height={50} />,
},
{
title: '封面',
align: 'center',
dataIndex: 'gambitCover',
render: (text: string) => <Image src={text} width={50} height={50} />,
},
{
title: '操作',
align: 'center',
width: '20%',
render: (_text: any, record) => (
<>
<Button type='link' onClick={() => addTopicModalShowClick(record)}>
编辑
</Button>
<Button type='link' onClick={() => deleteTopic(record)}>
删除
</Button>
</>
),
},
];
const [addTopicModalShow, setAddTopicModalShow] = useState<boolean>(false);
const [pagination, setPagination] = useState<PaginationProps & { totalCount: number }>({
pageNo: 1,
pageSize: 10,
totalCount: 0,
});
const [query, setQuery] = useState<topicParameters>();
const [tableData, setTableData] = useState<topicListType>([]);
const [currentTopicItem, setCurrentTopicItem] = useState<topicListType[0]>();
// 筛选
const searchSuccess = (value: topicParameters) => {
pagination.pageSize = 10;
pagination.pageNo = 1;
setQuery(value);
getTopicList(value);
};
// 获取话题列表
const getTopicList = (query?: topicParameters) => {
ForumManageAPI.getTopicList({
pageNo: pagination.pageNo,
pageSize: pagination.pageSize,
...query,
}).then(({ result }) => {
setTableData(result.list || []);
pagination.totalCount = result.totalCount;
setPagination({ ...pagination });
});
};
// 分页
const paginationChange = (pageNo: number, pageSize: number) => {
pagination.pageNo = pageNo;
pagination.pageSize = pageSize;
getTopicList(query);
};
// 新建话题弹窗
const addTopicModalShowClick = (record?: topicListType[0]) => {
setCurrentTopicItem(record ? { ...record } : undefined);
setAddTopicModalShow(true);
};
const addTopicModalCancel = () => {
setAddTopicModalShow(false);
};
const addTopicModalShowOk = () => {
getTopicList();
setAddTopicModalShow(false);
};
// 删除话题
const deleteTopic = (record: topicListType[0]) => {
Modal.confirm({
title: '删除话题',
content: '确认删除该话题?',
onOk: () => {
ForumManageAPI.deleteGambit({ id: record.id }).then(({ code }) => {
if (code === '200') {
message.success('删除成功');
getTopicList();
}
});
},
});
};
useEffect(() => {
getTopicList();
}, []);
return (
<div className='topic-list'>
<SearchBox
search={[
{
label: '名称',
type: 'input',
name: 'gambitName',
placeholder: '请输入名称',
},
{
label: '属性',
type: 'Select',
name: 'gambitProperty',
options: gambitPropertyList,
placeholder: '请选择属性',
},
]}
child={
<Button type='primary' onClick={() => addTopicModalShowClick()}>
新建
</Button>
}
searchData={searchSuccess}
/>
<Table
bordered
dataSource={tableData}
rowKey='id'
columns={tableColumns}
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} 条数据`,
}}
/>
<AddTopicModal
open={addTopicModalShow}
onCancel={addTopicModalCancel}
onOk={addTopicModalShowOk}
currentTopicItem={currentTopicItem}
/>
</div>
);
};
export default TopicList;
......@@ -47,11 +47,14 @@ const AddEditModal: React.FC<propType> = (props) => {
const [form] = Form.useForm<ReqType>();
// 上传图片
const [bannerTypeValue, setBannerTypeValue] = useState(0);
// 封面图文件
const [bannerImgFileList, setBannerImgFileList] = useState<any>([]);
// 是否有效
const [validTime, setValidTime] = useState<number>(0);
// 关闭弹窗
const handleCancel = () => {
setBannerTypeValue(0);
setBannerImgFileList([]);
form.resetFields();
closed();
};
......@@ -93,6 +96,9 @@ const AddEditModal: React.FC<propType> = (props) => {
if (!open) return;
if (!data) return;
form.setFieldsValue(data);
setBannerImgFileList([
{ id: Math.random(), uid: Math.random(), name: 'bannerImg', url: data?.bannerImg },
]);
setBannerTypeValue(data?.bannerType);
if (data?.endTime && data?.startTime) {
setValidTime(1);
......@@ -180,8 +186,11 @@ const AddEditModal: React.FC<propType> = (props) => {
fileLength={1}
fileSize={10}
fileType={['image/png', 'image/jpeg', 'image/jpg', 'image/gif', 'image/bmp']}
onChange={(e) => form.setFieldValue('bannerImg', e[0].url)}
defaultFileList={data?.bannerImg ? [{ url: data?.bannerImg }] : []}
onChange={(e) => {
setBannerImgFileList(e);
form.setFieldValue('bannerImg', e[0].url);
}}
defaultFileList={bannerImgFileList}
>
<PlusOutlined />
</Uploader>
......@@ -235,9 +244,7 @@ const AddEditModal: React.FC<propType> = (props) => {
wrapperCol={{ span: 20 }}
>
<RichText
// eslint-disable-next-line @typescript-eslint/ban-ts-comment
// @ts-ignore
value={form.getFieldValue('textContent')}
richTextContent={form.getFieldValue('textContent')}
onChange={(e) => form.setFieldValue('textContent', e)}
height={250}
/>
......
......@@ -229,18 +229,16 @@ export const whiteRouterList: Array<RouteObject & RouteObjectType> = [
// 路由数组
export const routerList: Array<RouteObjectType> = [
// {
// path: '/dataDashboards',
// element: withLoadingComponent(<DataBoardView />),
// errorElement: <ErrorPage />,
// meta: {
// icon: <BarChartOutlined />,
// title: '数据看板',
// id: 300,
// hidden: true,
// develop: true,
// },
// },
{
path: '/dataDashboards',
element: withLoadingComponent(<DataBoardView />),
errorElement: <ErrorPage />,
meta: {
icon: <BarChartOutlined />,
title: '数据看板',
id: 2,
},
},
{
path: '/customManage',
element: <LayoutView />,
......
......@@ -187,3 +187,18 @@ export const fileTypeList = [
value: 'application/vnd.openxmlformats-officedocument.presentationml.presentation',
},
];
// 话题-属性字典
export const gambitPropertyList = [
{
label: '普通',
value: 1,
},
{
label: '热门',
value: 2,
},
{
label: '推荐',
value: 3,
},
];
Markdown 格式
0%
您添加了 0 到此讨论。请谨慎行事。
请先完成此评论的编辑!
注册 或者 后发表评论