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
38eb4cb5
Commit
38eb4cb5
authored
Apr 26, 2021
by
zhengke
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
修改
parent
76ee6bb5
Show whitespace changes
Inline
Side-by-side
Showing
2 changed files
with
395 additions
and
109 deletions
+395
-109
lesson-form.vue
src/components/course/lesson-form.vue
+321
-104
record-form.vue
src/components/course/record-form.vue
+74
-5
No files found.
src/components/course/lesson-form.vue
View file @
38eb4cb5
...
...
@@ -118,6 +118,7 @@
margin
:
20px
;
padding-left
:
20px
;
font-size
:
12px
;
color
:
#000
;
}
.lessStuInnerList
{
...
...
@@ -157,21 +158,28 @@
.classQue
.commonLessName
{
color
:
#fff
;
}
.el-select-dropdown
,
.el-picker-panel
{
z-index
:
9999
!important
;
}
.lesson_Form
.el-calendar__header
{
display
:
none
;
}
</
style
>
<
template
>
<div
v-if=
"!isShowSign"
>
<div
class=
"lesson_Form"
>
<div
class=
"calenderHeader"
>
<div>
<el-radio-group
v-model=
"checked
Days
"
size=
"mini"
>
<!--
<el-radio-button
label=
"日"
></el-radio-button>
-->
<el-radio-group
v-model=
"checked
Type
"
size=
"mini"
>
<!--
<el-radio-button
label=
"日"
></el-radio-button>
<el-radio-button
label=
"月"
></el-radio-button>
<!--
<el-radio-button
style=
"margin-left:20px;border-left:1px solid #DCDFE6;"
label=
"今天"
></el-radio-button>
-->
<el-radio-button
style=
"margin-left:20px;border-left:1px solid #DCDFE6;"
label=
"今天"
></el-radio-button>
-->
<el-radio-button
:label=
"1"
>
列表模式
</el-radio-button>
<el-radio-button
:label=
"2"
>
日历模式
</el-radio-button>
</el-radio-group>
</div>
<div>
<q-btn
color=
"accent
q-px-md"
class=
"q-mr-md"
icon=
"add"
size=
"12px
"
label=
"新增日程"
@
click=
"addNew()"
>
<q-btn
color=
"accent
"
size=
"sm"
class=
"q-mr-md"
icon=
"add
"
label=
"新增日程"
@
click=
"addNew()"
>
<q-popup-proxy>
<q-banner
v-if=
"isShowMenu"
>
<div
class=
"calenderDialog"
>
...
...
@@ -222,6 +230,95 @@
</q-btn>
</div>
</div>
<div
style=
"text-align:right;margin:12px 20px 8px 0"
>
<el-date-picker
v-model=
"comMsg.QMonth"
type=
"month"
size=
"small"
value-format=
"yyyy-MM"
@
change=
"getClassPlan()"
placeholder=
"选择月"
>
</el-date-picker>
</div>
<
template
v-if=
"checkedType===1"
>
<q-table
style=
"margin:20px;"
:pagination=
"msg"
no-data-label=
"暂无相关数据"
flat
class=
"sticky-column-table"
separator=
"none"
:data=
"calendarData"
:columns=
"columns"
row-key=
"name"
>
<template
v-slot:body-cell-TimeList=
"props"
>
<q-td
auto-width
:props=
"props"
>
<div
v-for=
"(item,index) in props.row.TimeList"
>
{{
index
+
1
}}
节课
{{
item
.
StartTime
}}
-
{{
item
.
EndTime
}}
</div>
</q-td>
</
template
>
<
template
v-slot:body-cell-optioned=
"props"
>
<q-td
:props=
"props"
style=
"width:15%;"
>
<q-btn
flat
size=
"xs"
icon=
"edit"
color=
"accent"
style=
"font-weight:400"
label=
"编辑"
@
click=
"getInfo(props.row)"
>
<q-popup-proxy>
<q-banner
v-if=
"isShowEdit"
>
<div
class=
"calenderDialog"
>
<div
style=
"margin:10px 0 15px 0;"
>
{{
props
.
row
.
ClassDateStr
}}
课程安排
</div>
<q-select
filled
stack-label
option-value=
"TId"
option-label=
"TeacherName"
v-model=
"addMsg.TeacherId"
ref=
"Teacher_Id"
:options=
"TeacherList"
label=
"关联教师"
:dense=
"false"
class=
"col-6 q-pb-lg"
emit-value
map-options
/>
<q-input
filled
v-model=
"addMsg.ClassDate"
class=
"col-6 q-pb-lg"
mask=
"date"
label=
"上课时间"
>
<template
v-slot:append
>
<q-icon
name=
"event"
class=
"cursor-pointer"
>
<q-popup-proxy
ref=
"qDateProxy3"
transition-show=
"scale"
transition-hide=
"scale"
>
<q-date
v-model=
"addMsg.ClassDate"
@
input=
' () => $refs.qDateProxy3[0].hide()'
/>
</q-popup-proxy>
</q-icon>
</
template
>
</q-input>
<q-toggle
size=
"md"
label=
"更多设置"
left-label
color=
"primary"
:false-value=
"0"
:true-value=
"1"
v-model=
"isSetMoreTwo"
/>
<
template
v-if=
"isSetMoreTwo==1"
>
<q-select
filled
stack-label
option-value=
"RoomId"
option-label=
"RoomName"
v-model=
"addMsg.ClassRoomId"
ref=
"ClassRoomId"
:options=
"ClassRoomList"
label=
"关联教室"
:dense=
"false"
class=
"col-6 q-pb-lg"
emit-value
map-options
/>
<div
style=
"display:flex;justify-content:flex-end;margin-bottom:20px;"
>
<q-btn
@
click=
"addStep()"
size=
"10px"
round
color=
"primary"
icon=
"iconfont icon-img_haha"
/>
</div>
<div
class=
"row wrap"
style=
"position:relative;"
v-for=
"(subItem,subIndex) in addMsg.PlanTimeList"
>
<div
class=
"col-6"
>
<q-input
filled
stack-label
maxlength=
"20"
:dense=
"false"
v-model=
"subItem.StartTime"
ref=
"StartTime"
class=
"col-6 q-pr-lg q-pb-lg"
label=
""
:rules=
"[val => !!val || '请填写开始时间']"
/>
</div>
<div
class=
"col-6"
>
<q-input
filled
stack-label
maxlength=
"20"
:dense=
"false"
v-model=
"subItem.EndTime"
ref=
"EndTime"
class=
"col-6 q-pr-lg q-pb-lg"
label=
""
:rules=
"[val => !!val || '请填写开始时间']"
/>
</div>
<div
class=
"delBtnStyle"
>
<i
@
click=
"delStep(subIndex)"
class=
"iconfont icon-guanbi"
></i>
</div>
</div>
</
template
>
<q-card-actions
align=
"right"
class=
"bg-white"
>
<q-btn
label=
"取消"
flat
color=
"grey-10"
@
click=
"isShowEdit=false"
style=
"font-weight:400 !important"
/>
<q-btn
label=
"确认"
color=
"accent q-px-md"
style=
"font-weight:400 !important"
@
click=
"saveSteps"
/>
</q-card-actions>
</div>
</q-banner>
</q-popup-proxy>
</q-btn>
<q-btn
flat
size=
"xs"
icon=
"iconfont icon-View"
color=
"accent"
style=
"font-weight:400"
label=
"查看"
@
click
.
stop=
"getClicked(props.row)"
></q-btn>
<q-btn
flat
size=
"xs"
icon=
"edit"
color=
"negative"
style=
"font-weight:400"
label=
"删除"
@
click
.
stop=
"delInfo(props.row)"
></q-btn>
</q-td>
</template>
<
template
v-slot:bottom
>
</
template
>
</q-table>
</template>
<
template
v-else
>
<el-calendar
v-model=
"value"
id=
"calendar"
>
<!-- 这里使用的是 2.5 slot 语法,对于新项目请使用 2.6 slot 语法-->
<template
slot=
"dateCell"
slot-scope=
"
{date, data}">
...
...
@@ -309,6 +406,7 @@
</div>
</template>
</el-calendar>
</template>
</div>
</div>
<div
v-else
>
...
...
@@ -316,7 +414,7 @@
<div
class=
"Show_SignBack"
>
<span
@
click=
"isShowSign=false"
style=
"cursor:pointer;"
><i
class=
"iconfont icon-zuo1"
></i>
返回
</span>
</div>
<div
class=
"StudentInfo_List"
>
<div
class=
"StudentInfo_List"
style=
"color:#000;"
>
<div>
<div>
授课老师
</div>
<div>
{{dayObj.TeacherName}}
</div>
...
...
@@ -335,8 +433,37 @@
</div>
</div>
<div
class=
"lessStudentList"
>
<div
class=
"lessStuTitle"
>
学生签到情况
</div>
<div
class=
"lessStuInnerList"
>
<div
class=
"lessStuTitle"
>
学生签到情况
</div>
<q-table
:pagination=
"msg"
no-data-label=
"暂无相关数据"
flat
class=
"sticky-column-table"
separator=
"none"
hide-bottom
:data=
"dayObj.GuestList"
:columns=
"columns2"
>
<
template
v-slot:body-cell-GuestName=
"props"
>
<q-td
auto-width
:props=
"props"
style=
"width:25%;"
>
<div
style=
"display:flex;align-items:center;"
>
<q-avatar
size=
"sm"
style=
"margin:0 5px 5px 0"
v-if=
"props.row.UserIcon"
>
<img
:src=
"props.row.UserIcon"
/>
</q-avatar>
<q-avatar
size=
"sm"
color=
"teal-10"
style=
"margin:5px 0 5px 0"
text-color=
"white"
v-if=
"!props.row.UserIcon"
>
{{
props
.
row
.
GuestName
[
0
]
}}
</q-avatar><span
style=
"margin-left:5px;"
>
{{
props
.
row
.
GuestName
}}
</span>
</div>
</q-td>
</
template
>
<
template
v-slot:body-cell-IsCheck=
"props"
>
<q-td
auto-width
:props=
"props"
>
<el-select
v-model=
"props.row.IsCheck"
style=
"width:80px;"
size=
"small"
placeholder=
"小时"
>
<el-option
label=
"出勤"
:value=
"0"
></el-option>
<el-option
label=
"缺勤"
:value=
"1"
></el-option>
</el-select>
</q-td>
</
template
>
<
template
v-slot:body-cell-optioned=
"props"
>
<q-td
:props=
"props"
style=
"width:15%;"
>
<el-input
v-model=
"props.row.StudyNum"
size=
"small"
@
keyup
.
native=
"checkInteger(props.row,'StudyNum')"
></el-input>
</q-td>
</
template
>
</q-table>
<div
class=
"lessStuInnerList"
style=
"display:none;"
>
<div
class=
"lessList"
v-for=
"(item,index) in dayObj.GuestList"
:key=
"index"
:class=
"{'classQue':isShowSignBtn&&item.IsCheck==0,'classChu':isShowSignBtn&&
item.IsCheck==1}"
@
click=
"changeStatus(item)"
>
<q-avatar
size=
"md"
style=
"margin:12px 0 5px 0"
v-if=
"item.UserIcon"
>
...
...
@@ -357,7 +484,7 @@
</div>
</div>
<!--&&isSigned-->
<q-card-actions
align=
"right"
class=
"bg-white"
v-if=
"isShowSignBtn"
style=
"margin
-right:45px
;"
>
<q-card-actions
align=
"right"
class=
"bg-white"
v-if=
"isShowSignBtn"
style=
"margin
:20px 10px 100px 0
;"
>
<q-btn
label=
"取消"
flat
color=
"grey-10"
style=
"font-weight:400 !important"
@
click=
"isShowSign=false"
/>
<q-btn
label=
"确认"
color=
"accent q-px-md"
style=
"font-weight:400 !important"
@
click=
"saveSign()"
/>
</q-card-actions>
...
...
@@ -392,6 +519,7 @@
calendarData
:
[],
value
:
new
Date
(),
checkedDays
:
'月'
,
checkedType
:
1
,
TeacherList
:
[],
//老师下拉数据
addMsg
:
{
ClassPlanId
:
0
,
...
...
@@ -425,7 +553,76 @@
dayObj
:
{},
isShowSignBtn
:
false
,
//是否显示签到提交按钮
comChecked
:
{},
//点击选中复制
isSigned
:
true
isSigned
:
true
,
columns
:[{
name
:
'RoomName'
,
label
:
'校区名称'
,
field
:
'RoomName'
,
align
:
'left'
,
},{
name
:
'ClassDateStr'
,
label
:
'上课日期'
,
field
:
'ClassDateStr'
,
align
:
'left'
},
{
name
:
'TeacherName'
,
label
:
'老师'
,
field
:
'TeacherName'
,
align
:
'left'
},
{
name
:
'TimeList'
,
label
:
'上课时间'
,
field
:
'TimeList'
,
align
:
'left'
},
{
name
:
'optioned'
,
label
:
'操作'
,
field
:
'QuestionId'
,
align
:
'center'
}
],
msg
:{
rowsPerPage
:
100
},
comMsg
:{
ClassId
:
0
,
QMonth
:
''
},
columns2
:
[{
name
:
'GuestName'
,
label
:
'学生姓名'
,
field
:
'GuestName'
,
align
:
'left'
},
{
name
:
'SexStr'
,
label
:
'性别'
,
field
:
'SexStr'
,
align
:
'left'
,
},
{
name
:
'Mobile'
,
label
:
'电话'
,
field
:
'Mobile'
,
align
:
'left'
},
{
name
:
'IsCheck'
,
label
:
'是否出勤'
,
field
:
'IsCheck'
,
align
:
'left'
},
{
name
:
'optioned'
,
label
:
'学习时间'
,
field
:
'QuestionId'
,
align
:
'center'
}
],
}
},
created
()
{
...
...
@@ -435,27 +632,35 @@
}
},
mounted
()
{
this
.
initData
();
//this.initData();
var
d
=
new
Date
();
this
.
comMsg
.
QMonth
=
d
.
getFullYear
()
+
'-'
+
(
d
.
getMonth
()
+
1
);
this
.
GetTeacherList
();
this
.
getClassRoomList
();
this
.
addMsg
.
TeacherId
=
this
.
setingObj
.
Teacher_Id
;
this
.
addMsg
.
ClassDate
=
this
.
setingObj
.
OpenTime
;
this
.
getClassPlan
();
},
methods
:
{
initData
()
{
this
.
$nextTick
(()
=>
{
// 点击上个月
let
prevBtn1
=
document
.
querySelector
(
'.el-
calendar__button-group .el-
button-group>button:nth-child(1)'
);
// 点击上个月
、
let
prevBtn1
=
document
.
querySelector
(
'.el-button-group>button:nth-child(1)'
);
prevBtn1
.
addEventListener
(
'click'
,
()
=>
{
var
d
=
new
Date
(
this
.
value
);
var
datetime
=
d
.
getFullYear
()
+
'-'
+
(
d
.
getMonth
()
+
1
);
this
.
getClassPlan
(
datetime
);
})
// 点击今天
let
prevBtn2
=
document
.
querySelector
(
'.el-
calendar__button-group .el-
button-group>button:nth-child(2)'
);
let
prevBtn2
=
document
.
querySelector
(
'.el-button-group>button:nth-child(2)'
);
prevBtn2
.
addEventListener
(
'click'
,
()
=>
{
var
d
=
new
Date
(
this
.
value
);
var
datetime
=
d
.
getFullYear
()
+
'-'
+
(
d
.
getMonth
()
+
1
);
this
.
getClassPlan
(
datetime
);
})
// 点击下个月
let
prevBtn3
=
document
.
querySelector
(
'.el-
calendar__button-group .el-
button-group>button:nth-child(3)'
);
let
prevBtn3
=
document
.
querySelector
(
'.el-button-group>button:nth-child(3)'
);
prevBtn3
.
addEventListener
(
'click'
,
()
=>
{
var
d
=
new
Date
(
this
.
value
);
var
datetime
=
d
.
getFullYear
()
+
'-'
+
(
d
.
getMonth
()
+
1
);
...
...
@@ -479,14 +684,13 @@
}
},
//获取班级上课计划列表
getClassPlan
(
datetime
)
{
var
msg
=
{
ClassId
:
this
.
setingObj
.
ClassId
,
QMonth
:
datetime
};
quertClassPlan
(
msg
).
then
(
res
=>
{
getClassPlan
()
{
this
.
comMsg
.
ClassId
=
this
.
setingObj
.
ClassId
;
quertClassPlan
(
this
.
comMsg
).
then
(
res
=>
{
if
(
res
.
Code
==
1
)
{
this
.
calendarData
=
res
.
Data
;
this
.
value
=
this
.
comMsg
.
QMonth
;
this
.
$forceUpdate
();
}
})
},
...
...
@@ -509,6 +713,19 @@
//点击新增
addNew
()
{
this
.
isShowMenu
=
true
;
var
d
=
new
Date
();
var
seperator1
=
"-"
;
var
year
=
d
.
getFullYear
();
var
month
=
d
.
getMonth
()
+
1
;
var
strDate
=
d
.
getDate
();
if
(
month
>=
1
&&
month
<=
9
)
{
month
=
"0"
+
month
;
}
if
(
strDate
>=
0
&&
strDate
<=
9
)
{
strDate
=
"0"
+
strDate
;
}
var
currentdate
=
year
+
seperator1
+
month
+
seperator1
+
strDate
;
this
.
addMsg
.
ClassDate
=
currentdate
;
this
.
addMsg
.
ClassPlanId
=
0
;
this
.
addMsg
.
PlanTimeList
=
[{
ClassTimeId
:
0
,
...
...
@@ -537,7 +754,7 @@
this
.
isShowEdit
=
false
;
var
d
=
new
Date
(
this
.
value
);
var
datetime
=
d
.
getFullYear
()
+
'-'
+
(
d
.
getMonth
()
+
1
);
this
.
getClassPlan
(
datetime
);
this
.
getClassPlan
();
}
})
},
...
...
@@ -555,7 +772,7 @@
//日历点击删除
delInfo
(
item
)
{
this
.
$q
.
dialog
({
title
:
"删除课程"
,
title
:
"
确定
删除课程"
,
message
:
''
,
cancel
:
{
label
:
"取消"
,
...
...
@@ -641,7 +858,8 @@
School_Id
:
this
.
setingObj
.
School_Id
,
TeacherId
:
this
.
comChecked
.
TeacherId
,
OrderGuestId
:
x
.
Id
,
CheckStatus
:
x
.
IsCheck
CheckStatus
:
x
.
IsCheck
,
StudyNum
:
x
.
StudyNum
}
signMsg
.
push
(
obj
);
})
...
...
@@ -655,7 +873,6 @@
watch
:
{
setingObj
:
function
(
val
,
oldval
)
{
this
.
addMsg
.
ClassId
=
val
.
ClassId
;
this
.
initData
();
}
}
}
...
...
src/components/course/record-form.vue
View file @
38eb4cb5
...
...
@@ -79,15 +79,46 @@
<
template
>
<div
class=
"page-body"
>
<div
class=
"page-content recordForm"
>
<div
class=
"row wrap"
style=
"display:flex;justify-content:flex-end"
>
<div
class=
"row wrap"
style=
"display:flex;justify-content:space-between;align-items:center;margin-bottom:16px;"
>
<div
class=
"col-3"
>
<el-radio-group
v-model=
"checkType"
size=
"mini"
>
<el-radio-button
:label=
"1"
>
列表模式
</el-radio-button>
<el-radio-button
:label=
"2"
>
时间轴模式
</el-radio-button>
</el-radio-group>
</div>
<div
class=
"col-3"
>
<q-select
filled
stack-label
option-value=
"TId"
@
input=
"changeRecord()"
option-label=
"TeacherName"
v-model=
"TeacherId"
ref=
"Teacher_Id"
:options=
"TeacherList"
label=
"关联教师"
:dense=
"false"
class=
"col-6
q-pr-lg q-pb-lg
"
emit-value
map-options
/>
class=
"col-6"
emit-value
map-options
/>
</div>
</div>
<div>
<div
class=
"col-10"
style=
"margin:20px 0 60px 0;display:flex;"
<template
v-if=
"checkType==1"
>
<q-table
:pagination=
"msg"
no-data-label=
"暂无相关数据"
flat
class=
"sticky-column-table"
separator=
"none"
:data=
"dataList.resultList"
:columns=
"columns"
>
<template
v-slot:body-cell-YearStr=
"props"
>
<q-td
auto-width
:props=
"props"
style=
"width:25%"
>
{{
props
.
row
.
YearStr
}}
-
{{
props
.
row
.
MonthStr
}}
-
{{
props
.
row
.
DayStr
}}
</q-td>
</
template
>
<
template
v-slot:body-cell-CheckNum=
"props"
>
<q-td
auto-width
:props=
"props"
style=
"width:25%"
>
<span
style=
"color:green;"
>
{{
props
.
row
.
CheckNum
}}
</span>
</q-td>
</
template
>
<
template
v-slot:body-cell-NoCheckNum=
"props"
>
<q-td
auto-width
:props=
"props"
style=
"width:25%"
>
<span
style=
"color:red;"
>
{{
props
.
row
.
NoCheckNum
}}
</span>
</q-td>
</
template
>
<
template
v-slot:bottom
>
<q-pagination
class=
"full-width justify-end"
v-model=
"msg.PageIndex"
color=
"primary"
:max=
"pageCount"
:input=
"true"
@
input=
"changePage"
/>
</
template
>
</q-table>
</template>
<
template
v-else
>
<div
class=
"col-10"
style=
"margin-bottom:20px;display:flex;"
v-if=
"dataList.resultList&&dataList.resultList.length>0"
>
<div
class=
"col-4"
id=
"timeleft"
>
<div
v-for=
"item in dataList.resultList"
>
...
...
@@ -109,6 +140,10 @@
</div>
</div>
</div>
<q-pagination
class=
"full-width justify-end"
style=
"margin-bottom:80px;padding-right:43px;"
v-model=
"msg.PageIndex"
color=
"primary"
:max=
"pageCount"
:input=
"true"
@
input=
"changePage"
/>
</
template
>
</div>
</div>
</div>
...
...
@@ -135,13 +170,41 @@
msg
:
{
TeacherId
:
0
,
PageIndex
:
1
,
PageSize
:
12
,
PageSize
:
10
,
rowsPerPage
:
10
,
School_Id
:
0
,
ClassId
:
0
},
TeacherId
:
0
,
dataList
:
{},
TeacherList
:
[],
//关联老师下拉
pageCount
:
0
,
columns
:
[{
name
:
'TeacherName'
,
label
:
'教师'
,
field
:
'TeacherName'
,
align
:
'left'
},
{
name
:
'YearStr'
,
label
:
'日期'
,
field
:
'YearStr'
,
align
:
'left'
,
},
{
name
:
'CheckNum'
,
label
:
'签到数'
,
field
:
'CheckNum'
,
align
:
'left'
},
{
name
:
'NoCheckNum'
,
label
:
'缺勤数'
,
field
:
'NoCheckNum'
,
align
:
'left'
}
],
checkType
:
1
,
//默认列表模式
}
},
created
()
{
...
...
@@ -160,6 +223,7 @@
GetClassPlanLogPageList
(
this
.
msg
).
then
(
res
=>
{
if
(
res
.
Code
==
1
)
{
this
.
dataList
=
res
.
Data
.
PageData
;
this
.
pageCount
=
res
.
Data
.
PageCount
;
}
})
},
...
...
@@ -170,9 +234,14 @@
GetClassPlanLogPageList
(
this
.
msg
).
then
(
res
=>
{
if
(
res
.
Code
==
1
)
{
this
.
dataList
=
res
.
Data
.
PageData
;
this
.
pageCount
=
res
.
Data
.
PageCount
;
}
})
},
//翻页
changePage
(
val
)
{
this
.
msg
.
pageIndex
=
val
;
this
.
getRecord
()
},
//获取教师下拉
GetTeacherList
()
{
...
...
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