Commit 1df60a86 authored by caimeng's avatar caimeng

6.7日上午提交

parent e0b54889
......@@ -23,6 +23,6 @@ const theme = {
//是否显示通知组件
showNotice: false,
//是否显示全屏组件
showFullScreen: false,
showFullScreen: true,
}
module.exports = theme
......@@ -81,7 +81,7 @@ export const asyncRoutes = [
meta: {
title: '授信管理',
remixIcon: 'home-4-line',
noKeepAlive:true
noKeepAlive: true
},
children: [
{
......@@ -89,7 +89,7 @@ export const asyncRoutes = [
name: 'CreditPre',
component: () => import('@/views/credit/pre'),
meta: {
noKeepAlive:true,
noKeepAlive: true,
title: '预授信审核'
}
},
......@@ -98,7 +98,7 @@ export const asyncRoutes = [
name: 'CreditList',
component: () => import('@/views/credit/list'),
meta: {
noKeepAlive:true,
noKeepAlive: true,
title: '授信审核'
}
},
......@@ -107,16 +107,17 @@ export const asyncRoutes = [
name: 'CreditOrder',
component: () => import('@/views/credit/order'),
meta: {
noKeepAlive:true,
noKeepAlive: true,
title: '我的审批'
}
},
hidden: true
},
{
path: 'detail',
name: 'CreditDetail',
component: () => import('@/views/credit/detail'),
meta: {
noKeepAlive:true,
noKeepAlive: true,
title: '授信详情',
remixIcon: 'building-line',
tagHidden: true
......@@ -129,7 +130,7 @@ export const asyncRoutes = [
name: 'CreditPreDetail',
component: () => import('@/views/credit/pre-detail'),
meta: {
noKeepAlive:true,
noKeepAlive: true,
title: '预授信详情',
remixIcon: 'building-line',
tagHidden: true
......@@ -145,7 +146,7 @@ export const asyncRoutes = [
redirect: '/approval/order',
alwaysShow: true,
meta: {
noKeepAlive:true,
noKeepAlive: true,
title: '审批管理',
remixIcon: 'home-4-line'
},
......@@ -155,7 +156,7 @@ export const asyncRoutes = [
name: 'ApprovalList',
component: () => import('@/views/approval/order'),
meta: {
noKeepAlive:true,
noKeepAlive: true,
title: '我的订单',
remixIcon: 'product-hunt-line'
}
......@@ -174,7 +175,7 @@ export const asyncRoutes = [
name: 'ApprovalDetail',
component: () => import('@/views/approval/detail'),
meta: {
noKeepAlive:true,
noKeepAlive: true,
title: '详情',
remixIcon: 'product-hunt-line'
},
......@@ -188,38 +189,38 @@ export const asyncRoutes = [
component: Layout,
redirect: '/loan/list',
meta: {
noKeepAlive:true,
noKeepAlive: true,
title: '借款管理',
remixIcon: 'home-4-line'
},
children: [
{
path: 'list',
name: 'loanList',
component: () => import('@/views/loan/list'),
meta: {
noKeepAlive:true,
title: '稽核审批',
remixIcon: 'task-line'
}
},
{
path: 'detail',
name: 'loanDetail',
component: () => import('@/views/loan/detail'),
meta: {
noKeepAlive:true,
noKeepAlive: true,
title: '详情',
remixIcon: 'task-line'
},
hidden: true
},
{
path: 'order',
path: 'audit',
name: 'loanOrder',
component: () => import('@/views/loan/order'),
component: () => import('@/views/loan/audit'),
meta: {
noKeepAlive: true,
title: '稽核审批',
remixIcon: 'task-line'
}
},
{
path: 'list',
name: 'loanList',
component: () => import('@/views/loan/list'),
meta: {
noKeepAlive:true,
noKeepAlive: true,
title: '放款确认',
remixIcon: 'task-line'
}
......
......@@ -42,159 +42,6 @@ export default {
params
})
},
// 商户列表
merchant_list(data) {
return request({
url: '/macy/selectMacyList',
method: 'post',
data
})
},
// 商户新增
merchant_add(data) {
return request({
url: '/macy/createdMacy',
method: 'post',
data
})
},
// 商户更新
merchant_update(data) {
return request({
url: '/macy/editMacy',
method: 'post',
data
})
},
// 商户详情
merchant_view(params) {
return request({
url: '/macy/selectMacyByTenantNo',
method: 'get',
params
})
},
// 产品列表
merchant_select(params) {
return request({
url: '/macy/selectList',
method: 'get',
params
})
},
// 产品列表
prod_list(data) {
return request({
url: '/macy/selectProductPageList',
method: 'post',
data
})
},
// 产品新增
prod_add(data) {
return request({
url: '/macy/createdProductInfo',
method: 'post',
data
})
},
// 产品编辑
prod_update(data) {
return request({
url: '/macy/editProductInfo',
method: 'post',
data
})
},
// 产品上下架
prod_switch_upDown(params) {
return request({
url: '/macy/editProductInfoByStatus',
method: 'get',
params
})
},
// 产品查看
prod_view(params) {
return request({
url: '/macy/selectProductInfoByappNo',
method: 'get',
params
})
},
// 申请列表
apply_list(data) {
return request({
url: '/zeus/pageQueryApply',
method: 'post',
data
})
},
// 推送
apply_push(params) {
return request({
url: '/zeus/applyRetryPush',
method: 'get',
params
})
},
// 公告列表
notice_list(data) {
return request({
url: '/smgw/getBackPageList',
method: 'post',
data
})
},
// 公告发送
notice_add(data) {
return request({
url: '/smgw/sendZnx',
method: 'post',
data
})
},
// 公告编辑
notice_detail(data) {
return request({
url: '/smgw/getNotice',
method: 'post',
data
})
},
// 公告编辑
notice_edit(data) {
return request({
url: '/smgw/updateNotice',
method: 'post',
data
})
},
// 回现APP设置
app_setting(params) {
return request({
url: '/manage/getList',
method: 'get',
params
})
},
// 变更状态
app_setting_update(data) {
return request({
url: '/manage/update',
method: 'post',
data
})
},
// 变更状态
dict(params) {
return request({
url: '/dictData/selectBydictType',
method: 'get',
params
})
},
/** 授信管理接口 **/
// 预授信列表
......@@ -295,6 +142,58 @@ export default {
method: 'post',
data
})
},
// 借款管理接口
// 借款审批列表
loanAuditList(data) {
return request({
url: '/loan/auditAllotList',
method: 'post',
data
})
},
// 借款详情
loanDetail(params) {
return request({
url: '/loan/auditDetail',
method: 'get',
params
})
},
// 借款审核提交
loanAuditSubmit(data) {
return request({
url: '/loan/auditAllot',
method: 'post',
data
})
},
// 放款确认列表
loanConfirmList(data) {
return request({
url: '/loan/loanConfirmList',
method: 'post',
data
})
},
// 确认放款
loanConfirm(data) {
return request({
url: '/loan/confirmLoan',
method: 'post',
data
})
},
// 取消放款
loanCancel(data) {
return request({
url: '/loan/cancelLoan',
method: 'post',
data
})
}
}
<template>
<el-dropdown @command="handleCommand">
<span class="avatar-dropdown">
<!--<img :src="avatar" alt="" class="user-avatar" />-->
<img :src="avatar" alt="" class="user-avatar" />
<div class="user-name">
{{ username }}
<vab-remix-icon icon-class="arrow-down-s-line" />
......@@ -72,8 +72,8 @@
justify-items: center;
.user-avatar {
width: 40px;
height: 40px;
width: 26px;
height: 26px;
margin-left: 15px;
cursor: pointer;
border-radius: 50%;
......
......@@ -17,7 +17,7 @@
></el-tab-pane>
</el-tabs>
<el-dropdown @command="handleCommand">
<el-dropdown v-if='false' @command="handleCommand">
<span class="more">
{{ translateTitle('更多') }}
<vab-remix-icon icon-class="arrow-down-s-line"></vab-remix-icon>
......
......@@ -86,63 +86,19 @@
:show-overflow-tooltip='!!item.overflow'
>
<template #default='{ row }'>
<div v-if="item.label==='LOGO'">
<el-image
style='width: 50px; height: 35px'
:src='row[item.prop]'
fit='fit'
/>
</div>
<div v-else-if="item.label==='产品状态'">
<el-tag
v-if="row[item.prop] === '1'"
type='success'
size='mini'
>
启用
</el-tag>
<el-tag
v-else
type='info'
size='mini'
>
禁用
</el-tag>
</div>
<span v-else>{{ row[item.prop] }}</span>
<span>{{ row[item.prop] }}</span>
</template>
</el-table-column>
<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='success'
@click='handleView(row)'
>
详情
</el-button>
<el-button
size='mini'
type='primary'
@click='handleClick(row)'
>
转派
</el-button>
</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='success' @click='handleView(row)'>详情</el-button>
<el-button size='mini' type='primary' @click='handleClick(row)'>转派</el-button>
</template>
</el-table-column>
</template>
</el-table>
<!--分页-->
......@@ -308,13 +264,11 @@
const result = await API.approveOnOff({
userId,
userDutyState
});
})
if(result.success){
Vue.prototype.$baseMessage(
'操作成功',
'success'
)
if (result.success) {
const msg = userDutyState === 'ONLINE' ? '已上线' : '已下线'
Vue.prototype.$baseMessage(msg, 'success')
}
}
......
......@@ -2,22 +2,22 @@
<div class="index-container">
<el-row :gutter="20">
<page-header></page-header>
<el-col :lg="6" :md="12" :sm="24" :xl="6" :xs="24">
<chart1></chart1>
</el-col>
<el-col :lg="6" :md="12" :sm="24" :xl="6" :xs="24">
<chart2></chart2>
</el-col>
<el-col :lg="12" :md="24" :sm="24" :xl="12" :xs="24">
<version-information></version-information>
</el-col>
<icon-list></icon-list>
<el-col :lg="12" :md="12" :sm="24" :xl="12" :xs="24">
<chart3></chart3>
</el-col>
<el-col :lg="12" :md="12" :sm="24" :xl="12" :xs="24">
<my-project></my-project>
</el-col>
<!--<el-col :lg="6" :md="12" :sm="24" :xl="6" :xs="24">-->
<!-- <chart1></chart1>-->
<!--</el-col>-->
<!--<el-col :lg="6" :md="12" :sm="24" :xl="6" :xs="24">-->
<!-- <chart2></chart2>-->
<!--</el-col>-->
<!--<el-col :lg="12" :md="24" :sm="24" :xl="12" :xs="24">-->
<!-- <version-information></version-information>-->
<!--</el-col>-->
<!--<icon-list></icon-list>-->
<!--<el-col :lg="12" :md="12" :sm="24" :xl="12" :xs="24">-->
<!-- <chart3></chart3>-->
<!--</el-col>-->
<!--<el-col :lg="12" :md="12" :sm="24" :xl="12" :xs="24">-->
<!-- <my-project></my-project>-->
<!--</el-col>-->
</el-row>
</div>
</template>
......
<template>
<div class='page-fence'>
<!--搜索-->
<block-header title='搜索' />
<div class='search'>
<el-form ref='form' label-suffix=':' :inline='true' :model='queryForm' class='form-inline'>
<el-form-item prop='loanNo' label='借款编号'>
<el-input v-model='queryForm.loanNo' clearable placeholder='请输入借款编号' />
</el-form-item>
<el-form-item prop='clientName' label='客户姓名'>
<el-input v-model='queryForm.clientName' clearable placeholder='请输入客户姓名' />
</el-form-item>
<el-form-item prop='mobile' label='手机号码'>
<el-input v-model='queryForm.mobile' clearable placeholder='请输入客户手机号码' />
</el-form-item>
<el-form-item prop='loanName' label='项目名称'>
<el-input v-model='queryForm.loanName' clearable placeholder='请输入客户手机号码' />
</el-form-item>
<el-form-item 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-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'
border
: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'
>
<template #default='{ row }'>
<span>{{ row[item.prop] }}</span>
</template>
</el-table-column>
<el-table-column
fixed='right'
align='center'
label='操作'
>
<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='total, prev, pager, next'
:page-size='queryForm.size'
:total='total'
background
@current-change='handleCurrentChange'
/>
</div>
</template>
<script>
import _ from 'lodash'
import { doDelete, getList } from '@/api/table'
import API from '@/server/api'
export default {
name: 'LoanAudit',
data() {
return {
checkList: ['借款编号', '项目名称', '客户姓名', '手机号码', '借款金额', '借款期数', 'BD姓名', '商户区域', '创建时间', '借款状态', '资金渠道'],
columns: [
{
order: 1,
label: '借款编号',
prop: 'loanNo'
},
{
order: 2,
label: '项目名称',
prop: 'loanName'
},
{
order: 3,
label: '客户姓名',
prop: 'realName'
},
{
order: 4,
label: '手机号码',
prop: 'mobile'
},
{
order: 5,
label: '借款金额',
prop: 'loanAmount'
},
{
order: 6,
label: '借款期数',
prop: 'loanNum'
},
{
order: 7,
label: 'BD姓名',
prop: 'bdName'
},
{
order: 8,
label: '商户区域',
prop: 'regionName'
},
{
order: 9,
label: '创建时间',
prop: 'gmtCreated'
},
{
order: 10,
label: '借款状态',
prop: 'loanStatus'
},
{
order: 11,
label: '资金渠道',
prop: 'loanSign'
}
],
list: [],
listLoading: true,
pickerConfig: this.datePickerOptions,
total: 1,
queryForm: {
current: 1,
size: 10,
mobile: '',
loanNo: '',
loanName: '',
clientName: '',
time: '',
startTime: '',
endTime: '',
userId: ''
}
}
},
computed: {
finallyColumns() {
let finallyArray = []
this.checkList.forEach((checkItem) => {
finallyArray.push(
this.columns.filter((item) => item.label === checkItem)[0]
)
})
return _.sortBy(finallyArray, (item) => item.order)
//return finallyArray
}
},
mounted() {
this.fetchData()
},
methods: {
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()
},
handleDetail(row) {
const { loanNo } = row
this.$router.push({
path: '/loan/detail',
query: { loanNo }
})
},
handleCurrentChange(val) {
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.loanAuditList({ ...params })
const { records, total } = result.result
this.list = records
this.total = total
this.listLoading = false
}
}
}
</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>
<template>
<div class="merchant-new">
<el-form
ref="h5form"
label-suffix=":"
:rules="rules"
:model="form"
label-width="120px"
>
<block-header title="对接信息" />
<el-form-item
class="form-item"
label="对接机构"
>
<el-select
v-model="form.tenantNo"
:disabled="!!appNo"
placeholder="请选择"
>
<el-option
v-for="(item,index) in merchant"
:key="index"
:label="item.tenantName"
:value="item.tenantNo"
/>
</el-select>
</el-form-item>
<el-form-item
class="form-item"
label="对接方式"
>
<el-select
v-model="form.abutmentWay"
:disabled="!!appNo"
placeholder="请选择"
>
<el-option
label="API"
value="API"
/>
<el-option
label="H5"
value="H5"
/>
</el-select>
</el-form-item>
</el-form>
<div v-if='detail!==null' class='page'>
<block-header title='项目信息' />
<el-descriptions style='margin-bottom: 20px;' border size='small' :column='3'>
<el-descriptions-item label-class-name='labelCls' label='借款编号'>{{baseInfo.applyDate}}</el-descriptions-item>
<el-descriptions-item label-class-name='labelCls' label='项目名称'>{{baseInfo.creditTypeStr}}</el-descriptions-item>
<el-descriptions-item label-class-name='labelCls' label='借款申请时间'>{{baseInfo.creditStatusStr}}</el-descriptions-item>
<el-descriptions-item label-class-name='labelCls' label='借款状态'>{{baseInfo.realName}}</el-descriptions-item>
<el-descriptions-item label-class-name='labelCls' label='医院名称'>{{baseInfo.mobile}}</el-descriptions-item>
<el-descriptions-item label-class-name='labelCls' label='项目金额(元)'>{{baseInfo.idCard}}</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.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.companyName}}</el-descriptions-item>
<el-descriptions-item label-class-name='labelCls' label='手术时间'>{{baseInfo.liveAddress}}</el-descriptions-item>
</el-descriptions>
<block-header title='客户信息' />
<block-header title='资方信息' />
<block-header title='收款账户信息' />
<block-header title='还款账户信息' />
<block-header title='客户经理信息(BD)' />
</div>
</template>
<script>
import BlockHeader from "@/components/blockHeader";
import API from "@/server/api";
const $API = process.env.VUE_APP_API_PATH;
export default {
name: "MerchantNew",
components: {
"block-header": BlockHeader
},
data() {
return {
uploadUrl:`${$API}/sysUser/upload`,
appNo:'',
form: {
tenantNo: "",
abutmentWay: "",
gradeSort: "3",
appLogo: "",
appName: "MC产品",
appInfo: "产品介绍",
abstratInfo: "产品摘要",
applyAmtMin: "300",
applyAmtMax: "500",
withdrawSpan: "1000",
incomeCount: "1000",
approvalTime: "1000",
raiseTimeMax: "7",
raiseTimeMin: "5",
memo: "1000",
customerNumbers: "400", // 客服电话
creditWay: 1 // 授信方式
},
rules: {
tenantNo: [{ required: true, message: "请选择机构名称", trigger: "change" }],
abutmentWay: [{ required: true, message: "请选择对接方式", trigger: "change" }],
appName: [{ required: true, message: "请输入产品名称", trigger: "blur" }],
appLogo: [{ required: true, message: "请上传产品LOGO图片", trigger: "blur" }],
appInfo: [{ required: true, message: "请输入产品描述", trigger: "blur" }],
abstratInfo: [{ required: true, message: "请输入产品摘要", trigger: "blur" }],
customerNumbers: [{ required: true, message: "请输入客服电话", trigger: "blur" }],
creditWay: [{ required: true, message: "请选择授信方式", trigger: "blur" }],
gradeSort: [
{
required: true,
message: "请输入产品等级",
trigger: "blur"
}
],
raiseTimeMin: [
{ required: true, message: "请输入时间", trigger: "blur" },
{
validator: (rule, value, callback) => {
if (value * 1 >= this.form.raiseTimeMax * 1) {
callback(new Error("时间不大于最大时间"));
} else {
callback();
}
},
trigger: "change"
}
],
raiseTimeMax: [
{ required: true, message: "请输入时间", trigger: "blur" },
{
validator: (rule, value, callback) => {
if (value * 1 <= this.form.raiseTimeMin * 1) {
callback(new Error("时间不小于最小时间"));
} else {
callback();
}
},
trigger: "change"
}
],
applyAmtMin: [
{ required: true, message: "请输入额度", trigger: "blur" },
{
validator: (rule, value, callback) => {
if (value * 1 >= this.form.applyAmtMax * 1) {
callback(new Error("额度必须小于最大额度"));
} else {
callback();
}
},
trigger: "change"
}
],
applyAmtMax: [
{ required: true, message: "请输入额度", trigger: "blur" },
{
validator: (rule, value, callback) => {
if (value * 1 <= this.form.applyAmtMin * 1) {
callback(new Error("额度必须大于最小额度"));
} else {
callback();
}
},
trigger: "change"
}
],
incomeTimeBefore: [
{ required: true, message: "请输入时间", trigger: "blur" },
{
validator: (rule, value, callback) => {
if (value * 1 >= this.form.incomeTimeLate * 1) {
callback(new Error("时间须小于结束时间"));
} else {
callback();
}
},
trigger: "change"
}
],
incomeTimeLate: [
{ required: true, message: "请输入时间", trigger: "blur" },
{
validator: (rule, value, callback) => {
if (value * 1 <= this.form.incomeTimeBefore * 1) {
callback(new Error("时间须大于开始时间"));
} else {
callback();
}
},
trigger: "change"
}
],
withdrawSpan: [{ required: true, message: "请输入提现跨度", trigger: "blur" }],
approvalTime: [{ required: true, message: "请输入申请时间", trigger: "blur" }],
incomeCount: [{ required: true, message: "请输入每日进件上限", trigger: "blur" }]
},
merchant: []
};
},
async created() {
// 初始化机构列表
await this.initMerchant();
// 再请求表单
const { query } = this.$route;
if (query && query.appNo) {
this.appNo = query.appNo;
await this.initProd();
await this.initDict("SYS_USER_SEX");
await this.initDict("EDUCATIONAL");
await this.initDict("MONTHLY_INCOME");
await this.initDict("MARRIAGE");
await this.initDict("REGION");
}
},
methods: {
// 初始化机构列表
async initMerchant() {
const result = await API.merchant_select();
if (result.success) {
this.merchant = result.result;
}
},
// 初始化产品信息
async initProd() {
const appNo = this.appNo;
const { result, success } = await API.prod_view({ appNo });
if (success) {
//result.creditWay = result.creditWay+'';
this.form = result;
}
},
// 初始化字典
async initDict(dictType) {
const result = await API.dict({
dictType
});
if (result.success) {
const data = result.result;
switch (dictType) {
case "SYS_USER_SEX":
this.dict.sex = data;
break;
case "EDUCATIONAL":
this.dict.edu = data;
break;
case "MARRIAGE":
this.dict.marriage = data;
break;
case "REGION":
this.dict.region = data;
break;
case "MONTHLY_INCOME":
this.dict.money = data;
break;
}
import API from '@/server/api'
export default {
name: 'LoanDetail',
data() {
return {
loanNo: '',
detail: null
}
},
async created() {
const { query } = this.$route
if (query && query.loanNo) {
this.loanNo = query.loanNo
handleSuccessLogo(res) {
this.form.appLogo = res.result;
},
beforeAvatarUpload(file) {
const isJPG = file.type === "image/jpeg";
const isPNG = file.type === "image/png";
const isLt2M = file.size / 1024 / 1024 < 2;
if (!isJPG && !isPNG) {
this.$message.error("上传图片只能是 JPG 或者 PNG 格式!");
return false;
}
if (!isLt2M) {
this.$message.error("上传图片大小不能超过 2MB!");
return false;
await this.init()
}
return true;
},
onSubmit(formName) {
this.$refs[formName].validate(async (valid) => {
if (valid) {
const form = Object.assign({}, this.form);
//form.tenantNo = this.tenantNo;
//form.abutmentWay = 'API'
let result;
if(this.appNo){
form.appNo = this.appNo;
result = await API.prod_update({ ...form });
}else{
result = await API.prod_add({ ...form });
}
if (result.success) {
this.$baseMessage("产品保存成功", "success");
setTimeout(() => {
this.$router.back();
}, 1500);
}
}
});
},
onReset(formName) {
this.$refs[formName].resetFields();
methods: {
async init() {
const loanNo = this.loanNo
const result = await API.loanDetail({
loanNo
})
this.detail = result.result
}
}
}
};
</script>
<style lang="scss" src="./index.scss"></style>
<style lang='scss' src='./index.scss'></style>
<template>
<div class="page-fence">
<div class='page-fence'>
<!--搜索-->
<div class="search">
<el-form
label-suffix=":"
:inline="true"
:model="queryForm"
class="form-inline"
>
<el-form-item label="订单编号">
<el-input
v-model="queryForm.orderNo"
clearable
placeholder="请输入机构编号"
/>
<block-header title='搜索' />
<div class='search'>
<el-form ref='form' label-suffix=':' :inline='true' :model='queryForm' class='form-inline'>
<el-form-item prop='loanNo' label='借款编号'>
<el-input v-model='queryForm.loanNo' clearable placeholder='请输入借款编号' />
</el-form-item>
<el-form-item label="用户姓名">
<el-input
v-model="queryForm.tenantNo"
clearable
placeholder="请输入机构名称"
/>
<el-form-item prop='clientName' label='客户姓名'>
<el-input v-model='queryForm.clientName' clearable placeholder='请输入客户姓名' />
</el-form-item>
<el-form-item>
<el-button
type="primary"
@click="onSubmit"
<el-form-item prop='mobile' label='手机号码'>
<el-input v-model='queryForm.mobile' clearable placeholder='请输入客户手机号码' />
</el-form-item>
<el-form-item prop='loanName' label='项目名称'>
<el-input v-model='queryForm.loanName' clearable placeholder='请输入客户手机号码' />
</el-form-item>
<el-form-item 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-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 }">
<template #default='{ row }'>
<div v-if="item.label==='LOGO'">
<el-image
style="width: 50px; height: 35px"
:src="row[item.prop]"
fit="fit"
style='width: 50px; height: 35px'
:src='row[item.prop]'
fit='fit'
/>
</div>
<div v-else-if="item.label==='产品状态'">
<span>{{ row[item.prop]==="1"?'启用':'禁用' }}</span>
<span>{{ row[item.prop] === '1' ? '启用' : '禁用' }}</span>
</div>
<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="handleView(row)"
>
推送
</el-button>
<template #default='{ row }'>
<el-button type='text' @click='handleDialog(row,"confirm")'>放款</el-button>
<el-button type='text' @click='handleDialog(row,"cancel")'>取消</el-button>
</template>
</el-table-column>
</el-table>
<el-pagination
:current-page="queryForm.pageNo"
:layout="layout"
:page-size="queryForm.pageSize"
: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'
/>
<!--放款确认,放款取消-->
<el-dialog
:title='DialogTitle'
:visible.sync='DialogVisible'
width='30%'
center>
<el-form ref='dialogForm' :model='dialogForm' label-suffix=':'>
<el-form-item label='客户名称'>
<div>{{ dialogForm.clientName }}</div>
</el-form-item>
<el-form-item label='借款金额'>
<div>{{ dialogForm.loanAmount }}</div>
</el-form-item>
<el-form-item label='确认备注'>
<el-input type='textarea' :rows='2' v-model='dialogForm.memo' placeholder='请输入' />
</el-form-item>
</el-form>
<div slot='footer' class='dialog-footer'>
<el-button type='primary' @click='DialogVisible = false'>确 定</el-button>
<el-button @click='DialogVisible = false'>取 消</el-button>
</div>
</el-dialog>
</div>
</template>
<script>
import _ from "lodash";
import { doDelete, getList } from "@/api/table";
import API from "@/server/api";
export default {
name: "Fence",
data() {
return {
checkList: ["订单编号", "进件时间","姓名", "产品名称", "申请状态", "是否推送"],
columns: [
{
order: 1,
label: "订单编号",
prop: "orderNo"
},
{
order: 2,
label: "进件时间",
prop: "gmtCreatedStr"
},
{
order: 3,
label: "姓名",
prop: "userName"
},
{
order: 4,
label: "产品名称",
prop: "appName"
},
{
order: 5,
label: "申请状态",
prop: "applyStatusStr"
import _ from 'lodash'
import API from '@/server/api'
export default {
name: 'LoanAudit',
data() {
return {
DialogTitle: '',
DialogVisible: false,
dialogForm: {
loanAmount: '',
clientName: '',
currentAction: '',
loanNo: '',
memo: '',
stepsNo: '',
userId: ''
},
{
order: 6,
label: "是否推送",
prop: "applyStatusStr"
checkList: ['借款编号', '项目名称', '客户姓名', '手机号码', '借款金额', '借款期数', 'BD姓名', '商户区域', '创建时间', '借款状态', '资金渠道'],
columns: [
{
order: 1,
label: '借款编号',
prop: 'loanNo'
},
{
order: 2,
label: '项目名称',
prop: 'loanName'
},
{
order: 3,
label: '客户姓名',
prop: 'realName'
},
{
order: 4,
label: '手机号码',
prop: 'mobile'
},
{
order: 5,
label: '借款金额',
prop: 'loanAmount'
},
{
order: 6,
label: '借款期数',
prop: 'loanNum'
},
{
order: 7,
label: 'BD姓名',
prop: 'bdName'
},
{
order: 8,
label: '商户区域',
prop: 'regionName'
},
{
order: 9,
label: '创建时间',
prop: 'gmtCreated'
},
{
order: 10,
label: '借款状态',
prop: 'loanStatus'
},
{
order: 11,
label: '资金渠道',
prop: 'loanSign'
}
],
list: [],
listLoading: true,
pickerConfig: this.datePickerOptions,
total: 1,
queryForm: {
current: 1,
size: 10,
mobile: '',
loanNo: '',
loanName: '',
clientName: '',
time: '',
startTime: '',
endTime: '',
userId: ''
}
],
list: [],
listLoading: true,
layout: "total, sizes, prev, pager, next, jumper",
total: 0,
queryForm: {
current: 1,
size: 10,
orderNo: ""
}
};
},
computed: {
finallyColumns() {
let finallyArray = [];
this.checkList.forEach((checkItem) => {
finallyArray.push(
this.columns.filter((item) => item.label === checkItem)[0]
);
});
//return _.sortBy(finallyArray, (item) => item.order);
return finallyArray;
}
},
created() {
//防止三级以上路由时多次走created
if (this.$route.name === this.$options.name) this.fetchData();
},
mounted() {
this.fetchData();
},
methods: {
onSubmit() {
this.fetchData();
},
handleView(row) {
const {appNo} = row;
this.$router.push({
path: '/prod/edit',
query: { appNo }
})
},
handleSizeChange(val) {
this.queryForm.size = val;
this.fetchData();
},
handleCurrentChange(val) {
this.queryForm.current = val;
this.fetchData();
computed: {
finallyColumns() {
let finallyArray = []
this.checkList.forEach((checkItem) => {
finallyArray.push(
this.columns.filter((item) => item.label === checkItem)[0]
)
})
return _.sortBy(finallyArray, (item) => item.order)
//return finallyArray
}
},
handleQuery() {
this.queryForm.current = 1;
this.fetchData();
mounted() {
this.fetchData()
},
async fetchData() {
this.listLoading = true;
const result = await API.apply_list(this.queryForm);
const { records, total } = result.result;
this.list = records;
this.total = total;
this.listLoading = false;
methods: {
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()
},
handleDialog(row) {
const { realName, loanAmount } = row;
console.log(row,'当前行信息');
this.DialogVisible = true;
},
handleCurrentChange(val) {
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.loanConfirmList({ ...params })
const { records, total } = result.result
this.list = records
this.total = total
this.listLoading = false
}
}
}
};
</script>
<style lang="scss" scoped>
.page-fence {
::v-deep {
i {
cursor: pointer;
<style lang='scss' scoped>
.page-fence {
::v-deep {
i {
cursor: pointer;
}
}
}
box-sizing: border-box;
padding: 20px;
}
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;
<style lang='scss'>
.custom-table-checkbox {
.el-checkbox {
display: block !important;
margin: 0 0 $base-padding/4 0;
}
}
}
.action-bar {
margin-bottom: 15px;
}
.action-bar {
margin-bottom: 15px;
}
</style>
<template>
<div class="page-fence">
<!--搜索-->
<div class="search">
<el-form
label-suffix=":"
:inline="true"
:model="queryForm"
class="form-inline"
>
<el-form-item label="订单编号">
<el-input
v-model="queryForm.orderNo"
clearable
placeholder="请输入机构编号"
/>
</el-form-item>
<el-form-item label="用户姓名">
<el-input
v-model="queryForm.tenantNo"
clearable
placeholder="请输入机构名称"
/>
</el-form-item>
<el-form-item>
<el-button
type="primary"
@click="onSubmit"
>
查询
</el-button>
</el-form-item>
</el-form>
</div>
<!--表格-->
<el-table
ref="tableSort"
v-loading="listLoading"
border
: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"
>
<template #default="{ row }">
<div v-if="item.label==='LOGO'">
<el-image
style="width: 50px; height: 35px"
:src="row[item.prop]"
fit="fit"
/>
</div>
<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
fixed="right"
align="center"
label="操作"
>
<template #default="{ row }">
<el-button
type="text"
@click="handleView(row)"
>
推送
</el-button>
</template>
</el-table-column>
</el-table>
<el-pagination
:current-page="queryForm.pageNo"
:layout="layout"
:page-size="queryForm.pageSize"
: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";
export default {
name: "Fence",
data() {
return {
checkList: ["订单编号", "进件时间","姓名", "产品名称", "申请状态", "是否推送"],
columns: [
{
order: 1,
label: "订单编号",
prop: "orderNo"
},
{
order: 2,
label: "进件时间",
prop: "gmtCreatedStr"
},
{
order: 3,
label: "姓名",
prop: "userName"
},
{
order: 4,
label: "产品名称",
prop: "appName"
},
{
order: 5,
label: "申请状态",
prop: "applyStatusStr"
},
{
order: 6,
label: "是否推送",
prop: "applyStatusStr"
}
],
list: [],
listLoading: true,
layout: "total, sizes, prev, pager, next, jumper",
total: 0,
queryForm: {
current: 1,
size: 10,
orderNo: ""
}
};
},
computed: {
finallyColumns() {
let finallyArray = [];
this.checkList.forEach((checkItem) => {
finallyArray.push(
this.columns.filter((item) => item.label === checkItem)[0]
);
});
//return _.sortBy(finallyArray, (item) => item.order);
return finallyArray;
}
},
created() {
//防止三级以上路由时多次走created
if (this.$route.name === this.$options.name) this.fetchData();
},
mounted() {
this.fetchData();
},
methods: {
onSubmit() {
this.fetchData();
},
handleView(row) {
const {appNo} = row;
this.$router.push({
path: '/prod/edit',
query: { appNo }
})
},
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.apply_list(this.queryForm);
const { records, total } = result.result;
this.list = records;
this.total = total;
this.listLoading = false;
}
}
};
</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>
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