提交 6a85a7fa 作者: ZhangLingKun

Merge branch 'develop' into 1.1.4

......@@ -14,4 +14,4 @@ patches:
images:
- name: REGISTRY/NAMESPACE/IMAGE:TAG
newName: mmc-registry.cn-shenzhen.cr.aliyuncs.com/sharefly-dev/admin
newTag: ad200dc1515c0c4aabd0709d354c997064ba1b19
newTag: 14772f8788209f9b1f126639bb73e51b9256c3b7
......@@ -14,4 +14,4 @@ patches:
images:
- name: REGISTRY/NAMESPACE/IMAGE:TAG
newName: mmc-registry.cn-shenzhen.cr.aliyuncs.com/sharefly/admin
newTag: e622090a5db3a73133cf616865a134ee51cb7c85
newTag: e3cbdbdf930c1e808ada6e9262291201d82ff082
......@@ -9,6 +9,7 @@ export type listAppUserType = InterListFunction<
phoneNum?: string;
startTime?: string;
realAuthStatus?: number;
xzAuthStatus?: number;
},
{
id: number;
......@@ -49,6 +50,7 @@ export type listAppUserType = InterListFunction<
userAccountId: number;
};
inviteCount: number;
xzAuthStatus: number;
}
>;
// 加盟标签列表
......@@ -268,3 +270,13 @@ export type authDetailType = InterFunction<
>;
//实名认证-更新备注
export type authRemarkType = InterFunction<{ id: number; remark: string }, any>;
// 商家列表-数据统计
export type listAppUserCountType = InterFunction<
any,
{
failAuditSum: number;
passAuditSum: number;
unAuditedSum: number;
}
>;
......@@ -69,3 +69,12 @@ export type updateAuditStatusType = InterFunction<
>;
//飞手审批不通过原因列表
export type backListReasonType = InterFunction<any, { id: number; reason: string }[]>;
// 飞手审批数据统计
export type getPilotAuditSumType = InterFunction<
any,
{
failPilotAuditSum: number;
passPilotAuditSum: number;
unAuditedPilotSum: number;
}
>;
......@@ -2,7 +2,7 @@ import { InterFunction, InterListFunction } from '~/api/interface';
//论坛-列表
export type forumListType = InterListFunction<
{ keyword?: string },
{ keyword?: string; status?: number },
{
id: number;
description: string;
......@@ -142,3 +142,12 @@ export type updateGambitType = InterFunction<
},
any
>;
// 话题-状态个数统计
export type countGambitType = InterFunction<
any,
{
failAuditSum: number;
passAuditSum: number;
unAuditedSum: number;
}
>;
......@@ -11,6 +11,7 @@ import {
deleteApplyTag,
editUserApplyTag,
editUserApplyTagDetails,
listAppUserCountType,
listAppUserType,
listAuthPageType,
listUserApplyTag,
......@@ -67,4 +68,7 @@ export class CustomManageAPI {
// 客户-实名认证更新备注
static updateRemark: authRemarkType = (params) =>
axios.get('/userapp/real-name-auth/updateRemark', { params });
// 商家列表-数据统计
static getListAppUserCount: listAppUserCountType = () =>
axios.get('/userapp/cooperation/getAuditSum');
}
......@@ -4,6 +4,7 @@ import {
backListPilotType,
backListReasonType,
backPilotLogListType,
getPilotAuditSumType,
updateAuditStatusType,
updateRemarkType,
} from '~/api/interface/flyerCenterType';
......@@ -28,4 +29,7 @@ export class FlyerCenterAPI {
axios.post('/userapp/pilot/updateAuditStatus', data);
// 飞手审批不通过原因
static getBackListReason: backListReasonType = () => axios.get('/userapp/pilot/backListReason');
// 飞手审批数据统计
static getPilotAuditSum: getPilotAuditSumType = () =>
axios.get('/userapp/pilot/getPilotAuditSum');
}
import {
addGambitType,
checkDynamicType,
countGambitType,
deleteForumType,
deleteGambitType,
forumDetailType,
......@@ -41,4 +42,7 @@ export class ForumManageAPI {
// 话题-编辑
static updateGambit: updateGambitType = (data) =>
axios.post('/release/gambit/updateGambit', data);
// 话题-统计个数
static getCountGambit: countGambitType = () =>
axios.get('/release/backstage/forum/getDynamicAuditSum');
}
......@@ -38,7 +38,14 @@ interface selfProps {
type: number; //0:采购订单,1:商城订单
}
const SureOrder: FC<ModalProps & selfProps> = ({ open, onOk, onCancel, orderItem, type }) => {
const SureOrder: FC<ModalProps & selfProps> = ({
open,
onOk,
onCancel,
orderItem,
type,
updateContract,
}) => {
const navigate = useNavigate();
const [orderInfoForm] = Form.useForm<{
orderTotalAmount: number;
......
.custom-identity{
.data-statistics{
display: flex;
align-items: center;
color: red;
justify-content: flex-end;
}
}
......@@ -3,15 +3,19 @@ import SearchBox from '~/components/search-box';
import { CustomManageAPI } from '~/api';
import { Button, message, Modal, Rate, Table } from 'antd';
import { ColumnsType } from 'antd/es/table';
import { InterListType, InterReqListType } from '~/api/interface';
import { listUserApplyTag } from '~/api/interface/customManageType';
import { InterDataType, InterListType, InterReqListType } from '~/api/interface';
import { listAppUserCountType, listUserApplyTag } from '~/api/interface/customManageType';
import ApprovalModal from './comp/approvalModal';
import AddEditModal from '~/pages/customManage/customIdentity/comp/addEditModal';
import './index.scss';
// 列表类型
type TableType = InterListType<listUserApplyTag>;
// 请求的参数
type ReqType = InterReqListType<listUserApplyTag>;
// 统计数据返回类型
type statisticsDataType = InterDataType<listAppUserCountType>;
// 搜索表单的数据
let query: ReqType = {};
// 审批状态
......@@ -40,6 +44,9 @@ const CustomIdentityView = () => {
current: 1,
totalPage: 0,
});
// 数据统计
const [statisticsData, setStatisticsDataType] = useState<statisticsDataType>();
// 加载列表
const getTableList = async (value = {}) => {
// 只需要修改这个地方的接口即可
......@@ -91,13 +98,24 @@ const CustomIdentityView = () => {
tableData.length === 1 ? pagination.current - 1 : pagination.current,
pagination.pageSize,
);
getListAppUserCount();
}
},
});
};
// 商家加盟状态数据统计
const getListAppUserCount = () => {
CustomManageAPI.getListAppUserCount().then(({ result }) => {
if (result) {
setStatisticsDataType(result);
}
});
};
useEffect(() => {
getCooperationList().then();
getTableList().then();
getListAppUserCount();
}, []);
// 表格结构
const columns: ColumnsType<TableType[0]> = [
......@@ -192,7 +210,7 @@ const CustomIdentityView = () => {
},
];
return (
<>
<div className='custom-identity'>
<SearchBox
search={[
{
......@@ -223,6 +241,22 @@ const CustomIdentityView = () => {
},
]}
searchData={onFinish}
sufFixBtn={
<div className='data-statistics'>
<div>
<span>已通过:</span>
<span>{statisticsData?.passAuditSum || 0}</span>
</div>
<div>
<span>审批中:</span>
<span>{statisticsData?.unAuditedSum || 0}</span>
</div>
<div>
<span>未通过:</span>
<span>{statisticsData?.failAuditSum || 0}</span>
</div>
</div>
}
/>
<Table
size='small'
......@@ -250,6 +284,7 @@ const CustomIdentityView = () => {
setApprovalModalVisible(false);
setEditData(undefined);
paginationChange(pagination.current, pagination.pageSize);
getListAppUserCount();
}}
/>
{/*编辑弹窗*/}
......@@ -263,7 +298,7 @@ const CustomIdentityView = () => {
paginationChange(pagination.current, pagination.pageSize);
}}
/>
</>
</div>
);
};
......
......@@ -123,15 +123,15 @@ function CustomListView() {
render: (text: number) => (text ? '已认证' : '未认证'),
},
{
title: '认证企业',
dataIndex: 'companyName',
align: 'center',
},
{
title: '企业认证',
dataIndex: 'companyAuthStatus',
align: 'center',
render: (text) => (text === 0 ? '未认证' : '已认证'),
render: (text, record) => (
<>
<div>{text === 0 ? '未认证' : '已认证'}</div>
<div style={{ color: 'rgb(22,119,255)' }}>{record.companyName}</div>
</>
),
},
{
title: '电子签约认证',
......@@ -140,6 +140,12 @@ function CustomListView() {
render: (_text) => `未认证`,
},
{
title: '提现认证',
dataIndex: 'xzAuthStatus',
align: 'center',
render: (text: number) => (text ? '已认证' : '未认证'),
},
{
title: '用户来源',
dataIndex: 'portType',
align: 'center',
......@@ -273,6 +279,16 @@ function CustomListView() {
{ value: 1, label: '已认证' },
],
},
{
label: '提现认证',
name: 'xzAuthStatus',
type: 'Select',
placeholder: '请选择认证状态',
options: [
{ value: 0, label: '未认证' },
{ value: 1, label: '已认证' },
],
},
]}
searchData={onFinish}
/>
......
.flyer-list{
.data-statistics{
display: flex;
align-items: center;
color: red;
justify-content: flex-end;
}
}
......@@ -4,10 +4,11 @@ import { ColumnsType } from 'antd/es/table';
import { CommonAPI, FlyerCenterAPI } from '~/api';
import { useEffect, useState } from 'react';
import { InterDataType, InterReqListType, PaginationProps } from '~/api/interface';
import { backListPilotType } from '~/api/interface/flyerCenterType';
import { backListPilotType, getPilotAuditSumType } from '~/api/interface/flyerCenterType';
import { getSecondDistrictInfoType } from '~/api/interface/commonType';
import { useNavigate } from 'react-router-dom';
import UpdateRemarkModal from './components/updateRemarkModal';
import './index.scss';
//飞手列表返回类型
type flyerListType = InterDataType<backListPilotType>['list'];
......@@ -15,6 +16,8 @@ type flyerListType = InterDataType<backListPilotType>['list'];
type flyerListParameters = InterReqListType<backListPilotType>;
//地址返回数据
type locationType = InterDataType<getSecondDistrictInfoType>;
// 飞手审批数据统计返回类型
type statisticsDataType = InterDataType<getPilotAuditSumType>;
const FlyerList = () => {
const navigate = useNavigate();
......@@ -146,6 +149,8 @@ const FlyerList = () => {
const [loading, setLoading] = useState<boolean>(false);
//修改备注弹窗
const [updateRemarkModalShow, setUpdateRemarkModalShow] = useState<boolean>(false);
// 飞手审批数据统计
const [approveStatistics, setApproveStatistics] = useState<statisticsDataType>();
//飞手列表
const getFlyerList = (query?: flyerListParameters) => {
......@@ -185,6 +190,12 @@ const FlyerList = () => {
setQuery({ ...value, areaNumber: value.areaNumber ? value.areaNumber[1] : undefined });
getFlyerList({ ...value, areaNumber: value.areaNumber ? value.areaNumber[1] : undefined });
};
// 获取飞手审批数据统计
const getFlyerApproveStatistics = () => {
FlyerCenterAPI.getPilotAuditSum().then(({ result }) => {
setApproveStatistics(result);
});
};
//获取地域数据
const getSecondDistrictInfo = () => {
CommonAPI.getSecondDistrictInfo().then(({ result }) => {
......@@ -205,11 +216,11 @@ const FlyerList = () => {
};
//飞手审批页面
const toFlyerApprove = (record: flyerListType[0]) => {
navigate({ pathname: '/flyerCenter/flyerDetail', search: `id=${record.id}&isApprove=1` });
navigate({ pathname: '/customManage/flyerDetail', search: `id=${record.id}&isApprove=1` });
};
//飞手详情页面
const toFlyerDetail = (record: flyerListType[0]) => {
navigate({ pathname: '/flyerCenter/flyerApprove', search: `id=${record.id}` });
navigate({ pathname: '/customManage/flyerApprove', search: `id=${record.id}` });
};
//修改备注
const updateRemarkClick = (record: flyerListType[0]) => {
......@@ -228,6 +239,7 @@ const FlyerList = () => {
getFlyerList();
getAbilityList();
getSecondDistrictInfo();
getFlyerApproveStatistics();
}, []);
return (
......@@ -240,6 +252,22 @@ const FlyerList = () => {
认证日志
</Button>
}
sufFixBtn={
<div className='data-statistics'>
<div>
<span>已通过:</span>
<span>{approveStatistics?.passPilotAuditSum || 0}</span>
</div>
<div>
<span>审批中:</span>
<span>{approveStatistics?.unAuditedPilotSum || 0}</span>
</div>
<div>
<span>未通过:</span>
<span>{approveStatistics?.failPilotAuditSum || 0}</span>
</div>
</div>
}
/>
<Table
bordered
......
......@@ -40,7 +40,7 @@ const ApplyStatusModal: FC<ModalProps & selfProps> = ({
onCancel();
};
return (
<Modal title='审批' open={open} onOk={handleOk} onCancel={handleCancel}>
<Modal title='提现审批' open={open} onOk={handleOk} onCancel={handleCancel}>
<Form
form={form}
initialValues={{ applyStatus: 1 }}
......@@ -49,8 +49,8 @@ const ApplyStatusModal: FC<ModalProps & selfProps> = ({
>
<Form.Item label='状态' name='applyStatus'>
<Radio.Group>
<Radio value={1}>提现成功</Radio>
<Radio value={2}>提现失败</Radio>
<Radio value={1}>同意</Radio>
<Radio value={2}>拒绝</Radio>
</Radio.Group>
</Form.Item>
<Form.Item label='备注' name='remark'>
......
......@@ -104,7 +104,7 @@ const WithDrawManage = () => {
dataIndex: 'tradeResult',
},
{
title: '时间',
title: '申请时间',
align: 'center',
dataIndex: 'createTime',
},
......
.dynamic-list{
.data-statistics{
display: flex;
align-items: center;
color: red;
justify-content: flex-end;
}
.forum-description{
overflow: hidden;
text-overflow: ellipsis;
......
......@@ -5,12 +5,12 @@ import { useEffect, useState } from 'react';
import DynamicDetailModal from './components/dynamicDetailModal';
import { ForumManageAPI } from '~/api';
import { InterDataType, InterListType, InterReqListType, PaginationProps } from '~/api/interface';
import { forumDetailType, forumListType } from '~/api/interface/forumManageType';
import { countGambitType, forumDetailType, forumListType } from '~/api/interface/forumManageType';
import './index.scss';
// 动态审核状态
const checkStatusList = [
{ label: '审核中', value: 0 },
{ label: '待审核', value: 0 },
{ label: '审核通过', value: 1 },
{ label: '审核不通过', value: 2 },
];
......@@ -21,6 +21,8 @@ type forumType = InterListType<forumListType>;
type forumParameters = InterReqListType<forumListType>;
//论坛详情返回类型
type detailType = InterDataType<forumDetailType>;
//论坛统计数据返回类型
type getCountGambitType = InterDataType<countGambitType>;
const DynamicList = () => {
const searchColumnsData: searchColumns[] = [
{
......@@ -29,6 +31,13 @@ const DynamicList = () => {
name: 'keyword',
placeholder: '用户名称/用户UID/用户手机号码',
},
{
label: '状态',
type: 'Select',
name: 'status',
placeholder: '帖子状态',
options: checkStatusList,
},
];
const tableColumns: ColumnsType<forumType[0]> = [
{
......@@ -127,6 +136,7 @@ const DynamicList = () => {
const [forumDetail, setForumDetail] = useState<detailType>();
const [query, setQuery] = useState<forumParameters>();
const [dynamicDetailModalShow, setDynamicDetailModalShow] = useState<boolean>(false);
const [countGambit, setCountGambit] = useState<getCountGambitType>();
//动态列表
const getDynamicList = (query?: forumParameters) => {
......@@ -153,6 +163,14 @@ const DynamicList = () => {
pagination.pageSize = pageSize;
getDynamicList(query);
};
// 获取动态不同状态个数
const getCountGambit = () => {
ForumManageAPI.getCountGambit().then(({ result }) => {
if (result) {
setCountGambit(result);
}
});
};
//强制删除论坛
const deleteForumClick = (record: forumType[0]) => {
Modal.confirm({
......@@ -166,6 +184,7 @@ const DynamicList = () => {
pagination.pageNo -= 1;
}
getDynamicList(query);
getCountGambit();
}
});
},
......@@ -202,6 +221,17 @@ const DynamicList = () => {
}
});
};
// 审核请求
const replyReq = async (record: forumType[0], status: boolean) => {
const res = await ForumManageAPI.checkDynamic({ dynamicId: record.id, status });
if (res && res.code === '200') {
message.success('操作成功');
paginationChange(pagination.pageNo, pagination.pageSize);
Modal.destroyAll();
getCountGambit();
}
};
// 是否确认审核
const handleCheckStatus = (record: forumType[0]) => {
Modal.confirm({
......@@ -209,29 +239,51 @@ const DynamicList = () => {
content: `请确认是否审核通过?通过后动态将展示在论坛列表`,
okText: '审核通过',
cancelText: '审核不通过',
onOk: async () => {
const res = await ForumManageAPI.checkDynamic({ dynamicId: record.id, status: true });
if (res && res.code === '200') {
message.success('操作成功');
paginationChange(pagination.pageNo, pagination.pageSize);
}
},
onCancel: async () => {
const res = await ForumManageAPI.checkDynamic({ dynamicId: record.id, status: false });
if (res && res.code === '200') {
message.success('操作成功');
paginationChange(pagination.pageNo, pagination.pageSize);
}
},
closable: true,
maskClosable: true,
footer: (
<div style={{ textAlign: 'right', marginTop: '10px' }}>
<Button
type='default'
style={{ marginRight: '10px' }}
onClick={() => replyReq(record, false)}
>
审核不通过
</Button>
<Button type='primary' onClick={() => replyReq(record, true)}>
审核通过
</Button>
</div>
),
});
};
// 组件挂载
useEffect(() => {
getDynamicList();
getCountGambit();
}, []);
return (
<div className='dynamic-list'>
<SearchBox search={searchColumnsData} searchData={searchSuccess} />
<SearchBox
search={searchColumnsData}
searchData={searchSuccess}
sufFixBtn={
<div className='data-statistics'>
<div>
<span>审核通过:</span>
<span>{countGambit?.passAuditSum || 0}</span>
</div>
<div>
<span>待审核:</span>
<span>{countGambit?.unAuditedSum || 0}</span>
</div>
<div>
<span>审核不通过:</span>
<span>{countGambit?.failAuditSum || 0}</span>
</div>
</div>
}
/>
<Table
size={'small'}
bordered
......
......@@ -155,6 +155,12 @@ const TopicList = () => {
</Button>
}
searchData={searchSuccess}
sufFixBtn={
<div style={{ color: 'red', textAlign: 'right' }}>
<span>话题总个数:</span>
<span>{pagination.totalCount}</span>
</div>
}
/>
<Table
bordered
......
......@@ -332,7 +332,7 @@ function EquipmentOrderView() {
title: '操作',
dataIndex: 'action',
fixed: 'right',
width: '130px',
width: '150px',
onHeaderCell: () => ({
style: {
textAlign: 'center',
......
......@@ -117,7 +117,7 @@ function ProductOrderView() {
getTableList();
};
// 订单状态筛选
const statusChangeEvent = (item: { label: string; value: number }, i: number) => {
const statusChangeEvent = (item: { label: string; value: number | undefined }, i: number) => {
pagination.current = 1;
pagination.pageSize = 10;
setStatusCodeButtonIndex(i);
......@@ -391,7 +391,7 @@ function ProductOrderView() {
dataIndex: 'action',
// align: 'right',
fixed: 'right',
width: '100px',
width: '150px',
onHeaderCell: () => ({
style: {
textAlign: 'center',
......
......@@ -102,15 +102,15 @@ export const PointList = () => {
title: '积分总额',
dataIndex: 'totalPoints',
align: 'center',
render: (text: string, record) => {
return (
<>
<Button type='link' onClick={() => handleDetail(record)}>
{text}
</Button>
</>
);
},
},
{
title: '操作',
align: 'center',
render: (_text: any, record) => (
<Button type='link' onClick={() => handleDetail(record)}>
详情
</Button>
),
},
];
useEffect(() => {
......
......@@ -151,11 +151,11 @@ const AddInstitutionsView = React.lazy(
); //机构上传
//飞手中心
const FlyerListView = React.lazy(() => import('~/pages/flyerCenter/flyerManage/flyerList')); //飞手列表
const FlyerListView = React.lazy(() => import('~/pages/customManage/flyerManage/flyerList')); //飞手列表
const FlyerAuthDailyView = React.lazy(
() => import('~/pages/flyerCenter/flyerManage/flyerAuthDaily'),
() => import('~/pages/customManage/flyerManage/flyerAuthDaily'),
); //飞手认证日志;
const FlyerDetailsView = React.lazy(() => import('~/pages/flyerCenter/flyerManage/flyerDetail')); //飞手详情、飞手审批
const FlyerDetailsView = React.lazy(() => import('~/pages/customManage/flyerManage/flyerDetail')); //飞手详情、飞手审批
// 系统管理
import AccountManageView from '~/pages/systemManage/accountManage';
......@@ -251,7 +251,7 @@ export const routerList: Array<RouteObjectType> = [
meta: {
id: 200,
icon: <TeamOutlined />,
title: '户管理',
title: '户管理',
},
children: [
{
......@@ -260,7 +260,7 @@ export const routerList: Array<RouteObjectType> = [
errorElement: <ErrorPage />,
meta: {
id: 220,
title: '户列表',
title: '户列表',
icon: <SolutionOutlined />,
},
},
......@@ -321,39 +321,17 @@ export const routerList: Array<RouteObjectType> = [
},
},
{
path: '/customManage/customIdentity',
element: withLoadingComponent(<CustomIdentityView />),
errorElement: <ErrorPage />,
meta: {
id: 240,
title: '加盟入驻',
icon: <AuditOutlined />,
},
},
],
},
{
path: '/flyerCenter',
element: <LayoutView />,
errorElement: <ErrorPage />,
meta: {
id: 1800,
icon: <UserOutlined />,
title: '飞手中心',
},
children: [
{
path: '/flyerCenter/flyerList',
path: '/customManage/flyerList',
element: withLoadingComponent(<FlyerListView />),
errorElement: <ErrorPage />,
meta: {
id: 1810,
title: '飞手管理',
icon: <UserOutlined />,
icon: <SolutionOutlined />,
},
},
{
path: '/flyerCenter/flyerAuthDaily',
path: '/customManage/flyerAuthDaily',
element: withLoadingComponent(<FlyerAuthDailyView />),
errorElement: <ErrorPage />,
meta: {
......@@ -365,7 +343,7 @@ export const routerList: Array<RouteObjectType> = [
},
},
{
path: '/flyerCenter/flyerDetail',
path: '/customManage/flyerDetail',
element: withLoadingComponent(<FlyerDetailsView />),
errorElement: <ErrorPage />,
meta: {
......@@ -377,7 +355,7 @@ export const routerList: Array<RouteObjectType> = [
},
},
{
path: '/flyerCenter/flyerApprove',
path: '/customManage/flyerApprove',
element: withLoadingComponent(<FlyerDetailsView />),
errorElement: <ErrorPage />,
meta: {
......@@ -388,6 +366,16 @@ export const routerList: Array<RouteObjectType> = [
pid: 1810,
},
},
{
path: '/customManage/customIdentity',
element: withLoadingComponent(<CustomIdentityView />),
errorElement: <ErrorPage />,
meta: {
id: 240,
title: '商家管理',
icon: <AuditOutlined />,
},
},
],
},
{
......@@ -550,26 +538,26 @@ export const routerList: Array<RouteObjectType> = [
meta: {
id: 600,
icon: <MessageOutlined />,
title: '论坛管理',
title: '社群管理',
},
children: [
{
path: '/forumManage/dynamicList',
element: withLoadingComponent(<DynamicListView />),
path: '/forumManage/topicList',
element: withLoadingComponent(<TopicListView />),
errorElement: <ErrorPage />,
meta: {
id: 610,
title: '动态列表',
id: 620,
title: '话题列表',
icon: <ThunderboltOutlined />,
},
},
{
path: '/forumManage/topicList',
element: withLoadingComponent(<TopicListView />),
path: '/forumManage/dynamicList',
element: withLoadingComponent(<DynamicListView />),
errorElement: <ErrorPage />,
meta: {
id: 620,
title: '话题列表',
id: 610,
title: '帖子列表',
icon: <ThunderboltOutlined />,
},
},
......@@ -689,7 +677,7 @@ export const routerList: Array<RouteObjectType> = [
errorElement: <ErrorPage />,
meta: {
id: 850,
title: '需求订单',
title: '任务订单',
icon: <CreditCardOutlined />,
},
},
......
Markdown 格式
0%
您添加了 0 到此讨论。请谨慎行事。
请先完成此评论的编辑!
注册 或者 后发表评论