mirror of
https://github.com/CorentinTh/it-tools.git
synced 2025-01-19 14:00:31 +08:00
feat(page): home page layout
This commit is contained in:
parent
3db4f91c27
commit
57fd14a199
4 changed files with 65 additions and 3 deletions
45
src/components/ToolCard.vue
Normal file
45
src/components/ToolCard.vue
Normal file
|
@ -0,0 +1,45 @@
|
||||||
|
<template>
|
||||||
|
<router-link :to="tool.path">
|
||||||
|
<n-card class="tool-card">
|
||||||
|
<n-icon class="icon" size="35">
|
||||||
|
<component :is="tool.icon" />
|
||||||
|
</n-icon>
|
||||||
|
<n-h3 class="title">{{ tool.name }}</n-h3>
|
||||||
|
<div class="description">
|
||||||
|
<n-ellipsis :line-clamp="2" :tooltip="false">{{ tool.description }}</n-ellipsis>
|
||||||
|
</div>
|
||||||
|
</n-card>
|
||||||
|
</router-link>
|
||||||
|
</template>
|
||||||
|
|
||||||
|
<script setup lang="ts">
|
||||||
|
import type { ITool } from '@/tools/Tool';
|
||||||
|
import { toRefs, defineProps } from 'vue';
|
||||||
|
import { ArrowRight } from '@vicons/tabler'
|
||||||
|
|
||||||
|
const props = defineProps<{ tool: ITool & { category: string } }>()
|
||||||
|
const { tool } = toRefs(props)
|
||||||
|
|
||||||
|
</script>
|
||||||
|
|
||||||
|
<style lang="less" scoped>
|
||||||
|
a {
|
||||||
|
text-decoration: none;
|
||||||
|
}
|
||||||
|
|
||||||
|
.tool-card {
|
||||||
|
&:hover {
|
||||||
|
border-color: var(--n-color-target);
|
||||||
|
}
|
||||||
|
.icon {
|
||||||
|
opacity: 0.7;
|
||||||
|
}
|
||||||
|
.title {
|
||||||
|
margin: 5px 0;
|
||||||
|
}
|
||||||
|
.description {
|
||||||
|
opacity: 0.7;
|
||||||
|
margin: 5px 0;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
</style>
|
|
@ -1,11 +1,21 @@
|
||||||
<script setup lang="ts">
|
<script setup lang="ts">
|
||||||
|
import { toolsWithCategory } from '@/tools';
|
||||||
|
import ToolCard from '../components/ToolCard.vue';
|
||||||
</script>
|
</script>
|
||||||
|
|
||||||
<template>
|
<template>
|
||||||
<div>Lorem, ipsum dolor sit amet consectetur adipisicing elit. Minima velit nesciunt esse iusto explicabo? Corporis, optio inventore doloremque sed maxime repellendus debitis recusandae atque nulla corrupti cum sit molestiae ad.</div>
|
<div class="home-page">
|
||||||
|
<n-grid x-gap="12" y-gap="12" :cols="3">
|
||||||
|
<n-gi v-for="tool in toolsWithCategory" :key="tool.name">
|
||||||
|
<tool-card :tool="tool" />
|
||||||
|
</n-gi>
|
||||||
|
</n-grid>
|
||||||
|
</div>
|
||||||
</template>
|
</template>
|
||||||
|
|
||||||
|
|
||||||
<style scoped>
|
<style scoped lang="less">
|
||||||
|
.home-page {
|
||||||
|
padding-top: 50px;
|
||||||
|
}
|
||||||
</style>
|
</style>
|
|
@ -39,10 +39,15 @@ import {
|
||||||
NMessageProvider,
|
NMessageProvider,
|
||||||
NPageHeader,
|
NPageHeader,
|
||||||
NResult,
|
NResult,
|
||||||
|
NH3,
|
||||||
|
NEllipsis,
|
||||||
|
NTag,
|
||||||
} from 'naive-ui';
|
} from 'naive-ui';
|
||||||
|
|
||||||
const components = [
|
const components = [
|
||||||
|
NTag,
|
||||||
NResult,
|
NResult,
|
||||||
|
NEllipsis,
|
||||||
NPageHeader,
|
NPageHeader,
|
||||||
NMessageProvider,
|
NMessageProvider,
|
||||||
NLayout,
|
NLayout,
|
||||||
|
@ -50,6 +55,7 @@ const components = [
|
||||||
NMenu,
|
NMenu,
|
||||||
NDropdown,
|
NDropdown,
|
||||||
NH2,
|
NH2,
|
||||||
|
NH3,
|
||||||
NP,
|
NP,
|
||||||
NAlert,
|
NAlert,
|
||||||
NTooltip,
|
NTooltip,
|
||||||
|
|
|
@ -20,3 +20,4 @@ export const toolsByCategory: ToolCategory[] = [
|
||||||
];
|
];
|
||||||
|
|
||||||
export const tools = toolsByCategory.flatMap(({ components }) => components);
|
export const tools = toolsByCategory.flatMap(({ components }) => components);
|
||||||
|
export const toolsWithCategory = toolsByCategory.flatMap(({ components, name }) => components.map((tool) => ({ category: name, ...tool })));
|
||||||
|
|
Loading…
Reference in a new issue