diff --git a/WebVue/src/components/dashboard/DashboardBottomNav.vue b/WebVue/src/components/dashboard/DashboardBottomNav.vue
new file mode 100644
index 0000000..afcaf4e
--- /dev/null
+++ b/WebVue/src/components/dashboard/DashboardBottomNav.vue
@@ -0,0 +1,59 @@
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/WebVue/src/components/dashboard/DashboardGroupCard.vue b/WebVue/src/components/dashboard/DashboardGroupCard.vue
new file mode 100644
index 0000000..12e8d6b
--- /dev/null
+++ b/WebVue/src/components/dashboard/DashboardGroupCard.vue
@@ -0,0 +1,208 @@
+
+
+
+
+
+ {{ badge || name }}
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/WebVue/src/components/dashboard/DashboardHero.vue b/WebVue/src/components/dashboard/DashboardHero.vue
new file mode 100644
index 0000000..19f5e8e
--- /dev/null
+++ b/WebVue/src/components/dashboard/DashboardHero.vue
@@ -0,0 +1,252 @@
+
+
+
+
+
+
+
+ {{ avatarText }}
+
+
+
+
+ {{ t("layout.header.amentUserLocalName") }}
+
+
+
+ {{ t("layout.header.amentPassword") }}
+
+
+
+ {{ biometricButtonLabel }}
+
+
+
+
+ {{ t("layout.header.logout") }}
+
+
+
+
+
+
+
+
+
你好,{{ userName }} 👋
+
欢迎回家,记录新美好。
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/WebVue/src/layout/home.vue b/WebVue/src/layout/home.vue
new file mode 100644
index 0000000..55f1f8b
--- /dev/null
+++ b/WebVue/src/layout/home.vue
@@ -0,0 +1,65 @@
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/WebVue/src/views/dashboard.vue b/WebVue/src/views/dashboard.vue
index 6230ce7..b0097e8 100644
--- a/WebVue/src/views/dashboard.vue
+++ b/WebVue/src/views/dashboard.vue
@@ -7,8 +7,8 @@
+ :color="grp.color" :soft="grp.soft" :icon="grp.icon" :layout="grp.layout" :cover="grp.cover"
+ :badge="grp.badge" :items="grp.items" @navigate="onpush" />
@@ -27,7 +27,7 @@ import { useRouter } from "vue-router";
import securityUserService from "@/service/security/securityUserService";
import type { SecurityFunctionDisplayData } from "@/data/auto/securityFunctionDisplayData";
import DashboardHero from "@/components/dashboard/DashboardHero.vue";
-import DashboardGroupCard from "@/components/dashboard/DashboardGroupCard.vue";
+import DashboardGroupCard, { type GroupCardItem } from "@/components/dashboard/DashboardGroupCard.vue";
import DashboardBottomNav from "@/components/dashboard/DashboardBottomNav.vue";
interface NavItem {
@@ -51,13 +51,18 @@ const groupDefs: {
soft: string;
icon: string;
layout: 2 | 3;
+ /** 封面图片地址(可选),缺省时由卡片用主题色渐变占位 */
+ cover?: string;
+ /** 封面左上角标签(可选),缺省时显示分组名称 */
+ badge?: string;
}[] = [
- { key: "disk", name: "网盘", color: "#1677ff", soft: "#e6f4ff", icon: "dbank", layout: 2 },
- { key: "share", name: "共享中心", color: "#fa8c16", soft: "#fff7e6", icon: "dgroup", layout: 2 },
+ { key: "disk", name: "网盘", color: "#1677ff", soft: "#e6f4ff", icon: "dbank", layout: 2},
+ { key: "share", name: "共享中心", color: "#fa8c16", soft: "#fff7e6", icon: "dgroup", layout: 2},
+ // { key: "photo", name: "相册", color: "#722ed1", soft: "#f9f0ff", icon: "picture", layout: 3, cover: "/images/main/p4.png" },
{ key: "photo", name: "相册", color: "#722ed1", soft: "#f9f0ff", icon: "picture", layout: 3 },
- { key: "audio", name: "音乐", color: "#eb2f96", soft: "#fff0f6", icon: "foldermp3", layout: 3 },
+ { key: "audio", name: "音乐", color: "#eb2f96", soft: "#fff0f6", icon: "foldermp3", layout: 3},
{ key: "video", name: "视频", color: "#13c2c2", soft: "#e6fffb", icon: "foldervideo", layout: 3 },
- { key: "family", name: "族谱管理", color: "#52c41a", soft: "#f6ffed", icon: "family", layout: 2 },
+ { key: "family", name: "族谱管理", color: "#52c41a", soft: "#f6ffed", icon: "family", layout: 2},
{ key: "other", name: "更多", color: "#8a919f", soft: "#f5f6f8", icon: "gailan", layout: 3 },
];
@@ -86,19 +91,46 @@ const GROUP_OF: Record