refactor file tree

This commit is contained in:
Timi
2026-08-11 15:24:36 +08:00
parent 575d41b2e2
commit 819c1623eb
42 changed files with 86 additions and 86 deletions
+130
View File
@@ -0,0 +1,130 @@
<template>
<div class="entry-page">
<section class="entry-list">
<div v-for="item in visibleEntryList" :key="item.path" class="item" @click="go(item.path)">
<div class="body">
<t-icon :name="item.icon" size="1.75rem" />
<h2 v-text="item.title" />
</div>
<p v-text="item.desc" />
</div>
</section>
</div>
</template>
<script setup lang="ts">
import { useUserStore } from "timi-web";
import { permissionCodes } from "@/utils/permission";
defineOptions({
name: "HomeTab"
});
const router = useRouter();
const userStore = useUserStore();
const entryList = [
{
path: "/customer/quick-entry",
permission: permissionCodes.eventRecord.create,
icon: "scan",
title: "快速补录登记",
desc: "对以往未绑定二维码的客户进行快速补录和登记"
},
{
path: "/customer/quick-sign-in",
permission: permissionCodes.eventRecord.create,
icon: "scan",
title: "快速扫码登记",
desc: "扫码选择客户并按配置事件登记"
},
{
path: "/management/customers/create?redirect=/customers",
permission: permissionCodes.customer.create,
icon: "edit-1",
title: "录入",
desc: "新建客户档案并完善基础资料"
},
{
path: "/customer/registration",
permission: permissionCodes.eventRecord.create,
icon: "task-checked",
title: "登记",
desc: "按流程完成客户登记"
}
];
const visibleEntryList = computed(() => entryList.filter(item => userStore.hasPermissions(item.permission)));
async function go(path: string): Promise<void> {
await router.push(path);
}
</script>
<style scoped lang="less">
.entry-page {
padding: calc(var(--app-nav-height) + 1rem) 1rem 1rem 1rem;
.entry-list {
display: grid;
gap: .875rem;
grid-template-columns: repeat(2, minmax(0, 1fr));
}
.item {
color: #0f766e;
padding: 1rem;
display: flex;
position: relative;
text-align: center;
background: rgba(255, 255, 255, .92);
box-shadow: 0 .75rem 2rem rgba(15, 23, 42, .08);
align-items: center;
aspect-ratio: 1;
border-radius: 1.4rem;
flex-direction: column;
justify-content: center;
.body {
inset: 1rem;
display: flex;
gap: .5rem;
position: absolute;
align-items: center;
flex-direction: column;
justify-content: center;
}
h2 {
margin: 0;
font-size: 1.1rem;
line-height: 1.5;
}
p {
left: 1rem;
right: 1rem;
bottom: 1rem;
color: #7b889d;
margin: 0;
position: absolute;
font-size: .75rem;
line-height: 1.25;
}
}
}
:global(html.theme-dark) {
.entry-page {
.item {
background: rgba(15, 23, 42, .88);
box-shadow: 0 .75rem 2rem rgba(2, 6, 23, .32);
p {
color: #94a3b8;
}
}
}
}
</style>