From 1cd188f1db5cde3c683ce5bbb2ca89f155122158 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E5=BC=A0=E6=96=87=E6=B6=9B?= <1909118034@qq.com> Date: Mon, 3 Mar 2025 20:42:28 +0800 Subject: [PATCH] =?UTF-8?q?=E5=A2=9E=E5=8A=A0hooks=E6=96=B9=E6=B3=95=20?= =?UTF-8?q?=E5=88=A4=E6=96=AD=E8=B7=AF=E7=94=B1=E6=A0=88=E6=95=B0=E9=87=8F?= =?UTF-8?q?=20=E5=85=BC=E5=AE=B9=E5=BE=AE=E4=BF=A1=E5=B0=8F=E7=A8=8B?= =?UTF-8?q?=E5=BA=8F=E5=AF=BC=E8=88=AA=E6=A0=8F=E8=BF=94=E5=9B=9E=E9=A6=96?= =?UTF-8?q?=E9=A1=B5=E7=9A=84=E5=8A=9F=E8=83=BD(home)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- hooks/README.md | 70 ++++++++++++++++++ hooks/useNavigation.ts | 48 ++++++++++++ pagesA/my_order/detail.vue | 15 +++- pagesA/my_order/list.vue | 22 +++++- pagesA/task_hall/list.vue | 22 +++++- unocss/a-hua-unocss/index.scss | 130 +++++++++++++++++++++++++++------ 6 files changed, 282 insertions(+), 25 deletions(-) create mode 100644 hooks/README.md create mode 100644 hooks/useNavigation.ts diff --git a/hooks/README.md b/hooks/README.md new file mode 100644 index 0000000..73a7ad5 --- /dev/null +++ b/hooks/README.md @@ -0,0 +1,70 @@ +# Composables 使用指南 + +## 导航栏状态管理 (useNavigation) + +这个 composable 用于管理导航栏的状态,特别是检测当前路由栈中的页面数量,帮助决定是否显示返回首页按钮。 + +### 基本用法 + +```vue + + + +``` + +### 关键属性和方法 + +| 名称 | 类型 | 说明 | +| --- | --- | --- | +| hasMultiplePages | Ref\ | 路由栈中是否有多个页面,用于决定是否显示返回按钮 | +| isTabBarPage | Ref\ | 当前页面是否为 tabBar 页面,用于决定是否显示返回首页按钮 | +| checkRouteStack | Function | 检查并更新当前路由栈状态的方法,在页面显示时调用 | + +### 使用步骤 + +1. 在页面中导入 `useNavigation` +2. 在 `setup` 中调用此函数,获取状态和方法 +3. 在 `onShow` 生命周期中调用 `checkRouteStack()` 方法更新状态 +4. 在模板中根据 `hasMultiplePages` 和 `isTabBarPage` 状态显示或隐藏相应的按钮 + +### 注意事项 + +- 需要在每个页面的 `onShow` 生命周期中调用 `checkRouteStack()`,以确保状态始终是最新的 +- tabBar 页面列表已经预设为 `['pages/index/index', 'pages/message/index', 'pages/mine/index']`,如需修改请直接编辑 `useNavigation.ts` 文件 diff --git a/hooks/useNavigation.ts b/hooks/useNavigation.ts new file mode 100644 index 0000000..ab28d71 --- /dev/null +++ b/hooks/useNavigation.ts @@ -0,0 +1,48 @@ +import { ref } from 'vue' + +/** + * 导航栏状态管理 Composable + * 检查当前路由栈是否大于1条,用于决定是否显示返回首页按钮 + * @returns 包含路由栈状态和相关方法的对象 + */ +export function useNavigation() { + // 是否有多个页面在路由栈中 + const hasMultiplePages = ref(false) + // 当前页面是否为 tabBar 页面 + const isTabBarPage = ref(false) + // tabBar 页面路径列表 + const tabBarPages = [ + 'pages/index/index', + 'pages/message/index', + 'pages/mine/index' + ] + + /** + * 检查当前页面是否为 tabBar 页面 + */ + const checkIsTabBarPage = (currentRoute: string) => { + isTabBarPage.value = tabBarPages.includes(currentRoute) + } + + /** + * 检查当前路由栈状态 + * 在每个页面的 onShow 或 onLoad 生命周期调用此方法 + */ + const checkRouteStack = () => { + // 获取当前页面路由 + const pages = getCurrentPages() + // 获取当前页面路径 + const currentRoute = pages[pages.length - 1]?.route || '' + + // 更新路由栈状态 + hasMultiplePages.value = pages.length > 1 + // 检查是否为 tabBar 页面 + checkIsTabBarPage(currentRoute) + } + + return { + hasMultiplePages, + isTabBarPage, + checkRouteStack + } +} diff --git a/pagesA/my_order/detail.vue b/pagesA/my_order/detail.vue index 87ae5d6..8dfe123 100644 --- a/pagesA/my_order/detail.vue +++ b/pagesA/my_order/detail.vue @@ -6,7 +6,9 @@ safeAreaInsetTop fixed placeholder> @@ -139,7 +141,18 @@