Commit ef70a454 authored by caimeng's avatar caimeng

保存提交 迁移了文件

parent ff70165f
BASE_URL='' BASE_URL=''
VUE_APP_API_PATH=http://114.55.246.69:8785 VUE_APP_API=https://apimanager.feiyiyc.com
VUE_APP_API_PATH=https://apimanager.feiyiyc.com
NODE_ENV=development NODE_ENV=development
BASE_URL='' BASE_URL=''
VUE_APP_API_PATH=https://aphrodite-admin.rockstect.net VUE_APP_API=https://apimanager.feiyiyc.com
VUE_APP_API_PATH=https://apimanager.feiyiyc.com
NODE_ENV=production NODE_ENV=production
public/favicon.png

13.1 KB | W: | H:

public/favicon.png

2.16 KB | W: | H:

public/favicon.png
public/favicon.png
public/favicon.png
public/favicon.png
  • 2-up
  • Swipe
  • Onion skin
...@@ -702,3 +702,29 @@ ...@@ -702,3 +702,29 @@
height: 100%; height: 100%;
overflow-x: hidden !important; overflow-x: hidden !important;
} }
// 表格样式
.table {
width: 100%;
color: #666;
border-collapse: collapse;
background-color: #fff;
td {
position: relative;
padding: 9px 15px;
overflow: hidden;
font-size: 14px;
line-height: 20px;
text-overflow: ellipsis;
white-space: nowrap;
border: 1px solid #e6e6e6;
&:nth-child(odd) {
width: 15%;
text-align: right;
background-color: #f7f7f7;
}
}
}
...@@ -38,7 +38,6 @@ ...@@ -38,7 +38,6 @@
<el-descriptions-item label-class-name='labelCls' label='紧急联系人姓名'> <el-descriptions-item label-class-name='labelCls' label='紧急联系人姓名'>
<span>{{ baseInfo.firstName }}</span> <span>{{ baseInfo.firstName }}</span>
<el-button size='mini' v-if='!page' @click='handleContact' style='margin-left: 10px' type='text'>查看更多</el-button>
</el-descriptions-item> </el-descriptions-item>
<el-descriptions-item label-class-name='labelCls' label='紧急联系人关系'>{{ baseInfo.firstRelationStr }} <el-descriptions-item label-class-name='labelCls' label='紧急联系人关系'>{{ baseInfo.firstRelationStr }}
</el-descriptions-item> </el-descriptions-item>
...@@ -86,28 +85,6 @@ ...@@ -86,28 +85,6 @@
} }
}, },
methods: { methods: {
handleContact() {
const { creditNo, creditType } = this.baseInfo
let routeUrl = this.$router.resolve({
path: '/contact',
query: {
creditNo,
creditType
}
})
window.open(routeUrl.href, '_blank')
//this.$router.push({
// path: '/credit/contact',
// query: {
// creditNo,
// creditType
// }
//});
}
} }
} }
</script> </script>
......
...@@ -351,7 +351,7 @@ export default { ...@@ -351,7 +351,7 @@ export default {
.custom-table-checkbox { .custom-table-checkbox {
.el-checkbox { .el-checkbox {
display: block !important; display: block !important;
margin: 0 0 $base-padding/4 0; margin: 0 0 calc($base-padding/4) 0;
} }
} }
......
...@@ -8,10 +8,17 @@ import Minix from '@/minix/index' ...@@ -8,10 +8,17 @@ import Minix from '@/minix/index'
import '@/assets/common.scss' import '@/assets/common.scss'
import enumopt from './utils/enumOpt'
import filter from './utils/filter'
import permission from './utils/permission'
import ajax from './utils/ajax'
// 全局混入 // 全局混入
Vue.mixin(Minix); Vue.mixin(Minix);
Vue.use(ajax)
Vue.use(enumopt)
Vue.use(filter)
Vue.use(permission)
Vue.config.productionTip = false Vue.config.productionTip = false
new Vue({ new Vue({
......
...@@ -17,7 +17,6 @@ import LocalLog from '@/components/local-log' ...@@ -17,7 +17,6 @@ import LocalLog from '@/components/local-log'
import Report from "@/components/report"; import Report from "@/components/report";
import NoData from '@/components/NoData'; import NoData from '@/components/NoData';
import moment from 'moment' import moment from 'moment'
...@@ -46,7 +45,7 @@ export default { ...@@ -46,7 +45,7 @@ export default {
NoData, NoData,
'el-image-viewer': () => import('element-ui/packages/image/src/image-viewer') 'el-image-viewer': () => import('element-ui/packages/image/src/image-viewer')
}, },
data(){ data() {
return { return {
CS: { CS: {
//'text-align': 'center', //文本居中 //'text-align': 'center', //文本居中
...@@ -59,7 +58,7 @@ export default { ...@@ -59,7 +58,7 @@ export default {
//'min-width': '110px', //'min-width': '110px',
//'word-break': 'keep-all' //'word-break': 'keep-all'
}, },
datePickerOptions:{ datePickerOptions: {
shortcuts: [ shortcuts: [
{ {
text: '今日', text: '今日',
...@@ -110,7 +109,7 @@ export default { ...@@ -110,7 +109,7 @@ export default {
this.$refs[formName].resetFields() this.$refs[formName].resetFields()
} }
}, },
money (s, n) { money(s, n) {
if (!s) s = 0 if (!s) s = 0
if (!n) n = 2 if (!n) n = 2
n = n > 0 && n <= 20 ? n : 2 n = n > 0 && n <= 20 ? n : 2
...@@ -123,6 +122,18 @@ export default { ...@@ -123,6 +122,18 @@ export default {
t += l[i] + ((i + 1) % 3 === 0 && (i + 1) !== l.length ? ',' : '') t += l[i] + ((i + 1) % 3 === 0 && (i + 1) !== l.length ? ',' : '')
} }
return t.split('').reverse().join('') + '.' + r return t.split('').reverse().join('') + '.' + r
},
// 格式化状态
statusFormat: function (row, column) {
const status = row['status'];
return this.$enumUtils.toMsg('UserStatusEnum', status);
},
// 格式化时间
dateFormat: function (row, column) {
const date = row[column.property];
if (date === undefined) return "";
return moment(date).format("YYYY-MM-DD HH:mm:ss");
} }
} }
} }
...@@ -304,6 +304,40 @@ export const asyncRoutes = [ ...@@ -304,6 +304,40 @@ export const asyncRoutes = [
] ]
}, },
{
path: '/client',
name: 'client',
component: Layout,
redirect: '/client/list',
alwaysShow: true,
meta: {
noKeepAlive: true,
title: '客户管理',
remixIcon: 'home-4-line'
},
children: [
{
path: 'list',
name: 'clientList',
component: () => import('@/views/client/list'),
meta: {
noKeepAlive: true,
title: '客户管理'
}
},
{
path: 'detail',
name: 'clientDetail',
component: () => import('@/views/client/detail'),
hidden: true,
meta: {
noKeepAlive: true,
title: '客户详情',
tagHidden: true
}
}
]
},
{ {
path: '/customer', path: '/customer',
......
/**
* Created by jin.zhouhang on 17-7-19 上午10:01.
*/
import axios from 'axios'
import qs from 'qs'
import Cookies from 'js-cookie'
import store from "@/store";
import {tokenName} from "@/config";
/** 测试环境 */
axios.defaults.baseURL = process.env.VUE_APP_API;
/* 所有ajax请求拦截 */
axios.interceptors.request.use(function(req) {
if (store.getters['user/accessToken']) {
req.headers[tokenName] = store.getters['user/accessToken']
}
const t = Cookies.get('x-token')
if (t) {
req.headers['X-Auth-Token'] = t
}
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)
})
/* 所有ajax响应拦截 */
axios.interceptors.response.use(
res => {
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]}`
}
}
}
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 $$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 $$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)
})
})
}
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.
const DEFAULT_PATH = '/login'
const Filter = {
install(Vue) {
/** 修改title */
const changeTitle = (to) => {
if (to.meta.title !== undefined) {
document.title = to.meta.title
}
}
/** 拦截器 */
const filter = (to, next) => {
if (to.meta.filter) {
Vue.prototype.$$get('/user/isLogin')
.then(res => {
if (res.data.code === '200') {
next()
} else {
alert('您的账号已在其他设备上登录,您将被强行退出。请确保账号安全')
next(DEFAULT_PATH)
}
})
.catch(err => {
Vue.prototype.$message.error(err)
Vue.nextTick(() => finish())
next(false)
})
} else {
next()
}
}
}
}
export default Filter
/**
* Created by jin.zhouhang on 17-8-11 上午10:31.
*
* 权限管理
*/
const permissionUtils = {
install: function (Vue) {
Vue.prototype.$permissionUtils = {
btnPermission(code) {
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]) {
return true
}
}
return false
},
menuPermission(code) {
if (localStorage.getItem('menuPermission') == null || localStorage.getItem('menuPermission') === '') {
return false
}
const menuPerList = localStorage.getItem('menuPermission').split(",");
for (const num in menuPerList) {
if (code == menuPerList[num]) {
return true
}
}
return false
},
rolePermission(code) {
if (localStorage.getItem('userRole') == null || localStorage.getItem('userRole') === '') {
return false
}
const rolePerList = localStorage.getItem('userRole').split(",");
for (const num in rolePerList) {
if (code == rolePerList[num]) {
return true
}
}
return false
}
}
}
}
export default permissionUtils
...@@ -98,9 +98,9 @@ ...@@ -98,9 +98,9 @@
.el-menu-item, .el-menu-item,
.el-submenu__title { .el-submenu__title {
height: $base-top-bar-height/1.3; height: calc($base-top-bar-height/1.3);
padding: 0 $base-padding; padding: 0 $base-padding;
line-height: $base-top-bar-height/1.3; line-height: calc($base-top-bar-height/1.3);
} }
> .el-menu-item, > .el-menu-item,
......
...@@ -499,7 +499,7 @@ $--cascader-tag-background: #f0f2f5; ...@@ -499,7 +499,7 @@ $--cascader-tag-background: #f0f2f5;
/* Group /* Group
-------------------------- */ -------------------------- */
$--group-option-flex: 0 0 (1/5) * 100%; $--group-option-flex: 0 0 calc(1/5) * 100%;
$--group-option-offset-bottom: 12px; $--group-option-offset-bottom: 12px;
$--group-option-fill-hover: rgba($--color-black, 0.06); $--group-option-fill-hover: rgba($--color-black, 0.06);
$--group-title-color: $--color-black; $--group-title-color: $--color-black;
......
...@@ -139,7 +139,7 @@ export default { ...@@ -139,7 +139,7 @@ export default {
.custom-table-checkbox { .custom-table-checkbox {
.el-checkbox { .el-checkbox {
display: block !important; display: block !important;
margin: 0 0 $base-padding/4 0; margin: 0 0 calc($base-padding/4) 0;
} }
} }
......
<template>
<el-dialog
class="client-data-dialog"
:title="title"
width="30%"
:visible.sync="dialogVisible"
:before-close="handleClose">
<el-form size="small" label-suffix=":" :model="ruleForm" :rules="rules" ref="ruleForm" label-width="100px"
class="demo-ruleForm">
<el-form-item label="反馈类型" prop="feedType">
<el-select v-model="ruleForm.feedType" label="反馈类型" placeholder="请选择">
<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">
</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-item label="相关凭证" required>
<el-upload
class="upload-demo"
action=""
:on-preview="handlePreview"
:on-remove="handleRemove"
:before-remove="beforeRemove"
multiple
:limit="3"
:http-request="handleUpload"
:on-exceed="handleExceed"
:file-list="fileList">
<el-button size="small" type="primary">点击上传</el-button>
</el-upload>
</el-form-item>
</el-form>
<div slot="footer">
<el-button size="small" @click="handleClose">取 消</el-button>
<el-button size="small" 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() {
return {
fileList: [],
ui: {
submitLoading: false
},
visible: this.$props.dialogVisible,
ruleForm: {
feedNo:'',
feedType: '',
feedStatus: '',
feedContent: '',
clientNo: '',
creater: '',
loanNo:'',
productName: '',
feedVoucher: []
},
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() {
console.log(this.params,'888888888888');
const {clientNo, feedNo, feedType,feedStatus,feedContent,feedVoucher, feedProduct,loanNo} = this.params;
const list = [];
feedVoucher.forEach(item=>{
const o = {};
o.name = item;
o.url = item;
list.push(o)
});
this.fileList = list;
// console.log(this.params,'内容');
this.ruleForm = {
feedNo,
feedType,
feedStatus,
feedContent,
feedVoucher,
loanNo,
clientNo,
productName: feedProduct,
creater: localStorage.getItem("userName"),
}
},
mounted() {
this.client = new OSS({
region: 'oss-cn-hangzhou',
accessKeyId: 'LTAI4Fp8aDaS8sHXV76gWPVJ',
accessKeySecret: 'muNvYl9ydZqCp8we6c6WO3pLa0jRt5',
bucket: 'w-loan-static'
});
},
methods: {
handleUpload(file) {
this.upload(file)
},
upload(file) {
console.log(file, '文件')
const key = file.file.name;
const client = this.client;
const that = this;
const timeNum=new Date().getTime();
client.multipartUpload('customer/feed/' +timeNum+'-'+key, file.file)
.then((res) => {
console.log(res, '返回结果');
const fileList = that.fileList;
const imgSrc = `https://file.jqtianxia.com/${res.name}`;
const o = {name: res.name, url: imgSrc};
fileList.push(o);
that.$message.success('上传成功');
})
.catch((err) => {
console.log(err, '错误信息');
this.$message.error('上传失败');
});
},
handleRemove(file, fileList) {
console.log(file, fileList);
this.fileList = fileList;
},
handlePreview(file) {
console.log(file);
},
handleExceed(files, fileList) {
this.$message.warning(`当前限制选择 3 个文件,本次选择了 ${files.length} 个文件,共选择了 ${files.length + fileList.length} 个文件`);
},
beforeRemove(file, fileList) {
return this.$confirm(`确定移除 ${file.name}?`);
},
/** 提交点击 */
submitForm() {
console.log(this.fileList,'文件列表');
const feedVoucher = [];
this.fileList.forEach(item=>{
feedVoucher.push(item.url);
})
this.$refs['ruleForm'].validate((valid) => {
if (!valid) {
return false
}
if(this.ruleForm.feedNo){
this.$$post('/feed/updateClientFeed', {
feedNo:this.ruleForm.feedNo,
feedType: this.ruleForm.feedType,
feedSource: 'CUSTOMER',
feedStatus: this.ruleForm.feedStatus,
loanNo: this.ruleForm.loanNo,
feedContent: this.ruleForm.feedContent,
clientNo: this.ruleForm.clientNo,
productName: this.ruleForm.productName,
feedVoucher: feedVoucher,
creater: localStorage.getItem("userName"),
})
.then(res => {
if (res.data.success) {
this.$message({message: '反馈问题修改成功', type: 'success'});
this.$emit('callback')
this.handleClose();
}else {
this.$message.error(res.data.message);
}
})
.catch(err => {
alert("error!")
})
}else{
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,
loanNo: this.ruleForm.loanNo,
productName: this.ruleForm.productName,
feedVoucher: feedVoucher
})
.then(res => {
if (res.data.success) {
this.$message({message: '反馈问题新增成功', type: 'success'});
this.$emit('callback')
this.handleClose();
}else {
this.$message.error(res.data.message);
}
})
.catch(err => {
alert("error!")
})
}
})
},
/** 关闭处理 */
handleClose() {
this.$emit("handleClose");
}
},
}
</script>
<style>
</style>
<template>
<el-dialog
:append-to-body="true"
class="client-data-dialog"
title="创建线下提前结清"
width="40%"
:visible.sync="visible"
:before-close="handleClose">
<div>
<div style="margin-left:50px">
<el-row :gutter="20">
<el-col :span="8">
<div class="grid-content bg-purple">本金:{{ this.ruleForm.raiseAmt }}</div>
</el-col>
<el-col :span="8">
<div class="grid-content bg-purple">起息日:{{ this.ruleForm.startDate | dateFilter }}</div>
</el-col>
<!-- <el-col :span="6">
<div class="grid-content bg-purple">还款日:{{ this.ruleForm.planAmt }}</div>
</el-col> -->
</el-row>
<br/>
<el-row :gutter="20" :center="true">
<el-col :span="8">
<div class="grid-content bg-purple">占用天数:{{ this.ruleForm.userDay }}</div>
</el-col>
<el-col :span="8">
<div class="grid-content bg-purple">占用期数:{{ this.ruleForm.userMonth }}</div>
</el-col>
</el-row>
<br/>
<el-row :gutter="20">
<el-col :span="8">
<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>
</el-col>
<el-col :span="8">
<div class="grid-content bg-purple">服务费:{{ this.ruleForm.serviceAmt }}</div>
</el-col>
<el-col :span="8">
<div class="grid-content bg-purple">违约金:{{ this.ruleForm.breakAmt }}</div>
</el-col>
<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-col :span="8">
<div class="grid-content bg-purple">融担金额:{{ this.ruleForm.burdenAmt }}</div>
</el-col>
</el-row>
<br/>
<el-row :gutter="20">
<el-col :span="16">
<div class="grid-content bg-purple">总应还金额:{{ this.ruleForm.settleAmt }}</div>
</el-col>
</el-row>
</div>
<el-form :model="ruleForm" :rules="rules" ref="ruleForm" label-width="140px" class="demo-ruleForm">
<el-form-item label="还款银行账号" prop="bankAccount">
<el-col :span="20">
<el-input v-model="ruleForm.bankAccount" placeholder="请输入还款银行账号"></el-input>
</el-col>
</el-form-item>
<el-form-item label="还款银行账户名称" prop="bankOwner">
<el-col :span="20">
<el-input v-model="ruleForm.bankOwner" placeholder="请输入还款银行账户名称"></el-input>
</el-col>
</el-form-item>
<el-form-item label="转账金额" prop="settleAmt">
<el-col :span="20">
<el-input v-model="ruleForm.settleAmt" placeholder="请输入转账金额" disabled></el-input>
</el-col>
</el-form-item>
<el-form-item label="减免金额" prop="derateAmt">
<el-col :span="20">
<el-input v-model="ruleForm.derateAmt" placeholder="请输入减免金额" disabled></el-input>
</el-col>
</el-form-item>
<el-form-item label="还款凭证" prop="attach">
<el-upload
list-type="picture-card"
:multiple="oss.multiple"
:action="oss.action"
:data="oss.data"
accept=".jpeg,.jpg,.png"
:before-upload="handleBeforeApplyUpload"
:on-success="handleLoanApplySuccess"
:on-remove="handleLoanApplyRemove">
<i class="el-icon-plus"></i>
</el-upload>
</el-form-item>
<el-form-item label="还款备注" prop="memo">
<el-col :span="20">
<el-input v-model="ruleForm.memo" type="textarea" :rows="2" placeholder="请输入还款备注"></el-input>
</el-col>
</el-form-item>
</el-form>
</div>
<div slot="footer">
<el-button @click="handleClose">取 消</el-button>
<el-button type="primary" @click="backedTransfer('ruleForm')">确 定</el-button>
</div>
</el-dialog>
</template>
<script>
import * as moment from "moment";
export default {
name: "advanceLoanAmt",
props: {
dialogVisible: {
type: Boolean,
required: true
},
loanNo: {
type: String
},
orderNo: {
type: String
},
},
data() {
return {
ui: {
submitLoading: false
},
visible: this.$props.dialogVisible,
ruleForm: {
allAmt: '',
backedAmt: '',
loanNo: '',
breakAmt: '',
orderNO: '',
clientNo: '',
derateAmt: '',
interestAmt: '',
loanAmt: '',
overdueAmt: '',
principleAmt: '',
serviceAmt: '',
settleAmt: '',
startDate: '',
userDay: '',
userMonth: '',
memo: '',
attach: '',
bankAccount: '',
bankOwner: '',
raiseAmt:''
},
rules: {
bankAccount: [{required: true, message: '请输入还款银行账号', trigger: 'blur'}],
bankOwner: [{required: true, message: '请输入还款银行账户名称', trigger: 'blur'}],
attach: [{required: true, message: '请添加还款凭证', trigger: 'blur'}],
},
loginName: '',
oss: {
action: '',
data: {},
multiple: false,
},
}
},
filters: {
dateFilter: function (row) {
const date = row;
if (typeof (date) === undefined || typeof (date) == null) return ''
return moment(date).format("YYYY-MM-DD")
},
},
created() {
// 查询当前的基础数据
this.$$get('/back/countSettle?loanNo=' + this.loanNo).then(res => {
if (res.data.code != 200) {
this.$message.error(res.data.message);
this.handleClose();
} else {
this.ruleForm = res.data.result;
}
}).catch(error => {
this.$message.error(error || '网络异常,请稍后。。。');
});
},
mounted() {
this.loginName = localStorage.getItem("loginName");
},
methods: {
/** 提交点击 */
backedTransfer() {
this.$$post(`/back/addTransfer`, this.buildParam()).then(res => {
if (res.data.code != 200) {
this.$message.error(res.data.message);
return
}
this.$message({message: '操作成功', type: 'success'});
this.handleClose();
this.$emit('callback')
})
.catch(err => {
alert("error!")
})
},
handleBeforeApplyUpload(file) {
var attachType = 'LOESS_TRANSFER_APPLY'
return this.$$get(`/oss/signature/?fileType=` + attachType + "&fileName=" + file.name).then(res => {
if (res.data.code != 200) {
this.$message.error(res.data.message);
return
}
const result = res.data.result.result;
const data = {};
const tempOss = {};
data.OSSAccessKeyId = result.accessId;
data.policy = result.policy;
data.Signature = result.signature;
data.key = result.dir;
tempOss.action = result.host;
tempOss.data = data;
this.oss = tempOss;
this.ruleForm.attach = result.dir
});
},
handleLoanApplySuccess(res, file, fileList) {
this.$notify({title: '成功', message: file.name + ",上传成功", type: 'success'});
},
handleLoanApplyRemove(res, file, fileList) {
},
//参数
buildParam() {
return {
rePayTypeEnum: 'BYALL',
orderNo: this.orderNo,
loanNo: this.loanNo,
memo: this.ruleForm.memo,
creator: this.loginName,
planNo: this.planNo,
attach: this.ruleForm.attach,
bankAccount: this.ruleForm.bankAccount,
bankOwner: this.ruleForm.bankOwner,
backedAmt: this.ruleForm.settleAmt,
burdenAmt: this.ruleForm.burdenAmt,
};
},
/** 关闭处理 */
handleClose() {
this.visible = false;
setTimeout(() => {
this.$emit('update:dialogVisible', false)
}, 300);
},
}
}
</script>
<style scoped>
</style>
<template>
<div class="page-com">
<!-- <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.productNameStr }}</td>
<!-- <el-table-column align="center" prop="productName" label="产品名称" :formatter="productNameFormat"></el-table-column> -->
</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>
</template>
<script>
import * as moment from "moment";
export default {
name: 'AddUserServiceDialog',
props: {
title: {
type: String,
required: false,
},
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() {
if(this.params){
const {applyVo} = this.params;
this.loanModel = applyVo;
this.productNameFormat(this.loanModel.productName);
}
},
methods: {
headerStyle() {
return "tableHeaderStyle";
},
//产品名称
productNameFormat: function (row) {
if(this.loanModel!=null){
this.loanModel.productName=this.$enumUtils.toMsg('BusinessType', row)
}
},
}
}
</script>
<style>
</style>
<template>
<div class="tabs-content">
<block-header title="基本信息"></block-header>
<div class="block-box">
<table class="table">
<tr>
<td>姓名:</td>
<td>{{ basicInfo.name }}</td>
<td>身份证号:</td>
<td>{{ basicInfo.idCard }}</td>
<td>手机号:</td>
<td>
{{ basicInfo.phone }}
</td>
</tr>
<tr>
<td>实名认证:</td>
<td>
<el-tag
size="mini"
type="danger"
v-if="basicInfo.isIdentity === '未认证'"
>
{{ basicInfo.isIdentity }}
</el-tag
>
<el-tag size="mini" type="success" v-else>
{{ basicInfo.isIdentity }}
</el-tag
>
</td>
<td>基础信息认证:</td>
<td>
<el-tag
size="mini"
type="danger"
v-if="basicInfo.isIdentity === '未认证'"
>
{{ basicInfo.isBasicInfo }}
</el-tag
>
<el-tag size="mini" type="success" v-else>
{{ basicInfo.isBasicInfo }}
</el-tag
>
</td>
<td>活体认证:</td>
<td>
<el-tag
size="mini"
type="danger"
v-if="basicInfo.isIdentity === '未认证'"
>
{{ basicInfo.isFace }}
</el-tag
>
<el-tag size="mini" type="success" v-else>
{{ basicInfo.isFace }}
</el-tag
>
</td>
</tr>
<tr>
<td>客户单位名称:</td>
<td>{{ basicInfo.companyName }}</td>
<td>客户单位地址:</td>
<td>{{ basicInfo.companyAddress }}</td>
<td>住宅地址:</td>
<td>{{ basicInfo.houseAddress }}</td>
</tr>
<tr>
<td>第一联系人姓名:</td>
<td>{{ basicInfo.firstName }}</td>
<td>第一联系人电话:</td>
<td colspan="3">{{ basicInfo.firstPhone }}</td>
</tr>
<tr>
<td>是否黑名单</td>
<td colspan="5">
<span>{{ basicInfo.isBlacklist ? '是' : '否' }}</span>
</td>
</tr>
</table>
</div>
<block-header title="银行卡列表"/>
<div class="block-box">
<el-table
:header-row-class-name="headerStyle"
:highlight-current-row="true"
border
size="small"
:data="ownerBank"
stripe
style="width: 100%"
>
<el-table-column
align="center"
prop="bankAccount"
label="银行卡号"
></el-table-column>
<el-table-column
align="center"
prop="openBankName"
label="银行名称"
></el-table-column>
<el-table-column
align="center"
prop="ownerName"
label="姓名"
></el-table-column>
<el-table-column
align="center"
prop="payChannelApi"
label="渠道名称"
></el-table-column>
<el-table-column
align="center"
prop="gmtCreated"
label="绑定时间"
:formatter="dateFormat"
></el-table-column>
<el-table-column align="center" label="操作">
<template slot-scope="scope">
<el-button type="text" size="small" @click="ownerBankBind(scope.row, 'BindCardRecord', '绑卡记录')">绑卡记录
</el-button>
</template>
</el-table-column>
</el-table>
</div>
<!--绑卡记录-->
<template v-if="visible">
<component
@handleClose="visible = false"
:is="activeComponents"
:dialogVisible="visible"
:params="dParams"
:title="dTitle"
/>
</template>
</div>
</template>
<script>
import BindCardRecord from "./OwnerBankBind";
import * as moment from "moment";
export default {
name: "AddUserServiceDialog",
components: {
BindCardRecord,
},
props: {
dialogVisible: {
type: Boolean,
required: true,
},
title: {
type: String,
required: true,
},
params: {
type: Object,
required: true,
},
},
data() {
return {
mobilePermission: '',
tellUpdate: {
newTell: "",
oldTell: ""
},
tellDialog: false,
visible: false,
activeComponents: "",
dTitle: "",
dParams: {},
dialogTableVisible: false,
basicInfo: {},
ownerBank: [],
// 手机号
tellphone: {
newOwnerMobile: "",
ownerMobile: "",
},
creator: '',
dataInfo: {
bankAccount: "",
bizType: "",
clientNo: "",
productName: "",
}
};
},
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 updateMobile = localStorage.getItem('updateMobile');
if (updateMobile) {
this.mobilePermission = updateMobile
} else {
this.mobilePermission = null
}
if (this.params) {
const params = this.params;
console.log(params, "是什么");
const {basicInfo} = params;
this.basicInfo = basicInfo;
if (basicInfo.cardList) this.ownerBank = basicInfo.cardList;
}
// console.log(this.$route.query.clientProductName)
this.dataInfo.productName = this.$route.query.clientProductName;
this.dataInfo.clientNo = this.$route.query.clientNo;
this.creator = localStorage.getItem('userName');
},
methods: {
headerStyle() {
return "tableHeaderStyle";
},
/*日期*/
dateFormat: function (row, column) {
let date = row[column.property];
if (date === undefined) {
return "";
}
return moment(date).format("YYYY-MM-DD HH:mm:ss");
},
// 查看绑卡记录
ownerBankBind(row, com, title) {
this.activeComponents = com;
this.visible = true;
this.dTitle = title;
this.dParams = row;
}
},
};
</script>
<style>
.el-dialog__title {
font-size: 20px;
font-weight: 700;
}
</style>
This diff is collapsed.
<template>
<div class="page-com">
<!-- <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>
</template>
<script>
export default {
name: 'RiskInfo',
props: {
title: {
type: String,
required: false,
},
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
:append-to-body="true"
class="client-data-dialog"
title="分笔结清扣款"
width="40%"
:visible.sync="visible"
:before-close="handleClose"
>
<div>
<div style="margin-left: 50px">
<el-row :gutter="20">
<el-col :span="8">
<div class="grid-content bg-purple">
本金:{{ this.ruleForm.raiseAmt }}
</div>
</el-col>
<el-col :span="8">
<div class="grid-content bg-purple">
起息日:{{ this.ruleForm.startDate | dateFilter }}
</div>
</el-col>
<!-- <el-col :span="6">
<div class="grid-content bg-purple">还款日:{{ this.ruleForm.planAmt }}</div>
</el-col> -->
</el-row>
<br />
<el-row :gutter="20" :center="true">
<el-col :span="8">
<div class="grid-content bg-purple">
占用天数:{{ this.ruleForm.userDay }}
</div>
</el-col>
<el-col :span="8">
<div class="grid-content bg-purple">
占用期数:{{ this.ruleForm.userMonth }}
</div>
</el-col>
</el-row>
<br />
<el-row :gutter="20">
<el-col :span="8">
<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>
</el-col>
<el-col :span="8">
<div class="grid-content bg-purple">
服务费:{{ this.ruleForm.serviceAmt }}
</div>
</el-col>
</el-row>
<br />
<el-row :gutter="20">
<el-col :span="8">
<div class="grid-content bg-purple">
违约金:{{ this.ruleForm.breakAmt }}
</div>
</el-col>
<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-col :span="8">
<div class="grid-content bg-purple">
融担金额:{{ this.ruleForm.burdenAmt }}
</div>
</el-col>
</el-row>
<br />
<el-row :gutter="20">
<el-col :span="16">
<div class="grid-content bg-purple">
总应还金额:{{ this.ruleForm.settleAmt }}
</div>
</el-col>
</el-row>
</div>
<br />
<el-form
:model="ruleForm"
:rules="rules"
ref="ruleForm"
label-width="140px"
class="demo-ruleForm"
>
<el-form-item label="选择银行卡" prop="bankAccount">
<el-select
clearable
v-model="ruleForm.bankAccount"
class="select-bank-card"
>
<el-option
v-for="item in this.cardList"
:key="item.value"
:label="item.label"
:value="item.value"
></el-option>
</el-select>
</el-form-item>
<el-form-item label="自定义扣款金额" prop="selfMoney">
<el-col :span="12">
<el-input
v-model="selfMoney"
placeholder="请输入自定义金额"
clearable
></el-input>
</el-col>
</el-form-item>
</el-form>
</div>
<div slot="footer" align="center">
<el-button @click="handleClose">取 消</el-button>
<el-button type="primary" @click="backedTransfer('ruleForm')"
>确 定</el-button
>
</div>
</el-dialog>
</template>
<script>
import * as moment from "moment";
export default {
name: "devicePayment",
props: {
dialogVisible: {
type: Boolean,
required: true,
},
loanNo: {
type: String,
},
clientNo: {
type: String,
},
bizType: {
type: String,
},
},
data() {
return {
cardList: [],
visible: this.$props.dialogVisible,
ruleForm: {
allAmt: "",
backedAmt: "",
loanNo: "",
bizType: "",
breakAmt: "",
orderNO: "",
clientNo: "",
derateAmt: "",
interestAmt: "",
loanAmt: "",
overdueAmt: "",
principleAmt: "",
serviceAmt: "",
settleAmt: "",
startDate: "",
userDay: "",
userMonth: "",
memo: "",
attach: "",
bankAccount: "",
bankOwner: "",
backAmt: "",
raiseAmt:''
//自定义金额
},
selfMoney: "",
rules: {
bankAccount: [
{
required: true,
message: "请选择银行卡",
trigger: "change",
},
],
// selfMoney: [
// {
// required: true,
// message: "请输入扣款金额",
// trigger: "blur",
// },
// ],
},
loginName: "",
backedNo: "",
};
},
filters: {
dateFilter: function (row) {
const date = row;
if (typeof date === undefined || typeof date == null) return "";
return moment(date).format("YYYY-MM-DD");
},
},
created() {
this.getMoney();
// this.selfMoney=localStorage.getItem('selfMoney');
// console.log(this.selfMoney,'1');
// localStorage.removeItem('selfMoney');
// console.log(this.selfMoney,'2');
this.getData();
this.getBankList();
this.ruleForm = {
loanNo: this.loanNo,
bizType: this.bizType,
clientNo: this.clientNo,
selfMoney:this.selfMoney
};
this.bizTypeStr = this.bizType;
},
mounted() {
this.loginName = localStorage.getItem("loginName");
},
methods: {
getData() {
// 查询当前的基础数据
this.$$get("/back/countSettle?loanNo=" + this.loanNo)
.then((res) => {
if (res.data.code != 200) {
this.$message.error(res.data.message);
this.handleClose();
} else {
this.ruleForm = res.data.result;
}
})
.catch((error) => {
this.$message.error(error || "网络异常,请稍后。。。");
});
},
getMoney() {
//获取挂账金额
this.$$get(
`/back/getRestingOrderAmt?loanNo=` + this.loanNo
).then((res) => {
if (res.data.code != 200) {
this.$message.error(res.data.message);
this.handleClose();
} else {
this.selfMoney=res.data.result;
}
});
},
getBankList() {
//获取银行卡列表
this.$$post(`/back/bankCardList`, {
clientNo: this.clientNo,
bizType: this.bizType,
loanNo: this.loanNo,
})
.then((res) => {
this.cardList = res.data.result;
})
.catch((error) => {
this.$message.error(error || "网络异常,请稍后。。。");
});
},
/** 提交点击 */
backedTransfer() {
// if (this.ruleForm.backAmt > this.selfMoney) {
// this.$message.error(
// "操作失败扣款金额已超出剩余应还款金额,请重新确认!"
// );
// this.selfMoney = "";
// return false;
// }
if(this.selfMoney==''){
this.$message.error('请输入扣款金额');
return false;
}
this.ruleForm.backAmt=this.selfMoney;
this.$confirm("是否确认分笔扣款?", "提示", {
confirmButtonText: "确定",
cancelButtonText: "取消",
type: "primary",
})
.then(() => {
this.$$post(`/back/createBackedSettle`, this.buildParam())
.then((res) => {
// console.log(res, "确定按钮");
if (res.data.code != 200) {
this.$message.error(res.data.message);
return;
}
this.$message({ message: "操作成功", type: "success" });
this.handleClose();
this.$emit("callback");
})
.catch((err) => {
alert("error!");
});
})
.catch(() => {
this.$message({
type: "info",
message: "已取消",
});
});
},
//参数
buildParam() {
return {
loanNo: this.ruleForm.loanNo,
bizType: this.bizTypeStr,
backAmt: this.selfMoney,
creator: this.loginName,
bankAccount: this.ruleForm.bankAccount,
periodNo: this.ruleForm.userMonth,
burdenAmt: this.ruleForm.burdenAmt,
rePayType: "BYSTEP",
restingOrderEnum: "YES",
};
},
/** 关闭处理 */
handleClose() {
this.visible = false;
setTimeout(() => {
this.$emit("update:dialogVisible", false);
}, 300);
},
},
};
</script>
<style scoped>
</style>
<template>
<el-dialog
title="结清证明"
width="700px"
center
:wrapperClosable="false"
:visible.sync="visible"
:before-close="handleClose"
>
<div class="page-dialog">
<div class="settleType">
<el-form :inline="true">
<el-form-item label="结清证明类型模板">
<el-select v-model="reportType" placeholder="请选择结清模板">
<el-option
label="借款主体结清证明模板"
value="loanReport"
></el-option>
<el-option
label="服务费主体结清证明模版"
value="serviceReport"
></el-option>
</el-select>
</el-form-item>
<el-form-item>
<el-button type="primary" @click="generateReport"
>生成结清证明</el-button
>
</el-form-item>
</el-form>
</div>
<div>
<el-table :data="tableData" border style="width: 100%">
<el-table-column prop="settleTypeStr" align="center" label="结清类型">
</el-table-column>
<el-table-column prop="operator" align="center" label="操作人">
</el-table-column>
<el-table-column prop="operationDate" align="center" label="操作时间">
</el-table-column>
</el-table>
</div>
</div>
</el-dialog>
</template>
<script>
export default {
props: {
title: {
type: String,
required: true,
},
visible: {
type: Boolean,
required: true,
},
params: {
type: Object,
required: true,
},
},
data() {
return {
reportType: "",
tableData: [],
certName: "",
loanNo: "",
};
},
created() {
const params = this.params;
console.log(params, "啦啦啦啦啦啦啦");
if (params.loanNo) {
console.log(params.loanNo, "hhhhhhhhhh");
const { clientName, loanNo,externalNo } = params;
this.certName = clientName;
this.loanNo = externalNo;
this.queryReport(externalNo);
}
},
methods: {
//查询生成报告
queryReport(externalNo) {
this.$$get(`/loan/selectGenerate?loanNo=${externalNo}`).then((res) => {
console.log(res, "报告");
if (res.data.code == 200) {
this.tableData = res.data.result;
}
});
},
//生成结清报告
generateReport() {
this.$confirm("是否确认生成", "", {
confirmButtonText: "确定",
cancelButtonText: "取消",
type: "warning",
})
.then(() => {
// 确定
console.log(this.reportType, "模板类型");
if (!this.reportType) {
this.$message("请选择报告类型!");
return;
}
const params = {};
params.settleType = this.reportType;
params.loanNo = this.loanNo;
params.operator = localStorage.getItem("loginName");
this.$$post(`/loan/generateSettleReport`, params).then((res) => {
if (res.data.code == 200) {
this.queryReport();
this.$message({
type: "success",
message: "已生成!",
});
}else{
this.$message(res.data.message)
}
});
})
.catch(() => {
// 取消
this.$message({
type: "info",
message: "已取消",
});
});
},
handleClose() {
this.$emit("handleClose");
// window.location.reload()
},
},
};
</script>
<style scoped>
</style>
\ No newline at end of file
<template>
<!-- 修改内容 -->
<el-drawer
:title="title"
size="80%"
:wrapperClosable="false"
:visible.sync="dialogVisible"
direction="rtl"
:before-close="handleClose"
>
<div class="page">
<div class="loan-detail">
<el-collapse v-model="activeNames" @change="handleChange">
<el-collapse-item title="申请信息" name="1">
<!-- <ApplyInfo :params="applyInfo"></ApplyInfo> -->
<div class="page-com">
<!-- <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.productNameStr }}</td>
<!-- <el-table-column align="center" prop="productName" label="产品名称" :formatter="productNameFormat"></el-table-column> -->
</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 >{{ loanModel.accountAmt }}</td>
<td>项目编号</td>
<td>{{ loanModel.projectName }}</td>
<td>BD</td>
<td>{{ loanModel.bdName }}</td>
</tr>
</table>
</div>
</el-collapse-item>
<!-- 组件 -->
<el-collapse-item title="借款合同" name="2">
<ContractList :params="applyInfo" v-if="$permissionUtils.rolePermission('lookAgreement')"></ContractList>
</el-collapse-item>
<el-collapse-item title="账单详情" name="3">
<BillList :params="applyInfo"></BillList>
</el-collapse-item>
<el-collapse-item title="还款情况" name="4">
<RePayList :params="applyInfo"></RePayList>
</el-collapse-item>
<el-collapse-item title="减免记录" name="5">
<ReliefList :params="applyInfo"></ReliefList>
</el-collapse-item>
<el-collapse-item title="服务费退款记录" name="6">
<ServiceRefund :params="applyInfo"></ServiceRefund>
</el-collapse-item>
</el-collapse>
</div>
</div>
</el-drawer>
</template>
<script>
import ContractList from "./ContractList";
import RePayList from "./RePayList";
import BillList from "./BillList";
import ReliefList from "./ReliefList";
import ServiceRefund from "./ServiceRefund";
import * as moment from "moment";
export default {
name: "AddUserServiceDialog",
components: {
ContractList,
RePayList,
BillList,
ReliefList,
ServiceRefund
},
props: {
dialogVisible: {
type: Boolean,
required: true,
},
title: {
type: String,
required: true,
},
params: {
type: Object,
required: true,
},
},
data() {
return {
visible: false,
active: "",
items: {},
loanModel: {},
applyInfo: {},
loan: {},
activeNames: ["1",'2','3','4','5','6'],
};
},
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() {
if (this.params) {
// console.log(this.params,'自营');
const { loanNo } = this.params;
this.applyInfo = this.params;
await this.initLoanInfo(loanNo);
}
},
methods: {
headerStyle() {
return "tableHeaderStyle";
},
//根据借款信息查借款所有信息
async initLoanInfo(loanNo) {
const res = await this.$$get("/detail/customer/" + loanNo);
const { success, result } = res.data;
console.log(res.data, "222");
if (success && result != null) {
this.loan = result;
this.loanModel = result.applyVo;
}
},
/*日期*/
dateFormats: function (row, column) {
let date = row[column.property];
if (date === undefined) return "";
return moment(date).format("YYYY-MM-DD");
},
handleClose() {
this.$emit("handleClose");
},
// 切换选项卡
handleChange(val) {
console.log(val);
this.applyInfo = {
...this.loan,
...this.params,
};
},
},
};
</script>
<style scoped lang="scss">
.page,
.loan-detail {
height: 100%;
overflow: auto;
}
.page {
padding-right: 0;
}
.el-collapse {
width: 100%;
}
.loan-detail {
display: flex;
position: relative;
.el-collapse-item {
width: 100%;
box-sizing: border-box;
padding-left: 20px;
}
}
</style>
<template>
<div class="page-dialog">
<block-header title="借款记录"></block-header>
<div class="block-box">
<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="productNameStr" label="产品名称"></el-table-column>
<el-table-column align="center" prop="capitalCodeStr" label="放款资方"></el-table-column>
<el-table-column align="center" prop="status" label="借款单状态">
<template slot-scope="scope">
<el-tag type="success" v-if="scope.row.status==='AUDITED'" size="small">{{ loanStatusFormat(scope.row) }}
</el-tag>
<el-tag v-else-if="scope.row.status==='SETTLED'" size="small">{{ loanStatusFormat(scope.row) }}</el-tag>
<el-tag type="danger" v-else-if="scope.row.status==='OVERDUED'" size="small">
{{ loanStatusFormat(scope.row) }}
</el-tag>
<el-tag type="warning" v-else-if="scope.row.status==='SUBMITED'" size="small">
{{ loanStatusFormat(scope.row) }}
</el-tag>
<el-tag type="warning" v-else-if="scope.row.status==='BACKING'" size="small">
{{ loanStatusFormat(scope.row) }}
</el-tag>
<el-tag type="info" v-else size="small">{{ loanStatusFormat(scope.row) }}</el-tag>
</template>
</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="handleClick(scope.row)">详情</el-button>
<template v-if="scope.row.status==='SETTLED' && scope.row.capitalCode !== 'OWNBUSINESS'">
<el-button type="text" size="small" @click="handleShow(scope.row,'SettleReport','结清报告')">结清报告</el-button>
</template>
<template v-if="scope.row.status==='SETTLED' && scope.row.capitalCode == 'OWNBUSINESS'&&zyItem">
<el-button type="text" size="small" @click="handleShow(scope.row,'GenerateSettleReport','结清报告')">结清报告
</el-button>
</template>
</template>
</el-table-column>
</el-table>
</div>
<!--借款详情-->
<template v-if="visible">
<loan-detail
@handleClose="visible=false"
:title="title"
:params="items"
:dialogVisible="visible"/>
</template>
<!-- 那啥-->
<template v-if="mcDialogVisible">
<component
@handleClose="mcDialogVisible = false"
:is="ActiveCom"
:title="mcTitle"
:params="mcItems"
:visible="mcDialogVisible"/>
</template>
</div>
</template>
<script>
import LoanDetail from "./LoanDetail";
import SettleReport from "./SettleReport";
import GenerateSettleReport from './GenerateSettleReport.vue';
import * as moment from "moment";
export default {
name: 'AddUserServiceDialog',
components: {
LoanDetail,
SettleReport,
GenerateSettleReport
},
props: {
params: {
type: Object,
required: true
},
},
data() {
return {
visible: false,
activeComponents: "BaseInfo",
title: "基本信息",
items: {},
mcDialogVisible: false,
mcItems: null,
mcTitle: "",
ActiveCom: "",
zyItem:"",
data: []
}
},
async created() {
// console.log(localStorage.getItem('btnUrl'), 999888888);
const btnUrl=localStorage.getItem('btnUrl');
if(btnUrl){
this.zyItem=btnUrl
}else{
this.zyItem=null
}
try{
const {clientNo, clientProductName} = this.params;
const res = await this.$$post('/loan/getLoanListByClientNo', {productName: clientProductName, clientNo: clientNo});
const {success, result} = res.data;
if (success && result !== null) {
this.data = result;
}
}catch (err){
console.log(err.message)
}
},
methods: {
headerStyle() {
return "tableHeaderStyle";
},
/*日期*/
dateFormats: function (row, column) {
let date = row[column.property]
if (date === undefined) return '';
return moment(date).format("YYYY-MM-DD")
},
//借款单状态
loanStatusFormat: function (row) {
let status = row['status'];
return this.$enumUtils.toMsg('LoanStatuEnums', status);
},
capitalCodeFormat: function (row, column) {
let capitalCodeStr = row['capitalCodeStr'];
return this.$enumUtils.toMsg('CapitalEnums', capitalCodeStr);
},
// 切换选项卡
handleClick(row) {
// console.log(row, '一行信息');
this.visible = true;
this.title = '借款详情';
this.items = {
...this.params,
...row
};
},
handleShow(row, com, title) {
console.log(row,com,title, '当前行')
this.mcDialogVisible = true;
this.mcItems = {
...this.params,
...row
};
console.log(this.params,'什么鬼');
console.log(this.mcItems,'mmmcccc');
this.mcTitle = title;
this.ActiveCom = com;
}
}
}
</script>
<style>
</style>
<template>
<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%"
:default-sort="{ prop: 'sendTime', order: 'descending' }"
>
<el-table-column
align="center"
prop="bizNo"
width="200"
label="ID/编号"
></el-table-column>
<el-table-column
align="center"
prop="smsType"
label="短信类型"
></el-table-column>
<el-table-column
align="center"
prop="content"
width="350"
label="短信内容"
></el-table-column>
<el-table-column
align="center"
prop="sendStateStr"
label="发送结果"
></el-table-column>
<el-table-column
align="center"
prop="memo"
label="备注"
></el-table-column>
<el-table-column
align="center"
prop="sendTime"
width="150"
:formatter="dateFormat"
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>
</template>
<script>
import * as moment from "moment";
export default {
props: {
dialogVisible: {
type: Boolean,
required: true,
},
title: {
type: String,
required: true,
},
params: {
type: Object,
required: true,
},
},
data() {
return {
form: {
current: 1,
size: 10,
total:1,
cell:"",
productName:""
},
data: [],
};
},
async created() {
const params = this.params;
// console.log(params,'手机号');
this.form.cell = params.phoneNo;
this.form.productName = params.clientProductName;
await this.init();
},
methods: {
headerStyle() {
return "tableHeaderStyle";
},
async init() {
const res = await this.$$post("/user/getSmsInfo", this.form);
const { success, result } = res.data;
if (success && result !== null) {
this.data = result.data;
this.form.total = result.total;
}
},
/*日期*/
dateFormat: 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");
},
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>
<template>
<el-dialog
:append-to-body="true"
class="client-data-dialog"
title="创建转账还款单"
width="60%"
:visible.sync="visible"
:before-close="handleClose">
<div class="b-table">
<table class="table">
<tr>
<td>还款计划:</td>
<td>{{ ruleForm.planNo }}</td>
<td>期数:</td>
<td>{{ ruleForm.periodNo }}</td>
<td>应还总金额:</td>
<td>{{ ruleForm.planAmt }}</td>
</tr>
<tr>
<td>本金:</td>
<td>{{ ruleForm.planBen }}</td>
<td>服务费:</td>
<td>{{ ruleForm.planFu }}</td>
<td>利息:</td>
<td>{{ ruleForm.planXi }}</td>
</tr>
<tr>
<td>手续费:</td>
<td colspan="5">{{ ruleForm.accountAmt }}</td>
</tr>
</table>
</div>
<el-form
size="small"
label-suffix=":"
:model="ruleForm"
:rules="rules"
ref="ruleForm"
label-width="140px" class="demo-ruleForm">
<el-form-item label="还款银行账号" prop="bankAccount">
<el-col :span="20">
<el-input v-model="ruleForm.bankAccount" placeholder="请输入还款银行账号"></el-input>
</el-col>
</el-form-item>
<el-form-item label="还款银行账户名称" prop="bankOwner">
<el-col :span="20">
<el-input v-model="ruleForm.bankOwner" placeholder="请输入还款银行账户名称"></el-input>
</el-col>
</el-form-item>
<el-form-item label="转账金额" prop="backedAmt">
<el-col :span="20">
<el-input v-model="ruleForm.remainAmt" placeholder="请输入转账金额"></el-input>
</el-col>
</el-form-item>
<el-form-item label="还款凭证" prop="attach">
<el-upload
list-type="picture-card"
:multiple="oss.multiple"
:action="oss.action"
:data="oss.data"
accept=".jpeg,.jpg,.png"
:before-upload="handleBeforeApplyUpload"
:on-success="handleLoanApplySuccess"
:on-remove="handleLoanApplyRemove">
<i class="el-icon-plus"></i>
</el-upload>
</el-form-item>
<el-form-item label="还款备注" prop="memo">
<el-col :span="20">
<el-input v-model="ruleForm.memo" placeholder="请输入还款备注"></el-input>
</el-col>
</el-form-item>
</el-form>
<div slot="footer">
<el-button size="small" @click="handleClose">取 消</el-button>
<el-button size="small" type="primary" @click="backedTransfer('ruleForm')">确 定</el-button>
</div>
</el-dialog>
</template>
<script>
export default {
name: "offineTransfer",
props: {
dialogVisible: {
type: Boolean,
required: true
},
orderNo: {
type: String
},
loanNo: {
type: String
},
periodNo: {
type: Number
},
planFu: {
type: Number
},
planAmt: {
type: Number
},
planBen: {
type: Number
},
planXi: {
type: Number
},
planNo: {
type: String
},
remainAmt: {
type: Number
},
accountAmt: {
type: Number
},
},
data() {
return {
ui: {
submitLoading: false
},
visible: this.$props.dialogVisible,
ruleForm: {
periodNo: '',
orderNo: '',
loanNo: '',
creator: '',
planFu: '',
planAmt: '',
planBen: '',
planXi: '',
attach: '',
planNo: '',
bankAccount: '',
bankOwner: '',
backedAmt: '',
memo: '',
},
rules: {
bankAccount: [{required: true, message: '请输入还款银行账号', trigger: 'blur'}],
bankOwner: [{required: true, message: '请输入还款银行账户名称', trigger: 'blur'}],
planAmt: [{required: true, message: '请输入还款金额', trigger: 'blur'}],
attach: [{required: true, message: '请添加还款凭证', trigger: 'blur'}],
},
loginName: '',
oss: {
action: '',
data: {},
multiple: false,
},
}
},
created() {
this.ruleForm = {
orderNo: this.orderNo,
loanNo: this.loanNo,
periodNo: this.periodNo,
planFu: this.planFu,
planNo: this.planNo,
remainAmt: this.remainAmt,
planAmt: this.planAmt,
planBen: this.planBen,
planXi: this.planXi,
accountAmt: this.accountAmt,
}
},
mounted() {
this.loginName = localStorage.getItem("userName");
},
methods: {
/** 提交点击 */
backedTransfer() {
this.$refs['ruleForm'].validate((valid) => {
if (!valid) {
return false
}
this.$$post(`/back/addTransfer`, this.buildParam()).then(res => {
if (res.data.code != 200) {
this.$message.error(res.data.message);
return
}
this.$message({message: '操作成功', type: 'success'});
this.handleClose();
this.$emit('callback')
})
.catch(err => {
alert("error!")
})
})
},
handleBeforeApplyUpload(file) {
var attachType = 'LOESS_TRANSFER_APPLY'
return this.$$get(`/oss/signature/?fileType=` + attachType + "&fileName=" + file.name).then(res => {
if (res.data.code != 200) {
this.$message.error(res.data.message);
return
}
const result = res.data.result.result;
const data = {};
const tempOss = {};
data.OSSAccessKeyId = result.accessId;
data.policy = result.policy;
data.Signature = result.signature;
data.key = result.dir;
tempOss.action = result.host;
tempOss.data = data;
this.oss = tempOss;
this.ruleForm.attach = result.dir
});
},
handleLoanApplySuccess(res, file, fileList) {
this.$notify({title: '成功', message: file.name + ",上传成功", type: 'success'});
},
handleLoanApplyRemove(res, file, fileList) {
},
//参数
buildParam() {
return {
rePayTypeEnum: 'BYONE',
periodNo: this.periodNo,
orderNo: this.ruleForm.orderNo,
loanNo: this.ruleForm.loanNo,
memo: this.ruleForm.memo,
creator: this.loginName,
planNo: this.planNo,
attach: this.ruleForm.attach,
bankAccount: this.ruleForm.bankAccount,
bankOwner: this.ruleForm.bankOwner,
backedAmt: this.ruleForm.remainAmt,
};
},
/** 关闭处理 */
handleClose() {
this.visible = false;
setTimeout(() => {
this.$emit('update:dialogVisible', false)
}, 300);
},
}
}
</script>
<style scoped>
</style>
<template>
<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="memo" label="备注"></el-table-column>
<el-table-column align="center" prop="gmtCreated" label="操作时间" :formatter="dateFormat"></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>
</template>
<script>
import * as moment from "moment";
export default {
name: 'RiskInfo',
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;
// console.log(params,'params');
this.form.clientNo = params.clientNo;
this.form.productName = params.clientProductName;
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>
<template>
<el-dialog
:title="title"
:visible.sync="dialogVisible"
width="50%"
:before-close="handleClose">
<div class="page">
<block-header :title="title"/>
<div class="b-table">
<el-table
size="small"
border
:data="records"
stripe
style="width: 100%;">
<el-table-column align="center" prop="gmtCreated" label="签约时间" :formatter="dateFormat"></el-table-column>
<el-table-column align="center" prop="operaterDesc" label="备注"></el-table-column>
</el-table>
</div>
</div>
</el-dialog>
</template>
<script>
export default {
name: "BindBankRecords",
props: {
cardLogList: {
type: Array
},
dialogVisible: {
type: Boolean,
required: true,
},
title: {
type: String,
required: true,
},
params: {
type: Object,
required: true
},
},
data() {
return {
records: [],
}
},
created() {
if (this.params) {
const {cardLogList} = this.params;
if(cardLogList && cardLogList.length){
this.records = this.reverse(cardLogList);
}else{
this.records = []
}
}
},
methods: {
handleClose() {
this.$emit('handleClose')
},
reverse(array) {
const newArr = [];
for (let i = array.length - 1; i >= 0; i--) {
newArr[newArr.length] = array[i];
}
return newArr;
}
}
}
</script>
<template>
<el-dialog
:append-to-body="true"
class="client-data-dialog"
title="创建代扣提前结清"
width="40%"
:visible.sync="visible"
:before-close="handleClose">
<div style="margin-left:50px">
<el-row :gutter="20">
<el-col :span="8">
<div class="grid-content bg-purple">本金:{{ this.ruleForm.raiseAmt }}</div>
</el-col>
<el-col :span="8">
<div class="grid-content bg-purple">起息日:{{ this.ruleForm.startDate | dateFilter }}</div>
</el-col>
</el-row>
<br/>
<el-row :gutter="20" :center="true">
<el-col :span="8">
<div class="grid-content bg-purple">占用天数:{{ this.ruleForm.userDay }}</div>
</el-col>
<el-col :span="8">
<div class="grid-content bg-purple">占用期数:{{ this.ruleForm.userMonth }}</div>
</el-col>
</el-row>
<br/>
<el-row :gutter="20">
<el-col :span="8">
<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>
</el-col>
<el-col :span="8">
<div class="grid-content bg-purple">服务费:{{ this.ruleForm.serviceAmt }}</div>
</el-col>
<el-col :span="8">
<div class="grid-content bg-purple">违约金:{{ this.ruleForm.breakAmt }}</div>
</el-col>
<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-col :span="8">
<div class="grid-content bg-purple">融担金额:{{ this.ruleForm.burdenAmt }}</div>
</el-col>
</el-row>
<br/>
<el-row :gutter="20">
<el-col :span="16">
<div class="grid-content bg-purple">总应还金额:{{ this.ruleForm.settleAmt }}</div>
</el-col>
</el-row>
</div>
<br/>
<el-form :model="ruleForm" :rules="rules" ref="ruleForm" label-width="140px" class="demo-ruleForm">
<el-form-item label="扣款金额" prop="backedAmt">
<el-col :span="20">
<el-input v-model="ruleForm.settleAmt" placeholder="扣款金额" disabled></el-input>
</el-col>
</el-form-item>
<el-form-item label="选择银行卡" prop="bankAccount">
<el-select clearable v-model="ruleForm.bankAccount" class="select-bank-card">
<el-option v-for="item in this.cardList" :key="item.value"
:label="item.label" :value="item.value"></el-option>
</el-select>
</el-form-item>
</el-form>
<div slot="footer">
<el-button @click="handleClose">取 消</el-button>
<el-button type="primary" @click="backedProtocol('ruleForm')">确 定</el-button>
</div>
</el-dialog>
</template>
<script>
import * as moment from "moment";
export default {
name: "ProtocolSettled",
props: {
dialogVisible: {
type: Boolean,
required: true
},
loanNo: {
type: String
},
bizType: {
type: String
},
clientNo: {
type: String
},
},
data() {
return {
ui: {
submitLoading: false
},
visible: this.$props.dialogVisible,
cardList: [],
ruleForm: {
refundAmt: null,
allAmt: '',
bizType: '',
backedAmt: '',
loanNo: '',
breakAmt: '',
clientNo: '',
derateAmt: '',
interestAmt: '',
loanAmt: '',
overdueAmt: '',
principleAmt: '',
serviceAmt: '',
settleAmt: '',
startDate: '',
userDay: '',
userMonth: '',
memo: '',
attach: '',
bankAccount: '',
bankOwner: '',
raiseAmt: '',
},
bizTypeStr: '',
rules: {
backedAmt: [
{required: true, message: "扣款金额不能为空", trigger: 'blur'}
],
bankAccount: [
{required: true, message: '支付银行卡不能为空', trigger: 'blur'}
],
},
loginName: '',
}
},
filters: {
dateFilter: function (row) {
var date = row
if (typeof (date) == undefined || typeof (date) == null) {
return ''
}
return moment(date).format("YYYY-MM-DD")
},
},
created() {
this.ruleForm = {
loanNo: this.loanNo,
bizType: this.bizType,
clientNo: this.clientNo,
periodNo: this.periodNo,
};
this.bizTypeStr = this.bizType;
// 查询当前的基础数据
this.$$get('/back/countSettle?loanNo=' + this.loanNo).then(res => {
if (res.data.code != 200) {
this.$message.error(res.data.message);
this.handleClose();
} else {
this.ruleForm = res.data.result;
console.log(this.ruleForm, '哈哈哈');
}
}).catch(error => {
this.$message.error(error || '网络异常,请稍后。。。');
});
//获取银行卡列表
this.$$post(`/back/bankCardList`, {
clientNo: this.clientNo,
bizType: this.bizType,
loanNo: this.loanNo
}).then(res => {
this.cardList = res.data.result;
}).catch(error => {
this.$message.error(error || '网络异常,请稍后。。。');
});
},
mounted() {
this.loginName = localStorage.getItem("loginName");
},
methods: {
/** 提交点击 */
backedProtocol() {
this.$refs['ruleForm'].validate((valid) => {
if (!valid) {
return false
}
this.$$post(`/back/createBackedSettle`, this.buildParam()).then(res => {
if (res.data.code != 200) {
this.$message.error(res.data.message);
return
}
this.$message({message: '操作成功', type: 'success'});
this.handleClose();
this.$emit('callback')
}).catch(err => {
alert("error!")
})
})
},
//参数
buildParam() {
return {
loanNo: this.ruleForm.loanNo,
bizType: this.bizTypeStr,
backAmt: this.ruleForm.settleAmt,
burdenAmt: this.ruleForm.burdenAmt,
creator: localStorage.getItem("userName"),
bankAccount: this.ruleForm.bankAccount,
periodNo: this.ruleForm.periodNo,
rePayType: 'BYALL',
restingOrderEnum: 'NO'
};
},
/** 关闭处理 */
handleClose() {
this.visible = false;
setTimeout(() => {
this.$emit('update:dialogVisible', false)
}, 300);
},
}
}
</script>
<style lang="scss">
.select-bank-card {
width: 50%
}
</style>
<template>
<el-dialog
:append-to-body="true"
class="client-data-dialog"
title="创建当期代扣"
width="40%"
:visible.sync="visible"
:before-close="handleClose">
<el-form
:model="ruleForm"
label-suffix=":" size="small"
:rules="rules" ref="ruleForm"
label-width="140px"
class="demo-ruleForm">
<el-form-item label="期数">
<span>{{ ruleForm.periodNo }}</span>
</el-form-item>
<el-form-item label="计划还款金额">
<span>{{ ruleForm.planAmt }}</span>
</el-form-item>
<el-form-item label="扣款金额" prop="backedAmt">
<el-input v-if="ruleForm.isCustomAmount" v-model="ruleForm.remainAmt" placeholder="请输入转账金额" ></el-input>
<el-input v-else v-model="ruleForm.remainAmt" placeholder="请输入转账金额" disabled></el-input>
</el-form-item>
<el-form-item label="选择银行卡" prop="bankAccount">
<el-select clearable v-model="ruleForm.bankAccount"
class="select-bank-card">
<el-option
v-for="item in this.cardList"
:key="item.value"
@click.native="changeCard(item)"
:label="item.label"
:value="item.value"
></el-option>
</el-select>
</el-form-item>
<el-form-item label="选择支付渠道" prop="paymentChannel">
<el-select clearable v-model="ruleForm.paymentChannel" class="select-bank-card">
<el-option
v-for="item in this.channelList"
:key="item.payChannelApi"
:label="item.message"
:value="item.payChannelApi"></el-option>
</el-select>
</el-form-item>
</el-form>
<div slot="footer">
<el-button size="small" @click="handleClose">取 消</el-button>
<el-button size="small" type="primary" @click="protocolOne('ruleForm')">确 定</el-button>
</div>
</el-dialog>
</template>
<script>
export default {
name: "ProtocolSettledOne",
props: {
dialogVisible: {
type: Boolean,
required: true
},
loanNo: {
type: String
},
bizType: {
type: String
},
clientNo: {
type: String
},
periodNo: {
type: Number
},
remainAmt: {
type: Number
},
planAmt: {
type: Number
},
loanSign:{
type:String
},
isCustomAmount:{
type: Boolean,
}
},
data() {
return {
ui: {
submitLoading: false
},
visible: this.$props.dialogVisible,
ruleForm: {
periodNo: '',
orderNo: '',
loanNo: '',
creator: '',
remainAmt: '',
planFu: '',
planAmt: '',
planBen: '',
planXi: '',
attach: '',
planNo: '',
bankAccount: '',
paymentChannel:'',
bankOwner: '',
backedAmt: '',
memo: '',
loanSign:"",
isCustomAmount:null
},
rules: {
bankAccount: [{required: true, message: '支付银行卡不能为空', trigger: 'blur'}],
paymentChannel: [{required: true, message: '支付渠道不能为空', trigger: 'blur'}],
backAmt: [{required: true, message: "扣款金额不能为空", trigger: 'blur'}],
},
loginName: '',
cardList: [],
channelList:[]
}
},
created() {
console.log(this.$props,'9090909090');
this.ruleForm = {
loanNo: this.loanNo,
bizType: this.bizType,
clientNo: this.clientNo,
periodNo: this.periodNo,
remainAmt: this.remainAmt,
planAmt: this.planAmt,
loanSign:this.loanSign,
isCustomAmount:this.isCustomAmount,
};
// console.log(this.$props,'hhhhhhhhhhh');
//获取银行卡列表
this.$$post(`/back/bankCardList`, {
...this.ruleForm
}).then(res => {
console.log(res,'银行卡');
this.cardList = res.data.result;
}).catch(error => {
this.$message.error(error || '网络异常,请稍后。。。');
});
},
mounted() {
this.loginName = localStorage.getItem("userName");
},
methods: {
/** 提交点击 */
protocolOne() {
this.$refs['ruleForm'].validate((valid) => {
if (valid) {
this.$$post(`/back/createBackedSettle`, this.buildParam()).then(res => {
if (res.data.code != 200) {
this.$message.error(res.data.message);
return
}
this.handleClose();
this.$message({message: '操作成功', type: 'success'});
this.$emit('callback')
}).catch(err => {
alert("error!")
})
}
})
},
//银行卡对应的支付渠道
changeCard(val){
console.log(val.payChannelApiVOS,'12131232132');
this.channelList=val.payChannelApiVOS;
if(val.payChannelApiVOS.length==0){
this.ruleForm.paymentChannel="";
}
},
//参数
buildParam() {
return {
loanNo: this.ruleForm.loanNo,
bizType: this.ruleForm.bizType,
creator: localStorage.getItem("userName"),
bankAccount: this.ruleForm.bankAccount,
backAmt: this.ruleForm.remainAmt,
periodNo:this.ruleForm.periodNo,
rePayType: 'BYONE',
restingOrderEnum:'NO',
payChannelApi:this.ruleForm.paymentChannel
};
},
/** 关闭处理 */
handleClose() {
this.visible = false;
setTimeout(() => {
this.$emit('update:dialogVisible', false)
}, 300);
},
}
}
</script>
<style lang="scss" >
.select-bank-card {
width: 50%
}
</style>
<template>
<div class="page-com">
<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" width="150" 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 :show-overflow-tooltip="true" 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>
</template>
<script>
import * as moment from "moment";
export default {
name: 'RiskInfo',
props: {
title: {
type: String,
required: false,
},
params: {
type: Object,
required: true
},
},
data() {
return {
tableStatus: [{text: '成功', value: "SUCCESS"}, {text: '失败', value: "FAIL"}],
form: {
total: 1,
current: 1,
size: 10,
// result:''
},
updateQueDialog: {
visible: false,
feedNo: '',
feedType: '',
feedStatus: '',
feedContent: '',
clientNo: '',
creater: '',
finishContent: '',
},
data: [],
backValue:null
}
},
async created() {
if(this.params){
const params = this.params;
// console.log(params,'哈哈3')
this.form.bizNo = params.loanNo;
await this.init()
}
},
methods: {
headerStyle() {
return "tableHeaderStyle";
},
async init() {
const parB={
bizNo: this.form.bizNo,
current: this.form.current,
size: this.form.size,
total: this.form.total,
result:this.backValue
}
const res = await this.$$post('/back/detailPageList', parB );
const {success, result} = res.data;
if (success && result !== null) {
const {data, total} = result;
this.data = data;
// console.log(this.data[0].backedNo,'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.init();
// this.loanBackedData(this.loanNos)
},
}
}
</script>
<style>
.tables{
margin-bottom: 20px;
}
.pages {
display: flex;
align-items: center;
justify-content: center;
}
</style>
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
...@@ -315,7 +315,7 @@ export default { ...@@ -315,7 +315,7 @@ export default {
.custom-table-checkbox { .custom-table-checkbox {
.el-checkbox { .el-checkbox {
display: block !important; display: block !important;
margin: 0 0 $base-padding/4 0; margin: 0 0 calc($base-padding/4) 0;
} }
} }
......
...@@ -276,7 +276,6 @@ ...@@ -276,7 +276,6 @@
.custom-table-checkbox { .custom-table-checkbox {
.el-checkbox { .el-checkbox {
display: block !important; display: block !important;
//margin: 0 0 $base-padding/4 0;
} }
} }
</style> </style>
...@@ -64,7 +64,7 @@ module.exports = { ...@@ -64,7 +64,7 @@ module.exports = {
"/api": { "/api": {
//target: "http://192.168.0.199:8221", //target: "http://192.168.0.199:8221",
//target: "http://192.168.0.26:8785", //target: "http://192.168.0.26:8785",
target: "http://114.55.246.69:8785", target: "https://apimanager.feiyiyc.com",
ws: true, ws: true,
changeOrigin: true, changeOrigin: true,
pathRewrite: { pathRewrite: {
......
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