After Width: | Height: | Size: 37 KiB |
After Width: | Height: | Size: 16 KiB |
After Width: | Height: | Size: 15 KiB |
After Width: | Height: | Size: 6.7 KiB |
After Width: | Height: | Size: 1.5 KiB |
After Width: | Height: | Size: 1.5 KiB |
After Width: | Height: | Size: 2.0 KiB |
After Width: | Height: | Size: 1.9 KiB |
@ -0,0 +1,157 @@ |
|||||||
|
<template> |
||||||
|
<ul class="switch px-7 mt-5"> |
||||||
|
<template v-if="isProduct"> |
||||||
|
<li :class="{ active: active == 1 }" |
||||||
|
@click="toPage('/product?type=0&i=1')"> |
||||||
|
<img class="icon" |
||||||
|
src="@/assets/images/icon5.png" |
||||||
|
alt="" /> |
||||||
|
<img class="icon-1" |
||||||
|
src="@/assets/images/icon5-1.png" |
||||||
|
alt="" /> |
||||||
|
<p class="text">个人产品</p> |
||||||
|
</li> |
||||||
|
<li :class="{ active: active == 2 }" |
||||||
|
@click="toPage('/product?type=1&i=2')"> |
||||||
|
<img class="icon" |
||||||
|
src="@/assets/images/icon6.png" |
||||||
|
alt="" /> |
||||||
|
<img class="icon-1" |
||||||
|
src="@/assets/images/icon6-1.png" |
||||||
|
alt="" /> |
||||||
|
<p class="text">企业产品</p> |
||||||
|
</li> |
||||||
|
</template> |
||||||
|
<template v-else> |
||||||
|
<li> |
||||||
|
<img class="icon" |
||||||
|
src="@/assets/images/icon1.png" |
||||||
|
alt="" /> |
||||||
|
<img class="icon-1" |
||||||
|
src="@/assets/images/icon1-1.png" |
||||||
|
alt="" /> |
||||||
|
<p class="text">产品风控配置</p> |
||||||
|
</li> |
||||||
|
<li> |
||||||
|
<img class="icon" |
||||||
|
src="@/assets/images/icon2.png" |
||||||
|
alt="" /> |
||||||
|
<img class="icon-1" |
||||||
|
src="@/assets/images/icon2-1.png" |
||||||
|
alt="" /> |
||||||
|
<p class="text">准入模型</p> |
||||||
|
</li> |
||||||
|
<li> |
||||||
|
<img class="icon" |
||||||
|
src="@/assets/images/icon3.png" |
||||||
|
alt="" /> |
||||||
|
<img class="icon-1" |
||||||
|
src="@/assets/images/icon3-1.png" |
||||||
|
alt="" /> |
||||||
|
<p class="text">利率定价模型</p> |
||||||
|
</li> |
||||||
|
<li> |
||||||
|
<img class="icon" |
||||||
|
src="@/assets/images/icon4.png" |
||||||
|
alt="" /> |
||||||
|
<img class="icon-1" |
||||||
|
src="@/assets/images/icon4-1.png" |
||||||
|
alt="" /> |
||||||
|
<p class="text">贷后管理模型</p> |
||||||
|
</li> |
||||||
|
</template> |
||||||
|
</ul> |
||||||
|
</template> |
||||||
|
|
||||||
|
<script setup lang="ts"> |
||||||
|
import { computed, defineProps, ref, toRefs } from 'vue'; |
||||||
|
import { useRouter, useRoute } from 'vue-router'; |
||||||
|
import { isShowMenu } from '@/store/useCurrentUser'; |
||||||
|
|
||||||
|
const router = useRouter(); |
||||||
|
const route = useRoute(); |
||||||
|
const active = computed(() => route.query.i); |
||||||
|
const isProduct = ref<any>(true); |
||||||
|
|
||||||
|
// 跳转 |
||||||
|
const toPage = (path: string) => { |
||||||
|
router.push(path); |
||||||
|
}; |
||||||
|
|
||||||
|
function isExternal(path: string): boolean { |
||||||
|
return /^(https?:|mailto:|tel:)/.test(path); |
||||||
|
} |
||||||
|
|
||||||
|
// const props = defineProps({ route: { type: Object, required: true }, basePath: { type: String, default: '' } }); |
||||||
|
// const { route, basePath } = toRefs(props); |
||||||
|
// const router = useRouter(); |
||||||
|
|
||||||
|
// // 是否显示。非隐藏路由即显示 |
||||||
|
// const isShow = computed(() => !route.value.meta?.hidden); |
||||||
|
// // 是否子菜单。有标题且有子元素即为子菜单 |
||||||
|
// const subMenu = computed(() => route.value.meta?.title && route.value.children); |
||||||
|
// // 目标路由。如果自己没有title,且有子元素,则子元素为目标路由 |
||||||
|
// const targetRoute = computed(() => (!route.value.meta?.title && route.value.children?.length > 0 ? route.value.children[0] : route.value)); |
||||||
|
// const icon = computed(() => targetRoute.value.meta?.icon); |
||||||
|
// const title = computed(() => targetRoute.value.meta?.title); |
||||||
|
// // 路由路径。如果targetItem是子元素,则使用子元素路由;使用自己的路由,则为空串,因为在basePath中已经指定了自己的路由 |
||||||
|
// const path = computed(() => (route.value !== targetRoute.value ? targetRoute.value.path : '')); |
||||||
|
|
||||||
|
// const resolvePath = (routePath: string) => { |
||||||
|
// if (isExternal(routePath)) { |
||||||
|
// return routePath; |
||||||
|
// } |
||||||
|
// return `${basePath.value}/${routePath}`; |
||||||
|
// }; |
||||||
|
// const handleClick = () => { |
||||||
|
// const fullPath = resolvePath(path.value); |
||||||
|
// if (isExternal(fullPath)) { |
||||||
|
// window.open(fullPath, '_blank'); |
||||||
|
// } else { |
||||||
|
// router.push(resolvePath(path.value)); |
||||||
|
// } |
||||||
|
// }; |
||||||
|
</script> |
||||||
|
|
||||||
|
<style lang="scss" scoped> |
||||||
|
.switch { |
||||||
|
li { |
||||||
|
display: flex; |
||||||
|
flex-direction: column; |
||||||
|
justify-content: center; |
||||||
|
align-items: center; |
||||||
|
width: 122px; |
||||||
|
height: 102px; |
||||||
|
margin-bottom: 20px; |
||||||
|
background: #ffffff; |
||||||
|
box-shadow: 0px 0px 8px 0px rgba(162, 199, 246, 0.16); |
||||||
|
border-radius: 10px; |
||||||
|
cursor: pointer; |
||||||
|
&:hover, |
||||||
|
&.active { |
||||||
|
background: linear-gradient(-36deg, #3c65ff, #33d1ff); |
||||||
|
box-shadow: 0px 6px 16px 0px rgba(96, 155, 255, 0.56); |
||||||
|
.icon { |
||||||
|
display: none; |
||||||
|
} |
||||||
|
.icon-1 { |
||||||
|
display: inline-block; |
||||||
|
} |
||||||
|
.text { |
||||||
|
color: #fff; |
||||||
|
} |
||||||
|
} |
||||||
|
} |
||||||
|
img { |
||||||
|
margin: 0 auto; |
||||||
|
} |
||||||
|
.icon-1 { |
||||||
|
display: none; |
||||||
|
} |
||||||
|
.text { |
||||||
|
margin-top: 10px; |
||||||
|
font-family: MiSans; |
||||||
|
font-weight: 600; |
||||||
|
} |
||||||
|
} |
||||||
|
</style> |
@ -1,57 +0,0 @@ |
|||||||
<template> |
|
||||||
<template v-if="isShow"> |
|
||||||
<el-sub-menu v-if="subMenu" :index="resolvePath(path)" popper-append-to-body> |
|
||||||
<template #title> |
|
||||||
<el-icon v-if="icon"><component :is="icon"></component></el-icon> |
|
||||||
<span>{{ $t(title) }}</span> |
|
||||||
</template> |
|
||||||
<menu-item v-for="item in route.children.filter((item:any) => isShowMenu(item))" :key="item.path" :route="item" :base-path="resolvePath(item.path)" /> |
|
||||||
</el-sub-menu> |
|
||||||
<el-menu-item v-else :index="resolvePath(path)" @click="handleClick"> |
|
||||||
<el-icon v-if="icon"><component :is="icon"></component></el-icon> |
|
||||||
<template #title> |
|
||||||
<span>{{ $t(title) }}</span> |
|
||||||
</template> |
|
||||||
</el-menu-item> |
|
||||||
</template> |
|
||||||
</template> |
|
||||||
|
|
||||||
<script setup lang="ts"> |
|
||||||
import { computed, defineProps, toRefs } from 'vue'; |
|
||||||
import { useRouter } from 'vue-router'; |
|
||||||
import { isShowMenu } from '@/store/useCurrentUser'; |
|
||||||
|
|
||||||
function isExternal(path: string): boolean { |
|
||||||
return /^(https?:|mailto:|tel:)/.test(path); |
|
||||||
} |
|
||||||
|
|
||||||
const props = defineProps({ route: { type: Object, required: true }, basePath: { type: String, default: '' } }); |
|
||||||
const { route, basePath } = toRefs(props); |
|
||||||
const router = useRouter(); |
|
||||||
|
|
||||||
// 是否显示。非隐藏路由即显示 |
|
||||||
const isShow = computed(() => !route.value.meta?.hidden); |
|
||||||
// 是否子菜单。有标题且有子元素即为子菜单 |
|
||||||
const subMenu = computed(() => route.value.meta?.title && route.value.children); |
|
||||||
// 目标路由。如果自己没有title,且有子元素,则子元素为目标路由 |
|
||||||
const targetRoute = computed(() => (!route.value.meta?.title && route.value.children?.length > 0 ? route.value.children[0] : route.value)); |
|
||||||
const icon = computed(() => targetRoute.value.meta?.icon); |
|
||||||
const title = computed(() => targetRoute.value.meta?.title); |
|
||||||
// 路由路径。如果targetItem是子元素,则使用子元素路由;使用自己的路由,则为空串,因为在basePath中已经指定了自己的路由 |
|
||||||
const path = computed(() => (route.value !== targetRoute.value ? targetRoute.value.path : '')); |
|
||||||
|
|
||||||
const resolvePath = (routePath: string) => { |
|
||||||
if (isExternal(routePath)) { |
|
||||||
return routePath; |
|
||||||
} |
|
||||||
return `${basePath.value}/${routePath}`; |
|
||||||
}; |
|
||||||
const handleClick = () => { |
|
||||||
const fullPath = resolvePath(path.value); |
|
||||||
if (isExternal(fullPath)) { |
|
||||||
window.open(fullPath, '_blank'); |
|
||||||
} else { |
|
||||||
router.push(resolvePath(path.value)); |
|
||||||
} |
|
||||||
}; |
|
||||||
</script> |
|
@ -0,0 +1,40 @@ |
|||||||
|
import { reactive, readonly } from 'vue'; |
||||||
|
import Cookies from 'js-cookie'; |
||||||
|
|
||||||
|
export interface Product { |
||||||
|
status?: Record<string, any>; |
||||||
|
} |
||||||
|
|
||||||
|
const state = reactive<Product>({ |
||||||
|
// 产品进度
|
||||||
|
status: [ |
||||||
|
{ |
||||||
|
id: '', |
||||||
|
name: '产品进度', |
||||||
|
}, |
||||||
|
{ |
||||||
|
id: 1, |
||||||
|
name: '配置风控', |
||||||
|
}, |
||||||
|
{ |
||||||
|
id: 2, |
||||||
|
name: '待审批', |
||||||
|
}, |
||||||
|
{ |
||||||
|
id: 3, |
||||||
|
name: '审批通过', |
||||||
|
}, |
||||||
|
{ |
||||||
|
id: 4, |
||||||
|
name: '审批不通过', |
||||||
|
}, |
||||||
|
{ |
||||||
|
id: 5, |
||||||
|
name: '审批打回', |
||||||
|
}, |
||||||
|
], |
||||||
|
}); |
||||||
|
|
||||||
|
export const getStatus = (id: number | string): string => { |
||||||
|
return state.status.find((e) => e.id === id).name; |
||||||
|
}; |
@ -0,0 +1,170 @@ |
|||||||
|
<template> |
||||||
|
<h6 class="title">城市人口及年龄参数</h6> |
||||||
|
<el-table class="c-table" |
||||||
|
ref="table" |
||||||
|
v-loading="loading" |
||||||
|
:data="list" |
||||||
|
border |
||||||
|
@sort-change="handleSort"> |
||||||
|
<el-table-column prop="productName" |
||||||
|
label="城市总人口 (人)" |
||||||
|
align="center"> |
||||||
|
<el-input maxlength="20"></el-input> |
||||||
|
</el-table-column> |
||||||
|
<el-table-column prop="productNumber" |
||||||
|
label="年龄 (岁)" |
||||||
|
align="center"></el-table-column> |
||||||
|
<el-table-column prop="parentIds" |
||||||
|
label="年龄占比 (%)" |
||||||
|
align="center"> |
||||||
|
<el-input maxlength="3"></el-input> |
||||||
|
</el-table-column> |
||||||
|
</el-table> |
||||||
|
|
||||||
|
<h6 class="title mt-7">学历参数</h6> |
||||||
|
<el-table class="c-table" |
||||||
|
ref="table" |
||||||
|
v-loading="loading" |
||||||
|
:data="list" |
||||||
|
border |
||||||
|
@sort-change="handleSort"> |
||||||
|
<el-table-column prop="productName" |
||||||
|
label="年龄 (岁)" |
||||||
|
align="center"> </el-table-column> |
||||||
|
<el-table-column prop="productNumber" |
||||||
|
label="学历" |
||||||
|
align="center"></el-table-column> |
||||||
|
<el-table-column prop="parentIds" |
||||||
|
label="学历占比 (%)" |
||||||
|
align="center"> |
||||||
|
<el-input maxlength="3"></el-input> |
||||||
|
</el-table-column> |
||||||
|
</el-table> |
||||||
|
|
||||||
|
<h6 class="title mt-7">企业数量配置</h6> |
||||||
|
<el-table class="c-table" |
||||||
|
ref="table" |
||||||
|
v-loading="loading" |
||||||
|
:data="list" |
||||||
|
border |
||||||
|
@sort-change="handleSort"> |
||||||
|
<el-table-column prop="productName" |
||||||
|
label="城市总人口 (人)" |
||||||
|
align="center"> </el-table-column> |
||||||
|
<el-table-column prop="parentIds" |
||||||
|
label="城市总人口 (人)" |
||||||
|
align="center"> |
||||||
|
<el-input maxlength="3"></el-input> |
||||||
|
</el-table-column> |
||||||
|
</el-table> |
||||||
|
|
||||||
|
<h6 class="title mt-7">单个商品每日需求量</h6> |
||||||
|
<el-table class="c-table" |
||||||
|
ref="table" |
||||||
|
v-loading="loading" |
||||||
|
:data="list" |
||||||
|
border |
||||||
|
@sort-change="handleSort"> |
||||||
|
<el-table-column prop="productName" |
||||||
|
label="买家类型" |
||||||
|
align="center"> </el-table-column> |
||||||
|
<el-table-column prop="parentIds" |
||||||
|
label="买家总占比 (%)" |
||||||
|
align="center"> |
||||||
|
<el-input maxlength="3"></el-input> |
||||||
|
</el-table-column> |
||||||
|
<el-table-column prop="parentIds" |
||||||
|
label="每次需求人数占比 (%)" |
||||||
|
align="center"> |
||||||
|
<el-input maxlength="3"></el-input> |
||||||
|
</el-table-column> |
||||||
|
<el-table-column prop="parentIds" |
||||||
|
label="单个买家单次需求" |
||||||
|
align="center"> |
||||||
|
<el-input maxlength="3"></el-input> |
||||||
|
</el-table-column> |
||||||
|
</el-table> |
||||||
|
|
||||||
|
<h6 class="title mt-7">系统账户起始金额</h6> |
||||||
|
<el-form class="w-[300px]" |
||||||
|
:model="form" |
||||||
|
label-width="120px" |
||||||
|
label-suffix=":"> |
||||||
|
<el-form-item label="银行账户"> |
||||||
|
<el-input v-model="form.name"> |
||||||
|
<template #suffix> 万元 </template> |
||||||
|
</el-input> |
||||||
|
</el-form-item> |
||||||
|
<el-form-item label="保险账户"> |
||||||
|
<el-input v-model="form.name"> |
||||||
|
<template #suffix> 万元 </template> |
||||||
|
</el-input> |
||||||
|
</el-form-item> |
||||||
|
<el-form-item label="基金账户"> |
||||||
|
<el-input v-model="form.name"> |
||||||
|
<template #suffix> 万元 </template> |
||||||
|
</el-input> |
||||||
|
</el-form-item> |
||||||
|
</el-form> |
||||||
|
|
||||||
|
<div class="flex justify-end"> |
||||||
|
<div class="submit">保存修改</div> |
||||||
|
</div> |
||||||
|
</template> |
||||||
|
|
||||||
|
<script setup lang="ts"> |
||||||
|
import { ref, onMounted } from 'vue'; |
||||||
|
import { ElMessage } from 'element-plus'; |
||||||
|
import { primaryTypeOfGuarantee, bankingProductsList } from '@/api/bank'; |
||||||
|
|
||||||
|
defineProps({ modelValue: { type: Object, required: true } }); |
||||||
|
defineEmits({ 'update:form': null }); |
||||||
|
|
||||||
|
const list = ref<Array<any>>([]); |
||||||
|
const form = ref<Object>({}); |
||||||
|
|
||||||
|
// 担保方式 |
||||||
|
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); |
||||||
|
.title { |
||||||
|
@apply flex items-center mb-5 text-base text-[#222D42] font-semibold; |
||||||
|
&:before { |
||||||
|
content: ''; |
||||||
|
@apply w-1 h-4 mr-2 bg-[#006BFF] rounded-sm; |
||||||
|
} |
||||||
|
} |
||||||
|
.c-table { |
||||||
|
@apply rounded-[10px]; |
||||||
|
:deep(th.el-table__cell) { |
||||||
|
@apply bg-[#F8FBFC]; |
||||||
|
} |
||||||
|
:deep(.cell) { |
||||||
|
@apply text-[#006BFF]; |
||||||
|
} |
||||||
|
} |
||||||
|
.submit { |
||||||
|
padding: 15px 22px; |
||||||
|
font-size: 14px; |
||||||
|
line-height: 1; |
||||||
|
color: #fff; |
||||||
|
background: #006bff; |
||||||
|
border-radius: 12px; |
||||||
|
cursor: pointer; |
||||||
|
&:hover { |
||||||
|
opacity: 0.9; |
||||||
|
} |
||||||
|
} |
||||||
|
</style> |
@ -0,0 +1,44 @@ |
|||||||
|
<template> |
||||||
|
<div class="block"> |
||||||
|
<el-tabs v-model="curTab" @tab-click="tabChange"> |
||||||
|
<el-tab-pane label="系统买方" name="tab1"> |
||||||
|
<buyer></buyer> |
||||||
|
</el-tab-pane> |
||||||
|
<el-tab-pane label="金融市场" name="tab2"> </el-tab-pane> |
||||||
|
<el-tab-pane label="扫单配置" name="tab3"> </el-tab-pane> |
||||||
|
<el-tab-pane label="渠道广告" name="tab4"> </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'; |
||||||
|
import Buyer from './Buyer.vue'; |
||||||
|
|
||||||
|
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></style> |
@ -0,0 +1,119 @@ |
|||||||
|
<template> |
||||||
|
<div> |
||||||
|
<back name="产品详情"></back> |
||||||
|
<div class="flex"> |
||||||
|
<div class="item mr-[18px]"> |
||||||
|
<h6 class="text-lg font-semibold text-[#053C6A]">智信女神贷</h6> |
||||||
|
<div class="flex justify-between mt-3 text-center"> |
||||||
|
<div> |
||||||
|
<p class="mb-1 text-lg font-semibold text-[#00347C]">3.5-4.01%</p> |
||||||
|
<p class="text-sm text-[#00327C]">参考利率</p> |
||||||
|
</div> |
||||||
|
<div> |
||||||
|
<p class="mb-1 text-lg font-semibold text-[#00347C]">3.5-4.01%</p> |
||||||
|
<p class="text-sm text-[#00327C]">贷款额度</p> |
||||||
|
</div> |
||||||
|
<div> |
||||||
|
<p class="mb-1 text-lg font-semibold text-[#00347C]">3.5-4.01%</p> |
||||||
|
<p class="text-sm text-[#00327C]">贷款期限</p> |
||||||
|
</div> |
||||||
|
</div> |
||||||
|
</div> |
||||||
|
<div class="item mr-[18px]"> |
||||||
|
<h6 class="text-lg font-semibold text-[#333]">产品定义</h6> |
||||||
|
<div class="mt-3 text-sm text-[#333] leading-6">根据个人客户的信用状况,为其提供的一种短期融资便利产品,借款人在我行核定的额度金额内可循环周转使用贷款。</div> |
||||||
|
</div> |
||||||
|
<div class="item"> |
||||||
|
<h6 class="text-lg font-semibold text-[#053C6A]">本产品排行</h6> |
||||||
|
<div class="flex justify-between mt-3 text-center"> |
||||||
|
<div> |
||||||
|
<p class="mb-1 text-lg font-semibold text-[#00347C]">3.5-4.01%</p> |
||||||
|
<p class="text-sm text-[#00327C]">今日成交金额</p> |
||||||
|
</div> |
||||||
|
<div> |
||||||
|
<p class="mb-1 text-lg font-semibold text-[#00347C]">3.5-4.01%</p> |
||||||
|
<p class="text-sm text-[#00327C]">今日收益</p> |
||||||
|
</div> |
||||||
|
<div> |
||||||
|
<p class="mb-1 text-lg font-semibold text-[#00347C]">3.5-4.01%</p> |
||||||
|
<p class="text-sm text-[#00327C]">累计收益</p> |
||||||
|
</div> |
||||||
|
</div> |
||||||
|
</div> |
||||||
|
</div> |
||||||
|
<div class="block flex justify-between mt-5"> |
||||||
|
<div> |
||||||
|
<div class="line"> |
||||||
|
<span class="label">担保方式:</span> |
||||||
|
<div class="val">担保方式:</div> |
||||||
|
</div> |
||||||
|
<div class="line"> |
||||||
|
<span class="label">贷款用途:</span> |
||||||
|
<div class="val">担保方式:</div> |
||||||
|
</div> |
||||||
|
<div class="line"> |
||||||
|
<span class="label">担保方式:</span> |
||||||
|
<div class="val">担保方式:</div> |
||||||
|
</div> |
||||||
|
</div> |
||||||
|
<div class="user m-4"> |
||||||
|
<h6 class="mb-4 text-lg font-semibold text-[#01305B]">产品经理</h6> |
||||||
|
<div class="text-center"> |
||||||
|
<img src="@/assets/images/bankDetail/4.png" |
||||||
|
alt="" |
||||||
|
class="mx-auto" /> |
||||||
|
<p class="mt-2 font-semibold text-[#114575]">刘秀</p> |
||||||
|
</div> |
||||||
|
<p class="mt-2 text-[#114575]">财经学院 金融2班</p> |
||||||
|
</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'; |
||||||
|
|
||||||
|
const form = ref<Object>({}); |
||||||
|
|
||||||
|
// 担保方式 |
||||||
|
const getGuarantee = async () => { |
||||||
|
try { |
||||||
|
const { data } = await primaryTypeOfGuarantee(); |
||||||
|
guarantees.value = data; |
||||||
|
} finally { |
||||||
|
} |
||||||
|
}; |
||||||
|
onMounted(() => { |
||||||
|
// getGuarantee(); |
||||||
|
// fetchData(); |
||||||
|
}); |
||||||
|
</script> |
||||||
|
|
||||||
|
<style lang="scss" scoped> |
||||||
|
.item { |
||||||
|
@apply p-5; |
||||||
|
width: calc((100% - 36px) / 3); |
||||||
|
background: url(../../assets/images/bankDetail/2.png) 0 0/100% 100% no-repeat; |
||||||
|
&:first-child { |
||||||
|
background-image: url(../../assets/images/bankDetail/1.png); |
||||||
|
} |
||||||
|
} |
||||||
|
.line { |
||||||
|
@apply flex mb-3; |
||||||
|
.label { |
||||||
|
@apply text-sm text-[#333] font-semibold; |
||||||
|
} |
||||||
|
.val { |
||||||
|
@apply text-sm text-[#333]; |
||||||
|
} |
||||||
|
} |
||||||
|
.user { |
||||||
|
@apply p-4; |
||||||
|
background: url(../../assets/images/bankDetail/3.png) 0 0/100% 100% no-repeat; |
||||||
|
} |
||||||
|
</style> |
@ -0,0 +1,80 @@ |
|||||||
|
<template> |
||||||
|
<div> |
||||||
|
<el-tabs v-model="curTab" |
||||||
|
@tab-click="tabChange"> |
||||||
|
<el-tab-pane label="产品要素" |
||||||
|
name="tab1"> |
||||||
|
<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, computed, watch, onMounted } from 'vue'; |
||||||
|
import { ElMessage } from 'element-plus'; |
||||||
|
import type { TabsPaneContext } from 'element-plus'; |
||||||
|
import { findById } from '@/api/bank'; |
||||||
|
import { useRouter, useRoute } from 'vue-router'; |
||||||
|
|
||||||
|
defineProps({ modelValue: { type: Object, required: true } }); |
||||||
|
defineEmits({ 'update:form': null }); |
||||||
|
|
||||||
|
const router = useRouter(); |
||||||
|
const route = useRoute(); |
||||||
|
const id = computed(() => +route.query.id); |
||||||
|
const curTab = ref<string>('tab1'); |
||||||
|
const data = ref<any>(); |
||||||
|
|
||||||
|
// tab切换回调 |
||||||
|
const tabChange = (tab: TabsPaneContext, event: Event) => { |
||||||
|
console.log(tab, event); |
||||||
|
}; |
||||||
|
// 详情 |
||||||
|
const getDetail = async () => { |
||||||
|
if (id.value) { |
||||||
|
try { |
||||||
|
const { data } = await findById(id.value); |
||||||
|
data.value = data; |
||||||
|
} finally { |
||||||
|
} |
||||||
|
} |
||||||
|
}; |
||||||
|
watch( |
||||||
|
() => route.query, |
||||||
|
() => { |
||||||
|
getDetail(); |
||||||
|
}, |
||||||
|
{ |
||||||
|
immediate: true, |
||||||
|
}, |
||||||
|
); |
||||||
|
onMounted(() => {}); |
||||||
|
</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> |