Before Width: | Height: | Size: 2.0 KiB After Width: | Height: | Size: 2.0 KiB |
After Width: | Height: | Size: 24 KiB |
After Width: | Height: | Size: 455 B |
After Width: | Height: | Size: 24 KiB |
After Width: | Height: | Size: 24 KiB |
After Width: | Height: | Size: 2.7 KiB |
After Width: | Height: | Size: 14 KiB |
After Width: | Height: | Size: 401 B |
After Width: | Height: | Size: 549 B |
After Width: | Height: | Size: 530 B |
After Width: | Height: | Size: 306 B |
After Width: | Height: | Size: 425 B |
After Width: | Height: | Size: 1.3 KiB |
After Width: | Height: | Size: 1.3 KiB |
After Width: | Height: | Size: 1.2 KiB |
After Width: | Height: | Size: 1.2 KiB |
After Width: | Height: | Size: 1.2 KiB |
After Width: | Height: | Size: 1.3 KiB |
Before Width: | Height: | Size: 243 B After Width: | Height: | Size: 243 B |
Before Width: | Height: | Size: 687 B After Width: | Height: | Size: 687 B |
Before Width: | Height: | Size: 671 B After Width: | Height: | Size: 671 B |
Before Width: | Height: | Size: 321 B |
Before Width: | Height: | Size: 2.0 KiB |
Before Width: | Height: | Size: 6.7 KiB |
@ -0,0 +1,19 @@ |
|||||||
|
<template> |
||||||
|
<div class="flex items-center p-3 mb-5 bg-white rounded-[10px]"> |
||||||
|
<div class="inline-flex items-center cursor-pointer"> |
||||||
|
<img src="@/assets/images/back.png" |
||||||
|
alt="" |
||||||
|
class="" /> |
||||||
|
<span class="ml-[6px] text-sm text-[#3C65FF]">返回</span> |
||||||
|
</div> |
||||||
|
<span class="mx-5 text-sm text-[#999]">|</span> |
||||||
|
<span class="text-sm text-[#333]">{{ name }}</span> |
||||||
|
</div> |
||||||
|
</template> |
||||||
|
<script setup lang="ts"> |
||||||
|
import { defineProps, PropType, ref } from 'vue'; |
||||||
|
|
||||||
|
defineProps({ |
||||||
|
name: { type: String, required: true }, |
||||||
|
}); |
||||||
|
</script> |
@ -0,0 +1,44 @@ |
|||||||
|
<template> |
||||||
|
<div class="search"> |
||||||
|
<input type="text" |
||||||
|
placeholder="搜索" |
||||||
|
maxlength="20" /> |
||||||
|
<img src="@/assets/images/search.png" |
||||||
|
alt="" |
||||||
|
class="icon" /> |
||||||
|
</div> |
||||||
|
</template> |
||||||
|
|
||||||
|
<script setup lang="ts"> |
||||||
|
defineProps({ |
||||||
|
modelValue: { type: String, required: true }, |
||||||
|
}); |
||||||
|
</script> |
||||||
|
|
||||||
|
<style lang="scss" scoped> |
||||||
|
.search { |
||||||
|
display: flex; |
||||||
|
align-items: center; |
||||||
|
width: 300px; |
||||||
|
padding: 0 24px; |
||||||
|
background-color: #fff; |
||||||
|
border: 1px solid #dfe9f8; |
||||||
|
border-radius: 18px; |
||||||
|
input { |
||||||
|
width: 230px; |
||||||
|
height: 36px; |
||||||
|
margin-right: 10px; |
||||||
|
font-size: 14px; |
||||||
|
line-height: 36px; |
||||||
|
color: #333; |
||||||
|
border: 0; |
||||||
|
background-color: transparent; |
||||||
|
&:focus { |
||||||
|
outline: none; |
||||||
|
} |
||||||
|
} |
||||||
|
.icon { |
||||||
|
cursor: pointer; |
||||||
|
} |
||||||
|
} |
||||||
|
</style> |
@ -0,0 +1,105 @@ |
|||||||
|
.forms { |
||||||
|
&.step-form { |
||||||
|
.step-name { |
||||||
|
padding-top: 5px; |
||||||
|
} |
||||||
|
} |
||||||
|
.step { |
||||||
|
position: relative; |
||||||
|
padding-left: 42px; |
||||||
|
&:before { |
||||||
|
content: ''; |
||||||
|
position: absolute; |
||||||
|
top: 0; |
||||||
|
left: 0; |
||||||
|
width: 30px; |
||||||
|
height: 30px; |
||||||
|
background: url(../assets/images/config1.png) no-repeat; |
||||||
|
} |
||||||
|
&:nth-child(2):before { |
||||||
|
background-image: url(../assets/images/config2.png); |
||||||
|
} |
||||||
|
&:nth-child(3):before { |
||||||
|
background-image: url(../assets/images/config3.png); |
||||||
|
} |
||||||
|
&:nth-child(4):before { |
||||||
|
background-image: url(../assets/images/config4.png); |
||||||
|
} |
||||||
|
&:nth-child(5):before { |
||||||
|
background-image: url(../assets/images/config5.png); |
||||||
|
} |
||||||
|
&:nth-child(6):before { |
||||||
|
background-image: url(../assets/images/config6.png); |
||||||
|
} |
||||||
|
&:after { |
||||||
|
content: ''; |
||||||
|
position: absolute; |
||||||
|
top: 40px; |
||||||
|
left: 14px; |
||||||
|
width: 2px; |
||||||
|
height: 87%; |
||||||
|
background: #006bff; |
||||||
|
} |
||||||
|
} |
||||||
|
.step-name { |
||||||
|
font-size: 14px; |
||||||
|
font-weight: 600; |
||||||
|
color: #006bff; |
||||||
|
} |
||||||
|
.line { |
||||||
|
display: flex; |
||||||
|
margin-bottom: 30px; |
||||||
|
.label { |
||||||
|
margin-right: 5px; |
||||||
|
font-size: 14px; |
||||||
|
font-weight: 600; |
||||||
|
line-height: 32px; |
||||||
|
} |
||||||
|
.field-name { |
||||||
|
font-size: 14px; |
||||||
|
font-weight: 600; |
||||||
|
line-height: 32px; |
||||||
|
color: #333; |
||||||
|
} |
||||||
|
.tips { |
||||||
|
font-size: 14px; |
||||||
|
color: #686868; |
||||||
|
} |
||||||
|
.fields { |
||||||
|
flex: 1; |
||||||
|
} |
||||||
|
.num-inputs { |
||||||
|
display: flex; |
||||||
|
align-items: center; |
||||||
|
.el-input { |
||||||
|
width: 200px; |
||||||
|
} |
||||||
|
.split { |
||||||
|
margin: 0 10px; |
||||||
|
color: #ccc; |
||||||
|
} |
||||||
|
.unit { |
||||||
|
margin-left: 10px; |
||||||
|
font-size: 14px; |
||||||
|
color: #333; |
||||||
|
} |
||||||
|
} |
||||||
|
} |
||||||
|
.text { |
||||||
|
font-size: 14px; |
||||||
|
color: #333; |
||||||
|
line-height: 32px; |
||||||
|
} |
||||||
|
.submit { |
||||||
|
padding: 15px 22px; |
||||||
|
font-size: 14px; |
||||||
|
line-height: 1; |
||||||
|
color: #fff; |
||||||
|
background: #006bff; |
||||||
|
border-radius: 12px; |
||||||
|
cursor: pointer; |
||||||
|
&:hover { |
||||||
|
opacity: 0.9; |
||||||
|
} |
||||||
|
} |
||||||
|
} |
@ -0,0 +1,230 @@ |
|||||||
|
<template> |
||||||
|
<div> |
||||||
|
<back name="我的账户"></back> |
||||||
|
<div class="flex"> |
||||||
|
<div class="w-[23%]"> |
||||||
|
<div class="block mb-5"> |
||||||
|
<h6 class="title mb-5">关键指标</h6> |
||||||
|
<ul class="index"> |
||||||
|
<li> |
||||||
|
<h6 class="title mb-[10px]">收入总额</h6> |
||||||
|
<p class="text-lg text-[#F08B14]">696,652,660,000.00</p> |
||||||
|
<img src="@/assets/images/account/1.png" |
||||||
|
alt="" |
||||||
|
class="bg" /> |
||||||
|
</li> |
||||||
|
<li> |
||||||
|
<h6 class="title mb-[10px]">支出总额</h6> |
||||||
|
<p class="text-lg text-[#4488F4]">696,652,660,000.00</p> |
||||||
|
<img src="@/assets/images/account/2.png" |
||||||
|
alt="" |
||||||
|
class="bg" /> |
||||||
|
</li> |
||||||
|
<li> |
||||||
|
<h6 class="title mb-[10px]">累计收益</h6> |
||||||
|
<p class="text-lg text-[#FE4953]">696,652,660,000.00</p> |
||||||
|
<img src="@/assets/images/account/3.png" |
||||||
|
alt="" |
||||||
|
class="bg" /> |
||||||
|
</li> |
||||||
|
</ul> |
||||||
|
</div> |
||||||
|
<div class="block"> |
||||||
|
<h6 class="title mb-4">今日收入</h6> |
||||||
|
<p class="text-lg text-[#FE4953]">696,652,660,000.00</p> |
||||||
|
</div> |
||||||
|
</div> |
||||||
|
<div class="w-[calc(54%-40px)] mx-5"> |
||||||
|
<div class="block p-[30px] mb-5"> |
||||||
|
<div class="stat flex justify-between items-center"> |
||||||
|
<div> |
||||||
|
<div class="flex items-center mb-[75px]"> |
||||||
|
<div class="icon mr-2"> |
||||||
|
<img src="@/assets/images/account/6.png" |
||||||
|
alt="" /> |
||||||
|
</div> |
||||||
|
<div class=""> |
||||||
|
<h6 class="mb-2 text-base text-[#333]">银行账户</h6> |
||||||
|
<p class="text-[#24AD61] font-semibold">3656631.00</p> |
||||||
|
</div> |
||||||
|
</div> |
||||||
|
<div class="flex items-center mb-[75px]"> |
||||||
|
<div class="icon mr-2"> |
||||||
|
<img src="@/assets/images/account/7.png" |
||||||
|
alt="" /> |
||||||
|
</div> |
||||||
|
|
||||||
|
<div class=""> |
||||||
|
<h6 class="mb-2 text-base text-[#333]">保险账户</h6> |
||||||
|
<p class="text-[#24AD61] font-semibold">3656631.00</p> |
||||||
|
</div> |
||||||
|
</div> |
||||||
|
<div class="flex items-center"> |
||||||
|
<div class="icon mr-2"> |
||||||
|
<img src="@/assets/images/account/8.png" |
||||||
|
alt="" /> |
||||||
|
</div> |
||||||
|
<div class=""> |
||||||
|
<h6 class="mb-2 text-base text-[#333]">基金账户</h6> |
||||||
|
<p class="text-[#24AD61] font-semibold">3656631.00</p> |
||||||
|
</div> |
||||||
|
</div> |
||||||
|
</div> |
||||||
|
<div class=""> |
||||||
|
<h6 class="mb-4 title">我的资产(元)</h6> |
||||||
|
<p class="text-xl text-[#4488F4] font-semibold">3656631.00</p> |
||||||
|
</div> |
||||||
|
<div> |
||||||
|
<div class="flex items-center mb-[133px]"> |
||||||
|
<div class=""> |
||||||
|
<h6 class="mb-2 text-base text-[#333]">可用账户</h6> |
||||||
|
<p class="text-[#448ACA] font-semibold">3656631.00</p> |
||||||
|
</div> |
||||||
|
<div class="icon blue ml-2"> |
||||||
|
<img src="@/assets/images/account/9.png" |
||||||
|
alt="" /> |
||||||
|
</div> |
||||||
|
</div> |
||||||
|
<div class="flex items-center"> |
||||||
|
<div class=""> |
||||||
|
<h6 class="mb-2 text-base text-[#333]">冻结账户</h6> |
||||||
|
<p class="text-[#448ACA] font-semibold">3656631.00</p> |
||||||
|
</div> |
||||||
|
<div class="icon blue ml-2"> |
||||||
|
<img src="@/assets/images/account/10.png" |
||||||
|
alt="" /> |
||||||
|
</div> |
||||||
|
</div> |
||||||
|
</div> |
||||||
|
</div> |
||||||
|
</div> |
||||||
|
<div class="flex"> |
||||||
|
<div class="block flex-1 mr-5"> |
||||||
|
<h6 class="title mb-4">今日成本</h6> |
||||||
|
<p class="text-lg text-[#4488F4]">696,652,660,000.00</p> |
||||||
|
</div> |
||||||
|
<div class="block flex-1"> |
||||||
|
<h6 class="title mb-4">今日收益</h6> |
||||||
|
<p class="text-lg text-[#8E83FB]">696,652,660,000.00</p> |
||||||
|
</div> |
||||||
|
</div> |
||||||
|
</div> |
||||||
|
<div class="w-[23%]"> |
||||||
|
<div class="block mb-5"> |
||||||
|
<div class="flex justify-between mb-4"> |
||||||
|
<h6 class="title">交易记录</h6> |
||||||
|
<p class="text-sm text-[#333]">2023-08-07</p> |
||||||
|
</div> |
||||||
|
<ul class="list"> |
||||||
|
<li> |
||||||
|
<div class="inline-flex items-center"> |
||||||
|
<p class="type">贷出</p> |
||||||
|
<p class="des">测试测试测试</p> |
||||||
|
</div> |
||||||
|
<p class="num">+6,964,665.20</p> |
||||||
|
</li> |
||||||
|
<li> |
||||||
|
<div class="inline-flex items-center"> |
||||||
|
<p class="type">贷出</p> |
||||||
|
<p class="des">测试测试测试</p> |
||||||
|
</div> |
||||||
|
<p class="num">+6,964,665.20</p> |
||||||
|
</li> |
||||||
|
</ul> |
||||||
|
</div> |
||||||
|
<div class="block mb-5"> |
||||||
|
<h6 class="title mb-4">其他指标</h6> |
||||||
|
<ul class="list"> |
||||||
|
<li> |
||||||
|
<p class="type">贷出</p> |
||||||
|
<p class="des">测试测试测试</p> |
||||||
|
</li> |
||||||
|
</ul> |
||||||
|
</div> |
||||||
|
</div> |
||||||
|
</div> |
||||||
|
</div> |
||||||
|
</template> |
||||||
|
|
||||||
|
<script setup lang="ts"> |
||||||
|
import { ref, onMounted } from 'vue'; |
||||||
|
import { ElMessage } from 'element-plus'; |
||||||
|
import { Plus } from '@element-plus/icons-vue'; |
||||||
|
import { primaryTypeOfGuarantee, bankingProductsList } from '@/api/bank'; |
||||||
|
import Search from '@/components/Search.vue'; |
||||||
|
import Back from '@/components/Back.vue'; |
||||||
|
import { pageSizes, pageLayout, toParams, resetParams } from '@/utils/common'; |
||||||
|
|
||||||
|
const form = ref<Object>({}); |
||||||
|
const productVisible = ref<boolean>(false); |
||||||
|
const keyword = ref<string>(''); |
||||||
|
const currentPage = ref<number>(1); |
||||||
|
const pageSize = ref<number>(10); |
||||||
|
const total = ref<number>(0); |
||||||
|
const table = ref<any>(); |
||||||
|
const list = ref<Array<any>>([]); |
||||||
|
const selection = ref<Array<any>>([]); |
||||||
|
const loading = ref<boolean>(false); |
||||||
|
|
||||||
|
// 选择产品 |
||||||
|
const showProduct = async () => { |
||||||
|
productVisible.value = true; |
||||||
|
}; |
||||||
|
// 担保方式 |
||||||
|
const getGuarantee = async () => { |
||||||
|
try { |
||||||
|
const { data } = await primaryTypeOfGuarantee(); |
||||||
|
guarantees.value = data; |
||||||
|
} finally { |
||||||
|
} |
||||||
|
}; |
||||||
|
onMounted(() => { |
||||||
|
// getGuarantee(); |
||||||
|
// fetchData(); |
||||||
|
}); |
||||||
|
</script> |
||||||
|
|
||||||
|
<style lang="scss" scoped> |
||||||
|
.title { |
||||||
|
@apply text-lg text-[#333] font-semibold leading-[1]; |
||||||
|
} |
||||||
|
.index { |
||||||
|
li { |
||||||
|
@apply relative p-5 mb-5; |
||||||
|
} |
||||||
|
.bg { |
||||||
|
@apply absolute top-0 left-0 opacity-20; |
||||||
|
} |
||||||
|
} |
||||||
|
.stat { |
||||||
|
padding: 25px 18px; |
||||||
|
background: url(../../assets/images/account/5.png) 0 0 / 100% 100% no-repeat; |
||||||
|
.icon { |
||||||
|
@apply inline-flex justify-center items-center; |
||||||
|
width: 50px; |
||||||
|
height: 50px; |
||||||
|
background: #2cb368; |
||||||
|
border: 1px solid #009944; |
||||||
|
border-radius: 50%; |
||||||
|
&.blue { |
||||||
|
background: #448aca; |
||||||
|
border-color: #448aca; |
||||||
|
} |
||||||
|
} |
||||||
|
} |
||||||
|
.list { |
||||||
|
li { |
||||||
|
@apply flex justify-between py-2; |
||||||
|
border-bottom: 1px solid #e7f0fc; |
||||||
|
.type { |
||||||
|
@apply p-[6px] mr-[14px] text-sm text-[#556FB5] bg-[rgba(85,111,181,.2)] rounded; |
||||||
|
} |
||||||
|
.des { |
||||||
|
@apply text-sm text-[#333]; |
||||||
|
} |
||||||
|
.num { |
||||||
|
@apply text-sm text-[#F02525]; |
||||||
|
} |
||||||
|
} |
||||||
|
} |
||||||
|
</style> |
@ -0,0 +1,230 @@ |
|||||||
|
<template> |
||||||
|
<div> |
||||||
|
<back name="产品详情"></back> |
||||||
|
<div class="block"> |
||||||
|
<div class="forms w-[700px] mx-auto"> |
||||||
|
<div class="line"> |
||||||
|
<label class="label">产品类型:</label> |
||||||
|
<div class="fields"> |
||||||
|
<el-input value="银行产品" |
||||||
|
disabled></el-input> |
||||||
|
</div> |
||||||
|
</div> |
||||||
|
<div class="line"> |
||||||
|
<label class="label">选择产品:</label> |
||||||
|
<div class="fields flex items-center"> |
||||||
|
<el-input class="mr-5" |
||||||
|
placeholder="点击选择需要发布的产品"></el-input> |
||||||
|
<div class="btn" |
||||||
|
@click="showProduct">新增</div> |
||||||
|
</div> |
||||||
|
</div> |
||||||
|
<div class="line"> |
||||||
|
<label class="label">产品图标:</label> |
||||||
|
<div class="fields"> |
||||||
|
<p class="tips">上传产品LOGO图片。</p> |
||||||
|
<div class="avatar-uploader" |
||||||
|
action="https://run.mocky.io/v3/9d059bf9-4660-45f2-925d-ce80ad6c4d15" |
||||||
|
:show-file-list="false"> |
||||||
|
<img v-if="imageUrl" |
||||||
|
:src="imageUrl" |
||||||
|
class="avatar" /> |
||||||
|
<div v-else |
||||||
|
class="upload"> |
||||||
|
<el-icon :size="20"> |
||||||
|
<Plus :size="20" |
||||||
|
color="#DFE9F8" /> |
||||||
|
</el-icon> |
||||||
|
</div> |
||||||
|
</div> |
||||||
|
</div> |
||||||
|
</div> |
||||||
|
<div class="line"> |
||||||
|
<label class="label">贷款规模:</label> |
||||||
|
<div class="fields flex items-center"> |
||||||
|
<el-input class="w-48 mr-5"></el-input> |
||||||
|
<p class="text-sm text-[#333] ml-4">万元 (不得高于现银行账户余额{银行账户余额}元。)</p> |
||||||
|
</div> |
||||||
|
</div> |
||||||
|
<div class="line"> |
||||||
|
<label class="label">百度渠道:</label> |
||||||
|
<div class="fields"> |
||||||
|
<p class="tips">选择需要购买的投放渠道。</p> |
||||||
|
<div class="route"> |
||||||
|
<p class="text">{百度广告类型}:单次广告价格为{}元,适用于{}次扫单。</p> |
||||||
|
<el-input-number v-model="num" |
||||||
|
:min="1" |
||||||
|
:max="10" /> |
||||||
|
</div> |
||||||
|
<div class="route"> |
||||||
|
<p class="text">{百度广告类型}:单次广告价格为{}元,适用于{}次扫单。</p> |
||||||
|
<el-input-number v-model="num" |
||||||
|
:min="1" |
||||||
|
:max="10" /> |
||||||
|
</div> |
||||||
|
</div> |
||||||
|
</div> |
||||||
|
<div class="line"> |
||||||
|
<label class="label">产品上架:</label> |
||||||
|
<div class="fields"> |
||||||
|
<el-switch v-model="form.cl" /> |
||||||
|
</div> |
||||||
|
</div> |
||||||
|
|
||||||
|
<div class="flex justify-center"> |
||||||
|
<div class="btn">确定并发布</div> |
||||||
|
</div> |
||||||
|
</div> |
||||||
|
</div> |
||||||
|
|
||||||
|
<el-dialog v-model="productVisible" |
||||||
|
title="选择需要发布的银行产品" |
||||||
|
width="1000px" |
||||||
|
center> |
||||||
|
<div class="flex justify-between mb-4"> |
||||||
|
<search v-model="keyword"></search> |
||||||
|
<el-checkbox label="仅查看未发布的产品" /> |
||||||
|
</div> |
||||||
|
<el-table ref="table" |
||||||
|
v-loading="loading" |
||||||
|
:data="list"> |
||||||
|
<el-table-column prop="productNumber" |
||||||
|
label="产品名称"></el-table-column> |
||||||
|
<el-table-column prop="productNumber" |
||||||
|
label="产品编号"></el-table-column> |
||||||
|
<el-table-column prop="productNumber" |
||||||
|
label="产品对象"></el-table-column> |
||||||
|
<el-table-column prop="parentIds" |
||||||
|
label="担保方式"></el-table-column> |
||||||
|
<el-table-column prop="parentIds" |
||||||
|
label="贷款用途"></el-table-column> |
||||||
|
<el-table-column prop="loanCeiling" |
||||||
|
label="最高额度/年利率/期限"></el-table-column> |
||||||
|
<el-table-column prop="createTime" |
||||||
|
label="创建日期"></el-table-column> |
||||||
|
<el-table-column prop="status" |
||||||
|
label="状态"></el-table-column> |
||||||
|
</el-table> |
||||||
|
<el-pagination v-model:currentPage="currentPage" |
||||||
|
v-model:pageSize="pageSize" |
||||||
|
:total="total" |
||||||
|
:page-sizes="pageSizes" |
||||||
|
:layout="pageLayout" |
||||||
|
@size-change="fetchData()" |
||||||
|
@current-change="fetchData()" |
||||||
|
small |
||||||
|
background |
||||||
|
class="px-3 py-2 justify-end"></el-pagination> |
||||||
|
<template #footer> |
||||||
|
<span class="flex justify-center"> |
||||||
|
<div class="btn mr-3 cancel" |
||||||
|
@click="productVisible = false">取消</div> |
||||||
|
<div class="btn" |
||||||
|
@click="productVisible = false">确定</div> |
||||||
|
</span> |
||||||
|
</template> |
||||||
|
</el-dialog> |
||||||
|
</div> |
||||||
|
</template> |
||||||
|
|
||||||
|
<script setup lang="ts"> |
||||||
|
import { ref, onMounted } from 'vue'; |
||||||
|
import { ElMessage } from 'element-plus'; |
||||||
|
import { Plus } from '@element-plus/icons-vue'; |
||||||
|
import { primaryTypeOfGuarantee, bankingProductsList } from '@/api/bank'; |
||||||
|
import Search from '@/components/Search.vue'; |
||||||
|
import Back from '@/components/Back.vue'; |
||||||
|
import { pageSizes, pageLayout, toParams, resetParams } from '@/utils/common'; |
||||||
|
|
||||||
|
const form = ref<Object>({}); |
||||||
|
const productVisible = ref<boolean>(false); |
||||||
|
const keyword = ref<string>(''); |
||||||
|
const currentPage = ref<number>(1); |
||||||
|
const pageSize = ref<number>(10); |
||||||
|
const total = ref<number>(0); |
||||||
|
const table = ref<any>(); |
||||||
|
const list = ref<Array<any>>([]); |
||||||
|
const selection = ref<Array<any>>([]); |
||||||
|
const loading = ref<boolean>(false); |
||||||
|
|
||||||
|
// 选择产品 |
||||||
|
const showProduct = async () => { |
||||||
|
productVisible.value = true; |
||||||
|
}; |
||||||
|
// 担保方式 |
||||||
|
const getGuarantee = async () => { |
||||||
|
try { |
||||||
|
const { data } = await primaryTypeOfGuarantee(); |
||||||
|
guarantees.value = data; |
||||||
|
} finally { |
||||||
|
} |
||||||
|
}; |
||||||
|
onMounted(() => { |
||||||
|
// getGuarantee(); |
||||||
|
// fetchData(); |
||||||
|
}); |
||||||
|
</script> |
||||||
|
|
||||||
|
<style lang="scss" scoped> |
||||||
|
.forms { |
||||||
|
.line { |
||||||
|
display: flex; |
||||||
|
margin-bottom: 12px; |
||||||
|
} |
||||||
|
.fields { |
||||||
|
flex: 1; |
||||||
|
} |
||||||
|
.label { |
||||||
|
margin-right: 5px; |
||||||
|
font-size: 14px; |
||||||
|
line-height: 32px; |
||||||
|
color: #333; |
||||||
|
} |
||||||
|
.el-input { |
||||||
|
width: 500px; |
||||||
|
} |
||||||
|
.tips { |
||||||
|
margin-bottom: 12px; |
||||||
|
font-size: 14px; |
||||||
|
line-height: 32px; |
||||||
|
color: #333; |
||||||
|
} |
||||||
|
.upload { |
||||||
|
display: flex; |
||||||
|
justify-content: center; |
||||||
|
align-items: center; |
||||||
|
width: 70px; |
||||||
|
height: 70px; |
||||||
|
border: 1px solid #dfe9f8; |
||||||
|
border-radius: 8px; |
||||||
|
cursor: pointer; |
||||||
|
} |
||||||
|
.route { |
||||||
|
display: flex; |
||||||
|
justify-content: space-between; |
||||||
|
align-items: center; |
||||||
|
margin-bottom: 6px; |
||||||
|
.text { |
||||||
|
font-size: 14px; |
||||||
|
color: #333; |
||||||
|
} |
||||||
|
.el-input-number { |
||||||
|
width: 100px; |
||||||
|
} |
||||||
|
} |
||||||
|
} |
||||||
|
.btn { |
||||||
|
padding: 11px 26px; |
||||||
|
font-size: 14px; |
||||||
|
line-height: 1; |
||||||
|
color: #fff; |
||||||
|
background: linear-gradient(-36deg, #006bff, #2ab1ff); |
||||||
|
border-radius: 18px; |
||||||
|
cursor: pointer; |
||||||
|
&.cancel { |
||||||
|
font-size: 600; |
||||||
|
color: #333; |
||||||
|
background: #f4f8fc; |
||||||
|
} |
||||||
|
} |
||||||
|
</style> |
@ -0,0 +1,160 @@ |
|||||||
|
<template> |
||||||
|
<div> |
||||||
|
<el-tabs v-model="curTab" |
||||||
|
@tab-click="tabChange"> |
||||||
|
<el-tab-pane label="新增产品" |
||||||
|
name="tab1"> |
||||||
|
<div class="forms"> |
||||||
|
<div class="line"> |
||||||
|
<label class="label">产品定义:</label> |
||||||
|
<div class="fields"> |
||||||
|
<el-input type="textarea" |
||||||
|
placeholder="用一段话简单介绍一下这个产品或者描述产品的设计理念。例如:本产品根据个人客户的信用状况,为其提供的一种短期融资便利产品,借款人可在额度金额内可循环周转使用贷款。" |
||||||
|
maxlength="200"></el-input> |
||||||
|
</div> |
||||||
|
</div> |
||||||
|
<div class="line"> |
||||||
|
<label class="label">产品名称:</label> |
||||||
|
<div class="fields"> |
||||||
|
<el-input placeholder="取个有吸引力的产品名,限20字。" |
||||||
|
maxlength="20"></el-input> |
||||||
|
</div> |
||||||
|
</div> |
||||||
|
<div class="line"> |
||||||
|
<label class="label">产品币种:</label> |
||||||
|
<div class="fields"> |
||||||
|
<el-select v-model="modelValue.status" |
||||||
|
placeholder="请选择"> |
||||||
|
<el-option label="人民币" |
||||||
|
value="1" /> |
||||||
|
</el-select> |
||||||
|
</div> |
||||||
|
</div> |
||||||
|
<div class="line"> |
||||||
|
<label class="label">贷款对象:</label> |
||||||
|
<div class="fields"> |
||||||
|
<p class="field-name">选择本产品的贷款对象。</p> |
||||||
|
<el-checkbox-group v-model="modelValue.cl"> |
||||||
|
<el-checkbox label="身份证" /> |
||||||
|
<el-checkbox label="身份证" /> |
||||||
|
</el-checkbox-group> |
||||||
|
</div> |
||||||
|
</div> |
||||||
|
<div class="line"> |
||||||
|
<label class="label">贷款用途:</label> |
||||||
|
<div class="fields"> |
||||||
|
<p class="field-name">选择本产品贷款资金的用途。</p> |
||||||
|
<el-radio-group v-model="modelValue.cl"> |
||||||
|
<el-radio :label="3">Option A</el-radio> |
||||||
|
<el-radio :label="9">Option C</el-radio> |
||||||
|
</el-radio-group> |
||||||
|
</div> |
||||||
|
</div> |
||||||
|
<div class="line"> |
||||||
|
<label class="label">担保方式:</label> |
||||||
|
<div class="fields"> |
||||||
|
<p class="field-name">选择本产品的担保种类。</p> |
||||||
|
<el-checkbox-group v-model="modelValue.cl"> |
||||||
|
<el-checkbox label="身份证" /> |
||||||
|
<el-checkbox label="身份证" /> |
||||||
|
</el-checkbox-group> |
||||||
|
</div> |
||||||
|
</div> |
||||||
|
<div class="line"> |
||||||
|
<label class="label">贷款额度:</label> |
||||||
|
<div class="fields"> |
||||||
|
<div class="num-inputs"> |
||||||
|
<el-input placeholder="最小额度" |
||||||
|
min="0"></el-input> |
||||||
|
<span class="split">-</span> |
||||||
|
<el-input placeholder="最高额度" |
||||||
|
min="0"></el-input> |
||||||
|
<span class="unit">万元</span> |
||||||
|
</div> |
||||||
|
</div> |
||||||
|
</div> |
||||||
|
<div class="line"> |
||||||
|
<label class="label">贷款利率:</label> |
||||||
|
<div class="fields"> |
||||||
|
<div class="num-inputs"> |
||||||
|
<el-input placeholder="最小年利率" |
||||||
|
min="0"></el-input> |
||||||
|
<span class="split">-</span> |
||||||
|
<el-input placeholder="最高年利率" |
||||||
|
min="0"></el-input> |
||||||
|
<span class="unit">%</span> |
||||||
|
</div> |
||||||
|
</div> |
||||||
|
</div> |
||||||
|
<div class="line"> |
||||||
|
<label class="label">贷款期限:</label> |
||||||
|
<div class="fields"> |
||||||
|
<div class="num-inputs"> |
||||||
|
<el-input placeholder="最小期限" |
||||||
|
min="0"></el-input> |
||||||
|
<span class="split">-</span> |
||||||
|
<el-input placeholder="最大期限" |
||||||
|
min="0"></el-input> |
||||||
|
<span class="unit">月</span> |
||||||
|
</div> |
||||||
|
</div> |
||||||
|
</div> |
||||||
|
<div class="line"> |
||||||
|
<label class="label">还款方式:</label> |
||||||
|
<div class="fields"> |
||||||
|
<p class="field-name">选择本产品可以选择的还款方式。</p> |
||||||
|
<el-checkbox-group v-model="modelValue.cl"> |
||||||
|
<el-checkbox label="身份证" /> |
||||||
|
<el-checkbox label="身份证" /> |
||||||
|
</el-checkbox-group> |
||||||
|
</div> |
||||||
|
</div> |
||||||
|
<div class="line"> |
||||||
|
<label class="label">提前还款:</label> |
||||||
|
<div class="fields flex items-center"> |
||||||
|
<el-switch v-model="modelValue.cl" /> |
||||||
|
<p class="tips ml-4">本产品是否支持提前还款。</p> |
||||||
|
</div> |
||||||
|
</div> |
||||||
|
|
||||||
|
<div class="flex justify-end"> |
||||||
|
<div class="submit">完成,提交审批</div> |
||||||
|
</div> |
||||||
|
</div> |
||||||
|
</el-tab-pane> |
||||||
|
</el-tabs> |
||||||
|
</div> |
||||||
|
</template> |
||||||
|
|
||||||
|
<script setup lang="ts"> |
||||||
|
import { ref, onMounted } from 'vue'; |
||||||
|
import { ElMessage } from 'element-plus'; |
||||||
|
import type { TabsPaneContext } from 'element-plus'; |
||||||
|
import { primaryTypeOfGuarantee, bankingProductsList } from '@/api/bank'; |
||||||
|
|
||||||
|
defineProps({ modelValue: { type: Object, required: true } }); |
||||||
|
defineEmits({ 'update:form': null }); |
||||||
|
|
||||||
|
const curTab = ref<string>('tab1'); |
||||||
|
|
||||||
|
// tab切换回调 |
||||||
|
const tabChange = (tab: TabsPaneContext, event: Event) => { |
||||||
|
console.log(tab, event); |
||||||
|
}; |
||||||
|
// 担保方式 |
||||||
|
const getGuarantee = async () => { |
||||||
|
try { |
||||||
|
const { data } = await primaryTypeOfGuarantee(); |
||||||
|
guarantees.value = data; |
||||||
|
} finally { |
||||||
|
} |
||||||
|
}; |
||||||
|
onMounted(() => { |
||||||
|
// getGuarantee(); |
||||||
|
// fetchData(); |
||||||
|
}); |
||||||
|
</script> |
||||||
|
|
||||||
|
<style lang="scss" scoped> |
||||||
|
@import url(../../styles/form.scss); |
||||||
|
</style> |
@ -0,0 +1,109 @@ |
|||||||
|
<template> |
||||||
|
<div class="block flex" |
||||||
|
style="padding-top: 0"> |
||||||
|
<div class="left pr-5 py-4"> |
||||||
|
<div class="flex justify-end mb-4"> |
||||||
|
<img src="@/assets/images/fold.png" |
||||||
|
alt="" |
||||||
|
class="cursor-pointer" /> |
||||||
|
</div> |
||||||
|
<ul class="products"> |
||||||
|
<li> |
||||||
|
<img src="@/assets/images/trash.png" |
||||||
|
alt="" |
||||||
|
class="del" /> |
||||||
|
<h6>轻松贷</h6> |
||||||
|
<p class="type">个人信用贷</p> |
||||||
|
<p class="status">配置风控</p> |
||||||
|
<p class="date">创建日期:2021-02-26</p> |
||||||
|
</li> |
||||||
|
<li> |
||||||
|
<h6>轻松贷</h6> |
||||||
|
<p class="type">个人信用贷</p> |
||||||
|
<p class="status">配置风控</p> |
||||||
|
<p class="date">创建日期:2021-02-26</p> |
||||||
|
</li> |
||||||
|
</ul> |
||||||
|
</div> |
||||||
|
<div class="right flex-1 px-5 pt-2"> |
||||||
|
<!-- <component :is="Config" |
||||||
|
v-model="form"></component> --> |
||||||
|
<config v-if="action === 'config'" |
||||||
|
v-model="form"></config> |
||||||
|
<add v-else-if="action === 'add'" |
||||||
|
v-model="form"></add> |
||||||
|
</div> |
||||||
|
</div> |
||||||
|
</template> |
||||||
|
|
||||||
|
<script setup lang="ts"> |
||||||
|
import { computed, onMounted, ref } from 'vue'; |
||||||
|
import { ElMessage } from 'element-plus'; |
||||||
|
import { perm } from '@/store/useCurrentUser'; |
||||||
|
import { primaryTypeOfGuarantee, bankingProductsList } from '@/api/bank'; |
||||||
|
import { useRouter, useRoute } from 'vue-router'; |
||||||
|
import Config from './Config.vue'; |
||||||
|
import Add from './Add.vue'; |
||||||
|
|
||||||
|
const router = useRouter(); |
||||||
|
const route = useRoute(); |
||||||
|
const { action } = route.params; |
||||||
|
const form = ref<any>({ |
||||||
|
cl: '', |
||||||
|
}); |
||||||
|
const loading = ref<boolean>(false); |
||||||
|
// 担保方式 |
||||||
|
const getGuarantee = async () => { |
||||||
|
try { |
||||||
|
const { data } = await primaryTypeOfGuarantee(); |
||||||
|
guarantees.value = data; |
||||||
|
} finally { |
||||||
|
} |
||||||
|
}; |
||||||
|
onMounted(() => { |
||||||
|
console.log(33, useRoute().params.action); |
||||||
|
// getGuarantee(); |
||||||
|
// fetchData(); |
||||||
|
}); |
||||||
|
|
||||||
|
const handleDelete = async (ids: number[]) => { |
||||||
|
await deleteUser(ids); |
||||||
|
fetchData(); |
||||||
|
// ElMessage.success(t('success')); |
||||||
|
}; |
||||||
|
</script> |
||||||
|
|
||||||
|
<style lang="scss" scoped> |
||||||
|
.left { |
||||||
|
border-right: 1px solid #e9eff2; |
||||||
|
} |
||||||
|
.products { |
||||||
|
li { |
||||||
|
position: relative; |
||||||
|
width: 220px; |
||||||
|
padding: 20px; |
||||||
|
margin-bottom: 20px; |
||||||
|
background: url(../../assets/images/10.png) 0 0/100% 100% no-repeat; |
||||||
|
border-radius: 10px; |
||||||
|
cursor: pointer; |
||||||
|
} |
||||||
|
.del { |
||||||
|
position: absolute; |
||||||
|
top: 0; |
||||||
|
right: 0; |
||||||
|
} |
||||||
|
h6 { |
||||||
|
color: #14436b; |
||||||
|
} |
||||||
|
.type, |
||||||
|
.status { |
||||||
|
margin: 15px 0; |
||||||
|
font-size: 14px; |
||||||
|
color: #333; |
||||||
|
} |
||||||
|
.date { |
||||||
|
font-size: 14px; |
||||||
|
color: #8798a9; |
||||||
|
} |
||||||
|
} |
||||||
|
</style> |
@ -0,0 +1,150 @@ |
|||||||
|
<template> |
||||||
|
<div> |
||||||
|
<el-tabs v-model="curTab" |
||||||
|
@tab-click="tabChange"> |
||||||
|
<el-tab-pane label="配置风控" |
||||||
|
name="tab1"> |
||||||
|
<div class="audit"> |
||||||
|
<div class="line"> |
||||||
|
<span class="field">审批意见:</span> |
||||||
|
<span class="status">待审批</span> |
||||||
|
</div> |
||||||
|
<div class="line"> |
||||||
|
<span class="field">意见描述:</span> |
||||||
|
习近平总书记在二十届中央政治局第六次集体学习时强调,党的二十大报告在总结历史经验基础上,提出并阐述了“两 |
||||||
|
个结合”“六个必须坚持”等推进理论创新的科学方法,为继续推进党的理论创新提供了根本遵循。这一重要论述,将“两个结合”与 |
||||||
|
“六个必须坚持”一同列为推进理论创新的科学方法,深刻阐明了“两个结合”作为认识世界、 |
||||||
|
</div> |
||||||
|
<p class="mb-2 text-sm text-[#333] text-right">审查日期:2022-02-02</p> |
||||||
|
<p class="mb-2 text-sm text-[#333] text-right">审查员:公瑾</p> |
||||||
|
</div> |
||||||
|
<div class="forms step-form"> |
||||||
|
<div class="step"> |
||||||
|
<h6 class="step-name mb-7">办理账户</h6> |
||||||
|
<div class="line"> |
||||||
|
<label class="label">提供材料:</label> |
||||||
|
<div class="fields"> |
||||||
|
<el-checkbox-group v-model="modelValue.cl"> |
||||||
|
<el-checkbox label="身份证" /> |
||||||
|
<el-checkbox label="身份证" /> |
||||||
|
</el-checkbox-group> |
||||||
|
</div> |
||||||
|
</div> |
||||||
|
<div class="line"> |
||||||
|
<label class="label">发放账户:</label> |
||||||
|
<div class="fields"> |
||||||
|
<el-checkbox-group v-model="modelValue.cl"> |
||||||
|
<el-checkbox label="身份证" /> |
||||||
|
</el-checkbox-group> |
||||||
|
</div> |
||||||
|
</div> |
||||||
|
</div> |
||||||
|
<div class="step"> |
||||||
|
<h6 class="step-name mb-7">贷款申请</h6> |
||||||
|
<div class="line"> |
||||||
|
<label class="label">申请方式:</label> |
||||||
|
<div class="fields"> |
||||||
|
<el-checkbox-group v-model="modelValue.cl"> |
||||||
|
<el-checkbox label="身份证" /> |
||||||
|
<el-checkbox label="身份证" /> |
||||||
|
</el-checkbox-group> |
||||||
|
</div> |
||||||
|
</div> |
||||||
|
<div class="line"> |
||||||
|
<label class="label">提供材料:</label> |
||||||
|
<div class="fields"> |
||||||
|
<p class="field-name">贷款人材料</p> |
||||||
|
<div> |
||||||
|
<el-checkbox-group v-model="modelValue.cl"> |
||||||
|
<el-checkbox label="身份证" /> |
||||||
|
</el-checkbox-group> |
||||||
|
</div> |
||||||
|
<p class="field-name mt-5">配偶材料</p> |
||||||
|
<div> |
||||||
|
<el-checkbox-group v-model="modelValue.cl"> |
||||||
|
<el-checkbox label="身份证" /> |
||||||
|
</el-checkbox-group> |
||||||
|
</div> |
||||||
|
<p class="field-name mt-5">经营类材料</p> |
||||||
|
<div> |
||||||
|
<el-checkbox-group v-model="modelValue.cl"> |
||||||
|
<el-checkbox label="身份证" /> |
||||||
|
</el-checkbox-group> |
||||||
|
</div> |
||||||
|
<p class="field-name mt-5">补充材料</p> |
||||||
|
<div> |
||||||
|
<el-checkbox-group v-model="modelValue.cl"> |
||||||
|
<el-checkbox label="身份证" /> |
||||||
|
</el-checkbox-group> |
||||||
|
</div> |
||||||
|
</div> |
||||||
|
</div> |
||||||
|
</div> |
||||||
|
<div class="flex justify-end"> |
||||||
|
<div class="submit">完成,提交审批</div> |
||||||
|
</div> |
||||||
|
</div> |
||||||
|
</el-tab-pane> |
||||||
|
<el-tab-pane label="产品要素" |
||||||
|
name="tab2"> |
||||||
|
<div class="forms"> |
||||||
|
<h6 class="step-name mb-4">办理账户</h6> |
||||||
|
<p class="text">根据个人客户的信用状况,为其提供的一种短期融资便利产品,借款人在我行核定的额度金额内可循环周转使用贷款。</p> |
||||||
|
<h6 class="step-name mt-5">产品要素</h6> |
||||||
|
<div class="line"> |
||||||
|
<label class="label">产品名称:</label> |
||||||
|
<p class="text">根据个人客户的信用状况,为其提供的一种短期融资便利产品,借款人在我行核定的额度金额内可循环周转使用贷款。</p> |
||||||
|
</div> |
||||||
|
</div> |
||||||
|
</el-tab-pane> |
||||||
|
</el-tabs> |
||||||
|
</div> |
||||||
|
</template> |
||||||
|
|
||||||
|
<script setup lang="ts"> |
||||||
|
import { ref, onMounted } from 'vue'; |
||||||
|
import { ElMessage } from 'element-plus'; |
||||||
|
import type { TabsPaneContext } from 'element-plus'; |
||||||
|
import { primaryTypeOfGuarantee, bankingProductsList } from '@/api/bank'; |
||||||
|
|
||||||
|
defineProps({ modelValue: { type: Object, required: true } }); |
||||||
|
defineEmits({ 'update:form': null }); |
||||||
|
|
||||||
|
const curTab = ref<string>('tab1'); |
||||||
|
|
||||||
|
// tab切换回调 |
||||||
|
const tabChange = (tab: TabsPaneContext, event: Event) => { |
||||||
|
console.log(tab, event); |
||||||
|
}; |
||||||
|
// 担保方式 |
||||||
|
const getGuarantee = async () => { |
||||||
|
try { |
||||||
|
const { data } = await primaryTypeOfGuarantee(); |
||||||
|
guarantees.value = data; |
||||||
|
} finally { |
||||||
|
} |
||||||
|
}; |
||||||
|
onMounted(() => { |
||||||
|
// getGuarantee(); |
||||||
|
// fetchData(); |
||||||
|
}); |
||||||
|
</script> |
||||||
|
|
||||||
|
<style lang="scss" scoped> |
||||||
|
@import url(../../styles/form.scss); |
||||||
|
.audit { |
||||||
|
padding: 20px 16px; |
||||||
|
margin-bottom: 30px; |
||||||
|
background: #f9fafc; |
||||||
|
border-radius: 10px; |
||||||
|
.line { |
||||||
|
margin-bottom: 18px; |
||||||
|
font-size: 14px; |
||||||
|
line-height: 1.6; |
||||||
|
} |
||||||
|
.field { |
||||||
|
font-size: 14px; |
||||||
|
font-weight: 600; |
||||||
|
} |
||||||
|
} |
||||||
|
</style> |
@ -0,0 +1,229 @@ |
|||||||
|
<template> |
||||||
|
<div class="block"> |
||||||
|
<div class="flex justify-between items-center mb-5"> |
||||||
|
<search v-model="params.keyWord"></search> |
||||||
|
<div class="filter"> |
||||||
|
<div class="select"> |
||||||
|
<el-select v-model="params.guarantyStyleId" |
||||||
|
placeholder="担保方式" |
||||||
|
size="large"> |
||||||
|
<el-option label="担保方式" |
||||||
|
value="" /> |
||||||
|
<el-option v-for="item in guarantees" |
||||||
|
:key="item.id" |
||||||
|
:label="item.guarantyStyle" |
||||||
|
:value="item.id" /> |
||||||
|
</el-select> |
||||||
|
<img src="@/assets/images/7.png" |
||||||
|
alt="" |
||||||
|
class="icon" /> |
||||||
|
</div> |
||||||
|
<div class="select"> |
||||||
|
<el-select v-model="params.status" |
||||||
|
placeholder="产品进度" |
||||||
|
size="large"> |
||||||
|
<el-option v-for="item in paces" |
||||||
|
:key="item.id" |
||||||
|
:label="item.name" |
||||||
|
:value="item.id" /> |
||||||
|
</el-select> |
||||||
|
<img src="@/assets/images/8.png" |
||||||
|
alt="" |
||||||
|
class="icon" /> |
||||||
|
</div> |
||||||
|
<div class="add-btn"> |
||||||
|
<img src="@/assets/images/plus.png" |
||||||
|
alt="" |
||||||
|
class="icon" /> |
||||||
|
新增产品 |
||||||
|
</div> |
||||||
|
<img src="@/assets/images/9.png" |
||||||
|
alt="" |
||||||
|
class="ml-4 cursor-pointer" |
||||||
|
@click="toCardList" /> |
||||||
|
</div> |
||||||
|
</div> |
||||||
|
<el-table ref="table" |
||||||
|
v-loading="loading" |
||||||
|
:data="list" |
||||||
|
@sort-change="handleSort"> |
||||||
|
<el-table-column prop="productName" |
||||||
|
label="产品名称"></el-table-column> |
||||||
|
<el-table-column prop="productNumber" |
||||||
|
label="产品编号"></el-table-column> |
||||||
|
<el-table-column prop="parentIds" |
||||||
|
label="担保方式"></el-table-column> |
||||||
|
<el-table-column prop="loanCeiling" |
||||||
|
label="最高额度/年利率/期限"></el-table-column> |
||||||
|
<el-table-column prop="createTime" |
||||||
|
label="创建日期"></el-table-column> |
||||||
|
<el-table-column prop="status" |
||||||
|
label="产品进度"></el-table-column> |
||||||
|
<el-table-column prop="id" |
||||||
|
label="操作"> |
||||||
|
<template #default="{ row }"> |
||||||
|
<el-button type="text" |
||||||
|
@click="handleEdit(row.id)" |
||||||
|
size="small">配置要素</el-button> |
||||||
|
<el-button type="text" |
||||||
|
@click="handleEdit(row.id)" |
||||||
|
size="small">产品详情</el-button> |
||||||
|
<el-button type="text" |
||||||
|
@click="handleEdit(row.id)" |
||||||
|
size="small">删除</el-button> |
||||||
|
</template></el-table-column> |
||||||
|
</el-table> |
||||||
|
<el-pagination v-model:currentPage="currentPage" |
||||||
|
v-model:pageSize="pageSize" |
||||||
|
:total="total" |
||||||
|
:page-sizes="pageSizes" |
||||||
|
:layout="pageLayout" |
||||||
|
@size-change="fetchData()" |
||||||
|
@current-change="fetchData()" |
||||||
|
small |
||||||
|
background |
||||||
|
class="px-3 py-2 justify-end"></el-pagination> |
||||||
|
</div> |
||||||
|
</template> |
||||||
|
|
||||||
|
<script setup lang="ts"> |
||||||
|
import { computed, onMounted, ref } from 'vue'; |
||||||
|
import { ElMessage } from 'element-plus'; |
||||||
|
import { useI18n } from 'vue-i18n'; |
||||||
|
import dayjs from 'dayjs'; |
||||||
|
import { perm } from '@/store/useCurrentUser'; |
||||||
|
import { pageSizes, pageLayout, toParams, resetParams } from '@/utils/common'; |
||||||
|
import { primaryTypeOfGuarantee, bankingProductsList } from '@/api/bank'; |
||||||
|
import Search from '@/components/Search.vue'; |
||||||
|
import { useRouter } from 'vue-router'; |
||||||
|
|
||||||
|
const { t } = useI18n(); |
||||||
|
const params = ref<any>({ |
||||||
|
createDateSort: '', |
||||||
|
guarantyStyleId: '', |
||||||
|
keyWord: '', |
||||||
|
productType: '', |
||||||
|
status: '', |
||||||
|
}); |
||||||
|
const router = useRouter(); |
||||||
|
const sort = ref<any>(); |
||||||
|
const currentPage = ref<number>(1); |
||||||
|
const pageSize = ref<number>(10); |
||||||
|
const total = ref<number>(0); |
||||||
|
const table = ref<any>(); |
||||||
|
const guarantees = ref<Array<any>>([]); |
||||||
|
const paces = ref<Array<any>>([ |
||||||
|
{ |
||||||
|
id: 1, |
||||||
|
name: '配置风控', |
||||||
|
}, |
||||||
|
{ |
||||||
|
id: 2, |
||||||
|
name: '待审批', |
||||||
|
}, |
||||||
|
{ |
||||||
|
id: 3, |
||||||
|
name: '审批通过', |
||||||
|
}, |
||||||
|
{ |
||||||
|
id: 4, |
||||||
|
name: '审批不通过', |
||||||
|
}, |
||||||
|
{ |
||||||
|
id: 5, |
||||||
|
name: '审批打回', |
||||||
|
}, |
||||||
|
]); |
||||||
|
const list = ref<Array<any>>([]); |
||||||
|
const selection = ref<Array<any>>([]); |
||||||
|
const loading = ref<boolean>(false); |
||||||
|
const beanId = ref<number>(); |
||||||
|
// 担保方式 |
||||||
|
const getGuarantee = async () => { |
||||||
|
try { |
||||||
|
const { data } = await primaryTypeOfGuarantee(); |
||||||
|
guarantees.value = data; |
||||||
|
} finally { |
||||||
|
} |
||||||
|
}; |
||||||
|
// 列表 |
||||||
|
const fetchData = async () => { |
||||||
|
loading.value = true; |
||||||
|
try { |
||||||
|
const { data } = await bankingProductsList({ pageNum: currentPage.value, pageSize: pageSize.value, ...toParams(params.value) }); |
||||||
|
list.value = data.message.records; |
||||||
|
total.value = data.message.total; |
||||||
|
} finally { |
||||||
|
loading.value = false; |
||||||
|
} |
||||||
|
}; |
||||||
|
onMounted(() => { |
||||||
|
getGuarantee(); |
||||||
|
fetchData(); |
||||||
|
}); |
||||||
|
|
||||||
|
const handleSort = ({ column, prop, order }: { column: any; prop: string; order: string }) => { |
||||||
|
if (prop) { |
||||||
|
sort.value = (column.sortBy ?? prop) + (order === 'descending' ? '_desc' : ''); |
||||||
|
} else { |
||||||
|
sort.value = undefined; |
||||||
|
} |
||||||
|
fetchData(); |
||||||
|
}; |
||||||
|
// 卡片模式 |
||||||
|
const toCardList = () => { |
||||||
|
router.push('/product/cardList/config'); |
||||||
|
}; |
||||||
|
|
||||||
|
const handleAdd = () => { |
||||||
|
beanId.value = undefined; |
||||||
|
}; |
||||||
|
const handleEdit = (id: number) => { |
||||||
|
beanId.value = id; |
||||||
|
}; |
||||||
|
const handleDelete = async (ids: number[]) => { |
||||||
|
await deleteUser(ids); |
||||||
|
fetchData(); |
||||||
|
ElMessage.success(t('success')); |
||||||
|
}; |
||||||
|
const deletable = (bean: any) => bean.id > 1; |
||||||
|
</script> |
||||||
|
|
||||||
|
<style lang="scss" scoped> |
||||||
|
.filter { |
||||||
|
display: inline-flex; |
||||||
|
align-items: center; |
||||||
|
.select { |
||||||
|
position: relative; |
||||||
|
margin-right: 12px; |
||||||
|
.icon { |
||||||
|
position: absolute; |
||||||
|
top: 12px; |
||||||
|
left: 20px; |
||||||
|
} |
||||||
|
:deep(.el-select) { |
||||||
|
width: 170px; |
||||||
|
.el-input__inner { |
||||||
|
padding-left: 41px; |
||||||
|
border-radius: 18px; |
||||||
|
border-color: #dfe9f8; |
||||||
|
} |
||||||
|
} |
||||||
|
} |
||||||
|
.add-btn { |
||||||
|
display: inline-flex; |
||||||
|
align-items: center; |
||||||
|
height: 36px; |
||||||
|
padding: 0 24px; |
||||||
|
font-size: 14px; |
||||||
|
color: #fff; |
||||||
|
background: linear-gradient(-36deg, #006bff, #2ab1ff); |
||||||
|
border: 1px solid #ffffff; |
||||||
|
border-radius: 18px; |
||||||
|
cursor: pointer; |
||||||
|
.icon { |
||||||
|
margin-right: 8px; |
||||||
|
} |
||||||
|
} |
||||||
|
} |
||||||
|
</style> |
@ -1,238 +0,0 @@ |
|||||||
<template> |
|
||||||
<div> |
|
||||||
<div class="block"> |
|
||||||
<div class="flex justify-between items-center mb-5"> |
|
||||||
<div class="search"> |
|
||||||
<input type="text" |
|
||||||
placeholder="搜索" |
|
||||||
maxlength="20" /> |
|
||||||
<img src="@/assets/images/search.png" |
|
||||||
alt="" |
|
||||||
class="icon" /> |
|
||||||
</div> |
|
||||||
<div class="filter"> |
|
||||||
<div class="select"> |
|
||||||
<el-select v-model="guarantyStyleId" |
|
||||||
placeholder="担保方式" |
|
||||||
size="large"> |
|
||||||
<el-option label="担保方式" |
|
||||||
value="" /> |
|
||||||
<el-option v-for="item in guarantees" |
|
||||||
:key="item.id" |
|
||||||
:label="item.guarantyStyle" |
|
||||||
:value="item.id" /> |
|
||||||
</el-select> |
|
||||||
<img src="@/assets/images/7.png" |
|
||||||
alt="" |
|
||||||
class="icon" /> |
|
||||||
</div> |
|
||||||
<div class="select"> |
|
||||||
<el-select v-model="pace" |
|
||||||
placeholder="产品进度" |
|
||||||
size="large"> |
|
||||||
<el-option v-for="item in paces" |
|
||||||
:key="item.id" |
|
||||||
:label="item.name" |
|
||||||
:value="item.id" /> |
|
||||||
</el-select> |
|
||||||
<img src="@/assets/images/8.png" |
|
||||||
alt="" |
|
||||||
class="icon" /> |
|
||||||
</div> |
|
||||||
<div class="add-btn"> |
|
||||||
<img src="@/assets/images/plus.png" |
|
||||||
alt="" |
|
||||||
class="icon" /> |
|
||||||
新增产品 |
|
||||||
</div> |
|
||||||
<img src="@/assets/images/9.png" |
|
||||||
alt="" |
|
||||||
class="ml-4 cursor-pointer" /> |
|
||||||
</div> |
|
||||||
</div> |
|
||||||
<el-table ref="table" |
|
||||||
v-loading="loading" |
|
||||||
:data="list" |
|
||||||
@sort-change="handleSort"> |
|
||||||
<el-table-column prop="id" |
|
||||||
label="产品名称"></el-table-column> |
|
||||||
<el-table-column prop="id" |
|
||||||
label="产品编号"></el-table-column> |
|
||||||
<el-table-column prop="id" |
|
||||||
label="担保方式"></el-table-column> |
|
||||||
<el-table-column prop="id" |
|
||||||
label="最高额度/年利率/期限"></el-table-column> |
|
||||||
<el-table-column prop="id" |
|
||||||
label="创建日期"></el-table-column> |
|
||||||
<el-table-column prop="id" |
|
||||||
label="产品进度"></el-table-column> |
|
||||||
<el-table-column prop="id" |
|
||||||
label="操作"> |
|
||||||
<template #default="{ row }"> |
|
||||||
<el-button type="text" |
|
||||||
@click="handleEdit(row.id)" |
|
||||||
size="small">配置要素</el-button> |
|
||||||
<el-button type="text" |
|
||||||
@click="handleEdit(row.id)" |
|
||||||
size="small">产品详情</el-button> |
|
||||||
<el-button type="text" |
|
||||||
@click="handleEdit(row.id)" |
|
||||||
size="small">删除</el-button> |
|
||||||
</template></el-table-column> |
|
||||||
</el-table> |
|
||||||
<el-pagination v-model:currentPage="currentPage" |
|
||||||
v-model:pageSize="pageSize" |
|
||||||
:total="total" |
|
||||||
:page-sizes="pageSizes" |
|
||||||
:layout="pageLayout" |
|
||||||
@size-change="fetchData()" |
|
||||||
@current-change="fetchData()" |
|
||||||
small |
|
||||||
background |
|
||||||
class="px-3 py-2 justify-end"></el-pagination> |
|
||||||
</div> |
|
||||||
</div> |
|
||||||
</template> |
|
||||||
|
|
||||||
<script setup lang="ts"> |
|
||||||
import { computed, onMounted, ref } from 'vue'; |
|
||||||
import { ElMessage } from 'element-plus'; |
|
||||||
import { Search } from '@element-plus/icons-vue'; |
|
||||||
import { useI18n } from 'vue-i18n'; |
|
||||||
import dayjs from 'dayjs'; |
|
||||||
import { perm } from '@/store/useCurrentUser'; |
|
||||||
import { pageSizes, pageLayout, toParams, resetParams } from '@/utils/common'; |
|
||||||
import { primaryTypeOfGuarantee, bankingProductsList } from '@/api/bank'; |
|
||||||
|
|
||||||
const { t } = useI18n(); |
|
||||||
const params = ref<any>({ |
|
||||||
createDateSort: '', |
|
||||||
guarantyStyleId: '', |
|
||||||
keyWord: '', |
|
||||||
productType: '', |
|
||||||
status: '', |
|
||||||
}); |
|
||||||
const sort = ref<any>(); |
|
||||||
const currentPage = ref<number>(1); |
|
||||||
const pageSize = ref<number>(10); |
|
||||||
const total = ref<number>(0); |
|
||||||
const table = ref<any>(); |
|
||||||
const guarantyStyleId = ref<any>(''); |
|
||||||
const guarantees = ref<Array<any>>([]); |
|
||||||
const pace = ref<any>(''); |
|
||||||
const paces = ref<Array<any>>([]); |
|
||||||
const list = ref<Array<any>>([]); |
|
||||||
const selection = ref<Array<any>>([]); |
|
||||||
const loading = ref<boolean>(false); |
|
||||||
const beanId = ref<number>(); |
|
||||||
// 担保方式 |
|
||||||
const getGuarantee = async () => { |
|
||||||
try { |
|
||||||
const { data } = await primaryTypeOfGuarantee(); |
|
||||||
guarantees.value = data; |
|
||||||
} finally { |
|
||||||
} |
|
||||||
}; |
|
||||||
// 列表 |
|
||||||
const fetchData = async () => { |
|
||||||
loading.value = true; |
|
||||||
try { |
|
||||||
const { data } = await bankingProductsList({ pageNum: currentPage.value, pageSize: pageSize.value, ...toParams(params.value) }); |
|
||||||
list.value = data.message.records; |
|
||||||
total.value = data.message.total; |
|
||||||
} finally { |
|
||||||
loading.value = false; |
|
||||||
} |
|
||||||
}; |
|
||||||
onMounted(() => { |
|
||||||
getGuarantee(); |
|
||||||
fetchData(); |
|
||||||
}); |
|
||||||
|
|
||||||
const handleSort = ({ column, prop, order }: { column: any; prop: string; order: string }) => { |
|
||||||
if (prop) { |
|
||||||
sort.value = (column.sortBy ?? prop) + (order === 'descending' ? '_desc' : ''); |
|
||||||
} else { |
|
||||||
sort.value = undefined; |
|
||||||
} |
|
||||||
fetchData(); |
|
||||||
}; |
|
||||||
const handleSearch = () => fetchData(); |
|
||||||
|
|
||||||
const handleAdd = () => { |
|
||||||
beanId.value = undefined; |
|
||||||
}; |
|
||||||
const handleEdit = (id: number) => { |
|
||||||
beanId.value = id; |
|
||||||
}; |
|
||||||
const handleDelete = async (ids: number[]) => { |
|
||||||
await deleteUser(ids); |
|
||||||
fetchData(); |
|
||||||
ElMessage.success(t('success')); |
|
||||||
}; |
|
||||||
const deletable = (bean: any) => bean.id > 1; |
|
||||||
</script> |
|
||||||
|
|
||||||
<style lang="scss" scoped> |
|
||||||
.search { |
|
||||||
display: flex; |
|
||||||
align-items: center; |
|
||||||
width: 300px; |
|
||||||
padding: 0 24px; |
|
||||||
background-color: #fff; |
|
||||||
border: 1px solid #dfe9f8; |
|
||||||
border-radius: 18px; |
|
||||||
input { |
|
||||||
width: 230px; |
|
||||||
height: 36px; |
|
||||||
margin-right: 10px; |
|
||||||
font-size: 14px; |
|
||||||
line-height: 36px; |
|
||||||
color: #333; |
|
||||||
border: 0; |
|
||||||
background-color: transparent; |
|
||||||
&:focus { |
|
||||||
outline: none; |
|
||||||
} |
|
||||||
} |
|
||||||
.icon { |
|
||||||
cursor: pointer; |
|
||||||
} |
|
||||||
} |
|
||||||
.filter { |
|
||||||
display: inline-flex; |
|
||||||
align-items: center; |
|
||||||
.select { |
|
||||||
position: relative; |
|
||||||
margin-right: 12px; |
|
||||||
.icon { |
|
||||||
position: absolute; |
|
||||||
top: 12px; |
|
||||||
left: 20px; |
|
||||||
} |
|
||||||
:deep(.el-select) { |
|
||||||
width: 170px; |
|
||||||
.el-input__inner { |
|
||||||
padding-left: 41px; |
|
||||||
border-radius: 18px; |
|
||||||
border-color: #dfe9f8; |
|
||||||
} |
|
||||||
} |
|
||||||
} |
|
||||||
.add-btn { |
|
||||||
display: inline-flex; |
|
||||||
align-items: center; |
|
||||||
height: 36px; |
|
||||||
padding: 0 24px; |
|
||||||
font-size: 14px; |
|
||||||
color: #fff; |
|
||||||
background: linear-gradient(-36deg, #006bff, #2ab1ff); |
|
||||||
border: 1px solid #ffffff; |
|
||||||
border-radius: 18px; |
|
||||||
cursor: pointer; |
|
||||||
.icon { |
|
||||||
margin-right: 8px; |
|
||||||
} |
|
||||||
} |
|
||||||
} |
|
||||||
</style> |
|