Skip to content
Projects
Groups
Snippets
Help
Loading...
Help
Contribute to GitLab
Sign in / Register
Toggle navigation
S
sup-server
Project
Project
Details
Activity
Cycle Analytics
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Charts
Issues
0
Issues
0
List
Board
Labels
Milestones
Merge Requests
0
Merge Requests
0
CI / CD
CI / CD
Pipelines
Jobs
Schedules
Charts
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Charts
Create a new issue
Jobs
Commits
Issue Boards
Open sidebar
Administrator
sup-server
Commits
e2c09a3a
Commit
e2c09a3a
authored
Nov 11, 2022
by
huangjie122
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
登录
parent
4c5dbe03
Changes
3
Hide whitespace changes
Inline
Side-by-side
Showing
3 changed files
with
167 additions
and
48 deletions
+167
-48
package-lock.json
dsk-srm-server/package-lock.json
+82
-30
login.js
dsk-srm-server/src/api/login.js
+40
-0
login.vue
dsk-srm-server/src/login.vue
+45
-18
No files found.
dsk-srm-server/package-lock.json
View file @
e2c09a3a
...
...
@@ -8,6 +8,7 @@
"name"
:
"dsk-srm-server"
,
"version"
:
"0.1.0"
,
"dependencies"
:
{
"axios"
:
"^1.1.3"
,
"core-js"
:
"^3.8.3"
,
"element-ui"
:
"^2.15.10"
,
"vue"
:
"^2.6.14"
,
...
...
@@ -3187,6 +3188,11 @@
"babel-runtime"
:
"6.x"
}
},
"node_modules/asynckit"
:
{
"version"
:
"0.4.0"
,
"resolved"
:
"https://registry.npmjs.org/asynckit/-/asynckit-0.4.0.tgz"
,
"integrity"
:
"sha512-Oei9OH4tRh0YqU3GxhX79dM/mwVgvbZJaSNaRk+bshkj0S5cfHcgYakreBjrHwatXKbz+IoIdYLxrKim2MjW0Q=="
},
"node_modules/at-least-node"
:
{
"version"
:
"1.0.0"
,
"resolved"
:
"https://registry.npmmirror.com/at-least-node/-/at-least-node-1.0.0.tgz"
,
...
...
@@ -3229,6 +3235,16 @@
"postcss"
:
"^8.1.0"
}
},
"node_modules/axios"
:
{
"version"
:
"1.1.3"
,
"resolved"
:
"https://registry.npmjs.org/axios/-/axios-1.1.3.tgz"
,
"integrity"
:
"sha512-00tXVRwKx/FZr/IDVFt4C+f9FYairX517WoGCL6dpOntqLkZofjhu43F/Xl44UOpqa+9sLFDrG/XAnFsUYgkDA=="
,
"dependencies"
:
{
"follow-redirects"
:
"^1.15.0"
,
"form-data"
:
"^4.0.0"
,
"proxy-from-env"
:
"^1.1.0"
}
},
"node_modules/babel-helper-vue-jsx-merge-props"
:
{
"version"
:
"2.0.3"
,
"resolved"
:
"https://registry.npmmirror.com/babel-helper-vue-jsx-merge-props/-/babel-helper-vue-jsx-merge-props-2.0.3.tgz"
,
...
...
@@ -4425,6 +4441,17 @@
"integrity"
:
"sha512-3tlv/dIP7FWvj3BsbHrGLJ6l/oKh1O3TcgBqMn+yyCagOxc23fyzDS6HypQbgxWbkpDnf52p1LuR4eWDQ/K9WQ=="
,
"dev"
:
true
},
"node_modules/combined-stream"
:
{
"version"
:
"1.0.8"
,
"resolved"
:
"https://registry.npmjs.org/combined-stream/-/combined-stream-1.0.8.tgz"
,
"integrity"
:
"sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg=="
,
"dependencies"
:
{
"delayed-stream"
:
"~1.0.0"
},
"engines"
:
{
"node"
:
">= 0.8"
}
},
"node_modules/commander"
:
{
"version"
:
"8.3.0"
,
"resolved"
:
"https://registry.npmjs.org/commander/-/commander-8.3.0.tgz"
,
...
...
@@ -5468,6 +5495,14 @@
"url"
:
"https://github.com/sponsors/ljharb"
}
},
"node_modules/delayed-stream"
:
{
"version"
:
"1.0.0"
,
"resolved"
:
"https://registry.npmjs.org/delayed-stream/-/delayed-stream-1.0.0.tgz"
,
"integrity"
:
"sha512-ZySD7Nf91aLB0RxL4KGrKHBXl7Eds1DAmEdcoVawXnLD7SDhpNgtuII2aAkg7a7QS41jxPSZ17p4VdGnMHk3MQ=="
,
"engines"
:
{
"node"
:
">=0.4.0"
}
},
"node_modules/depd"
:
{
"version"
:
"2.0.0"
,
"resolved"
:
"https://registry.npmmirror.com/depd/-/depd-2.0.0.tgz"
,
...
...
@@ -6359,7 +6394,6 @@
"version"
:
"1.15.2"
,
"resolved"
:
"https://registry.npmmirror.com/follow-redirects/-/follow-redirects-1.15.2.tgz"
,
"integrity"
:
"sha512-VQLG33o04KaQ8uYi2tVNbdrWp1QWxNNea+nmIB4EVM28v0hmP17z7aG1+wAkNzVq4KeXTq3221ye5qTJP91JwA=="
,
"dev"
:
true
,
"funding"
:
[
{
"type"
:
"individual"
,
...
...
@@ -6375,6 +6409,19 @@
}
}
},
"node_modules/form-data"
:
{
"version"
:
"4.0.0"
,
"resolved"
:
"https://registry.npmjs.org/form-data/-/form-data-4.0.0.tgz"
,
"integrity"
:
"sha512-ETEklSGi5t0QMZuiXoA/Q6vcnxcLQP5vdugSpuAyi6SVGi2clPPp+xgEhuMaHC+zGgn31Kd235W35f7Hykkaww=="
,
"dependencies"
:
{
"asynckit"
:
"^0.4.0"
,
"combined-stream"
:
"^1.0.8"
,
"mime-types"
:
"^2.1.12"
},
"engines"
:
{
"node"
:
">= 6"
}
},
"node_modules/forwarded"
:
{
"version"
:
"0.2.0"
,
"resolved"
:
"https://registry.npmmirror.com/forwarded/-/forwarded-0.2.0.tgz"
,
...
...
@@ -8668,7 +8715,6 @@
"version"
:
"1.52.0"
,
"resolved"
:
"https://registry.npmmirror.com/mime-db/-/mime-db-1.52.0.tgz"
,
"integrity"
:
"sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg=="
,
"dev"
:
true
,
"engines"
:
{
"node"
:
">= 0.6"
}
...
...
@@ -8677,7 +8723,6 @@
"version"
:
"2.1.35"
,
"resolved"
:
"https://registry.npmmirror.com/mime-types/-/mime-types-2.1.35.tgz"
,
"integrity"
:
"sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw=="
,
"dev"
:
true
,
"dependencies"
:
{
"mime-db"
:
"1.52.0"
},
...
...
@@ -10482,6 +10527,11 @@
"node"
:
">= 0.10"
}
},
"node_modules/proxy-from-env"
:
{
"version"
:
"1.1.0"
,
"resolved"
:
"https://registry.npmjs.org/proxy-from-env/-/proxy-from-env-1.1.0.tgz"
,
"integrity"
:
"sha512-D+zkORCbA9f1tdWRK0RaCR3GPv50cMxcrz4X8k5LTSUD1Dkw47mKJEZQNunItRTkWwgtaUSo1RVFRIG9ZXiFYg=="
},
"node_modules/pseudomap"
:
{
"version"
:
"1.0.2"
,
"resolved"
:
"https://registry.npmmirror.com/pseudomap/-/pseudomap-1.0.2.tgz"
,
...
...
@@ -14949,6 +14999,29 @@
"webpack-merge"
:
"^5.7.3"
,
"webpack-virtual-modules"
:
"^0.4.2"
,
"whatwg-fetch"
:
"^3.6.2"
},
"dependencies"
:
{
"@vue/vue-loader-v15"
:
{
"version"
:
"npm:vue-loader@15.10.0"
,
"resolved"
:
"https://registry.npmmirror.com/vue-loader/-/vue-loader-15.10.0.tgz"
,
"integrity"
:
"sha512-VU6tuO8eKajrFeBzMssFUP9SvakEeeSi1BxdTH5o3+1yUyrldp8IERkSdXlMI2t4kxF2sqYUDsQY+WJBxzBmZg=="
,
"dev"
:
true
,
"requires"
:
{
"@vue/component-compiler-utils"
:
"^3.1.0"
,
"hash-sum"
:
"^1.0.2"
,
"loader-utils"
:
"^1.1.0"
,
"vue-hot-reload-api"
:
"^2.3.0"
,
"vue-style-loader"
:
"^4.1.0"
},
"dependencies"
:
{
"hash-sum"
:
{
"version"
:
"1.0.2"
,
"resolved"
:
"https://registry.npmmirror.com/hash-sum/-/hash-sum-1.0.2.tgz"
,
"integrity"
:
"sha512-fUs4B4L+mlt8/XAtSOGMUO1TXmAelItBPtJG7CyHJfYTdDjwisntGO2JQz7oUsatOY9o68+57eziUVNw/mRHmA=="
,
"dev"
:
true
}
}
}
}
},
"@vue/cli-shared-utils"
:
{
...
...
@@ -15098,27 +15171,6 @@
}
}
},
"@vue/vue-loader-v15"
:
{
"version"
:
"npm:vue-loader@15.10.0"
,
"resolved"
:
"https://registry.npmmirror.com/vue-loader/-/vue-loader-15.10.0.tgz"
,
"integrity"
:
"sha512-VU6tuO8eKajrFeBzMssFUP9SvakEeeSi1BxdTH5o3+1yUyrldp8IERkSdXlMI2t4kxF2sqYUDsQY+WJBxzBmZg=="
,
"dev"
:
true
,
"requires"
:
{
"@vue/component-compiler-utils"
:
"^3.1.0"
,
"hash-sum"
:
"^1.0.2"
,
"loader-utils"
:
"^1.1.0"
,
"vue-hot-reload-api"
:
"^2.3.0"
,
"vue-style-loader"
:
"^4.1.0"
},
"dependencies"
:
{
"hash-sum"
:
{
"version"
:
"1.0.2"
,
"resolved"
:
"https://registry.npmmirror.com/hash-sum/-/hash-sum-1.0.2.tgz"
,
"integrity"
:
"sha512-fUs4B4L+mlt8/XAtSOGMUO1TXmAelItBPtJG7CyHJfYTdDjwisntGO2JQz7oUsatOY9o68+57eziUVNw/mRHmA=="
,
"dev"
:
true
}
}
},
"@vue/web-component-wrapper"
:
{
"version"
:
"1.3.0"
,
"resolved"
:
"https://registry.npmmirror.com/@vue/web-component-wrapper/-/web-component-wrapper-1.3.0.tgz"
,
...
...
@@ -15465,7 +15517,7 @@
},
"asynckit"
:
{
"version"
:
"0.4.0"
,
"resolved"
:
"https://registry.npm
mirror.com
/asynckit/-/asynckit-0.4.0.tgz"
,
"resolved"
:
"https://registry.npm
js.org
/asynckit/-/asynckit-0.4.0.tgz"
,
"integrity"
:
"sha512-Oei9OH4tRh0YqU3GxhX79dM/mwVgvbZJaSNaRk+bshkj0S5cfHcgYakreBjrHwatXKbz+IoIdYLxrKim2MjW0Q=="
},
"at-least-node"
:
{
...
...
@@ -15490,7 +15542,7 @@
},
"axios"
:
{
"version"
:
"1.1.3"
,
"resolved"
:
"https://registry.npm
mirror.com
/axios/-/axios-1.1.3.tgz"
,
"resolved"
:
"https://registry.npm
js.org
/axios/-/axios-1.1.3.tgz"
,
"integrity"
:
"sha512-00tXVRwKx/FZr/IDVFt4C+f9FYairX517WoGCL6dpOntqLkZofjhu43F/Xl44UOpqa+9sLFDrG/XAnFsUYgkDA=="
,
"requires"
:
{
"follow-redirects"
:
"^1.15.0"
,
...
...
@@ -16454,7 +16506,7 @@
},
"combined-stream"
:
{
"version"
:
"1.0.8"
,
"resolved"
:
"https://registry.npm
mirror.com
/combined-stream/-/combined-stream-1.0.8.tgz"
,
"resolved"
:
"https://registry.npm
js.org
/combined-stream/-/combined-stream-1.0.8.tgz"
,
"integrity"
:
"sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg=="
,
"requires"
:
{
"delayed-stream"
:
"~1.0.0"
...
...
@@ -17224,7 +17276,7 @@
},
"delayed-stream"
:
{
"version"
:
"1.0.0"
,
"resolved"
:
"https://registry.npm
mirror.com
/delayed-stream/-/delayed-stream-1.0.0.tgz"
,
"resolved"
:
"https://registry.npm
js.org
/delayed-stream/-/delayed-stream-1.0.0.tgz"
,
"integrity"
:
"sha512-ZySD7Nf91aLB0RxL4KGrKHBXl7Eds1DAmEdcoVawXnLD7SDhpNgtuII2aAkg7a7QS41jxPSZ17p4VdGnMHk3MQ=="
},
"depd"
:
{
...
...
@@ -17962,7 +18014,7 @@
},
"form-data"
:
{
"version"
:
"4.0.0"
,
"resolved"
:
"https://registry.npm
mirror.com
/form-data/-/form-data-4.0.0.tgz"
,
"resolved"
:
"https://registry.npm
js.org
/form-data/-/form-data-4.0.0.tgz"
,
"integrity"
:
"sha512-ETEklSGi5t0QMZuiXoA/Q6vcnxcLQP5vdugSpuAyi6SVGi2clPPp+xgEhuMaHC+zGgn31Kd235W35f7Hykkaww=="
,
"requires"
:
{
"asynckit"
:
"^0.4.0"
,
...
...
@@ -20983,7 +21035,7 @@
},
"proxy-from-env"
:
{
"version"
:
"1.1.0"
,
"resolved"
:
"https://registry.npm
mirror.com
/proxy-from-env/-/proxy-from-env-1.1.0.tgz"
,
"resolved"
:
"https://registry.npm
js.org
/proxy-from-env/-/proxy-from-env-1.1.0.tgz"
,
"integrity"
:
"sha512-D+zkORCbA9f1tdWRK0RaCR3GPv50cMxcrz4X8k5LTSUD1Dkw47mKJEZQNunItRTkWwgtaUSo1RVFRIG9ZXiFYg=="
},
"pseudomap"
:
{
...
...
dsk-srm-server/src/api/login.js
View file @
e2c09a3a
import
network
from
"@/utils/network"
;
//密码登录
export
const
login
=
(
data
)
=>
network
({
url
:
"/login"
,
method
:
"post"
,
data
});
//短信登录
export
const
smsLogin
=
(
data
)
=>
network
({
url
:
"/smsLogin"
,
method
:
"post"
,
data
});
//校验短信验证码
export
const
validateSmsCode
=
(
data
)
=>
network
({
url
:
"/sms/validateSmsCode?phone="
+
data
.
phone
+
"&code="
+
data
.
code
,
method
:
"get"
,
data
});
//校验图形验证码
export
const
validateCaptcha
=
(
data
)
=>
network
({
url
:
"/validateCaptcha?uuid="
+
data
.
uuid
+
"&code="
+
data
.
code
,
method
:
"get"
,
});
//忘记密码提交
export
const
forgotPassword
=
(
data
)
=>
network
({
url
:
"/forgotPassword"
,
method
:
"post"
,
data
});
//图形验证码
export
const
captchaImage
=
()
=>
network
({
url
:
"/captchaImage"
,
method
:
"get"
,
});
//验证账号并发送短信
export
const
checkUser
=
(
data
)
=>
network
({
url
:
"/checkUser"
,
method
:
"post"
,
data
});
export
const
loginApi
=
(
data
)
=>
network
({
url
:
""
,
...
...
dsk-srm-server/src/login.vue
View file @
e2c09a3a
...
...
@@ -20,10 +20,10 @@
<!--密码登录 -->
<div
class=
"logoncont"
v-if=
"type=='mima'"
>
<div
class=
"inputs"
>
<el-input
placeholder=
"请输入账号"
v-model=
"mimaparam.user
n
ame"
></el-input>
<el-input
placeholder=
"请输入账号"
v-model=
"mimaparam.user
N
ame"
></el-input>
</div>
<div
class=
"inputs"
>
<el-input
placeholder=
"请输入登录密码"
v-model=
"mimaparam.password"
></el-input>
<el-input
placeholder=
"请输入登录密码"
show-password
v-model=
"mimaparam.password"
></el-input>
</div>
<div
class=
"inputs"
>
<el-input
width=
"191px"
class=
"small"
placeholder=
"请输入验证码"
v-model=
"mimaparam.code"
></el-input>
...
...
@@ -59,7 +59,7 @@
</div>
<div
class=
"inputs"
>
<el-input
placeholder=
"短信验证码"
v-model=
"resetparam.smsCode"
class=
"hqyzm"
>
<
template
slot=
"append"
><span
@
click=
"getSmsCode(
1
)"
>
{{
timer
}}
</span></
template
>
<
template
slot=
"append"
><span
@
click=
"getSmsCode(
2
)"
>
{{
timer
}}
</span></
template
>
</el-input>
</div>
<div
class=
"inputs"
>
...
...
@@ -76,10 +76,10 @@
<!-- 提交重置的密码-->
<div
class=
"logoncont"
v-if=
"type=='tjmm'"
>
<div
class=
"inputs"
>
<el-input
v-model=
"resetparam.passWord"
placeholder=
"请输入密码"
></el-input>
<el-input
v-model=
"resetparam.passWord"
placeholder=
"请输入密码"
show-password
></el-input>
</div>
<div
class=
"inputs"
>
<el-input
v-model=
"resetparam.passWord1"
placeholder=
"请再次输入密码"
></el-input>
<el-input
v-model=
"resetparam.passWord1"
placeholder=
"请再次输入密码"
show-password
></el-input>
</div>
<div
class=
"loginin"
@
click=
"resetpwd"
>
提交
</div>
<div
class=
"loginzc"
style=
"justify-content: center"
>
...
...
@@ -331,7 +331,7 @@
<
script
>
import
footers
from
'@/components/foots'
import
{
login
,
smsLogin
,
validateSmsCode
,
validateCaptcha
,
forgotPassword
,
captchaImage
,
checkUser
}
from
"./api/login"
export
default
{
components
:
{
footers
},
data
()
{
...
...
@@ -387,13 +387,13 @@ export default {
{
required
:
true
,
message
:
'请输入企业简介'
,
trigger
:
'change'
}
],
},
type
:
"
tjmm
"
,
//登录方式 密码:mima 验证码:yzm 忘记密码:wjmm 提交密码:tjmm
type
:
"
mima
"
,
//登录方式 密码:mima 验证码:yzm 忘记密码:wjmm 提交密码:tjmm
yzmparam
:{
phone
:
''
,
smsCode
:
''
}
,
mimaparam
:{
user
n
ame
:
''
,
user
N
ame
:
''
,
password
:
''
,
code
:
''
,
uuid
:
''
...
...
@@ -423,22 +423,26 @@ export default {
cleardata
(){
},
//登录
/login
//登录
login
(){
this
.
mimaparam
.
uuid
=
this
.
uuid
if
(
!
(
this
.
mimaparam
.
username
||
this
.
mimaparam
.
code
||
this
.
mimaparam
.
code
)){
this
.
$message
.
error
(
'账号、密码、验证码不能为空!'
);
return
false
;
}
// this.$store.dispatch("/login",this.mimaparam).then((res) => {
// // })
login
(
this
.
mimaparam
).
then
(
res
=>
{
if
(
res
.
code
==
200
){
let
token
=
res
.
token
this
.
$store
.
commit
(
"user/SET_TOKEN"
,
token
)
this
.
toList
()
}
else
{
this
.
$message
.
error
(
res
.
msg
);
}
})
},
//验证码登录
/smsLogin
//验证码登录
yzmlogin
(){
if
(
!
(
this
.
yzmparam
.
phone
||
this
.
yzmparam
.
smsCode
)){
this
.
$message
.
error
(
'账号、验证码不能为空!'
);
...
...
@@ -446,6 +450,8 @@ export default {
}
smsLogin
(
this
.
yzmparam
).
then
(
res
=>
{
if
(
res
.
code
==
200
){
let
token
=
res
.
token
this
.
$store
.
commit
(
"user/SET_TOKEN"
,
token
)
this
.
toList
()
}
else
{
this
.
$message
.
error
(
res
.
msg
);
...
...
@@ -454,18 +460,22 @@ export default {
},
//验证短信验证码、图形验证码
yzSmscode
(){
if
(
!
(
this
.
resetparam
.
phone
||
this
.
resetparam
.
smsCode
||
this
.
resetparam
.
code
)){
this
.
$message
.
error
(
'账号、验证码不能为空!'
);
return
false
;
}
let
param
=
{
phone
:
this
.
resetparam
.
phone
,
code
:
this
.
resetparam
.
smsCode
}
//校验短信验证码
/sms/validateSmsCode
//校验短信验证码
validateSmsCode
(
param
).
then
(
res
=>
{
if
(
res
.
code
==
200
){
let
params
=
{
uuid
:
this
.
uuid
,
code
:
this
.
resetparam
.
code
}
//校验图形验证码 /validateCaptcha
校验图形验证码
validateCaptcha
(
params
).
then
(
res
=>
{
if
(
res
.
code
==
200
){
this
.
type
=
'tjmm'
...
...
@@ -485,12 +495,16 @@ export default {
if
(
pwd
!=
pwd1
){
this
.
$message
.
error
(
'两次输入密码不一致'
);
}
else
{
//重置
/forgotPassword
//重置
let
param
=
{
phone
:
this
.
resetparam
.
phone
,
passWord
:
this
.
resetparam
.
passWord
}
forgotPassword
(
param
).
then
(
res
=>
{
if
(
res
.
code
==
200
){
this
.
type
=
'mima'
this
.
getCode
()
this
.
$message
({
message
:
res
.
msg
,
type
:
'success'
});
}
else
{
this
.
$message
.
error
(
res
.
msg
);
}
...
...
@@ -499,9 +513,9 @@ export default {
},
//获取验图形证码
getCode
(){
this
.
getYZMi
mage
().
then
(
res
=>
{
this
.
codeUrl
=
res
.
data
.
ima
g
this
.
uuid
=
res
.
data
.
uuid
captchaI
mage
().
then
(
res
=>
{
this
.
codeUrl
=
'data:image/gif;base64,'
+
res
.
im
g
this
.
uuid
=
res
.
uuid
})
},
//获取手机验证码
...
...
@@ -515,14 +529,23 @@ export default {
type
:
'warning'
});
}
if
(
type
==
2
){
//忘记密码
if
(
this
.
resetparam
.
phone
)
this
.
yzPohne
(
this
.
resetparam
.
phone
)
else
this
.
$message
({
message
:
'请输入手机号!'
,
type
:
'warning'
});
}
},
// 验证手机号发送验证码
/sms/sendRegisterCode
// 验证手机号发送验证码
yzPohne
(
phone
){
var
param
=
{
phone
:
phone
,
type
:
1
//0:注册,1:短信登录/忘记密码
}
//验证账户发送短信
/checkUser
//验证账户发送短信
checkUser
(
param
).
then
(
res
=>
{
if
(
res
.
code
==
200
){
this
.
getTimer
()
...
...
@@ -750,6 +773,10 @@ export default {
background
:
#FFFFFF
;
border-radius
:
8px
;
border
:
1px
solid
#F1F1F1
;
>
img
{
width
:
100%
;
height
:
100%
;
}
}
}
...
...
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment