Skip to content
Projects
Groups
Snippets
Help
Loading...
Help
Submit feedback
Contribute to GitLab
Sign in / Register
Toggle navigation
L
loan-manager-customer
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
zhanhai
loan-manager-customer
Commits
80cf9d04
Commit
80cf9d04
authored
Aug 05, 2020
by
feifei
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
天思催记
parent
726a87d6
Changes
7
Expand all
Hide whitespace changes
Inline
Side-by-side
Showing
7 changed files
with
446 additions
and
344 deletions
+446
-344
AddQuestion.vue
src/components/byh/AddQuestion.vue
+79
-99
ByhService.vue
src/components/byh/ByhService.vue
+2
-4
ByhServiceDetail.vue
src/components/byh/ByhServiceDetail.vue
+129
-57
ServiceProblem.vue
src/components/byh/ServiceProblem.vue
+35
-17
UpdateQueDialog.vue
src/components/byh/UpdateQueDialog.vue
+121
-165
enumOpt.js
src/utils/enumOpt.js
+79
-1
version.json
version.json
+1
-1
No files found.
src/components/byh/AddQuestion.vue
View file @
80cf9d04
<
template
>
<el-dialog
class=
"client-data-dialog"
title=
"反馈新增"
:visible
.
sync=
"visible"
:before-close=
"handleClose"
>
<el-dialog
class=
"client-data-dialog"
title=
"
客服
反馈新增"
:visible
.
sync=
"visible"
:before-close=
"handleClose"
>
<el-form
:model=
"ruleForm"
:rules=
"rules"
ref=
"ruleForm"
label-width=
"80px"
class=
"demo-ruleForm"
>
<el-form-item
label=
"
功能点"
prop=
"pointNam
e"
>
<el-select
v-model=
"ruleForm.
pointName"
label=
"功能点
"
placeholder=
"请选择"
style=
"width:80%"
>
<el-form-item
label=
"
反馈类型"
prop=
"feedTyp
e"
>
<el-select
v-model=
"ruleForm.
feedType"
label=
"反馈类型
"
placeholder=
"请选择"
style=
"width:80%"
>
<el-option
v-for=
"item in options
Customer
"
v-for=
"item in options
FeedType
"
:key=
"item.value"
:label=
"item.label"
:value=
"item.value"
>
...
...
@@ -12,25 +12,19 @@
</el-select>
</el-form-item
>
<el-form-item
label=
"问题标题"
prop=
"pointTitle"
>
<el-input
v-model=
"ruleForm.pointTitle"
placeholder=
"请输入内容"
></el-input>
</el-form-item>
<el-form-item
label=
"问题描述"
prop=
"problemDescription"
>
<el-form-item
label=
"反馈描述"
prop=
"feedContent"
>
<el-input
type=
"textarea"
:rows=
"2"
placeholder=
"请输入内容"
v-model=
"ruleForm.
problemDescription
"
style=
"width:80%"
>
placeholder=
"请输入
反馈
内容"
v-model=
"ruleForm.
feedContent
"
style=
"width:80%"
>
</el-input>
</el-form-item>
<el-form-item
label=
"
状态"
prop=
"point
Status"
>
<el-select
v-model=
"ruleForm.
pointStatus"
label=
"功能点"
placeholder=
"下拉
选择"
>
<el-form-item
label=
"
反馈状态"
prop=
"feed
Status"
>
<el-select
v-model=
"ruleForm.
feedStatus"
label=
"反馈状态"
placeholder=
"请
选择"
>
<el-option
v-for=
"item in options"
v-for=
"item in options
Status
"
:key=
"item.value"
:label=
"item.label"
:value=
"item.value"
>
...
...
@@ -38,18 +32,9 @@
</el-select>
</el-form-item>
<el-form-item
label=
"解决方式"
prop=
"pointSolve"
>
<el-input
type=
"textarea"
:rows=
"2"
placeholder=
"请输入内容"
v-model=
"ruleForm.pointSolve"
style=
"width:80%"
>
</el-input>
<el-form-item
label=
"创建人"
prop=
"creater"
>
<p>
{{
this
.
ruleForm
.
creater
}}
</p>
</el-form-item>
<el-form-item
label=
"创建人"
prop=
"creator"
>
<p>
{{
this
.
ruleForm
.
creator
}}
</p>
</el-form-item>
</el-form>
<div
slot=
"footer"
style=
"margin-right:30px"
>
...
...
@@ -75,25 +60,20 @@
},
data
()
{
/*请选择功能点*/
var
validate
pointFeatures
=
(
rule
,
value
,
callback
)
=>
{
var
validate
feedType
=
(
rule
,
value
,
callback
)
=>
{
if
(
!
value
)
{
return
callback
(
new
Error
(
'请选择
功能点
'
));
return
callback
(
new
Error
(
'请选择
反馈类型
'
));
}
};
/*请输入问题描述*/
var
validate
qdescription
=
(
rule
,
value
,
callback
)
=>
{
var
validate
feedStatus
=
(
rule
,
value
,
callback
)
=>
{
if
(
!
value
)
{
return
callback
(
new
Error
(
'请
输入问题描述
'
));
return
callback
(
new
Error
(
'请
选择反馈结果
'
));
}
};
var
validate
status
=
(
rule
,
value
,
callback
)
=>
{
var
validate
feedContent
=
(
rule
,
value
,
callback
)
=>
{
if
(
!
value
)
{
return
callback
(
new
Error
(
'请输入问题描述'
));
}
};
var
validatesolve
=
(
rule
,
value
,
callback
)
=>
{
if
(
!
value
)
{
return
callback
(
new
Error
(
'请输入问题描述'
));
return
callback
(
new
Error
(
'请输入反馈问题描述'
));
}
};
return
{
...
...
@@ -101,105 +81,106 @@
submitLoading
:
false
},
visible
:
this
.
$props
.
dialogVisible
,
operat
:
[],
restaurants
:
[],
loanoptions
:
[],
state
:
''
,
ruleForm
:
{
pointName
:
''
,
pointTitle
:
''
,
feedType
:
''
,
feedStatus
:
''
,
feedContent
:
''
,
clientNo
:
''
,
problemDescription
:
''
,
pointStatus
:
'FOLLOWEDUP'
,
pointSolve
:
''
,
creator
:
''
creater
:
''
},
rules
:
{
pointNam
e
:
[
{
validator
:
validatepointFeatures
,
trigger
:
'blur'
}
feedTyp
e
:
[
{
required
:
true
,
message
:
"请选择反馈类型"
,
trigger
:
'blur'
}
],
problemDescription
:
[
{
validator
:
validateqdescription
,
trigger
:
'blur'
}
feedStatus
:
[
{
required
:
true
,
message
:
'请选择反馈结果'
,
trigger
:
'blur'
}
],
pointStatus
:
[
{
validator
:
validatestatus
,
trigger
:
'blur'
}
],
pointSolve
:
[
{
validator
:
validatesolve
,
trigger
:
'blur'
}
feedContent
:
[
{
required
:
true
,
message
:
'请输入反馈问题描述'
,
trigger
:
'blur'
}
]
},
options
:
[{
value
:
'FOLLOWEDUP'
,
label
:
'待跟进'
},
{
value
:
'FOLLOWEDING'
,
label
:
'跟进中'
},
{
value
:
'FINISHED'
,
optionsStatus
:
[
{
value
:
'YES'
,
label
:
'已解决'
}],
optionsCustomer
:
[{
},
{
value
:
'NO'
,
label
:
'未解决'
}
],
optionsFeedType
:
[
{
value
:
'内部投诉'
,
label
:
'内部投诉'
},
{
},
{
value
:
'还款问题'
,
label
:
'还款问题'
},
{
},
{
value
:
'系统问题'
,
label
:
'系统问题'
},
{
},
{
value
:
'借款咨询'
,
label
:
'借款咨询'
},
{
},
{
value
:
'账户问题'
,
label
:
'账户问题'
},
{
},
{
value
:
'银行卡签约问题'
,
label
:
'银行卡签约问题'
},
{
value
:
'其它'
,
label
:
'其它'
}],
}
}
],
}
},
created
()
{
this
.
ruleForm
=
{
clientNo
:
this
.
clientNo
,
creat
o
r
:
localStorage
.
getItem
(
"userName"
),
creat
e
r
:
localStorage
.
getItem
(
"userName"
),
}
},
methods
:
{
/** 提交点击 */
submitForm
(
formName
)
{
this
.
$$post
(
'/customer/addQuestion'
,
{
creator
:
localStorage
.
getItem
(
"userName"
),
pointName
:
this
.
ruleForm
.
pointName
,
problemDescription
:
this
.
ruleForm
.
problemDescription
,
pointSolve
:
this
.
ruleForm
.
pointSolve
,
pointStatus
:
this
.
ruleForm
.
pointStatus
,
pointTitle
:
this
.
ruleForm
.
pointTitle
,
clientNo
:
this
.
ruleForm
.
clientNo
submitForm
()
{
this
.
$refs
[
'ruleForm'
].
validate
((
valid
)
=>
{
if
(
!
valid
)
{
return
false
}
this
.
$$post
(
'/feed/createClientFeed'
,
{
creater
:
localStorage
.
getItem
(
"userName"
),
feedType
:
this
.
ruleForm
.
feedType
,
feedSource
:
'CUSTOMER'
,
feedStatus
:
this
.
ruleForm
.
feedStatus
,
feedContent
:
this
.
ruleForm
.
feedContent
,
clientNo
:
this
.
ruleForm
.
clientNo
})
.
then
(
res
=>
{
if
(
res
.
data
.
code
!=
200
)
{
this
.
$message
.
error
(
res
.
data
.
message
);
return
}
this
.
$message
({
message
:
'新增成功'
,
type
:
'success'
});
this
.
$message
({
message
:
'
反馈问题
新增成功'
,
type
:
'success'
});
this
.
handleClose
();
})
.
catch
(
err
=>
{
alert
(
"error!"
)
})
},
createFilter
(
queryString
)
{
return
(
restaurant
)
=>
{
return
(
restaurant
.
value
.
toLowerCase
().
indexOf
(
queryString
.
toLowerCase
())
===
0
);
};
},
handleIconClick
(
ev
)
{
console
.
log
(
ev
);
})
},
/** 关闭处理 */
handleClose
()
{
this
.
visible
=
false
;
...
...
@@ -208,9 +189,8 @@
},
300
);
}
},
// mounted: function () {
// this.loadOperate();
// },
}
</
script
>
...
...
src/components/byh/ByhService.vue
View file @
80cf9d04
...
...
@@ -211,6 +211,8 @@
query
:
{
clientNo
:
record
.
clientNo
,
clientName
:
record
.
clientName
,
clientProductName
:
record
.
productName
,
phoneNo
:
record
.
clientCell
,
clientCell
:
this
.
searchInfo
.
clientCell
,
certNo
:
this
.
searchInfo
.
certNo
,
productName
:
this
.
searchInfo
.
productName
,
...
...
@@ -309,10 +311,6 @@
},
/** 处理分页操作*/
handleCurrentChange
()
{
this
.
loanApplyList
=
this
.
backedData
()
},
}
}
...
...
src/components/byh/ByhServiceDetail.vue
View file @
80cf9d04
This diff is collapsed.
Click to expand it.
src/components/byh/ServiceProblem.vue
View file @
80cf9d04
...
...
@@ -28,17 +28,24 @@
</el-form-item>
<el-form-item
label=
"反馈时间:"
>
<el-date-picker
v-model=
"searchInfo.gmt
Created
"
type=
"daterange"
range-separator=
"至"
<el-date-picker
v-model=
"searchInfo.gmt
StartTime
"
type=
"daterange"
range-separator=
"至"
start-placeholder=
"开始日期"
end-placeholder=
"结束日期"
:clearable=
"false"
></el-date-picker>
</el-form-item>
<el-form-item
label=
"产品名称"
>
<el-select
clearable
v-model=
"searchInfo.
productName
"
>
<el-select
clearable
v-model=
"searchInfo.
feedProduct
"
>
<el-option
v-for=
"item in this.$enumUtils.toValue('BusinessType')"
:key=
"item.value"
:label=
"item.label"
:value=
"item.value"
></el-option>
</el-select>
</el-form-item>
<!--
<el-form-item
label=
"反馈来源"
>
<el-select
clearable
v-model=
"searchInfo.feedSource"
>
<el-option
v-for=
"item in this.$enumUtils.toValue('FeedSourceType')"
:key=
"item.value"
:label=
"item.label"
:value=
"item.value"
></el-option>
</el-select>
</el-form-item>
-->
<div
class=
"btn"
>
<el-button
@
click=
"reset"
type=
"primary"
>
重置
</el-button>
<el-button
@
click=
"querySearchRemind"
type=
"primary"
>
查询
</el-button>
...
...
@@ -66,7 +73,8 @@
<el-table-column
prop=
"clientCell"
label=
"手机号"
></el-table-column>
<el-table-column
prop=
"gmtCreated"
label=
"反馈时间"
:formatter=
"dateFormat"
></el-table-column>
<el-table-column
prop=
"feedType"
label=
"反馈类型"
></el-table-column>
<el-table-column
prop=
"productName"
label=
"产品名称"
:formatter=
"productNameFormat"
></el-table-column>
<el-table-column
prop=
"feedProduct"
label=
"产品名称"
:formatter=
"productNameFormat"
></el-table-column>
<el-table-column
prop=
"feedSource"
label=
"来源"
:formatter=
"feedSourceFormat"
></el-table-column>
<el-table-column
prop=
"feedStatus"
label=
"解决状态"
></el-table-column>
<el-table-column
label=
"操作"
>
<
template
slot-scope=
"scope"
>
...
...
@@ -115,13 +123,14 @@
},
activeName
:
''
,
searchInfo
:
{
gmt
Created
:
[],
gmt
StartTime
:
[],
feedNo
:
''
,
//feedSource: '',
clientName
:
''
,
clientCell
:
''
,
feedType
:
''
,
feedStatus
:
''
,
productName
:
''
,
feedProduct
:
''
,
},
tablePlanRemindData
:
[],
record
:
''
,
...
...
@@ -158,12 +167,12 @@
/** 加载数据 */
remindData
(
params
)
{
var
listsData
=
[];
this
.
$$post
(
'/feed/
p
ageList'
,
this
.
buildParam
()).
then
(
res
=>
{
this
.
$$post
(
'/feed/
feedP
ageList'
,
this
.
buildParam
()).
then
(
res
=>
{
if
(
res
.
data
.
code
!=
200
)
{
this
.
$message
.
error
(
res
.
data
.
message
);
return
}
listsData
=
res
.
data
.
result
.
data
;
listsData
=
res
.
data
.
result
.
records
;
this
.
tablePlanRemindData
=
listsData
;
this
.
page
.
total
=
res
.
data
.
result
.
total
;
...
...
@@ -201,7 +210,7 @@
inputErrorMessage
:
'内容不能为空'
}).
then
(({
value
})
=>
{
// 获取输入的意见 value
this
.
$$post
(
'/feed/updateStatus'
,
this
.
buildParamRaise
(
record
,
value
)).
then
(
res
=>
{
this
.
$$post
(
'/feed/update
Feed
Status'
,
this
.
buildParamRaise
(
record
,
value
)).
then
(
res
=>
{
if
(
res
.
data
.
code
!=
200
)
{
this
.
$message
.
error
(
res
.
data
.
message
);
return
...
...
@@ -227,10 +236,16 @@
//产品名称
productNameFormat
:
function
(
row
,
column
)
{
var
status
=
row
[
'
productName
'
];
var
status
=
row
[
'
feedProduct
'
];
return
this
.
$enumUtils
.
toMsg
(
'BusinessType'
,
status
);
},
//反馈来源
feedSourceFormat
:
function
(
row
,
column
)
{
var
status
=
row
[
'feedSource'
];
return
this
.
$enumUtils
.
toMsg
(
'FeedSourceType'
,
status
);
},
//参数
buildParam
()
{
var
return_hash
=
{
...
...
@@ -254,18 +269,20 @@
if
(
this
.
searchInfo
.
feedStatus
!=
''
)
{
return_hash
[
'feedStatus'
]
=
this
.
searchInfo
.
feedStatus
}
if
(
this
.
searchInfo
.
productName
!=
''
)
{
return_hash
[
'
productName'
]
=
this
.
searchInfo
.
productName
if
(
this
.
searchInfo
.
feedProduct
!=
''
)
{
return_hash
[
'
feedProduct'
]
=
this
.
searchInfo
.
feedProduct
}
if
(
this
.
searchInfo
.
gmtCreated
!=
null
&&
this
.
searchInfo
.
gmtCreated
.
length
>
0
)
{
var
end
=
new
Date
(
this
.
searchInfo
.
gmtCreated
[
1
])
if
(
this
.
searchInfo
.
feedSource
!=
''
)
{
return_hash
[
'feedSource'
]
=
'APP'
}
if
(
this
.
searchInfo
.
gmtStartTime
!=
null
&&
this
.
searchInfo
.
gmtStartTime
.
length
>
0
)
{
var
end
=
new
Date
(
this
.
searchInfo
.
gmtStartTime
[
1
])
end
=
end
.
setDate
(
end
.
getDate
()
+
1
);
end
=
new
Date
(
end
);
return_hash
[
'gmt
Created'
]
=
this
.
searchInfo
.
gmtCreated
[
0
];
return_hash
[
'gmt
TimeEnd
'
]
=
end
return_hash
[
'gmt
StartTime'
]
=
this
.
searchInfo
.
gmtStartTime
[
0
];
return_hash
[
'gmt
EndTime
'
]
=
end
}
...
...
@@ -302,8 +319,9 @@
this
.
searchInfo
.
clientCell
=
''
;
this
.
searchInfo
.
feedType
=
''
;
this
.
searchInfo
.
feedStatus
=
''
;
this
.
searchInfo
.
gmt
Created
=
''
;
this
.
searchInfo
.
gmt
StartTime
=
''
;
this
.
searchInfo
.
productName
=
''
;
this
.
searchInfo
.
feedSource
=
''
;
},
/** 处理分页操作*/
...
...
src/components/byh/UpdateQueDialog.vue
View file @
80cf9d04
This diff is collapsed.
Click to expand it.
src/utils/enumOpt.js
View file @
80cf9d04
...
...
@@ -319,7 +319,7 @@ const enumUtils = {
/** 借条状态*/
enumOpts
[
0
]
=
{
enumOpts
[
33
]
=
{
enumName
:
'LoanStatuEnums'
,
values
:
[
{
code
:
'SUBMITED'
,
message
:
'待审核'
},
{
code
:
'AUDITED'
,
message
:
'审核通过'
},
...
...
@@ -330,6 +330,67 @@ const enumUtils = {
]
};
/** 借条状态*/
enumOpts
[
34
]
=
{
enumName
:
'FeedStatus'
,
values
:
[
{
code
:
'NO'
,
message
:
'未解决'
},
{
code
:
'YES'
,
message
:
'已解决'
},
]
};
/** 借条状态*/
enumOpts
[
35
]
=
{
enumName
:
'FeedSourceType'
,
values
:
[
{
code
:
'APP'
,
message
:
'APP客户反馈'
},
{
code
:
'CUSTOMER'
,
message
:
'客服人员'
},
{
code
:
'COLLECT'
,
message
:
'天思催收'
},
]
};
/** 天思催收反馈状态*/
enumOpts
[
36
]
=
{
enumName
:
'CollectFeedStatue'
,
values
:
[
{
code
:
'PROMISE_REPAYMENT'
,
message
:
'承诺还款'
},
{
code
:
'NEGOTIATING'
,
message
:
'谈判中'
},
{
code
:
'LOAN_CONNECT'
,
message
:
'债可联'
},
{
code
:
'family_CONNECT'
,
message
:
'家属可联'
},
{
code
:
'TP_CASE'
,
message
:
'跳票案件'
},
{
code
:
'LOSS_HALF'
,
message
:
'半失联'
},
{
code
:
'LOSS'
,
message
:
'失联'
},
{
code
:
'REFUSE_REPAYMENT'
,
message
:
'拒绝还款'
},
{
code
:
'CHECK_REPAY'
,
message
:
'检查付款'
},
{
code
:
'FIRST_FOLLOW'
,
message
:
'初次跟进'
},
{
code
:
'FIND'
,
message
:
'查找'
},
{
code
:
'OUT_CASE'
,
message
:
'外访案件'
},
{
code
:
'DISPUTED_CASE'
,
message
:
'争议案件'
},
{
code
:
'NEW_CASE'
,
message
:
'新案'
},
{
code
:
'TOTAL_BACK'
,
message
:
'已结清'
},
{
code
:
'AI_PROMISE_REPAYMENT_TODAY'
,
message
:
'当天还款'
},
{
code
:
'AI_PROMISE_REPAYMENT'
,
message
:
'承诺还款'
},
{
code
:
'AI_CALL_CONNECTED'
,
message
:
'可以接通'
},
{
code
:
'AI_CALL_FAIL'
,
message
:
'外呼失败'
},
{
code
:
'AI_RESPONSE_REPAYMENT_ALREADY'
,
message
:
'反应已还'
},
]
};
/** 天思催收结果*/
enumOpts
[
37
]
=
{
enumName
:
'CollectFeedResult'
,
values
:
[
{
code
:
'NOT_CONTACTED'
,
message
:
'未联系'
},
{
code
:
'CONTACTED'
,
message
:
'已联系'
},
{
code
:
'USER_NOT_ANSWER'
,
message
:
'未接听'
},
{
code
:
'USER_ANSWER_CALL'
,
message
:
'接听'
},
{
code
:
'USER_CALL_BUSY'
,
message
:
'占线'
},
{
code
:
'USER_CALL_SHUTDOWN'
,
message
:
'关机'
},
{
code
:
'NO_BODY_FOR_THE_NUM'
,
message
:
'号码已换人'
},
{
code
:
'USER_CALL_STOP'
,
message
:
'停机'
},
{
code
:
'INVALID_PHONE_NUM'
,
message
:
'空号'
},
{
code
:
'CHANNEL_ERROR'
,
message
:
'渠道异常'
},
{
code
:
'SEARCHED'
,
message
:
'已查找'
},
{
code
:
'SMS_SEND'
,
message
:
'短屏信已发'
},
]
};
for
(
var
enumOptNum
in
enumOpts
)
{
if
(
enumOpts
[
enumOptNum
].
enumName
==
enumName
)
{
for
(
var
msgNum
in
enumOpts
[
enumOptNum
].
values
)
{
...
...
@@ -524,6 +585,14 @@ const enumUtils = {
{
value
:
'还款'
,
label
:
'还款'
},
{
value
:
'借银行卡款'
,
label
:
'银行卡'
},
{
value
:
'投诉'
,
label
:
'投诉'
},
{
value
:
'还款问题'
,
label
:
'还款问题'
},
{
value
:
'资料认证问题'
,
label
:
'资料认证问题'
},
{
value
:
'内部投诉'
,
label
:
'内部投诉'
},
{
value
:
'催收'
,
label
:
'催收'
},
{
value
:
'系统问题'
,
label
:
'系统问题'
},
{
value
:
'借款咨询'
,
label
:
'借款咨询'
},
{
value
:
'账户问题'
,
label
:
'账户问题'
},
{
value
:
'银行卡签约问题'
,
label
:
'银行卡签约问题'
},
{
value
:
'其他'
,
label
:
'其他'
},
]
};
...
...
@@ -538,6 +607,15 @@ const enumUtils = {
]
};
// 产品名称
enumOpts
[
19
]
=
{
enumName
:
'FeedSourceType'
,
values
:
[
{
value
:
'CUSTOMER'
,
label
:
'客服人员'
},
{
value
:
'APP'
,
label
:
'APP'
},
{
value
:
'COLLECT'
,
label
:
'催收'
},
]
};
for
(
var
enumOptNum
in
enumOpts
)
{
if
(
enumOpts
[
enumOptNum
].
enumName
==
enumName
)
{
return
enumOpts
[
enumOptNum
].
values
;
...
...
version.json
View file @
80cf9d04
{
"name"
:
"versiony"
,
"version"
:
"5.7.
3
"
"version"
:
"5.7.
6
"
}
\ No newline at end of file
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