Skip to content
Projects
Groups
Snippets
Help
Loading...
Help
Submit feedback
Contribute to GitLab
Sign in / Register
Toggle navigation
丽
丽人贷管理后台
Project
Project
Details
Activity
Releases
Cycle Analytics
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Charts
Issues
0
Issues
0
List
Board
Labels
Milestones
Merge Requests
0
Merge Requests
0
CI / CD
CI / CD
Pipelines
Jobs
Schedules
Charts
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Charts
Create a new issue
Jobs
Commits
Issue Boards
Open sidebar
百灵美选
丽人贷管理后台
Commits
73545cd7
Commit
73545cd7
authored
Jun 09, 2022
by
caimeng
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
6月9号提交一下
parent
1128f67c
Changes
22
Show whitespace changes
Inline
Side-by-side
Showing
22 changed files
with
1485 additions
and
524 deletions
+1485
-524
common.scss
src/assets/common.scss
+3
-0
approval-result.vue
src/components/approval-result.vue
+29
-12
approval.vue
src/components/approval.vue
+230
-0
pre-operation-log.vue
src/components/pre-operation-log.vue
+1
-4
user-base-info.vue
src/components/user-base-info.vue
+9
-6
user-other-info.vue
src/components/user-other-info.vue
+11
-9
user-project-info.vue
src/components/user-project-info.vue
+14
-3
index.js
src/minix/index.js
+16
-0
index.js
src/router/index.js
+22
-29
api.js
src/server/api.js
+117
-4
index.js
src/utils/index.js
+19
-0
user.vue
src/views/admin/user.vue
+223
-229
reassignment.vue
src/views/approval/components/reassignment.vue
+94
-29
detail.vue
src/views/approval/detail.vue
+47
-12
list.vue
src/views/approval/list.vue
+91
-50
approval-detail.vue
src/views/credit/approval-detail.vue
+62
-0
approval.vue
src/views/credit/approval.vue
+327
-0
detail.vue
src/views/credit/detail.vue
+1
-1
list.vue
src/views/credit/list.vue
+134
-129
pre-detail.vue
src/views/credit/pre-detail.vue
+13
-1
pre.vue
src/views/credit/pre.vue
+1
-1
list.vue
src/views/loan/list.vue
+21
-5
No files found.
src/assets/common.scss
View file @
73545cd7
...
...
@@ -22,3 +22,6 @@
.el-dialog__header
{
border-bottom
:
1px
solid
#ebeef5
;
}
.el-descriptions-row
.el-descriptions-item__cell
{
text-align
:
center
!
important
;
}
src/components/approval-result.vue
View file @
73545cd7
...
...
@@ -2,28 +2,45 @@
<
template
>
<div
class=
'com'
>
<block-header
title=
'审批结果'
/>
<el-descriptions
style=
'margin-bottom: 20px;'
border
size=
'small'
:column=
'3
'
>
<el-descriptions-item
label-class-name=
'labelCls'
label=
'用户申请金额'
>
{{
result
.
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=
'机审建议额度'
>
{{
result
.
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=
'合作商等级'
>
{{
result
.
surplusNoPrincipal
}}
</el-descriptions-item>
<el-descriptions
style=
'margin-bottom: 20px;'
border
size=
'small'
direction=
"vertical"
:column=
'5
'
>
<el-descriptions-item
label-class-name=
'labelCls'
label=
'用户申请金额'
>
{{
applyAmount
}}
元
</el-descriptions-item>
<el-descriptions-item
label-class-name=
'labelCls'
label=
'剩余未还本金'
>
{{
creditAmount
}}
元
</el-descriptions-item>
<el-descriptions-item
label-class-name=
'labelCls'
label=
'机审建议额度'
>
{{
manualAmount
}}
元
</el-descriptions-item>
<el-descriptions-item
label-class-name=
'labelCls'
label=
'人审额度'
>
{{
partnerGrade
}}
元
</el-descriptions-item>
<el-descriptions-item
label-class-name=
'labelCls'
label=
'合作商等级'
>
{{
surplusNoPrincipal
}}
</el-descriptions-item>
</el-descriptions>
</div>
</
template
>
<
script
>
import
_
from
'lodash'
import
API
from
'@/server/api'
import
{
money
}
from
'@/utils/index'
export
default
{
name
:
'ApprovalResult'
,
props
:{
props
:
{
//eslint-disable-next-line vue/require-default-prop
result
:{
type
:
Object
,
require
:
true
result
:
{
type
:
Object
,
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
)
}
}
}
...
...
src/components/approval.vue
0 → 100644
View file @
73545cd7
<!-- 预授信申述 -->
<
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
>
src/components/pre-operation-log.vue
View file @
73545cd7
...
...
@@ -5,7 +5,6 @@
<!--表格-->
<el-table
ref=
"tableSort"
v-loading=
"listLoading"
border
:data=
"list"
style=
"width: 100%"
...
...
@@ -73,8 +72,7 @@
prop
:
"appealMemo"
}
],
list
:
[],
listLoading
:
true
,
list
:
[]
}
},
computed
:
{
...
...
@@ -91,7 +89,6 @@
created
()
{
if
(
this
.
logData
){
this
.
list
=
this
.
logData
;
this
.
listLoading
=
false
;
}
}
}
...
...
src/components/user-base-info.vue
View file @
73545cd7
...
...
@@ -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
.
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
.
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
.
liveAddress
}}
</el-descriptions-item>
<el-descriptions-item
label-class-name=
'labelCls'
label=
'居中地址'
>
{{
baseInfo
.
liveDetailAddress
}}
</el-descriptions-item>
...
...
@@ -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=
'商户区域'
>
{{
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
.
applyDate
}}
</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
.
selfMonthIncome
}}
</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
.
selfMonthIncomeStr
}}
元
</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>
...
...
src/components/user-other-info.vue
View file @
73545cd7
...
...
@@ -3,8 +3,8 @@
<div>
<template
v-if=
'clientIdCardInfoResponse.length'
>
<block-header
title=
'客户身份证信息'
/>
<el-row>
<el-col
v-for=
'(o, index) in clientIdCardInfoResponse'
:key=
'index'
:span=
'4'
:offset=
'index > 0 ? 1 : 0'
>
<el-row
:gutter=
'20'
>
<el-col
v-for=
'(o, index) in clientIdCardInfoResponse'
:key=
'index'
:span=
'4'
>
<el-card
:body-style=
"
{ padding: '10px' }">
<el-image
class=
'el-card-image'
:src=
'o[1]'
@
click
.
native=
'showImgViewer(clientIdCardInfoResponse,"idCard")'
></el-image>
...
...
@@ -19,8 +19,8 @@
<
template
v-if=
'faceInfoResponse.length'
>
<block-header
title=
'人脸信息'
/>
<el-row>
<el-col
v-for=
'(o, index) in faceInfoResponse'
:key=
'index'
:span=
'4'
:offset=
'index > 0 ? 1 : 0'
>
<el-row
:gutter=
'20'
>
<el-col
v-for=
'(o, index) in faceInfoResponse'
:key=
'index'
:span=
'4'
>
<el-card
:body-style=
"
{ padding: '10px' }">
<el-image
class=
'el-card-image'
:src=
'o[1]'
@
click
.
native=
'showImgViewer(faceInfoResponse,"face")'
></el-image>
...
...
@@ -37,8 +37,8 @@
<
template
v-if=
'creditAttachInfo.length'
>
<block-header
title=
'授信附件信息'
/>
<el-row>
<el-col
v-for=
'(o, index) in creditAttachInfo'
:key=
'index'
:span=
'4'
:offset=
'index > 0 ? 1 : 0'
>
<el-row
:gutter=
'20'
>
<el-col
v-for=
'(o, index) in creditAttachInfo'
:key=
'index'
:span=
'4'
>
<el-card
:body-style=
"
{ padding: '10px' }">
<el-image
class=
'el-card-image'
:src=
'o.screenList[0]'
@
click
.
native=
'showImgViewer(o.screenList,"annex")'
></el-image>
...
...
@@ -53,8 +53,8 @@
<
template
v-if=
'supplAttachInfo.length'
>
<block-header
title=
'客户附件信息'
/>
<el-row>
<el-col
v-for=
'(o, index) in supplAttachInfo'
:key=
'index'
:span=
'4'
:offset=
'index > 0 ? 1 : 0'
>
<el-row
:gutter=
'20'
>
<el-col
v-for=
'(o, index) in supplAttachInfo'
:key=
'index'
:span=
'4'
>
<el-card
:body-style=
"
{ padding: '10px' }">
<el-image
class=
'el-card-image'
:src=
'o.screenList[0]'
@
click
.
native=
'showImgViewer(o.screenList,"annex")'
></el-image>
...
...
@@ -203,9 +203,11 @@
.el-card-intro
{
box-sizing
:
border-box
;
height
:
56px
;
display
:
flex
;
align-items
:
center
;
justify-content
:
center
;
padding
:
20px
;
padding
:
20px
5px
;
overflow
:
hidden
;
}
</
style
>
src/components/user-project-info.vue
View file @
73545cd7
...
...
@@ -4,9 +4,9 @@
<block-header
title=
'项目信息'
/>
<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
.
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=
'借款期限'
>
{{
projectInfo
.
loanIntentionNum
}}
</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=
'申请金额'
>
{{
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
.
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=
'商户GPS'
>
{{
projectInfo
.
projectId
}}
</el-descriptions-item>
...
...
@@ -16,6 +16,8 @@
</
template
>
<
script
>
import
{
money
}
from
'@/utils'
export
default
{
name
:
"UserProjectInfo"
,
props
:{
...
...
@@ -23,6 +25,15 @@
type
:
Object
,
require
:
true
}
},
data
(){
return
{
loanIntentionAmount
:
''
}
},
created
()
{
const
{
loanIntentionAmount
}
=
this
.
projectInfo
;
this
.
loanIntentionAmount
=
money
(
loanIntentionAmount
);
}
};
</
script
>
...
...
src/minix/index.js
View file @
73545cd7
...
...
@@ -2,6 +2,7 @@ import BlockHeader from '@/components/blockHeader'
import
OperationLog
from
'@/components/pre-operation-log'
import
PrePlead
from
'@/components/pre-plead'
import
Plead
from
'@/components/plead'
import
Approval
from
'@/components/approval'
import
UserOtherInfo
from
'@/components/user-other-info'
import
ApprovalResult
from
'@/components/approval-result'
import
AuditResult
from
'@/components/audit-result'
...
...
@@ -21,6 +22,7 @@ export default {
AuditResult
,
UserBaseInfo
,
UserProjectInfo
,
Approval
,
'el-image-viewer'
:
()
=>
import
(
'element-ui/packages/image/src/image-viewer'
)
},
data
(){
...
...
@@ -75,6 +77,20 @@ export default {
if
(
formName
)
{
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
}
}
}
src/router/index.js
View file @
73545cd7
...
...
@@ -103,12 +103,21 @@ export const asyncRoutes = [
}
},
{
path
:
'
order
'
,
name
:
'Credit
Order
'
,
component
:
()
=>
import
(
'@/views/credit/
order
'
),
path
:
'
approval
'
,
name
:
'Credit
Approval
'
,
component
:
()
=>
import
(
'@/views/credit/
approval
'
),
meta
:
{
noKeepAlive
:
true
,
title
:
'我的审批'
}
},
{
path
:
'approvalDetail'
,
name
:
'ApprovalDetail'
,
component
:
()
=>
import
(
'@/views/credit/approval-detail'
),
meta
:
{
noKeepAlive
:
true
,
title
:
'审批详情'
},
hidden
:
true
},
...
...
@@ -118,9 +127,7 @@ export const asyncRoutes = [
component
:
()
=>
import
(
'@/views/credit/detail'
),
meta
:
{
noKeepAlive
:
true
,
title
:
'授信详情'
,
remixIcon
:
'building-line'
,
tagHidden
:
true
title
:
'授信详情'
},
hidden
:
true
...
...
@@ -152,32 +159,21 @@ export const asyncRoutes = [
},
children
:
[
{
path
:
'
order
'
,
path
:
'
list
'
,
name
:
'ApprovalList'
,
component
:
()
=>
import
(
'@/views/approval/
order
'
),
component
:
()
=>
import
(
'@/views/approval/
list
'
),
meta
:
{
noKeepAlive
:
true
,
title
:
'我的订单'
,
remixIcon
:
'product-hunt-line'
title
:
'我的订单'
}
},
//{
// path: 'order1',
// name: 'ApprovalList',
// component: () => import('@/views/approval/order1'),
// meta: {
// title: '我的订单2',
// remixIcon: 'product-hunt-line',
// },
//},
{
path
:
'detail'
,
name
:
'ApprovalDetail'
,
component
:
()
=>
import
(
'@/views/approval/detail'
),
meta
:
{
noKeepAlive
:
true
,
title
:
'详情'
,
remixIcon
:
'product-hunt-line'
title
:
'审批订单详情'
},
hidden
:
true
}
...
...
@@ -200,8 +196,7 @@ export const asyncRoutes = [
component
:
()
=>
import
(
'@/views/loan/detail'
),
meta
:
{
noKeepAlive
:
true
,
title
:
'详情'
,
remixIcon
:
'task-line'
title
:
'借款详情'
},
hidden
:
true
},
...
...
@@ -211,8 +206,7 @@ export const asyncRoutes = [
component
:
()
=>
import
(
'@/views/loan/audit'
),
meta
:
{
noKeepAlive
:
true
,
title
:
'稽核审批'
,
remixIcon
:
'task-line'
title
:
'稽核审批'
}
},
{
...
...
@@ -221,8 +215,7 @@ export const asyncRoutes = [
component
:
()
=>
import
(
'@/views/loan/list'
),
meta
:
{
noKeepAlive
:
true
,
title
:
'放款确认'
,
remixIcon
:
'task-line'
title
:
'放款确认'
}
}
]
...
...
@@ -243,8 +236,8 @@ export const asyncRoutes = [
name
:
'AdminUser'
,
component
:
()
=>
import
(
'@/views/admin/user'
),
meta
:
{
title
:
'用户管理'
,
remixIcon
:
'notification-3-line
'
noKeepAlive
:
true
,
title
:
'用户管理
'
}
}
]
...
...
src/server/api.js
View file @
73545cd7
...
...
@@ -92,6 +92,25 @@ export default {
data
})
},
// 我的审批列表
auditList
(
data
)
{
return
request
({
url
:
'/credit/myApproveList'
,
method
:
'post'
,
data
})
},
// 我的审批详情
auditDetail
(
params
)
{
return
request
({
url
:
'/credit/myApproveDetail'
,
method
:
'get'
,
params
})
},
// 初始化过滤条件的基础数据
initSearchData
(
data
)
{
return
request
({
...
...
@@ -112,11 +131,19 @@ export default {
})
},
// 初始化审批订单详情
initApproveDetail
(
data
)
{
initApproveDetail
(
params
)
{
return
request
({
url
:
'/approve/myOrderDetail'
,
method
:
'post'
,
data
method
:
'get'
,
params
})
},
// 审批人员上下线
initApproveOnOff
(
params
)
{
return
request
({
url
:
'/approve/getManState'
,
method
:
'get'
,
params
})
},
// 审批人员上下线
...
...
@@ -135,6 +162,17 @@ export default {
data
})
},
// 初始化转派在线人员列表
initReassignmentUser
(
params
)
{
return
request
({
url
:
'/approve/getOnLinePerson'
,
method
:
'get'
,
params
})
},
// 审批订单审批提交
approveSubmit
(
data
)
{
return
request
({
...
...
@@ -143,6 +181,30 @@ export default {
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 {
method
:
'post'
,
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
})
},
}
src/utils/index.js
View file @
73545cd7
// 格式化两位小数
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 格式化时间
* @param time
...
...
src/views/admin/user.vue
View file @
73545cd7
<
template
>
<div
class=
"page-fence"
>
<!--操作菜单栏-->
<block-header
title=
"公告列表"
/>
<div
v-if=
"true"
class=
"action-bar"
>
<div
class=
"action-bar-left"
>
<router-link
to=
"/notice/new"
>
<el-button
icon=
"el-icon-plus"
type=
"primary"
size=
"mini"
<div
class=
'page'
>
<!--搜索-->
<block-header
title=
'搜索'
/>
<div
class=
'search'
>
<el-form
label-suffix=
':'
:inline=
'true'
ref=
'form'
:model=
'queryForm'
class=
'form-inline'
>
<el-form-item
prop=
'creditNo'
label=
'授信编号'
>
<el-input
v-model=
'queryForm.creditNo'
clearable
placeholder=
'请输入授信编号'
/>
</el-form-item>
<el-form-item
prop=
'realName'
label=
'客户姓名'
>
<el-input
v-model=
'queryForm.realName'
clearable
placeholder=
'请输入客户姓名'
/>
</el-form-item>
<el-form-item
prop=
'mobile'
label=
'手机号码'
>
<el-input
v-model=
'queryForm.mobile'
clearable
placeholder=
'请输入客户手机号码'
/>
</el-form-item>
<template
v-if=
'searchData!==null'
>
<el-form-item
prop=
'creditType'
label=
'授信类型'
>
<el-select
clearable
v-model=
'queryForm.creditType'
placeholder=
'请选择授信类型'
>
<el-option
v-for=
'(item,index) in searchData.creditTypeResponseList'
:label=
'item.creditTypeStr'
:key=
'index'
:value=
'item.creditType'
></el-option>
</el-select>
</el-form-item>
<el-form-item
prop=
'creditStatus'
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>
</
template
>
<el-form-item
prop=
'time'
label=
'申请时间'
>
<el-date-picker
v-model=
'queryForm.time'
type=
'datetimerange'
:picker-options=
'pickerConfig'
range-separator=
'至'
start-placeholder=
'开始时间'
end-placeholder=
'结束时间'
>
新增公告
</el-button>
</router-link>
</div>
</el-date-picker>
</el-form-item>
<el-form-item>
<el-button
icon=
'el-icon-search'
type=
'primary'
@
click=
'onSearch'
>
搜 索
</el-button>
<el-button
icon=
'el-icon-delete'
type=
'default'
@
click=
"onReset('form')"
>
重置
</el-button>
</el-form-item>
</el-form>
</div>
<block-header
title=
'用户列表'
/>
<!--表格-->
<el-table
ref=
"tableSort"
v-loading=
"listLoading"
ref=
'tableSort'
v-loading=
'listLoading'
border
:data=
"list"
style=
"width: 100%"
:data=
'list'
style=
'width: 100%'
>
<el-table-column
v-for=
"(item, index) in finallyColumns"
:key=
"index"
align=
"center"
:label=
"item.label"
:sortable=
"item.sortable"
:width=
"item.width"
:fixed=
"!!item.fixed"
:show-overflow-tooltip=
"!!item.overflow"
v-for=
'(item, index) in finallyColumns'
:key=
'index'
align=
'center'
:label=
'item.label'
:sortable=
'item.sortable'
:width=
'item.width'
:fixed=
'!!item.fixed'
:show-overflow-tooltip=
'!!item.overflow'
>
<template
#
default=
"
{ row }">
<div
v-if=
"item.label==='H5链接'"
>
<el-link
type=
"primary"
:href=
"row[item.prop]"
target=
"_blank"
>
{{
row
[
item
.
prop
]
}}
</el-link>
</div>
<div
v-else-if=
"item.label==='标题ICON'"
>
<
template
#
default=
'{ row }'
>
<div
v-if=
"item.label==='营业执照' || item.label==='小贷拍照' || item.label==='金融办批文'"
>
<el-image
style=
"width: 50px; height: 35px"
:src=
"row[item.prop]"
fit=
"fit"
style=
'width: 100px; height: 75px'
:src=
'row[item.prop]'
fit=
'fit'
/>
</div>
<div
v-else-if=
"item.label==='公告状态'"
>
<el-tag
v-if=
"row[item.prop]===0"
type=
"success"
>
已上架
</el-tag>
<el-tag
v-else
type=
"info"
>
已下架
</el-tag>
<div
v-else-if=
"item.label==='机构状态'"
>
<span>
{{
row
[
item
.
prop
]
===
'1'
?
'启用'
:
'禁用'
}}
</span>
</div>
<span
v-else
>
{{
row
[
item
.
prop
]
}}
</span>
</
template
>
</el-table-column>
<el-table-column
width=
"150"
fixed=
"right"
align=
"center"
label=
"操作"
fixed=
'right'
align=
'center'
label=
'操作'
>
<
template
#
default=
"{ row }"
>
<el-button
v-if=
"row.isDelete===0"
size=
"mini"
type=
"danger"
@
click=
"handleChangeStatus(row)"
>
下架
</el-button>
<el-button
v-else
size=
"mini"
type=
"success"
@
click=
"handleChangeStatus(row)"
>
上架
</el-button>
<el-button
size=
"mini"
type=
"primary"
@
click=
"handleView(row)"
>
<span>
详情
</span>
</el-button>
<
template
#
default=
'{ row }'
>
<el-button
type=
'text'
@
click=
'handleDetail(row)'
>
详情
</el-button>
</
template
>
</el-table-column>
</el-table>
<el-pagination
:current-page=
"queryForm.current"
:layout=
"layout"
:page-size=
"queryForm.size"
:total=
"total"
:current-page=
'queryForm.current'
layout=
'total, prev, pager, next'
:page-size=
'queryForm.size'
:total=
'total'
background
@
current-change=
"handleCurrentChange"
@
size-change=
"handleSizeChange"
@
current-change=
'handleCurrentChange'
/>
</div>
</template>
<
script
>
import
_
from
"lodash"
;
import
{
doDelete
,
getList
}
from
"@/api/table"
;
import
API
from
"@/server/api"
;
import
_
from
'lodash'
import
{
doDelete
,
getList
}
from
'@/api/table'
import
API
from
'@/server/api'
import
moment
from
'moment'
import
{
mapGetters
}
from
'vuex'
export
default
{
name
:
"Fence"
,
export
default
{
name
:
'CreditList'
,
data
()
{
return
{
checkList
:
[
"标题"
,
"标题ICON"
,
"公告内容"
,
"公告状态"
,
'发布人'
,
"创建时间"
],
checkList
:
[
'用户ID'
,
'登录名'
,
'用户名'
,
'手机号'
,
'账号状态'
,
'是否在线'
],
columns
:
[
{
order
:
1
,
label
:
"标题"
,
prop
:
"znxTitle"
label
:
'用户ID'
,
prop
:
'userId'
},
{
order
:
2
,
label
:
"标题ICON"
,
prop
:
"znxTitleUrl"
label
:
'登录名'
,
prop
:
'loginName'
},
{
order
:
3
,
label
:
"公告内容"
,
overflow
:
true
,
prop
:
"znxContent"
order
:
4
,
label
:
'用户名'
,
prop
:
'userName'
},
{
order
:
5
,
label
:
"公告状态"
,
prop
:
"isDelete"
label
:
'手机号'
,
prop
:
'userCell'
},
{
order
:
6
,
label
:
"发布人"
,
prop
:
"znxCreateby"
label
:
'账号状态'
,
prop
:
'status'
},
{
order
:
7
,
label
:
"创建时间"
,
prop
:
"gmtCreate"
label
:
'是否在线'
,
prop
:
'userDutyState'
}
],
list
:
[],
listLoading
:
true
,
layout
:
"total, sizes, prev, pager, next, jumper"
,
total
:
0
,
total
:
1
,
pickerConfig
:
this
.
datePickerOptions
,
queryForm
:
{
current
:
1
,
size
:
10
size
:
10
,
mobile
:
''
,
bdNo
:
''
,
creditNo
:
''
,
creditStatus
:
''
,
creditType
:
''
,
realName
:
''
,
time
:
''
,
startTime
:
''
,
endTime
:
''
,
userId
:
''
}
}
};
},
computed
:
{
finallyColumns
()
{
let
finallyArray
=
[];
let
finallyArray
=
[]
this
.
checkList
.
forEach
((
checkItem
)
=>
{
finallyArray
.
push
(
this
.
columns
.
filter
((
item
)
=>
item
.
label
===
checkItem
)[
0
]
);
});
//return _.sortBy(finallyArray, (item) => item.order);
return
finallyArray
;
}
)
})
return
_
.
sortBy
(
finallyArray
,
(
item
)
=>
item
.
order
)
},
created
()
{
//防止三级以上路由时多次走created
if
(
this
.
$route
.
name
===
this
.
$options
.
name
)
this
.
fetchData
();
...
mapGetters
([
'searchData'
,
'user'
])
},
mounted
()
{
this
.
fetchData
();
this
.
fetchData
()
},
methods
:
{
onSubmit
()
{
this
.
fetchData
();
onSearch
()
{
const
{
time
}
=
this
.
queryForm
this
.
queryForm
.
current
=
1
if
(
time
)
{
this
.
queryForm
.
startTime
=
time
[
0
]
this
.
queryForm
.
endTime
=
time
[
1
]
}
else
{
this
.
queryForm
.
startTime
=
''
this
.
queryForm
.
endTime
=
''
}
this
.
fetchData
()
},
handleView
(
row
){
const
{
id
}
=
row
;
// 预授信详情
handleDetail
(
row
)
{
const
{
creditNo
}
=
row
this
.
$router
.
push
({
path
:
'/notice/new
'
,
query
:
{
id
}
path
:
'/credit/detail
'
,
query
:
{
creditNo
}
})
},
async
handleChangeStatus
(
row
)
{
const
{
id
,
isDelete
}
=
row
;
console
.
log
(
row
,
"是"
);
const
result
=
await
API
.
notice_edit
({
id
,
isDelete
:
!
isDelete
?
1
:
0
});
if
(
result
.
success
)
{
this
.
$baseMessage
(
"修改成功"
,
"success"
);
setTimeout
(()
=>
{
this
.
fetchData
();
},
1500
);
}
},
handleSizeChange
(
val
)
{
this
.
queryForm
.
size
=
val
;
this
.
fetchData
();
},
handleCurrentChange
(
val
)
{
this
.
queryForm
.
current
=
val
;
this
.
fetchData
();
},
handleQuery
()
{
this
.
queryForm
.
current
=
1
;
this
.
fetchData
();
this
.
queryForm
.
current
=
val
this
.
fetchData
()
},
async
fetchData
()
{
this
.
listLoading
=
true
;
const
result
=
await
API
.
notice_list
(
this
.
queryForm
);
const
{
records
,
total
}
=
result
.
result
;
this
.
list
=
records
;
this
.
total
=
total
;
this
.
listLoading
=
false
;
this
.
listLoading
=
true
const
form
=
this
.
queryForm
const
params
=
Object
.
assign
({},
form
)
delete
params
.
time
params
.
userId
=
this
.
user
.
userId
const
result
=
await
API
.
userList
({
...
params
})
const
{
data
,
total
}
=
result
.
result
console
.
log
(
data
,
's'
)
this
.
list
=
data
this
.
total
=
total
this
.
listLoading
=
false
}
}
}
};
</
script
>
<
style
lang=
"scss"
scoped
>
.page-fence
{
<
style
lang=
'scss'
scoped
>
.page-fence
{
::v-deep
{
i
{
cursor
:
pointer
;
...
...
@@ -249,28 +254,17 @@ export default {
box-sizing
:
border-box
;
padding
:
20px
;
}
}
</
style
>
<
style
lang=
"scss"
>
.custom-table-checkbox
{
<
style
lang=
'scss'
>
.custom-table-checkbox
{
.el-checkbox
{
display
:
block
!
important
;
margin
:
0
0
$base-padding
/
4
0
;
}
}
.action-bar
{
display
:
flex
;
align-items
:
center
;
justify-content
:
space-between
;
margin-bottom
:
15px
;
.action-bar-left
,
.action-bar-right
{
flex
:
1
;
}
.action-bar
-right
{
text-align
:
right
;
.action-bar
{
margin-bottom
:
15px
;
}
}
</
style
>
src/views/approval/components/reassignment.vue
View file @
73545cd7
...
...
@@ -2,59 +2,124 @@
<
template
>
<el-dialog
v-drag
title=
"转派"
:visible
.
sync=
"visible"
:close-on-click-modal=
"false"
:append-to-body=
"true"
width=
"30%"
:before-close=
"handleClose"
title=
'转派'
:visible
.
sync=
'visible'
:close-on-click-modal=
'false'
:append-to-body=
'true'
width=
'30%'
:before-close=
'handleClose'
>
<el-form
:model=
'form'
>
<el-form-item
label=
'选择转派人员'
>
<el-select
v-model=
'form.status'
clearable
placeholder=
'请选择'
>
<el-option
label=
'启用'
value=
'1'
/>
<el-option
label=
'禁用'
value=
'0'
/>
<el-form
ref=
'form'
label-suffix=
':'
label-width=
'120'
:rules=
'rules'
:model=
'form'
>
<el-form-item
prop=
'user'
label=
'转派人员'
>
<template
v-if=
'list.length'
>
<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>
</
template
>
</el-form-item>
</el-form>
<div
slot=
"footer"
class=
"dialog-footer"
>
<el-button
type=
"default"
@
click=
"handleClose"
>
取 消
</el-button>
<el-button
type=
"primary"
@
click=
"onSubmit"
>
确 定
</el-button>
<div
slot=
'footer'
class=
'dialog-footer'
>
<el-button
type=
'default'
@
click=
'handleClose'
>
取 消
</el-button>
<el-button
type=
'primary'
@
click=
'onSubmit("form")'
>
确 定
</el-button>
</div>
</el-dialog>
</template>
<
script
>
import
API
from
"@/server/api"
;
import
API
from
'@/server/api'
import
_
from
'lodash'
import
{
mapGetters
}
from
'vuex'
export
default
{
name
:
"Reassignment"
,
props
:{
visible
:{
type
:
Boolean
,
required
:
true
name
:
'Reassignment'
,
props
:
{
visible
:
{
type
:
Boolean
,
required
:
true
},
//eslint-disable-next-line vue/require-default-prop
item
:
{
type
:
Object
,
require
:
true
}
},
data
()
{
return
{
data
:
null
,
list
:
[],
rules
:
{
user
:
[
{
required
:
true
,
trigger
:
'change'
,
message
:
'请选择转派人员'
}
]
},
form
:
{
status
:
''
user
:
''
}
}
},
computed
:
{
...
mapGetters
([
'user'
])
},
async
created
()
{
if
(
this
.
item
!==
null
)
{
this
.
data
=
this
.
item
await
this
.
initUser
()
}
};
},
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
(){
this
.
$emit
(
"handleClose"
);
handleClose
()
{
this
.
$emit
(
'handleClose'
)
}
}
}
};
</
script
>
<
style
lang=
"scss"
scoped
>
<
style
lang=
'scss'
scoped
>
.page-fence
{
::v-deep
{
i
{
...
...
@@ -66,7 +131,7 @@
padding
:
20px
;
}
</
style
>
<
style
lang=
"scss"
>
<
style
lang=
'scss'
>
.custom-table-checkbox
{
.el-checkbox
{
display
:
block
!
important
;
...
...
src/views/approval/detail.vue
View file @
73545cd7
<
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>
</template>
<
script
>
import
API
from
'@/server/api'
export
default
{
name
:
'
Pre
Detail'
,
name
:
'
Approval
Detail'
,
data
()
{
return
{
tenantNo
:
''
creditNo
:
''
,
detail
:
null
}
},
created
()
{
async
created
()
{
const
{
query
}
=
this
.
$route
if
(
query
&&
query
.
tenantNo
)
{
this
.
tenantNo
=
query
.
tenantNo
if
(
query
&&
query
.
creditNo
)
{
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
>
...
...
src/views/approval/
order
.vue
→
src/views/approval/
list
.vue
View file @
73545cd7
...
...
@@ -19,30 +19,21 @@
placeholder=
'请输入客户姓名'
/>
</el-form-item>
<el-form-item
label=
'授信类型'
>
<el-select
clearable
v-model=
'queryForm.creditType'
placeholder=
'请选择授信类型'
>
<el-option
v-for=
'(item,index) in searchData.creditTypeResponseList'
: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
prop=
'mobile'
label=
'手机号码'
>
<el-input
v-model=
'queryForm.mobile'
clearable
placeholder=
'请输入手机号码'
/>
</el-form-item>
<el-form-item
prop=
'time'
label=
'申请时间'
>
<el-date-picker
v-model=
'queryForm.time'
type=
'datetimerange'
:picker-options=
'pickerConfig'
:default-time=
"['00:00:00', '23:59:59']"
value-format=
'yyyy-MM-dd HH:mm:ss'
range-separator=
'至'
start-placeholder=
'开始时间'
end-placeholder=
'结束时间'
...
...
@@ -86,16 +77,27 @@
:show-overflow-tooltip=
'!!item.overflow'
>
<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
>
</el-table-column>
<
template
v-if=
'isOnLine'
>
<el-table-column
width=
'210'
fixed=
'right'
align=
'center'
label=
'操作'
>
<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=
'primary'
@
click=
'handle
Click
(row)'
>
转派
</el-button>
<el-button
size=
'mini'
type=
'primary'
@
click=
'handle
Reassignment
(row)'
>
转派
</el-button>
</
template
>
</el-table-column>
</template>
...
...
@@ -112,9 +114,23 @@
/>
<!--转派弹框-->
<
template
v-if=
'visible'
>
<Reassignment
: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>
</template>
...
...
@@ -134,52 +150,58 @@
data
()
{
return
{
isOnLine
:
false
,
// 转派相关
visible
:
false
,
item
:
null
,
checkList
:
[
'授信编号'
,
'客户姓名'
,
'对应BD'
,
'商户区域'
,
'审核金额'
,
'审核结果'
,
'审批状态'
,
'创建时间'
],
// 审批相关
ApprovalVisible
:
false
,
ApprovalItem
:
null
,
checkList
:
[
'授信编号'
,
'客户姓名'
,
'手机号码'
,
'对应BD'
,
'商户区域'
,
'申请金额(元)'
,
'授信状态'
,
'创建时间'
],
columns
:
[
{
order
:
1
,
label
:
'授信编号'
,
prop
:
'
gradeSort
'
prop
:
'
creditNo
'
},
{
order
:
2
,
label
:
'客户姓名'
,
prop
:
'appNo'
prop
:
'realName'
},
{
order
:
3
,
label
:
'手机号码'
,
prop
:
'mobile'
},
{
order
:
3
,
label
:
'对应BD'
,
prop
:
'
app
Name'
prop
:
'
bd
Name'
},
{
order
:
4
,
label
:
'商户区域'
,
prop
:
'appLogo'
,
overflow
:
true
prop
:
'regionName'
},
{
order
:
5
,
label
:
'审核金额'
,
prop
:
'tenantNo'
,
overflow
:
true
},
{
order
:
6
,
label
:
'审核结果'
,
prop
:
'status'
label
:
'申请金额(元)'
,
prop
:
'creditAmount'
},
{
order
:
7
,
label
:
'
审批
状态'
,
prop
:
'
abutmentWay
'
label
:
'
授信
状态'
,
prop
:
'
creditStatusStr
'
},
{
order
:
8
,
width
:
1
7
0
,
width
:
1
1
0
,
label
:
'创建时间'
,
prop
:
'
gmtCreated
'
prop
:
'
applyDate
'
}
],
list
:
[],
...
...
@@ -214,10 +236,22 @@
},
...
mapGetters
([
'searchData'
,
'user'
])
},
mounted
()
{
this
.
fetchData
()
async
mounted
()
{
await
this
.
fetchData
()
await
this
.
initOnOffStatus
()
},
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
()
{
const
{
time
}
=
this
.
queryForm
this
.
queryForm
.
current
=
1
...
...
@@ -231,16 +265,17 @@
this
.
fetchData
()
},
handleView
(
row
)
{
const
{
app
No
}
=
row
const
{
credit
No
}
=
row
this
.
$router
.
push
({
path
:
'/approval/detail'
,
query
:
{
app
No
}
query
:
{
credit
No
}
})
},
handleCurrentChange
(
val
)
{
this
.
queryForm
.
current
=
val
this
.
fetchData
()
},
// 初始化列表数据
async
fetchData
()
{
this
.
listLoading
=
true
const
form
=
this
.
queryForm
...
...
@@ -253,10 +288,6 @@
this
.
total
=
total
this
.
listLoading
=
false
},
// 转派弹框
async
handleClick
(
row
)
{
this
.
visible
=
true
},
// 修改上下线状态
async
handleChangeOnLineStatus
(
e
)
{
const
userId
=
this
.
user
.
userId
...
...
@@ -271,6 +302,16 @@
Vue
.
prototype
.
$baseMessage
(
msg
,
'success'
)
}
},
// 申述
handleApproval
(
row
)
{
this
.
ApprovalItem
=
row
this
.
ApprovalVisible
=
true
},
// 转派
handleReassignment
(
row
)
{
this
.
visible
=
true
this
.
item
=
row
}
}
}
...
...
src/views/credit/approval-detail.vue
0 → 100644
View file @
73545cd7
<
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
>
src/views/credit/
order
.vue
→
src/views/credit/
approval
.vue
View file @
73545cd7
...
...
@@ -3,59 +3,73 @@
<!--搜索-->
<block-header
title=
'搜索'
/>
<div
class=
'search'
>
<el-form
label-suffix=
':'
:inline=
'true'
:model=
'queryForm'
class=
'form-inline'
>
<el-form-item
label=
'姓名
'
>
<el-form
ref=
'form'
label-suffix=
':'
:inline=
'true'
:model=
'queryForm'
class=
'form-inline'
>
<el-form-item
prop=
'creditNo'
label=
'授信编号
'
>
<el-input
v-model=
'queryForm.
tenantName
'
v-model=
'queryForm.
creditNo
'
clearable
placeholder=
'请输入
客户姓名
'
placeholder=
'请输入
授信编号
'
/>
</el-form-item>
<el-form-item
label=
'手机号码
'
>
<el-form-item
prop=
'realName'
label=
'客户姓名
'
>
<el-input
v-model=
'queryForm.
tenant
Name'
v-model=
'queryForm.
real
Name'
clearable
placeholder=
'请输入客户
手机号码
'
placeholder=
'请输入客户
姓名
'
/>
</el-form-item>
<el-form-item
label=
'授信状态
'
>
<el-form-item
prop=
'mobile'
label=
'手机号码
'
>
<el-input
v-model=
'queryForm.
tenantNo
'
v-model=
'queryForm.
mobile
'
clearable
placeholder=
'请输入
机构编号
'
placeholder=
'请输入
客户手机号码
'
/>
</el-form-item>
<el-form-item
label=
'申请时间'
>
<el-select
v-model=
'queryForm.status'
clearable
placeholder=
'请选择'
>
<template
v-if=
'searchData!==null'
>
<el-form-item
prop=
'creditStatus'
label=
'审批状态'
>
<el-select
v-model=
'queryForm.creditStatus'
clearable
placeholder=
'请选择审批状态'
>
<el-option
label=
'启用'
value=
'1'
/>
v-for=
'(item,index) in searchData.creditStatusResponseList'
:key=
'index'
:label=
'item.creditStatusStr'
:value=
'item.creditStatus'
></el-option>
</el-select>
</el-form-item>
<el-form-item
prop=
'creditType'
label=
'授信类型'
>
<el-select
v-model=
'queryForm.creditType'
clearable
placeholder=
'请选择审批状态'
>
<el-option
label=
'禁用'
value=
'0'
/>
v-for=
'(item,index) in searchData.creditTypeResponseList'
:key=
'index'
:label=
'item.creditTypeStr'
:value=
'item.creditType'
></el-option>
</el-select>
</el-form-item>
<el-form-item>
<el-button
icon=
'el-icon-search'
type=
'primary'
@
click=
'onSubmit'
</
template
>
<el-form-item
prop=
'time'
label=
'申请时间'
>
<el-date-picker
v-model=
'queryForm.time'
type=
'datetimerange'
:picker-options=
'pickerConfig'
:default-time=
"['00:00:00', '23:59:59']"
value-format=
'yyyy-MM-dd HH:mm:ss'
range-separator=
'至'
start-placeholder=
'开始时间'
end-placeholder=
'结束时间'
>
搜 索
</el-button>
<!--
<el-button
type=
"default"
@
click=
"onReset"
>
重置
</el-button>
-->
</el-date-picker>
</el-form-item>
<el-form-item>
<el-button
icon=
'el-icon-search'
type=
'primary'
@
click=
'onSearch'
>
搜 索
</el-button>
<el-button
icon=
'el-icon-delete'
type=
'default'
@
click=
"onReset('form')"
>
重置
</el-button>
</el-form-item>
</el-form>
</div>
<block-header
title=
'
预
授信列表'
/>
<block-header
title=
'授信列表'
/>
<!--表格-->
<el-table
ref=
'tableSort'
...
...
@@ -75,16 +89,30 @@
:show-overflow-tooltip=
'!!item.overflow'
>
<
template
#
default=
'{ row }'
>
<div
v-if=
"item.label==='营业执照' || item.label==='小贷拍照' || item.label==='金融办批文'"
>
<el-image
style=
'width: 100px; height: 75px'
:src=
'row[item.prop]'
fit=
'fit'
/>
</div>
<div
v-else-if=
"item.label==='机构状态'"
>
<span>
{{
row
[
item
.
prop
]
===
'1'
?
'启用'
:
'禁用'
}}
</span>
</div>
<span
v-if=
'item.label==="申请金额(元)" || item.label==="审核结果(元)"'
>
{{
money
(
row
.
availableAmount
)
}}
</span>
<span
v-if=
'item.label==="客户信息"'
>
{{
row
.
realName
}}
(
{{
row
.
mobile
}}
)
</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-if=
'item.label==="审批结果"'
>
<el-tag
v-if=
'row.creditResult==="PASS"'
type=
'success'
size=
'mini'
>
{{
row
.
creditResultStr
}}
</el-tag>
<el-tag
v-if=
'row.creditResult==="BACK"'
type=
'info'
size=
'mini'
>
{{
row
.
creditResultStr
}}
</el-tag>
<el-tag
v-if=
'row.creditResult==="REJECT"'
type=
'danger'
size=
'mini'
>
{{
row
.
creditResultStr
}}
</el-tag>
<el-tag
v-if=
'row.creditResult==="MANUAL_REJECT"'
type=
'danger'
size=
'mini'
>
{{
row
.
creditResultStr
}}
</el-tag>
<el-tag
v-if=
'row.creditResult==="RETRIAL"'
type=
'warning'
size=
'mini'
>
{{
row
.
creditResultStr
}}
</el-tag>
<el-tag
v-if=
'!row.creditResult'
type=
'info'
size=
'mini'
>
结果未出
</el-tag>
</span>
<span
v-else
>
{{
row
[
item
.
prop
]
}}
</span>
</
template
>
</el-table-column>
...
...
@@ -95,102 +123,110 @@
label=
'操作'
>
<
template
#
default=
'{ row }'
>
<el-button
type=
'text'
@
click=
'handleEdit(row)'
>
编辑
</el-button>
<el-button
type=
'text'
@
click=
'handleDetail(row)'
>
详情
</el-button>
<el-button
type=
'text'
@
click=
'handleDetail(row)'
>
详情
</el-button>
<template
v-if=
'row.creditResult==="MANUAL_REJECT"'
>
<el-button
type=
'text'
@
click=
'handleDetail(row)'
>
申述
</el-button>
</
template
>
</template>
</el-table-column>
</el-table>
<el-pagination
:current-page=
'queryForm.current'
:layout=
'layou
t'
layout=
'total, prev, pager, nex
t'
:page-size=
'queryForm.size'
:total=
'total'
background
@
current-change=
'handleCurrentChange'
@
size-change=
'handleSizeChange'
/>
</div>
</template>
<
script
>
import
_
from
'lodash'
import
{
doDelete
,
getList
}
from
'@/api/table'
import
API
from
'@/server/api'
import
{
mapGetters
}
from
'vuex'
export
default
{
name
:
'CreditList'
,
data
()
{
return
{
checkList
:
[
'
业务编号'
,
'产品名称'
,
'客户姓名'
,
'对应BD'
,
'商户区域'
,
'审核金额'
,
'审核结果'
,
'审批状态
'
,
'创建时间'
],
checkList
:
[
'
授信编号'
,
'授信类型'
,
'客户信息'
,
'对应BD'
,
'商户区域'
,
'申请金额(元)'
,
'审核结果(元)'
,
'审批状态'
,
'审批结果
'
,
'创建时间'
],
columns
:
[
{
order
:
1
,
label
:
'
业务
编号'
,
prop
:
'
tenan
tNo'
label
:
'
授信
编号'
,
prop
:
'
credi
tNo'
},
{
order
:
2
,
label
:
'产品名称'
,
prop
:
'tenantFullName'
label
:
'授信类型'
,
width
:
85
,
prop
:
'creditTypeStr'
},
{
order
:
3
,
label
:
'客户
姓名
'
,
prop
:
'
tenant
Name'
label
:
'客户
信息
'
,
prop
:
'
real
Name'
},
{
order
:
5
,
order
:
4
,
width
:
80
,
label
:
'对应BD'
,
prop
:
'businessLicenseUrl'
,
overflow
:
true
prop
:
'bdName'
},
{
order
:
6
,
order
:
5
,
label
:
'商户区域'
,
prop
:
'
status
'
prop
:
'
regionName
'
},
{
order
:
7
,
label
:
'
审核金额
'
,
prop
:
'
status
'
order
:
6
,
label
:
'
申请金额(元)
'
,
prop
:
'
applyAmount
'
},
{
order
:
8
,
label
:
'审核结果'
,
prop
:
'
status
'
order
:
7
,
label
:
'审核结果
(元)
'
,
prop
:
'
manualAmount
'
},
{
order
:
8
,
label
:
'审批状态'
,
prop
:
'status'
prop
:
'creditStatusStr'
,
width
:
95
},
{
order
:
8
,
order
:
9
,
label
:
'审批结果'
,
prop
:
'creditResultStr'
,
width
:
95
},
{
order
:
10
,
label
:
'创建时间'
,
prop
:
'status'
prop
:
'applyDate'
,
width
:
110
}
],
list
:
[],
listLoading
:
true
,
layout
:
'total, sizes, prev, pager, next, jumper'
,
total
:
1
,
pickerConfig
:
this
.
datePickerOptions
,
queryForm
:
{
current
:
1
,
size
:
9
,
status
:
''
,
tenantName
:
''
,
tenantNo
:
''
size
:
10
,
mobile
:
''
,
bdNo
:
''
,
creditNo
:
''
,
creditStatus
:
''
,
realName
:
''
,
time
:
''
,
startTime
:
''
,
endTime
:
''
,
userId
:
''
}
}
},
...
...
@@ -203,55 +239,64 @@
)
})
return
_
.
sortBy
(
finallyArray
,
(
item
)
=>
item
.
order
)
//return finallyArray;
}
},
created
()
{
//防止三级以上路由时多次走created
if
(
this
.
$route
.
name
===
this
.
$options
.
name
)
this
.
fetchData
()
...
mapGetters
([
'searchData'
,
'user'
])
},
mounted
()
{
this
.
fetchData
()
async
mounted
()
{
await
this
.
fetchData
()
},
methods
:
{
onSubmit
()
{
onSearch
()
{
const
{
time
}
=
this
.
queryForm
this
.
queryForm
.
current
=
1
if
(
time
)
{
this
.
queryForm
.
startTime
=
time
[
0
]
this
.
queryForm
.
endTime
=
time
[
1
]
}
else
{
this
.
queryForm
.
startTime
=
''
this
.
queryForm
.
endTime
=
''
}
this
.
fetchData
()
},
// 预授信编辑
handleEdit
(
row
)
{
const
{
tenantNo
}
=
row
this
.
$router
.
push
({
path
:
'/merchant/new'
,
query
:
{
tenantNo
}
})
},
// 预授信详情
handleDetail
(
row
)
{
const
{
tenan
tNo
}
=
row
const
{
credi
tNo
}
=
row
this
.
$router
.
push
({
path
:
'/credit/
d
etail'
,
query
:
{
tenan
tNo
}
path
:
'/credit/
approvalD
etail'
,
query
:
{
credi
tNo
}
})
},
handleSizeChange
(
val
)
{
this
.
queryForm
.
size
=
val
this
.
fetchData
()
},
handleCurrentChange
(
val
)
{
this
.
queryForm
.
current
=
val
this
.
fetchData
()
},
handleQuery
()
{
this
.
queryForm
.
current
=
1
this
.
fetchData
()
},
async
fetchData
()
{
this
.
listLoading
=
true
const
result
=
await
API
.
merchant_list
(
this
.
queryForm
)
const
form
=
this
.
queryForm
const
params
=
Object
.
assign
({},
form
)
delete
params
.
time
params
.
userId
=
this
.
user
.
userId
try
{
const
result
=
await
API
.
auditList
({
...
params
})
console
.
log
(
result
,
'结果'
)
if
(
result
.
success
)
{
const
{
records
,
total
}
=
result
.
result
this
.
list
=
records
this
.
total
=
total
}
this
.
listLoading
=
false
}
catch
(
e
)
{
console
.
log
(
e
,
'h'
)
this
.
listLoading
=
false
}
},
// 授信申述
handlePlead
()
{
}
}
}
...
...
src/views/credit/detail.vue
View file @
73545cd7
...
...
@@ -17,7 +17,7 @@
<!--操作日志-->
<
template
v-if=
'detail.operationLogResponse!==null'
>
<operation-log
:data=
'detail.operationLogResponse'
/>
<operation-log
:
log-
data=
'detail.operationLogResponse'
/>
</
template
>
<!--申述操作-->
...
...
src/views/credit/list.vue
View file @
73545cd7
<
template
>
<div
class=
"page-fence"
>
<div
class=
'page-fence'
>
<!--搜索-->
<block-header
title=
"搜索"
/>
<block-header
title=
'搜索'
/>
<div
class=
'search'
>
<el-form
label-suffix=
':'
:inline=
'true'
ref=
'form'
:model=
'queryForm'
class=
'form-inline'
>
<el-form-item
prop=
'creditNo'
label=
'授信编号'
>
...
...
@@ -25,17 +25,9 @@
placeholder=
'请输入客户手机号码'
/>
</el-form-item>
<el-form-item
prop=
'creditType'
label=
'授信类型'
>
<el-select
clearable
v-model=
"queryForm.creditType"
placeholder=
"请选择授信类型"
>
<el-option
v-for=
'(item,index) in searchData.creditTypeResponseList'
:label=
'item.creditTypeStr'
:key=
'index'
:value=
'item.creditType'
></el-option>
</el-select>
</el-form-item>
<template
v-if=
'searchData!==null'
>
<el-form-item
prop=
'creditStatus'
label=
'授信状态'
>
<el-select
clearable
v-model=
"queryForm.creditStatus"
placeholder=
"请选择授信状态"
>
<el-select
clearable
v-model=
'queryForm.creditStatus'
placeholder=
'请选择授信状态'
>
<el-option
v-for=
'(item,index) in searchData.creditStatusResponseList'
:label=
'item.creditStatusStr'
...
...
@@ -44,222 +36,235 @@
</el-select>
</el-form-item>
</
template
>
<el-form-item
prop=
'time'
label=
"申请时间"
>
<el-form-item
prop=
'time'
label=
'申请时间'
>
<el-date-picker
v-model=
"queryForm.time"
type=
"datetimerange"
:picker-options=
"pickerConfig"
range-separator=
"至"
start-placeholder=
"开始时间"
end-placeholder=
"结束时间"
v-model=
'queryForm.time'
type=
'datetimerange'
:picker-options=
'pickerConfig'
:default-time=
"['00:00:00', '23:59:59']"
value-format=
'yyyy-MM-dd HH:mm:ss'
range-separator=
'至'
start-placeholder=
'开始时间'
end-placeholder=
'结束时间'
>
</el-date-picker>
</el-form-item>
<el-form-item>
<el-button
icon=
'el-icon-search'
type=
'primary'
@
click=
'onSearch'
>
搜 索
</el-button>
<el-button
icon=
'el-icon-delete'
type=
"default"
@
click=
"onReset('form')"
>
重置
</el-button>
<el-button
icon=
'el-icon-delete'
type=
'default'
@
click=
"onReset('form')"
>
重置
</el-button>
</el-form-item>
</el-form>
</div>
<block-header
title=
"授信列表"
/>
<block-header
title=
'授信列表'
/>
<!--表格-->
<el-table
ref=
"tableSort"
v-loading=
"listLoading"
ref=
'tableSort'
v-loading=
'listLoading'
border
:data=
"list"
style=
"width: 100%"
:data=
'list'
style=
'width: 100%'
>
<el-table-column
v-for=
"(item, index) in finallyColumns"
:key=
"index"
align=
"center"
:label=
"item.label"
:sortable=
"item.sortable"
:width=
"item.width"
:fixed=
"!!item.fixed"
:show-overflow-tooltip=
"!!item.overflow"
v-for=
'(item, index) in finallyColumns'
:key=
'index'
align=
'center'
:label=
'item.label'
:sortable=
'item.sortable'
:width=
'item.width'
:fixed=
'!!item.fixed'
:show-overflow-tooltip=
'!!item.overflow'
>
<template
#
default=
"
{ row }">
<div
v-if=
"item.label==='营业执照' || item.label==='小贷拍照' || item.label==='金融办批文'"
>
<el-image
style=
"width: 100px; height: 75px"
:src=
"row[item.prop]"
fit=
"fit"
/>
</div>
<div
v-else-if=
"item.label==='机构状态'"
>
<span>
{{
row
[
item
.
prop
]
===
"1"
?
'启用'
:
'禁用'
}}
</span>
</div>
<
template
#
default=
'{ row }'
>
<span
v-if=
'item.label==="授信额度(元)"'
>
{{
money
(
row
.
availableAmount
)
}}
</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-if=
'item.label==="审批结果"'
>
<el-tag
v-if=
'row.creditResult==="PASS"'
type=
'success'
size=
'mini'
>
{{
row
.
creditResultStr
}}
</el-tag>
<el-tag
v-if=
'row.creditResult==="BACK"'
type=
'info'
size=
'mini'
>
{{
row
.
creditResultStr
}}
</el-tag>
<el-tag
v-if=
'row.creditResult==="REJECT"'
type=
'danger'
size=
'mini'
>
{{
row
.
creditResultStr
}}
</el-tag>
<el-tag
v-if=
'row.creditResult==="MANUAL_REJECT"'
type=
'danger'
size=
'mini'
>
{{
row
.
creditResultStr
}}
</el-tag>
<el-tag
v-if=
'row.creditResult==="RETRIAL"'
type=
'warning'
size=
'mini'
>
{{
row
.
creditResultStr
}}
</el-tag>
</span>
<span
v-else
>
{{
row
[
item
.
prop
]
}}
</span>
</
template
>
</el-table-column>
<el-table-column
fixed=
"right"
align=
"center"
label=
"操作"
fixed=
'right'
align=
'center'
label=
'操作'
>
<
template
#
default=
"{ row }"
>
<el-button
type=
"text"
@
click=
"handleDetail(row)"
>
详情
</el-button>
<
template
#
default=
'{ row }'
>
<el-button
type=
'text'
@
click=
'handleDetail(row)'
>
详情
</el-button>
</
template
>
</el-table-column>
</el-table>
<el-pagination
:current-page=
"queryForm.current"
:current-page=
'queryForm.current'
layout=
'total, prev, pager, next'
:page-size=
"queryForm.size"
:total=
"total"
:page-size=
'queryForm.size'
:total=
'total'
background
@
current-change=
"handleCurrentChange"
@
current-change=
'handleCurrentChange'
/>
</div>
</template>
<
script
>
import
_
from
"lodash"
;
import
{
doDelete
,
getList
}
from
"@/api/table"
;
import
API
from
"@/server/api"
;
import
moment
from
'moment'
import
_
from
'lodash'
import
API
from
'@/server/api'
import
{
mapGetters
}
from
'vuex'
export
default
{
name
:
"CreditList"
,
name
:
'CreditList'
,
data
()
{
return
{
checkList
:
[
"授信编号"
,
"客户姓名"
,
"手机号码"
,
"对应BD"
,
"商户区域"
,
"授信额度"
,
"申请时间"
,
"授信类型"
,
"授信状态"
],
checkList
:
[
'授信编号'
,
'客户姓名'
,
'手机号码'
,
'对应BD'
,
'商户区域'
,
'授信额度(元)'
,
'申请时间'
,
'授信状态'
,
'审批结果'
],
columns
:
[
{
order
:
1
,
label
:
"授信编号"
,
prop
:
"creditNo"
label
:
'授信编号'
,
prop
:
'creditNo'
},
{
order
:
2
,
label
:
"客户姓名"
,
prop
:
"realName"
label
:
'客户姓名'
,
prop
:
'realName'
},
{
order
:
3
,
label
:
'手机号码'
,
width
:
115
,
prop
:
'mobile'
},
{
order
:
4
,
label
:
"手机号码"
,
width
:
110
,
prop
:
"mobile"
label
:
'对应BD'
,
prop
:
'bdName'
,
overflow
:
true
},
{
order
:
5
,
label
:
"对应BD"
,
prop
:
"bdName"
,
overflow
:
true
label
:
'商户区域'
,
prop
:
'regionName'
},
{
order
:
6
,
label
:
"商户区域"
,
prop
:
"regionName"
label
:
'授信额度(元)'
,
prop
:
'availableAmount'
},
{
order
:
7
,
label
:
"授信额度"
,
prop
:
"availableAmount"
},
{
order
:
8
,
label
:
"申请时间"
,
prop
:
"applyDate"
label
:
'申请时间'
,
prop
:
'applyDate'
,
width
:
110
},
{
order
:
8
,
label
:
"授信类型"
,
prop
:
"creditTypeStr"
order
:
9
,
label
:
'授信状态'
,
prop
:
'creditStatusStr'
},
{
order
:
8
,
label
:
"授信状态"
,
prop
:
"creditStatusStr"
order
:
10
,
label
:
'审批结果'
,
prop
:
'creditResultStr'
}
],
list
:
[],
listLoading
:
true
,
total
:
1
,
pickerConfig
:
this
.
datePickerOptions
,
pickerConfig
:
this
.
datePickerOptions
,
queryForm
:
{
current
:
1
,
size
:
9
,
size
:
10
,
mobile
:
''
,
bdNo
:
''
,
bdNo
:
''
,
creditNo
:
''
,
creditStatus
:
''
,
creditType
:
''
,
realName
:
''
,
time
:
''
,
time
:
''
,
startTime
:
''
,
endTime
:
''
,
userId
:
''
}
}
;
}
},
computed
:
{
finallyColumns
()
{
let
finallyArray
=
[]
;
let
finallyArray
=
[]
this
.
checkList
.
forEach
((
checkItem
)
=>
{
finallyArray
.
push
(
this
.
columns
.
filter
((
item
)
=>
item
.
label
===
checkItem
)[
0
]
);
});
return
_
.
sortBy
(
finallyArray
,
(
item
)
=>
item
.
order
);
//return finallyArray;
)
})
return
_
.
sortBy
(
finallyArray
,
(
item
)
=>
item
.
order
)
},
...
mapGetters
([
'searchData'
])
...
mapGetters
([
'searchData'
,
'user'
])
},
mounted
()
{
this
.
fetchData
()
;
this
.
fetchData
()
},
methods
:
{
onSearch
()
{
const
{
time
}
=
this
.
queryForm
;
this
.
queryForm
.
current
=
1
;
const
{
time
}
=
this
.
queryForm
this
.
queryForm
.
current
=
1
if
(
time
)
{
this
.
queryForm
.
startTime
=
time
[
0
]
;
this
.
queryForm
.
endTime
=
time
[
1
]
;
this
.
queryForm
.
startTime
=
time
[
0
]
this
.
queryForm
.
endTime
=
time
[
1
]
}
else
{
this
.
queryForm
.
startTime
=
""
;
this
.
queryForm
.
endTime
=
""
;
this
.
queryForm
.
startTime
=
''
this
.
queryForm
.
endTime
=
''
}
this
.
fetchData
()
;
this
.
fetchData
()
},
// 预授信详情
handleDetail
(
row
){
const
{
creditNo
}
=
row
;
handleDetail
(
row
)
{
const
{
creditNo
}
=
row
this
.
$router
.
push
({
path
:
'/credit/detail'
,
query
:
{
creditNo
}
})
},
handleCurrentChange
(
val
)
{
this
.
queryForm
.
current
=
val
;
this
.
fetchData
()
;
this
.
queryForm
.
current
=
val
this
.
fetchData
()
},
async
fetchData
()
{
this
.
listLoading
=
true
;
const
form
=
this
.
queryForm
;
const
params
=
Object
.
assign
({},
form
);
delete
params
.
time
;
const
result
=
await
API
.
creditList
({...
params
});
const
{
records
,
total
}
=
result
.
result
;
this
.
list
=
records
;
this
.
total
=
total
;
this
.
listLoading
=
false
;
this
.
listLoading
=
true
const
form
=
this
.
queryForm
const
params
=
Object
.
assign
({},
form
)
delete
params
.
time
//params.userId = this.user.userId;
const
result
=
await
API
.
creditList
({
...
params
})
const
{
records
,
total
}
=
result
.
result
this
.
list
=
records
this
.
total
=
total
this
.
listLoading
=
false
},
// 授信申述
handlePlead
()
{
}
}
}
};
</
script
>
<
style
lang=
"scss"
scoped
>
<
style
lang=
'scss'
scoped
>
.page-fence
{
::v-deep
{
i
{
...
...
@@ -271,7 +276,7 @@
padding
:
20px
;
}
</
style
>
<
style
lang=
"scss"
>
<
style
lang=
'scss'
>
.custom-table-checkbox
{
.el-checkbox
{
display
:
block
!
important
;
...
...
src/views/credit/pre-detail.vue
View file @
73545cd7
...
...
@@ -17,7 +17,19 @@
<el-descriptions-item
label-class-name=
'labelCls'
label=
'授信类型'
>
{{
detail
.
preBasisInfoResponse
.
creditTypeStr
}}
</el-descriptions-item>
<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"'
>
<el-button
@
click=
'handlePlead'
size=
'mini'
type=
'primary'
>
申述
</el-button>
</
template
>
...
...
src/views/credit/pre.vue
View file @
73545cd7
...
...
@@ -13,7 +13,7 @@
<el-form-item
prop=
'mobile'
label=
'手机号码'
>
<el-input
v-model=
'queryForm.mobile'
clearable
placeholder=
'请输入客户手机号码'
/>
</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-option
v-for=
'(item,index) in searchData.preStatusList'
...
...
src/views/loan/list.vue
View file @
73545cd7
...
...
@@ -17,6 +17,19 @@
<el-input
v-model=
'queryForm.loanName'
clearable
placeholder=
'请输入客户手机号码'
/>
</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-date-picker
...
...
@@ -125,6 +138,7 @@
<
script
>
import
_
from
'lodash'
import
API
from
'@/server/api'
import
{
mapGetters
}
from
'vuex'
export
default
{
name
:
'LoanAudit'
,
...
...
@@ -217,7 +231,8 @@
time
:
''
,
startTime
:
''
,
endTime
:
''
,
userId
:
''
userId
:
''
,
capitalCode
:
''
}
}
},
...
...
@@ -231,7 +246,8 @@
})
return
_
.
sortBy
(
finallyArray
,
(
item
)
=>
item
.
order
)
//return finallyArray
}
},
...
mapGetters
([
'searchData'
,
'user'
])
},
mounted
()
{
this
.
fetchData
()
...
...
@@ -250,9 +266,9 @@
this
.
fetchData
()
},
handleDialog
(
row
)
{
const
{
realName
,
loanAmount
}
=
row
;
console
.
log
(
row
,
'当前行信息'
);
this
.
DialogVisible
=
true
;
const
{
realName
,
loanAmount
}
=
row
console
.
log
(
row
,
'当前行信息'
)
this
.
DialogVisible
=
true
},
handleCurrentChange
(
val
)
{
...
...
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment