Skip to content
Projects
Groups
Snippets
Help
Loading...
Help
Submit feedback
Contribute to GitLab
Sign in
Toggle navigation
C
confucius
Project
Project
Details
Activity
Releases
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
罗超
confucius
Commits
9067d15c
Commit
9067d15c
authored
Feb 01, 2021
by
zhengke
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
修改
parent
bb8347b4
Hide whitespace changes
Inline
Side-by-side
Showing
7 changed files
with
577 additions
and
18 deletions
+577
-18
App.vue
src/App.vue
+1
-1
index.js
src/api/okr/index.js
+49
-0
remind-form.vue
src/components/okr/remind-form.vue
+51
-16
remindtime-form.vue
src/components/okr/remindtime-form.vue
+170
-0
score-form.vue
src/components/okr/score-form.vue
+164
-0
scoreset-form.vue
src/components/okr/scoreset-form.vue
+138
-0
okrmanage.vue
src/pages/system/okrmanage.vue
+4
-1
No files found.
src/App.vue
View file @
9067d15c
...
...
@@ -12,7 +12,7 @@ export default {
<
style
>
@import
url('~assets/css/font.css')
;
@import
url('//at.alicdn.com/t/font_2077629_
1iixntypnch
.css')
;
@import
url('//at.alicdn.com/t/font_2077629_
49k0c3mis3b
.css')
;
html
,
body
,
...
...
src/api/okr/index.js
View file @
9067d15c
...
...
@@ -84,6 +84,55 @@ export function GetOKRRemindList(data) {
})
}
/**
* 修改okr提醒启用
* @param {JSON参数} data
*/
export
function
SetOKRRemindEnable
(
data
)
{
return
request
({
url
:
'/OKRPeriod/SetOKRRemindEnable'
,
method
:
'post'
,
data
})
}
/**
* 设置okr提醒
* @param {JSON参数} data
*/
export
function
SetOKRRemindInfo
(
data
)
{
return
request
({
url
:
'/OKRPeriod/SetOKRRemindInfo'
,
method
:
'post'
,
data
})
}
/**
* 获取okr分数规则列表
* @param {JSON参数} data
*/
export
function
GetOKRScoreConfigPageList
(
data
)
{
return
request
({
url
:
'/OKRPeriod/GetOKRScoreConfigPageList'
,
method
:
'post'
,
data
})
}
/**
* 设置分数规则
* @param {JSON参数} data
*/
export
function
SetOKRScoreConfigInfo
(
data
)
{
return
request
({
url
:
'/OKRPeriod/SetOKRScoreConfigInfo'
,
method
:
'post'
,
data
})
}
...
...
src/components/okr/remind-form.vue
View file @
9067d15c
...
...
@@ -65,12 +65,12 @@
<div
class=
"Notificat_Inner"
>
填写 OKR(仅未填写的)
</div>
<div
class=
"Notify_innerTwo"
v-if=
"dataList&&dataList.length>0"
>
提醒时间:周期开始后第
{{
dataList
[
0
].
Days
}}
个工作日
{{
dataList
[
0
].
Time
}}
<span
class=
"Notify_Edit"
>
修改
</span>
<span
class=
"Notify_Edit"
@
click=
"updateTime(dataList[0])"
>
修改
</span>
</div>
</div>
<div>
<template
v-if=
"dataList&&dataList.length>0"
>
<q-toggle
size=
"md"
color=
"primary"
v-model=
"dataList[0].Enable"
:false-value=
"2"
:true-value=
"1"
/>
<q-toggle
size=
"md"
color=
"primary"
@
input=
"getEnable(1)"
v-model=
"dataList[0].Enable"
:false-value=
"2"
:true-value=
"1"
/>
</
template
>
</div>
</div>
...
...
@@ -79,12 +79,12 @@
<div
class=
"Notificat_Inner"
>
给 OKR 打分(仅未打分的)
</div>
<div
class=
"Notify_innerTwo"
v-if=
"dataList&&dataList.length>0"
>
提醒时间:周期结束前第 {{dataList[1].Days}} 个工作日 {{dataList[1].Time}}
<span
class=
"Notify_Edit"
>
修改
</span>
<span
class=
"Notify_Edit"
@
click=
"updateTime(dataList[1])"
>
修改
</span>
</div>
</div>
<div>
<
template
v-if=
"dataList&&dataList.length>0"
>
<q-toggle
size=
"md"
color=
"primary"
v-model=
"dataList[1].Enable"
:false-value=
"2"
:true-value=
"1"
/>
<q-toggle
size=
"md"
color=
"primary"
@
input=
"getEnable(2)"
v-model=
"dataList[1].Enable"
:false-value=
"2"
:true-value=
"1"
/>
</
template
>
</div>
</div>
...
...
@@ -98,12 +98,12 @@
<div
class=
"Notificat_Inner"
>
查看下级 OKR 填写情况(仅有下级未填写的)
</div>
<div
class=
"Notify_innerTwo"
v-if=
"dataList&&dataList.length>0"
>
提醒时间:周期开始后第 {{dataList[2].Days}} 个工作日 {{dataList[2].Time}}
<span
class=
"Notify_Edit"
>
修改
</span>
<span
class=
"Notify_Edit"
@
click=
"updateTime(dataList[2])"
>
修改
</span>
</div>
</div>
<div>
<
template
v-if=
"dataList&&dataList.length>0"
>
<q-toggle
size=
"md"
color=
"primary"
v-model=
"dataList[2].Enable"
:false-value=
"2"
:true-value=
"1"
/>
<q-toggle
size=
"md"
color=
"primary"
@
input=
"getEnable(3)"
v-model=
"dataList[2].Enable"
:false-value=
"2"
:true-value=
"1"
/>
</
template
>
</div>
</div>
...
...
@@ -111,38 +111,41 @@
<div
style=
"flex:1"
>
<div
class=
"Notificat_Inner"
>
查看下级 OKR 打分情况(仅有下级未打分的)
</div>
<div
class=
"Notify_innerTwo"
v-if=
"dataList&&dataList.length>0"
>
提醒时间:周期结束前第 {{dataList[3].Days}} 个工作日 {{dataList[
2
].Time}}
<span
class=
"Notify_Edit"
>
修改
</span>
提醒时间:周期结束前第 {{dataList[3].Days}} 个工作日 {{dataList[
3
].Time}}
<span
class=
"Notify_Edit"
@
click=
"updateTime(dataList[3])"
>
修改
</span>
</div>
</div>
<div>
<
template
v-if=
"dataList&&dataList.length>0"
>
<q-toggle
size=
"md"
color=
"primary"
v-model=
"dataList[3].Enable"
:false-value=
"2"
:true-value=
"1"
/>
<q-toggle
size=
"md"
color=
"primary"
@
input=
"getEnable(4)"
v-model=
"dataList[3].Enable"
:false-value=
"2"
:true-value=
"1"
/>
</
template
>
</div>
</div>
</div>
</div>
<
!-- <ruleseteditForm v-if="isShowsetForm" @close="closeruleset" :save-obj="rule
Obj" @success="refreshRule">
</r
uleseteditForm> --
>
<
remindtime-form
v-if=
"isShowsetForm"
@
close=
"closeruleset"
:save-obj=
"set
Obj"
@
success=
"refreshRule"
>
</r
emindtime-form
>
</div>
</div>
</template>
<
script
>
import
{
GetOKRRemindList
GetOKRRemindList
,
SetOKRRemindEnable
}
from
'../../api/okr/index'
;
// import ruleseteditForm from '../../components/okr/rulesetedit
-form';
import
remindtimeForm
from
'../../components/okr/remindtime
-form'
;
export
default
{
meta
:
{
title
:
"提醒设置"
},
//
components: {
// rulesetedit
Form
//
},
components
:
{
remindtime
Form
},
data
()
{
return
{
dataList
:
[],
isShowsetForm
:
false
,
setObj
:{}
}
},
created
()
{},
...
...
@@ -159,6 +162,38 @@
}
})
},
//点击切换
getEnable
(
type
){
let
msg
=
{
Type
:
type
}
SetOKRRemindEnable
(
msg
).
then
(
res
=>
{
if
(
res
.
Code
==
1
)
{
this
.
getList
();
this
.
$q
.
notify
({
icon
:
'iconfont icon-chenggong'
,
color
:
'accent'
,
timeout
:
2000
,
message
:
'修改成功!'
,
position
:
'top'
})
}
})
},
//关闭弹窗
closeruleset
(){
this
.
isShowsetForm
=
false
;
},
//修改成功回调
refreshRule
(){
this
.
getList
();
},
//修改
updateTime
(
obj
){
this
.
setObj
=
obj
;
this
.
isShowsetForm
=
true
;
console
.
log
(
obj
,
'objj'
);
}
}
}
...
...
src/components/okr/remindtime-form.vue
0 → 100644
View file @
9067d15c
<
style
>
.w400
{
width
:
400px
!important
;
}
/* .el-select-dropdown__item{
min-width: 400px;
} */
.el-picker-panel
{
z-index
:
9999
!important
;
}
</
style
>
<
template
>
<q-dialog
v-model=
"persistent"
persistent
content-class=
"bg-grey-1"
transition-show=
"scale"
transition-hide=
"scale"
>
<q-card
style=
"max-width:600px;width:600px;"
class=
"remind_Dialog"
>
<q-card-section>
<div
class=
"text-h6"
>
修改提醒时间
</div>
</q-card-section>
<q-card-section
class=
"q-pt-none scroll"
style=
"max-height: 70vh"
>
<div
class=
"row wrap"
>
<div
class=
"col-12"
>
周期结束前第
<q-select
class=
"q-pb-lg"
style=
"width:400px;display:inline-block;"
multiple
filled
stack-label
use-input
use-chips
option-value=
"Id"
option-label=
"Name"
v-model=
"daysOne"
ref=
"ManagerId"
:options=
"optionList"
:dense=
"false"
emit-value
map-options
>
<template
v-slot:no-option
>
<q-item>
<q-item-section
class=
"text-grey"
>
未找到相关数据
</q-item-section>
</q-item>
</
template
>
</q-select>
个工作日
</div>
</div>
<div
class=
"row wrap"
>
<div
class=
"col-12"
style=
"margin-bottom:50px;"
>
<span
style=
"margin:0 5px 0 55px;"
>
时间
</span>
<el-time-select
v-model=
"msg.Time"
class=
"w400"
:picker-options=
"{
start: '00:00',
step: '00:15',
end: '23:59'
}"
placeholder=
"选择时间"
>
</el-time-select>
</div>
</div>
</q-card-section>
<q-card-actions
align=
"right"
class=
"bg-white"
>
<q-btn
label=
"取消"
flat
color=
"grey-10"
style=
"font-weight:400 !important"
@
click=
"closeRuleForm"
/>
<q-btn
label=
"保存"
color=
"accent q-px-md"
style=
"font-weight:400 !important"
@
click=
"saveRule"
/>
</q-card-actions>
</q-card>
</q-dialog>
</template>
<
script
>
import
{
SetOKRRemindInfo
}
from
'../../api/okr/index'
export
default
{
props
:
{
saveObj
:
{
type
:
Object
,
default
:
null
,
}
},
data
()
{
return
{
persistent
:
true
,
msg
:
{
Id
:
0
,
Days
:
''
,
Time
:
''
,
Type
:
1
},
optionList
:
[{
Id
:
1
,
Name
:
1
},
{
Id
:
2
,
Name
:
2
},
{
Id
:
3
,
Name
:
3
},
{
Id
:
4
,
Name
:
4
},
{
Id
:
5
,
Name
:
5
},
{
Id
:
6
,
Name
:
6
},
{
Id
:
7
,
Name
:
7
},
{
Id
:
8
,
Name
:
8
},
{
Id
:
9
,
Name
:
9
},
{
Id
:
10
,
Name
:
10
},
{
Id
:
11
,
Name
:
11
},
{
Id
:
12
,
Name
:
12
},
{
Id
:
13
,
Name
:
13
},
{
Id
:
14
,
Name
:
14
},
{
Id
:
15
,
Name
:
15
},
{
Id
:
16
,
Name
:
16
},
{
Id
:
17
,
Name
:
17
},
{
Id
:
18
,
Name
:
18
},
{
Id
:
19
,
Name
:
19
},
{
Id
:
20
,
Name
:
20
}],
daysOne
:
[],
}
},
computed
:
{},
mounted
()
{
console
.
log
(
this
.
saveObj
,
'saveObj'
);
this
.
msg
.
Id
=
this
.
saveObj
.
Id
;
this
.
daysOne
=
this
.
saveObj
.
Days
.
split
(
','
);
this
.
msg
.
Time
=
this
.
saveObj
.
Time
;
this
.
msg
.
Type
=
this
.
saveObj
.
Type
;
},
methods
:
{
//取消
closeRuleForm
()
{
this
.
$emit
(
'close'
);
this
.
persistent
=
false
},
//保存信息
saveRule
()
{
if
(
this
.
daysOne
&&
this
.
daysOne
.
length
>
0
){
this
.
msg
.
Days
=
this
.
daysOne
.
join
(
','
);
}
SetOKRRemindInfo
(
this
.
msg
).
then
(
res
=>
{
if
(
res
.
Code
==
1
)
{
this
.
$emit
(
'success'
);
this
.
closeRuleForm
();
}
})
},
},
}
</
script
>
src/components/okr/score-form.vue
0 → 100644
View file @
9067d15c
<
style
>
.scoreRemind
{
display
:
flex
;
justify-content
:
space-between
;
align-items
:
center
;
}
.scoreTitle
{
color
:
#F72E52
;
font-size
:
12px
;
}
.rule_list
{
width
:
100%
;
height
:
auto
;
}
.score_Top
{
height
:
30px
;
background-color
:
#EEEEEF
;
font-size
:
12px
;
padding
:
5px
20px
;
}
.score_Tname
{
color
:
#2D2D2D
;
font-weight
:
bold
;
}
.score_IconList
span
{
display
:
inline-block
;
margin-right
:
20px
;
color
:
#2961FE
;
cursor
:
pointer
;
}
.score_IconList
span
i
{
margin-right
:
5px
;
}
.score_IconList
span
:last-child
{
margin-right
:
0
;
}
.rule_InnerList
{
min-height
:
60px
;
padding
:
0
20px
;
border-bottom
:
1px
solid
#F4F4F4
;
}
.rule_Item
{
display
:
inline-block
;
margin
:
10px
30px
10px
0
;
}
.rule_comback
{
width
:
60px
;
height
:
20px
;
background-color
:
#EEEEEF
;
color
:
#2D2D2D
;
text-align
:
center
;
line-height
:
20px
;
margin-top
:
5px
;
font-size
:
12px
;
}
.score_Num
{
display
:
inline-block
;
position
:
relative
;
top
:
-26px
;
}
</
style
>
<
template
>
<div
class=
"scoreSetForm"
>
<div
class=
"scoreRemind"
style=
"margin-bottom:20px;"
>
<div
class=
"scoreTitle"
>
<i
class=
"iconfont icon-tishi"
style=
"position:relative;top:1px;"
></i>
系统按照OKR规则默认采用0-1(0.1,0.2,0.3.....)的分数制度,若采用新的分数制度,必须满足0-1规则。否则,无法保存规则信息
</div>
<div>
<q-btn
color=
"accent"
size=
"sm"
class=
"q-mr-md"
icon=
"add"
label=
"新增分数规则"
@
click=
"addScoreRull(null)"
/>
</div>
</div>
<div
class=
"rule_list"
v-for=
"(item,index) in dataList"
:key=
"index"
>
<div
class=
"scoreRemind score_Top"
>
<div
class=
"score_Tname"
>
{{
item
.
Name
}}
</div>
<div
class=
"score_IconList"
>
<span><i
class=
"iconfont icon-dagou"
></i>
默认
</span>
<span><i
class=
"iconfont icon-edit"
@
click=
"addScoreRull(item)"
></i>
编辑
</span>
<span><i
class=
"iconfont icon-shanchu"
></i>
删除
</span>
</div>
</div>
<div
class=
"rule_InnerList"
>
<div
class=
"rule_Item"
v-for=
"(subItem,subIndex) in item.DetailList"
:key=
"subIndex"
>
<div
class=
"score_Num"
:style=
"
{'color':subItem.Color}">分数
{{
subIndex
+
1
}}
:
</div>
<div
style=
"display:inline-block;"
>
<div
:style=
"
{'color':subItem.Color}">
{{
subItem
.
Name
}}
</div>
<div
class=
"rule_comback"
>
{{
subItem
.
ScoreMin
}}
-
{{
subItem
.
ScoreMax
}}
</div>
</div>
</div>
</div>
</div>
<scoreset-form
v-if=
"isShowScoreSet"
:save-obj=
"scoreObj"
@
close=
"closeScoreForm"
@
success=
"refreshPage"
>
</scoreset-form>
</div>
</
template
>
<
script
>
import
{
GetOKRScoreConfigPageList
}
from
'../../api/okr/index'
;
import
scoresetForm
from
'../../components/okr/scoreset-form'
;
export
default
{
meta
:
{
title
:
""
},
components
:
{
scoresetForm
},
data
()
{
return
{
msg
:
{
PageIndex
:
1
,
PageSize
:
12
,
Name
:
''
},
isShowScoreSet
:
false
,
scoreObj
:
{},
dataList
:
[],
}
},
mounted
()
{
this
.
getList
();
},
methods
:
{
//获取okr配置信息
getList
()
{
GetOKRScoreConfigPageList
(
this
.
msg
).
then
(
res
=>
{
console
.
log
(
res
,
'数据'
);
if
(
res
.
Code
==
1
)
{
this
.
dataList
=
res
.
Data
.
PageData
;
}
})
},
//新增分数规则
addScoreRull
(
obj
)
{
if
(
obj
){
this
.
scoreObj
=
obj
;
}
else
{
this
.
scoreObj
=
null
;
}
this
.
isShowScoreSet
=
true
;
},
// //关闭流程设置
closeScoreForm
()
{
this
.
isShowScoreSet
=
false
;
},
refreshPage
()
{
this
.
getList
();
},
}
}
</
script
>
src/components/okr/scoreset-form.vue
0 → 100644
View file @
9067d15c
<
style
>
.scoreForm_List
{
width
:
100%
;
min-height
:
80px
;
background-color
:
#F7F7F7
;
padding
:
15px
;
}
.score_MyNum
{
margin-bottom
:
10px
;
}
.addScoreBtn
{
width
:
100%
;
height
:
40px
;
border
:
1px
dashed
#2961FE
;
text-align
:
center
;
line-height
:
40px
;
margin-top
:
20px
;
color
:
#2961FE
;
cursor
:
pointer
;
}
</
style
>
<
template
>
<q-dialog
v-model=
"persistent"
persistent
content-class=
"bg-grey-1"
transition-show=
"scale"
transition-hide=
"scale"
>
<q-card
style=
"width: 700px;max-width:700px;"
>
<q-card-section>
<div
class=
"text-h6"
>
{{
(
saveObj
&&
saveObj
.
Id
>
0
)?
"修改分数规则"
:
"新增分数规则"
}}
</div>
</q-card-section>
<q-card-section
class=
"q-pt-none scroll"
style=
"max-height: 70vh"
>
<div
class=
"row wrap"
>
<div
class=
"col-12"
>
<q-input
filled
stack-label
maxlength=
"20"
:dense=
"false"
v-model=
"msg.Name"
ref=
"Name"
class=
"col-12 q-pb-lg"
label=
"规则名称"
:rules=
"[val => !!val || '请填写规则名称']"
/>
</div>
<div
class=
"col-12"
>
<div
class=
"scoreForm_List"
v-for=
"(item,index) in msg.DetailList"
:key=
"index"
>
<div
class=
"score_MyNum"
>
分数1:
</div>
<div>
<el-input
style=
"width:300px;display:inline-block;"
v-model=
"item.Name"
placeholder=
"分数名称"
></el-input>
<el-input
style=
"width:100px;display:inline-block;margin-left:20px;"
v-model=
"item.ScoreMin"
placeholder=
"最小分数"
></el-input>
<el-input
style=
"width:100px;display:inline-block;margin-left:20px;"
v-model=
"item.ScoreMax"
placeholder=
"最大分数"
></el-input>
<el-select
:ref=
"'colorSelect'+index"
placeholder=
""
v-model=
"item.Color"
style=
"width: 70px;display:inline-block;margin-left:20px;"
@
change=
"handleChange(item.Color,index)"
>
<el-option
v-for=
"item in colorList"
:key=
"item"
label=
" "
:value=
"item"
v-html=
"'
<div
style=
background-color:'+
item
+';
width:
'
+'
25px
'+';
height:
'+'
25px
'+';
border-radius:
'+'
50
%'+'
></div>
'">
</el-option>
</el-select>
</div>
</div>
</div>
<div
class=
"addScoreBtn"
>
+新增分数
</div>
</div>
</q-card-section>
<q-card-actions
align=
"right"
class=
"bg-white"
>
<q-btn
label=
"取消"
flat
color=
"grey-10"
style=
"font-weight:400 !important"
@
click=
"closeScoreForm"
/>
<q-btn
label=
"保存"
color=
"accent q-px-md"
style=
"font-weight:400 !important"
@
click=
"saveScore"
/>
</q-card-actions>
</q-card>
</q-dialog>
</
template
>
<
script
>
import
{
SetOKRScoreConfigInfo
}
from
'../../api/okr/index'
export
default
{
props
:
{
saveObj
:
{
type
:
Object
,
default
:
null
}
},
data
()
{
return
{
msg
:{
Id
:
0
,
Name
:
''
,
//规则名称
DetailList
:[{
Name
:
''
,
//分数名称
ScoreMin
:
''
,
//最小分数
ScoreMax
:
''
,
//最大分数
Color
:
''
//颜色
}],
},
myColor
:
''
,
colorList
:[
"#FFC0CB"
,
"#DB7093"
,
"#FF1493"
,
"#DC143C"
],
persistent
:
true
}
},
computed
:
{},
created
()
{
// if (this.color && this.color.length > 0) {
// this.myColor = this.color;
// this.setSelectColor(this.color)
// }
},
mounted
()
{
console
.
log
(
this
.
saveObj
,
'saveObj'
);
},
methods
:
{
//设置颜色选择框中颜色
setSelectColor
(
color
,
index
)
{
//通过操作dom节点改变样式
console
.
log
(
color
,
'color'
);
this
.
$nextTick
(()
=>
{
console
.
log
(
this
.
$refs
.
colorSelect0
,
'colorSelect'
);
let
dom
=
this
.
$refs
.
colorSelect0
;
console
.
log
(
dom
,
'domm'
);
if
(
dom
)
{
console
.
log
(
dom
.
$el
,
'eleleleleelele'
);
dom
=
dom
.
$el
.
children
[
0
];
let
inputDom
=
dom
.
querySelectorAll
(
".el-input__inner"
);
let
icon
=
dom
.
querySelectorAll
(
".el-input__icon"
);
inputDom
[
0
].
style
[
"background-color"
]
=
color
;
icon
[
0
].
style
[
"color"
]
=
"black"
;
}
})
},
//关闭天窗
closeScoreForm
(){
this
.
$emit
(
'close'
);
this
.
persistent
=
false
;
},
handleChange
(
val
,
index
)
{
this
.
setSelectColor
(
val
,
index
);
//触发update事件更新父组件绑定值
this
.
$emit
(
'update'
,
val
);
},
//保存
saveScore
(){
}
},
}
</
script
>
src/pages/system/okrmanage.vue
View file @
9067d15c
...
...
@@ -13,12 +13,14 @@
<ruleset-form
v-if=
"tabCheck=='first'"
></ruleset-form>
<baseset-form
v-if=
"tabCheck=='second'"
></baseset-form>
<remind-form
v-if=
"tabCheck=='third'"
></remind-form>
<score-form
v-if=
"tabCheck=='fourth'"
></score-form>
</div>
</
template
>
<
script
>
import
rulesetForm
from
'../../components/okr/ruleset-form'
;
import
basesetForm
from
'../../components/okr/baseset-form'
;
import
remindForm
from
'../../components/okr/remind-form'
;
import
scoreForm
from
'../../components/okr/score-form'
;
export
default
{
meta
:
{
title
:
"OKR设置"
...
...
@@ -26,7 +28,8 @@
components
:
{
rulesetForm
,
basesetForm
,
remindForm
remindForm
,
scoreForm
},
data
()
{
return
{
...
...
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