Commit 80cf9d04 authored by feifei's avatar feifei

天思催记

parent 726a87d6
<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="pointName">
<el-select v-model="ruleForm.pointName" label="功能点" placeholder="请选择" style="width:80%">
<el-form-item label="反馈类型" prop="feedType">
<el-select v-model="ruleForm.feedType" label="反馈类型" placeholder="请选择" style="width:80%">
<el-option
v-for="item in optionsCustomer"
v-for="item in optionsFeedType"
: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="pointStatus">
<el-select v-model="ruleForm.pointStatus" label="功能点" placeholder="下拉选择">
<el-form-item label="反馈状态" prop="feedStatus">
<el-select v-model="ruleForm.feedStatus" label="反馈状态" placeholder="请选择">
<el-option
v-for="item in options"
v-for="item in optionsStatus"
:key="item.value"
:label="item.label"
:value="item.value">
......@@ -38,17 +32,8 @@
</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>
<el-form-item label="创建人" prop="creator">
<p>{{this.ruleForm.creator}}</p>
<el-form-item label="创建人" prop="creater">
<p>{{this.ruleForm.creater}}</p>
</el-form-item>
</el-form>
......@@ -75,25 +60,20 @@
},
data() {
/*请选择功能点*/
var validatepointFeatures = (rule, value, callback) => {
var validatefeedType = (rule, value, callback) => {
if (!value) {
return callback(new Error('请选择功能点'));
return callback(new Error('请选择反馈类型'));
}
};
/*请输入问题描述*/
var validateqdescription = (rule, value, callback) => {
var validatefeedStatus = (rule, value, callback) => {
if (!value) {
return callback(new Error('请输入问题描述'));
return callback(new Error('请选择反馈结果'));
}
};
var validatestatus = (rule, value, callback) => {
var validatefeedContent = (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,81 +81,87 @@
submitLoading: false
},
visible: this.$props.dialogVisible,
operat: [],
restaurants: [],
loanoptions: [],
state: '',
ruleForm: {
pointName: '',
pointTitle: '',
feedType: '',
feedStatus: '',
feedContent: '',
clientNo: '',
problemDescription:'',
pointStatus:'FOLLOWEDUP',
pointSolve:'',
creator: ''
creater: ''
},
rules: {
pointName: [
{ validator: validatepointFeatures, trigger: 'blur' }
],
problemDescription: [
{ validator: validateqdescription, trigger: 'blur' }
feedType: [
{ required: true,message: "请选择反馈类型", trigger: 'blur' }
],
pointStatus: [
{ validator: validatestatus, trigger: 'blur' }
feedStatus: [
{ required: true,message: '请选择反馈结果', 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,
creator: localStorage.getItem("userName"),
creater: 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,
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 => {
......@@ -183,22 +169,17 @@
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() {
......@@ -208,9 +189,8 @@
}, 300);
}
},
// mounted: function () {
// this.loadOperate();
// },
}
</script>
......
......@@ -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()
},
}
}
......
This diff is collapsed.
......@@ -28,17 +28,24 @@
</el-form-item>
<el-form-item label="反馈时间:">
<el-date-picker v-model="searchInfo.gmtCreated" type="daterange" range-separator="至"
<el-date-picker v-model="searchInfo.gmtStartTime" 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: {
gmtCreated: [],
gmtStartTime: [],
feedNo: '',
//feedSource: '',
clientName: '',
clientCell: '',
feedType : '',
feedStatus:'',
productName:'',
feedProduct:'',
},
tablePlanRemindData: [],
record: '',
......@@ -158,12 +167,12 @@
/** 加载数据 */
remindData (params) {
var listsData = [];
this.$$post('/feed/pageList', this.buildParam()).then(res => {
this.$$post('/feed/feedPageList', 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/updateFeedStatus', 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['gmtCreated'] = this.searchInfo.gmtCreated[0];
          return_hash['gmtTimeEnd'] = end
          return_hash['gmtStartTime'] = this.searchInfo.gmtStartTime[0];
          return_hash['gmtEndTime'] = end
}
......@@ -302,8 +319,9 @@
this.searchInfo.clientCell = '';
this.searchInfo.feedType = '';
this.searchInfo.feedStatus = '';
this.searchInfo.gmtCreated = '';
this.searchInfo.gmtStartTime = '';
this.searchInfo.productName = '';
this.searchInfo.feedSource = '';
},
/** 处理分页操作*/
......
<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-form-item label="反馈类型" prop="feedType">
<el-select v-model="ruleForm.feedType" label="反馈类型" placeholder="请选择" :disabled="true" style="width:80%">
<el-option
v-for="item in optionsCustomer"
:key="item.code"
v-for="item in optionsFeedType"
:key="item.value"
:label="item.label"
:value="item.value" >
: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:60%">
placeholder="请输入处理意见"
v-model="ruleForm.finishContent" style="width:80%">
</el-input>
</el-form-item>
<el-form-item label="状态">
<el-select v-model="ruleForm.pointStatus" label="状态" placeholder="请选择">
<el-form-item label="反馈状态" prop="feedStatus">
<el-select v-model="ruleForm.feedStatus" label="反馈状态" placeholder="请选择">
<el-option
v-for="item in operatStatus"
v-for="item in optionsStatus"
:key="item.value"
:label="item.label"
:value="item.value">
......@@ -45,14 +44,12 @@
</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,173 +67,132 @@
type: Boolean,
required: true
},
pointName: {
feedNo: {
type: String
},
pointTitle: {
feedType: {
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' }
{
value: 'NO',
label: '未解决'
}
],
},
optionsCustomer: [{
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,
submitClick() {
this.$$post('/feed/updateFeedStatus', {
feedNo: this.ruleForm.feedNo,
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 => {
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.$message({message: '修改成功', type: 'success'});
this.handleClose();
setTimeout(function () {
this.visible = false;
}, 500)
this.$message({message: '成功', type: 'success'});
window.location.reload();
})
.catch(err => {
alert("error!")
}).catch(error => {
this.$message.error("修改客服反馈信息失败");
})
},
......
......@@ -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;
......
{
"name": "versiony",
"version": "5.7.3"
"version": "5.7.6"
}
\ No newline at end of file
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment