From d8c559b5b1077ef0f916a245b45a5d752db8cd55 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E8=B5=B5=E5=BF=A0=E6=9E=97?= <170083662@qq.com> Date: Thu, 9 Apr 2026 00:58:15 +0800 Subject: [PATCH] =?UTF-8?q?feat(ui):=20=E6=96=B0=E5=A2=9E=E2=80=9C?= =?UTF-8?q?=E5=A4=A9=E5=A4=A9=E7=B3=BB=E7=BB=9F=E2=80=9DERP=E7=AE=A1?= =?UTF-8?q?=E7=90=86=E5=B9=B3=E5=8F=B0=E4=B8=BB=E9=A1=B5=E5=B8=83=E5=B1=80?= =?UTF-8?q?=E4=B8=8E=E6=8E=A7=E5=88=B6=E5=8F=B0=E9=A1=B5=E9=9D=A2=E4=BC=98?= =?UTF-8?q?=E5=8C=96?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - 为控制台首页添加页面标题动态设置 - 为应用中心页面添加页面标题动态设置 - 修改控制台布局,实现动态浏览器标签页标题更新 - 新增“天天系统”ERP管理平台主页,包含侧边栏导航、顶部栏及数据概览模块 - 实现主页搜索框、通知、语言和用户信息区域交互 - 添加欢迎区、快捷入口、最近使用应用列表及应用详情抽屉功能 - 支持小程序扫码弹窗展示和应用类型图标及颜色区分 - 优化页面样式,支持响应式布局及交互效果 - 更新Nuxt国际化重定向路径片段标识符以兼容新版本 --- .data/content/contents.sqlite | Bin 589824 -> 589824 bytes .nuxt/dev/index.mjs | 2 +- .nuxt/nitro.json | 6 +- .nuxt/nuxt.d.ts | 4 +- .nuxt/nuxt.node.d.ts | 4 +- .nuxt/tailwind/postcss.mjs | 2 +- .workbuddy/expert-history.json | 17 + .workbuddy/memory/MEMORY.md | 0 app/layouts/console.vue | 5 + app/pages/console/apps.vue | 5 + app/pages/console/index.vue | 5 + app/pages/index.vue | 784 ++++++++++++++---------- app/pages/tiantian-system/index.vue | 597 ++++++++++++++++++ docs/规划文档/create-doc.cjs | 681 ++++++++++++++++++++ docs/规划文档/package.json | 5 + docs/规划文档/pnpm-lock.yaml | 163 +++++ docs/规划文档/功能菜单脑图.html | 461 ++++++++++++++ docs/规划文档/功能菜单规划.md | 122 ++++ docs/规划文档/天天系统功能需求规划.docx | Bin 0 -> 15510 bytes 应用主页工作台.html | 536 ++++++++++++++++ 20 files changed, 3083 insertions(+), 316 deletions(-) create mode 100644 .workbuddy/expert-history.json create mode 100644 .workbuddy/memory/MEMORY.md create mode 100644 app/pages/tiantian-system/index.vue create mode 100644 docs/规划文档/create-doc.cjs create mode 100644 docs/规划文档/package.json create mode 100644 docs/规划文档/pnpm-lock.yaml create mode 100644 docs/规划文档/功能菜单脑图.html create mode 100644 docs/规划文档/功能菜单规划.md create mode 100644 docs/规划文档/天天系统功能需求规划.docx create mode 100644 应用主页工作台.html diff --git a/.data/content/contents.sqlite b/.data/content/contents.sqlite index 9e23c4b0e9d678ac3c68dca280967dcf0a0ae7ef..27a276ff1f86b44f1e7ea551252552290c332887 100644 GIT binary patch delta 1503 zcmXxkdrVVT7yxj-`$pQHJ8_BrV2qWGZr0>+doprAs*w<7jd@C{nL z(Qo@>vrD!bk}Z}IdNvca`@>~fVyH1$Vl<{R4riuYjafD~6ZYK>Z~FVrx#ymK_ndq0 zIfjvI7`eghH!{=G(t_mmq4pNM1)2Tc+ZnKOV2*7Lh^tFA^PFS4*=^5+Rc6Tk6jpTh zI8O99fCxn7Jq~Giz;CA`wWHQixt?qwRiv6UkS(L? zsH`PkvYA-zR$D!>`fVlKh`*6S6WK(zlO1FyX(lbiN7~3PvYYH7dr2$VNA{BghV36P`2n#}9T8B{->mX@EI@ku&4MNX45q?`1Rv*aAHp7o0Uz;lsL{8M{8 zCK{A7bSUGtkTk?{PuS>cMFxe2F%;@G3fol*9WsUE0)=uuazz4H)GLoL*-Ca8p-klG z*SPRfomj$IulC##HM9{1>%y&?E>V{?=IrHf;*ne6#N@kD9)|KEhZ|n4lfhc-{}{5+ zXq2X!Zg)Cg>d~&T%c5J;VLjfytzE@)U0Gu?|OSU0G| zz~Y(!Usls)KF zA2HaBfn|aluhpqD(cLBb_`QfalR+&8N7T8zG^GB>U<?M#E4HAkKVbGoqN3yVy0(hs=JTt z9!N6u%~EVpLlJdo<9!jKl9~EL7uprM3KQQz20rjB(_t45T@rFIVZs#tBqU5==qZp3 zus9+d6lpRDrIL&P5ER~KczwNCgzi42$c$9Vc)eCxqU@Pb?`vtmiuuZW{Fx!pn3GMy zSZpp=F2Y`fsZurHSgeE@?Bji28UgB$#d_4Q%Lfd;exxejn7NSw-|KtDK6#*>!yp(^Mlo}YE#Xm~q VR{X>+*YKf)RKnmKm*UbZ_8-q?r_TTY delta 1214 zcmXw2e{54#6yACF-Fx4*w)eRqY%b6;#zvOS%?TtEfg(a+3|f9UkYAl_gej~;P(*~a zg5VD(g(sZw2T~ImS%R@++M^_}8Wn@dvJw;jfsjfNTm&rPFN|c~VtmQ@a^K1MzWbe< zb0U$7NTecG_Jp06mlxCV|HqEhJPUSz=t?0h8fb7e09)K>Ifp%yokQ+oXm;Z6JJ7VR z$8)g913C;HjCwrg_GmJ07TORaSHc`t6^C6~@ql3RBPYzjYXgFg{Rj}0QzqA5t*IM)G)3nvDU>TVyYgCf3!uSSwoO@}&oqnK>F3&%nV1h)K^|wl9%uxkPl0hxQ zmuue3BopvZ$&Su;{kI0A!&Wt>e-M>Nqh2Q)s>1bO7#`eu%a}{|Qc$F1xNVm%T#J!; zFo~+u@T)3(dQ+=Tt?Ss*-sXJvLM5h;v9V5~+eN{Q98kp4@{vlWWP-s)>i=F=3)n!{ zF3U-RuhzT}o((`H&blmJG(9ed6tv>D66nM`3W{idOm-`Hh0KV|HQps{XrsQ6(W214 z&DzkuCj|y}LjewlPu(? zj(x+2?n~Ax%zOidc-<=}pJv+MYh(u@t1#RtUAgitxNQy8Vj^se#n3dHi(5@+X>6I)!;crXiz(>e&%$&y z!>1_Nd#qVZ`npP7Q_zjyU1zg!Fe)r+vc-8XnSLQ%5G7Z$c)<8>E%`3)S;WUtS%m+g zU>`|v+zmWI|N?LK5tfHyc)_W;^X`DEZh8%`ikoY z4`}_55SkbrUG`XgDyjSCeNXP*Lo~r>-cZ<7q31F?DD7ObhbGkLlDF!t@$fPBKa{no oSL(k_+3GhPMYm>KUYmGGFKXe3Zp{H+n#W7~ql#1MG4po8zsV7Xod5s; diff --git a/.nuxt/dev/index.mjs b/.nuxt/dev/index.mjs index 38eaf39..db5f12d 100644 --- a/.nuxt/dev/index.mjs +++ b/.nuxt/dev/index.mjs @@ -2675,7 +2675,7 @@ const _xcUbjOGHb1DY_0q4vboOUFGJ6nlkQiqabJRmCaoRlCA = defineNitroPlugin(async (ni const localeSegment = detector.route(event.path); const pathLocale = isSupportedLocale(localeSegment) && localeSegment || void 0; const path = (pathLocale && url.pathname.slice(pathLocale.length + 1)) ?? url.pathname; - if (!url.pathname.includes("/_i18n/0FfD6CEv") && !isExistingNuxtRoute(path)) { + if (!url.pathname.includes("/_i18n/2i3X6Hlx") && !isExistingNuxtRoute(path)) { return; } const resolved = resolveRedirectPath(event, path, pathLocale, ctx.vueI18nOptions.defaultLocale, detector); diff --git a/.nuxt/nitro.json b/.nuxt/nitro.json index 977f020..99d1773 100644 --- a/.nuxt/nitro.json +++ b/.nuxt/nitro.json @@ -1,5 +1,5 @@ { - "date": "2026-04-08T09:07:42.267Z", + "date": "2026-04-08T09:45:03.280Z", "preset": "nitro-dev", "framework": { "name": "nuxt", @@ -9,9 +9,9 @@ "nitro": "2.12.8" }, "dev": { - "pid": 39171, + "pid": 41825, "workerAddress": { - "socketPath": "/var/folders/qz/k8gbknb502j_f8wbdcc8bs6h0000gn/T/nitro-worker-39171-1-1-6661.sock" + "socketPath": "/var/folders/qz/k8gbknb502j_f8wbdcc8bs6h0000gn/T/nitro-worker-41825-1-1-1011.sock" } } } \ No newline at end of file diff --git a/.nuxt/nuxt.d.ts b/.nuxt/nuxt.d.ts index 9ffa9e6..58a4706 100644 --- a/.nuxt/nuxt.d.ts +++ b/.nuxt/nuxt.d.ts @@ -1,9 +1,9 @@ /// -/// /// +/// +/// /// /// -/// /// /// /// diff --git a/.nuxt/nuxt.node.d.ts b/.nuxt/nuxt.node.d.ts index 80ec7d1..7865196 100644 --- a/.nuxt/nuxt.node.d.ts +++ b/.nuxt/nuxt.node.d.ts @@ -1,9 +1,9 @@ /// -/// /// +/// +/// /// /// -/// /// /// /// diff --git a/.nuxt/tailwind/postcss.mjs b/.nuxt/tailwind/postcss.mjs index 4fd8ff5..441bba4 100644 --- a/.nuxt/tailwind/postcss.mjs +++ b/.nuxt/tailwind/postcss.mjs @@ -1,4 +1,4 @@ -// generated by the @nuxtjs/tailwindcss module at 4/8/2026, 5:07:40 PM +// generated by the @nuxtjs/tailwindcss module at 4/9/2026, 12:56:45 AM import "@nuxtjs/tailwindcss/config-ctx" import configMerger from "@nuxtjs/tailwindcss/merger"; diff --git a/.workbuddy/expert-history.json b/.workbuddy/expert-history.json new file mode 100644 index 0000000..29ba47f --- /dev/null +++ b/.workbuddy/expert-history.json @@ -0,0 +1,17 @@ +{ + "version": 2, + "sessions": { + "996cbdf06e514047a153fd275dde6497": [ + { + "expertId": "SeniorDeveloper", + "name": "Will", + "profession": "高级开发工程师", + "avatarUrl": "https://acc-1258344699.cos.accelerate.myqcloud.com/workbuddy/experts/avatars/02-Engineering/SeniorDeveloper/SeniorDeveloper.png", + "promptUrl": "https://acc-1258344699.cos.accelerate.myqcloud.com/workbuddy/experts/experts/02-Engineering/SeniorDeveloper/SeniorDeveloper_zh.md", + "usedAt": 1775638741301, + "industryId": "all" + } + ] + }, + "lastUpdated": 1775667188805 +} \ No newline at end of file diff --git a/.workbuddy/memory/MEMORY.md b/.workbuddy/memory/MEMORY.md new file mode 100644 index 0000000..e69de29 diff --git a/app/layouts/console.vue b/app/layouts/console.vue index b5e768e..5d9dfb1 100644 --- a/app/layouts/console.vue +++ b/app/layouts/console.vue @@ -199,6 +199,11 @@ const currentPageTitle = computed(() => { return '控制台' }) +// 动态设置浏览器标签页标题 +useHead(() => ({ + title: currentPageTitle.value +})) + // 选中 key const selectedKeys = computed(() => { const path = route.path diff --git a/app/pages/console/apps.vue b/app/pages/console/apps.vue index 9a36a51..8f34916 100644 --- a/app/pages/console/apps.vue +++ b/app/pages/console/apps.vue @@ -221,6 +221,11 @@ import type { ShopOrder } from '@/api/shop/shopOrder/model' definePageMeta({ layout: 'console' }) +// 设置页面标题 +useHead({ + title: '应用中心' +}) + // ─── 用户信息 ──────────────────────────────────────────────── const userId = ref(import.meta.client ? localStorage.getItem('UserId') : null) const userIdNum = computed(() => (userId.value ? Number(userId.value) : 0)) diff --git a/app/pages/console/index.vue b/app/pages/console/index.vue index f1733ac..3382a41 100644 --- a/app/pages/console/index.vue +++ b/app/pages/console/index.vue @@ -154,6 +154,11 @@ const router = useRouter() definePageMeta({ layout: 'console' }) +// 设置页面标题 +useHead({ + title: '控制台' +}) + const userId = import.meta.client ? localStorage.getItem('UserId') : null // 快捷入口配置 diff --git a/app/pages/index.vue b/app/pages/index.vue index c60a627..ada7224 100644 --- a/app/pages/index.vue +++ b/app/pages/index.vue @@ -1,326 +1,496 @@