Commit 94fdd0de authored by 黎博's avatar 黎博

20200709-KA联调平台功能迭代需求

parent 90fb0861
{
"semi": false,
"singleQuote": true
}
\ No newline at end of file
......@@ -12,7 +12,7 @@ module.exports = {
proxyTable: {},
// Various Dev Server settings
host: '192.168.28.179', // can be overwritten by process.env.HOST
host: '0.0.0.0', // can be overwritten by process.env.HOST
port: 9001, // can be overwritten by process.env.PORT, if port is in use, a free one will be determined
autoOpenBrowser: true,
errorOverlay: true,
......
......@@ -16,7 +16,7 @@
},
"dependencies": {
"axios": "0.18.0",
"element-ui": "2.4.6",
"element-ui": "2.13.2",
"js-cookie": "2.2.0",
"mockjs": "1.0.1-beta3",
"moment": "^2.24.0",
......@@ -24,7 +24,8 @@
"nprogress": "0.2.0",
"vue": "2.5.17",
"vue-router": "3.0.1",
"vuex": "3.0.1"
"vuex": "3.0.1",
"xlsx": "^0.16.4"
},
"devDependencies": {
"autoprefixer": "8.5.0",
......
import request from '@/utils/request'
import xlsx from 'xlsx'
export function getChannels(data) {
return request({
......@@ -34,3 +35,24 @@ export function getChannelDetail(query) {
params: query
})
}
export function exportExcel(postfix, data) {
const now = new Date()
const year = now.getFullYear()
const month = now.getMonth() + 1
const day = now.getDate()
const filename = year + '-' + month + '-' + day + '-' + postfix
// const worksheet = xlsx.utils.aoa_to_sheet(data)
const worksheet = xlsx.utils.json_to_sheet(data)
const newWorkbook = xlsx.utils.book_new()
xlsx.utils.book_append_sheet(newWorkbook, worksheet, 'SheetJS')
xlsx.writeFile(newWorkbook, filename + '.xlsx')
}
export function getChannelConf(params) {
return request({
url: '/channel/conf/export',
method: 'get',
params
})
}
import request from '@/utils/request'
export function getCustomerApplyInfo(params) {
return request({
url: '/customer/apply/info',
method: 'get',
params
})
}
......@@ -26,6 +26,7 @@ import '@/permission' // permission control
// import '../mock' // simulation data
Vue.use(ElementUI, { locale })
Vue.prototype.$message = ElementUI.Message
Vue.config.productionTip = false
......
......@@ -87,6 +87,18 @@ export const constantRouterMap = [
component: () => import('@/views/dashboard/index')
}]
},
{
path: '/search',
component: Layout,
children: [
{
path: '',
name: 'search',
component: () => import('@/views/search/index'),
meta: { title: '用户查询', icon: 'nested' }
}
]
},
{ path: '*', redirect: '/404', hidden: true }
]
......
<template>
<div class="app-container">
<div class="filter-container" style="padding-bottom:20px">
<el-input v-permission="['admin','operator']" v-model="listQuery.channelId" placeholder="渠道号" clearable style="width: 200px;" class="filter-item" @keyup.enter.native="getChannels"/>
<el-select v-permission="['channel']" v-model="listQuery.channelId" placeholder="渠道" clearable style="width: 200px" class="filter-item" >
<el-option v-for="item in channels" :key="item.channelId" :label="item.channelName" :value="item.channelId"/>
<el-input
v-permission="['admin','operator']"
v-model="listQuery.channelId"
placeholder="渠道号"
clearable
style="width: 200px;"
class="filter-item"
@keyup.enter.native="getChannels"
/>
<el-select
v-permission="['channel']"
v-model="listQuery.channelId"
placeholder="渠道"
clearable
style="width: 200px"
class="filter-item"
>
<el-option
v-for="item in channels"
:key="item.channelId"
:label="item.channelName"
:value="item.channelId"
/>
</el-select>
<el-input v-permission="['admin','operator']" v-model="listQuery.channelName" placeholder="渠道名称" clearable style="width: 200px;" class="filter-item" @keyup.enter.native="getChannels"/>
<el-input
v-permission="['admin','operator']"
v-model="listQuery.channelName"
placeholder="渠道名称"
clearable
style="width: 200px;"
class="filter-item"
@keyup.enter.native="getChannels"
/>
<el-button class="filter-item" type="primary" icon="el-icon-search" @click="getChannels">查询</el-button>
<el-button v-permission="['admin','operator']" :disabled="!createBool" class="filter-item" style="margin-left: 10px;" type="primary" icon="el-icon-edit" @click="handleCreate">添加</el-button>
<el-button
v-permission="['admin','operator']"
:disabled="!createBool"
class="filter-item"
style="margin-left: 10px;"
type="primary"
icon="el-icon-edit"
@click="handleCreate"
>添加</el-button>
</div>
<el-table
......@@ -19,15 +55,26 @@
size="medium"
fit
highlight-current-row
style=""
@current-change="handleCurrentChange">
style
@current-change="handleCurrentChange"
>
<el-table-column label="ID" type="index" align="center" width="65" />
<el-table-column label="ID" type="index" align="center" width="65"/>
<el-table-column sortable label="渠道号" prop="channelId" align="center"/>
<el-table-column sortable label="渠道code" prop="channelCode" align="center"/>
<el-table-column label="渠道名称" prop="channelName" align="center"/>
<el-table-column label="创建时间" prop="createdAt" align="center"/>
<el-table-column sortable label="渠道号" prop="channelId" align="center" />
<el-table-column sortable label="渠道code" prop="channelCode" align="center" />
<el-table-column label="渠道名称" prop="channelName" align="center" />
<el-table-column label="创建时间" prop="createdAt" align="center" />
<el-table-column label="操作" align="center">
<template slot-scope="scope">
<el-button
v-permission="['admin','operator']"
type="primary"
icon="el-icon-share"
size="mini"
@click="exportData(scope.row.channelId)"
>导出</el-button>
</template>
</el-table-column>
<!-- <el-table-column label="操作" align="center" width="180" class-name="small-padding fixed-width">
<template slot-scope="scope">
......@@ -35,18 +82,26 @@
<el-button v-if="scope.row.status!='deleted'" size="mini" type="danger" @click="handleDelete(scope.row)">删除
</el-button>
</template>
</el-table-column> -->
</el-table-column>-->
</el-table>
<pagination v-show="createBool && count>0" :total="count" :page.sync="page" :limit.sync="listQuery.pageSize" @pagination="getChannels" />
<pagination
v-show="createBool && count>0"
:total="count"
:page.sync="page"
:limit.sync="listQuery.pageSize"
@pagination="getChannels"
/>
<el-card v-show="channel.addInfo" class="box-card">
<el-card v-permission="['admin','operator']" class="box-card" style="margin-bottom:20px;float:left;width:45%;margin-right:1%">
<div slot="header" >
<el-card
v-permission="['admin','operator']"
class="box-card"
style="margin-bottom:20px;float:left;width:45%;margin-right:1%"
>
<div slot="header">
<span>基础配置</span>
</div>
<el-form :inline="true" size="medium" >
<el-form :inline="true" size="medium">
<el-form-item label="渠道号" style="width:30%">
<el-input v-model="channel.basicInfo.channelId" :disabled="createBool" />
</el-form-item>
......@@ -60,71 +115,193 @@
<el-form-item label="环境" style="width:30%">
<el-input v-model="channel.basicInfo.env" />
</el-form-item>
<el-form-item label="存管资金方" style="width:30%">
<!-- <el-form-item label="存管资金方" style="width:30%">
<el-input v-model="channel.basicInfo.p2pFundId" />
</el-form-item>
<el-form-item label="非存管资金方" style="width:30%">
</el-form-item>-->
<el-form-item label="资金方ID" style="width:30%">
<el-input v-model="channel.basicInfo.fundId" />
</el-form-item>
<el-form-item label="业务类型" style="width:30%">
<el-input v-model="channel.basicInfo.bizType" />
</el-form-item>
<el-form-item label="授信code" style="width:30%">
<el-form-item label="通知节点" style="width:30%">
<el-input v-model="channel.basicInfo.callbackNoPushProgress" />
</el-form-item>
<el-form-item label="通知节点顺序" style="width:30%">
<el-input v-model="channel.basicInfo.preProgress" />
</el-form-item>
<!-- <el-form-item label="授信code" style="width:30%">
<el-input v-model="channel.basicInfo.authCode" />
</el-form-item>
<el-form-item label="爬虫code" style="width:30%">
<el-input v-model="channel.basicInfo.riskCode" />
</el-form-item>
</el-form-item>-->
</el-form>
<el-form size="medium" label-width="50px" >
<el-form-item label="AES" >
<el-input v-model="channel.basicInfo.aesKey" :autosize="{ minRows: 1, maxRows: 4}" type="textarea"/>
<el-form size="medium" label-width="50px">
<el-form-item label="AES">
<el-input
v-model="channel.basicInfo.aesKey"
:autosize="{ minRows: 1, maxRows: 4}"
type="textarea"
/>
</el-form-item>
<el-form-item label="MD5" >
<el-input v-model="channel.basicInfo.md5Key" :autosize="{ minRows: 1, maxRows: 4}" type="textarea"/>
<el-form-item label="MD5">
<el-input
v-model="channel.basicInfo.md5Key"
:autosize="{ minRows: 1, maxRows: 4}"
type="textarea"
/>
</el-form-item>
</el-form>
</el-card>
<!-- <el-card :style="boxStyle" class="box-card" > -->
<el-card style="overflow:hidden" class="box-card" >
<el-card style="overflow:hidden" class="box-card">
<div slot="header" class="clearfix">
<span>渠道自定义配置</span>
<!-- <el-button style="float: right; padding: 2px 0" type="text" @click="savevData">保存 </el-button> -->
</div>
<el-form size="medium" label-width="130px">
<el-form-item label="域名" >
<el-input v-model="channel.addInfo.envPath" :disabled="createBool"/>
<el-form-item label="域名">
<el-input v-model="channel.addInfo.envPath" :disabled="createBool" />
</el-form-item>
<el-form-item label="审核状态通知地址" >
<el-form-item label="审核状态通知地址">
<el-input v-model="channel.addInfo.approveCallBackUrl" />
</el-form-item>
<el-form-item label="订单状态通知地址" >
<el-form-item label="订单状态通知地址">
<el-input v-model="channel.addInfo.orderStatusCallBackUrl" />
</el-form-item>
<el-form-item label="还款结果通知地址" >
<el-form-item label="还款结果通知地址">
<el-input v-model="channel.addInfo.repayResultCallBackUrl" />
</el-form-item>
<el-form-item label="还款计划通知地址" >
<el-form-item label="还款计划通知地址">
<el-input v-model="channel.addInfo.repaymentPlanCallBackUrl" />
</el-form-item>
<el-form-item label="IP地址" >
<el-form-item label="IP地址">
<el-input v-model="channel.addInfo.channelIp" />
</el-form-item>
<el-form-item label="渠道rsa公钥配置">
<el-input v-model="channel.addInfo.publicKey" type="textarea" />
</el-form-item>
</el-form>
</el-card>
<el-button style="float: right; padding: 20px 0" type="text" @click="savevData">保存</el-button>
</el-card>
<!-- 进件项配置 -->
<!-- <el-card v-show="channel.applyConf" class="box-card"> -->
<!-- 进件项配置-1 -->
<!-- <el-card
v-permission="['admin','operator']"
v-show="channel.applyConf.length >= 1"
class="box-card"
style="margin-bottom:20px;float:left;width:45%;margin-right:1%"
>
<div slot="header" class="clearfix">
<span>进件项配置-1</span>
</div>
<el-form size="medium" label-width="130px">
<el-form-item label="地址">
<el-input v-model="firstApplyConf.address" />
</el-form-item>
<el-form-item label="联系人">
<el-input v-model="firstApplyConf.contact" />
</el-form-item>
<el-form-item label="职业">
<el-input v-model="firstApplyConf.occupation" />
</el-form-item>
<el-form-item label="学历">
<el-input v-model="firstApplyConf.education" />
</el-form-item>
<el-form-item label="收入">
<el-input v-model="firstApplyConf.income" />
</el-form-item>
<el-form-item label="email">
<el-input v-model="firstApplyConf.email" />
</el-form-item>
<el-form-item label="ocr">
<el-input v-model="firstApplyConf.ocr" />
</el-form-item>
</el-form>
</el-card>-->
<!-- 进件项配置-2-->
<!-- <el-card v-show="channel.applyConf.length === 2" class="box-card">
<div slot="header" class="clearfix">
<span>进件项配置-2</span>
</div>
<el-form size="medium" label-width="130px">
<el-form-item label="地址">
<el-input v-model="secondApplyConf.address" />
</el-form-item>
<el-form-item label="联系人">
<el-input v-model="secondApplyConf.contact" />
</el-form-item>
<el-form-item label="职业">
<el-input v-model="secondApplyConf.occupation" />
</el-form-item>
<el-form-item label="学历">
<el-input v-model="secondApplyConf.education" />
</el-form-item>
<el-form-item label="收入">
<el-input v-model="secondApplyConf.income" />
</el-form-item>
<el-form-item label="email">
<el-input v-model="secondApplyConf.email" />
</el-form-item>
<el-form-item label="ocr">
<el-input v-model="secondApplyConf.ocr" />
</el-form-item>
</el-form>
</el-card>-->
<el-card class="box-card">
<el-select v-model="confValue" @change="handleConfChange">
<el-option
v-for="item in confOptions"
:key="item.value"
:label="item.label"
:value="item.value"
/>
</el-select>
<el-card class="conf">
<el-form size="medium" label-width="100px">
<el-form-item label="地址">
<el-input v-model="selectConf.address" />
</el-form-item>
<el-form-item label="联系人">
<el-input v-model="selectConf.contact" />
</el-form-item>
<el-form-item label="职业">
<el-input v-model="selectConf.occupation" />
</el-form-item>
<el-form-item label="学历">
<el-input v-model="selectConf.education" />
</el-form-item>
<el-form-item label="收入">
<el-input v-model="selectConf.income" />
</el-form-item>
<el-form-item label="email">
<el-input v-model="selectConf.email" />
</el-form-item>
<el-form-item label="ocr">
<el-input v-model="selectConf.ocr" />
</el-form-item>
</el-form>
</el-card>
<el-button style="float: right; padding: 20px 0" type="text" @click="savevData">保存</el-button>
</el-card>
<!-- </el-card> -->
</div>
</template>
<script>
import { getChannels, getChannelDetail, saveChannel } from '@/api/channel'
import {
getChannels,
getChannelDetail,
saveChannel,
getChannelConf
} from '@/api/channel'
import store from '@/store'
import Pagination from '@/components/Pagination'
import permission from '@/directive/permission/index.js' // 权限判断指令
......@@ -140,11 +317,19 @@ export default {
pageSize: 10
},
channels: [],
channel: { basicInfo: {}, addInfo: {}},
channel: { basicInfo: {}, addInfo: {}, applyConf: [] },
firstApplyConf: {},
secondApplyConf: {},
count: 1,
page: 1,
roles: undefined,
createBool: true
createBool: true,
confOptions: [
{ label: '一推', value: 1 },
{ label: '二推', value: 2 }
],
confValue: 1,
selectConf: {}
}
},
created() {
......@@ -161,42 +346,66 @@ export default {
this.listQuery.pageNumber = this.page - 1
// this.channels = []
// this.count = 1
getChannels(this.listQuery).then(res => {
getChannels(this.listQuery)
.then((res) => {
this.createBool = true
if (res.data) {
this.channels = res.data.content
this.count = res.data.totalElements
this.$refs.myTable.setCurrentRow(this.channels[0])
}
}).catch(() => {
})
.catch(() => {})
},
handleCurrentChange(val) {
this.channel = { basicInfo: {}, addInfo: {}}
this.channel = { basicInfo: {}, addInfo: {}, applyConf: [] }
if (val) {
getChannelDetail({ channelId: val.channelId }).then(res => {
getChannelDetail({ channelId: val.channelId }).then((res) => {
if (res.data) {
this.channel = res.data
this.firstApplyConf = this.channel.applyConf[0]
if (this.channel.applyConf.length >= 2) {
this.secondApplyConf = this.channel.applyConf[1]
}
if (this.confValue === 1) {
this.selectConf = this.firstApplyConf
}
if (this.confValue === 2) {
this.selectConf = this.secondApplyConf
}
}
})
}
},
boxStyle() {
const boxStyle = this.roles.include('admin') ? { width: '54%' } : { width: '100%' }
const boxStyle = this.roles.include('admin')
? { width: '54%' }
: { width: '100%' }
return boxStyle
},
handleCreate() {
this.createBool = false
this.channel = { basicInfo: {}, addInfo: {}}
this.channel = { basicInfo: {}, addInfo: {}, applyConf: [] }
this.selectConf = {}
this.firstApplyConf = {}
this.secondApplyConf = {}
},
savevData() {
if (this.roles.includes('channel')) {
this.channel.basicInfo = { channelId: this.channel.basicInfo.channelId }
}
// 一推选项不为空
if (Object.keys(this.firstApplyConf).length !== 0) {
this.channel.applyConf.push(this.firstApplyConf)
}
// 二推选项不为空
if (Object.keys(this.secondApplyConf).length !== 0) {
this.channel.applyConf.push(this.secondApplyConf)
}
saveChannel(this.channel).then(() => {
this.$notify({
title: '成功',
......@@ -207,6 +416,40 @@ export default {
this.handleCurrentChange(this.channel.basicInfo)
this.getChannels()
})
},
// 配置项变更
handleConfChange() {
if (this.confValue === 1) {
this.selectConf = this.firstApplyConf
}
if (this.confValue === 2) {
this.selectConf = this.secondApplyConf
}
},
// 下载文件
download: function(filename, text) {
var element = document.createElement('a')
element.setAttribute(
'href',
'data:text/plain;charset=utf-8,' + encodeURIComponent(text)
)
element.setAttribute('download', filename)
element.style.display = 'none'
document.body.appendChild(element)
element.click()
document.body.removeChild(element)
},
// 导出数据
exportData(channelId) {
getChannelConf({ channelId: channelId }).then((res) => {
const now = new Date()
const year = now.getFullYear()
const month = now.getMonth() + 1
const day = now.getDate()
const filename =
year + '-' + month + '-' + day + '-' + channelId + '.sql'
this.download(filename, res)
})
}
}
}
......@@ -216,4 +459,9 @@ export default {
.el-form-item {
width: 100%;
}
.conf {
margin-top: 10px;
width: 30%;
}
</style>
<template>
<div class="app-container">
<div class="filter-container" style="padding-bottom:20px">
<el-input v-model="listQuery.channelOrderNumber" placeholder="订单号" clearable style="width: 200px;" class="filter-item" @keyup.enter.native="getOrders"/>
<el-input v-model="listQuery.channelId" placeholder="渠道号" clearable style="width: 200px;" class="filter-item" @keyup.enter.native="getOrders"/>
<el-input v-if="isShow" v-model="listQuery.loanId" placeholder="loanId" clearable style="width: 200px;" class="filter-item" @keyup.enter.native="getOrders"/>
<el-input v-if="isShow" v-model="listQuery.applyNo" placeholder="授信申请号" clearable style="width: 200px;" class="filter-item" @keyup.enter.native="getOrders"/>
<el-input
v-model="listQuery.channelOrderNumber"
placeholder="订单号"
clearable
style="width: 200px;"
class="filter-item"
@keyup.enter.native="getOrders"
/>
<el-input
v-model="listQuery.channelId"
placeholder="渠道号"
clearable
style="width: 200px;"
class="filter-item"
@keyup.enter.native="getOrders"
/>
<el-input
v-if="isShow"
v-model="listQuery.loanId"
placeholder="loanId"
clearable
style="width: 200px;"
class="filter-item"
@keyup.enter.native="getOrders"
/>
<el-input
v-if="isShow"
v-model="listQuery.applyNo"
placeholder="授信申请号"
clearable
style="width: 200px;"
class="filter-item"
@keyup.enter.native="getOrders"
/>
<!-- <el-select v-model="listQuery.channelId" placeholder="渠道号" clearable style="width: 200px" class="filter-item" >
<el-option v-for="item in channelOptions" :key="item.key" :label="item.display_name" :value="item.key"/>
</el-select> -->
</el-select>-->
<el-button class="filter-item" type="primary" icon="el-icon-search" @click="getOrders">查询</el-button>
</div>
......@@ -19,27 +49,37 @@
size="medium"
fit
highlight-current-row
@current-change="handleCurrentChange">
<el-table-column label="ID" type="index" align="center" width="65"/>
<el-table-column sortable label="订单号" prop="channelOrderNumber" align="center"/>
<el-table-column label="渠道号" width="100" prop="channelId" align="center"/>
<el-table-column v-if="isShow" label="loanId" width="120" prop="loanId" align="center"/>
<el-table-column v-if="isShow" label="授信申请号" prop="applyNo" align="center"/>
<el-table-column label="创建时间" width="180" prop="createdAt" align="center"/>
<el-table-column label="订单状态" width="180" prop="status" align="center"/>
<el-table-column label="操作" align="center" >
@current-change="handleCurrentChange"
>
<el-table-column label="ID" type="index" align="center" width="65" />
<el-table-column sortable label="订单号" prop="channelOrderNumber" align="center" />
<el-table-column label="渠道号" width="100" prop="channelId" align="center" />
<el-table-column v-if="isShow" label="loanId" width="120" prop="loanId" align="center" />
<el-table-column v-if="isShow" label="授信申请号" prop="applyNo" align="center" />
<el-table-column label="创建时间" width="180" prop="createdAt" align="center" />
<el-table-column label="订单状态" width="180" prop="status" align="center" />
<el-table-column label="操作" align="center">
<template slot-scope="scope">
<el-button v-for="item in scope.row.opt" :key="item.action" size="mini" @click="handleOption(scope.row,item)">{{ item.name }}</el-button>
<el-button
v-for="item in scope.row.opt"
:key="item.action"
size="mini"
@click="handleOption(scope.row,item)"
>{{ item.name }}</el-button>
</template>
</el-table-column>
</el-table>
<pagination v-show="count>0" :total="count" :page.sync="page" :limit.sync="listQuery.pageSize" @pagination="getOrders" />
<el-card class="box-card" >
<pagination
v-show="count>0"
:total="count"
:page.sync="page"
:limit.sync="listQuery.pageSize"
@pagination="getOrders"
/>
<el-card class="box-card">
<el-tabs v-model="activeName" type="card" @tab-click="handleClick">
<el-tab-pane label="订单状态" name="orderHistory">
<el-table
......@@ -47,43 +87,34 @@
:data="orderHistory"
fit
highlight-current-row
style="margin-bottom:20px">
<el-table-column label="订单状态" prop="status" align="center"/>
<el-table-column label="创建时间" prop="updateTime" align="center"/>
style="margin-bottom:20px"
>
<el-table-column label="订单状态" prop="status" align="center" />
<el-table-column label="创建时间" prop="updateTime" align="center" />
</el-table>
</el-tab-pane>
<el-tab-pane label="通知记录" name="callbackRecords">
<el-table
:data="callbackRecords"
fit
highlight-current-row
style="margin-bottom:20px">
<el-table-column label="订单号" prop="channelOrderNo" align="center"/>
<el-table-column label="期数" prop="termNo" align="center"/>
<el-table-column label="通知类型" prop="noticeType" align="center"/>
<el-table-column label="状态枚举值" prop="callbackStatus" align="center"/>
<el-table-column label="重试次数" prop="retryTimes" align="center"/>
<el-table-column label="失败原因" prop="failCode" align="center"/>
<el-table :data="callbackRecords" fit highlight-current-row style="margin-bottom:20px">
<el-table-column label="订单号" prop="channelOrderNo" align="center" />
<el-table-column label="期数" prop="termNo" align="center" />
<el-table-column label="通知类型" prop="noticeType" align="center" />
<el-table-column label="状态枚举值" prop="callbackStatus" align="center" />
<el-table-column label="重试次数" prop="retryTimes" align="center" />
<el-table-column label="失败原因" prop="failCode" align="center" />
<el-table-column label="是否活跃" prop="isActive" align="center">
<template slot-scope="scope">
<el-tag >{{ scope.row.isActive | activeFilter }}</el-tag>
<el-tag>{{ scope.row.isActive | activeFilter }}</el-tag>
</template>
</el-table-column>
<el-table-column
label="其他数据"
align="center">
<el-table-column label="其他数据" align="center">
<template slot-scope="scope">
<el-input v-model="scope.row.exdata"/>
<el-input v-model="scope.row.exdata" />
</template>
</el-table-column>
<el-table-column label="通知结果" prop="tableName" align="center"/>
<el-table-column label="创建时间" prop="createdAt" align="center"/>
<el-table-column label="修改时间" prop="updatedAt" align="center"/>
<el-table-column label="通知结果" prop="tableName" align="center" />
<el-table-column label="创建时间" prop="createdAt" align="center" />
<el-table-column label="修改时间" prop="updatedAt" align="center" />
</el-table>
</el-tab-pane>
......@@ -93,97 +124,100 @@
:data="repaymentPlan"
fit
highlight-current-row
style="margin-bottom:20px">
<el-table-column label="期数" prop="periodNo" align="center"/>
<el-table-column label="还款状态" prop="repaymentStatus" align="center"/>
<el-table-column label="应还本金" prop="principal" align="center"/>
<el-table-column label="应还利息" prop="interest" align="center"/>
<el-table-column label="逾期利息" prop="overdueInterest" align="center"/>
<el-table-column label="服务费" prop="serviceFee" align="center"/>
<el-table-column label="其他费用" prop="otherFee" align="center"/>
style="margin-bottom:20px"
>
<el-table-column label="期数" prop="periodNo" align="center" />
<el-table-column label="还款状态" prop="repaymentStatus" align="center" />
<el-table-column label="应还本金" prop="principal" align="center" />
<el-table-column label="应还利息" prop="interest" align="center" />
<el-table-column label="逾期利息" prop="overdueInterest" align="center" />
<el-table-column label="服务费" prop="serviceFee" align="center" />
<el-table-column label="其他费用" prop="otherFee" align="center" />
<el-table-column label="当期到期日" align="center">
<template slot-scope="scope">
<span >{{ scope.row.dueTime | formatDate }}</span>
<span>{{ scope.row.dueTime | formatDate }}</span>
</template>
</el-table-column>
<el-table-column label="实还本金" prop="actPrincipal" align="center"/>
<el-table-column label="实还利息" prop="actInterest" align="center"/>
<el-table-column label="实还服务费" prop="actServiceFee" align="center"/>
<el-table-column label="实还逾期利息" prop="actOverdueInterest" align="center"/>
<el-table-column label="实还其他费用" prop="actOtherFee" align="center"/>
<el-table-column label="应还总额" prop="requiredRepayment" align="center"/>
<el-table-column label="实还总额" prop="repayAmount" align="center"/>
<el-table-column label="实还本金" prop="actPrincipal" align="center" />
<el-table-column label="实还利息" prop="actInterest" align="center" />
<el-table-column label="实还服务费" prop="actServiceFee" align="center" />
<el-table-column label="实还逾期利息" prop="actOverdueInterest" align="center" />
<el-table-column label="实还其他费用" prop="actOtherFee" align="center" />
<el-table-column label="应还总额" prop="requiredRepayment" align="center" />
<el-table-column label="实还总额" prop="repayAmount" align="center" />
<el-table-column label="发起还款时间" align="center">
<template slot-scope="scope">
<span >{{ scope.row.repayTime | formatDate }}</span>
<span>{{ scope.row.repayTime | formatDate }}</span>
</template>
</el-table-column>
</el-table>
</el-tab-pane>
<el-tab-pane label="操作日志" name="logHistory">
<el-table
:data="logHistory"
fit
highlight-current-row
style="margin-bottom:20px">
<el-table-column label="订单号" prop="channelOrderNumber" align="center"/>
<el-table-column label="操作" prop="optName" align="center"/>
<el-table-column label="操作员" prop="optUser" align="center"/>
<el-table-column label="日志详细" prop="optLogDetail" align="center"/>
<el-table :data="logHistory" fit highlight-current-row style="margin-bottom:20px">
<el-table-column label="订单号" prop="channelOrderNumber" align="center" />
<el-table-column label="操作" prop="optName" align="center" />
<el-table-column label="操作员" prop="optUser" align="center" />
<el-table-column label="日志详细" prop="optLogDetail" align="center" />
<el-table-column label="操作结果" prop="optResult" align="center">
<template slot-scope="scope">
<el-tag >{{ scope.row.optResult | statusFilter }}</el-tag>
<el-tag>{{ scope.row.optResult | statusFilter }}</el-tag>
</template>
</el-table-column>
<el-table-column label="创建时间" prop="createTime" align="center"/>
<el-table-column label="创建时间" prop="createTime" align="center" />
</el-table>
</el-tab-pane>
</el-tabs>
</el-card>
<el-dialog :title="dialogTitle" :visible.sync="dialogFormVisible">
<el-form :model="approveData" label-position="left" label-width="80px" style="margin-left:40px;">
<el-form
:model="approveData"
label-position="left"
label-width="80px"
style="margin-left:40px;"
>
<!-- <el-form-item label="审核结果" >
<el-select v-model="approveData.isPass" placeholder="Please select">
<el-option v-for="item in passOptions" :key="item.key" :label="item.display_name" :value="item.key"/>
</el-select>
</el-form-item> -->
</el-form-item>-->
<el-form-item label="资金类型" >
<el-form-item label="资金类型">
<el-select v-model="approveData.fundType" placeholder="Please select">
<el-option v-for="item in typeOptions" :key="item.key" :label="item.display_name" :value="item.key"/>
<el-option
v-for="item in typeOptions"
:key="item.key"
:label="item.display_name"
:value="item.key"
/>
</el-select>
</el-form-item>
<el-form-item label="审核额度" style="width:50%">
<el-input v-model="approveData.amount"/>
<el-input v-model="approveData.amount" />
</el-form-item>
<el-form-item label="审核期数" style="width:50%">
<el-input v-model="approveData.period"/>
<el-input v-model="approveData.period" />
</el-form-item>
</el-form>
<div slot="footer" class="dialog-footer">
<el-button @click="handleApprove(false)">审核拒绝</el-button>
<el-button :disabled="!(approveData.amount && approveData.period)" type="primary" @click="handleApprove(true)">审核通过</el-button>
<el-button
:disabled="!(approveData.amount && approveData.period)"
type="primary"
@click="handleApprove(true)"
>审核通过</el-button>
</div>
</el-dialog>
<el-dialog :visible.sync="dialogDeleteVisible" :data="order" title="Cancel">
<span >
确定要 {{ opt }} {{ order.channelOrderNumber }} 吗?
</span>
<span>确定要 {{ opt }} {{ order.channelOrderNumber }} 吗?</span>
<span slot="footer" class="dialog-footer">
<el-button @click="dialogDeleteVisible = false">取消</el-button>
<el-button type="primary" @click="cancelLoan()">确定</el-button>
</span>
</el-dialog>
</div>
</template>
......@@ -277,7 +311,8 @@ export default {
}
}
this.listQuery.pageNumber = this.page - 1
getOrders(this.listQuery).then(res => {
getOrders(this.listQuery)
.then((res) => {
this.orders = res.data.content
this.count = res.data.totalElements
this.$refs.myTable.setCurrentRow(this.orders[0])
......@@ -286,8 +321,8 @@ export default {
// for (const o in this.orders) {
// this.orders[o].opt = o % 2 === 0 ? [{ action: 'audit', name: '审核' }, { action: 'loan', name: '放款' }] : [{ action: 'audit', name: '审核' }]
// }
}).catch(() => {
})
.catch(() => {})
},
handleCurrentChange(val) {
......@@ -331,7 +366,8 @@ export default {
}
if (opt.action === 'second_audit') {
secondAudit({ channelOrderNumber: this.order.channelOrderNumber }).then((res) => {
secondAudit({ channelOrderNumber: this.order.channelOrderNumber }).then(
(res) => {
if (res.data) {
this.$notify({
message: res.message,
......@@ -346,7 +382,8 @@ export default {
})
}
this.getOrders()
})
}
)
}
},
......@@ -368,7 +405,8 @@ export default {
cancelLoan() {
if (this.opt === '贷前关单') {
cancelLoan({ channelOrderNumber: this.order.channelOrderNumber }).then((res) => {
cancelLoan({ channelOrderNumber: this.order.channelOrderNumber }).then(
(res) => {
this.$notify({
message: res.message,
type: 'success',
......@@ -376,11 +414,14 @@ export default {
})
this.dialogDeleteVisible = false
this.getOrders()
})
}
)
}
if (this.opt === '贷后关单') {
cancelLoanAfter({ channelOrderNumber: this.order.channelOrderNumber }).then((res) => {
cancelLoanAfter({
channelOrderNumber: this.order.channelOrderNumber
}).then((res) => {
this.$notify({
message: res.message,
type: 'success',
......@@ -395,7 +436,8 @@ export default {
handleApprove(data) {
this.approveData.channelOrderNumber = this.order.channelOrderNumber
this.approveData.isPass = data
approve(this.approveData).then(res => {
approve(this.approveData)
.then((res) => {
if (res.data) {
this.$notify({
message: res.message,
......@@ -410,30 +452,40 @@ export default {
})
}
this.getOrders()
}).catch(() => {
})
.catch(() => {})
this.dialogFormVisible = false
},
handleClick() {
if (this.order.channelOrderNumber) {
if (this.activeName === 'orderHistory') {
getOrderHistory({ channelOrderNumber: this.order.channelOrderNumber }).then(res => {
getOrderHistory({
channelOrderNumber: this.order.channelOrderNumber
}).then((res) => {
this.orderHistory = res.data.historyStatus
})
}
if (this.activeName === 'callbackRecords') {
callbackRecord({ channelOrderNumber: this.order.channelOrderNumber }).then(res => {
callbackRecord({
channelOrderNumber: this.order.channelOrderNumber
}).then((res) => {
this.callbackRecords = res.data
})
}
if (this.activeName === 'repaymentPlan') {
repaymentPlan({ channelOrderNumber: this.order.channelOrderNumber, loanId: this.order.loanId }).then(res => {
this.repaymentPlan = []
repaymentPlan({
channelOrderNumber: this.order.channelOrderNumber,
loanId: this.order.loanId
}).then((res) => {
this.repaymentPlan = res.data.repaymentPlans
})
}
if (this.activeName === 'logHistory') {
logHistory({ channelOrderNumber: this.order.channelOrderNumber }).then(res => {
logHistory({
channelOrderNumber: this.order.channelOrderNumber
}).then((res) => {
this.logHistory = res.data
})
}
......@@ -444,5 +496,7 @@ export default {
</script>
<style lang="scss">
.el-tooltip__popper{max-width:80%}
.el-tooltip__popper {
max-width: 80%;
}
</style>
<template>
<div>
<!-- 头部搜索区域 -->
<div class="filter-container">
<el-input v-model="queryInfo.phoneNo" placeholder="手机号" style="width: 200px;" />
<el-input v-model="queryInfo.channelOrderNo" placeholder="订单号" style="width: 200px;" />
<el-button type="primary" icon="el-icon-search" @click="searchInfo">查询</el-button>
</div>
<!-- 用户基本信息 -->
<p style="margin-left: 20px; font-size: 20px">用户基本信息</p>
<div class="basic-info">
<div class="box">
<el-form label-position="left" label-width="80px">
<el-form-item label="姓名:">
<el-input v-model="userInfo.name" disabled size="medium" />
</el-form-item>
<el-form-item label="身份证:">
<el-input v-model="userInfo.idNo" disabled size="medium" />
</el-form-item>
<el-form-item label="手机号:">
<el-input v-model="userInfo.phoneNo" disabled size="medium" />
</el-form-item>
<el-form-item label="userId:">
<el-input v-model="userInfo.userId" disabled size="medium" />
</el-form-item>
<el-form-item label="uuid:">
<el-input v-model="userInfo.uuid" disabled size="medium" />
</el-form-item>
<el-form-item label="是否启用:">
<el-input v-model="userInfo.enable" disabled size="medium" />
</el-form-item>
</el-form>
</div>
<div class="box">
<el-form label-position="left" label-width="80px">
<el-form-item label="email:">
<el-input v-model="userInfo.email" disabled size="medium" />
</el-form-item>
<el-form-item label="职业:">
<el-input v-model="userInfo.occupation" disabled size="medium" />
</el-form-item>
<el-form-item label="学历:">
<el-input v-model="userInfo.education" disabled size="medium" />
</el-form-item>
<el-form-item label="收入类型:">
<el-input v-model="userInfo.income" disabled size="medium" />
</el-form-item>
<el-form-item label="收入范围:">
<el-input v-model="userInfo.incomeRange" disabled size="medium" />
</el-form-item>
<el-form-item label="地址:">
<el-input v-model="userInfo.address" disabled size="medium" />
</el-form-item>
</el-form>
</div>
<div class="box">
<el-form label-position="left" label-width="100px">
<el-form-item label="联系人1:">
<el-input v-model="userInfo.contactNameA" disabled size="medium" />
</el-form-item>
<el-form-item label="联系人2:">
<el-input v-model="userInfo.contactNameB" disabled size="medium" />
</el-form-item>
<el-form-item label="婚姻状态:">
<el-input v-model="userInfo.marryStatus" disabled size="medium" />
</el-form-item>
<el-form-item label="是否有车:">
<el-input v-model="userInfo.hasCar" disabled size="medium" />
</el-form-item>
<el-form-item label="是否有房:">
<el-input v-model="userInfo.hasHouse" disabled size="medium" />
</el-form-item>
<el-form-item label="是否有信用卡:">
<el-input v-model="userInfo.hasCreditCard" disabled size="medium" />
</el-form-item>
</el-form>
</div>
</div>
<!-- 用户ocr信息区域 -->
<!-- <p style="margin-left: 20px; font-size: 20px">风控场景数据</p> -->
<div v-show="userInfo.riskInfoList != null" class="wind-control">
<p style="margin-left: 20px; font-size: 20px">风控场景数据</p>
<div class="image-area">
<div class="box">
<el-image :src="src" />
</div>
<div class="box">
<el-image :src="src" />
</div>
</div>
<div class="living-body">
<p>活体类型:{{ livingType }}</p>
<p>活体信息:{{ livingInfo }}</p>
</div>
<div class="extra-info">
其他信息:
<el-input v-model="textarea2" type="textarea" placeholder="请输入内容" />
</div>
</div>
</div>
</template>
<script>
import { getCustomerApplyInfo } from '@/api/search'
export default {
data() {
return {
queryInfo: {
phoneNo: '',
channelOrderNo: ''
},
userInfo: {
name: '',
idNo: '',
phoneNo: '',
userId: '',
uuid: '',
enable: '',
email: '',
occupation: '',
education: '',
income: '',
incomeRange: '',
address: '',
contactNameA: '',
contactNameB: '',
marryStatus: '',
hasCar: '',
hasHouse: '',
hasCreditCard: ''
},
idCardFront: '',
idCardBack: '',
livingType: '',
livingInfo: ''
}
},
methods: {
searchInfo() {
if (this.queryInfo.phoneNo === '' && this.queryInfo.channelOrderNo === '') {
return this.$message.error('手机号和订单号不能同时为空!')
}
getCustomerApplyInfo(this.queryInfo).then((res) => {
console.log(res)
this.userInfo = res.data
})
}
}
}
</script>
<style lang="scss" scoped>
.filter-container {
margin: 20px;
}
.el-input {
width: 280px !important;
padding: 0 !important;
}
.basic-info {
border: 0.5px solid rgba(213, 216, 219, 0.4);
padding: 20px 10px;
display: flex;
margin: 20px;
.box {
flex: 1;
}
}
.image-area {
display: flex;
margin: 0 40px;
.box {
flex: 1;
padding: 20px 100px;
}
}
.wind-control {
border: 0.5px solid rgba(213, 216, 219, 0.4);
padding: 20px 10px;
margin: 20px;
}
.living-body {
display: flex;
margin: 0 40px;
p {
flex: 1;
margin: 20px 20px;
}
}
</style>
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