Skip to content
Projects
Groups
Snippets
Help
This project
Loading...
Sign in / Register
Toggle navigation
F
founder_vue
Overview
Overview
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
常超
founder_vue
Commits
34a658b7
Commit
34a658b7
authored
Jan 19, 2022
by
liyuhang19990520
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
门户页面毛玻璃
parent
cf9ecea7
Hide whitespace changes
Inline
Side-by-side
Showing
2 changed files
with
98 additions
and
152 deletions
+98
-152
src/views/Home/Home.vue
+97
-151
src/views/SystemManage/UserManage.vue
+1
-1
No files found.
src/views/Home/Home.vue
View file @
34a658b7
<
template
>
<
template
>
<div
class=
"page"
>
<div
class=
"page"
>
<!-- 头部 -->
<!-- 头部 -->
<div
class=
"header
"
>
<div
:class=
"
{ zhanshi: isCropper, header: true }
">
<!-- 头部左侧 -->
<!-- 头部左侧 -->
<div
class=
"left"
>
<div
class=
"left"
>
<div
class=
"btm"
>
<div
class=
"btm"
>
<div
v-if=
"this.$store.state.tm.tmType==false"
><img
<div
v-if=
"this.$store.state.tm.tmType == false"
>
src=
"../../assets/img/Home/jh.png"
<img
src=
"../../assets/img/Home/jh.png"
alt=
""
/>
alt=
""
/>
</div>
</div>
<span
v-if=
"this.$store.state.tm.tmType==false"
><img
<span
v-if=
"this.$store.state.tm.tmType == false"
src=
"../../assets/img/Home/title.png"
><img
src=
"../../assets/img/Home/title.png"
alt=
""
alt=
""
/></span>
/></span>
<div
<div
class=
"tmDiv"
v-if=
"this.$store.state.tm.tmType == true"
>
class=
"tmDiv"
<img
src=
"../../assets/img/Home/tmLogo.svg"
alt=
""
/>
v-if=
"this.$store.state.tm.tmType==true"
>
<img
src=
"../../assets/img/Home/tmLogo.svg"
alt=
""
>
</div>
</div>
</div>
</div>
</div>
</div>
...
@@ -34,16 +25,10 @@
...
@@ -34,16 +25,10 @@
style=
"cursor: pointer"
style=
"cursor: pointer"
v-if=
"roleArr.includes('H-1')"
v-if=
"roleArr.includes('H-1')"
>
>
<img
<img
src=
"../../assets/img/Home/setting.svg"
alt=
""
/>
系统管理
src=
"../../assets/img/Home/setting.svg"
alt=
""
/>
系统管理
</div>
</div>
<div
class=
"role"
>
<div
class=
"role"
>
<img
<img
src=
"../../assets/img/Home/role.svg"
alt=
""
/>
用户信息
src=
"../../assets/img/Home/role.svg"
alt=
""
/>
用户信息
<div
class=
"rolelist"
>
<div
class=
"rolelist"
>
<ul>
<ul>
<li>
用户名:
{{
userInfo
.
user
.
username
}}
</li>
<li>
用户名:
{{
userInfo
.
user
.
username
}}
</li>
...
@@ -53,35 +38,27 @@
...
@@ -53,35 +38,27 @@
</div>
</div>
</div>
</div>
<div
<div
style=
"cursor: pointer"
@
click=
"logout"
>
style=
"cursor: pointer"
<img
src=
"../../assets/img/Home/exit.svg"
alt=
""
/>
安全退出
@
click=
"logout"
>
<img
src=
"../../assets/img/Home/exit.svg"
alt=
""
/>
安全退出
</div>
</div>
</div>
</div>
<!-- 主体 -->
<!-- 主体 -->
<div
class=
"main"
>
<div
class=
"main"
>
<div
class=
"title"
>
欢迎登录
</div>
<div
class=
"title"
>
欢迎登录
</div>
<div
class=
"title1"
>
{{
this
.
$store
.
state
.
tm
.
tmType
==
true
?
'方正系统'
:
'方正指掌纹系统'
}}
</div>
<div
class=
"title1"
>
{{
this
.
$store
.
state
.
tm
.
tmType
==
true
?
"方正系统"
:
"方正指掌纹系统"
}}
</div>
<!-- 待办功能区 -->
<!-- 待办功能区 -->
<div
class=
"todoview"
>
<div
class=
"todoview"
>
<div
class=
"todo"
>
<div
class=
"todo"
>
<div>
<div>
<img
<img
src=
"../../assets/img/Home/todoview.svg"
alt=
""
/>
src=
"../../assets/img/Home/todoview.svg"
alt=
""
/>
</div>
</div>
<p>
待办工作
</p>
<p>
待办工作
</p>
</div>
</div>
<div
<div
class=
"todopublic quality_inspection"
@
click=
"gozljc('mh')"
>
class=
"todopublic quality_inspection"
@
click=
"gozljc('mh')"
>
<p>
质量检查
</p>
<p>
质量检查
</p>
<p>
{{
zljcNum
}}
</p>
<p>
{{
zljcNum
}}
</p>
</div>
</div>
...
@@ -90,10 +67,7 @@
...
@@ -90,10 +67,7 @@
<div
/>
<div
/>
</div>
</div>
<div
<div
class=
"todopublic shanbuapp"
@
click=
"gobdrd('mh')"
>
class=
"todopublic shanbuapp"
@
click=
"gobdrd('mh')"
>
<p>
闪捕App
</p>
<p>
闪捕App
</p>
<p>
{{
sbAppNum
}}
</p>
<p>
{{
sbAppNum
}}
</p>
</div>
</div>
...
@@ -102,10 +76,7 @@
...
@@ -102,10 +76,7 @@
<div
/>
<div
/>
</div>
</div>
<div
<div
class=
"todopublic fingerprint"
@
click=
"goqbalk"
>
class=
"todopublic fingerprint"
@
click=
"goqbalk"
>
<p>
待发指纹
</p>
<p>
待发指纹
</p>
<p>
{{
dfzwNum
}}
</p>
<p>
{{
dfzwNum
}}
</p>
</div>
</div>
...
@@ -114,57 +85,30 @@
...
@@ -114,57 +85,30 @@
<div
class=
"todolist"
>
<div
class=
"todolist"
>
<!-- 第一列 -->
<!-- 第一列 -->
<div
class=
"list l1"
>
<div
class=
"list l1"
>
<div
<div
class=
"import_images"
@
click=
"goQBAJK"
>
class=
"import_images"
<img
src=
"../../assets/img/Home/import_images.svg"
alt=
""
/>
@
click=
"goQBAJK"
>
<img
src=
"../../assets/img/Home/import_images.svg"
alt=
""
/>
<div>
案件图片导入
</div>
<div>
案件图片导入
</div>
</div>
</div>
<div
<div
@
click=
"godrFPTX"
class=
"import_FTP"
>
@
click=
"godrFPTX"
<img
src=
"../../assets/img/Home/import_FTP.svg"
alt=
""
/>
class=
"import_FTP"
>
<img
src=
"../../assets/img/Home/import_FTP.svg"
alt=
""
/>
<div>
FPTX导入
</div>
<div>
FPTX导入
</div>
</div>
</div>
</div>
</div>
<!-- 第二列 -->
<!-- 第二列 -->
<div
<div
class=
"list l2"
@
click=
"gosjzygl"
>
class=
"list l2"
<img
src=
"../../assets/img/Home/query.svg"
alt=
""
/>
@
click=
"gosjzygl"
>
<img
src=
"../../assets/img/Home/query.svg"
alt=
""
/>
<p>
发查询
</p>
<p>
发查询
</p>
</div>
</div>
<!-- 第三列 -->
<!-- 第三列 -->
<div
<div
@
click=
"gobdrd"
class=
"list l2 l3"
>
@
click=
"gobdrd"
<img
src=
"../../assets/img/Home/comparison.svg"
alt=
""
/>
class=
"list l2 l3"
>
<img
src=
"../../assets/img/Home/comparison.svg"
alt=
""
/>
<p>
比对认定
</p>
<p>
比对认定
</p>
</div>
</div>
<!-- 第四列 -->
<!-- 第四列 -->
<div
class=
"list l1 l4"
>
<div
class=
"list l1 l4"
>
<div
class=
"xz"
>
<div
class=
"xz"
>
<div
class=
"xztop"
>
<div
class=
"xztop"
>
<div
<div
class=
"xzleft"
@
click=
"gozzwcj"
>
class=
"xzleft"
@
click=
"gozzwcj"
>
<span
class=
"xzimg"
>
<span
class=
"xzimg"
>
<img
<img
src=
"../../assets/img/Home/collect_new.svg"
src=
"../../assets/img/Home/collect_new.svg"
...
@@ -174,10 +118,7 @@
...
@@ -174,10 +118,7 @@
</span>
</span>
<span
class=
"itemTxt"
>
活体采集
</span>
<span
class=
"itemTxt"
>
活体采集
</span>
</div>
</div>
<div
<div
class=
"xzright"
@
click=
"gozljc"
>
class=
"xzright"
@
click=
"gozljc"
>
<span
class=
"xzimg"
>
<span
class=
"xzimg"
>
<img
<img
src=
"../../assets/img/Home/zljc.svg"
src=
"../../assets/img/Home/zljc.svg"
...
@@ -188,10 +129,7 @@
...
@@ -188,10 +129,7 @@
<span
class=
"itemTxt"
>
质量检查
</span>
<span
class=
"itemTxt"
>
质量检查
</span>
</div>
</div>
</div>
</div>
<div
<div
class=
"xzbottom"
@
click=
"gobzxxgl"
>
class=
"xzbottom"
@
click=
"gobzxxgl"
>
<span
class=
"xzimg"
>
<span
class=
"xzimg"
>
<img
<img
src=
"../../assets/img/Home/bzxxgl.svg"
src=
"../../assets/img/Home/bzxxgl.svg"
...
@@ -208,14 +146,8 @@
...
@@ -208,14 +146,8 @@
/>
/>
<div>
活体采集
</div>
-->
<div>
活体采集
</div>
-->
</div>
</div>
<div
<div
@
click=
"gosjzygl"
class=
"import_FTP management"
>
@
click=
"gosjzygl"
<img
src=
"../../assets/img/Home/management.svg"
alt=
""
/>
class=
"import_FTP management"
>
<img
src=
"../../assets/img/Home/management.svg"
alt=
""
/>
<div>
数据资源管理
</div>
<div>
数据资源管理
</div>
</div>
</div>
</div>
</div>
...
@@ -223,30 +155,26 @@
...
@@ -223,30 +155,26 @@
</div>
</div>
</div>
</div>
<el-dialog
<el-dialog
class=
'exitDialog'
class=
"exitDialog"
title=
"退出系统"
title=
"退出系统"
:visible
.
sync=
"dialogVisible"
:visible
.
sync=
"dialogVisible"
:append-to-body=
'true'
:append-to-body=
"true"
:modal-append-to-body=
"false"
:modal-append-to-body=
"false"
:close-on-click-modal=
'false'
@
closed=
"closed"
:modal=
'false'
:close-on-click-modal=
"false"
:modal=
"false"
width=
"25rem"
width=
"25rem"
>
>
<span>
您确认要退出系统吗?
</span>
<span>
您确认要退出系统吗?
</span>
<span
<span
slot=
"footer"
class=
"dialog-footer"
>
slot=
"footer"
<el-button
@
click=
"exit"
class=
"qr"
>
确 认
</el-button>
class=
"dialog-footer"
<el-button
@
click=
"dialogVisible = false"
class=
"qx"
>
取 消
</el-button>
>
<el-button
@
click=
"exit"
class=
'qr'
>
确 认
</el-button>
<el-button
@
click=
"dialogVisible=false"
class=
'qx'
>
取 消
</el-button>
</span>
</span>
</el-dialog>
</el-dialog>
<div
class=
"shadow"
v-show=
"isCropper"
></div>
</div>
</div>
</
template
>
</
template
>
...
@@ -256,18 +184,18 @@ import jwtDecode from "jwt-decode";
...
@@ -256,18 +184,18 @@ import jwtDecode from "jwt-decode";
import
utils
from
"@/utils/util.js"
;
import
utils
from
"@/utils/util.js"
;
export
default
{
export
default
{
name
:
"Home"
,
name
:
"Home"
,
data
()
{
data
()
{
return
{
return
{
isCropper
:
false
,
userInfo
:
{},
userInfo
:
{},
zljcNum
:
0
,
zljcNum
:
0
,
sbAppNum
:
0
,
sbAppNum
:
0
,
dfzwNum
:
0
,
dfzwNum
:
0
,
dialogVisible
:
false
,
// 退出弹窗状态
dialogVisible
:
false
,
// 退出弹窗状态
};
};
},
},
methods
:
{
methods
:
{
goQBAJK
()
{
goQBAJK
()
{
if
(
!
this
.
roleArr
.
includes
(
"F-2-16"
))
return
;
if
(
!
this
.
roleArr
.
includes
(
"F-2-16"
))
return
;
this
.
$router
.
pushToTab
({
this
.
$router
.
pushToTab
({
path
:
"/qbalk"
,
path
:
"/qbalk"
,
...
@@ -276,14 +204,14 @@ export default {
...
@@ -276,14 +204,14 @@ export default {
},
},
});
});
},
},
toXtgl
()
{
toXtgl
()
{
this
.
$router
.
pushToTab
(
"/UserManage"
);
this
.
$router
.
pushToTab
(
"/UserManage"
);
},
},
godrFPTX
()
{
godrFPTX
()
{
if
(
!
this
.
roleArr
.
includes
(
"B-1"
))
return
;
if
(
!
this
.
roleArr
.
includes
(
"B-1"
))
return
;
this
.
$router
.
pushToTab
(
"/drFPTX"
);
this
.
$router
.
pushToTab
(
"/drFPTX"
);
},
},
gobdrd
(
type
)
{
gobdrd
(
type
)
{
if
(
!
this
.
roleArr
.
includes
(
"C"
))
return
;
if
(
!
this
.
roleArr
.
includes
(
"C"
))
return
;
if
(
type
==
"mh"
)
{
if
(
type
==
"mh"
)
{
this
.
$router
.
pushToTab
({
this
.
$router
.
pushToTab
({
...
@@ -296,11 +224,11 @@ export default {
...
@@ -296,11 +224,11 @@ export default {
this
.
$router
.
pushToTab
(
"/cxyrd"
);
this
.
$router
.
pushToTab
(
"/cxyrd"
);
}
}
},
},
gosjzygl
()
{
gosjzygl
()
{
if
(
!
this
.
roleArr
.
includes
(
"F-1"
))
return
;
if
(
!
this
.
roleArr
.
includes
(
"F-1"
))
return
;
this
.
$router
.
pushToTab
(
"/AllPersonnelBaseIndex/"
);
this
.
$router
.
pushToTab
(
"/AllPersonnelBaseIndex/"
);
},
},
gozzwcj
()
{
gozzwcj
()
{
if
(
!
this
.
roleArr
.
includes
(
"A"
))
return
;
if
(
!
this
.
roleArr
.
includes
(
"A"
))
return
;
// this.$router.pushToTab("/zzwcj")
// this.$router.pushToTab("/zzwcj")
// this.$router.pushToTab('/fingerprintIndex/R4300000000002021125008/admin')
// this.$router.pushToTab('/fingerprintIndex/R4300000000002021125008/admin')
...
@@ -312,10 +240,10 @@ export default {
...
@@ -312,10 +240,10 @@ export default {
// },
// },
// });
// });
this
.
$router
.
pushToTab
({
this
.
$router
.
pushToTab
({
path
:
"/htcj"
path
:
"/htcj"
,
})
})
;
},
},
gozljc
(
type
)
{
gozljc
(
type
)
{
if
(
!
this
.
roleArr
.
includes
(
"D"
))
return
;
if
(
!
this
.
roleArr
.
includes
(
"D"
))
return
;
if
(
type
==
"mh"
)
{
if
(
type
==
"mh"
)
{
this
.
$router
.
pushToTab
({
this
.
$router
.
pushToTab
({
...
@@ -328,7 +256,10 @@ export default {
...
@@ -328,7 +256,10 @@ export default {
this
.
$router
.
pushToTab
(
"/zljc"
);
this
.
$router
.
pushToTab
(
"/zljc"
);
}
}
},
},
goqbalk
()
{
closed
(){
this
.
isCropper
=
false
;
},
goqbalk
()
{
if
(
!
this
.
roleArr
.
includes
(
"F-2"
))
return
;
if
(
!
this
.
roleArr
.
includes
(
"F-2"
))
return
;
this
.
$router
.
pushToTab
({
this
.
$router
.
pushToTab
({
path
:
"/qbalk"
,
path
:
"/qbalk"
,
...
@@ -337,14 +268,15 @@ export default {
...
@@ -337,14 +268,15 @@ export default {
},
},
});
});
},
},
gobzxxgl
()
{
gobzxxgl
()
{
if
(
!
this
.
roleArr
.
includes
(
"G"
))
return
;
if
(
!
this
.
roleArr
.
includes
(
"G"
))
return
;
this
.
$router
.
pushToTab
(
"/bzxxfh"
);
this
.
$router
.
pushToTab
(
"/bzxxfh"
);
},
},
logout
()
{
logout
()
{
this
.
dialogVisible
=
true
this
.
dialogVisible
=
true
;
this
.
isCropper
=
true
;
},
},
exit
()
{
exit
()
{
this
.
$axios
this
.
$axios
.
get
(
"/security/logout"
)
.
get
(
"/security/logout"
)
.
then
((
res
)
=>
{
.
then
((
res
)
=>
{
...
@@ -355,9 +287,9 @@ export default {
...
@@ -355,9 +287,9 @@ export default {
this
.
$message
.
info
(
"退出成功!"
);
this
.
$message
.
info
(
"退出成功!"
);
}
}
})
})
.
catch
((
err
)
=>
{
});
.
catch
((
err
)
=>
{});
},
},
getHomeNum
()
{
getHomeNum
()
{
this
.
$axios
.
get
(
"/api/home/getHomeMsg"
).
then
((
res
)
=>
{
this
.
$axios
.
get
(
"/api/home/getHomeMsg"
).
then
((
res
)
=>
{
if
(
res
.
data
.
code
==
200
)
{
if
(
res
.
data
.
code
==
200
)
{
console
.
log
(
res
.
data
);
console
.
log
(
res
.
data
);
...
@@ -368,8 +300,8 @@ export default {
...
@@ -368,8 +300,8 @@ export default {
});
});
},
},
},
},
async
mounted
()
{
async
mounted
()
{
function
getIPs
(
callback
)
{
function
getIPs
(
callback
)
{
var
ip_dups
=
{};
var
ip_dups
=
{};
//compatibility for firefox and chrome
//compatibility for firefox and chrome
var
RTCPeerConnection
=
var
RTCPeerConnection
=
...
@@ -424,7 +356,7 @@ export default {
...
@@ -424,7 +356,7 @@ export default {
};
};
//construct a new RTCPeerConnection
//construct a new RTCPeerConnection
var
pc
=
new
RTCPeerConnection
(
servers
,
mediaConstraints
);
var
pc
=
new
RTCPeerConnection
(
servers
,
mediaConstraints
);
function
handleCandidate
(
candidate
)
{
function
handleCandidate
(
candidate
)
{
//match just the IP address
//match just the IP address
var
ip_regex
=
/
([
0-9
]{1,3}(\.[
0-9
]{1,3}){3})
/
;
var
ip_regex
=
/
([
0-9
]{1,3}(\.[
0-9
]{1,3}){3})
/
;
var
ip_addr
=
ip_regex
.
exec
(
candidate
)[
1
];
var
ip_addr
=
ip_regex
.
exec
(
candidate
)[
1
];
...
@@ -445,11 +377,11 @@ export default {
...
@@ -445,11 +377,11 @@ export default {
//trigger the stun server request
//trigger the stun server request
pc
.
setLocalDescription
(
pc
.
setLocalDescription
(
result
,
result
,
function
()
{
},
function
()
{},
function
()
{
}
function
()
{}
);
);
},
},
function
()
{
}
function
()
{}
);
);
//wait for a while to let everything done
//wait for a while to let everything done
setTimeout
(
function
()
{
setTimeout
(
function
()
{
...
@@ -464,24 +396,24 @@ export default {
...
@@ -464,24 +396,24 @@ export default {
let
ipRes
=
await
new
Promise
((
resolve
,
reject
)
=>
{
let
ipRes
=
await
new
Promise
((
resolve
,
reject
)
=>
{
getIPs
(
function
(
ip
)
{
getIPs
(
function
(
ip
)
{
if
(
ip
.
match
(
/^
(
192
\.
168
\.
|169
\.
254
\.
|10
\.
|172
\.(
1
[
6-9
]
|2
\d
|3
[
01
]))
/
))
{
if
(
ip
.
match
(
/^
(
192
\.
168
\.
|169
\.
254
\.
|10
\.
|172
\.(
1
[
6-9
]
|2
\d
|3
[
01
]))
/
))
{
resolve
(
ip
)
resolve
(
ip
)
;
return
ip
return
ip
;
//内网ip
//内网ip
}
else
{
}
else
{
//外网ip
//外网ip
resolve
(
ip
)
resolve
(
ip
)
;
return
ip
return
ip
;
}
}
});
});
})
})
;
/******************* */
/******************* */
// this.ip = ipRes
// this.ip = ipRes
// console.log(this.ip);
// console.log(this.ip);
localStorage
.
setItem
(
"userIP"
,
ipRes
);
//存入 参数: 1.调用的值 2.所要存入的数据
localStorage
.
setItem
(
"userIP"
,
ipRes
);
//存入 参数: 1.调用的值 2.所要存入的数据
console
.
log
(
localStorage
.
getItem
(
"userIP"
));
//输出
console
.
log
(
localStorage
.
getItem
(
"userIP"
));
//输出
console
.
log
(
"store登录状态:"
+
this
.
$store
.
state
.
tm
.
tmType
);
console
.
log
(
"store登录状态:"
+
this
.
$store
.
state
.
tm
.
tmType
);
},
},
created
()
{
created
()
{
sessionStorage
.
setItem
(
"crumbs"
,
utils
.
Encrypt
(
"[]"
));
sessionStorage
.
setItem
(
"crumbs"
,
utils
.
Encrypt
(
"[]"
));
this
.
userInfo
=
JSON
.
parse
(
localStorage
.
getItem
(
"userInfo"
));
this
.
userInfo
=
JSON
.
parse
(
localStorage
.
getItem
(
"userInfo"
));
console
.
log
(
this
.
userInfo
);
console
.
log
(
this
.
userInfo
);
...
@@ -489,7 +421,7 @@ export default {
...
@@ -489,7 +421,7 @@ export default {
this
.
getHomeNum
();
this
.
getHomeNum
();
},
},
computed
:
{
computed
:
{
roleArr
()
{
roleArr
()
{
return
this
.
$store
.
state
.
layout
.
Menu
;
return
this
.
$store
.
state
.
layout
.
Menu
;
},
},
},
},
...
@@ -922,6 +854,20 @@ export default {
...
@@ -922,6 +854,20 @@ export default {
max-height
:
calc
(
100%
-
30px
);
max-height
:
calc
(
100%
-
30px
);
max-width
:
calc
(
100%
-
30px
);
max-width
:
calc
(
100%
-
30px
);
}
}
.zhanshi
{
filter
:
blur
(
2px
);
//
display
:
none
;
}
.shadow
{
z-index
:
999
;
position
:
fixed
;
left
:
0
;
top
:
0
;
width
:
100%
;
height
:
100%
;
background
:
rgba
(
$
color
:
#fff
,
$
alpha
:
0.65
);
}
.exitDialog
{
.exitDialog
{
/deep/.el-dialog__header
{
/deep/.el-dialog__header
{
padding
:
15px
24px
13px
;
padding
:
15px
24px
13px
;
...
...
src/views/SystemManage/UserManage.vue
View file @
34a658b7
...
@@ -674,7 +674,7 @@ export default {
...
@@ -674,7 +674,7 @@ export default {
children
:
"childCodeDwXz"
,
children
:
"childCodeDwXz"
,
checkStrictly
:
true
,
checkStrictly
:
true
,
emitPath
:
false
,
emitPath
:
false
,
},
},
// 新增对象
// 新增对象
addFormParams
:
{
addFormParams
:
{
idCard
:
""
,
idCard
:
""
,
...
...
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