提交 dcfd7509 编写于 作者: ibizdev's avatar ibizdev

zhujiamin 发布系统代码 [TrainSys,网页端]

上级 6a55311f
......@@ -13,13 +13,13 @@
"dependencies": {
"@floating-ui/dom": "^1.0.11",
"@ibiz-template/command": "^0.0.1-beta.50",
"@ibiz-template/controller": "^0.0.1-beta.103",
"@ibiz-template/core": "^0.0.1-beta.103",
"@ibiz-template/model": "^0.0.1-beta.103",
"@ibiz-template/runtime": "^0.0.1-beta.103",
"@ibiz-template/service": "^0.0.1-beta.103",
"@ibiz-template/theme": "^0.0.1-beta.103",
"@ibiz-template/vue-util": "^0.0.1-beta.103",
"@ibiz-template/controller": "^0.0.1-beta.104",
"@ibiz-template/core": "^0.0.1-beta.104",
"@ibiz-template/model": "^0.0.1-beta.104",
"@ibiz-template/runtime": "^0.0.1-beta.104",
"@ibiz-template/service": "^0.0.1-beta.104",
"@ibiz-template/theme": "^0.0.1-beta.104",
"@ibiz-template/vue-util": "^0.0.1-beta.104",
"@ibiz/dynamic-model-api": "^2.1.24",
"@riophae/vue-treeselect": "^0.4.0",
"dayjs": "^1.11.7",
......
......@@ -12,26 +12,26 @@ dependencies:
specifier: ^0.0.1-beta.50
version: 0.0.1-beta.50
'@ibiz-template/controller':
specifier: ^0.0.1-beta.103
version: 0.0.1-beta.103(@ibiz-template/core@0.0.1-beta.103)(@ibiz-template/model@0.0.1-beta.103)(@ibiz-template/runtime@0.0.1-beta.103)(@ibiz-template/service@0.0.1-beta.103)(lodash-es@4.17.21)(qs@6.11.1)(qx-util@0.4.8)
specifier: ^0.0.1-beta.104
version: 0.0.1-beta.104(@ibiz-template/core@0.0.1-beta.104)(@ibiz-template/model@0.0.1-beta.104)(@ibiz-template/runtime@0.0.1-beta.104)(@ibiz-template/service@0.0.1-beta.104)(lodash-es@4.17.21)(qs@6.11.1)(qx-util@0.4.8)
'@ibiz-template/core':
specifier: ^0.0.1-beta.103
version: 0.0.1-beta.103(lodash-es@4.17.21)(qx-util@0.4.8)(ramda@0.28.0)
specifier: ^0.0.1-beta.104
version: 0.0.1-beta.104(lodash-es@4.17.21)(qx-util@0.4.8)(ramda@0.28.0)
'@ibiz-template/model':
specifier: ^0.0.1-beta.103
version: 0.0.1-beta.103(@ibiz/dynamic-model-api@2.1.24)(lodash-es@4.17.21)(qx-util@0.4.8)
specifier: ^0.0.1-beta.104
version: 0.0.1-beta.104(@ibiz/dynamic-model-api@2.1.24)(lodash-es@4.17.21)(qx-util@0.4.8)
'@ibiz-template/runtime':
specifier: ^0.0.1-beta.103
version: 0.0.1-beta.103(@ibiz-template/core@0.0.1-beta.103)(@ibiz-template/model@0.0.1-beta.103)(@ibiz-template/service@0.0.1-beta.103)(qx-util@0.4.8)
specifier: ^0.0.1-beta.104
version: 0.0.1-beta.104(@ibiz-template/core@0.0.1-beta.104)(@ibiz-template/model@0.0.1-beta.104)(@ibiz-template/service@0.0.1-beta.104)(qx-util@0.4.8)
'@ibiz-template/service':
specifier: ^0.0.1-beta.103
version: 0.0.1-beta.103(@ibiz-template/core@0.0.1-beta.103)(@ibiz-template/model@0.0.1-beta.103)(qx-util@0.4.8)(ramda@0.28.0)
specifier: ^0.0.1-beta.104
version: 0.0.1-beta.104(@ibiz-template/core@0.0.1-beta.104)(@ibiz-template/model@0.0.1-beta.104)(qx-util@0.4.8)(ramda@0.28.0)
'@ibiz-template/theme':
specifier: ^0.0.1-beta.103
version: 0.0.1-beta.103
specifier: ^0.0.1-beta.104
version: 0.0.1-beta.104
'@ibiz-template/vue-util':
specifier: ^0.0.1-beta.103
version: 0.0.1-beta.103(@ibiz-template/controller@0.0.1-beta.103)(@ibiz-template/core@0.0.1-beta.103)(@ibiz-template/model@0.0.1-beta.103)(@ibiz-template/service@0.0.1-beta.103)(qs@6.11.1)(qx-util@0.4.8)(ramda@0.28.0)(vue-router@3.6.5)(vue@2.7.14)
specifier: ^0.0.1-beta.104
version: 0.0.1-beta.104(@ibiz-template/controller@0.0.1-beta.104)(@ibiz-template/core@0.0.1-beta.104)(@ibiz-template/model@0.0.1-beta.104)(@ibiz-template/service@0.0.1-beta.104)(qs@6.11.1)(qx-util@0.4.8)(ramda@0.28.0)(vue-router@3.6.5)(vue@2.7.14)
'@ibiz/dynamic-model-api':
specifier: ^2.1.24
version: 2.1.24(qx-util@0.4.8)
......@@ -939,8 +939,8 @@ packages:
qx-util: 0.4.8
dev: false
/@ibiz-template/controller@0.0.1-beta.103(@ibiz-template/core@0.0.1-beta.103)(@ibiz-template/model@0.0.1-beta.103)(@ibiz-template/runtime@0.0.1-beta.103)(@ibiz-template/service@0.0.1-beta.103)(lodash-es@4.17.21)(qs@6.11.1)(qx-util@0.4.8):
resolution: {integrity: sha512-RC4ZnaZMVZ7hQ4QCdOUznVOouqx9EnObetjM67DcKR6wblTlExsJxPnGJftlQD5bEzbkcPuGjG8Afi9YyNhuqg==}
/@ibiz-template/controller@0.0.1-beta.104(@ibiz-template/core@0.0.1-beta.104)(@ibiz-template/model@0.0.1-beta.104)(@ibiz-template/runtime@0.0.1-beta.104)(@ibiz-template/service@0.0.1-beta.104)(lodash-es@4.17.21)(qs@6.11.1)(qx-util@0.4.8):
resolution: {integrity: sha512-F2mhXXQoeejMhHMS15fcwvcou/WH7vMWYEDSWdxb/gpVHsm3mAVHa9kTQYFsJoCTjs2ukKQcQDy1bLOeeuILXA==}
peerDependencies:
'@ibiz-template/core': ^0.0.1-beta.30
'@ibiz-template/model': ^0.0.1-beta.30
......@@ -950,10 +950,10 @@ packages:
qs: ^6.11.0
qx-util: ^0.4.8
dependencies:
'@ibiz-template/core': 0.0.1-beta.103(lodash-es@4.17.21)(qx-util@0.4.8)(ramda@0.28.0)
'@ibiz-template/model': 0.0.1-beta.103(@ibiz/dynamic-model-api@2.1.24)(lodash-es@4.17.21)(qx-util@0.4.8)
'@ibiz-template/runtime': 0.0.1-beta.103(@ibiz-template/core@0.0.1-beta.103)(@ibiz-template/model@0.0.1-beta.103)(@ibiz-template/service@0.0.1-beta.103)(qx-util@0.4.8)
'@ibiz-template/service': 0.0.1-beta.103(@ibiz-template/core@0.0.1-beta.103)(@ibiz-template/model@0.0.1-beta.103)(qx-util@0.4.8)(ramda@0.28.0)
'@ibiz-template/core': 0.0.1-beta.104(lodash-es@4.17.21)(qx-util@0.4.8)(ramda@0.28.0)
'@ibiz-template/model': 0.0.1-beta.104(@ibiz/dynamic-model-api@2.1.24)(lodash-es@4.17.21)(qx-util@0.4.8)
'@ibiz-template/runtime': 0.0.1-beta.104(@ibiz-template/core@0.0.1-beta.104)(@ibiz-template/model@0.0.1-beta.104)(@ibiz-template/service@0.0.1-beta.104)(qx-util@0.4.8)
'@ibiz-template/service': 0.0.1-beta.104(@ibiz-template/core@0.0.1-beta.104)(@ibiz-template/model@0.0.1-beta.104)(qx-util@0.4.8)(ramda@0.28.0)
async-validator: 4.2.5
dayjs: 1.11.7
lodash-es: 4.17.21
......@@ -961,8 +961,8 @@ packages:
qx-util: 0.4.8
dev: false
/@ibiz-template/core@0.0.1-beta.103(lodash-es@4.17.21)(qx-util@0.4.8)(ramda@0.28.0):
resolution: {integrity: sha512-87QGDegNOv/+tiIGprKMls60QKy/rmiRMlEuQXNg3aorgF5mKHFDeS6Bk+aysSOZNmdLKk1Daz4H1/cQgY7K7Q==}
/@ibiz-template/core@0.0.1-beta.104(lodash-es@4.17.21)(qx-util@0.4.8)(ramda@0.28.0):
resolution: {integrity: sha512-2TvQq+9azhEAVh1HPxMBjVrZCKsf5bPTwoCMt7YRHW4gzi4QJWxhMqIyOJcQ5V47EoXah6zkF7pSqh4of5CLUg==}
peerDependencies:
lodash-es: ^4.17.21
qx-util: ^0.4.8
......@@ -979,8 +979,8 @@ packages:
- debug
dev: false
/@ibiz-template/model@0.0.1-beta.103(@ibiz/dynamic-model-api@2.1.24)(lodash-es@4.17.21)(qx-util@0.4.8):
resolution: {integrity: sha512-i/b1pI92lUpu9ShVMyXTh5j6j0RGeiW1qM6IjcsaBIvGA2r6w5XyajeGc5EFA6FxDFVvnarpgMO5XT8DdBLsXA==}
/@ibiz-template/model@0.0.1-beta.104(@ibiz/dynamic-model-api@2.1.24)(lodash-es@4.17.21)(qx-util@0.4.8):
resolution: {integrity: sha512-b3uHha6RtMe2QT+9jzE0jlP1AVetIyoCXXPDzUrlexOYKeT0UDbBHPrSNdaNODE6G/MyILHEIqunypFqfvGBgw==}
peerDependencies:
'@ibiz/dynamic-model-api': ^2.1.24
lodash-es: ^4.17.21
......@@ -992,8 +992,8 @@ packages:
qx-util: 0.4.8
dev: false
/@ibiz-template/runtime@0.0.1-beta.103(@ibiz-template/core@0.0.1-beta.103)(@ibiz-template/model@0.0.1-beta.103)(@ibiz-template/service@0.0.1-beta.103)(qx-util@0.4.8):
resolution: {integrity: sha512-4EzcTcOKsgPQmmsrqxkfi8WHs7DwiVExUdK8eW80feUB1ioYYvy1owMTJ3NjPvw2MKt1kDRnRYLDLn8zLNOTgQ==}
/@ibiz-template/runtime@0.0.1-beta.104(@ibiz-template/core@0.0.1-beta.104)(@ibiz-template/model@0.0.1-beta.104)(@ibiz-template/service@0.0.1-beta.104)(qx-util@0.4.8):
resolution: {integrity: sha512-s3EcpTkQn1c9NtmBByNrGxMut+AawVyCv7Lqn+EJSqQtUw09n1MJekrSkuzWoQcbiYIrjltFTXIkApEz5/lUpw==}
peerDependencies:
'@ibiz-template/core': ^0.0.1-beta.30
'@ibiz-template/model': ^0.0.1-beta.30
......@@ -1001,33 +1001,33 @@ packages:
qx-util: ^0.4.8
dependencies:
'@ibiz-template/command': 0.0.1-beta.50
'@ibiz-template/core': 0.0.1-beta.103(lodash-es@4.17.21)(qx-util@0.4.8)(ramda@0.28.0)
'@ibiz-template/model': 0.0.1-beta.103(@ibiz/dynamic-model-api@2.1.24)(lodash-es@4.17.21)(qx-util@0.4.8)
'@ibiz-template/service': 0.0.1-beta.103(@ibiz-template/core@0.0.1-beta.103)(@ibiz-template/model@0.0.1-beta.103)(qx-util@0.4.8)(ramda@0.28.0)
'@ibiz-template/core': 0.0.1-beta.104(lodash-es@4.17.21)(qx-util@0.4.8)(ramda@0.28.0)
'@ibiz-template/model': 0.0.1-beta.104(@ibiz/dynamic-model-api@2.1.24)(lodash-es@4.17.21)(qx-util@0.4.8)
'@ibiz-template/service': 0.0.1-beta.104(@ibiz-template/core@0.0.1-beta.104)(@ibiz-template/model@0.0.1-beta.104)(qx-util@0.4.8)(ramda@0.28.0)
qs: 6.11.1
qx-util: 0.4.8
dev: false
/@ibiz-template/service@0.0.1-beta.103(@ibiz-template/core@0.0.1-beta.103)(@ibiz-template/model@0.0.1-beta.103)(qx-util@0.4.8)(ramda@0.28.0):
resolution: {integrity: sha512-ba2VOEOLc/XYMAqFhNotlCCcS3HPKXCoNBCll2xovrxzMi4BoFO6l/fUxv8V1bMjbTB7gt0S2q84TWeTiuVo5A==}
/@ibiz-template/service@0.0.1-beta.104(@ibiz-template/core@0.0.1-beta.104)(@ibiz-template/model@0.0.1-beta.104)(qx-util@0.4.8)(ramda@0.28.0):
resolution: {integrity: sha512-njI1+c+y6FZkJL+l3C1LGpGfoSvfdgkmZAWeN6klnjvwVSmuIbbbfpebXn6uLhwE22tUDim4FxGFNg7Gn06Edg==}
peerDependencies:
'@ibiz-template/core': ^0.0.1-beta.30
'@ibiz-template/model': ^0.0.1-beta.30
qx-util: ^0.4.8
ramda: ^0.28.0
dependencies:
'@ibiz-template/core': 0.0.1-beta.103(lodash-es@4.17.21)(qx-util@0.4.8)(ramda@0.28.0)
'@ibiz-template/model': 0.0.1-beta.103(@ibiz/dynamic-model-api@2.1.24)(lodash-es@4.17.21)(qx-util@0.4.8)
'@ibiz-template/core': 0.0.1-beta.104(lodash-es@4.17.21)(qx-util@0.4.8)(ramda@0.28.0)
'@ibiz-template/model': 0.0.1-beta.104(@ibiz/dynamic-model-api@2.1.24)(lodash-es@4.17.21)(qx-util@0.4.8)
qx-util: 0.4.8
ramda: 0.28.0
dev: false
/@ibiz-template/theme@0.0.1-beta.103:
resolution: {integrity: sha512-2Mi1Clj+T0Gv4tY1Mv61o44l+EiXZgMencz15lQTgsrGBOpyL7lMQE+pGqjNnr1IEKqTx7HKL5hMQo3PBrLmAA==}
/@ibiz-template/theme@0.0.1-beta.104:
resolution: {integrity: sha512-ysMtxUifaYIbVNLdN7zmka4hk7Th3vvMhqlx1B5Ks8jjYoSIWtJB+YGEA5x+u303lfwGzTmCpSDiWZAXOnn7Lg==}
dev: false
/@ibiz-template/vue-util@0.0.1-beta.103(@ibiz-template/controller@0.0.1-beta.103)(@ibiz-template/core@0.0.1-beta.103)(@ibiz-template/model@0.0.1-beta.103)(@ibiz-template/service@0.0.1-beta.103)(qs@6.11.1)(qx-util@0.4.8)(ramda@0.28.0)(vue-router@3.6.5)(vue@2.7.14):
resolution: {integrity: sha512-dU2XCXKTev76/eP+src99fORXNYSLiuvyVlQD40vWlLuZnpk+O/yD2sleK1wVSI9NyJggqzIjCvNofWAZ3OmwA==}
/@ibiz-template/vue-util@0.0.1-beta.104(@ibiz-template/controller@0.0.1-beta.104)(@ibiz-template/core@0.0.1-beta.104)(@ibiz-template/model@0.0.1-beta.104)(@ibiz-template/service@0.0.1-beta.104)(qs@6.11.1)(qx-util@0.4.8)(ramda@0.28.0)(vue-router@3.6.5)(vue@2.7.14):
resolution: {integrity: sha512-F5c/pGscCXS1180tvzyacI6eEi3dNP1FdT2OG1+clBkknEPyvHe8CDW/BMESCau0ux6S0nTbt8nanzNfRIMAFw==}
peerDependencies:
'@ibiz-template/controller': ^0.0.1-beta.30
'@ibiz-template/core': ^0.0.1-beta.30
......@@ -1039,10 +1039,10 @@ packages:
vue: ^2.7.14
vue-router: ^3.6.5
dependencies:
'@ibiz-template/controller': 0.0.1-beta.103(@ibiz-template/core@0.0.1-beta.103)(@ibiz-template/model@0.0.1-beta.103)(@ibiz-template/runtime@0.0.1-beta.103)(@ibiz-template/service@0.0.1-beta.103)(lodash-es@4.17.21)(qs@6.11.1)(qx-util@0.4.8)
'@ibiz-template/core': 0.0.1-beta.103(lodash-es@4.17.21)(qx-util@0.4.8)(ramda@0.28.0)
'@ibiz-template/model': 0.0.1-beta.103(@ibiz/dynamic-model-api@2.1.24)(lodash-es@4.17.21)(qx-util@0.4.8)
'@ibiz-template/service': 0.0.1-beta.103(@ibiz-template/core@0.0.1-beta.103)(@ibiz-template/model@0.0.1-beta.103)(qx-util@0.4.8)(ramda@0.28.0)
'@ibiz-template/controller': 0.0.1-beta.104(@ibiz-template/core@0.0.1-beta.104)(@ibiz-template/model@0.0.1-beta.104)(@ibiz-template/runtime@0.0.1-beta.104)(@ibiz-template/service@0.0.1-beta.104)(lodash-es@4.17.21)(qs@6.11.1)(qx-util@0.4.8)
'@ibiz-template/core': 0.0.1-beta.104(lodash-es@4.17.21)(qx-util@0.4.8)(ramda@0.28.0)
'@ibiz-template/model': 0.0.1-beta.104(@ibiz/dynamic-model-api@2.1.24)(lodash-es@4.17.21)(qx-util@0.4.8)
'@ibiz-template/service': 0.0.1-beta.104(@ibiz-template/core@0.0.1-beta.104)(@ibiz-template/model@0.0.1-beta.104)(qx-util@0.4.8)(ramda@0.28.0)
qs: 6.11.1
qx-util: 0.4.8
ramda: 0.28.0
......
......@@ -6,11 +6,18 @@ import '@ibiz-template/theme/style/components/layout/app-layout/app-layout.scss'
function renderLogo(ns: Namespace, model: IndexViewModel) {
return (
<div class={ns.e('logo')}>
<div class={[ns.e('logo'), model.source?.mainMenuAlign?.toLowerCase()]}>
{model.appIconPath ? (
<img class={ns.e('logo-img')} src={model.appIconPath}></img>
) : null}
<div class={ns.e('logo-caption')}>{model.caption}</div>
<div
class={[
ns.e('logo-caption'),
model.source?.mainMenuAlign?.toLowerCase(),
]}
>
{model.caption}
</div>
</div>
);
}
......@@ -58,17 +65,40 @@ export const AppLayout = defineComponent({
this.ns.is('tab', this.isShowTabPageExp),
]}
>
{this.model.source.mainMenuAlign === 'CENTER' && this.$slots.menu}
{this.model.source.mainMenuAlign !== 'CENTER' && (
<i-sider
hide-trigger
class={[
this.ns.b('nav'),
this.ns.is('collapse', this.collapseChange),
this.model.source?.mainMenuAlign?.toLowerCase(),
]}
value={this.collapseChange}
>
{renderLogo(this.ns, this.model)}
{this.$slots.menu}
</i-sider>
)}
{this.model.source.mainMenuAlign === 'CENTER' && (
<i-layout class={[this.ns.b('content')]}>
<i-header
class={[
this.ns.b('header'),
this.model.source?.mainMenuAlign?.toLowerCase(),
]}
>
<div class={this.ns.be('header', 'left')}>
{renderLogo(this.ns, this.model)}
</div>
</i-header>
<i-content class={this.ns.be('content', 'main')}>
{this.$slots.tabPageExp}
{this.$slots.default}
</i-content>
</i-layout>
)}
{this.model.source.mainMenuAlign !== 'CENTER' && (
<i-layout class={[this.ns.b('content')]}>
<i-header class={this.ns.b('header')}>
<div class={this.ns.be('header', 'left')}>
......@@ -104,6 +134,7 @@ export const AppLayout = defineComponent({
</i-content>
{/* <i-footer class={this.ns.b('footer')}>Footer</i-footer> */}
</i-layout>
)}
</i-layout>
) : null;
},
......
......@@ -3,6 +3,7 @@ import {
AppMenuModel,
AppMenuItemModel,
IPSAppMenuItem,
IPSAppIndexView,
} from '@ibiz-template/model';
import {
useAppMenuController,
......@@ -94,6 +95,72 @@ function renderMenuItem(
);
}
/**
* 绘制中间菜单项
* @author fzh
* @date 2022-08-29 14:08:20
* @param {IData} menu
* @returns {*}
*/
function renderCenterChildren(
menu: IData,
ns: Namespace,
c: AppMenuController,
counterData: IData,
click: Function,
) {
return (
<div class={ns.e('cchildren')} onClick={() => click(menu.key)}>
<app-icon class={ns.e('cchildrenIcon')} icon={menu.image}></app-icon>
<div class={ns.em('cchildren', 'title')}>
<span>{menu.label}</span>
</div>
{typeof counterData[menu.counterId] === 'number' ? (
<i-badge
class={ns.e('counter')}
count={counterData[menu.counterId]}
></i-badge>
) : null}
</div>
);
}
/**
* 绘制中间菜单分组
* @author fzh
* @date 2022-08-29 14:08:20
* @param {IData} menu
* @returns {*}
*/
function renderCenterMenuItem(
menu: IData,
ns: Namespace,
c: AppMenuController,
counterData: IData,
click: Function,
) {
if (!c.menuItemsState[menu.key].visible) {
return;
}
return (
<div class={ns.e('cmenu')}>
<div class={ns.em('cmenu', 'title')}>{menu.label}</div>
{typeof counterData[menu.counterId] === 'number' ? (
<i-badge
class={ns.e('counter')}
count={counterData[menu.counterId]}
></i-badge>
) : null}
<div class={ns.e('cmenucontent')}>
{menu.children?.length > 0 &&
menu.children.map((item: IData) => {
return renderCenterChildren(item, ns, c, counterData, click);
})}
</div>
</div>
);
}
/**
* 绘制收缩分组菜单项
* @param {IData} menu
......@@ -209,6 +276,7 @@ export const AppMenu = defineComponent({
context: { type: Object as PropType<IContext>, required: true },
collapseChange: Boolean,
currentPath: String,
menuModel: { type: Object as PropType<IPSAppIndexView>, required: true },
},
setup(props, { emit }) {
const { proxy } = getCurrentInstance()!;
......@@ -224,6 +292,8 @@ export const AppMenu = defineComponent({
let counter: AppCounter | null = null;
const counterData = ref<IData>({});
const menuDirection = props.menuModel.mainMenuAlign;
c.nerve.self.evt.on('created', () => {
menus.value = getMenus(c.model.items);
});
......@@ -352,9 +422,33 @@ export const AppMenu = defineComponent({
counter?.destroy();
});
return { menus, c, onClick, ns, defaultActive, defaultOpens, counterData };
return {
menus,
c,
onClick,
ns,
defaultActive,
defaultOpens,
counterData,
menuDirection,
};
},
render() {
if (this.menuDirection === 'CENTER') {
return (
<div class={[this.ns.b(), this.menuDirection?.toLowerCase()]}>
{this.menus.map(item => {
return renderCenterMenuItem(
item,
this.ns,
this.c,
this.counterData,
this.onClick,
);
})}
</div>
);
}
return (
<i-menu
ref={'menu'}
......
......@@ -166,6 +166,7 @@ const collapseChange = (collapse: boolean) => {
<AppLayout
:is-complete="c.complete"
:model="c.model"
:class="c.model?.source?.mainMenuAlign?.toLowerCase()"
:is-show-tab-page-exp="isShowTabPageExp"
@onCollapseChange="collapseChange"
>
......@@ -177,6 +178,7 @@ const collapseChange = (collapse: boolean) => {
:model-data="c.model.appMenu"
:context="c.context"
:collapse-change="c.collapseChange"
:menu-model="c.model?.source"
@menuRouteChange="onMenuRouteChange"
></app-menu>
<tab-page-exp
......
Markdown 格式
0% or
您添加了 0 到此讨论。请谨慎行事。
先完成此消息的编辑!
想要评论请 注册