调整样式

This commit is contained in:
wcq 2023-10-11 16:50:10 +08:00
parent 70b4c7eb80
commit 83b707bc90
22 changed files with 548 additions and 65 deletions

View File

@ -8,7 +8,17 @@
name="viewport"
content="width=device-width,initial-scale=1.0,minimum-scale=1.0,maximum-scale=1.0"
/>
<title>维德评级</title>
<title>WideRating</title>
<style>
/* latin */
@font-face {
font-family: 'Monoton';
font-style: normal;
font-weight: 400;
src: url('/Monoton.ttf');
unicode-range: U+0000-00FF, U+0131, U+0152-0153, U+02BB-02BC, U+02C6, U+02DA, U+02DC, U+0304, U+0308, U+0329, U+2000-206F, U+2074, U+20AC, U+2122, U+2191, U+2193, U+2212, U+2215, U+FEFF, U+FFFD;
}
</style>
<link rel="icon" href="/favicon2.ico" />
<script>
window.process = {};

BIN
public/Monoton.ttf Normal file

Binary file not shown.

View File

@ -1,18 +1,18 @@
{
"Version": "4.5.0",
"Title": "维德评级",
"Title": "WideRating",
"FixedHeader": true,
"HiddenSideBar": false,
"MultiTagsCache": false,
"KeepAlive": true,
"Layout": "vertical",
"Theme": "default",
"DarkMode": true,
"DarkMode": false,
"Grey": false,
"Weak": false,
"HideTabs": false,
"SidebarStatus": true,
"EpThemeColor": "#855ae3",
"EpThemeColor": "#008efa",
"ShowLogo": true,
"ShowModel": "smart",
"MenuArrowIconNoTransition": true,

Binary file not shown.

Binary file not shown.

View File

@ -5,6 +5,14 @@
url("iconfont.ttf?t=1671895108120") format("truetype");
}
/*!* latin *!*/
/*@font-face {*/
/* font-family: "monoton";*/
/* src: url('monoton.ttf') format('ttf');*/
/* unicode-range: U+0000-00FF, U+0131, U+0152-0153, U+02BB-02BC, U+02C6, U+02DA, U+02DC, U+0304, U+0308, U+0329, U+2000-206F, U+2074, U+20AC, U+2122, U+2191, U+2193, U+2212, U+2215, U+FEFF, U+FFFD;*/
/*}*/
.iconfont {
font-family: "iconfont" !important;
font-size: 16px;

Binary file not shown.

BIN
src/assets/login_bg_bar.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.9 MiB

View File

@ -55,7 +55,7 @@ const toggleClick = () => {
@mouseenter="visible = true"
@mouseleave="visible = false"
/>
</el-tooltip>
</el-tooltip>z
</div>
</template>

View File

@ -19,7 +19,7 @@ const { title } = useNav();
class="sidebar-logo-link"
:to="getTopMenu()?.path ?? '/'"
>
<img src="/logo2.png" alt="logo" />
<!-- <img src="/logo2.png" alt="logo" />-->
<span class="sidebar-title">{{ title }}</span>
</router-link>
<router-link
@ -29,7 +29,7 @@ const { title } = useNav();
class="sidebar-logo-link"
:to="getTopMenu()?.path ?? '/'"
>
<img src="/logo2.png" alt="logo" />
<!-- <img src="/logo2.png" alt="logo" />-->
<span class="sidebar-title">{{ title }}</span>
</router-link>
</transition>
@ -55,12 +55,13 @@ const { title } = useNav();
}
.sidebar-title {
font-family: 'Monoton';
display: inline-block;
height: 32px;
margin: 2px 0 0 12px;
margin: 0 0 0 6px;
overflow: hidden;
font-size: 18px;
font-weight: 600;
font-size: 1.5rem;
font-weight: 100 !important;
line-height: 32px;
color: $subMenuActiveText;
text-overflow: ellipsis;

View File

@ -63,7 +63,11 @@ watch(
}
);
const systemRouter=computed(()=>{
return menuData.value.find(item=>item.name=='系统设置')
})
onMounted(() => {
console.log(menuData.value)
getSubMenuData();
emitter.on("logoChange", key => {
@ -85,31 +89,42 @@ onBeforeUnmount(() => {
<Logo v-if="showLogo" :collapse="isCollapse" />
<el-scrollbar
wrap-class="scrollbar-wrapper"
:class="[device === 'mobile' ? 'mobile' : 'pc']"
:class="[device === 'mobile' ? 'mobile' : 'pc h-full']"
>
<el-menu
router
unique-opened
mode="vertical"
class="outer-most select-none"
class="outer-most select-none flex flex-col h-full"
:collapse="isCollapse"
:default-active="defaultActive"
:collapse-transition="false"
>
<sidebar-item
v-for="routes in menuData"
:key="routes.path"
:item="routes"
:base-path="routes.path"
class="outer-most select-none"
/>
<div>
<sidebar-item
v-for="routes in menuData.filter(item=>item.name!='系统设置')"
:key="routes.path"
:item="routes"
:base-path="routes.path"
class="outer-most select-none"
/>
</div>
<div v-if="systemRouter" class="flex flex-col flex-1 justify-end bg-[#2c374a] dark:bg-[unset]">
<sidebar-item
:key="systemRouter.path"
:item="systemRouter"
:base-path="systemRouter.path"
class="outer-most select-none system border-t-[1px]"
/>
</div>
</el-menu>
</el-scrollbar>
<leftCollapse
v-if="device !== 'mobile'"
:is-active="pureApp.sidebar.opened"
@toggleClick="toggleSideBar"
/>
<!-- <leftCollapse-->
<!-- v-if="device !== 'mobile'"-->
<!-- :is-active="pureApp.sidebar.opened"-->
<!-- @toggleClick="toggleSideBar"-->
<!-- />-->
</div>
</template>
@ -117,4 +132,16 @@ onBeforeUnmount(() => {
:deep(.el-loading-mask) {
opacity: 0.45;
}
:deep(.el-scrollbar__view){
height: 100%;
}
</style>
<style>
.system::before {
//inset:0 0 !important;
//margin: 0 !important;
//border-radius: 0 !important;
}
</style>

View File

@ -15,22 +15,22 @@ export function useDataThemeChange() {
const themeColors = ref<Array<themeColorsType>>([
/* 道奇蓝(默认) */
{ color: "#1b2a47", themeColor: "default" },
/* 亮白色 */
{ color: "#ffffff", themeColor: "light" },
/* 猩红色 */
{ color: "#f5222d", themeColor: "dusk" },
/* 橙红色 */
{ color: "#fa541c", themeColor: "volcano" },
/* 金色 */
{ color: "#fadb14", themeColor: "yellow" },
/* 绿宝石 */
{ color: "#13c2c2", themeColor: "mingQing" },
/* 酸橙绿 */
{ color: "#52c41a", themeColor: "auroraGreen" },
/* 深粉色 */
{ color: "#eb2f96", themeColor: "pink" },
/* 深紫罗兰色 */
{ color: "#502e7e", themeColor: "saucePurple" }
// /* 亮白色 */
// { color: "#ffffff", themeColor: "light" },
// /* 猩红色 */
// { color: "#f5222d", themeColor: "dusk" },
// /* 橙红色 */
// { color: "#fa541c", themeColor: "volcano" },
// /* 金色 */
// { color: "#fadb14", themeColor: "yellow" },
// /* 绿宝石 */
// { color: "#13c2c2", themeColor: "mingQing" },
// /* 酸橙绿 */
// { color: "#52c41a", themeColor: "auroraGreen" },
// /* 深粉色 */
// { color: "#eb2f96", themeColor: "pink" },
// /* 深紫罗兰色 */
// { color: "#502e7e", themeColor: "saucePurple" }
]);
const { $storage } = useGlobal<GlobalPropertiesApi>();

View File

@ -6,16 +6,30 @@ import {type multipleScopeVarsOptions} from "@pureadmin/theme";
/** 预设主题色 */
const themeColors = {
// default: {
// subMenuActiveText: "#fff",
// // menuBg: "#271b3d",
// menuBg: "linear-gradient(0deg, rgb(41 18 49) 28%, rgb(42 30 72) 100%, rgb(0, 212, 255) 100%)",
// menuHover: "#4091f7",
// subMenuBg: "#231531",
// subMenuActiveBg: "#9840f7",
// menuText: "rgb(254 254 254 / 90%)",
// // sidebarLogo: "linear-gradient(85deg, rgb(67 39 113) 38%, rgb(91 0 132) 100%, rgba(0,212,255,1) 100%)",
// sidebarLogo: "#281b41",
// // sidebarLogo: "#422e6c",
// menuTitleHover: "#fff",
// menuActiveBefore: "#4091f7"
// },
default: {
subMenuActiveText: "#fff",
// menuBg: "#271b3d",
menuBg: "linear-gradient(0deg, rgb(41 18 49) 28%, rgb(42 30 72) 100%, rgb(0, 212, 255) 100%)",
menuBg: "#334154",
menuHover: "#4091f7",
subMenuBg: "#231531",
subMenuActiveBg: "#9840f7",
subMenuBg: "#222d3c",
subMenuActiveBg: "#334154",
menuText: "rgb(254 254 254 / 90%)",
// sidebarLogo: "linear-gradient(85deg, rgb(67 39 113) 38%, rgb(91 0 132) 100%, rgba(0,212,255,1) 100%)",
sidebarLogo: "#281b41",
sidebarLogo: "#3d4e63",
// sidebarLogo: "#422e6c",
menuTitleHover: "#fff",
menuActiveBefore: "#4091f7"

View File

@ -13,7 +13,8 @@ const themeColors = {
subMenuBg: "#080d1e",
subMenuActiveBg: "#4091f7",
menuText: "rgb(254 254 254 / 90%)",
sidebarLogo: "#2f315b",
// sidebarLogo: "#2f315b",
sidebarLogo: "#3d4e63",
menuTitleHover: "#fff",
menuActiveBefore: "#4091f7"
},

View File

@ -17,7 +17,16 @@ export default {
name: "dashboard",
component: () => import("@/views/dashboard/dashboard.vue"),
meta: {
title: "首页",
title: "评级看板",
showLink: VITE_HIDE_HOME === "true" ? false : true
}
},
{
path: "/dashboard2",
name: "dashboard2",
component: () => import("@/views/dashboard/dashboard2.vue"),
meta: {
title: "评级动态",
showLink: VITE_HIDE_HOME === "true" ? false : true
}
},

View File

@ -23,3 +23,5 @@

View File

@ -11,14 +11,19 @@
height: 100vh;
display: grid;
grid-template-columns: repeat(2, 1fr);
grid-gap: 18rem;
padding: 0 2rem;
/*grid-gap: 18rem;*/
/*padding: 0 2rem;*/
}
.img {
display: flex;
justify-content: flex-end;
justify-content: center;
align-items: center;
background: radial-gradient(at left top, #2D77D2, #FFFFE3);
}
html[class*="dark"] .img{
background :radial-gradient(at left top, #3e597a, #00084b);
}
.img img {
@ -29,6 +34,7 @@
display: flex;
align-items: center;
text-align: center;
justify-content: center;
}
.login-form {
@ -49,7 +55,7 @@
@media screen and (max-width: 1180px) {
.login-container {
grid-gap: 9rem;
/*grid-gap: 9rem;*/
}
.login-form {
@ -88,3 +94,5 @@
justify-content: center;
}
}

View File

@ -28,6 +28,7 @@ body {
font-family: "Helvetica Neue", Helvetica, "PingFang SC", "Hiragino Sans GB",
"Microsoft YaHei", "微软雅黑", Arial, sans-serif;
line-height: inherit;
font-weight: bold;
-moz-osx-font-smoothing: grayscale;
-webkit-font-smoothing: antialiased;
text-rendering: optimizelegibility;

View File

@ -103,7 +103,7 @@
&.has-logo {
.el-scrollbar.pc {
/* logo: 48px、leftCollapse: 40px、leftCollapse-shadow: 4px */
height: calc(100% - 92px);
height: calc(100% - 48px);
}
.el-scrollbar.mobile {
@ -178,7 +178,7 @@
margin: 4px 0;
clear: both;
content: "";
background: var(--el-color-primary) !important;
background: #697d93 !important;
border-radius: 3px;
}
@ -227,7 +227,7 @@
margin: 4px 0;
clear: both;
content: "";
background: var(--el-color-primary) !important;
background: #697d93 !important;
border-radius: 3px;
}
}
@ -293,7 +293,7 @@
inset: 0 8px;
clear: both;
content: "";
background: var(--el-color-primary) !important;
background: #697d93 !important;
border-radius: 3px;
}
@ -382,7 +382,7 @@
inset: 0 5px;
clear: both;
content: "";
background: var(--el-color-primary) !important;
background: #697d93 !important;
border-radius: 3px;
}
}

View File

@ -19,3 +19,5 @@
@apply dark:text-white dark:hover:!bg-[#242424];
}
}

View File

@ -0,0 +1,393 @@
<template>
<div class="h-full w-full ">
<div class="w-full h-full flex flex-col gap-4">
<div class="flex-1 flex gap-4 min-h-[20rem] justify-around">
<div class="flex-1 dash-item bg-white dark:bg-[var(--el-bg-color)]" id="dash-1"></div>
<div class="flex-1 dash-item bg-white dark:bg-[var(--el-bg-color)]" id="dash-2"></div>
<div class="flex-1 dash-item bg-white dark:bg-[var(--el-bg-color)] flex flex-col" id="dash-3">
<div class="flex justify-between mb-1" style="font-weight: 100;">
<div style="opacity: 0.7">
我的项目
</div>
<div>
<el-button type="primary" size="small">进入作业页面</el-button>
</div>
</div>
<div class="border-line"></div>
<div class="flex flex-col flex-1">
<div class="flex-1">
<div style="font-size: 0.9rem;font-weight: 400" class="my-2">今日截止项目</div>
<div class="">a</div>
<div>a</div>
<div>a</div>
</div>
<div class="flex-1">
<div style="font-size: 0.9rem;font-weight: 400" class="my-2">待完成的项目</div>
<div>a</div>
<div>a</div>
<div>a</div>
</div>
</div>
</div>
</div>
<div class="flex-1 flex flex-col pb-4 bg-white dark:bg-[var(--el-bg-color)]" style="overflow-y: auto">
<div style="font-weight: 100;opacity: 0.7" class="m-2 mb-0.5">项目列表</div>
<div class="border-line"></div>
<div class="flex-1 overflow-y-auto">
<el-table :data="tableData" height="100%">
<el-table-column prop="projectName" label="项目名称"/>
<el-table-column prop="customerName" label="客户"/>
<el-table-column prop="state" label="状态"/>
<el-table-column prop="createTime" label="创建时间"/>
<el-table-column prop="finishTime" label="截止时间"/>
<el-table-column prop="projectManager" label="项目经理"/>
<el-table-column prop="analyst" label="分析师"/>
<el-table-column label="操作">
<template #default>
<el-button type="primary" link>查看</el-button>
</template>
</el-table-column>
</el-table>
</div>
</div>
</div>
</div>
</template>
<script setup lang="ts">
import {onMounted, ref, watch} from "vue";
defineOptions({
name: "dashboard2"
})
import * as echarts from 'echarts/core';
import {
TitleComponent,
TooltipComponent,
LegendComponent
} from 'echarts/components';
import {PieChart} from 'echarts/charts';
import {LabelLayout} from 'echarts/features';
import {CanvasRenderer} from 'echarts/renderers';
import {GridComponent} from 'echarts/components';
import {LineChart} from 'echarts/charts';
import {UniversalTransition} from 'echarts/features';
import {useDark} from "@pureadmin/utils";
echarts.use([
TitleComponent,
GridComponent,
LineChart,
CanvasRenderer,
UniversalTransition,
TooltipComponent,
LegendComponent,
PieChart,
LabelLayout
]);
const tableData = ref<{
projectName: string
customerName: string
state: string
createTime: string
finishTime: string
projectManager: string
analyst: string
}[]>([
{
projectName: "项目1",
customerName: "客户1",
state: "材料审核",
createTime: "2023-09-27",
finishTime: "2023-09-27",
projectManager: "张三",
analyst: "李四",
}, {
projectName: "项目1",
customerName: "客户1",
state: "材料审核",
createTime: "2023-09-27",
finishTime: "2023-09-27",
projectManager: "张三",
analyst: "李四",
}, {
projectName: "项目1",
customerName: "客户1",
state: "材料审核",
createTime: "2023-09-27",
finishTime: "2023-09-27",
projectManager: "张三",
analyst: "李四",
}, {
projectName: "项目1",
customerName: "客户1",
state: "材料审核",
createTime: "2023-09-27",
finishTime: "2023-09-27",
projectManager: "张三",
analyst: "李四",
}, {
projectName: "项目1",
customerName: "客户1",
state: "材料审核",
createTime: "2023-09-27",
finishTime: "2023-09-27",
projectManager: "张三",
analyst: "李四",
}, {
projectName: "项目1",
customerName: "客户1",
state: "材料审核",
createTime: "2023-09-27",
finishTime: "2023-09-27",
projectManager: "张三",
analyst: "李四",
}, {
projectName: "项目1",
customerName: "客户1",
state: "材料审核",
createTime: "2023-09-27",
finishTime: "2023-09-27",
projectManager: "张三",
analyst: "李四",
}, {
projectName: "项目1",
customerName: "客户1",
state: "材料审核",
createTime: "2023-09-27",
finishTime: "2023-09-27",
projectManager: "张三",
analyst: "李四",
}, {
projectName: "项目1",
customerName: "客户1",
state: "材料审核",
createTime: "2023-09-27",
finishTime: "2023-09-27",
projectManager: "张三",
analyst: "李四",
}, {
projectName: "项目1",
customerName: "客户1",
state: "材料审核",
createTime: "2023-09-27",
finishTime: "2023-09-27",
projectManager: "张三",
analyst: "李四",
}, , {
projectName: "项目1",
customerName: "客户1",
state: "材料审核",
createTime: "2023-09-27",
finishTime: "2023-09-27",
projectManager: "张三",
analyst: "李四",
}, , {
projectName: "项目1",
customerName: "客户1",
state: "材料审核",
createTime: "2023-09-27",
finishTime: "2023-09-27",
projectManager: "张三",
analyst: "李四",
}, , {
projectName: "项目1",
customerName: "客户1",
state: "材料审核",
createTime: "2023-09-27",
finishTime: "2023-09-27",
projectManager: "张三",
analyst: "李四",
}, , {
projectName: "项目1",
customerName: "客户1",
state: "材料审核",
createTime: "2023-09-27",
finishTime: "2023-09-27",
projectManager: "张三",
analyst: "李四",
},
])
function createDash1() {
const chartDom = document.getElementById('dash-1');
const myChart = echarts.init(chartDom,isDark.isDark.value ? 'dark' : 'light');
let option;
option = {
backgroundColor: 'rgba(0,0,0,0)',
grid: {
bottom: '10%'
},
title: {
text: '已完成中小商企信用评级',
textStyle: {
fontSize: 16,
fontWeight: 100
},
},
tooltip: {
trigger: 'item'
},
legend: {
top: '37%',
right: 'right',
orient: 'vertical'
},
series: [
{
radius: ['40%', '40%'],
type: 'pie',
zlevel: -1,
data: [{value: 1048}],
tooltip: {show: false},
label: {
normal: {
show: true,
position: 'center', //
formatter: () => {
return `{b|总评级次数}\n\n{a|${1239}次}`;
},
rich: {
a: {
fontSize: 24,
fontWeight: 900
},
b: {
fontSize: 14,
fontWeight: 400,
}
}
}
}
},
{
name: 'Access From',
type: 'pie',
radius: ['40%', '68%'],
avoidLabelOverlap: false,
label: {
show: true,
position: 'inside',
formatter: '{d}%'
},
labelLine: {
show: false
},
data: [
{value: 1048, name: 'AAA+'},
{value: 735, name: 'AAA'},
{value: 580, name: 'AA'},
{value: 484, name: 'A'},
{value: 300, name: 'A-'}
]
}
]
};
option && myChart.setOption(option);
dashDict.dash1.chart=myChart
dashDict.dash1.option=option
window.addEventListener('resize', () => {
setTimeout(() => myChart?.resize(), 300)
})
}
function createDash2() {
const chartDom = document.getElementById('dash-2');
const myChart = echarts.init(chartDom,isDark.isDark.value ? 'dark' : 'light');
let option;
option = {
backgroundColor: 'rgba(0,0,0,0)',
title: {
text: '已完成中小商企信用评级',
textStyle: {
fontSize: 16,
fontWeight: 100
}
},
grid: {
bottom: '10%',
right: '5%'
},
xAxis: {
type: 'category',
boundaryGap: false,
data: ['9月27', '9月28', '9月29', '9月30', '10月1', '10月2', '10月3']
},
yAxis: {
type: 'value'
},
series: [
{
data: [10, 14, 13, 16, 22, 22, 19],
type: 'line',
areaStyle: {
color: new echarts.graphic.LinearGradient(0, 0, 0, 1, [
{
offset: 0,
color: 'rgba(0, 0, 200, 0.4)'
},
{
offset: 1,
color: 'rgba(0, 0, 0, 0)'
}
])
}
}
]
};
option && myChart.setOption(option);
dashDict.dash2.chart=myChart
dashDict.dash2.option=option
window.addEventListener('resize', () => {
setTimeout(() => myChart?.resize(), 200)
})
}
const dashDict = {
dash1: {
chart: null,
option: null,
id: 'dash-1'
},
dash2: {
chart: null,
option: null,
id: 'dash-2'
},
}
const isDark = useDark()
watch(() => isDark.isDark.value, (value: boolean) => {
Object.values(dashDict).forEach(dash => {
if (dash.chart) {
dash.chart.dispose();
dash.chart = echarts.init(document.getElementById(dash.id), value ? 'dark' : 'light'); //init'light'/'dark'
dash.option && dash.chart.setOption(dash.option);
}
}
)
})
onMounted(() => {
createDash1()
createDash2()
})
</script>
<style scoped>
.dash-item {
padding: 0.5rem;
}
.border-line {
height: 1px;
border: 1px solid rgba(119, 119, 119, 0.58);
}
</style>

View File

@ -12,7 +12,7 @@ import {bg, avatar, illustration} from "./utils/static";
import {useRenderIcon} from "@/components/ReIcon/src/hooks";
import {ref, reactive, toRaw, onMounted, onBeforeUnmount} from "vue";
import {useDataThemeChange} from "@/layout/hooks/useDataThemeChange";
import loginBgBar from "@/assets/login_bg_bar.png"
import dayIcon from "@/assets/svg/day.svg?component";
import darkIcon from "@/assets/svg/dark.svg?component";
import Lock from "@iconify-icons/ri/lock-fill";
@ -99,7 +99,7 @@ onBeforeUnmount(() => {
<template>
<div class="select-none">
<img :src="bg" class="wave login-bg"/>
<!-- <img :src="bg" class="wave login-bg"/>-->
<div class="flex-c absolute right-5 top-3">
<!-- 主题 -->
<el-switch
@ -111,17 +111,24 @@ onBeforeUnmount(() => {
/>
</div>
<div class="login-container">
<div class="img">
<component :is="toRaw(illustration)"/>
<div class="flex-c img flex-col" >
<div style="color:white;position: relative;margin-bottom: -4rem">
<span style="font-family: monoton;font-weight: 100;font-size: 2rem">{{ title }}</span>
<span style="font-size: 2rem;margin-left: 0.5rem">评级作业平台</span>
</div>
<img :src="loginBgBar" alt="">
</div>
<!-- <div class="img">-->
<!-- <component :is="toRaw(illustration)"/>-->
<!-- </div>-->
<div class="login-box">
<div class="login-form">
<div class="avatar flex-c">
<img src="@/assets/login/logo2.png" alt=""/>
</div>
<!-- <div class="avatar flex-c">-->
<!-- <img src="@/assets/login/logo2.png" alt=""/>-->
<!-- </div>-->
<!-- <avatar class="avatar" />-->
<Motion>
<h2 class="outline-none">{{ title }}</h2>
<h2 class="outline-none" style="color: var( --el-color-primary);font-size: 1.25rem;font-family: none;font-weight: 500">验证码登录</h2>
</Motion>
<el-form
@ -136,13 +143,13 @@ onBeforeUnmount(() => {
{
required: true,
message: '请输入邮箱或手机号',
trigger: 'blur'
}
]"
prop="account"
>
<el-input
clearable
:validate-event="false"
v-model="ruleForm.account"
placeholder="账户"
:prefix-icon="useRenderIcon(User)"
@ -156,7 +163,6 @@ onBeforeUnmount(() => {
{
required: true,
message: '请输入验证码',
trigger: 'blur'
}
]"
prop="code"
@ -165,6 +171,7 @@ onBeforeUnmount(() => {
clearable
v-model="ruleForm.code"
placeholder="验证码"
:validate-event="false"
:prefix-icon="useRenderIcon(Lock)"
>
<template #append>