Commit db95428f authored by caimeng's avatar caimeng

优化客户详情样式

parents 529c89e6 9ed94069
......@@ -16,7 +16,7 @@
.env.development.local
.env.test.local
.env.production.local
.history
npm-debug.log*
yarn-debug.log*
yarn-error.log*
......@@ -12,10 +12,10 @@
//window.APIHOST = "http://192.168.0.50:8202";
//测试
window.APIHOST = "http://47.99.245.36:8202";
window.APIHOST = "http://47.99.245.36:8202";
//生产环境
// window.APIHOST = "https://water.jqtianxia.com";
//window.APIHOST = "https://water.jqtianxia.com";
</script>
</head>
......
<template>
<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="feedType">
<el-select v-model="ruleForm.feedType" label="反馈类型" placeholder="请选择" style="width:80%">
<el-option
v-for="item in optionsFeedType"
:key="item.value"
:label="item.label"
:value="item.value">
</el-option>
</el-select>
</el-form-item >
<el-form-item label="反馈描述" prop="feedContent">
<el-input
type="textarea"
:rows="2"
placeholder="请输入反馈内容"
v-model="ruleForm.feedContent" style="width:80%">
</el-input>
</el-form-item>
<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-select>
</el-form-item>
<el-form-item label="创建人" prop="creater">
<p>{{this.ruleForm.creater}}</p>
</el-form-item>
</el-form>
<div slot="footer" style="margin-right:30px">
<el-button @click="handleClose">取 消</el-button>
<el-button type="primary" @click="submitForm('ruleForm')">新 增</el-button>
</div>
</el-dialog>
</template>
<script type="text/ecmascript-6">
export default {
name: 'AddUserServiceDialog',
props: {
dialogVisible: {
type: Boolean,
required: true,
},
clientNo: {
type: String
},
},
data() {
/*请选择功能点*/
var validatefeedType = (rule, value, callback) => {
if (!value) {
return callback(new Error('请选择反馈类型'));
}
};
/*请输入问题描述*/
var validatefeedStatus = (rule, value, callback) => {
if (!value) {
return callback(new Error('请选择反馈结果'));
}
};
var validatefeedContent = (rule, value, callback) => {
if (!value) {
return callback(new Error('请输入反馈问题描述'));
}
};
return {
ui: {
submitLoading: false
},
visible: this.$props.dialogVisible,
ruleForm: {
feedType: '',
feedStatus: '',
feedContent: '',
clientNo: '',
creater: ''
},
rules: {
feedType: [
{ required: true,message: "请选择反馈类型", trigger: 'blur' }
],
feedStatus: [
{ required: true,message: '请选择反馈结果', trigger: 'blur' }
],
feedContent: [
{ required: true,message: '请输入反馈问题描述', trigger: 'blur' }
]
},
optionsStatus: [
{
value: 'YES',
label: '已解决'
},
{
value: 'NO',
label: '未解决'
}
],
optionsFeedType: [
{
value: '内部投诉',
label: '内部投诉'
},
{
value: '还款问题',
label: '还款问题'
},
{
value: '系统问题',
label: '系统问题'
},
{
value: '借款咨询',
label: '借款咨询'
},
{
value: '账户问题',
label: '账户问题'
},
{
value: '银行卡签约问题',
label: '银行卡签约问题'
},
{
value: '其它',
label: '其它'
}
],
}
},
created() {
this.ruleForm = {
clientNo: this.clientNo,
creater: localStorage.getItem("userName"),
}
},
methods: {
/** 提交点击 */
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.handleClose();
})
.catch(err => {
alert("error!")
})
})
},
/** 关闭处理 */
handleClose() {
this.visible = false;
setTimeout(() => {
this.$emit('update:dialogVisible', false)
}, 300);
}
},
}
</script>
<style>
</style>
This diff is collapsed.
<template>
<div>
<el-table :data="baseConfigList" stripe style="width: 100%;">
<el-table-column prop="content" label="内容"></el-table-column>
<el-table-column prop="valueContent" label="当前配置"></el-table-column>
<el-table-column label="操作">
<template slot-scope="scope">
<el-button type="text" size="small" @click="updateQue(scope.row)">修改</el-button>
</template>
</el-table-column>
</el-table>
<div class="page">
<el-pagination
@current-change="handleCurrentChange"
@size-change="handleSizeChange"
:current-page.sync="page.current"
:page-sizes="[10, 20, 50, 100]"
:page-size="page.size"
layout="total, sizes, prev, pager, next, jumper"
:total="page.total">
</el-pagination>
</div>
<el-row>
<el-col :span="24">
<el-link type="danger" disabled>绿色时为开启积累 红色时为关闭积累</el-link>
</el-col>
<el-col :span="24">
<el-switch
v-model="value"
active-color="#13ce66"
@change="change()"
inactive-color="#ff4949">
</el-switch>
</el-col>
</el-row>
<br/>
</div>
</template>
......@@ -26,7 +34,13 @@ export default {
name: "Controlswitch",
data() {
return {
value: true
value: true,
page: {
current: 1,
size: 10,
total: 0
},
baseConfigList: [],
}
},
filters: {
......@@ -45,51 +59,71 @@ export default {
},
methods: {
change(){
this.$confirm('此操作将影响是否积累放款, 是否继续?', '提示', {
getRiaseOrPut(){
this.$$post("/raise/getRiaseOrPut",{
size: this.page.size,
current: this.page.current
}).then(res=>{
if (res.data.code != 200) {
// this.isShow = false;
this.$message.error(res.data.message);
} else {
if (res.data.result.records == null) {
this.baseConfigList = [];
} else {
this.baseConfigList = res.data.result.records ? res.data.result.records : '';
this.page.total = res.data.result.total;
}
}
});
},
/** 处理分页操作*/
handleCurrentChange() {
this.baseConfigList = this.getRiaseOrPut();
},
handleSizeChange(row) {
this.page.size = row
this.page.current = 1;
this.getRiaseOrPut();
},
updateQue(record) {
this.$prompt('请输入内容', '提示', {
confirmButtonText: '确定',
cancelButtonText: '取消',
type: 'warning'
}).then(() => {
if(this.value === true){
this.$$get("/raise/riaseOrPut?type=ON",null).then(res=>{
if (res.data.code==="200"){
this.$message({
message: '设置成功',
type: 'success'
});
this.getRiaseOrPut();
}
});
}else {
this.$$get("/raise/riaseOrPut?type=OFF",null).then(res=>{
if (res.data.code==="200"){
this.$message({
message: '设置成功',
type: 'success'
});
this.getRiaseOrPut();
}
});
center: true
}).then(({ value }) => {
if(value == null || value == '' ){
this.$message.error("请输入后再提交");
return
}
this.$$post('/raise/riaseOrPut', {
keyContent: record.keyContent,
valueContent: value
}).then(res => {
if (res.data.code != 200) {
this.$message.error(res.data.message);
return
}
this.$message({
type: 'success',
message: '你输入的内容是: ' + value
});
window.location.reload();
}).catch(error => {
this.$message.error("修改资方配置信息失败");
})
}).catch(() => {
this.$message({
message: '已取消',
type: 'warning'
type: 'info',
message: '取消输入'
});
this.getRiaseOrPut();
});
},
getRiaseOrPut(){
this.$$get("/raise/getRiaseOrPut",null).then(res=>{
if (res.data.result==="OFF"){
this.value = false
}else {
this.value = true
}
});
}
}
......
<template>
<div style="width: 600px">
<el-form :model="ruleForm" :rules="rules" ref="ruleForm" label-width="140px" class="demo-ruleForm">
<el-form-item label="借款编号" prop="loanNo">
<el-col :span="20">
<el-input v-model="ruleForm.loanNo" placeholder="请正确填写借款编号"></el-input>
</el-col>
</el-form-item>
<el-form-item label="减免金额" prop="derateAmt">
<el-col :span="20">
<el-input type='number' v-model="ruleForm.derateAmt" placeholder="请输入减免金额"></el-input>
</el-col>
</el-form-item>
<el-form-item label="描述信息" prop="applyDesc">
<el-col :span="20">
<el-input v-model="ruleForm.applyDesc" placeholder="请输入减免描述信息"></el-input>
</el-col>
</el-form-item>
</el-form>
<div slot="footer">
<el-button style="float:right; margin-right:200px" type="primary" @click="createDerate('ruleForm')">确 定</el-button>
</div>
</div>
</template>
<script>
export default {
name: "DerateCreate",
props: {
},
data (){
return {
ruleForm: {
loanNo: '',
derateAmt: '',
applyUser: '',
applyDesc: ''
},
rules: {
loanNo: [{required: true, message: '请正确填写借款编号', trigger: 'blur'}],
derateAmt: [{required: true, message: '请输入减免金额', trigger: 'blur'}],
applyDesc: [{required: true, message: '请输入减免描述信息', trigger: 'blur'}],
},
loginName: '',
}
},
mounted() {
this.loginName = localStorage.getItem("loginName");
},
methods:{
/** 提交点击 */
createDerate() {
this.$refs['ruleForm'].validate((valid) => {
if (!valid) {
return false
}
this.$confirm('操作将创建减免单, 是否继续?', '提示', {
confirmButtonText: '确定',
cancelButtonText: '取消',
type: 'warning'
}).then(() => {
this.$$post(`/loan/createDerated`, {
loanNo: this.ruleForm.loanNo,
derateAmt: this.ruleForm.derateAmt,
applyDesc: this.ruleForm.applyDesc,
applyUser: this.loginName,
}).then(res => {
if (res.data.code != 200) {
this.$message.error(res.data.message);
return
}
this.$message({message: '提交成功!', type: 'success'});
setTimeout(() => {
window.location.reload();
}, 1500);
}).catch(err => {
this.$message.error("提交减免单失败!!!");
})
}).catch(() => {
this.$message({
type: 'info',
message: '已取消提交'
});
});
})
},
}
}
</script>
<style scoped>
</style>
\ No newline at end of file
<template>
<div class="page-risk-level-list">
<div class="search">
<block-header title="搜索"></block-header>
<el-form size="small" label-suffix=":" :inline="true" :model="form" class="form-inline">
<el-form-item label="风险等级">
<el-select clearable v-model="form.riskType">
<el-option
v-for="item in options"
:key="item.value"
:label="item.label"
:value="item.value">
</el-option>
</el-select>
</el-form-item>
<el-form-item label="选择时间">
<el-date-picker
clearable
v-model="form.time"
type="datetimerange"
start-placeholder="开始日期"
end-placeholder="结束日期"
value-format="yyyy-MM-dd HH:mm:ss"
:default-time="['12:00:00']">
</el-date-picker>
</el-form-item>
<el-form-item>
<el-button
type="primary"
@click="onSubmit"
>
查询
</el-button>
<!--<el-button type="default" @click="onReset">重置</el-button>-->
</el-form-item>
</el-form>
</div>
<div class="table">
<block-header title="客户列表"></block-header>
<el-table
border
size="mini"
:highlight-current-row="true"
:header-row-class-name="headerStyle"
:data="data"
stripe
style="width: 100%;">
<el-table-column align="center" prop="clientName" label="姓名"></el-table-column>
<el-table-column align="center" width="140" prop="riskGmtCreated" :formatter="dateFormats"
label="修改日期"></el-table-column>
<el-table-column align="center" prop="riskType" label="风险等级"></el-table-column>
<el-table-column align="center" prop="riskContent" label="风险描述"></el-table-column>
<el-table-column align="center" prop="memo" label="备注"></el-table-column>
</el-table>
</div>
<div class="pages">
<el-pagination
background
@current-change="handleChange"
:current-page="form.current"
:page-size="form.size"
layout="prev, pager, next"
:total="form.total">
</el-pagination>
</div>
</div>
</template>
<script>
import BlockHeader from "@/components/byh/componments/blockHeader";
import * as moment from "moment";
export default {
name: 'RiskInfo',
components: {
BlockHeader
},
data() {
return {
options: [
{
value: 'R1',
label: 'R1'
}, {
value: 'R2',
label: 'R2'
}, {
value: 'R3',
label: 'R3'
}, {
value: 'R4',
label: 'R4'
}
],
form: {
current: 1,
size: 10,
riskType: "",
certNo: "",
endDate: "",
startDate: "",
time: '',
total: 1
},
data: []
}
},
async created() {
await this.init()
},
methods: {
headerStyle() {
return "tableHeaderStyle";
},
async init() {
const form = this.form;
//delete form.time
const res = await this.$$post('/risk/getRiskLogPage', form);
const {success, result} = res.data;
if (success && result !== null) {
const {total, records} = result;
this.form.total = total;
this.data = records;
}
},
/*日期*/
dateFormats: function (row, column) {
let date = row[column.property]
if (date === undefined) {
return ''
}
return moment(date).format("YYYY-MM-DD HH:mm:ss")
},
handleClose() {
this.$emit("handleClose");
},
handleChange(e) {
this.form.current = e;
this.init();
},
onSubmit() {
const {time} = this.form;
if (time) {
this.form.startDate = time[0];
this.form.endDate = time[1];
} else {
this.form.startDate = '';
this.form.endDate = '';
}
this.init();
}
}
}
</script>
<style lang="less" scoped>
.table {
margin-bottom: 20px;
}
.pages {
display: flex;
align-items: center;
justify-content: center;
}
</style>
<template>
<el-dialog
class="client-data-dialog"
:title="title"
:visible.sync="dialogVisible"
:before-close="handleClose">
<el-form :model="ruleForm" :rules="rules" ref="ruleForm" label-width="80px" class="demo-ruleForm">
<el-form-item label="反馈类型" prop="feedType">
<el-select v-model="ruleForm.feedType" label="反馈类型" placeholder="请选择" style="width:80%">
<el-option
v-for="item in optionsFeedType"
:key="item.value"
:label="item.label"
:value="item.value">
</el-option>
</el-select>
</el-form-item>
<el-form-item label="反馈描述" prop="feedContent">
<el-input
type="textarea"
:rows="2"
placeholder="请输入反馈内容"
v-model="ruleForm.feedContent" style="width:80%">
</el-input>
</el-form-item>
<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-select>
</el-form-item>
<el-form-item label="创建人" prop="creater">
<p>{{ this.ruleForm.creater }}</p>
</el-form-item>
</el-form>
<div slot="footer" style="margin-right:30px">
<el-button @click="handleClose">取 消</el-button>
<el-button type="primary" @click="submitForm('ruleForm')">新 增</el-button>
</div>
</el-dialog>
</template>
<script type="text/ecmascript-6">
export default {
name: 'AddUserServiceDialog',
props: {
dialogVisible: {
type: Boolean,
required: true,
},
title: {
type: String,
required: true,
},
params: {
type: Object,
required: true
},
},
data() {
/*请选择功能点*/
const validatefeedType = (rule, value, callback) => {
if (!value) {
return callback(new Error('请选择反馈类型'));
}
};
/*请输入问题描述*/
const validatefeedStatus = (rule, value, callback) => {
if (!value) {
return callback(new Error('请选择反馈结果'));
}
};
const validatefeedContent = (rule, value, callback) => {
if (!value) {
return callback(new Error('请输入反馈问题描述'));
}
};
return {
ui: {
submitLoading: false
},
visible: this.$props.dialogVisible,
ruleForm: {
feedType: '',
feedStatus: '',
feedContent: '',
clientNo: '',
creater: ''
},
rules: {
feedType: [
{required: true, message: "请选择反馈类型", trigger: 'blur'}
],
feedStatus: [
{required: true, message: '请选择反馈结果', trigger: 'blur'}
],
feedContent: [
{required: true, message: '请输入反馈问题描述', trigger: 'blur'}
]
},
optionsStatus: [
{
value: 'YES',
label: '已解决'
},
{
value: 'NO',
label: '未解决'
}
],
optionsFeedType: [
{
value: '内部投诉',
label: '内部投诉'
},
{
value: '还款问题',
label: '还款问题'
},
{
value: '系统问题',
label: '系统问题'
},
{
value: '借款咨询',
label: '借款咨询'
},
{
value: '账户问题',
label: '账户问题'
},
{
value: '银行卡签约问题',
label: '银行卡签约问题'
},
{
value: '其它',
label: '其它'
}
],
}
},
created() {
const {clientNo} = this.params;
this.ruleForm = {
clientNo,
creater: localStorage.getItem("userName"),
}
},
methods: {
/** 提交点击 */
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.handleClose();
})
.catch(err => {
alert("error!")
})
})
},
/** 关闭处理 */
handleClose() {
this.$emit("handleClose");
//this.visible = false;
//setTimeout(() => {
// this.$emit('update:dialogVisible', false)
//}, 300);
}
},
}
</script>
<style>
</style>
......@@ -27,7 +27,7 @@
<el-row :gutter="20">
<el-col :span="8">
<div class="grid-content bg-purple">总费用:{{ this.ruleForm.allAmt }}</div>
<div class="grid-content bg-purple">还款本金:{{ this.ruleForm.principleAmt }}</div>
</el-col>
<el-col :span="8">
<div class="grid-content bg-purple">利息:{{ this.ruleForm.interestAmt }}</div>
......@@ -41,11 +41,14 @@
<el-col :span="8">
<div class="grid-content bg-purple">退款金额:{{ this.ruleForm.refundAmt }}</div>
</el-col>
<el-col :span="8">
<div class="grid-content bg-purple">罚息:{{ this.ruleForm.overdueAmt }}</div>
</el-col>
</el-row>
<br/>
<el-row :gutter="20">
<el-col :span="16">
<div class="grid-content bg-purple">计应还{{ this.ruleForm.settleAmt }}</div>
<div class="grid-content bg-purple">应还金额{{ this.ruleForm.settleAmt }}</div>
</el-col>
</el-row>
</div>
......
<template>
<el-dialog
width="70%"
class="client-data-dialog"
:title="title"
:visible.sync="dialogVisible"
:before-close="handleClose">
<div class="page-dialog">
<!--<block-header :title="title"></block-header>-->
<table class="table">
<tr>
<td>申请日期:</td>
<td>{{ loanModel.gmtCreated | dateFilter }}</td>
<td>放款日期:</td>
<td>{{ loanModel.raiseDate | dateFilter }}</td>
<td>项目名称:</td>
<td>{{ loanModel.bizTypeStr }}</td>
</tr>
<tr>
<td>总应还金额:</td>
<td>{{ loanModel.loanAmt }}</td>
<td>申请期数:</td>
<td>{{ loanModel.loanLimit }}</td>
<td>
<span v-if="loanModel.cardBankAccount">放款银行卡(所属银行):</span>
<span v-else>放款银行卡(所属银行)</span>
</td>
<td>
<span v-if="loanModel.cardBankAccount">{{ loanModel.cardBankAccount }}{{
loanModel.cardBankCodeStr
}}</span>
<span v-else>{{ loanModel.bankAccount }}</span>
</td>
</tr>
<tr>
<td>本金:</td>
<td>{{ loanModel.raiseAmt }}</td>
<td>总服务费:</td>
<td>{{ loanModel.serviceAmt }}</td>
<td>总利息:</td>
<td>{{ loanModel.rateAmt }}</td>
</tr>
<tr>
<td>总手续费:</td>
<td colspan="5">{{ loanModel.accountAmt }}</td>
</tr>
</table>
</div>
</el-dialog>
</template>
<script>
import BlockHeader from "@/components/byh/componments/blockHeader";
import * as moment from "moment";
export default {
name: 'AddUserServiceDialog',
components: {
BlockHeader
},
props: {
dialogVisible: {
type: Boolean,
required: true,
},
title: {
type: String,
required: true,
},
params: {
type: Object,
required: true
},
},
data() {
return {
loanModel: {}
}
},
filters: {
dateFilter: function (row) {
const exp = row;
if (!exp || typeof (exp) === undefined || typeof (exp) === null) {
return ''
}
return moment(exp).format("YYYY-MM-DD")
},
},
async created() {
const {loanNo} = this.params;
await this.init(loanNo)
},
methods: {
headerStyle() {
return "tableHeaderStyle";
},
async init(loanNo) {
const res = await this.$$get('/detail/customer/' + loanNo)
const {success, result} = res.data
if (success && result != null) {
const {applyVo} = result;
this.loanModel = applyVo
}
},
handleClose() {
this.$emit("handleClose");
}
}
}
</script>
<style>
</style>
<template>
<el-dialog
width="70%"
class="client-data-dialog"
:title="title"
:visible.sync="dialogVisible"
:before-close="handleClose">
<div class="page-dialog">
<block-header title="账单详情"/>
<div class="block-box">
<table class="table">
<tr>
<td>借款编号:</td>
<td>{{ advanceLoanAmt.loanNo }}</td>
<td>账单剩余应还:</td>
<td>{{ loanVo.surAmt }}</td>
</tr>
<tr>
<td>退款金额:</td>
<td>
<span v-if="loanVo.refundAmt !== null ">{{ loanVo.refundAmt }} ({{ loanVo.refundStatusDesc }})</span>
<span v-else>0</span>
</td>
<td>账单已还款:</td>
<td>{{ loanVo.alrAmt }}</td>
</tr>
<tr>
<td>操作:</td>
<td colspan="3">
<el-button type="primary" size="mini" @click="advanceLoanAmt()" v-if="isNeedAudit">线下结清</el-button>
<el-button type="primary" size="mini" @click="protocolSettleAll()">代扣结清</el-button>
</td>
</tr>
</table>
</div>
<div class="tables">
<block-header :title="title"></block-header>
<el-table
@filter-change="handleFilterChange"
border
size="mini"
:highlight-current-row="true"
:header-row-class-name="headerStyle"
:data="data"
stripe
style="width: 100%;">
<el-table-column align="center" prop="planNo" label="计划编号" width="135px"></el-table-column>
<el-table-column align="center" prop="planIndex" label="期数"></el-table-column>
<el-table-column align="center" prop="planAmt" width="85" label="应还总金额"></el-table-column>
<el-table-column align="center" prop="planBen" label="本金"></el-table-column>
<el-table-column align="center" prop="planFu" label="服务费"></el-table-column>
<el-table-column align="center" prop="planXi" label="利息"></el-table-column>
<el-table-column align="center" prop="planFa" label="计划罚息"></el-table-column>
<el-table-column align="center" prop="accountAmt" label="手续费"></el-table-column>
<el-table-column align="center" prop="planDate" width="120" label="计划还款时间" :formatter="dateFormats"></el-table-column>
<el-table-column align="center" prop="backedAmt" label="已还金额" :formatter="planMoneyFormat"></el-table-column>
<el-table-column align="center" prop="derateAmt" label="减免金额"></el-table-column>
<el-table-column align="center" prop="remainAmt" label="待还金额"></el-table-column>
<el-table-column align="center" prop="statusStr" label="还款状态"></el-table-column>
<el-table-column align="center" prop="gmtModified" width="120" label="结清时间" :formatter="dateFormats"></el-table-column>
<el-table-column fixed="right" align="center" width="120" label="操作">
<template slot-scope="scope">
<el-button type="text" size="small"
v-if=" scope.row.status !='SETTLED' && scope.row.backedSign == 'YES' "
@click="protocolOne(scope.row)">代扣
</el-button>
<el-button type="text" size="small" v-else disabled @click="protocolOne(scope.row)">代扣</el-button>
<el-button type="text" size="small"
v-if=" scope.row.status != 'SETTLED' && scope.row.backedSign == 'YES' "
@click="offineTransfer(scope.row)">线下转账
</el-button>
<el-button type="text" size="small" v-else disabled @click="offineTransfer(scope.row)">线下转账</el-button>
</template>
</el-table-column>
</el-table>
</div>
<div class="pages">
<el-pagination
background
@current-change="handleCurrentChange"
@size-change="handleSizeChange"
:current-page.sync="form.current"
:page-sizes="[10, 20, 50, 100]"
:page-size="form.size"
layout="total, sizes, prev, pager, next, jumper"
:total="form.total">
</el-pagination>
</div>
</div>
</el-dialog>
</template>
<script>
import BlockHeader from "@/components/byh/componments/blockHeader";
import * as moment from "moment";
export default {
name: 'RiskInfo',
components: {
BlockHeader
},
props: {
dialogVisible: {
type: Boolean,
required: true,
},
title: {
type: String,
required: true,
},
params: {
type: Object,
required: true
},
},
data() {
return {
tableStatus: [{text: '成功', value: "SUCCESS"}, {text: '失败', value: "FAIL"}],
form: {
total: 1,
current: 1,
size: 10,
},
advanceLoanAmt:{},
loanVo:{},
isNeedAudit:false,
data: []
}
},
async created() {
const params = this.params;
this.advanceLoanAmt.loanNo = params.applyVo.loanNo;
this.advanceLoanAmt.bizType = params.applyVo.bizType;
this.advanceLoanAmt.clientNo = params.applyVo.clientNo;
this.data = params.planVo;
//this.form.result = params.phoneNo;
//await this.init()
},
methods: {
headerStyle() {
return "tableHeaderStyle";
},
async init() {
const res = await this.$$post('/back/detailPageList', this.form);
const {success, result} = res.data;
if (success && result !== null) {
const {data, total} = result
this.data = data;
this.form.total = total;
}
},
// 计算小数
accAdd(arg1, arg2) {
let r1, r2, m;
try {
r1 = arg1.toString().split(".")[1].length
} catch (e) {
r1 = 0
}
try {
r2 = arg2.toString().split(".")[1].length
} catch (e) {
r2 = 0
}
m = Math.pow(10, Math.max(r1, r2))
return (arg1 * m + arg2 * m) / m
},
offineTransfer(record) {
// 取当前用户的信息
this.ui.offineTransfer = {
visible: true,
orderNo: this.loanModel.orderNo,
loanNo: this.loanModel.loanNo,
planNo: record.planNo,
periodNo: record.planIndex,
planAmt: record.planAmt,
planFu: record.planFu,
planBen: record.planBen,
planXi: record.planXi,
remainAmt: record.remainAmt,
accountAmt: record.accountAmt,
};
},
//代扣提前结清
protocolSettleAll() {
this.ui.protocolSettled = {
visible: true,
loanNo: this.loanModel.loanNo,
bizType: this.advanceLoanAmt.bizType,
clientNo: this.advanceLoanAmt.clientNo,
};
},
// 计算已还金额
planMoneyFormat: function (row, column) {
return this.accAdd(this.accAdd(this.accAdd(this.accAdd(this.accAdd(row.backedBen, row.backedFu), row.backedXi), row.backedFa), row.backedBurden), row.backedSpeaccount).toFixed(2)
},
// 还款结果
resultBankFormat: function (row, column) {
return row.resultStr + "(" + row.confirmDesc + ")";
},
//代扣当期
protocolOne(record) {
this.ui.protocolSettledOne = {
visible: true,
loanNo: this.loanModel.loanNo,
bizType: this.advanceLoanAmt.bizType,
clientNo: this.advanceLoanAmt.clientNo,
periodNo: record.planIndex,
remainAmt: record.remainAmt,
planAmt: record.planAmt,
};
},
// 合并日期
dateCompare: function (row, column) {
let date = row[column.property]
if (date === undefined) {
return ''
}
return moment(date).format("YYYY-MM-DD ") + row.backedTime
},
// 银行信息拼接
cardBankFormat: function (row, column) {
return row.cardBankAccount + "(" + row.cardBankName + ")";
},
/*日期*/
dateFormat: function (row, column) {
let date = row[column.property]
if (date === undefined) {
return ''
}
return moment(date).format("YYYY-MM-DD HH:mm:ss")
},
/*日期*/
dateFormats: function (row, column) {
let date = row[column.property]
if (date === undefined) {
return ''
}
return moment(date).format("YYYY-MM-DD")
},
handleClose() {
this.$emit("handleClose");
},
//客服状态
serviceFormat: function (row, column) {
let status = row['feedStatus'];
return this.$enumUtils.toMsg('FeedStatus', status);
},
handleCurrentChange(e) {
this.form.current = e;
this.init();
},
handleSizeChange(e) {
this.form.size = e
this.form.current = 1;
this.init();
},
//还款添加查询功能
handleFilterChange: function (filters, value) {
if (filters.status.length === 2) {
this.backValue = null
}
else {
this.backValue = filters.status[0]
}
this.loanBackedData(this.loanNos)
},
}
}
</script>
<style>
.tables{
margin-bottom: 20px;
}
.pages {
display: flex;
align-items: center;
justify-content: center;
}
</style>
<template>
<el-dialog
width="70%"
class="client-data-dialog"
:title="title"
:visible.sync="dialogVisible"
:before-close="handleClose">
<div class="page-dialog">
<block-header :title="title"></block-header>
<el-table
border
size="mini"
:highlight-current-row="true"
:header-row-class-name="headerStyle"
:data="data"
stripe
style="width: 100%;">
<el-table-column prop="contractName" align="center" label="合同类型"></el-table-column>
<el-table-column prop="contractUrl" align="center" label="下载">
<template slot-scope="scope">
<a :href="scope.row.contractUrl" target="_blank" class="buttonText">合同下载</a>
</template>
</el-table-column>
</el-table>
</div>
</el-dialog>
</template>
<script>
import BlockHeader from "@/components/byh/componments/blockHeader";
import * as moment from "moment";
export default {
name: 'RiskInfo',
components: {
BlockHeader
},
props: {
dialogVisible: {
type: Boolean,
required: true,
},
title: {
type: String,
required: true,
},
params: {
type: Object,
required: true
},
},
data() {
return {
form: {
current: 1,
size: 1000,
riskType: "",
certNo: "",
endDate: "",
startDate: ""
},
data: []
}
},
async created() {
const {loanNo} = this.params;
await this.init(loanNo)
},
methods: {
headerStyle() {
return "tableHeaderStyle";
},
async init(loanNo) {
const res = await this.$$get('/loan/contract?loanNo=' + loanNo);
const {success, result} = res.data;
if (success && result !== null) {
this.data = result.result;
}
},
handleClose() {
this.$emit("handleClose");
}
}
}
</script>
<style>
</style>
<template>
<el-dialog
width="70%"
class="client-data-dialog"
:title="title"
:visible.sync="dialogVisible"
:before-close="handleClose">
<div class="page-dialog">
<div class="tables">
<block-header :title="title"></block-header>
<el-table
border
size="mini"
:highlight-current-row="true"
:header-row-class-name="headerStyle"
:data="data"
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 label="操作">
<template slot-scope="scope">
<el-button type="text" size="small" @click="updateQueDialog(scope.row)">修改</el-button>
</template>
</el-table-column>
</el-table>
</div>
<div class="pages">
<el-pagination
background
@current-change="handleCurrentChange"
@size-change="handleSizeChange"
:current-page.sync="form.current"
:page-sizes="[10, 20, 50, 100]"
:page-size="form.size"
layout="total, sizes, prev, pager, next, jumper"
:total="form.total">
</el-pagination>
</div>
</div>
<updateQueDialog
v-if="updateQueDialog.visible"
:feedNo="updateQueDialog.feedNo"
:feedType="updateQueDialog.feedType"
:feedStatus="updateQueDialog.feedStatus"
:feedContent="updateQueDialog.feedContent"
:creater="updateQueDialog.creater"
:finishContent="updateQueDialog.finishContent"
:dialogVisible.sync="updateQueDialog.visible">
</updateQueDialog>
</el-dialog>
</template>
<script>
import BlockHeader from "@/components/byh/componments/blockHeader";
import * as moment from "moment";
export default {
name: 'RiskInfo',
components: {
BlockHeader
},
props: {
dialogVisible: {
type: Boolean,
required: true,
},
title: {
type: String,
required: true,
},
params: {
type: Object,
required: true
},
},
data() {
return {
form: {
total: 1,
current: 1,
size: 10,
},
updateQueDialog: {
visible: false,
feedNo: '',
feedType: '',
feedStatus: '',
feedContent: '',
clientNo: '',
creater: '',
finishContent: '',
},
data: []
}
},
async created() {
const params = this.params;
this.form.clientCell = params.phoneNo;
this.form.feedProduct = params.clientProductName;
this.form.feedSource = 'CUSTOMER';
this.form.sort = 'id desc';
await this.init()
},
methods: {
headerStyle() {
return "tableHeaderStyle";
},
async init() {
const res = await this.$$post('/feed/feedPageList', this.form);
const {success, result} = res.data;
if (success && result !== null) {
const {records, total} = result
this.data = records;
this.form.total = total;
}
},
/*日期*/
dateFormat: function (row, column) {
let date = row[column.property]
if (date === undefined) {
return ''
}
return moment(date).format("YYYY-MM-DD HH:mm:ss")
},
/*日期*/
dateFormats: function (row, column) {
let date = row[column.property]
if (date === undefined) {
return ''
}
return moment(date).format("YYYY-MM-DD")
},
handleClose() {
this.$emit("handleClose");
},
//客服状态
serviceFormat: function (row, column) {
let status = row['feedStatus'];
return this.$enumUtils.toMsg('FeedStatus', status);
},
handleCurrentChange(e) {
this.form.current = e;
this.init();
},
handleSizeChange(e) {
this.form.size = e
this.form.current = 1;
this.init();
},
// 修改用户的反馈问题
updateQueDialog(record) {
this.updateQueDialog = {
visible: true,
feedNo: record.feedNo,
feedType: record.feedType,
feedStatus: record.feedStatus,
feedContent: record.feedContent,
clientNo: record.clientNo,
creater: record.creater,
finishContent: record.finishContent,
};
},
}
}
</script>
<style>
.tables{
margin-bottom: 20px;
}
.pages {
display: flex;
align-items: center;
justify-content: center;
}
</style>
<template>
<el-dialog
width="70%"
class="client-data-dialog"
:title="title"
:visible.sync="dialogVisible"
:before-close="handleClose">
<div class="page-dialog">
<block-header title="借款信息"></block-header>
<el-table
border
size="mini"
:highlight-current-row="true"
:header-row-class-name="headerStyle"
:data="data" stripe style="width: 100%;">
<el-table-column align="center" width="140" prop="loanNo" label="借款编号"></el-table-column>
<el-table-column align="center" prop="gmtCreated" label="申请日期" :formatter="dateFormats"></el-table-column>
<el-table-column align="center" prop="startDate" label="放款日期" :formatter="dateFormats"></el-table-column>
<el-table-column align="center" prop="raiseAmt" label="放款本金"></el-table-column>
<el-table-column align="center" prop="capitalCode" label="放款资方" :formatter="capitalCodeFormat"></el-table-column>
<el-table-column align="center" prop="status" label="借款单状态" :formatter="loanStatusFormat"></el-table-column>
<el-table-column align="center" prop="cancelMemo" label="备注"></el-table-column>
<el-table-column align="center" label="查看详情">
<template slot-scope="scope">
<el-button type="text" size="small" @click="addLoanDetail(scope.row.loanNo)">详情</el-button>
</template>
</el-table-column>
</el-table>
</div>
</el-dialog>
</template>
<script>
import BlockHeader from "@/components/byh/componments/blockHeader";
import * as moment from "moment";
export default {
name: 'AddUserServiceDialog',
components: {
BlockHeader
},
props: {
dialogVisible: {
type: Boolean,
required: true,
},
title: {
type: String,
required: true,
},
params: {
type: Object,
required: true
},
},
data() {
return {
data: []
}
},
async created() {
const {clientNo} = this.params;
const res = await this.$$post('/loan/getLoanListByClientNo/' + clientNo);
const {success, result} = res.data;
if (success && result !== null) {
this.data = result;
}
},
methods: {
headerStyle() {
return "tableHeaderStyle";
},
capitalCodeFormat: function (row, column) {
let capitalCode = row['capitalCode'];
return this.$enumUtils.toMsg('CapitalEnums', capitalCode);
},
/*日期*/
dateFormats: function (row, column) {
let date = row[column.property]
if (date === undefined) {
return ''
}
return moment(date).format("YYYY-MM-DD")
},
handleClose() {
this.$emit("handleClose");
},
//根据借款信息查借款所有信息
addLoanDetail(record) {
this.isNeedAudit = true;
this.$$get('/detail/customer/' + record).then(res => {
if (res.data.code != 200) {
// this.isShow = false;
this.$message.error(res.data.message);
return
} else {
//打开借款的面板
this.activeNames = ['1', '2', '3', '4', '5', '8'];
//还款计划
if (res.data.result.planVo == null) {
this.loanApplyList = [];
this.isNeedAudit = false;
} else {
this.loanApplyList = res.data.result.planVo ? res.data.result.planVo : '';
this.advanceLoanAmt.loanNo = res.data.result.applyVo.loanNo;
this.advanceLoanAmt.bizType = res.data.result.applyVo.bizType;
this.advanceLoanAmt.clientNo = res.data.result.applyVo.clientNo;
this.clientNos = res.data.result.applyVo.clientNo;
this.loanNos = res.data.result.applyVo.loanNo;
}
//借款信息
if (res.data.result.loanVo == null) {
this.loanVo = [];
} else {
this.loanVo = res.data.result.loanVo ? res.data.result.loanVo : '';
}
//借款信息放款信息
this.loanModel = res.data.result.applyVo ? res.data.result.applyVo : '';
//还款信息
this.loanBackedData(res.data.result.applyVo.loanNo);
//合同列表
this.contractData(res.data.result.applyVo.loanNo);
}
//操作信息
this.clientDailyInfo(res.data.result.applyVo.clientNo);
}).catch(error => {
this.$message.error(error || '网络异常,请稍后。。。');
});
},
}
}
</script>
<style>
</style>
<template>
<el-dialog
width="70%"
class="client-data-dialog"
:title="title"
:visible.sync="dialogVisible"
:before-close="handleClose">
<div class="page-dialog">
<div class="tables">
<block-header :title="title"></block-header>
<el-table
border
size="mini"
:highlight-current-row="true"
:header-row-class-name="headerStyle"
:data="data"
stripe
style="width: 100%;">
<el-table-column align="center" prop="typeStr" label="操作类型"></el-table-column>
<el-table-column align="center" prop="gmtCreated" label="操作时间" :formatter="dateFormat"></el-table-column>
<el-table-column align="center" prop="memo" label="备注"></el-table-column>
</el-table>
</div>
<div class="pages">
<el-pagination
background
@current-change="handleCurrentChange"
@size-change="handleSizeChange"
:current-page.sync="form.current"
:page-sizes="[10, 20, 50, 100]"
:page-size="form.size"
layout="total, sizes, prev, pager, next, jumper"
:total="form.total">
</el-pagination>
</div>
</div>
</el-dialog>
</template>
<script>
import BlockHeader from "@/components/byh/componments/blockHeader";
import * as moment from "moment";
export default {
name: 'RiskInfo',
components: {
BlockHeader
},
props: {
dialogVisible: {
type: Boolean,
required: true,
},
title: {
type: String,
required: true,
},
params: {
type: Object,
required: true
},
},
data() {
return {
form: {
total: 1,
current: 1,
size: 10,
},
data: []
}
},
async created() {
const params = this.params;
this.form.clientNo = params.clientNo;
await this.init()
},
methods: {
headerStyle() {
return "tableHeaderStyle";
},
async init() {
const res = await this.$$post('/detail/getDaily', this.form);
const {success, result} = res.data;
if (success && result !== null) {
const {data, total} = result
this.data = data;
this.form.total = total;
}
},
/*日期*/
dateFormat: function (row, column) {
let date = row[column.property]
if (date === undefined) {
return ''
}
return moment(date).format("YYYY-MM-DD HH:mm:ss")
},
/*日期*/
dateFormats: function (row, column) {
let date = row[column.property]
if (date === undefined) {
return ''
}
return moment(date).format("YYYY-MM-DD")
},
handleClose() {
this.$emit("handleClose");
},
//客服状态
serviceFormat: function (row, column) {
let status = row['feedStatus'];
return this.$enumUtils.toMsg('FeedStatus', status);
},
handleCurrentChange(e) {
this.form.current = e;
this.init();
},
handleSizeChange(e) {
this.form.size = e
this.form.current = 1;
this.init();
}
}
}
</script>
<style>
.tables{
margin-bottom: 20px;
}
.pages {
display: flex;
align-items: center;
justify-content: center;
}
</style>
......@@ -24,7 +24,7 @@
<el-row :gutter="20">
<el-col :span="8">
<div class="grid-content bg-purple">总费用:{{ this.ruleForm.allAmt }}</div>
<div class="grid-content bg-purple">还款本金:{{ this.ruleForm.principleAmt }}</div>
</el-col>
<el-col :span="8">
<div class="grid-content bg-purple">利息:{{ this.ruleForm.interestAmt }}</div>
......@@ -38,11 +38,14 @@
<el-col :span="8">
<div class="grid-content bg-purple">退款金额:{{ this.ruleForm.refundAmt }}</div>
</el-col>
<el-col :span="8">
<div class="grid-content bg-purple">罚息:{{ this.ruleForm.overdueAmt }}</div>
</el-col>
</el-row>
<br/>
<el-row :gutter="20">
<el-col :span="16">
<div class="grid-content bg-purple">计应还{{ this.ruleForm.settleAmt }}</div>
<div class="grid-content bg-purple">应还金额{{ this.ruleForm.settleAmt }}</div>
</el-col>
</el-row>
</div>
......
<template>
<el-dialog
width="70%"
class="client-data-dialog"
:title="title"
:visible.sync="dialogVisible"
:before-close="handleClose">
<div class="page-dialog">
<div class="tables">
<block-header :title="title"></block-header>
<el-table
@filter-change="handleFilterChange"
border
size="mini"
:highlight-current-row="true"
:header-row-class-name="headerStyle"
:data="data"
stripe
style="width: 100%;">
<el-table-column align="center" prop="backedNo" label="还款编号"></el-table-column>
<el-table-column align="center" prop="planIndex" label="期数"></el-table-column>
<el-table-column align="center" prop="backedAmt" label="还款金额"></el-table-column>
<el-table-column align="center" prop="backedTypeStr" label="还款方式"></el-table-column>
<el-table-column align="center" prop="statusStr" label="还款单状态"></el-table-column>
<el-table-column align="center" prop="cardOwnerName" label="银行账号户主名称"></el-table-column>
<el-table-column align="center" prop="cardOwnerMobile" label="银行账号户主电话"></el-table-column>
<el-table-column align="center" prop="cardBankAccount" label="银行账号" :formatter="cardBankFormat"></el-table-column>
<el-table-column align="center" prop="bankAccount" label="还款银行账号"></el-table-column>
<el-table-column align="center" prop="bankOwner" label="还款银行账户"></el-table-column>
<el-table-column align="center" prop="backedDate" label="还款时间" :formatter="dateCompare"></el-table-column>
<el-table-column align="center" prop="resultStr" label="还款结果" width="100" :formatter="resultBankFormat"
:filters="tableStatus"
column-key="status"
>
</el-table-column>
<el-table-column align="center" prop="creator" label="创建人"></el-table-column>
<el-table-column align="center" prop="memo" label="备注"></el-table-column>
</el-table>
</div>
<div class="pages">
<el-pagination
background
@current-change="handleCurrentChange"
@size-change="handleSizeChange"
:current-page.sync="form.current"
:page-sizes="[10, 20, 50, 100]"
:page-size="form.size"
layout="total, sizes, prev, pager, next, jumper"
:total="form.total">
</el-pagination>
</div>
</div>
</el-dialog>
</template>
<script>
import BlockHeader from "@/components/byh/componments/blockHeader";
import * as moment from "moment";
export default {
name: 'RiskInfo',
components: {
BlockHeader
},
props: {
dialogVisible: {
type: Boolean,
required: true,
},
title: {
type: String,
required: true,
},
params: {
type: Object,
required: true
},
},
data() {
return {
tableStatus: [{text: '成功', value: "SUCCESS"}, {text: '失败', value: "FAIL"}],
form: {
total: 1,
current: 1,
size: 10,
},
updateQueDialog: {
visible: false,
feedNo: '',
feedType: '',
feedStatus: '',
feedContent: '',
clientNo: '',
creater: '',
finishContent: '',
},
data: []
}
},
async created() {
const params = this.params;
console.log(params,'哈哈')
this.form.bizNo = params.firstLoanNo;
//this.form.result = params.phoneNo;
await this.init()
},
methods: {
headerStyle() {
return "tableHeaderStyle";
},
async init() {
const res = await this.$$post('/back/detailPageList', this.form);
const {success, result} = res.data;
if (success && result !== null) {
const {data, total} = result
this.data = data;
this.form.total = total;
}
},
// 还款结果
resultBankFormat: function (row, column) {
return row.resultStr + "(" + row.confirmDesc + ")";
},
// 合并日期
dateCompare: function (row, column) {
let date = row[column.property]
if (date === undefined) {
return ''
}
return moment(date).format("YYYY-MM-DD ") + row.backedTime
},
// 银行信息拼接
cardBankFormat: function (row, column) {
return row.cardBankAccount + "(" + row.cardBankName + ")";
},
/*日期*/
dateFormat: function (row, column) {
let date = row[column.property]
if (date === undefined) {
return ''
}
return moment(date).format("YYYY-MM-DD HH:mm:ss")
},
/*日期*/
dateFormats: function (row, column) {
let date = row[column.property]
if (date === undefined) {
return ''
}
return moment(date).format("YYYY-MM-DD")
},
handleClose() {
this.$emit("handleClose");
},
//客服状态
serviceFormat: function (row, column) {
let status = row['feedStatus'];
return this.$enumUtils.toMsg('FeedStatus', status);
},
handleCurrentChange(e) {
this.form.current = e;
this.init();
},
handleSizeChange(e) {
this.form.size = e
this.form.current = 1;
this.init();
},
//还款添加查询功能
handleFilterChange: function (filters, value) {
if (filters.status.length === 2) {
this.backValue = null
}
else {
this.backValue = filters.status[0]
}
this.loanBackedData(this.loanNos)
},
}
}
</script>
<style>
.tables{
margin-bottom: 20px;
}
.pages {
display: flex;
align-items: center;
justify-content: center;
}
</style>
<template>
<el-dialog
width="70%"
class="client-data-dialog"
:title="title"
:visible.sync="dialogVisible"
:before-close="handleClose">
<div class="page-dialog">
<block-header :title="title"></block-header>
<el-table
border
size="mini"
:highlight-current-row="true"
:header-row-class-name="headerStyle"
:data="data"
stripe
style="width: 100%;">
<el-table-column align="center" prop="clientName" label="姓名"></el-table-column>
<el-table-column align="center" width="140" prop="riskGmtCreated" :formatter="dateFormats" label="修改日期"></el-table-column>
<el-table-column align="center" prop="riskType" label="风险等级" ></el-table-column>
<el-table-column align="center" prop="riskContent" label="风险描述" ></el-table-column>
<el-table-column align="center" prop="memo" label="备注"></el-table-column>
</el-table>
</div>
</el-dialog>
</template>
<script>
import BlockHeader from "@/components/byh/componments/blockHeader";
import * as moment from "moment";
export default {
name: 'RiskInfo',
components: {
BlockHeader
},
props: {
dialogVisible: {
type: Boolean,
required: true,
},
title: {
type: String,
required: true,
},
params: {
type: Object,
required: true
},
},
data() {
return {
form: {
current: 1,
size: 1000,
riskType: "",
certNo: "",
endDate: "",
startDate: ""
},
data: []
}
},
async created() {
const params = this.params;
this.form.certNo = params.idCard;
await this.init()
},
methods: {
headerStyle() {
return "tableHeaderStyle";
},
async init() {
const res = await this.$$post('/risk/getRiskLogPage', this.form);
const {success, result} = res.data;
if (success && result !== null) {
this.data = result.records;
}
},
/*日期*/
dateFormats: function (row, column) {
let date = row[column.property]
if (date === undefined) {
return ''
}
return moment(date).format("YYYY-MM-DD")
},
handleClose() {
this.$emit("handleClose");
}
}
}
</script>
<style>
</style>
<template>
<el-dialog
width="70%"
class="client-data-dialog"
:title="title"
:visible.sync="dialogVisible"
:before-close="handleClose">
<div class="page-dialog">
<div class="tables">
<block-header :title="title"></block-header>
<el-table
border
size="mini"
:highlight-current-row="true"
:header-row-class-name="headerStyle"
:data="data"
stripe
style="width: 100%;">
<el-table-column align="center" prop="collectContact.contactMobile" label="联系人手机号"></el-table-column>
<el-table-column align="center" prop="collectContact.contactName" label="联系人姓名"></el-table-column>
<el-table-column align="center" prop="collectContact.contactRelation" label="联系人关系"></el-table-column>
<el-table-column align="center" prop="collectContact.overdueDay" label="逾期天数"></el-table-column>
<el-table-column align="center" prop="collectContact.state" label="状态" :formatter="collectStatueFormat"></el-table-column>
<el-table-column align="center" width="150" prop="collectContact.created" label="联系时间"
:formatter="collectDateFormat"></el-table-column>
<el-table-column align="center" prop="collectContact.resultType" label="结果"
:formatter="collectResultFormat"></el-table-column>
<el-table-column align="center" prop="collectContact.callSeconds" label="语音时长"
:formatter="formatSeconds"></el-table-column>
<el-table-column align="center" prop="collectContact.record" label="催记"></el-table-column>
</el-table>
</div>
<div class="pages">
<el-pagination
background
@current-change="handleCurrentChange"
@size-change="handleSizeChange"
:current-page.sync="form.current"
:page-sizes="[10, 20, 50, 100]"
:page-size="form.size"
layout="total, sizes, prev, pager, next, jumper"
:total="form.total">
</el-pagination>
</div>
</div>
</el-dialog>
</template>
<script>
import BlockHeader from "@/components/byh/componments/blockHeader";
import * as moment from "moment";
export default {
name: 'UrgeList',
components: {
BlockHeader
},
props: {
dialogVisible: {
type: Boolean,
required: true,
},
title: {
type: String,
required: true,
},
params: {
type: Object,
required: true
},
},
data() {
return {
form: {
total: 1,
current: 1,
size: 10,
},
updateQueDialog: {
visible: false,
feedNo: '',
feedType: '',
feedStatus: '',
feedContent: '',
clientNo: '',
creater: '',
finishContent: '',
},
data: []
}
},
async created() {
const params = this.params;
this.form.clientCell = params.phoneNo;
//this.form.feedProduct = params.clientProductName;
this.form.feedProduct = 'GXD';
this.form.feedSource = 'COLLECT';
this.form.sort = 'id desc';
await this.init()
},
methods: {
headerStyle() {
return "tableHeaderStyle";
},
async init() {
const res = await this.$$post('/feed/feedPageList', this.form);
const {success, result} = res.data;
if (success && result !== null) {
const {records, total} = result
this.data = records;
this.form.total = total;
}
},
collectStatueFormat: function (row, column) {
let status = row.collectContact.state;
if (status == null || status === '' || status === undefined) {
return ''
}
return this.$enumUtils.toMsg('CollectFeedStatue', status);
},
/*日期*/
dateFormat: function (row, column) {
let date = row[column.property]
if (date === undefined) {
return ''
}
return moment(date).format("YYYY-MM-DD HH:mm:ss")
},
collectDateFormat: function (row, column) {
let date = row.collectContact.created;
if (date === undefined || date == null) {
return ''
}
return moment(date).format("YYYY-MM-DD HH:mm:ss")
},
collectResultFormat: function (row, column) {
let resultType = row.collectContact.resultType;
if (resultType == null || resultType == '' || resultType == undefined) {
return ''
}
return this.$enumUtils.toMsg('CollectFeedResult', resultType);
},
/*日期*/
dateFormats: function (row, column) {
let date = row[column.property]
if (date === undefined) {
return ''
}
return moment(date).format("YYYY-MM-DD")
},
handleClose() {
this.$emit("handleClose");
},
//客服状态
serviceFormat: function (row, column) {
let status = row['feedStatus'];
return this.$enumUtils.toMsg('FeedStatus', status);
},
handleCurrentChange(e) {
this.form.current = e;
this.init();
},
handleSizeChange(e) {
this.form.size = e
this.form.current = 1;
this.init();
},
formatSeconds: function (row, column) {
let callSeconds = row.collectContact.callSeconds;
if (callSeconds == null || callSeconds == '' || callSeconds == undefined) {
return ''
}
let theTime = parseInt(callSeconds);// 秒
let middle = 0;// 分
let hour = 0;// 小时
if (theTime > 60) {
middle = parseInt(theTime / 60);
theTime = parseInt(theTime % 60);
if (middle > 60) {
hour = parseInt(middle / 60);
middle = parseInt(middle % 60);
}
}
let result = "" + parseInt(theTime) + "秒";
if (middle > 0) {
result = "" + parseInt(middle) + "分" + result;
}
if (hour > 0) {
result = "" + parseInt(hour) + "小时" + result;
}
return result;
},
}
}
</script>
<style scoped>
.tables{
margin-bottom: 20px;
}
.pages {
display: flex;
align-items: center;
justify-content: center;
}
</style>
<template>
<!--页头-->
<div class="block-header">
<div class="b-header-inner">
<h3>{{ title }}</h3>
</div>
</div>
</template>
<script>
export default {
name:"BlockHeader",
props: ['title']
}
</script>
<style lang="less" scoped>
.block-header {
display: flex;
justify-content: flex-start;
align-content: center;
padding: 10px 12px;
min-height: 40px;
box-sizing: border-box;
margin-bottom: 16px;
background: #f7f8fa;
}
.b-header-inner {
display: flex;
align-items: center;
}
.b-header-inner::before {
content: "";
background-color: #155bd4;
width: 3px;
height: 14px;
margin-right: 8px;
}
.b-header-inner h3 {
font-size: 14px;
line-height: 20px;
color: #323233;
font-weight: 500;
margin: 0;
padding: 0;
}
</style>
<template>
<el-dialog
:title="title"
size="30%"
:visible.sync="dialogVisible"
:before-close="handleClose">
<div class="page">
<el-form
style="max-width: 400px;"
size="small"
ref="pubForm"
label-position="right"
label-width="140px"
label-suffix=":"
:rules="rules"
:model="form"
class="search-form">
<el-form-item prop="awardInterval" label="奖励间隔">
<el-input v-model="form.awardInterval"></el-input>
</el-form-item>
<el-form-item prop="dayMaxPoint" label="单日最大奖励值">
<el-input v-model="form.dayMaxPoint"></el-input>
</el-form-item>
<el-form-item prop="dayMaxTimes" label="单日最大奖励次数">
<el-input v-model="form.dayMaxTimes"></el-input>
</el-form-item>
<template v-if="form.limitId">
<el-form-item prop="status" label="状态">
<el-switch active-value="ENABLED" inactive-value="UNENABLED" v-model="form.status"></el-switch>
</el-form-item>
</template>
<el-form-item label="描述">
<el-input type="textarea" :rows="3" v-model="form.memo"></el-input>
</el-form-item>
</el-form>
</div>
<div slot="footer" class="dialog-footer">
<el-button @click="handleClose">取 消</el-button>
<el-button type="primary" @click="onSubmit('pubForm')">确 定</el-button>
</div>
</el-dialog>
</template>
<script>
import API from "@/api/delivery";
import BlockHeader from "@/components/block-header";
export default {
name: "CardNew",
components: {
BlockHeader
},
props: {
title: {
type: String,
required: true
},
items: {
type: Object,
required: false
},
dialogVisible: {
type: Boolean,
required: true
}
},
data() {
return {
item: null,
detail: {},
rules: {
awardInterval: [
{ required: true, message: "请输入奖励间隔", trigger: "blur" },
{
validator: (rule, value, callback) => {
const reg = /^\d+$/;
if (!reg.test(value)) {
callback(new Error("请输入数字"));
} else {
callback();
}
},
trigger: "blur"
}
],
dayMaxPoint: [
{ required: true, message: "请输入单日最大奖励值", trigger: "blur" },
{
validator: (rule, value, callback) => {
const reg = /^\d+$/;
if (!reg.test(value)) {
callback(new Error("请输入数字"));
} else {
callback();
}
},
trigger: "blur"
}
],
dayMaxTimes: [
{ required: true, message: "请输入单日最大奖励次数", trigger: "blur" },
{
validator: (rule, value, callback) => {
const reg = /^\d+$/;
if (!reg.test(value)) {
callback(new Error("请输入数字"));
} else {
callback();
}
},
trigger: "blur"
}
],
status: [
{ required: true, message: "请选择状态", trigger: "blur" }
]
},
form: {
awardType: "TaiPoint",
awardInterval: "",
dayMaxPoint: "",
dayMaxTimes: "",
memo: "",
status: ""
}
};
},
async mounted() {
if (this.items) {
const items = this.items;
this.form = items;
this.form.limitId = items.id;
}
},
methods: {
headerStyle() {
return "tableHeaderStyle";
},
handleClose() {
this.$emit("handleClose");
},
async onSubmit(formName) {
this.$refs[formName].validate(async (valid) => {
if (valid) {
let result;
if (this.items) {
result = await API.editDeliveryAwardLimit({
...this.form
});
} else {
result = await API.addDeliveryAwardLimit({
...this.form
});
}
if (result.status === 200) {
this.$message.success("保存成功");
this.handleClose();
this.$emit("callback");
}
}
});
}
}
};
</script>
......@@ -8,6 +8,7 @@ import VueIconFont from 'vue-iconfont'
import ElementUI from 'element-ui'
import 'normalize.css'
import 'element-ui/lib/theme-chalk/index.css'
import '@/styles/layout.less'
import App from './App.vue'
/* 系统内公共样式 */
......
......@@ -18,7 +18,7 @@ import {
ByhLoanBackedDetails,
ByhLoanSnapList,
ServiceProblem,
ClientManagerment
ClientManagerment, DerateCreate
} from './routes'
Vue.use(Router)
......@@ -131,6 +131,19 @@ export default new Router({
filter: true
}
},
{
path: '/byh/DerateCreate',
name: 'DerateCreate',
component: DerateCreate,
meta: {title: '减免单管理', filter: true}
},
{
path: '/byh/RiskLevelList',
name: 'RiskLevelList',
component: resolve => require(['../components/byh/RiskLevelList.vue'], resolve),
meta: {title: '风险客户', filter: true}
},
]
}
]
......
......@@ -26,6 +26,7 @@ export const ByhLoanBackedDetails = resolve => require(['../components/byh/ByhLo
// 临时放款
export const ByhLoanSnapList = resolve => require(['../components/byh/ByhLoanSnapList.vue'], resolve)
export const Controlswitch = resolve => require(['../components/byh/Controlswitch.vue'], resolve)
export const DerateCreate = resolve => require(['../components/byh/DerateCreate.vue'], resolve)
export default {
Login,
......@@ -50,5 +51,6 @@ export default {
ByhApplyMoney,
//客户管理
ClientManagerment,
Controlswitch
Controlswitch,
DerateCreate
}
// 为table 添加标头
.tableHeaderStyle {
background: #FAFBFC !important;
th {
background: #FAFBFC !important;
padding: 8px 0 !important;
color: #666;
}
}
......@@ -9,130 +9,133 @@ import Cookies from 'js-cookie'
axios.defaults.baseURL = window.APIHOST
/* 所有ajax请求拦截 */
axios.interceptors.request.use(function (req) {
const token = Cookies.get('x-auth-token')
if (token) {
req.headers['X-Auth-Token'] = token
// req.headers['token'] = localStorage.getItem("token_xxx")
}
// 在发送请求之前做些什么
return req
const token = Cookies.get('x-auth-token')
if (token) {
req.headers['X-Auth-Token'] = token
// req.headers['token'] = localStorage.getItem("token_xxx")
}
// 在发送请求之前做些什么
return req
}, function (error) {
// 对请求错误做些什么
return Promise.reject(error)
// 对请求错误做些什么
return Promise.reject(error)
})
/* 所有ajax响应拦截 */
axios.interceptors.response.use(
res => {
const token = res.headers['x-auth-token']
token && Cookies.set('x-auth-token', token)
return res
},
error => {
return Promise.reject(error)
}
res => {
const token = res.headers['x-auth-token']
token && Cookies.set('x-auth-token', token)
if (res.status !== 200) {
throw new Error(res)
}
return res
},
error => {
return Promise.reject(error)
}
)
const Ajax = {
install (Vue) {
const $$get = (url, data) => {
if (data !== undefined) {
let b = true
for (const key in data) {
if (data[key] === null) {
continue
}
if (b) {
url += `?${key}=${data[key]}`
b = !b
} else {
url += `&${key}=${data[key]}`
}
}
}
install(Vue) {
const $$get = (url, data) => {
if (data !== undefined) {
let b = true
for (const key in data) {
if (data[key] === null) {
continue
}
if (b) {
url += `?${key}=${data[key]}`
b = !b
} else {
url += `&${key}=${data[key]}`
}
}
}
return new Promise((resolve, reject) => {
axios.get(url)
.then(res => {
resolve(res)
})
.catch((err) => {
reject(err)
})
})
}
return new Promise((resolve, reject) => {
axios.get(url)
.then(res => {
resolve(res)
})
.catch((err) => {
reject(err)
})
})
}
const $$post = (url, data) => {
return new Promise((resolve, reject) => {
axios.post(url, data)
.then(res => {
resolve(res)
})
.catch((err) => {
reject(err)
})
})
}
const $$post = (url, data) => {
return new Promise((resolve, reject) => {
axios.post(url, data)
.then(res => {
resolve(res)
})
.catch((err) => {
reject(err)
})
})
}
const $$put = (url, data) => {
return new Promise((resolve, reject) => {
axios.put(url, data)
.then(res => {
resolve(res)
})
.catch((err) => {
reject(err)
})
})
}
const $$put = (url, data) => {
return new Promise((resolve, reject) => {
axios.put(url, data)
.then(res => {
resolve(res)
})
.catch((err) => {
reject(err)
})
})
}
const $$patch = (url, data) => {
return new Promise((resolve, reject) => {
axios.patch(url, qs.stringify(data))
.then(res => {
resolve(res)
})
.catch((err) => {
reject(err)
})
})
}
const $$patch = (url, data) => {
return new Promise((resolve, reject) => {
axios.patch(url, qs.stringify(data))
.then(res => {
resolve(res)
})
.catch((err) => {
reject(err)
})
})
}
const $$delete = (url, data) => {
if (data !== undefined) {
let b = true
for (const key in data) {
if (data[key] === null) {
continue
}
if (b) {
url += `?${key}=${data[key]}`
b = !b
} else {
url += `&${key}=${data[key]}`
}
}
}
const $$delete = (url, data) => {
if (data !== undefined) {
let b = true
for (const key in data) {
if (data[key] === null) {
continue
}
if (b) {
url += `?${key}=${data[key]}`
b = !b
} else {
url += `&${key}=${data[key]}`
}
}
}
return new Promise((resolve, reject) => {
axios.delete(url)
.then(res => {
resolve(res)
})
.catch((err) => {
reject(err)
})
})
}
return new Promise((resolve, reject) => {
axios.delete(url)
.then(res => {
resolve(res)
})
.catch((err) => {
reject(err)
})
})
}
Vue.prototype.$$ajax = axios
Vue.prototype.$$get = $$get
Vue.prototype.$$post = $$post
Vue.prototype.$$put = $$put
Vue.prototype.$$patch = $$patch
Vue.prototype.$$delete = $$delete
}
Vue.prototype.$$ajax = axios
Vue.prototype.$$get = $$get
Vue.prototype.$$post = $$post
Vue.prototype.$$put = $$put
Vue.prototype.$$patch = $$patch
Vue.prototype.$$delete = $$delete
}
}
export default Ajax
This diff is collapsed.
......@@ -8,24 +8,24 @@ const permissionUtils = {
Vue.prototype.$permissionUtils = {
btnPermission(code) {
if (localStorage.getItem('btnPermission') == null || localStorage.getItem('btnPermission') == '') {
if (localStorage.getItem('btnPermission') == null || localStorage.getItem('btnPermission') === '') {
return false
}
var btnPerList = localStorage.getItem('btnPermission').split(",");
for (var num in btnPerList) {
if (code == btnPerList[num]) {
if (code === btnPerList[num]) {
return true
}
}
return false
},
menuPermission(code) {
if (localStorage.getItem('menuPermission') == null || localStorage.getItem('menuPermission') == '') {
if (localStorage.getItem('menuPermission') == null || localStorage.getItem('menuPermission') === '') {
return false
}
var menuPerList = localStorage.getItem('menuPermission').split(",");
for (var num in menuPerList) {
const menuPerList = localStorage.getItem('menuPermission').split(",");
for (const num in menuPerList) {
if (code == menuPerList[num]) {
return true
}
......@@ -34,12 +34,12 @@ const permissionUtils = {
},
rolePermission(code) {
if (localStorage.getItem('userRole') == null || localStorage.getItem('userRole') == '') {
if (localStorage.getItem('userRole') == null || localStorage.getItem('userRole') === '') {
return false
}
var rolePerList = localStorage.getItem('userRole').split(",");
for (var num in rolePerList) {
const rolePerList = localStorage.getItem('userRole').split(",");
for (const num in rolePerList) {
if (code == rolePerList[num]) {
return true
}
......
This diff is collapsed.
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