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

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

上级 939cbfdf
......@@ -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.61",
"@ibiz-template/core": "^0.0.1-beta.57",
"@ibiz-template/model": "^0.0.1-beta.61",
"@ibiz-template/runtime": "^0.0.1-beta.61",
"@ibiz-template/service": "^0.0.1-beta.61",
"@ibiz-template/controller": "^0.0.1-beta.62",
"@ibiz-template/core": "^0.0.1-beta.62",
"@ibiz-template/model": "^0.0.1-beta.62",
"@ibiz-template/runtime": "^0.0.1-beta.62",
"@ibiz-template/service": "^0.0.1-beta.62",
"@ibiz-template/theme": "^0.0.1-beta.59",
"@ibiz-template/vue-util": "^0.0.1-beta.61",
"@ibiz-template/vue-util": "^0.0.1-beta.62",
"@ibiz/dynamic-model-api": "^2.1.17",
"@riophae/vue-treeselect": "^0.4.0",
"dayjs": "^1.11.7",
......
......@@ -8,26 +8,26 @@ dependencies:
specifier: ^0.0.1-beta.50
version: 0.0.1-beta.50
'@ibiz-template/controller':
specifier: ^0.0.1-beta.61
version: 0.0.1-beta.61(@ibiz-template/core@0.0.1-beta.57)(@ibiz-template/model@0.0.1-beta.61)(@ibiz-template/runtime@0.0.1-beta.61)(@ibiz-template/service@0.0.1-beta.61)(lodash-es@4.17.21)(qs@6.11.1)(qx-util@0.4.8)
specifier: ^0.0.1-beta.62
version: 0.0.1-beta.62(@ibiz-template/core@0.0.1-beta.62)(@ibiz-template/model@0.0.1-beta.62)(@ibiz-template/runtime@0.0.1-beta.62)(@ibiz-template/service@0.0.1-beta.62)(lodash-es@4.17.21)(qs@6.11.1)(qx-util@0.4.8)
'@ibiz-template/core':
specifier: ^0.0.1-beta.57
version: 0.0.1-beta.57(lodash-es@4.17.21)(qx-util@0.4.8)(ramda@0.28.0)
specifier: ^0.0.1-beta.62
version: 0.0.1-beta.62(lodash-es@4.17.21)(qx-util@0.4.8)(ramda@0.28.0)
'@ibiz-template/model':
specifier: ^0.0.1-beta.61
version: 0.0.1-beta.61(@ibiz/dynamic-model-api@2.1.17)(lodash-es@4.17.21)(qx-util@0.4.8)
specifier: ^0.0.1-beta.62
version: 0.0.1-beta.62(@ibiz/dynamic-model-api@2.1.17)(lodash-es@4.17.21)(qx-util@0.4.8)
'@ibiz-template/runtime':
specifier: ^0.0.1-beta.61
version: 0.0.1-beta.61(@ibiz-template/core@0.0.1-beta.57)(@ibiz-template/model@0.0.1-beta.61)(@ibiz-template/service@0.0.1-beta.61)(qx-util@0.4.8)
specifier: ^0.0.1-beta.62
version: 0.0.1-beta.62(@ibiz-template/core@0.0.1-beta.62)(@ibiz-template/model@0.0.1-beta.62)(@ibiz-template/service@0.0.1-beta.62)(qx-util@0.4.8)
'@ibiz-template/service':
specifier: ^0.0.1-beta.61
version: 0.0.1-beta.61(@ibiz-template/core@0.0.1-beta.57)(@ibiz-template/model@0.0.1-beta.61)(qx-util@0.4.8)(ramda@0.28.0)
specifier: ^0.0.1-beta.62
version: 0.0.1-beta.62(@ibiz-template/core@0.0.1-beta.62)(@ibiz-template/model@0.0.1-beta.62)(qx-util@0.4.8)(ramda@0.28.0)
'@ibiz-template/theme':
specifier: ^0.0.1-beta.59
version: 0.0.1-beta.59
'@ibiz-template/vue-util':
specifier: ^0.0.1-beta.61
version: 0.0.1-beta.61(@ibiz-template/controller@0.0.1-beta.61)(@ibiz-template/core@0.0.1-beta.57)(@ibiz-template/model@0.0.1-beta.61)(@ibiz-template/service@0.0.1-beta.61)(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.62
version: 0.0.1-beta.62(@ibiz-template/controller@0.0.1-beta.62)(@ibiz-template/core@0.0.1-beta.62)(@ibiz-template/model@0.0.1-beta.62)(@ibiz-template/service@0.0.1-beta.62)(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.17
version: 2.1.17(qx-util@0.4.8)
......@@ -951,8 +951,8 @@ packages:
qx-util: 0.4.8
dev: false
/@ibiz-template/controller@0.0.1-beta.61(@ibiz-template/core@0.0.1-beta.57)(@ibiz-template/model@0.0.1-beta.61)(@ibiz-template/runtime@0.0.1-beta.61)(@ibiz-template/service@0.0.1-beta.61)(lodash-es@4.17.21)(qs@6.11.1)(qx-util@0.4.8):
resolution: {integrity: sha512-5r6CcBOrtKIIT3auCfNRyyASkl+9JwwLxz5GaTwPJJvL7wogkp1KyCCgZPkRZmh9QJALx1yythJExZ6up9fJ6g==}
/@ibiz-template/controller@0.0.1-beta.62(@ibiz-template/core@0.0.1-beta.62)(@ibiz-template/model@0.0.1-beta.62)(@ibiz-template/runtime@0.0.1-beta.62)(@ibiz-template/service@0.0.1-beta.62)(lodash-es@4.17.21)(qs@6.11.1)(qx-util@0.4.8):
resolution: {integrity: sha512-hxKkXvSfpEPP2UDeECXhhQMCQlIkAIeNNPuzXHw7kUnzxSGBK/RcGr7AJnD7a2rqpYXsfNLItw1Op6GKKtzo4Q==}
peerDependencies:
'@ibiz-template/core': ^0.0.1-beta.30
'@ibiz-template/model': ^0.0.1-beta.30
......@@ -962,10 +962,10 @@ packages:
qs: ^6.11.0
qx-util: ^0.4.8
dependencies:
'@ibiz-template/core': 0.0.1-beta.57(lodash-es@4.17.21)(qx-util@0.4.8)(ramda@0.28.0)
'@ibiz-template/model': 0.0.1-beta.61(@ibiz/dynamic-model-api@2.1.17)(lodash-es@4.17.21)(qx-util@0.4.8)
'@ibiz-template/runtime': 0.0.1-beta.61(@ibiz-template/core@0.0.1-beta.57)(@ibiz-template/model@0.0.1-beta.61)(@ibiz-template/service@0.0.1-beta.61)(qx-util@0.4.8)
'@ibiz-template/service': 0.0.1-beta.61(@ibiz-template/core@0.0.1-beta.57)(@ibiz-template/model@0.0.1-beta.61)(qx-util@0.4.8)(ramda@0.28.0)
'@ibiz-template/core': 0.0.1-beta.62(lodash-es@4.17.21)(qx-util@0.4.8)(ramda@0.28.0)
'@ibiz-template/model': 0.0.1-beta.62(@ibiz/dynamic-model-api@2.1.17)(lodash-es@4.17.21)(qx-util@0.4.8)
'@ibiz-template/runtime': 0.0.1-beta.62(@ibiz-template/core@0.0.1-beta.62)(@ibiz-template/model@0.0.1-beta.62)(@ibiz-template/service@0.0.1-beta.62)(qx-util@0.4.8)
'@ibiz-template/service': 0.0.1-beta.62(@ibiz-template/core@0.0.1-beta.62)(@ibiz-template/model@0.0.1-beta.62)(qx-util@0.4.8)(ramda@0.28.0)
async-validator: 4.2.5
dayjs: 1.11.7
lodash-es: 4.17.21
......@@ -973,8 +973,8 @@ packages:
qx-util: 0.4.8
dev: false
/@ibiz-template/core@0.0.1-beta.57(lodash-es@4.17.21)(qx-util@0.4.8)(ramda@0.28.0):
resolution: {integrity: sha512-Xc5sVNolk4JIXZj8+okztyMMNBvAsOayjzT0FWH5ENtWnv9TQ2uYUMO2QySl/AtBNablUrCJKOROEDf+lqIbKQ==}
/@ibiz-template/core@0.0.1-beta.62(lodash-es@4.17.21)(qx-util@0.4.8)(ramda@0.28.0):
resolution: {integrity: sha512-N6S0wvXg/Yf1vbHlxAX6MayiFy0tiHql8UUxvm30JVoC/dXVS0qNoCWohIdnoo3oSEEn2JzdcJju890nVrZ+SQ==}
peerDependencies:
lodash-es: ^4.17.21
qx-util: ^0.4.8
......@@ -991,8 +991,8 @@ packages:
- debug
dev: false
/@ibiz-template/model@0.0.1-beta.61(@ibiz/dynamic-model-api@2.1.17)(lodash-es@4.17.21)(qx-util@0.4.8):
resolution: {integrity: sha512-w64mPMTvL9S3PJ0f5zJgWD8cvUMoW6az10wxpPa/o133wyAj5y6sOKauK3ajcyyXMHq3pYfNppC/1/ehxH1V7g==}
/@ibiz-template/model@0.0.1-beta.62(@ibiz/dynamic-model-api@2.1.17)(lodash-es@4.17.21)(qx-util@0.4.8):
resolution: {integrity: sha512-jPSiJHnu8EnOYi/1eA9H81pZrw30wxxme4DoELffHxAhOwpIeZGHQGmhquN+DQI8vBglP15ir7ebmGWXmApTLQ==}
peerDependencies:
'@ibiz/dynamic-model-api': ^2.1.17
lodash-es: ^4.17.21
......@@ -1004,8 +1004,8 @@ packages:
qx-util: 0.4.8
dev: false
/@ibiz-template/runtime@0.0.1-beta.61(@ibiz-template/core@0.0.1-beta.57)(@ibiz-template/model@0.0.1-beta.61)(@ibiz-template/service@0.0.1-beta.61)(qx-util@0.4.8):
resolution: {integrity: sha512-UKv1lGjJy0trwl9LGdYVNFXHJQy/SUg/AwQeKc/IWdOXcnBZebPqQ6DuI41U4hEtHXQ0TIV1O1n2jpa8Zwku7A==}
/@ibiz-template/runtime@0.0.1-beta.62(@ibiz-template/core@0.0.1-beta.62)(@ibiz-template/model@0.0.1-beta.62)(@ibiz-template/service@0.0.1-beta.62)(qx-util@0.4.8):
resolution: {integrity: sha512-rnyXctQJyWoj8cktPVIxzoNsG+TSakk2G06Mb7R0qlY+YkhamwaA4ADAFHHX4QD2d/1YlQlkI7WCWMIUwiSepA==}
peerDependencies:
'@ibiz-template/core': ^0.0.1-beta.30
'@ibiz-template/model': ^0.0.1-beta.30
......@@ -1013,23 +1013,23 @@ packages:
qx-util: ^0.4.8
dependencies:
'@ibiz-template/command': 0.0.1-beta.50
'@ibiz-template/core': 0.0.1-beta.57(lodash-es@4.17.21)(qx-util@0.4.8)(ramda@0.28.0)
'@ibiz-template/model': 0.0.1-beta.61(@ibiz/dynamic-model-api@2.1.17)(lodash-es@4.17.21)(qx-util@0.4.8)
'@ibiz-template/service': 0.0.1-beta.61(@ibiz-template/core@0.0.1-beta.57)(@ibiz-template/model@0.0.1-beta.61)(qx-util@0.4.8)(ramda@0.28.0)
'@ibiz-template/core': 0.0.1-beta.62(lodash-es@4.17.21)(qx-util@0.4.8)(ramda@0.28.0)
'@ibiz-template/model': 0.0.1-beta.62(@ibiz/dynamic-model-api@2.1.17)(lodash-es@4.17.21)(qx-util@0.4.8)
'@ibiz-template/service': 0.0.1-beta.62(@ibiz-template/core@0.0.1-beta.62)(@ibiz-template/model@0.0.1-beta.62)(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.61(@ibiz-template/core@0.0.1-beta.57)(@ibiz-template/model@0.0.1-beta.61)(qx-util@0.4.8)(ramda@0.28.0):
resolution: {integrity: sha512-CE/L1XTdxnd2EeYowHIihJXzavkNB9QqeNDkg9yAPGurOjEiBwjCL+G13M3xd6ZoVnG4yafQrr5rvzU5x5HMqA==}
/@ibiz-template/service@0.0.1-beta.62(@ibiz-template/core@0.0.1-beta.62)(@ibiz-template/model@0.0.1-beta.62)(qx-util@0.4.8)(ramda@0.28.0):
resolution: {integrity: sha512-Ip/WCav6f4MfIOrzCvHSAv6JgBJT/XYyl4MnCGB/2jKzcNsojZwvjatQNmIZAI9YLL6Gx1A1+SbD2C9Qp2pv3g==}
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.57(lodash-es@4.17.21)(qx-util@0.4.8)(ramda@0.28.0)
'@ibiz-template/model': 0.0.1-beta.61(@ibiz/dynamic-model-api@2.1.17)(lodash-es@4.17.21)(qx-util@0.4.8)
'@ibiz-template/core': 0.0.1-beta.62(lodash-es@4.17.21)(qx-util@0.4.8)(ramda@0.28.0)
'@ibiz-template/model': 0.0.1-beta.62(@ibiz/dynamic-model-api@2.1.17)(lodash-es@4.17.21)(qx-util@0.4.8)
qx-util: 0.4.8
ramda: 0.28.0
dev: false
......@@ -1038,8 +1038,8 @@ packages:
resolution: {integrity: sha512-XfBMhlL+Fh4jFZL9Zc05Sev2wtrwlSLURYYL8i22yzQgxa28zUZU2v+bFGelvgaF78v7L5hoUs0ysDnBPN2GKg==}
dev: false
/@ibiz-template/vue-util@0.0.1-beta.61(@ibiz-template/controller@0.0.1-beta.61)(@ibiz-template/core@0.0.1-beta.57)(@ibiz-template/model@0.0.1-beta.61)(@ibiz-template/service@0.0.1-beta.61)(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-Kko5OQo/P8MvZ2CgRcwtW/yb8r5NTdP5cxrDZOmE5gDELdH/Uvp9daEMTs8EY1bZGctJO9F8hNae8gyhabyq3w==}
/@ibiz-template/vue-util@0.0.1-beta.62(@ibiz-template/controller@0.0.1-beta.62)(@ibiz-template/core@0.0.1-beta.62)(@ibiz-template/model@0.0.1-beta.62)(@ibiz-template/service@0.0.1-beta.62)(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-Jjqad5jkcfllyU0AGJosCiC6YmX7c0Zp8AKTLEbQwHxu5gn6aSKavDdBPMUZJznlPX3ixNYajSS6loCG7xRVJA==}
peerDependencies:
'@ibiz-template/controller': ^0.0.1-beta.30
'@ibiz-template/core': ^0.0.1-beta.30
......@@ -1051,10 +1051,10 @@ packages:
vue: ^2.7.14
vue-router: ^3.6.5
dependencies:
'@ibiz-template/controller': 0.0.1-beta.61(@ibiz-template/core@0.0.1-beta.57)(@ibiz-template/model@0.0.1-beta.61)(@ibiz-template/runtime@0.0.1-beta.61)(@ibiz-template/service@0.0.1-beta.61)(lodash-es@4.17.21)(qs@6.11.1)(qx-util@0.4.8)
'@ibiz-template/core': 0.0.1-beta.57(lodash-es@4.17.21)(qx-util@0.4.8)(ramda@0.28.0)
'@ibiz-template/model': 0.0.1-beta.61(@ibiz/dynamic-model-api@2.1.17)(lodash-es@4.17.21)(qx-util@0.4.8)
'@ibiz-template/service': 0.0.1-beta.61(@ibiz-template/core@0.0.1-beta.57)(@ibiz-template/model@0.0.1-beta.61)(qx-util@0.4.8)(ramda@0.28.0)
'@ibiz-template/controller': 0.0.1-beta.62(@ibiz-template/core@0.0.1-beta.62)(@ibiz-template/model@0.0.1-beta.62)(@ibiz-template/runtime@0.0.1-beta.62)(@ibiz-template/service@0.0.1-beta.62)(lodash-es@4.17.21)(qs@6.11.1)(qx-util@0.4.8)
'@ibiz-template/core': 0.0.1-beta.62(lodash-es@4.17.21)(qx-util@0.4.8)(ramda@0.28.0)
'@ibiz-template/model': 0.0.1-beta.62(@ibiz/dynamic-model-api@2.1.17)(lodash-es@4.17.21)(qx-util@0.4.8)
'@ibiz-template/service': 0.0.1-beta.62(@ibiz-template/core@0.0.1-beta.62)(@ibiz-template/model@0.0.1-beta.62)(qx-util@0.4.8)(ramda@0.28.0)
qs: 6.11.1
qx-util: 0.4.8
ramda: 0.28.0
......
<?xml version="1.0" encoding="UTF-8"?>
<svg width="18px" height="18px" viewBox="0 0 18 18" version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink">
<title>检察院</title>
<g id="Page-1" stroke="none" stroke-width="1" fill="none" fill-rule="evenodd">
<g id="登录" transform="translate(-380.000000, -403.000000)" fill-rule="nonzero">
<g id="编组-4" transform="translate(380.000000, 401.000000)">
<g id="检察院" transform="translate(0.000000, 2.000000)">
<rect id="Rectangle" fill="#000000" opacity="0" x="0" y="0" width="18" height="18"></rect>
<path d="M15.7148438,8.12109375 C16.2580078,8.12109375 16.4847656,7.42324219 16.0435547,7.1015625 L9.33046875,2.21835937 C9.13373237,2.07421898 8.86626763,2.07421898 8.66953125,2.21835937 L1.95644531,7.1015625 C1.51523438,7.42148438 1.74199219,8.12109375 2.28691406,8.12109375 L3.375,8.12109375 L3.375,14.6953125 L2.109375,14.6953125 C2.03203125,14.6953125 1.96875,14.7585938 1.96875,14.8359375 L1.96875,15.75 C1.96875,15.8273438 2.03203125,15.890625 2.109375,15.890625 L15.890625,15.890625 C15.9679688,15.890625 16.03125,15.8273438 16.03125,15.75 L16.03125,14.8359375 C16.03125,14.7585938 15.9679688,14.6953125 15.890625,14.6953125 L14.625,14.6953125 L14.625,8.12109375 L15.7148438,8.12109375 Z M6.69726562,14.6953125 L4.640625,14.6953125 L4.640625,8.12109375 L6.69726562,8.12109375 L6.69726562,14.6953125 Z M10.0195312,14.6953125 L7.96289062,14.6953125 L7.96289062,8.12109375 L10.0195312,8.12109375 L10.0195312,14.6953125 Z M13.359375,14.6953125 L11.2851562,14.6953125 L11.2851562,8.12109375 L13.359375,8.12109375 L13.359375,14.6953125 Z" id="Shape" fill="#B8B8B8"></path>
</g>
</g>
</g>
</g>
</svg>
\ No newline at end of file
<?xml version="1.0" encoding="UTF-8"?>
<svg width="13px" height="17px" viewBox="0 0 13 17" version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink">
<title>密码</title>
<g id="Page-1" stroke="none" stroke-width="1" fill="none" fill-rule="evenodd">
<g id="登录" transform="translate(-383.000000, -627.000000)" fill="#B8B8B8" fill-rule="nonzero">
<g id="编组-4" transform="translate(380.000000, 401.000000)">
<g id="编组-2" transform="translate(0.000000, 224.000000)">
<g id="密码" transform="translate(0.000000, 2.000000)">
<rect id="矩形" opacity="0" x="0" y="0" width="18" height="18"></rect>
<path d="M13.5162,7.43076 L6.54012,7.43076 C6.66,6.41988 5.78988,2.31012 9.0036,2.21004 C12.05928,2.09412 11.58372,5.96016 11.58372,5.96016 L13.08024,5.97024 C13.08024,5.97024 13.51512,0.79524 9.0036,0.77004 C4.07988,1.01988 5.23512,6.63012 5.085,7.43076 C5.11992,7.43076 5.16528,7.43076 5.21316,7.43076 C4.23072,7.43076 3.43404,8.2278 3.43404,9.20988 L3.43404,15.14052 C3.43404,16.12296 4.23108,16.91964 5.21316,16.91964 L13.5162,16.91964 C14.49864,16.91964 15.29532,16.1226 15.29532,15.14052 L15.29532,9.20988 C15.29532,8.2278 14.49828,7.43076 13.5162,7.43076 Z M9.9576,12.60396 L9.9576,13.95468 C9.9576,14.2812 9.6912,14.5476 9.36468,14.5476 C9.03816,14.5476 8.77176,14.2812 8.77176,13.95468 L8.77176,12.60396 C8.4186,12.3984 8.17884,12.02004 8.17884,11.58228 C8.17884,10.92708 8.70984,10.39608 9.36504,10.39608 C10.02024,10.39608 10.55124,10.92708 10.55124,11.58228 C10.55088,12.02004 10.31112,12.3984 9.9576,12.60396 Z" id="形状"></path>
</g>
</g>
</g>
</g>
</g>
</svg>
\ No newline at end of file
<?xml version="1.0" encoding="UTF-8"?>
<svg width="14px" height="16px" viewBox="0 0 14 16" version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink">
<title>用户名</title>
<g id="Page-1" stroke="none" stroke-width="1" fill="none" fill-rule="evenodd">
<g id="登录" transform="translate(-382.000000, -516.000000)" fill="#B8B8B8" fill-rule="nonzero">
<g id="编组-4" transform="translate(380.000000, 401.000000)">
<g id="编组-2" transform="translate(0.000000, 112.000000)">
<g id="用户名" transform="translate(0.000000, 2.000000)">
<rect id="矩形" opacity="0" x="0" y="0" width="18" height="18"></rect>
<path d="M12.501,4.698 C12.501,6.624 11.565,9.513 9,9.513 C6.435,9.513 5.499,6.624 5.499,4.698 C5.499,2.772 7.065,1.215 9,1.215 C10.935,1.215 12.501,2.772 12.501,4.698 Z" id="路径"></path>
<path d="M15.39,15.147 C15.39,16.803 12.528,16.7850081 9,16.7850081 C5.472,16.7850081 2.61,16.803 2.61,15.147 C2.61,12.762 4.635,10.764 7.38,10.188 C7.731,10.134 7.947,9.423 7.731,9.234 C7.947,8.937 8.775,8.487 8.991,8.487 C9.225,8.487 10.026,8.91 10.251,9.243 C10.053,9.531 10.251,10.125 10.611,10.188 C13.365,10.764 15.39,12.762 15.39,15.147 L15.39,15.147 Z" id="路径"></path>
</g>
</g>
</g>
</g>
</g>
</svg>
\ No newline at end of file
......@@ -221,5 +221,14 @@ export const AppRegister = {
v.component('IBizGridRadio', IBizGridRadio);
v.component('IBizGridPicker', IBizGridPicker);
v.component('ExpViewBase', ExpViewBase);
// 注册登录视图组件
v.component(
'AppLoginView',
() => import('./components/login-view/app-login-view/app-login-view'),
);
v.component(
'KqLoginView',
() => import('./components/login-view/kq-login-view/kq-login-view'),
);
},
};
import { CoreConst } from '@ibiz-template/core';
import {
defineComponent,
getCurrentInstance,
onMounted,
reactive,
ref,
} from 'vue';
import { clearCookie, setCookie } from 'qx-util';
import { useNamespace, useRoute } from '@ibiz-template/vue-util';
import router from '@/router';
import '@ibiz-template/theme/style/components/views/login-view/login-view.scss';
interface LoginData {
username: string;
password: string;
}
const rules = {
username: [
{
required: true,
message: '请输入账号',
trigger: 'blur',
},
],
password: [
{
required: true,
message: '请输入密码',
trigger: 'blur',
},
{
type: 'string',
min: 6,
message: '密码长度不能少于6位',
trigger: 'blur',
},
],
};
export default defineComponent({
setup() {
const ns = useNamespace('login-view');
const loginData = reactive<LoginData>({
username: '',
password: '',
});
const formRef = ref<IData | null>(null);
const instance = getCurrentInstance()!;
const route = useRoute(instance.proxy);
const ru = (route.query.ru as string) || '/';
ibiz.appData = undefined;
ibiz.orgData = undefined;
onMounted(() => {
setTimeout(() => {
const el = document.querySelector('.app-loading-x') as HTMLDivElement;
if (el) {
el.style.display = 'none';
}
}, 300);
});
const loading = ref(false);
const onClick = () => {
formRef.value!.validate(async (valid: boolean) => {
if (valid) {
try {
loading.value = true;
clearCookie(CoreConst.TOKEN, true);
const res = await ibiz.auth.v7login(
loginData.username,
loginData.password,
);
if (res.ok) {
const { data } = res;
if (data && data.token) {
setCookie(CoreConst.TOKEN, data.token, 0, true);
const expiredDate =
new Date().getTime() + (data.expirein || 7199) * 1000;
setCookie(CoreConst.TOKEN_EXPIRES, `${expiredDate}`, 0, true);
router.push({ path: ru });
return;
}
}
ibiz.notification.error({
title: res.data?.message || '登录失败',
});
loading.value = false;
} catch (error) {
ibiz.notification.error({
title: (error as IData).response?.data?.message || '登录失败',
});
loading.value = false;
}
}
});
};
return () => (
<div class={ns.b()}>
<div class={ns.b('box')}>
<header class={ns.b('box-header')}>
<img src='./assets/img/login-header.png' />
</header>
<main class={ns.b('box-main')}>
<img
class={ns.be('box-main', 'avatar')}
src='./assets/img/login-avatar.png'
/>
<div class={ns.b('box-main-content')}>
<i-form ref={formRef} props={{ model: loginData, rules }}>
<i-form-item prop='username'>
<i-input
type='text'
value={loginData.username}
on-on-change={(evt: InputEvent) => {
const { value } = evt.target as HTMLInputElement;
loginData.username = value;
}}
on-on-enter={onClick}
placeholder='请输入账号'
size='large'
>
<i-icon type='md-person' slot='prefix'></i-icon>
</i-input>
</i-form-item>
<i-form-item prop='password'>
<i-input
type='password'
value={loginData.password}
on-on-change={(evt: InputEvent) => {
const { value } = evt.target as HTMLInputElement;
loginData.password = value;
}}
on-on-enter={onClick}
placeholder='请输入密码'
size='large'
password
>
<i-icon type='ios-unlock' slot='prefix'></i-icon>
</i-input>
</i-form-item>
<i-form-item>
<i-button
shape='circle'
loading={loading.value}
long
on-click={onClick}
>
登录
</i-button>
</i-form-item>
</i-form>
</div>
</main>
</div>
</div>
);
},
});
.ibiz-kq-login-view {
display: flex;
align-items: center;
justify-content: center;
width: 100vw;
height: 100vh;
background-image: url('/assets/img/user-login/bg.png');
background-repeat: no-repeat;
background-size: 100% 100%;
.ibiz-kq-login-view-box {
display: flex;
width: 68%;
height: 76%;
.ibiz-kq-login-view-box-left {
width: 50%;
height: 100%;
padding: 8% 6%;
background-color: #fff;
border-radius: 16px 0 0 16px;
.ibiz-kq-login-view-box-left-top {
display: flex;
align-items: center;
justify-content: center;
margin-bottom: 12%;
.ibiz-kq-login-view-box-left-top-jh {
display: inline-block;
width: 78px;
height: 78px;
margin-right: 13px;
}
.ibiz-kq-login-view-box-left-top-text {
font-family: MicrosoftYaHei-Bold, MicrosoftYaHei, sans-serif;
font-size: 32px;
font-weight: bold;
color: #0080cc;
text-align: center;
letter-spacing: 4px;
}
}
.ibiz-kq-login-view-main-content {
.ivu-form-item {
.ivu-form-item-content {
.ibiz-kq-login-view-form-label {
display: flex;
align-items: center;
margin-bottom: 10px;
.ibiz-kq-login-view-form-label-text {
display: inline-block;
margin-left: 5px;
font-family: PingFangSC-Regular, 'PingFang SC', sans-serif;
font-size: 20px;
font-weight: 400;
color: #666;
}
}
.ivu-input {
height: 56px;
padding: 17px 18px;
background: #fafafa;
border-radius: 4px;
box-shadow: inset 0 0 2px 0 rgb(0 0 0 / 50%);
&::placeholder {
font-family: PingFangSC-Regular, 'PingFang SC', sans-serif;
font-size: 20px;
color: #999;
}
}
.ivu-input-suffix i {
line-height: 56px;
}
}
}
.ibiz-kq-login-view-buttons {
margin-top: 61px;
.ivu-form-item-content {
display: flex;
justify-content: space-between;
.ivu-btn {
width: 48%;
height: 48px;
font-family: PingFangSC-Semibold, 'PingFang SC', sans-serif;
font-size: 20px;
font-weight: 600;
letter-spacing: 6px;
border-radius: 4px;
&:nth-child(1) {
color: #fff;
background-color: #0080cc;
}
&:nth-child(2) {
color: #666;
background-color: #fafafa;
}
}
}
}
}
}
.ibiz-kq-login-view-box-right {
width: 50%;
height: 100%;
> img {
width: 100%;
height: 100%;
}
}
}
}
import { CoreConst } from '@ibiz-template/core';
import {
defineComponent,
getCurrentInstance,
onMounted,
reactive,
ref,
} from 'vue';
import { clearCookie, setCookie } from 'qx-util';
import { useNamespace, useRoute, useRouter } from '@ibiz-template/vue-util';
import './kq-login-view.scss';
interface LoginData {
username: string;
password: string;
}
const rules = {
username: [
{
required: true,
message: '请输入账号',
trigger: 'blur',
},
],
password: [
{
required: true,
message: '请输入密码',
trigger: 'blur',
},
{
type: 'string',
min: 6,
message: '密码长度不能少于6位',
trigger: 'blur',
},
],
};
export default defineComponent({
setup() {
const ns = useNamespace('kq-login-view');
const loginData = reactive<LoginData>({
username: '',
password: '',
});
const formRef = ref<IData | null>(null);
const instance = getCurrentInstance()!;
const route = useRoute(instance.proxy);
const router = useRouter(instance.proxy);
const ru = (route.query.ru as string) || '/';
ibiz.appData = undefined;
ibiz.orgData = undefined;
onMounted(() => {
setTimeout(() => {
const el = document.querySelector('.app-loading-x') as HTMLDivElement;
if (el) {
el.style.display = 'none';
}
}, 300);
});
const loading = ref(false);
const onClick = () => {
formRef.value!.validate(async (valid: boolean) => {
if (valid) {
try {
loading.value = true;
clearCookie(CoreConst.TOKEN, true);
const res = await ibiz.auth.v7login(
loginData.username,
loginData.password,
);
if (res.ok) {
const { data } = res;
if (data && data.token) {
setCookie(CoreConst.TOKEN, data.token, 0, true);
const expiredDate =
new Date().getTime() + (data.expirein || 7199) * 1000;
setCookie(CoreConst.TOKEN_EXPIRES, `${expiredDate}`, 0, true);
router.push({ path: ru });
return;
}
}
ibiz.notification.error({
title: res.data?.message || '登录失败',
});
loading.value = false;
} catch (error) {
ibiz.notification.error({
title: (error as IData).response?.data?.message || '登录失败',
});
loading.value = false;
}
}
});
};
const onResetClick = () => {
loginData.username = '';
loginData.password = '';
};
return () => (
<div class={ns.b()}>
<div class={ns.b('box')}>
<div class={ns.b('box-left')}>
<div class={ns.b('box-left-top')}>
<img
class={ns.b('box-left-top-jh')}
src='./assets/img/user-login/jh.png'
/>
<div class={ns.b('box-left-top-text')}>
<div>江苏省检察机关</div>
<div>一体化考勤管理平台</div>
</div>
</div>
<div class={ns.b('main-content')}>
<i-form ref={formRef} props={{ model: loginData, rules }}>
<i-form-item prop='username'>
<div class={ns.b('form-label')}>
<img src='./assets/img/user-login/usn.svg' />
<span class={ns.b('form-label-text')}>用户名</span>
</div>
<i-input
type='text'
value={loginData.username}
on-on-change={(evt: InputEvent) => {
const { value } = evt.target as HTMLInputElement;
loginData.username = value;
}}
on-on-enter={onClick}
placeholder='请输入用户名'
size='large'
></i-input>
</i-form-item>
<i-form-item prop='password'>
<div class={ns.b('form-label')}>
<img src='./assets/img/user-login/psd.svg' />
<span class={ns.b('form-label-text')}>密码</span>
</div>
<i-input
type='password'
value={loginData.password}
on-on-change={(evt: InputEvent) => {
const { value } = evt.target as HTMLInputElement;
loginData.password = value;
}}
on-on-enter={onClick}
placeholder='请输入密码'
size='large'
password
></i-input>
</i-form-item>
<i-form-item class={ns.b('buttons')}>
<i-button loading={loading.value} long on-click={onClick}>
登录
</i-button>
<i-button long on-click={onResetClick}>
重置
</i-button>
</i-form-item>
</i-form>
</div>
</div>
<div class={ns.b('box-right')}>
<img src='./assets/img/user-login/right.png' />
</div>
</div>
</div>
);
},
});
......@@ -34,6 +34,7 @@ export const GridView = defineComponent({
modelData: grid,
context: this.c.context,
params: this.c.params,
modal: this.modal,
'grid-row-active-mode': this.c.model.gridRowActiveMode,
},
on: {
......
......@@ -10,7 +10,7 @@
height: 100%;
// 分页margin-bottom清除
> .ivu-tabs-bar{
> .ivu-tabs-bar {
margin-bottom: 0;
}
......@@ -26,7 +26,7 @@
}
}
@include e(tab){
@include e(tab) {
z-index: 1;
}
......@@ -52,6 +52,7 @@
position: absolute;
top: -50px;
right: 0;
z-index: 500;
border: 0;
.#{bem('view-layout-header-content', 'caption')} {
display: none;
......
......@@ -4,11 +4,13 @@ import {
defineComponent,
getCurrentInstance,
h,
onMounted,
onUnmounted,
PropType,
Ref,
ref,
watch,
} from 'vue';
import { IModal } from '@ibiz-template/runtime';
import { AppGridPagination } from '@/components/common';
import {
useAppGridPagination,
......@@ -31,6 +33,7 @@ export const GridControl = defineComponent({
* @type {(number | 0 | 1 | 2)}
*/
gridRowActiveMode: { type: Number, default: 2 },
modal: { type: Object as PropType<IModal> },
},
setup(props) {
const { proxy } = getCurrentInstance()!;
......@@ -63,33 +66,67 @@ export const GridControl = defineComponent({
onRowClick(data);
};
// 给到iView table组件的高度
const tableHeight = ref(0);
// 表格外层div的引用
const gridRef: Ref<HTMLElement | null> = ref(null);
// 表格分页组件的引用
const girdPaginationRef: Ref<InstanceType<
typeof AppGridPagination
> | null> = ref(null);
onMounted(() => {
setTimeout(() => {
// 计算表格高度(固定头部)
if (gridRef.value) {
if (c.model.source.enablePagingBar && girdPaginationRef.value) {
const gridPage = girdPaginationRef.value.$el as HTMLElement;
const gridPageHeight =
gridPage.offsetHeight +
parseFloat(window.getComputedStyle(gridPage).paddingTop);
tableHeight.value = gridRef.value.offsetHeight - gridPageHeight;
} else {
tableHeight.value = gridRef.value.offsetHeight;
}
// 浏览器ResizeObserver对象
let resizeObserver: ResizeObserver | null = null;
// 上次监听到的表格外层div高度,一旦发生变化就重新计算
let lastGridHeight = 0;
// 计算表格高度(用于固定头部)
const calcGridHeight = () => {
// 不是嵌入视图里的表格才去算高度
if (gridRef.value && props.modal?.mode !== 'EMBED') {
if (c.model.source.enablePagingBar && girdPaginationRef.value) {
const gridPage = girdPaginationRef.value.$el as HTMLElement;
const gridPageHeight =
gridPage.offsetHeight +
parseFloat(window.getComputedStyle(gridPage).paddingTop);
tableHeight.value = gridRef.value.offsetHeight - gridPageHeight;
} else {
tableHeight.value = gridRef.value.offsetHeight;
}
// 如果模型配置了高度走配置的
if (c.model.source.height > 0) {
tableHeight.value = c.model.source.height;
}
// 如果模型配置了高度走配置的
if (c.model.source.height > 0) {
tableHeight.value = c.model.source.height;
}
};
watch(gridRef, (newVal, oldVal) => {
if (newVal && newVal !== oldVal) {
calcGridHeight();
if (window.ResizeObserver && gridRef.value) {
resizeObserver = new ResizeObserver(entries => {
// 处理组件高度变化
const height = entries[0].contentRect.height;
if (height !== lastGridHeight) {
calcGridHeight();
lastGridHeight = height;
}
});
resizeObserver.observe(gridRef.value);
}
}, 0);
}
});
onUnmounted(() => {
// 在组件销毁前取消 ResizeObserver 的观察
if (resizeObserver) {
resizeObserver.disconnect();
}
});
return {
c,
ns,
......
import { CoreConst } from '@ibiz-template/core';
import {
defineComponent,
getCurrentInstance,
onMounted,
reactive,
ref,
} from 'vue';
import { clearCookie, setCookie } from 'qx-util';
import { useNamespace, useRoute } from '@ibiz-template/vue-util';
import router from '@/router';
import '@ibiz-template/theme/style/components/views/login-view/login-view.scss';
interface LoginData {
username: string;
password: string;
}
const rules = {
username: [
{
required: true,
message: '请输入账号',
trigger: 'blur',
},
],
password: [
{
required: true,
message: '请输入密码',
trigger: 'blur',
},
{
type: 'string',
min: 6,
message: '密码长度不能少于6位',
trigger: 'blur',
},
],
};
import { defineComponent, h } from 'vue';
export default defineComponent({
setup() {
const ns = useNamespace('login-view');
const loginData = reactive<LoginData>({
username: '',
password: '',
});
const formRef = ref<IData | null>(null);
const instance = getCurrentInstance()!;
const route = useRoute(instance.proxy);
const ru = (route.query.ru as string) || '/';
ibiz.appData = undefined;
ibiz.orgData = undefined;
onMounted(() => {
setTimeout(() => {
const el = document.querySelector('.app-loading-x') as HTMLDivElement;
if (el) {
el.style.display = 'none';
}
}, 300);
});
const loading = ref(false);
const onClick = () => {
formRef.value!.validate(async (valid: boolean) => {
if (valid) {
try {
loading.value = true;
clearCookie(CoreConst.TOKEN, true);
const res = await ibiz.auth.v7login(
loginData.username,
loginData.password,
);
if (res.ok) {
const { data } = res;
if (data && data.token) {
setCookie(CoreConst.TOKEN, data.token, 0, true);
const expiredDate =
new Date().getTime() + (data.expirein || 7199) * 1000;
setCookie(CoreConst.TOKEN_EXPIRES, `${expiredDate}`, 0, true);
router.push({ path: ru });
return;
}
}
ibiz.notification.error({
title: res.data?.message || '登录失败',
});
loading.value = false;
} catch (error) {
ibiz.notification.error({
title: (error as IData).response?.data?.message || '登录失败',
});
loading.value = false;
}
}
});
};
return () => (
<div class={ns.b()}>
<div class={ns.b('box')}>
<header class={ns.b('box-header')}>
<img src='./assets/img/login-header.png' />
</header>
<main class={ns.b('box-main')}>
<img
class={ns.be('box-main', 'avatar')}
src='./assets/img/login-avatar.png'
/>
<div class={ns.b('box-main-content')}>
<i-form ref={formRef} props={{ model: loginData, rules }}>
<i-form-item prop='username'>
<i-input
type='text'
value={loginData.username}
on-on-change={(evt: InputEvent) => {
const { value } = evt.target as HTMLInputElement;
loginData.username = value;
}}
on-on-enter={onClick}
placeholder='请输入账号'
size='large'
>
<i-icon type='md-person' slot='prefix'></i-icon>
</i-input>
</i-form-item>
<i-form-item prop='password'>
<i-input
type='password'
value={loginData.password}
on-on-change={(evt: InputEvent) => {
const { value } = evt.target as HTMLInputElement;
loginData.password = value;
}}
on-on-enter={onClick}
placeholder='请输入密码'
size='large'
password
>
<i-icon type='ios-unlock' slot='prefix'></i-icon>
</i-input>
</i-form-item>
<i-form-item>
<i-button
shape='circle'
loading={loading.value}
long
on-click={onClick}
>
登录
</i-button>
</i-form-item>
</i-form>
</div>
</main>
</div>
</div>
);
const loginViewName = ibiz.env.loginViewName;
return () => h(loginViewName);
},
});
......@@ -651,54 +651,54 @@
dependencies:
qx-util "^0.4.8"
"@ibiz-template/controller@^0.0.1-beta.61":
version "0.0.1-beta.61"
resolved "http://npm.zhr.icu/@ibiz-template/controller/-/controller-0.0.1-beta.61.tgz#218bb084285710746c1bf884472a5d13d24987df"
integrity sha512-5r6CcBOrtKIIT3auCfNRyyASkl+9JwwLxz5GaTwPJJvL7wogkp1KyCCgZPkRZmh9QJALx1yythJExZ6up9fJ6g==
"@ibiz-template/controller@^0.0.1-beta.62":
version "0.0.1-beta.62"
resolved "http://npm.zhr.icu/@ibiz-template/controller/-/controller-0.0.1-beta.62.tgz#0ff31c730bde4ec66083bab908b34dca0ae8eaf5"
integrity sha512-hxKkXvSfpEPP2UDeECXhhQMCQlIkAIeNNPuzXHw7kUnzxSGBK/RcGr7AJnD7a2rqpYXsfNLItw1Op6GKKtzo4Q==
dependencies:
async-validator "^4.2.5"
dayjs "^1.11.5"
"@ibiz-template/core@^0.0.1-beta.57":
version "0.0.1-beta.57"
resolved "http://npm.zhr.icu/@ibiz-template/core/-/core-0.0.1-beta.57.tgz#cbaee1af6542e780d7a69418a2510e1b137ac965"
integrity sha512-Xc5sVNolk4JIXZj8+okztyMMNBvAsOayjzT0FWH5ENtWnv9TQ2uYUMO2QySl/AtBNablUrCJKOROEDf+lqIbKQ==
"@ibiz-template/core@^0.0.1-beta.62":
version "0.0.1-beta.62"
resolved "http://npm.zhr.icu/@ibiz-template/core/-/core-0.0.1-beta.62.tgz#b423f286a8e6ad80f9213a8ac09a0497e34ee156"
integrity sha512-N6S0wvXg/Yf1vbHlxAX6MayiFy0tiHql8UUxvm30JVoC/dXVS0qNoCWohIdnoo3oSEEn2JzdcJju890nVrZ+SQ==
dependencies:
axios "^1.2.1"
loglevel "^1.8.0"
pluralize "^8.0.0"
qs "^6.11.0"
"@ibiz-template/model@^0.0.1-beta.61":
version "0.0.1-beta.61"
resolved "http://npm.zhr.icu/@ibiz-template/model/-/model-0.0.1-beta.61.tgz#ecb104a815da2afafe561e42f649e6c610e1cc03"
integrity sha512-w64mPMTvL9S3PJ0f5zJgWD8cvUMoW6az10wxpPa/o133wyAj5y6sOKauK3ajcyyXMHq3pYfNppC/1/ehxH1V7g==
"@ibiz-template/model@^0.0.1-beta.62":
version "0.0.1-beta.62"
resolved "http://npm.zhr.icu/@ibiz-template/model/-/model-0.0.1-beta.62.tgz#4310aa2a9386bee4631cb2be5560124cf3284571"
integrity sha512-jPSiJHnu8EnOYi/1eA9H81pZrw30wxxme4DoELffHxAhOwpIeZGHQGmhquN+DQI8vBglP15ir7ebmGWXmApTLQ==
dependencies:
"@ibiz/dynamic-model-api" "^2.1.17"
pluralize "^8.0.0"
"@ibiz-template/runtime@^0.0.1-beta.61":
version "0.0.1-beta.61"
resolved "http://npm.zhr.icu/@ibiz-template/runtime/-/runtime-0.0.1-beta.61.tgz#32857481d736136877b1a4a49206c377ee9556ff"
integrity sha512-UKv1lGjJy0trwl9LGdYVNFXHJQy/SUg/AwQeKc/IWdOXcnBZebPqQ6DuI41U4hEtHXQ0TIV1O1n2jpa8Zwku7A==
"@ibiz-template/runtime@^0.0.1-beta.62":
version "0.0.1-beta.62"
resolved "http://npm.zhr.icu/@ibiz-template/runtime/-/runtime-0.0.1-beta.62.tgz#de328e976b769f04184b2893bc6b5417b59b0276"
integrity sha512-rnyXctQJyWoj8cktPVIxzoNsG+TSakk2G06Mb7R0qlY+YkhamwaA4ADAFHHX4QD2d/1YlQlkI7WCWMIUwiSepA==
dependencies:
"@ibiz-template/command" "^0.0.1-beta.50"
qs "^6.11.0"
"@ibiz-template/service@^0.0.1-beta.61":
version "0.0.1-beta.61"
resolved "http://npm.zhr.icu/@ibiz-template/service/-/service-0.0.1-beta.61.tgz#61735063bf3e90e874a54e99c0f475f5ea3c6cbc"
integrity sha512-CE/L1XTdxnd2EeYowHIihJXzavkNB9QqeNDkg9yAPGurOjEiBwjCL+G13M3xd6ZoVnG4yafQrr5rvzU5x5HMqA==
"@ibiz-template/service@^0.0.1-beta.62":
version "0.0.1-beta.62"
resolved "http://npm.zhr.icu/@ibiz-template/service/-/service-0.0.1-beta.62.tgz#638b11f762a6038dd082e47571a8433da71fd759"
integrity sha512-Ip/WCav6f4MfIOrzCvHSAv6JgBJT/XYyl4MnCGB/2jKzcNsojZwvjatQNmIZAI9YLL6Gx1A1+SbD2C9Qp2pv3g==
"@ibiz-template/theme@^0.0.1-beta.59":
version "0.0.1-beta.59"
resolved "http://npm.zhr.icu/@ibiz-template/theme/-/theme-0.0.1-beta.59.tgz#f724e1a97f4ca6caee6c1f32751750b3fcd3583f"
integrity sha512-XfBMhlL+Fh4jFZL9Zc05Sev2wtrwlSLURYYL8i22yzQgxa28zUZU2v+bFGelvgaF78v7L5hoUs0ysDnBPN2GKg==
"@ibiz-template/vue-util@^0.0.1-beta.61":
version "0.0.1-beta.61"
resolved "http://npm.zhr.icu/@ibiz-template/vue-util/-/vue-util-0.0.1-beta.61.tgz#28680a3361c499b107de776a1edec2f6662d493c"
integrity sha512-Kko5OQo/P8MvZ2CgRcwtW/yb8r5NTdP5cxrDZOmE5gDELdH/Uvp9daEMTs8EY1bZGctJO9F8hNae8gyhabyq3w==
"@ibiz-template/vue-util@^0.0.1-beta.62":
version "0.0.1-beta.62"
resolved "http://npm.zhr.icu/@ibiz-template/vue-util/-/vue-util-0.0.1-beta.62.tgz#3cab64ab2ea46ddf1c8313ae5e995ba46ed5d313"
integrity sha512-Jjqad5jkcfllyU0AGJosCiC6YmX7c0Zp8AKTLEbQwHxu5gn6aSKavDdBPMUZJznlPX3ixNYajSS6loCG7xRVJA==
"@ibiz/dynamic-model-api@^2.1.17":
version "2.1.17"
......
Markdown 格式
0% or
您添加了 0 到此讨论。请谨慎行事。
先完成此消息的编辑!
想要评论请 注册