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
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
...
...
@@ -230,17 +230,18 @@
</el-collapse-item>
<el-collapse-item
title=
"反馈问题记录"
name=
"6"
>
<el-table
:data=
"loanQuestionList"
stripe
style=
"width: 100%;"
>
<el-table-column
prop=
"id"
label=
"问题编号"
></el-table-column>
<el-collapse-item
title=
"客服反馈问题记录"
name=
"6"
>
<el-table
:data=
"customerFeedList"
stripe
style=
"width: 100%;"
>
<el-table-column
prop=
"feedNo"
label=
"客服反馈编号"
></el-table-column>
<el-table-column
prop=
"clientName"
label=
"客户姓名"
></el-table-column>
<el-table-column
prop=
"clientCell"
label=
"客户手机号"
></el-table-column>
<el-table-column
prop=
"feedType"
label=
"反馈类型"
></el-table-column>
<el-table-column
prop=
"feedContent"
label=
"反馈内容"
></el-table-column>
<el-table-column
prop=
"finishContent"
label=
"处理意见"
></el-table-column>
<el-table-column
prop=
"feedStatus"
label=
"状态"
:formatter=
"serviceFormat"
></el-table-column>
<el-table-column
prop=
"creater"
label=
"处理人"
></el-table-column>
<el-table-column
prop=
"gmtCreated"
label=
"记录时间"
:formatter=
"dateFormat"
></el-table-column>
<el-table-column
prop=
"creator"
label=
"跟进人"
></el-table-column>
<el-table-column
prop=
"pointName"
label=
"功能点"
></el-table-column>
<el-table-column
prop=
"pointTitle"
label=
"问题标题"
></el-table-column>
<el-table-column
prop=
"problemDescription"
label=
"问题描述"
></el-table-column>
<el-table-column
prop=
"pointSolve"
label=
"解决方式"
></el-table-column>
<el-table-column
prop=
"pointStatus"
label=
"状态"
:formatter=
"serviceFormat"
></el-table-column>
<el-table-column
label=
"操作"
>
<
template
scope=
"scope"
>
<el-button
type=
"text"
size=
"small"
@
click=
"updateQueDialog(scope.row)"
>
修改
</el-button>
...
...
@@ -249,12 +250,25 @@
</el-table>
</el-collapse-item>
<el-collapse-item
title=
"操作日志"
name=
"7"
>
<el-collapse-item
title=
"催收记录"
name=
"7"
>
<el-table
:data=
"collectFeedList"
stripe
style=
"width: 100%;"
>
<el-table-column
prop=
"collectContact.contactMobile"
label=
"联系人手机号"
></el-table-column>
<el-table-column
prop=
"collectContact.contactName"
label=
"联系人姓名"
></el-table-column>
<el-table-column
prop=
"collectContact.contactRelation"
label=
"联系人关系"
></el-table-column>
<el-table-column
prop=
"collectContact.overdueDay"
label=
"逾期天数"
></el-table-column>
<el-table-column
prop=
"collectContact.state"
label=
"状态"
:formatter=
"collectStatueFormat"
></el-table-column>
<el-table-column
prop=
"collectContact.created"
label=
"联系时间"
:formatter=
"collectDateFormat"
></el-table-column>
<el-table-column
prop=
"collectContact.resultType"
label=
"结果"
:formatter=
"collectResultFormat"
></el-table-column>
<el-table-column
prop=
"collectContact.callSeconds"
label=
"语音时长"
:formatter=
"formatSeconds"
></el-table-column>
<el-table-column
prop=
"collectContact.record"
label=
"催记"
></el-table-column>
</el-table>
</el-collapse-item>
<el-collapse-item
title=
"操作日志"
name=
"8"
>
<el-table
:data=
"loanLogCustom"
stripe
style=
"width: 100%;"
>
<!-- <el-table-column prop="id" label="操作人员"></el-table-column> -->
<el-table-column
prop=
"typeStr"
label=
"操作类型"
></el-table-column>
<!-- <el-table-column prop="memo" label="操作结果"></el-table-column> -->
<el-table-column
prop=
"gmtCreated"
label=
"操作时间"
:formatter=
"dateFormat"
></el-table-column>
<el-table-column
prop=
"memo"
label=
"备注"
></el-table-column>
</el-table>
...
...
@@ -290,13 +304,12 @@
<!--修改窗口-->
<updateQueDialog
v-if=
"ui.updateQueDialog.visible"
:id=
"ui.updateQueDialog.id"
:pointName=
"ui.updateQueDialog.pointName"
:pointTitle=
"ui.updateQueDialog.pointTitle"
:problemDescription=
"ui.updateQueDialog.problemDescription"
:pointSolve=
"ui.updateQueDialog.pointSolve"
:pointStatus=
"ui.updateQueDialog.pointStatus"
:creator=
"ui.updateQueDialog.creator"
:feedNo=
"ui.updateQueDialog.feedNo"
:feedType=
"ui.updateQueDialog.feedType"
:feedStatus=
"ui.updateQueDialog.feedStatus"
:feedContent=
"ui.updateQueDialog.feedContent"
:creater=
"ui.updateQueDialog.creater"
:finishContent=
"ui.updateQueDialog.finishContent"
:dialogVisible
.
sync=
"ui.updateQueDialog.visible"
>
</updateQueDialog>
</
template
>
...
...
@@ -371,14 +384,17 @@
flag
:
false
,
isShow
:
true
,
isNeedAudit
:
true
,
activeNames
:
[
'1'
,
'2'
],
activeNames
:
[
'1'
,
'2'
,
'7'
],
page
:
{
current
:
1
,
size
:
10
,
total
:
0
},
loanBackedList
:
[],
loanQuestionList
:
[],
customerFeedList
:
[],
collectFeedList
:
[{
collectContact
:
''
,
}],
loanLogCustom
:
[],
loanResultLists
:
[],
ownerBank
:
[{
...
...
@@ -407,7 +423,6 @@
frontFile
:
''
,
backFile
:
''
,
natureFile
:
''
,
frontFile
:
''
,
}],
loanApplyList
:
[{
planNo
:
''
,
...
...
@@ -418,7 +433,6 @@
planXi
:
''
,
planDate
:
''
,
status
:
''
,
backedBen
:
''
,
}],
companyInfo
:
[{
companyName
:
''
,
...
...
@@ -453,13 +467,13 @@
},
updateQueDialog
:
{
visible
:
false
,
id
:
''
,
pointNam
e
:
''
,
pointTitle
:
''
,
problemDescription
:
''
,
pointSolve
:
''
,
creat
o
r
:
''
,
pointStatus
:
''
feedNo
:
''
,
feedTyp
e
:
''
,
feedStatus
:
''
,
feedContent
:
''
,
clientNo
:
''
,
creat
e
r
:
''
,
finishContent
:
''
,
},
ownerBankBind
:
{
visible
:
false
,
...
...
@@ -510,7 +524,7 @@
},
created
()
{
this
.
backedData
(
this
.
$route
.
query
.
loanNo
,
this
.
$route
.
query
.
clientNo
)
this
.
backedData
(
this
.
$route
.
query
.
phoneNo
,
this
.
$route
.
query
.
clientNo
,
this
.
$route
.
query
.
clientProductName
)
},
methods
:
{
// 反馈弹窗
...
...
@@ -577,11 +591,11 @@
},
/** 加载数据 */
backedData
(
loanNo
,
clientNo
)
{
this
.
loanDetail
(
loanNo
,
clientNo
)
backedData
(
phoneNo
,
clientNo
,
clientProductName
)
{
this
.
loanDetail
(
phoneNo
,
clientNo
,
clientProductName
)
},
loanDetail
(
loanNo
,
clientNo
)
{
loanDetail
(
phoneNo
,
clientNo
,
clientProductName
)
{
// 个人信息
this
.
$$get
(
'/detail/client/'
+
clientNo
).
then
(
res
=>
{
...
...
@@ -613,21 +627,36 @@
});
// 请求当前的反馈问题/customer/getQuestionList/
this
.
$$
get
(
'/customer/getQuestionList/'
+
clientNo
).
then
(
res
=>
{
this
.
$$
post
(
'/feed/feedList/'
,{
clientNo
:
clientNo
,
feedSource
:
'CUSTOMER'
,
feedProduct
:
clientProductName
}
).
then
(
res
=>
{
if
(
res
.
data
.
code
!=
200
)
{
// this.isShow = false;
this
.
$message
.
error
(
res
.
data
.
message
);
return
}
else
{
if
(
res
.
data
.
result
!=
null
)
{
this
.
loanQuestion
List
=
res
.
data
.
result
?
res
.
data
.
result
:
''
;
this
.
customerFeed
List
=
res
.
data
.
result
?
res
.
data
.
result
:
''
;
}
}
}).
catch
(
error
=>
{
this
.
$Message
.
error
(
error
||
'网络异常,请稍后。。。'
);
});
// 请求当前的反馈问题/customer/getQuestionList/
this
.
$$post
(
'/feed/feedList/'
,{
clientCell
:
phoneNo
,
feedProduct
:
'GXD'
,
feedSource
:
'COLLECT'
}
).
then
(
res
=>
{
if
(
res
.
data
.
code
!=
200
)
{
// this.isShow = false;
this
.
$message
.
error
(
res
.
data
.
message
);
return
}
else
{
if
(
res
.
data
.
result
!=
null
)
{
this
.
collectFeedList
=
res
.
data
.
result
?
res
.
data
.
result
:
''
;
}
}
}).
catch
(
error
=>
{
this
.
$Message
.
error
(
error
||
'网络异常,请稍后。。。'
);
});
this
.
$$post
(
'/loan/getLoanListByClientNo/'
+
clientNo
).
then
(
res
=>
{
if
(
res
.
data
.
code
!=
200
)
{
// this.isShow = false;
...
...
@@ -702,21 +731,16 @@
this
.
ui
.
updateQueDialog
=
{
visible
:
true
,
id
:
record
.
id
,
pointName
:
record
.
pointNam
e
,
pointTitle
:
record
.
pointTitle
,
pointStatus
:
record
.
pointStatus
,
problemDescription
:
record
.
problemDescription
,
pointSolve
:
record
.
pointSolve
,
creator
:
record
.
creator
,
feedNo
:
record
.
feedNo
,
feedType
:
record
.
feedTyp
e
,
feedStatus
:
record
.
feedStatus
,
feedContent
:
record
.
feedContent
,
clientNo
:
record
.
clientNo
,
creater
:
record
.
creater
,
finishContent
:
record
.
finishContent
,
};
},
/*搜索条件*/
onSubmit
()
{
this
.
backedData
();
},
dateFormatText
:
function
(
param
)
{
return
moment
(
param
).
format
(
"YYYY-MM-DD"
);
},
...
...
@@ -782,6 +806,59 @@
}
return
moment
(
date
).
format
(
"YYYY-MM-DD HH:mm:ss"
)
},
/*日期*/
collectDateFormat
:
function
(
row
,
column
)
{
var
date
=
row
.
collectContact
.
created
;
if
(
date
==
undefined
||
date
==
null
)
{
return
''
}
return
moment
(
date
).
format
(
"YYYY-MM-DD HH:mm:ss"
)
},
collectStatueFormat
:
function
(
row
,
column
)
{
var
status
=
row
.
collectContact
.
state
;
if
(
status
==
null
||
status
==
''
||
status
==
undefined
){
return
''
}
return
this
.
$enumUtils
.
toMsg
(
'CollectFeedStatue'
,
status
);
},
collectResultFormat
:
function
(
row
,
column
)
{
var
resultType
=
row
.
collectContact
.
resultType
;
if
(
resultType
==
null
||
resultType
==
''
||
resultType
==
undefined
){
return
''
}
return
this
.
$enumUtils
.
toMsg
(
'CollectFeedResult'
,
resultType
);
},
formatSeconds
:
function
(
row
,
column
)
{
var
callSeconds
=
row
.
collectContact
.
callSeconds
;
if
(
callSeconds
==
null
||
callSeconds
==
''
||
callSeconds
==
undefined
){
return
''
}
var
theTime
=
parseInt
(
callSeconds
);
// 秒
var
middle
=
0
;
// 分
var
hour
=
0
;
// 小时
if
(
theTime
>
60
)
{
middle
=
parseInt
(
theTime
/
60
);
theTime
=
parseInt
(
theTime
%
60
);
if
(
middle
>
60
)
{
hour
=
parseInt
(
middle
/
60
);
middle
=
parseInt
(
middle
%
60
);
}
}
var
result
=
""
+
parseInt
(
theTime
)
+
"秒"
;
if
(
middle
>
0
)
{
result
=
""
+
parseInt
(
middle
)
+
"分"
+
result
;
}
if
(
hour
>
0
)
{
result
=
""
+
parseInt
(
hour
)
+
"小时"
+
result
;
}
return
result
;
},
// 计算已还金额
planMoneyFormat
:
function
(
row
,
column
)
{
return
this
.
accAdd
(
this
.
accAdd
(
row
.
backedBen
,
row
.
backedFu
),
row
.
backedXi
).
toFixed
(
2
)
...
...
@@ -815,8 +892,8 @@
//客服状态
serviceFormat
:
function
(
row
,
column
)
{
var
status
=
row
[
'
point
Status'
];
return
this
.
$enumUtils
.
toMsg
(
'
Service
Status'
,
status
);
var
status
=
row
[
'
feed
Status'
];
return
this
.
$enumUtils
.
toMsg
(
'
Feed
Status'
,
status
);
},
//结果状态
...
...
@@ -830,11 +907,6 @@
},
/** 处理分页操作*/
handleCurrentChange
()
{
this
.
loanBackedList
=
this
.
backedData
()
},
}
}
...
...
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
<
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=
"
功能点
"
>
<el-select
v-model=
"ruleForm.
pointName"
label=
"功能点"
placeholder=
"请选择
"
>
<el-option
v-for=
"item in options
Customer
"
:key=
"item.
cod
e"
<el-form-item
label=
"
反馈类型"
prop=
"feedType
"
>
<el-select
v-model=
"ruleForm.
feedType"
label=
"反馈类型"
placeholder=
"请选择"
:disabled=
"true"
style=
"width:80%
"
>
<el-option
v-for=
"item in options
FeedType
"
:key=
"item.
valu
e"
:label=
"item.label"
:value=
"item.value"
>
</el-option>
:value=
"item.value"
>
</el-option>
</el-select>
</el-form-item>
</el-form-item
>
<el-form-item
label=
"创建人"
prop=
"creator"
>
<el-col
:span=
"18"
>
<el-input
v-model=
"ruleForm.creator"
:disabled=
"true"
></el-input>
</el-col>
</el-form-item>
<el-form-item
label=
"问题标题"
prop=
"pointTitle"
>
<el-col
:span=
"18"
>
<el-input
v-model=
"ruleForm.pointTitle"
:disabled=
"true"
></el-input>
</el-col>
</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.feedContent"
:disabled=
"true"
style=
"width:80%"
>
</el-input>
</el-form-item>
<el-form-item
label=
"处理意见"
prop=
"feedContent"
>
<el-input
type=
"textarea"
:rows=
"2"
placeholder=
"请输入内容
"
v-model=
"ruleForm.problemDescription"
style=
"width:6
0%"
>
type=
"textarea"
:rows=
"2"
placeholder=
"请输入处理意见
"
v-model=
"ruleForm.finishContent"
style=
"width:8
0%"
>
</el-input>
</el-form-item>
<el-form-item
label=
"状态"
>
<el-select
v-model=
"ruleForm.pointStatus"
label=
"状态"
placeholder=
"请选择"
>
<el-option
v-for=
"item in operatStatus"
<el-form-item
label=
"反馈状态"
prop=
"feedStatus"
>
<el-select
v-model=
"ruleForm.feedStatus"
label=
"反馈状态"
placeholder=
"请选择"
>
<el-option
v-for=
"item in optionsStatus"
:key=
"item.value"
:label=
"item.label"
:value=
"item.value"
>
</el-option>
</el-option>
</el-select>
</el-form-item>
<el-form-item
label=
"解决方式"
prop=
"pointSolve"
>
<el-input
type=
"textarea"
:rows=
"2"
placeholder=
"请输入内容"
v-model=
"ruleForm.pointSolve"
style=
"width:60%"
>
</el-input>
<el-form-item
label=
"创建人"
prop=
"creater"
>
<el-col
:span=
"18"
>
<el-input
v-model=
"ruleForm.creater"
:disabled=
"true"
></el-input>
</el-col>
</el-form-item>
</el-form>
<div
slot=
"footer"
>
<el-button
@
click=
"handleClose"
>
取 消
</el-button>
...
...
@@ -70,174 +67,133 @@
type
:
Boolean
,
required
:
true
},
pointName
:
{
feedNo
:
{
type
:
String
},
pointTitl
e
:
{
feedTyp
e
:
{
type
:
String
},
problemDescription
:
{
feedStatus
:
{
type
:
String
},
pointSolve
:
{
feedContent
:
{
type
:
String
},
id
:
{
type
:
Number
},
creator
:
{
creater
:
{
type
:
String
},
pointStatus
:
{
finishContent
:
{
type
:
String
},
},
data
()
{
/*请选择功能点*/
var
validatepointFeatures
=
(
rule
,
value
,
callback
)
=>
{
if
(
!
value
)
{
return
callback
(
new
Error
(
'请选择功能点'
));
}
};
/*请输入问题标题*/
var
validateqtitle
=
(
rule
,
value
,
callback
)
=>
{
if
(
!
value
)
{
return
callback
(
new
Error
(
'请输入问题标题'
));
}
};
/*请输入问题描述*/
var
validateqdescription
=
(
rule
,
value
,
callback
)
=>
{
if
(
!
value
)
{
return
callback
(
new
Error
(
'请输入问题描述'
));
}
};
var
validatesolve
=
(
rule
,
value
,
callback
)
=>
{
if
(
!
value
)
{
return
callback
(
new
Error
(
'请输入解决方式'
));
}
};
var
validatenumber
=
(
rule
,
value
,
callback
)
=>
{
if
(
!
value
)
{
return
callback
(
new
Error
(
'id不能为空'
));
}
};
var
validatestatus
=
(
rule
,
value
,
callback
)
=>
{
if
(
!
value
)
{
return
callback
(
new
Error
(
'状态值有问题'
));
}
};
var
validatecode
=
(
rule
,
value
,
callback
)
=>
{
if
(
!
value
)
{
return
callback
(
new
Error
(
'状态值有问题'
));
}
};
return
{
ui
:
{
submitLoading
:
false
},
visible
:
this
.
$props
.
dialogVisible
,
operat
:
[],
operatStatus
:
[{
value
:
'FOLLOWEDUP'
,
label
:
'待跟进'
},
{
value
:
'FOLLOWEDING'
,
label
:
'跟进中'
},
{
value
:
'FINISHED'
,
optionsStatus
:
[
{
value
:
'YES'
,
label
:
'已解决'
}],
ruleForm
:
{
pointTitle
:
''
,
problemDescription
:
''
,
pointStatus
:
'FOLLOWEDUP'
,
pointSolve
:
''
,
id
:
''
,
},
rules
:
{
pointName
:
[
{
validator
:
validatepointFeatures
,
trigger
:
'blur'
}
],
pointTitle
:
[
{
validator
:
validateqtitle
,
trigger
:
'blur'
}
],
problemDescription
:
[
{
validator
:
validateqdescription
,
trigger
:
'blur'
}
],
pointSolve
:
[
{
validator
:
validatesolve
,
trigger
:
'blur'
}
],
pointStatus
:
[
{
validator
:
validatestatus
,
trigger
:
'blur'
}
],
},
optionsCustomer
:
[{
},
{
value
:
'NO'
,
label
:
'未解决'
}
],
optionsFeedType
:
[
{
value
:
'内部投诉'
,
label
:
'内部投诉'
},
{
},
{
value
:
'还款问题'
,
label
:
'还款问题'
},
{
},
{
value
:
'系统问题'
,
label
:
'系统问题'
},
{
},
{
value
:
'借款咨询'
,
label
:
'借款咨询'
},
{
},
{
value
:
'账户问题'
,
label
:
'账户问题'
},
{
},
{
value
:
'银行卡签约问题'
,
label
:
'银行卡签约问题'
},
{
value
:
'其它'
,
label
:
'其它'
}],
}
],
ruleForm
:
{
feedNo
:
''
,
feedType
:
''
,
feedStatus
:
''
,
feedContent
:
''
,
clientNo
:
''
,
creater
:
''
,
finishContent
:
''
,
},
customerFeedList
:[],
rules
:
{
finishContent
:
[
{
required
:
true
,
message
:
"请输入处理意见"
,
trigger
:
'blur'
}
],
feedStatus
:
[
{
required
:
true
,
message
:
'请选择反馈结果'
,
trigger
:
'blur'
}
],
},
}
},
created
()
{
console
.
log
(
this
)
console
.
log
(
3454545
)
this
.
ruleForm
=
{
dialogVisible
:
this
.
dialogVisible
,
id
:
this
.
id
,
creator
:
this
.
creator
,
pointName
:
this
.
pointName
,
pointTitle
:
this
.
pointTitle
,
problemDescription
:
this
.
problemDescription
,
pointSolve
:
this
.
pointSolve
,
pointStatus
:
this
.
pointStatus
,
feedNo
:
this
.
feedNo
,
feedType
:
this
.
feedType
,
feedStatus
:
this
.
feedStatus
,
feedContent
:
this
.
feedContent
,
finishContent
:
this
.
finishContent
,
creater
:
this
.
creater
,
}
},
methods
:
{
/** 提交点击 */
async
submitClick
(
formName
)
{
this
.
$$post
(
'/customer/editQuestion'
,
{
id
:
this
.
ruleForm
.
id
,
dialogVisible
:
this
.
ruleForm
.
dialogVisible
,
pointStatus
:
this
.
ruleForm
.
pointStatus
,
pointName
:
this
.
ruleForm
.
pointName
,
creator
:
this
.
ruleForm
.
creator
,
pointTitle
:
this
.
ruleForm
.
pointTitle
,
pointSolve
:
this
.
ruleForm
.
pointSolve
,
problemDescription
:
this
.
ruleForm
.
problemDescription
,
clientNo
:
localStorage
.
getItem
(
"clientNo"
)
})
.
then
(
res
=>
{
if
(
res
.
data
.
code
!=
200
)
{
this
.
$message
.
error
(
res
.
data
.
msg
);
return
}
this
.
$message
({
message
:
'修改成功'
,
type
:
'success'
});
this
.
handleClose
();
setTimeout
(
function
()
{
this
.
visible
=
false
;
},
500
)
})
.
catch
(
err
=>
{
alert
(
"error!"
)
})
submitClick
()
{
this
.
$$post
(
'/feed/updateFeedStatus'
,
{
feedNo
:
this
.
ruleForm
.
feedNo
,
dialogVisible
:
this
.
ruleForm
.
dialogVisible
,
feedStatus
:
this
.
ruleForm
.
feedStatus
,
finishContent
:
this
.
ruleForm
.
finishContent
,
creater
:
this
.
ruleForm
.
creater
,
}).
then
(
res
=>
{
if
(
res
.
data
.
code
!=
200
)
{
this
.
$message
.
error
(
res
.
data
.
msg
);
return
}
this
.
handleClose
();
this
.
$message
({
message
:
'成功'
,
type
:
'success'
});
window
.
location
.
reload
();
}).
catch
(
error
=>
{
this
.
$message
.
error
(
"修改客服反馈信息失败"
);
})
},
/** 关闭处理 */
...
...
@@ -248,6 +204,6 @@
},
300
);
}
},
}
</
script
>
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