Commit 22ad583b authored by feifei's avatar feifei

客户管理模块儿

parent 3dd318fa
......@@ -43,11 +43,11 @@
<el-table-column prop="level" label="授信级别"></el-table-column>
<el-table-column prop="productName" label="产品名称" :formatter="productNameFormat"></el-table-column>
<el-table-column prop="userStatus" label="状态" :formatter="userStatusFormat"></el-table-column>
<el-table-column label="操作">
<!--<el-table-column label="操作">
<template scope="scope">
<el-button type="primary" size="small" v-if="$permissionUtils.rolePermission('customBoss') && scope.row.userStatus == 'REAL_NAME' " @click="cancellation(scope.row)">注销</el-button>
</template>
</el-table-column>
</el-table-column>-->
<el-table-column label="查看详情">
<template scope="scope">
<el-button type="text" size="small" @click="loanDetail(scope.row)">查看详情</el-button>
......
......@@ -289,6 +289,17 @@
<el-table-column prop="gmtCreated" label="操作时间" :formatter="dateFormat"></el-table-column>
<el-table-column prop="memo" label="备注"></el-table-column>
</el-table>
<div class="page">
<el-pagination
@current-change="handleCurrentChangeClient"
@size-change="handleSizeChangeClient"
:current-page.sync="pages.current"
:page-sizes="[10, 20, 50, 100]"
:page-size="pages.size"
layout="total, sizes, prev, pager, next, jumper"
:total="pages.total">
</el-pagination>
</div>
</el-collapse-item>
</el-collapse>
......@@ -430,6 +441,11 @@
size: 10,
total: 0
},
pages: {
current: 1,
size: 10,
total: 0
},
loanBackedList: [],
customerFeedList: [],
collectFeedList: [{
......@@ -702,18 +718,8 @@
}
});
// 请求当前日志
this.$$post('/detail/getDaily', this.buildParam(clientNo)).then(res => {
if (res.data.code != 200) {
this.$message.error(res.data.message);
return
}
if (res.data.result.data != null) {
this.loanLogCustom = res.data.result.data ? res.data.result.data : '';
}
}).catch(error => {
this.$Message.error(error || '系统异常');
});
//操作信息
this.clientDailyInfo(clientNo);
// 请求当前的反馈问题/customer/getQuestionList/
this.$$post('/feed/feedList/',{clientNo:clientNo, feedSource:'CUSTOMER',feedProduct:clientProductName}).then(res => {
......@@ -763,6 +769,23 @@
},
//操作信息
clientDailyInfo(clientNo){
// 请求当前日志
this.$$post('/detail/getDaily', this.buildParam(clientNo)).then(res => {
if (res.data.code != 200) {
this.$message.error(res.data.message);
return
}
if (res.data.result.data != null) {
this.loanLogCustom = res.data.result.data ? res.data.result.data : '';
this.pages.total = res.data.result.size;
}
}).catch(error => {
this.$Message.error(error || '系统异常');
});
},
//根据借款信息查借款所有信息
addLoanDetail(record){
var loanNo = record;
......@@ -890,14 +913,12 @@
//参数
buildParam(clientNo) {
var return_hash = {
size: this.page.size,
current: this.page.current,
size: this.pages.size,
current: this.pages.current,
};
if (clientNo != '') {
return_hash['clientNo'] = clientNo
}
return return_hash;
},
// 合并日期
......@@ -1018,6 +1039,17 @@
this.loanBackedData(this.loanNos);
},
/** 处理分页操作*/
handleCurrentChangeClient () {
this.loanLogCustom = this.clientDailyInfo(this.advanceLoanAmt.clientNo);
},
handleSizeChangeClient(row){
this.pages.size=row
this.pages.current=1;
this.clientDailyInfo(this.advanceLoanAmt.clientNo);
},
//结果状态
resultFormat: function (row, column) {
var result = row['result'];
......
<template>
<div>
<div class="page-search">
<el-form :inline="true" :model="searchInfo" class="demo-form-inline">
<el-form-item label="手机号">
<el-input v-model="searchInfo.clientCell"
placeholder="请输入手机号"></el-input>
</el-form-item>
<el-form-item label="产品名称">
<el-select clearable v-model="searchInfo.appName">
<el-option v-for="item in this.$enumUtils.toValue('AppNameType')" :key="item.value"
:label="item.label" :value="item.value"></el-option>
</el-select>
</el-form-item>
<el-form-item>
<el-button type="primary" @click="onSubmit">查询</el-button>
</el-form-item>
</el-form>
</div>
<div v-show="isShow">
<el-collapse v-model="activeNames">
<el-collapse-item title="用户基本信息" name="1">
<br/>
<div v-if="this.clientInfo.ucUserDO !=null">
<el-row :gutter="24" :data="clientInfo.ucUserDO" style="margin-left:50px">
<el-col :span="16">
<div class="grid-content bg-purple">客户编号:{{clientInfo.ucUserDO.clientNo}}</div>
</el-col>
<br/>
<el-col :span="16">
<div class="grid-content bg-purple">姓名:{{clientInfo.ucUserDO.realName}}</div>
</el-col>
<br/>
<el-col :span="16">
<div class="grid-content bg-purple">注册时间:{{clientInfo.ucUserDO.gmtFirstLogin | dateFilter}}</div>
</el-col>
<br/>
<el-col :span="16">
<div class="grid-content bg-purple">末次登陆:{{clientInfo.ucUserDO.gmtLastLogin | dateFilter}}</div>
</el-col>
<br/>
<el-col :span="16">
<div class="grid-content bg-purple">
用户状态:{{ clientFormat(clientInfo.ucUserDO.state)}}
<el-button style="margin-left: 30px" type="danger" size="small" v-if="this.clientInfo.ucUserDO.state != 4" @click="cancelUser(clientInfo.ucUserDO)">销户</el-button>
</div>
</el-col>
<br/>
</el-row>
</div>
</el-collapse-item>
<el-collapse-item title="实名认证" name="2">
<div v-if="this.clientInfo.clientRealAuthDO !=null">
<el-row :gutter="20" :data="clientInfo.clientRealAuthDO" style="margin-left:50px">
<el-col :span="8">
<div class="grid-content bg-purple">
实名认证状态:{{realAuthFormat(clientInfo.clientRealAuthDO.state)}}
<el-button type="primary" size="small" v-if="this.clientInfo.userFaceRecognitionDO.state != 1" @click="resetRealAuth(clientInfo.clientRealAuthDO.clientNo)">重置实名</el-button>
</div>
</el-col>
</el-row>
</div>
<br/>
<div v-if="this.clientInfo.clientRealAuthDO !=null">
<el-row :gutter="24" :data="clientInfo.clientRealAuthDO" style="margin-left:50px">
<el-col :span="12">
<img :src="clientInfo.clientRealAuthDO.idPhotoFrontUrl" alt="" style="width: 60%;height: 60%" />
</el-col>
<el-col :span="12">
<img :src="clientInfo.clientRealAuthDO.idPhotoConUrl" alt="" style="width: 60%;height: 60%" />
</el-col>
<br/>
</el-row>
</div>
</el-collapse-item>
<el-collapse-item title="活体认证" name="3">
<div v-if="this.clientInfo.userFaceRecognitionDO !=null">
<el-row :gutter="24" :data="clientInfo.userFaceRecognitionDO" style="margin-left:50px">
<el-col :span="24">
<div class="grid-content bg-purple">
活体认证状态:{{faceFormat(clientInfo.userFaceRecognitionDO.state)}}
<el-button style="margin-left: 30px" type="primary" size="small" v-if="clientInfo.userFaceRecognitionDO.state != 1" @click="manuallyCheck(clientInfo.userFaceRecognitionDO.userId)">人工通过</el-button>
</div>
</el-col>
<el-col :span="24">
<div class="grid-content bg-purple">
认证次数:{{clientInfo.userFaceRecognitionDO.verifyTimes}}
<el-button style="margin-left: 30px" type="primary" size="small" v-if="clientInfo.userFaceRecognitionDO.state != 1" @click="resetNumber(clientInfo.userFaceRecognitionDO.userId)">重置次数</el-button>
</div>
</el-col>
<el-col :span="24">
<div class="grid-content bg-purple">认证结果:{{clientInfo.userFaceRecognitionDO.faceResult }}</div>
</el-col>
</el-row>
<el-row :gutter="24" :data="clientInfo.userFaceRecognitionDO" style="margin-left:50px;margin-top: 20px">
<el-col :span="12">
<div class="grid-content bg-purple-light">
人脸照片<br/><img :src="clientInfo.userFaceRecognitionDO.faceBestImgPath" alt="" style="width: 50%;height: 50%" />
</div>
</el-col>
</el-row>
</div>
</el-collapse-item>
<el-collapse-item title="基本信息" name="4">
<br/>
<div v-if="this.clientInfo.clientRiskFileDO !=null">
<el-row :gutter="24" :data="clientInfo.clientRiskFileDO" style="margin-left:50px">
<el-col :span="16">
<div class="grid-content bg-purple">通讯录权限:{{fileTypeFormat(clientInfo.clientRiskFileDO.fileType)}}</div>
</el-col>
<br/>
</el-row>
</div>
<div>
<el-row :gutter="24" :data="clientInfo.clientRiskFileDO" style="margin-left:50px;margin-top: 30px">
<el-col :span="16">
<div class="grid-content bg-purple">盈火老用户数据清理(谨慎操作):
<el-button style="margin-left: 10px" type="danger" size="small" @click="removeUserInfo">清除</el-button>
</div>
</el-col>
<br/>
</el-row>
</div>
</el-collapse-item>
</el-collapse>
</div>
</div>
</template>
<script>
import * as moment from "moment";
export default {
name: "ClientManagerment",
data(){
return{
isShow: false,
activeNames: ['1','2','3','4'],
searchInfo: {
clientCell: '',
appName: '',
},
clientInfo:{
ucUserDO:{},
clientRealAuthDO:{},
userFaceRecognitionDO:{},
clientRiskFileDO:{},
},
}
},
filters: {
dateFilter: function (row) {
var exp = row
if (!exp || typeof(exp) === undefined || typeof(exp) === null) {
return ''
}
return moment(exp).format("YYYY-MM-DD HH:mm:ss")
},
userStatusFilter: function (row) {
},
},
created() {
//Vue的方法给原生调用,则需要把方法挂在Window下面
window.clientData = this.clientData;
},
methods:{
/*搜索条件*/
onSubmit(){
if(this.searchInfo.clientCell == '' || this.searchInfo.appName ==''){
this.$message({message: '手机号或产品名称不能为空', type: 'error'});
return;
}
this.clientData(this.searchInfo.clientCell,this.searchInfo.appName);
},
clientData(record,value){
//查询客户数据
this.$$get('/client/getClientInfo?cell='+ record +'&appName='+ value).then(res => {
if (res.data.code != 200) {
this.isShow = false;
this.$message.error(res.data.message);
return
}
this.isShow = true;
this.clientInfo = res.data.result;
}).catch(error => {
this.$Message.error(error || '系统异常');
});
},
//客户注册状态
clientFormat(value){
var userStatus = value;
if(userStatus == null || userStatus == '' || userStatus == undefined){
return ''
}
return this.$enumUtils.toMsg('ClientStatusEnum', userStatus);
},
//实名状态
realAuthFormat(value){
var realAuthStatus = value;
if(realAuthStatus == null || realAuthStatus == '' || realAuthStatus == undefined){
return ''
}
return this.$enumUtils.toMsg('RealAuthStatusEnum', realAuthStatus);
},
//活体状态
faceFormat(value){
var faceStatus = value;
if(faceStatus == null || faceStatus == '' || faceStatus == undefined){
return ''
}
return this.$enumUtils.toMsg('FaceStatusEnum', faceStatus);
},
//通讯录上传状态
fileTypeFormat(value){
var fileTypeStatus = value;
if(fileTypeStatus == null || fileTypeStatus == '' || fileTypeStatus == undefined){
return ''
}
if(fileTypeStatus == 1){
return '已获取';
}else {
return '无法获取获取';
}
},
//重置实名
resetRealAuth(value){
var clientCell = this.searchInfo.clientCell;
var appName = this.searchInfo.appName;
this.$confirm('正在重置实名认证, 是否继续?', '重置实名', {
confirmButtonText: '确定',
cancelButtonText: '取消',
type: 'warning',
beforeClose: (action, instance, done) => {
if (action === 'confirm') {
this.$$get('/client/resetAuthen?clientNo=' + value)
.then(res => {
if (res.data.code != 200) {
this.$message.error(res.data.message);
return
}
this.$message({message: '实名重置成功', type: 'success'});
done();
this.clientData(clientCell,appName);
}).catch(err => {
this.$Message.error(error || '系统异常');
});
} else {
done();
}
}
}).catch(() => {
this.$message({
type: 'info',
message: '取消重置'
});
});
},
//销户
cancelUser(record){
var clientCell = this.searchInfo.clientCell;
var appName = this.searchInfo.appName;
this.$confirm('正在进行销户操作, 是否继续?', '销户', {
confirmButtonText: '确定',
cancelButtonText: '取消',
type: 'warning',
beforeClose: (action, instance, done) => {
if (action === 'confirm') {
this.$$get('/client/accountCancellation?userId=' + record.userId + '&clientCell='+ record.cell)
.then(res => {
if (res.data.code != 200) {
this.$message.error(res.data.message);
return
}
this.$message({message: '销户成功', type: 'success'});
done();
this.clientData(clientCell,appName);
}).catch(err => {
this.$Message.error(error || '系统异常');
});
} else {
done();
}
}
}).catch(() => {
this.$message({
type: 'info',
message: '取消销户'
});
});
},
//活体人工通过接口
manuallyCheck(record){
var clientCell = this.searchInfo.clientCell;
var appName = this.searchInfo.appName;
this.$$get('/client/manuallyCheck?userId='+ record ).then(res => {
if (res.data.code != 200) {
this.$message.error(res.data.message);
return
}
this.$message({message: '人工通过成功', type: 'success'});
this.clientData(clientCell,appName);
}).catch(error => {
this.$Message.error(error || '系统异常');
});
},
//重置用户认证次数
resetNumber(record){
var clientCell = this.searchInfo.clientCell;
var appName = this.searchInfo.appName;
this.$$get('/client/resetNumber?userId='+ record ).then(res => {
if (res.data.code != 200) {
this.$message.error(res.data.message);
return
}
this.$message({message: '重置用户认证次数成功', type: 'success'});
this.clientData(clientCell,appName);
}).catch(error => {
this.$Message.error(error || '系统异常');
});
},
//清除用户数据
removeUserInfo(){
var clientCell = this.searchInfo.clientCell;
var appName = this.searchInfo.appName;
this.$confirm('正在进行用户数据清除操作, 是否继续?', '清除', {
confirmButtonText: '确定',
cancelButtonText: '取消',
type: 'warning',
beforeClose: (action, instance, done) => {
if (action === 'confirm') {
this.$$get('/client/removeUserInfo?cell='+ clientCell +'&appName='+ appName)
.then(res => {
if (res.data.code != 200) {
this.$message.error(res.data.message);
return
}
this.$message({message: '清除用户数据成功', type: 'success'});
done();
this.clientData(clientCell,appName);
}).catch(err => {
this.$Message.error(error || '系统异常');
});
} else {
done();
}
}
}).catch(() => {
this.$message({
type: 'info',
message: '取消清除'
});
});
},
}
}
</script>
<style scoped>
</style>
......@@ -12,21 +12,6 @@ const menu = [
title: '客户管理',
icon: 'weibiaoti25',
list: [
// {
// index: '1-1',
// route: {name: 'ByhPlanRemindList'},
// title: '提醒列表'
// },
// {
// index: '1-2',
// route: {name: 'ByhLoanBackedList'},
// title: '转账列表'
// },
// {
// index: '1-3',
// route: {name: 'ByhLoanCollectList'},
// title: '逾期列表'
// },
{
index: '1-1',
route: {name: 'ByhService'},
......@@ -41,6 +26,11 @@ const menu = [
index: '1-3',
route: {name: 'ByhMarket'},
title: '销售批次管理'
},
{
index: '1-4',
route: {name: 'ClientManagerment'},
title: '用户管理'
}
]
},
......
......@@ -40,7 +40,8 @@ import {
ByhLoanSnapList,
GxdloanList,
CardBankList,
ServiceProblem
ServiceProblem,
ClientManagerment
} from './routes'
Vue.use(Router)
......@@ -317,7 +318,15 @@ export default new Router({
filter: true
}
},
{
path: '/byh/ClientManagerment',
name: 'ClientManagerment',
component: ClientManagerment,
meta: {
title: '客户管理',
filter: true
}
},
]
}
]
......
......@@ -19,6 +19,7 @@ export const ByhService = resolve => require(['../components/byh/ByhService.vue'
export const ServiceProblem = resolve => require(['../components/byh/ServiceProblem.vue'], resolve)
export const ByhServiceDetail = resolve => require(['../components/byh/ByhServiceDetail.vue'], resolve)
export const ByhApplyMoney = resolve => require(['../components/byh/ByhApplyMoney.vue'], resolve)
export const ClientManagerment = resolve => require(['../components/byh/ClientManagerment.vue'], resolve)
export const DownloadExecl = resolve => require(['../components/system/DownloadExecl.vue'], resolve)
export const LendBankCardList = resolve => require(['../components/system/LendBankCardList.vue'], resolve)
......@@ -124,5 +125,7 @@ export default {
// 临时放款
ByhLoanSnapList,
GxdloanList,
CardBankList
CardBankList,
//客户管理
ClientManagerment
}
......@@ -303,6 +303,7 @@ const enumUtils = {
{code: 'FO_GJJ', message: '51公积金'},
{code: 'RS_DAI', message: '榕树贷'},
{code: 'ZGH', message: '尊贵花'},
{code: 'YSD', message: '衣食贷'},
]
};
......@@ -391,6 +392,37 @@ const enumUtils = {
]
};
/** 客户管理用户状态*/
enumOpts[38] = {
enumName: 'ClientStatusEnum', values: [
{code: '-1', message: '临时用户'},
{code: '1', message: '注册用户'},
{code: '2', message: '实名用户'},
{code: '3', message: '已冻结'},
{code: '4', message: '已注销'},
]
};
/** 客户管理用户实名状态*/
enumOpts[39] = {
enumName: 'RealAuthStatusEnum', values: [
{code: '0', message: '未认证'},
{code: '1', message: '认证中'},
{code: '2', message: '认证通过'},
{code: '3', message: '认证不通过'},
]
};
/** 客户管理用户活体状态*/
enumOpts[40] = {
enumName: 'FaceStatusEnum', values: [
{code: '0', message: '未识别'},
{code: '1', message: '身份比对成功'},
{code: '2', message: '身份比对异常'},
{code: '3', message: '身份比对服务异常'},
]
};
for (var enumOptNum in enumOpts) {
if (enumOpts[enumOptNum].enumName == enumName) {
for (var msgNum in enumOpts[enumOptNum].values) {
......@@ -604,10 +636,11 @@ const enumUtils = {
{value: 'FO_GJJ', label: '51公积金'},
{value: 'RS_DAI', label: '榕树贷'},
{value: 'ZGH', label: '尊贵花'},
{value: 'YSD', label: '衣食贷'},
]
};
// 产品名称
// 反馈来源
enumOpts[19] = {
enumName: 'FeedSourceType', values: [
{value: 'CUSTOMER', label: '客服人员'},
......@@ -616,6 +649,14 @@ const enumUtils = {
]
};
// 产品名称
enumOpts[20] = {
enumName: 'AppNameType', values: [
{value: 'YYYQ', label: '盈盈有钱'},
{value: 'YYYQ_QUICK', label: '盈盈有钱福利版'},
]
};
for (var enumOptNum in enumOpts) {
if (enumOpts[enumOptNum].enumName == enumName) {
return enumOpts[enumOptNum].values;
......
{
"name": "versiony",
"version": "5.8.4"
"version": "5.9.1"
}
\ 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