mirror of
https://gitee.com/ccnetcore/Yi
synced 2026-04-15 13:46:36 +08:00
251 lines
5.4 KiB
Vue
251 lines
5.4 KiB
Vue
<script setup lang="ts">
|
|
/**
|
|
* FontAwesome 图标演示组件
|
|
* 展示不同大小和样式的图标
|
|
*/
|
|
|
|
const commonIcons = [
|
|
'check',
|
|
'xmark',
|
|
'plus',
|
|
'minus',
|
|
'trash',
|
|
'pen-to-square',
|
|
'magnifying-glass',
|
|
'rotate-right',
|
|
'download',
|
|
'upload',
|
|
'user',
|
|
'gear',
|
|
'eye',
|
|
'eye-slash',
|
|
'lock',
|
|
'folder',
|
|
'file',
|
|
'image',
|
|
'comment',
|
|
'bell',
|
|
'heart',
|
|
'star',
|
|
'clock',
|
|
'calendar',
|
|
'share-nodes',
|
|
];
|
|
|
|
const sizes = ['xs', 'sm', 'lg', 'xl', '2x'] as const;
|
|
</script>
|
|
|
|
<template>
|
|
<div class="font-awesome-demo">
|
|
<h2>FontAwesome 图标演示</h2>
|
|
|
|
<section>
|
|
<h3>基础图标</h3>
|
|
<div class="icon-grid">
|
|
<div v-for="icon in commonIcons" :key="icon" class="icon-item">
|
|
<FontAwesomeIcon :icon="icon" />
|
|
<span>{{ icon }}</span>
|
|
</div>
|
|
</div>
|
|
</section>
|
|
|
|
<section>
|
|
<h3>不同尺寸</h3>
|
|
<div class="size-demo">
|
|
<div v-for="size in sizes" :key="size" class="size-item">
|
|
<FontAwesomeIcon icon="star" :size="size" />
|
|
<span>{{ size }}</span>
|
|
</div>
|
|
</div>
|
|
</section>
|
|
|
|
<section>
|
|
<h3>动画效果</h3>
|
|
<div class="animation-demo">
|
|
<div class="anim-item">
|
|
<FontAwesomeIcon icon="spinner" spin />
|
|
<span>spin</span>
|
|
</div>
|
|
<div class="anim-item">
|
|
<FontAwesomeIcon icon="circle-notch" spin />
|
|
<span>circle-notch spin</span>
|
|
</div>
|
|
<div class="anim-item">
|
|
<FontAwesomeIcon icon="heart" pulse />
|
|
<span>pulse</span>
|
|
</div>
|
|
</div>
|
|
</section>
|
|
|
|
<section>
|
|
<h3>旋转</h3>
|
|
<div class="rotation-demo">
|
|
<div class="rot-item">
|
|
<FontAwesomeIcon icon="arrow-up" :rotation="0" />
|
|
<span>0°</span>
|
|
</div>
|
|
<div class="rot-item">
|
|
<FontAwesomeIcon icon="arrow-up" :rotation="90" />
|
|
<span>90°</span>
|
|
</div>
|
|
<div class="rot-item">
|
|
<FontAwesomeIcon icon="arrow-up" :rotation="180" />
|
|
<span>180°</span>
|
|
</div>
|
|
<div class="rot-item">
|
|
<FontAwesomeIcon icon="arrow-up" :rotation="270" />
|
|
<span>270°</span>
|
|
</div>
|
|
</div>
|
|
</section>
|
|
|
|
<section>
|
|
<h3>实际应用示例</h3>
|
|
<div class="examples">
|
|
<button class="example-btn">
|
|
<FontAwesomeIcon icon="magnifying-glass" />
|
|
搜索
|
|
</button>
|
|
<button class="example-btn primary">
|
|
<FontAwesomeIcon icon="check" />
|
|
确认
|
|
</button>
|
|
<button class="example-btn danger">
|
|
<FontAwesomeIcon icon="trash" />
|
|
删除
|
|
</button>
|
|
<button class="example-btn">
|
|
<FontAwesomeIcon icon="download" />
|
|
下载
|
|
</button>
|
|
<button class="example-btn">
|
|
<FontAwesomeIcon icon="share-nodes" />
|
|
分享
|
|
</button>
|
|
</div>
|
|
</section>
|
|
</div>
|
|
</template>
|
|
|
|
<style scoped lang="scss">
|
|
.font-awesome-demo {
|
|
padding: 20px;
|
|
max-width: 1200px;
|
|
margin: 0 auto;
|
|
|
|
h2 {
|
|
margin-bottom: 30px;
|
|
color: var(--el-text-color-primary);
|
|
}
|
|
|
|
h3 {
|
|
margin: 30px 0 15px;
|
|
color: var(--el-text-color-regular);
|
|
border-bottom: 1px solid var(--el-border-color);
|
|
padding-bottom: 10px;
|
|
}
|
|
|
|
section {
|
|
margin-bottom: 40px;
|
|
}
|
|
|
|
.icon-grid {
|
|
display: grid;
|
|
grid-template-columns: repeat(auto-fill, minmax(100px, 1fr));
|
|
gap: 15px;
|
|
|
|
.icon-item {
|
|
display: flex;
|
|
flex-direction: column;
|
|
align-items: center;
|
|
padding: 15px;
|
|
border: 1px solid var(--el-border-color);
|
|
border-radius: 8px;
|
|
transition: all 0.3s;
|
|
|
|
&:hover {
|
|
border-color: var(--el-color-primary);
|
|
background-color: var(--el-color-primary-light-9);
|
|
transform: translateY(-2px);
|
|
}
|
|
|
|
span {
|
|
margin-top: 8px;
|
|
font-size: 12px;
|
|
color: var(--el-text-color-secondary);
|
|
}
|
|
}
|
|
}
|
|
|
|
.size-demo,
|
|
.animation-demo,
|
|
.rotation-demo {
|
|
display: flex;
|
|
gap: 30px;
|
|
flex-wrap: wrap;
|
|
|
|
.size-item,
|
|
.anim-item,
|
|
.rot-item {
|
|
display: flex;
|
|
flex-direction: column;
|
|
align-items: center;
|
|
padding: 20px;
|
|
border: 1px solid var(--el-border-color);
|
|
border-radius: 8px;
|
|
min-width: 80px;
|
|
|
|
span {
|
|
margin-top: 10px;
|
|
font-size: 12px;
|
|
color: var(--el-text-color-secondary);
|
|
}
|
|
}
|
|
}
|
|
|
|
.examples {
|
|
display: flex;
|
|
gap: 15px;
|
|
flex-wrap: wrap;
|
|
|
|
.example-btn {
|
|
display: flex;
|
|
align-items: center;
|
|
gap: 8px;
|
|
padding: 10px 20px;
|
|
border: 1px solid var(--el-border-color);
|
|
border-radius: 6px;
|
|
background: var(--el-bg-color);
|
|
color: var(--el-text-color-primary);
|
|
cursor: pointer;
|
|
transition: all 0.3s;
|
|
|
|
&:hover {
|
|
border-color: var(--el-color-primary);
|
|
color: var(--el-color-primary);
|
|
}
|
|
|
|
&.primary {
|
|
background-color: var(--el-color-primary);
|
|
color: white;
|
|
border-color: var(--el-color-primary);
|
|
|
|
&:hover {
|
|
background-color: var(--el-color-primary-light-3);
|
|
}
|
|
}
|
|
|
|
&.danger {
|
|
background-color: var(--el-color-danger);
|
|
color: white;
|
|
border-color: var(--el-color-danger);
|
|
|
|
&:hover {
|
|
background-color: var(--el-color-danger-light-3);
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
</style>
|