Commit 73545cd7 authored by caimeng's avatar caimeng

6月9号提交一下

parent 1128f67c
...@@ -22,3 +22,6 @@ ...@@ -22,3 +22,6 @@
.el-dialog__header{ .el-dialog__header{
border-bottom: 1px solid #ebeef5; border-bottom: 1px solid #ebeef5;
} }
.el-descriptions-row .el-descriptions-item__cell{
text-align: center !important;
}
...@@ -2,28 +2,45 @@ ...@@ -2,28 +2,45 @@
<template> <template>
<div class='com'> <div class='com'>
<block-header title='审批结果' /> <block-header title='审批结果' />
<el-descriptions style='margin-bottom: 20px;' border size='small' :column='3'> <el-descriptions style='margin-bottom: 20px;' border size='small' direction="vertical" :column='5'>
<el-descriptions-item label-class-name='labelCls' label='用户申请金额'>{{result.applyAmount}}</el-descriptions-item> <el-descriptions-item label-class-name='labelCls' label='用户申请金额'>{{ applyAmount }}</el-descriptions-item>
<el-descriptions-item label-class-name='labelCls' label='剩余未还本金'>{{result.creditAmount}}</el-descriptions-item> <el-descriptions-item label-class-name='labelCls' label='剩余未还本金'>{{ creditAmount }}</el-descriptions-item>
<el-descriptions-item label-class-name='labelCls' label='机审建议额度'>{{result.manualAmount}}</el-descriptions-item> <el-descriptions-item label-class-name='labelCls' label='机审建议额度'>{{ manualAmount }}</el-descriptions-item>
<el-descriptions-item label-class-name='labelCls' label='人审额度'>{{result.partnerGrade}}</el-descriptions-item> <el-descriptions-item label-class-name='labelCls' label='人审额度'>{{ partnerGrade }}</el-descriptions-item>
<el-descriptions-item label-class-name='labelCls' label='合作商等级'>{{result.surplusNoPrincipal}}</el-descriptions-item> <el-descriptions-item label-class-name='labelCls' label='合作商等级'>{{ surplusNoPrincipal }}</el-descriptions-item>
</el-descriptions> </el-descriptions>
</div> </div>
</template> </template>
<script> <script>
import _ from 'lodash' import { money } from '@/utils/index'
import API from '@/server/api'
export default { export default {
name: 'ApprovalResult', name: 'ApprovalResult',
props:{ props: {
//eslint-disable-next-line vue/require-default-prop //eslint-disable-next-line vue/require-default-prop
result:{ result: {
type:Object, type: Object,
require:true require: true
}
},
data() {
return {
applyAmount: '',
creditAmount: '',
manualAmount: '',
partnerGrade: '',
surplusNoPrincipal: ''
}
},
created() {
if (this.result) {
const { applyAmount, creditAmount, manualAmount, partnerGrade } = this.result
this.applyAmount = money(applyAmount)
this.creditAmount = money(creditAmount)
this.manualAmount = money(manualAmount)
this.partnerGrade = money(partnerGrade)
} }
} }
} }
......
<!-- 预授信申述 -->
<template>
<el-dialog
:visible.sync='dialogVisible'
:before-close='handleClose'
:destroy-on-close='true'
width='45%'
title='审批'>
<div class='page'>
<!--搜索-->
<el-form ref='dForm' label-suffix=':' label-width='120px' :rules='rules' :model='form' class='form-inline'>
<el-form-item prop='perAllotAmount' label='人审额度(元)'>
<el-input v-model='form.perAllotAmount' clearable placeholder='请输入人审额度' />
</el-form-item>
<template v-if='searchData!==null'>
<el-form-item prop='capitalCode' label='选择资方'>
<el-row>
<el-col :span='14'>
<el-select v-model='form.capitalCode' style='width: 100%;' clearable>
<el-option
v-for='(item,index) in searchData.financierResponseList'
:key='index'
:value='item.capitalCode'
:label='item.message'>
</el-option>
</el-select>
</el-col>
<template v-if='form.capitalCode==="FENGSHENGBUSINESS"'>
<el-col :span='8'>
<el-button style='margin-left: 10px' type='primary' @click='handleRisk'>风审查询</el-button>
</el-col>
</template>
</el-row>
</el-form-item>
</template>
<el-form-item prop='perAllotAmount' label='风审查询结果'>
</el-form-item>
<el-form-item prop='memo' label='备注'>
<el-input v-model='form.memo' type='textarea' clearable placeholder='请输入备注' />
</el-form-item>
<el-form-item prop='approveStatus' label='审批意见'>
<template v-if='searchData!==null'>
<el-radio-group v-model='form.approveOpinion'>
<el-radio v-for='(item,index) in searchData.allotOpinionEnumResponseList'
:key='index'
:label='item.code'>{{ item.desc }}
</el-radio>
</el-radio-group>
</template>
</el-form-item>
</el-form>
</div>
<span slot='footer' class='dialog-footer'>
<el-button type='primary' @click='onSubmit("dForm")'>确 定</el-button>
<el-button @click='handleClose'>取 消</el-button>
</span>
</el-dialog>
</template>
<script>
import API from '@/server/api'
import _ from 'lodash'
import { mapGetters } from 'vuex'
export default {
name: 'Approval',
props: {
dialogVisible: {
type: Boolean,
require: true
},
item: {
type: Object,
require: true
}
},
data() {
return {
financeList: [],
rules: {
capitalCode: [
{
required: true,
trigger: 'blur',
message: '请选择放款资方'
}
],
perAllotAmount: [
{
required: true,
trigger: 'blur',
message: '请输入人审额度'
}
]
},
hasRisk: false,
form: {
approveStatus: '',
capitalCode: '',
creditNo: '',
memo: '',
perAllotAmount: '',
userId: ''
}
}
},
computed: {
...mapGetters(['searchData', 'user'])
},
async created() {
console.log(this.item, 'nash ')
if (this.item !== null) {
this.form.preCreditNo = this.item.preCreditNo
// 初始化丰盛查询结果
await this.initRiskResult()
}
},
methods: {
// 风审查询
async handleRisk() {
if (!this.hasRisk) {
const { creditNo, loanIntentionNum } = this.item
console.log(loanIntentionNum, '那啥')
const creditAmount = this.form.perAllotAmount
if (!creditAmount && /^[0-9]*$/.test(creditAmount)) {
this.$message({
type: 'error',
message: '请输入正确的审批金额!'
})
return
}
const result = await API.capitalSubmit({
loanIntentionNum,
creditNo,
creditAmount
})
if (result.success) {
this.hasRisk = true
await this.initRiskResult()
}
} else {
await this.initRiskResult()
}
},
// 风审查询结果
async initRiskResult() {
const { creditNo } = this.item
const result = await API.initCapitalResult({
creditNo
})
if (result.success) {
console.log(result, '结果')
}
},
onSubmit(formName) {
console.log(this.item, this.form, '数据呢')
this.$refs[formName].validate(async (valid) => {
if (valid) {
this.$confirm('是否确认提交?', '提示', {
confirmButtonText: '确定',
cancelButtonText: '取消',
type: 'warning'
}).then(async (res) => {
console.log(res, '是啥')
const form = this.form
form.userId = this.user.userId
console.log(form, '表单数据')
const result = await API.preCreditPlead({
...form
})
if (result.success) {
this.$message({
type: 'success',
message: '申述成功!'
})
this.$emit('handleClose')
this.$emit('callback')
}
}).catch((e) => {
console.log(e, '取消申述了')
})
}
})
},
handleClose() {
this.$emit('handleClose')
}
}
}
</script>
<style lang='scss' scoped>
.page-fence {
::v-deep {
i {
cursor: pointer;
}
}
box-sizing: border-box;
padding: 20px;
}
</style>
<style lang='scss'>
.custom-table-checkbox {
.el-checkbox {
display: block !important;
margin: 0 0 $base-padding/4 0;
}
}
.action-bar {
margin-bottom: 15px;
}
</style>
...@@ -5,7 +5,6 @@ ...@@ -5,7 +5,6 @@
<!--表格--> <!--表格-->
<el-table <el-table
ref="tableSort" ref="tableSort"
v-loading="listLoading"
border border
:data="list" :data="list"
style="width: 100%" style="width: 100%"
...@@ -73,8 +72,7 @@ ...@@ -73,8 +72,7 @@
prop: "appealMemo" prop: "appealMemo"
} }
], ],
list: [], list: []
listLoading: true,
} }
}, },
computed: { computed: {
...@@ -91,7 +89,6 @@ ...@@ -91,7 +89,6 @@
created() { created() {
if(this.logData){ if(this.logData){
this.list = this.logData; this.list = this.logData;
this.listLoading = false;
} }
} }
} }
......
...@@ -12,10 +12,10 @@ ...@@ -12,10 +12,10 @@
<el-descriptions-item label-class-name='labelCls' label='学历'>{{baseInfo.applyDate}}</el-descriptions-item> <el-descriptions-item label-class-name='labelCls' label='学历'>{{baseInfo.applyDate}}</el-descriptions-item>
<el-descriptions-item label-class-name='labelCls' label='婚姻状况'>{{baseInfo.applyDate}}</el-descriptions-item> <el-descriptions-item label-class-name='labelCls' label='婚姻状况'>{{baseInfo.marriageStr}}</el-descriptions-item>
<el-descriptions-item label-class-name='labelCls' label='年龄(周岁)'>{{baseInfo.applyDate}}</el-descriptions-item> <el-descriptions-item label-class-name='labelCls' label='年龄(周岁)'>{{baseInfo.applyDate}}</el-descriptions-item>
<el-descriptions-item label-class-name='labelCls' label='工作行业'>{{baseInfo.applyDate}}</el-descriptions-item> <el-descriptions-item label-class-name='labelCls' label='工作行业'>{{baseInfo.workIndustryStr}}</el-descriptions-item>
<el-descriptions-item label-class-name='labelCls' label='工作城市'>{{baseInfo.applyDate}}</el-descriptions-item> <el-descriptions-item label-class-name='labelCls' label='工作城市'>{{baseInfo.companyAddress}}</el-descriptions-item>
<el-descriptions-item label-class-name='labelCls' label='公司全称'>{{baseInfo.companyName}}</el-descriptions-item> <el-descriptions-item label-class-name='labelCls' label='公司全称'>{{baseInfo.companyName}}</el-descriptions-item>
<el-descriptions-item label-class-name='labelCls' label='居中城市'>{{baseInfo.liveAddress}}</el-descriptions-item> <el-descriptions-item label-class-name='labelCls' label='居中城市'>{{baseInfo.liveAddress}}</el-descriptions-item>
<el-descriptions-item label-class-name='labelCls' label='居中地址'>{{baseInfo.liveDetailAddress}}</el-descriptions-item> <el-descriptions-item label-class-name='labelCls' label='居中地址'>{{baseInfo.liveDetailAddress}}</el-descriptions-item>
...@@ -24,10 +24,13 @@ ...@@ -24,10 +24,13 @@
<el-descriptions-item label-class-name='labelCls' label='BD经理'>{{baseInfo.bdName}}</el-descriptions-item> <el-descriptions-item label-class-name='labelCls' label='BD经理'>{{baseInfo.bdName}}</el-descriptions-item>
<el-descriptions-item label-class-name='labelCls' label='商户区域'>{{baseInfo.regionName}}</el-descriptions-item> <el-descriptions-item label-class-name='labelCls' label='商户区域'>{{baseInfo.regionName}}</el-descriptions-item>
<el-descriptions-item label-class-name='labelCls' label='紧急联系人姓名'>{{baseInfo.firstName}}</el-descriptions-item>
<el-descriptions-item label-class-name='labelCls' label='紧急联系人关系'>{{baseInfo.firstRelationStr}}</el-descriptions-item>
<el-descriptions-item label-class-name='labelCls' label='紧急联系人电话'>{{baseInfo.firstPhone}}</el-descriptions-item>
<el-descriptions-item label-class-name='labelCls' label='工作地址'>{{baseInfo.companyAddress}}{{baseInfo.companyAddressDetail}}</el-descriptions-item> <el-descriptions-item label-class-name='labelCls' label='工作地址'>{{baseInfo.companyAddress}}{{baseInfo.companyAddressDetail}}</el-descriptions-item>
<el-descriptions-item label-class-name='labelCls' label='是否需要补交资料'>{{baseInfo.applyDate}}</el-descriptions-item> <el-descriptions-item label-class-name='labelCls' label='合同展示地址'>{{baseInfo.address}}</el-descriptions-item>
<el-descriptions-item label-class-name='labelCls' label='合同展示地址'>{{baseInfo.contractAddress}}</el-descriptions-item> <el-descriptions-item label-class-name='labelCls' label='月收入'>{{baseInfo.selfMonthIncomeStr}}</el-descriptions-item>
<el-descriptions-item label-class-name='labelCls' label='收入'>{{baseInfo.selfMonthIncome}}</el-descriptions-item>
<el-descriptions-item label-class-name='labelCls' label='客户GPS'>{{baseInfo.clientGps}}</el-descriptions-item> <el-descriptions-item label-class-name='labelCls' label='客户GPS'>{{baseInfo.clientGps}}</el-descriptions-item>
<el-descriptions-item label-class-name='labelCls' label='首次授信'>{{baseInfo.isFirstCredit}}</el-descriptions-item> <el-descriptions-item label-class-name='labelCls' label='首次授信'>{{baseInfo.isFirstCredit}}</el-descriptions-item>
......
...@@ -3,8 +3,8 @@ ...@@ -3,8 +3,8 @@
<div> <div>
<template v-if='clientIdCardInfoResponse.length'> <template v-if='clientIdCardInfoResponse.length'>
<block-header title='客户身份证信息' /> <block-header title='客户身份证信息' />
<el-row> <el-row :gutter='20'>
<el-col v-for='(o, index) in clientIdCardInfoResponse' :key='index' :span='4' :offset='index > 0 ? 1 : 0'> <el-col v-for='(o, index) in clientIdCardInfoResponse' :key='index' :span='4'>
<el-card :body-style="{ padding: '10px' }"> <el-card :body-style="{ padding: '10px' }">
<el-image class='el-card-image' :src='o[1]' <el-image class='el-card-image' :src='o[1]'
@click.native='showImgViewer(clientIdCardInfoResponse,"idCard")'></el-image> @click.native='showImgViewer(clientIdCardInfoResponse,"idCard")'></el-image>
...@@ -19,8 +19,8 @@ ...@@ -19,8 +19,8 @@
<template v-if='faceInfoResponse.length'> <template v-if='faceInfoResponse.length'>
<block-header title='人脸信息' /> <block-header title='人脸信息' />
<el-row> <el-row :gutter='20'>
<el-col v-for='(o, index) in faceInfoResponse' :key='index' :span='4' :offset='index > 0 ? 1 : 0'> <el-col v-for='(o, index) in faceInfoResponse' :key='index' :span='4' >
<el-card :body-style="{ padding: '10px' }"> <el-card :body-style="{ padding: '10px' }">
<el-image class='el-card-image' :src='o[1]' <el-image class='el-card-image' :src='o[1]'
@click.native='showImgViewer(faceInfoResponse,"face")'></el-image> @click.native='showImgViewer(faceInfoResponse,"face")'></el-image>
...@@ -37,8 +37,8 @@ ...@@ -37,8 +37,8 @@
<template v-if='creditAttachInfo.length'> <template v-if='creditAttachInfo.length'>
<block-header title='授信附件信息' /> <block-header title='授信附件信息' />
<el-row> <el-row :gutter='20'>
<el-col v-for='(o, index) in creditAttachInfo' :key='index' :span='4' :offset='index > 0 ? 1 : 0'> <el-col v-for='(o, index) in creditAttachInfo' :key='index' :span='4' >
<el-card :body-style="{ padding: '10px' }"> <el-card :body-style="{ padding: '10px' }">
<el-image class='el-card-image' :src='o.screenList[0]' <el-image class='el-card-image' :src='o.screenList[0]'
@click.native='showImgViewer(o.screenList,"annex")'></el-image> @click.native='showImgViewer(o.screenList,"annex")'></el-image>
...@@ -53,8 +53,8 @@ ...@@ -53,8 +53,8 @@
<template v-if='supplAttachInfo.length'> <template v-if='supplAttachInfo.length'>
<block-header title='客户附件信息' /> <block-header title='客户附件信息' />
<el-row> <el-row :gutter='20'>
<el-col v-for='(o, index) in supplAttachInfo' :key='index' :span='4' :offset='index > 0 ? 1 : 0'> <el-col v-for='(o, index) in supplAttachInfo' :key='index' :span='4'>
<el-card :body-style="{ padding: '10px' }"> <el-card :body-style="{ padding: '10px' }">
<el-image class='el-card-image' :src='o.screenList[0]' <el-image class='el-card-image' :src='o.screenList[0]'
@click.native='showImgViewer(o.screenList,"annex")'></el-image> @click.native='showImgViewer(o.screenList,"annex")'></el-image>
...@@ -203,9 +203,11 @@ ...@@ -203,9 +203,11 @@
.el-card-intro { .el-card-intro {
box-sizing: border-box; box-sizing: border-box;
height: 56px;
display: flex; display: flex;
align-items: center; align-items: center;
justify-content: center; justify-content: center;
padding: 20px; padding: 20px 5px;
overflow: hidden;
} }
</style> </style>
...@@ -4,9 +4,9 @@ ...@@ -4,9 +4,9 @@
<block-header title='项目信息' /> <block-header title='项目信息' />
<el-descriptions style='margin-bottom: 20px;' border size='small' :column='3'> <el-descriptions style='margin-bottom: 20px;' border size='small' :column='3'>
<el-descriptions-item label-class-name='labelCls' label='医院名称'>{{projectInfo.regName}}</el-descriptions-item> <el-descriptions-item label-class-name='labelCls' label='医院名称'>{{projectInfo.regName}}</el-descriptions-item>
<el-descriptions-item label-class-name='labelCls' label='项目金额'>{{projectInfo.projectAmount}}</el-descriptions-item> <el-descriptions-item label-class-name='labelCls' label='项目金额'>{{money(projectInfo.projectAmount)}}</el-descriptions-item>
<el-descriptions-item label-class-name='labelCls' label='申请金额'>{{projectInfo.loanIntentionAmount}}</el-descriptions-item> <el-descriptions-item label-class-name='labelCls' label='申请金额'>{{loanIntentionAmount}}</el-descriptions-item>
<el-descriptions-item label-class-name='labelCls' label='借款期限'>{{projectInfo.loanIntentionNum}}</el-descriptions-item> <el-descriptions-item label-class-name='labelCls' label='借款期限'>{{projectInfo.loanIntentionNum}}</el-descriptions-item>
<el-descriptions-item label-class-name='labelCls' label='申请项目'>{{projectInfo.projectName}}</el-descriptions-item> <el-descriptions-item label-class-name='labelCls' label='申请项目'>{{projectInfo.projectName}}</el-descriptions-item>
<el-descriptions-item label-class-name='labelCls' label='商家等级'>{{projectInfo.applyDate}}</el-descriptions-item> <el-descriptions-item label-class-name='labelCls' label='商家等级'>{{projectInfo.applyDate}}</el-descriptions-item>
<el-descriptions-item label-class-name='labelCls' label='商户GPS'>{{projectInfo.projectId}}</el-descriptions-item> <el-descriptions-item label-class-name='labelCls' label='商户GPS'>{{projectInfo.projectId}}</el-descriptions-item>
...@@ -16,6 +16,8 @@ ...@@ -16,6 +16,8 @@
</template> </template>
<script> <script>
import { money } from '@/utils'
export default { export default {
name: "UserProjectInfo", name: "UserProjectInfo",
props:{ props:{
...@@ -23,6 +25,15 @@ ...@@ -23,6 +25,15 @@
type:Object, type:Object,
require:true require:true
} }
},
data(){
return {
loanIntentionAmount:''
}
},
created() {
const {loanIntentionAmount} = this.projectInfo;
this.loanIntentionAmount = money(loanIntentionAmount);
} }
}; };
</script> </script>
......
...@@ -2,6 +2,7 @@ import BlockHeader from '@/components/blockHeader' ...@@ -2,6 +2,7 @@ import BlockHeader from '@/components/blockHeader'
import OperationLog from '@/components/pre-operation-log' import OperationLog from '@/components/pre-operation-log'
import PrePlead from '@/components/pre-plead' import PrePlead from '@/components/pre-plead'
import Plead from '@/components/plead' import Plead from '@/components/plead'
import Approval from '@/components/approval'
import UserOtherInfo from '@/components/user-other-info' import UserOtherInfo from '@/components/user-other-info'
import ApprovalResult from '@/components/approval-result' import ApprovalResult from '@/components/approval-result'
import AuditResult from '@/components/audit-result' import AuditResult from '@/components/audit-result'
...@@ -21,6 +22,7 @@ export default { ...@@ -21,6 +22,7 @@ export default {
AuditResult, AuditResult,
UserBaseInfo, UserBaseInfo,
UserProjectInfo, UserProjectInfo,
Approval,
'el-image-viewer': () => import('element-ui/packages/image/src/image-viewer') 'el-image-viewer': () => import('element-ui/packages/image/src/image-viewer')
}, },
data(){ data(){
...@@ -75,6 +77,20 @@ export default { ...@@ -75,6 +77,20 @@ export default {
if (formName) { if (formName) {
this.$refs[formName].resetFields() this.$refs[formName].resetFields()
} }
},
money (s, n) {
if (!s) s = 0
if (!n) n = 2
n = n > 0 && n <= 20 ? n : 2
const ns = (s + '').replace(/[^\d.-]/g, '')
s = parseFloat(ns).toFixed(n) + ''
const l = s.split('.')[0].split('').reverse(),
r = s.split('.')[1]
let t = ''
for (let i = 0; i < l.length; i++) {
t += l[i] + ((i + 1) % 3 === 0 && (i + 1) !== l.length ? ',' : '')
}
return t.split('').reverse().join('') + '.' + r
} }
} }
} }
...@@ -103,12 +103,21 @@ export const asyncRoutes = [ ...@@ -103,12 +103,21 @@ export const asyncRoutes = [
} }
}, },
{ {
path: 'order', path: 'approval',
name: 'CreditOrder', name: 'CreditApproval',
component: () => import('@/views/credit/order'), component: () => import('@/views/credit/approval'),
meta: { meta: {
noKeepAlive: true, noKeepAlive: true,
title: '我的审批' title: '我的审批'
}
},
{
path: 'approvalDetail',
name: 'ApprovalDetail',
component: () => import('@/views/credit/approval-detail'),
meta: {
noKeepAlive: true,
title: '审批详情'
}, },
hidden: true hidden: true
}, },
...@@ -118,9 +127,7 @@ export const asyncRoutes = [ ...@@ -118,9 +127,7 @@ export const asyncRoutes = [
component: () => import('@/views/credit/detail'), component: () => import('@/views/credit/detail'),
meta: { meta: {
noKeepAlive: true, noKeepAlive: true,
title: '授信详情', title: '授信详情'
remixIcon: 'building-line',
tagHidden: true
}, },
hidden: true hidden: true
...@@ -152,32 +159,21 @@ export const asyncRoutes = [ ...@@ -152,32 +159,21 @@ export const asyncRoutes = [
}, },
children: [ children: [
{ {
path: 'order', path: 'list',
name: 'ApprovalList', name: 'ApprovalList',
component: () => import('@/views/approval/order'), component: () => import('@/views/approval/list'),
meta: { meta: {
noKeepAlive: true, noKeepAlive: true,
title: '我的订单', title: '我的订单'
remixIcon: 'product-hunt-line'
} }
}, },
//{
// path: 'order1',
// name: 'ApprovalList',
// component: () => import('@/views/approval/order1'),
// meta: {
// title: '我的订单2',
// remixIcon: 'product-hunt-line',
// },
//},
{ {
path: 'detail', path: 'detail',
name: 'ApprovalDetail', name: 'ApprovalDetail',
component: () => import('@/views/approval/detail'), component: () => import('@/views/approval/detail'),
meta: { meta: {
noKeepAlive: true, noKeepAlive: true,
title: '详情', title: '审批订单详情'
remixIcon: 'product-hunt-line'
}, },
hidden: true hidden: true
} }
...@@ -200,8 +196,7 @@ export const asyncRoutes = [ ...@@ -200,8 +196,7 @@ export const asyncRoutes = [
component: () => import('@/views/loan/detail'), component: () => import('@/views/loan/detail'),
meta: { meta: {
noKeepAlive: true, noKeepAlive: true,
title: '详情', title: '借款详情'
remixIcon: 'task-line'
}, },
hidden: true hidden: true
}, },
...@@ -211,8 +206,7 @@ export const asyncRoutes = [ ...@@ -211,8 +206,7 @@ export const asyncRoutes = [
component: () => import('@/views/loan/audit'), component: () => import('@/views/loan/audit'),
meta: { meta: {
noKeepAlive: true, noKeepAlive: true,
title: '稽核审批', title: '稽核审批'
remixIcon: 'task-line'
} }
}, },
{ {
...@@ -221,8 +215,7 @@ export const asyncRoutes = [ ...@@ -221,8 +215,7 @@ export const asyncRoutes = [
component: () => import('@/views/loan/list'), component: () => import('@/views/loan/list'),
meta: { meta: {
noKeepAlive: true, noKeepAlive: true,
title: '放款确认', title: '放款确认'
remixIcon: 'task-line'
} }
} }
] ]
...@@ -243,8 +236,8 @@ export const asyncRoutes = [ ...@@ -243,8 +236,8 @@ export const asyncRoutes = [
name: 'AdminUser', name: 'AdminUser',
component: () => import('@/views/admin/user'), component: () => import('@/views/admin/user'),
meta: { meta: {
title: '用户管理', noKeepAlive: true,
remixIcon: 'notification-3-line' title: '用户管理'
} }
} }
] ]
......
...@@ -92,6 +92,25 @@ export default { ...@@ -92,6 +92,25 @@ export default {
data data
}) })
}, },
// 我的审批列表
auditList(data) {
return request({
url: '/credit/myApproveList',
method: 'post',
data
})
},
// 我的审批详情
auditDetail(params) {
return request({
url: '/credit/myApproveDetail',
method: 'get',
params
})
},
// 初始化过滤条件的基础数据 // 初始化过滤条件的基础数据
initSearchData(data) { initSearchData(data) {
return request({ return request({
...@@ -112,11 +131,19 @@ export default { ...@@ -112,11 +131,19 @@ export default {
}) })
}, },
// 初始化审批订单详情 // 初始化审批订单详情
initApproveDetail(data) { initApproveDetail(params) {
return request({ return request({
url: '/approve/myOrderDetail', url: '/approve/myOrderDetail',
method: 'post', method: 'get',
data params
})
},
// 审批人员上下线
initApproveOnOff(params) {
return request({
url: '/approve/getManState',
method: 'get',
params
}) })
}, },
// 审批人员上下线 // 审批人员上下线
...@@ -135,6 +162,17 @@ export default { ...@@ -135,6 +162,17 @@ export default {
data data
}) })
}, },
// 初始化转派在线人员列表
initReassignmentUser(params) {
return request({
url: '/approve/getOnLinePerson',
method: 'get',
params
})
},
// 审批订单审批提交 // 审批订单审批提交
approveSubmit(data) { approveSubmit(data) {
return request({ return request({
...@@ -143,6 +181,30 @@ export default { ...@@ -143,6 +181,30 @@ export default {
data data
}) })
}, },
// 订单审批 选择资金方
initFinanceList(params) {
return request({
url: '/approve/financierList',
method: 'get',
params
})
},
// 风审查询
capitalSubmit(data) {
return request({
url: '/approve/fengshengCredit',
method: 'post',
data
})
},
// 查询结果
initCapitalResult(params) {
return request({
url: '/approve/capitalResult',
method: 'get',
params
})
},
// 借款管理接口 // 借款管理接口
...@@ -194,6 +256,57 @@ export default { ...@@ -194,6 +256,57 @@ export default {
method: 'post', method: 'post',
data data
}) })
} },
// 用户管理
// 用户列表
userList(params){
return request({
url: '/user/searchAll',
method: 'get',
params
})
},
// 用户详情
userDetail(params){
return request({
url: '/user/searchAll',
method: 'get',
params
})
},
// 用户新增
userNew(data){
return request({
url: '/user/insert',
method: 'post',
data
})
},
// 用户编辑
userUpdate(data){
return request({
url: '/user/update',
method: 'post',
data
})
},
// 用户重置密码
userResetPwd(data){
return request({
url: '/user/resetPassword',
method: 'post',
data
})
},
// 用户修改密码
userUpdatePwd(data){
return request({
url: '/user/updatePassword',
method: 'post',
data
})
},
} }
// 格式化两位小数
export const money = function (s, n) {
if (!s) s = 0
if (!n) n = 2
n = n > 0 && n <= 20 ? n : 2
const ns = (s + '').replace(/[^\d.-]/g, '')
s = parseFloat(ns).toFixed(n) + ''
const l = s.split('.')[0].split('').reverse(),
r = s.split('.')[1]
let t = ''
for (let i = 0; i < l.length; i++) {
t += l[i] + ((i + 1) % 3 === 0 && (i + 1) !== l.length ? ',' : '')
}
return t.split('').reverse().join('') + '.' + r
}
/** /**
* @description 格式化时间 * @description 格式化时间
* @param time * @param time
......
This diff is collapsed.
...@@ -2,59 +2,124 @@ ...@@ -2,59 +2,124 @@
<template> <template>
<el-dialog <el-dialog
v-drag v-drag
title="转派" title='转派'
:visible.sync="visible" :visible.sync='visible'
:close-on-click-modal="false" :close-on-click-modal='false'
:append-to-body="true" :append-to-body='true'
width="30%" width='30%'
:before-close="handleClose" :before-close='handleClose'
> >
<el-form :model='form'> <el-form ref='form' label-suffix=':' label-width='120' :rules='rules' :model='form'>
<el-form-item label='选择转派人员'>
<el-select v-model='form.status' clearable placeholder='请选择'> <el-form-item prop='user' label='转派人员'>
<el-option label='启用' value='1' /> <template v-if='list.length'>
<el-option label='禁用' value='0' /> <el-select v-model='form.user' clearable placeholder='请选择'>
<el-option
v-for='(u,index) in list'
:key='index'
:label='u.userName'
:value='u.userId'></el-option>
</el-select> </el-select>
</template>
</el-form-item> </el-form-item>
</el-form> </el-form>
<div slot="footer" class="dialog-footer"> <div slot='footer' class='dialog-footer'>
<el-button type="default" @click="handleClose">取 消</el-button> <el-button type='default' @click='handleClose'>取 消</el-button>
<el-button type="primary" @click="onSubmit">确 定</el-button> <el-button type='primary' @click='onSubmit("form")'>确 定</el-button>
</div> </div>
</el-dialog> </el-dialog>
</template> </template>
<script> <script>
import API from "@/server/api"; import API from '@/server/api'
import _ from 'lodash'
import { mapGetters } from 'vuex'
export default { export default {
name: "Reassignment", name: 'Reassignment',
props:{ props: {
visible:{ visible: {
type:Boolean, type: Boolean,
required:true required: true
},
//eslint-disable-next-line vue/require-default-prop
item: {
type: Object,
require: true
} }
}, },
data() { data() {
return { return {
data: null,
list: [],
rules: {
user: [
{
required: true,
trigger: 'change',
message: '请选择转派人员'
}
]
},
form: { form: {
status: '' user: ''
}
}
},
computed: {
...mapGetters(['user'])
},
async created() {
if (this.item !== null) {
this.data = this.item
await this.initUser()
} }
};
}, },
methods: { methods: {
onSubmit(){ // 初始化用户列表
async initUser() {
const result = await API.initReassignmentUser({})
console.log(result, '返回结果')
if (result.success) {
this.list = result.result
}
},
async onSubmit(formName) {
this.$refs[formName].validate(async (valid) => {
if (valid) {
console.log(this.data, '数据')
const { creditNo } = this.data
const oldAllotId = this.user.userId;
const curAllotId = this.form.user;
const result = await API.approveReassignment({
creditNo,
curAllotId,
oldAllotId
});
if(result.success){
this.$message({
type: 'success',
message: '转派成功'
})
this.$emit('callback')
this.$emit('handleClose')
}
}
})
}, },
handleClose(){ handleClose() {
this.$emit("handleClose"); this.$emit('handleClose')
}
} }
} }
};
</script> </script>
<style lang="scss" scoped> <style lang='scss' scoped>
.page-fence { .page-fence {
::v-deep { ::v-deep {
i { i {
...@@ -66,7 +131,7 @@ ...@@ -66,7 +131,7 @@
padding: 20px; padding: 20px;
} }
</style> </style>
<style lang="scss"> <style lang='scss'>
.custom-table-checkbox { .custom-table-checkbox {
.el-checkbox { .el-checkbox {
display: block !important; display: block !important;
......
<template> <template>
<div class='page'> <div v-if='detail!==null' class='page'>
<user-base-info />
<user-project-info /> <!--用户基础信息-->
<template v-if='detail.clientDetail!==null'>
<user-base-info :base-info='detail.clientDetail' />
</template>
<user-other-info /> <!--用户项目信息-->
<template v-if='detail.projectInfoResponse!==null'>
<user-project-info :project-info='detail.projectInfoResponse' />
</template>
<operation-log />
<plead /> <!--其它信息-->
<user-other-info :info='detail' />
<!--第三方报告-->
<template v-if='detail.thirdPartyReport!==null'></template>
<!--路由结果报告-->
<template></template>
<!--操作日志-->
<template v-if='detail.operationLogResponse!==null'>
<operation-log :log-data='detail.operationLogResponse' />
</template>
<!--申述操作-->
<template v-if='false'>
<pre-plead />
</template>
</div> </div>
</template> </template>
<script> <script>
import API from '@/server/api' import API from '@/server/api'
export default { export default {
name: 'PreDetail', name: 'ApprovalDetail',
data() { data() {
return { return {
tenantNo: '' creditNo: '',
detail: null
} }
}, },
created() { async created() {
const { query } = this.$route const { query } = this.$route
if (query && query.tenantNo) { if (query && query.creditNo) {
this.tenantNo = query.tenantNo this.creditNo = query.creditNo
await this.init()
} }
}, },
methods: {} methods: {
async init() {
const creditNo = this.creditNo
const result = await API.initApproveDetail({
creditNo
})
this.detail = result.result
}
}
} }
</script> </script>
......
...@@ -19,30 +19,21 @@ ...@@ -19,30 +19,21 @@
placeholder='请输入客户姓名' placeholder='请输入客户姓名'
/> />
</el-form-item> </el-form-item>
<el-form-item prop='mobile' label='手机号码'>
<el-form-item label='授信类型'> <el-input
<el-select clearable v-model='queryForm.creditType' placeholder='请选择授信类型'> v-model='queryForm.mobile'
<el-option clearable
v-for='(item,index) in searchData.creditTypeResponseList' placeholder='请输入手机号码'
:label='item.creditTypeStr' />
:key='index'
:value='item.creditType'></el-option>
</el-select>
</el-form-item>
<el-form-item label='审批状态'>
<el-select clearable v-model='queryForm.creditStatus' placeholder='请选择授信类型'>
<el-option
v-for='(item,index) in searchData.creditStatusResponseList'
:label='item.creditStatusStr'
:key='index'
:value='item.creditStatus'></el-option>
</el-select>
</el-form-item> </el-form-item>
<el-form-item prop='time' label='申请时间'> <el-form-item prop='time' label='申请时间'>
<el-date-picker <el-date-picker
v-model='queryForm.time' v-model='queryForm.time'
type='datetimerange' type='datetimerange'
:picker-options='pickerConfig' :picker-options='pickerConfig'
:default-time="['00:00:00', '23:59:59']"
value-format='yyyy-MM-dd HH:mm:ss'
range-separator='至' range-separator='至'
start-placeholder='开始时间' start-placeholder='开始时间'
end-placeholder='结束时间' end-placeholder='结束时间'
...@@ -86,16 +77,27 @@ ...@@ -86,16 +77,27 @@
:show-overflow-tooltip='!!item.overflow' :show-overflow-tooltip='!!item.overflow'
> >
<template #default='{ row }'> <template #default='{ row }'>
<span>{{ row[item.prop] }}</span> <span v-if='item.label==="申请金额(元)" || item.label==="审核金额(元)"'>
{{ money(row[item.prop]) }}
</span>
<span v-else-if='item.label==="授信状态"'>
<el-tag v-if='row.creditStatus==="CREATED"' size='mini'>{{ row.creditStatusStr }}</el-tag>
<el-tag v-if='row.creditStatus==="CREDIT_ING"' type='warning' size='mini'>{{ row.creditStatusStr }}</el-tag>
<el-tag v-if='row.creditStatus==="MANUAL_CREDIT_ING"' type='warning' size='mini'>{{ row.creditStatusStr
}}</el-tag>
<el-tag v-if='row.creditStatus==="MANUAL_BACK"' type='danger' size='mini'>{{ row.creditStatusStr }}</el-tag>
<el-tag v-if='row.creditStatus==="FINISHED"' type='success' size='mini'>{{ row.creditStatusStr }}</el-tag>
</span>
<span v-else>{{ row[item.prop] }}</span>
</template> </template>
</el-table-column> </el-table-column>
<template v-if='isOnLine'> <template v-if='isOnLine'>
<el-table-column width='210' fixed='right' align='center' label='操作'> <el-table-column width='210' fixed='right' align='center' label='操作'>
<template #default='{ row }'> <template #default='{ row }'>
<el-button size='mini' type='danger' @click='handleView(row)'>审批</el-button> <el-button size='mini' type='danger' @click.native='handleApproval(row)'>审批</el-button>
<el-button size='mini' type='success' @click='handleView(row)'>详情</el-button> <el-button size='mini' type='success' @click='handleView(row)'>详情</el-button>
<el-button size='mini' type='primary' @click='handleClick(row)'>转派</el-button> <el-button size='mini' type='primary' @click='handleReassignment(row)'>转派</el-button>
</template> </template>
</el-table-column> </el-table-column>
</template> </template>
...@@ -112,9 +114,23 @@ ...@@ -112,9 +114,23 @@
/> />
<!--转派弹框--> <!--转派弹框-->
<template v-if='visible'>
<Reassignment <Reassignment
:visible='visible' :visible='visible'
@handleClose='visible = false' /> :item='item'
@handleClose='visible = false'
@callback='fetchData'
/>
</template>
<!--审批-->
<template v-if='ApprovalVisible'>
<Approval
:dialog-visible='ApprovalVisible'
:item='ApprovalItem'
@handleClose='ApprovalVisible = false'
@callback='fetchData' />
</template>
</div> </div>
</template> </template>
...@@ -134,52 +150,58 @@ ...@@ -134,52 +150,58 @@
data() { data() {
return { return {
isOnLine: false, isOnLine: false,
// 转派相关
visible: false, visible: false,
item: null,
checkList: ['授信编号', '客户姓名', '对应BD', '商户区域', '审核金额', '审核结果', '审批状态', '创建时间'], // 审批相关
ApprovalVisible: false,
ApprovalItem: null,
checkList: ['授信编号', '客户姓名', '手机号码', '对应BD', '商户区域', '申请金额(元)', '授信状态', '创建时间'],
columns: [ columns: [
{ {
order: 1, order: 1,
label: '授信编号', label: '授信编号',
prop: 'gradeSort' prop: 'creditNo'
}, },
{ {
order: 2, order: 2,
label: '客户姓名', label: '客户姓名',
prop: 'appNo' prop: 'realName'
},
{
order: 3,
label: '手机号码',
prop: 'mobile'
}, },
{ {
order: 3, order: 3,
label: '对应BD', label: '对应BD',
prop: 'appName' prop: 'bdName'
}, },
{ {
order: 4, order: 4,
label: '商户区域', label: '商户区域',
prop: 'appLogo', prop: 'regionName'
overflow: true
}, },
{ {
order: 5, order: 5,
label: '审核金额', label: '申请金额(元)',
prop: 'tenantNo', prop: 'creditAmount'
overflow: true
},
{
order: 6,
label: '审核结果',
prop: 'status'
}, },
{ {
order: 7, order: 7,
label: '审批状态', label: '授信状态',
prop: 'abutmentWay' prop: 'creditStatusStr'
}, },
{ {
order: 8, order: 8,
width: 170, width: 110,
label: '创建时间', label: '创建时间',
prop: 'gmtCreated' prop: 'applyDate'
} }
], ],
list: [], list: [],
...@@ -214,10 +236,22 @@ ...@@ -214,10 +236,22 @@
}, },
...mapGetters(['searchData', 'user']) ...mapGetters(['searchData', 'user'])
}, },
mounted() { async mounted() {
this.fetchData() await this.fetchData()
await this.initOnOffStatus()
}, },
methods: { methods: {
// 初始化用户上下线状态
async initOnOffStatus() {
const userId = this.user.userId
const result = await API.initApproveOnOff({ userId })
if (result.success) {
console.log(result, '当前的用户状态')
const { userDutyState } = result.result
this.isOnLine = userDutyState === 'ONLINE';
}
},
onSearch() { onSearch() {
const { time } = this.queryForm const { time } = this.queryForm
this.queryForm.current = 1 this.queryForm.current = 1
...@@ -231,16 +265,17 @@ ...@@ -231,16 +265,17 @@
this.fetchData() this.fetchData()
}, },
handleView(row) { handleView(row) {
const { appNo } = row const { creditNo } = row
this.$router.push({ this.$router.push({
path: '/approval/detail', path: '/approval/detail',
query: { appNo } query: { creditNo }
}) })
}, },
handleCurrentChange(val) { handleCurrentChange(val) {
this.queryForm.current = val this.queryForm.current = val
this.fetchData() this.fetchData()
}, },
// 初始化列表数据
async fetchData() { async fetchData() {
this.listLoading = true this.listLoading = true
const form = this.queryForm const form = this.queryForm
...@@ -253,10 +288,6 @@ ...@@ -253,10 +288,6 @@
this.total = total this.total = total
this.listLoading = false this.listLoading = false
}, },
// 转派弹框
async handleClick(row) {
this.visible = true
},
// 修改上下线状态 // 修改上下线状态
async handleChangeOnLineStatus(e) { async handleChangeOnLineStatus(e) {
const userId = this.user.userId const userId = this.user.userId
...@@ -271,6 +302,16 @@ ...@@ -271,6 +302,16 @@
Vue.prototype.$baseMessage(msg, 'success') Vue.prototype.$baseMessage(msg, 'success')
} }
},
// 申述
handleApproval(row) {
this.ApprovalItem = row
this.ApprovalVisible = true
},
// 转派
handleReassignment(row) {
this.visible = true
this.item = row
} }
} }
} }
......
<template>
<div v-if='detail!==null' class='page'>
<!--用户基础信息-->
<template v-if='detail.clientDetail!==null'>
<user-base-info :base-info='detail.clientDetail' />
</template>
<!--用户项目信息-->
<template v-if='detail.projectInfoResponse!==null'>
<user-project-info :project-info='detail.projectInfoResponse' />
</template>
<!--其它信息-->
<user-other-info :info='detail' />
<!--操作日志-->
<template v-if='detail.operationLogResponse!==null'>
<operation-log :log-data='detail.operationLogResponse' />
</template>
<!--申述操作-->
<template v-if='false'>
<pre-plead />
</template>
</div>
</template>
<script>
import API from '@/server/api'
export default {
name: 'PreDetail',
data() {
return {
creditNo: '',
detail: null
}
},
async created() {
const { query } = this.$route
if (query && query.creditNo) {
this.creditNo = query.creditNo
await this.init()
}
},
methods: {
async init() {
const creditNo = this.creditNo
const result = await API.creditDetail({
creditNo
})
this.detail = result.result
}
}
}
</script>
<style lang='scss' src='./index.scss'></style>
...@@ -17,7 +17,7 @@ ...@@ -17,7 +17,7 @@
<!--操作日志--> <!--操作日志-->
<template v-if='detail.operationLogResponse!==null'> <template v-if='detail.operationLogResponse!==null'>
<operation-log :data='detail.operationLogResponse' /> <operation-log :log-data='detail.operationLogResponse' />
</template> </template>
<!--申述操作--> <!--申述操作-->
......
This diff is collapsed.
...@@ -17,7 +17,19 @@ ...@@ -17,7 +17,19 @@
<el-descriptions-item label-class-name='labelCls' label='授信类型'>{{ detail.preBasisInfoResponse.creditTypeStr }} <el-descriptions-item label-class-name='labelCls' label='授信类型'>{{ detail.preBasisInfoResponse.creditTypeStr }}
</el-descriptions-item> </el-descriptions-item>
<el-descriptions-item label-class-name='labelCls' label='授信状态'> <el-descriptions-item label-class-name='labelCls' label='授信状态'>
<span style='margin-right: 10px'>{{ detail.preBasisInfoResponse.preStateStr }}</span>
<el-tag v-if='detail.preBasisInfoResponse.preStateStr==="授信中"' type='warning'>
{{ detail.preBasisInfoResponse.preStateStr }}
</el-tag>
<el-tag v-else-if='detail.preBasisInfoResponse.preStateStr==="授信通过"' type='success'>
{{ detail.preBasisInfoResponse.preStateStr }}
</el-tag>
<el-tag v-else-if='detail.preBasisInfoResponse.preStateStr==="授信拒绝"' type='danger'>
{{ detail.preBasisInfoResponse.preStateStr }}
</el-tag>
<template v-if='detail.preBasisInfoResponse.preState === "PRE_CREDIT_REFUSE"'> <template v-if='detail.preBasisInfoResponse.preState === "PRE_CREDIT_REFUSE"'>
<el-button @click='handlePlead' size='mini' type='primary'>申述</el-button> <el-button @click='handlePlead' size='mini' type='primary'>申述</el-button>
</template> </template>
......
...@@ -13,7 +13,7 @@ ...@@ -13,7 +13,7 @@
<el-form-item prop='mobile' label='手机号码'> <el-form-item prop='mobile' label='手机号码'>
<el-input v-model='queryForm.mobile' clearable placeholder='请输入客户手机号码' /> <el-input v-model='queryForm.mobile' clearable placeholder='请输入客户手机号码' />
</el-form-item> </el-form-item>
<el-form-item prop='preStatus' v-if='searchData!==null' label='授信状态'> <el-form-item v-if='searchData!==null' prop='preStatus' label='授信状态'>
<el-select v-model='queryForm.preStatus' clearable placeholder='请选择授信状态'> <el-select v-model='queryForm.preStatus' clearable placeholder='请选择授信状态'>
<el-option <el-option
v-for='(item,index) in searchData.preStatusList' v-for='(item,index) in searchData.preStatusList'
......
...@@ -17,6 +17,19 @@ ...@@ -17,6 +17,19 @@
<el-input v-model='queryForm.loanName' clearable placeholder='请输入客户手机号码' /> <el-input v-model='queryForm.loanName' clearable placeholder='请输入客户手机号码' />
</el-form-item> </el-form-item>
<template v-if='searchData!==null'>
<el-form-item prop='capitalCode' label='资金渠道'>
<el-select v-model='queryForm.capitalCode' style='width: 100%;' clearable>
<el-option
v-for='(item,index) in searchData.financierResponseList'
:key='index'
:value='item.capitalCode'
:label='item.message'>
</el-option>
</el-select>
</el-form-item>
</template>
<el-form-item label='申请时间'> <el-form-item label='申请时间'>
<el-date-picker <el-date-picker
...@@ -125,6 +138,7 @@ ...@@ -125,6 +138,7 @@
<script> <script>
import _ from 'lodash' import _ from 'lodash'
import API from '@/server/api' import API from '@/server/api'
import { mapGetters } from 'vuex'
export default { export default {
name: 'LoanAudit', name: 'LoanAudit',
...@@ -217,7 +231,8 @@ ...@@ -217,7 +231,8 @@
time: '', time: '',
startTime: '', startTime: '',
endTime: '', endTime: '',
userId: '' userId: '',
capitalCode:''
} }
} }
}, },
...@@ -231,7 +246,8 @@ ...@@ -231,7 +246,8 @@
}) })
return _.sortBy(finallyArray, (item) => item.order) return _.sortBy(finallyArray, (item) => item.order)
//return finallyArray //return finallyArray
} },
...mapGetters(['searchData', 'user'])
}, },
mounted() { mounted() {
this.fetchData() this.fetchData()
...@@ -250,9 +266,9 @@ ...@@ -250,9 +266,9 @@
this.fetchData() this.fetchData()
}, },
handleDialog(row) { handleDialog(row) {
const { realName, loanAmount } = row; const { realName, loanAmount } = row
console.log(row,'当前行信息'); console.log(row, '当前行信息')
this.DialogVisible = true; this.DialogVisible = true
}, },
handleCurrentChange(val) { handleCurrentChange(val) {
......
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