Commit 80cf9d04 authored by feifei's avatar feifei

天思催记

parent 726a87d6
<template> <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 :model="ruleForm" :rules="rules" ref="ruleForm" label-width="80px" class="demo-ruleForm">
<el-form-item label="功能点" prop="pointName"> <el-form-item label="反馈类型" prop="feedType">
<el-select v-model="ruleForm.pointName" label="功能点" placeholder="请选择" style="width:80%"> <el-select v-model="ruleForm.feedType" label="反馈类型" placeholder="请选择" style="width:80%">
<el-option <el-option
v-for="item in optionsCustomer" v-for="item in optionsFeedType"
:key="item.value" :key="item.value"
:label="item.label" :label="item.label"
:value="item.value"> :value="item.value">
...@@ -12,25 +12,19 @@ ...@@ -12,25 +12,19 @@
</el-select> </el-select>
</el-form-item > </el-form-item >
<el-form-item label="反馈描述" prop="feedContent">
<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-input <el-input
type="textarea" type="textarea"
:rows="2" :rows="2"
placeholder="请输入内容" placeholder="请输入反馈内容"
v-model="ruleForm.problemDescription" style="width:80%"> v-model="ruleForm.feedContent" style="width:80%">
</el-input> </el-input>
</el-form-item> </el-form-item>
<el-form-item label="状态" prop="pointStatus"> <el-form-item label="反馈状态" prop="feedStatus">
<el-select v-model="ruleForm.pointStatus" label="功能点" placeholder="下拉选择"> <el-select v-model="ruleForm.feedStatus" label="反馈状态" placeholder="请选择">
<el-option <el-option
v-for="item in options" v-for="item in optionsStatus"
:key="item.value" :key="item.value"
:label="item.label" :label="item.label"
:value="item.value"> :value="item.value">
...@@ -38,18 +32,9 @@ ...@@ -38,18 +32,9 @@
</el-select> </el-select>
</el-form-item> </el-form-item>
<el-form-item label="解决方式" prop="pointSolve"> <el-form-item label="创建人" prop="creater">
<el-input <p>{{this.ruleForm.creater}}</p>
type="textarea"
:rows="2"
placeholder="请输入内容"
v-model="ruleForm.pointSolve" style="width:80%">
</el-input>
</el-form-item> </el-form-item>
<el-form-item label="创建人" prop="creator">
<p>{{this.ruleForm.creator}}</p>
</el-form-item>
</el-form> </el-form>
<div slot="footer" style="margin-right:30px"> <div slot="footer" style="margin-right:30px">
...@@ -75,25 +60,20 @@ ...@@ -75,25 +60,20 @@
}, },
data() { data() {
/*请选择功能点*/ /*请选择功能点*/
var validatepointFeatures = (rule, value, callback) => { var validatefeedType = (rule, value, callback) => {
if (!value) { if (!value) {
return callback(new Error('请选择功能点')); return callback(new Error('请选择反馈类型'));
} }
}; };
/*请输入问题描述*/ /*请输入问题描述*/
var validateqdescription = (rule, value, callback) => { var validatefeedStatus = (rule, value, callback) => {
if (!value) { if (!value) {
return callback(new Error('请输入问题描述')); return callback(new Error('请选择反馈结果'));
} }
}; };
var validatestatus = (rule, value, callback) => { var validatefeedContent = (rule, value, callback) => {
if (!value) { if (!value) {
return callback(new Error('请输入问题描述')); return callback(new Error('请输入反馈问题描述'));
}
};
var validatesolve = (rule, value, callback) => {
if (!value) {
return callback(new Error('请输入问题描述'));
} }
}; };
return { return {
...@@ -101,105 +81,106 @@ ...@@ -101,105 +81,106 @@
submitLoading: false submitLoading: false
}, },
visible: this.$props.dialogVisible, visible: this.$props.dialogVisible,
operat: [],
restaurants: [],
loanoptions: [],
state: '',
ruleForm: { ruleForm: {
pointName: '', feedType: '',
pointTitle: '', feedStatus: '',
feedContent: '',
clientNo: '', clientNo: '',
problemDescription:'', creater: ''
pointStatus:'FOLLOWEDUP',
pointSolve:'',
creator: ''
}, },
rules: { rules: {
pointName: [ feedType: [
{ validator: validatepointFeatures, trigger: 'blur' } { required: true,message: "请选择反馈类型", trigger: 'blur' }
], ],
problemDescription: [ feedStatus: [
{ validator: validateqdescription, trigger: 'blur' } { required: true,message: '请选择反馈结果', trigger: 'blur' }
], ],
pointStatus: [ feedContent: [
{ validator: validatestatus, trigger: 'blur' } { required: true,message: '请输入反馈问题描述', trigger: 'blur' }
],
pointSolve: [
{ validator: validatesolve, trigger: 'blur' }
] ]
}, },
options: [{ optionsStatus: [
value: 'FOLLOWEDUP', {
label: '待跟进' value: 'YES',
}, {
value: 'FOLLOWEDING',
label: '跟进中'
}, {
value: 'FINISHED',
label: '已解决' label: '已解决'
}], },
optionsCustomer: [{ {
value: 'NO',
label: '未解决'
}
],
optionsFeedType: [
{
value: '内部投诉', value: '内部投诉',
label: '内部投诉' label: '内部投诉'
}, { },
{
value: '还款问题', value: '还款问题',
label: '还款问题' label: '还款问题'
}, { },
{
value: '系统问题', value: '系统问题',
label: '系统问题' label: '系统问题'
}, { },
{
value: '借款咨询', value: '借款咨询',
label: '借款咨询' label: '借款咨询'
}, { },
{
value: '账户问题', value: '账户问题',
label: '账户问题' label: '账户问题'
}, { },
{
value: '银行卡签约问题',
label: '银行卡签约问题'
},
{
value: '其它', value: '其它',
label: '其它' label: '其它'
}], }
} ],
}
}, },
created() { created() {
this.ruleForm = { this.ruleForm = {
clientNo: this.clientNo, clientNo: this.clientNo,
creator: localStorage.getItem("userName"), creater: localStorage.getItem("userName"),
} }
}, },
methods: { methods: {
/** 提交点击 */ /** 提交点击 */
submitForm(formName) { submitForm() {
this.$$post('/customer/addQuestion', {
creator : localStorage.getItem("userName"), this.$refs['ruleForm'].validate((valid) => {
pointName: this.ruleForm.pointName, if (!valid) {
problemDescription : this.ruleForm.problemDescription , return false
pointSolve: this.ruleForm.pointSolve, }
pointStatus : this.ruleForm.pointStatus , this.$$post('/feed/createClientFeed', {
pointTitle: this.ruleForm.pointTitle, creater: localStorage.getItem("userName"),
clientNo: this.ruleForm.clientNo feedType: this.ruleForm.feedType,
feedSource: 'CUSTOMER',
feedStatus: this.ruleForm.feedStatus,
feedContent: this.ruleForm.feedContent,
clientNo: this.ruleForm.clientNo
}) })
.then(res => { .then(res => {
if (res.data.code != 200) { if (res.data.code != 200) {
this.$message.error(res.data.message); this.$message.error(res.data.message);
return return
} }
this.$message({message: '新增成功', type: 'success'}); this.$message({message: '反馈问题新增成功', type: 'success'});
this.handleClose(); this.handleClose();
}) })
.catch(err => { .catch(err => {
alert("error!") alert("error!")
}) })
}, })
createFilter(queryString) {
return (restaurant) => {
return (restaurant.value.toLowerCase().indexOf(queryString.toLowerCase()) === 0);
};
},
handleIconClick(ev) {
console.log(ev);
}, },
/** 关闭处理 */ /** 关闭处理 */
handleClose() { handleClose() {
this.visible = false; this.visible = false;
...@@ -208,9 +189,8 @@ ...@@ -208,9 +189,8 @@
}, 300); }, 300);
} }
}, },
// mounted: function () {
// this.loadOperate();
// },
} }
</script> </script>
......
...@@ -211,6 +211,8 @@ ...@@ -211,6 +211,8 @@
query: { query: {
clientNo: record.clientNo, clientNo: record.clientNo,
clientName: record.clientName, clientName: record.clientName,
clientProductName: record.productName,
phoneNo: record.clientCell,
clientCell: this.searchInfo.clientCell, clientCell: this.searchInfo.clientCell,
certNo: this.searchInfo.certNo, certNo: this.searchInfo.certNo,
productName: this.searchInfo.productName, productName: this.searchInfo.productName,
...@@ -309,10 +311,6 @@ ...@@ -309,10 +311,6 @@
}, },
/** 处理分页操作*/
handleCurrentChange () {
this.loanApplyList = this.backedData()
},
} }
} }
......
This diff is collapsed.
...@@ -28,17 +28,24 @@ ...@@ -28,17 +28,24 @@
</el-form-item> </el-form-item>
<el-form-item label="反馈时间:"> <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="开始日期" start-placeholder="开始日期"
end-placeholder="结束日期" :clearable="false"></el-date-picker> end-placeholder="结束日期" :clearable="false"></el-date-picker>
</el-form-item> </el-form-item>
<el-form-item label="产品名称"> <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" <el-option v-for="item in this.$enumUtils.toValue('BusinessType')" :key="item.value"
:label="item.label" :value="item.value"></el-option> :label="item.label" :value="item.value"></el-option>
</el-select> </el-select>
</el-form-item> </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"> <div class="btn">
<el-button @click="reset" type="primary">重置</el-button> <el-button @click="reset" type="primary">重置</el-button>
<el-button @click="querySearchRemind" type="primary">查询</el-button> <el-button @click="querySearchRemind" type="primary">查询</el-button>
...@@ -66,7 +73,8 @@ ...@@ -66,7 +73,8 @@
<el-table-column prop="clientCell" label="手机号" ></el-table-column> <el-table-column prop="clientCell" label="手机号" ></el-table-column>
<el-table-column prop="gmtCreated" label="反馈时间" :formatter="dateFormat" ></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="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 prop="feedStatus" label="解决状态" ></el-table-column>
<el-table-column label="操作"> <el-table-column label="操作">
<template slot-scope="scope"> <template slot-scope="scope">
...@@ -115,13 +123,14 @@ ...@@ -115,13 +123,14 @@
}, },
activeName: '', activeName: '',
searchInfo: { searchInfo: {
gmtCreated: [], gmtStartTime: [],
feedNo: '', feedNo: '',
//feedSource: '',
clientName: '', clientName: '',
clientCell: '', clientCell: '',
feedType : '', feedType : '',
feedStatus:'', feedStatus:'',
productName:'', feedProduct:'',
}, },
tablePlanRemindData: [], tablePlanRemindData: [],
record: '', record: '',
...@@ -158,12 +167,12 @@ ...@@ -158,12 +167,12 @@
/** 加载数据 */ /** 加载数据 */
remindData (params) { remindData (params) {
var listsData = []; var listsData = [];
this.$$post('/feed/pageList', this.buildParam()).then(res => { this.$$post('/feed/feedPageList', this.buildParam()).then(res => {
if (res.data.code != 200) { if (res.data.code != 200) {
this.$message.error(res.data.message); this.$message.error(res.data.message);
return return
} }
listsData = res.data.result.data; listsData = res.data.result.records;
this.tablePlanRemindData = listsData; this.tablePlanRemindData = listsData;
this.page.total = res.data.result.total; this.page.total = res.data.result.total;
...@@ -201,7 +210,7 @@ ...@@ -201,7 +210,7 @@
inputErrorMessage: '内容不能为空' inputErrorMessage: '内容不能为空'
}).then(({ value }) => { }).then(({ value }) => {
// 获取输入的意见 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) { if (res.data.code != 200) {
this.$message.error(res.data.message); this.$message.error(res.data.message);
return return
...@@ -227,10 +236,16 @@ ...@@ -227,10 +236,16 @@
//产品名称 //产品名称
productNameFormat: function (row, column) { productNameFormat: function (row, column) {
var status = row['productName']; var status = row['feedProduct'];
return this.$enumUtils.toMsg('BusinessType', status); return this.$enumUtils.toMsg('BusinessType', status);
}, },
//反馈来源
feedSourceFormat: function (row, column) {
var status = row['feedSource'];
return this.$enumUtils.toMsg('FeedSourceType', status);
},
//参数 //参数
buildParam () { buildParam () {
var return_hash = { var return_hash = {
...@@ -254,18 +269,20 @@ ...@@ -254,18 +269,20 @@
if (this.searchInfo.feedStatus != '') { if (this.searchInfo.feedStatus != '') {
return_hash['feedStatus'] = this.searchInfo.feedStatus return_hash['feedStatus'] = this.searchInfo.feedStatus
} }
if (this.searchInfo.productName != '') { if (this.searchInfo.feedProduct != '') {
return_hash['productName'] = this.searchInfo.productName return_hash['feedProduct'] = this.searchInfo.feedProduct
} }
if (this.searchInfo.feedSource != '') {
if (this.searchInfo.gmtCreated != null && this.searchInfo.gmtCreated.length>0) { return_hash['feedSource'] = 'APP'
var  end = new Date(this.searchInfo.gmtCreated[1]) }
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=end.setDate(end.getDate()+1);
          end=new Date(end);           end=new Date(end);
          return_hash['gmtCreated'] = this.searchInfo.gmtCreated[0];           return_hash['gmtStartTime'] = this.searchInfo.gmtStartTime[0];
          return_hash['gmtTimeEnd'] = end           return_hash['gmtEndTime'] = end
} }
...@@ -302,8 +319,9 @@ ...@@ -302,8 +319,9 @@
this.searchInfo.clientCell = ''; this.searchInfo.clientCell = '';
this.searchInfo.feedType = ''; this.searchInfo.feedType = '';
this.searchInfo.feedStatus = ''; this.searchInfo.feedStatus = '';
this.searchInfo.gmtCreated = ''; this.searchInfo.gmtStartTime = '';
this.searchInfo.productName = ''; this.searchInfo.productName = '';
this.searchInfo.feedSource = '';
}, },
/** 处理分页操作*/ /** 处理分页操作*/
......
This diff is collapsed.
...@@ -319,7 +319,7 @@ const enumUtils = { ...@@ -319,7 +319,7 @@ const enumUtils = {
/** 借条状态*/ /** 借条状态*/
enumOpts[0] = { enumOpts[33] = {
enumName: 'LoanStatuEnums', values: [ enumName: 'LoanStatuEnums', values: [
{code: 'SUBMITED', message: '待审核'}, {code: 'SUBMITED', message: '待审核'},
{code: 'AUDITED', message: '审核通过'}, {code: 'AUDITED', message: '审核通过'},
...@@ -330,6 +330,67 @@ const enumUtils = { ...@@ -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) { for (var enumOptNum in enumOpts) {
if (enumOpts[enumOptNum].enumName == enumName) { if (enumOpts[enumOptNum].enumName == enumName) {
for (var msgNum in enumOpts[enumOptNum].values) { for (var msgNum in enumOpts[enumOptNum].values) {
...@@ -524,6 +585,14 @@ const enumUtils = { ...@@ -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: '借款咨询'},
{value: '账户问题', label: '账户问题'},
{value: '银行卡签约问题', label: '银行卡签约问题'},
{value: '其他', label: '其他'}, {value: '其他', label: '其他'},
] ]
}; };
...@@ -538,6 +607,15 @@ const enumUtils = { ...@@ -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) { for (var enumOptNum in enumOpts) {
if (enumOpts[enumOptNum].enumName == enumName) { if (enumOpts[enumOptNum].enumName == enumName) {
return enumOpts[enumOptNum].values; return enumOpts[enumOptNum].values;
......
{ {
"name": "versiony", "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