作为 人才小程序开发者, 我想要 统一所有页面的Navbar导航栏组件使用规范, 以便 建立清晰的页面层级结构,TabBar页面无返回按钮,非TabBar页面带返回按钮,提供一致的用户体验。
原型设计分析:
根据docs/小程序原型/rencai.html原型设计,人才小程序包含6个页面:
TabBar配置验证:
mini-talent/src/app.config.ts中配置了4个TabBar页面:
tabBar: {
list: [
{ pagePath: 'pages/index/index', text: '首页' },
{ pagePath: 'pages/attendance/index', text: '考勤' },
{ pagePath: 'pages/personal-info/index', text: '我的' },
{ pagePath: 'pages/settings/index', text: '更多' }
]
}
用人方小程序参考:
leftIcon=""和leftText=""隐藏返回按钮leftIcon="i-heroicons-chevron-left-20-solid"和leftText="返回"当前问题:
<View className="h-12" />空白占位TabBar页面 (一级页面,无返回按钮):
pages/index/index) - TabBar"首页",显示个人概览、打卡状态、快捷功能入口pages/attendance/index) - TabBar"考勤",显示考勤日历和打卡明细pages/personal-info/index) - TabBar"我的",显示个人基本信息和证件照片pages/settings/index) - TabBar"更多",显示功能入口和设置选项非TabBar页面 (二级页面,带返回按钮):
pages/employment/index) - 从首页"薪资查询"入口跳转,显示就业状态和薪资记录[x] 1.1 在@d8d/rencai-dashboard-ui/src/pages/Dashboard/Dashboard.tsx中导入Navbar组件
import { Navbar } from '@d8d/mini-shared-ui-components/components/navbar'
[x] 1.2 在ScrollView前添加Navbar组件,配置为TabBar页面
<Navbar
title="首页"
leftIcon=""
leftText=""
onClickLeft={() => {}}
backgroundColor="bg-white"
border={true}
fixed={true}
placeholder={true}
/>
[x] 1.3 移除手动空白占位 <View className="h-12" />
[x] 1.4 验证Navbar与TabBarLayout的兼容性
@d8d/rencai-personal-info-ui/src/pages/PersonalInfoPage/PersonalInfoPage.tsx中导入Navbar组件[x] 2.2 添加Navbar组件,配置为TabBar页面
<Navbar
title="我的"
leftIcon=""
leftText=""
onClickLeft={() => {}}
backgroundColor="bg-white"
border={true}
fixed={true}
placeholder={true}
/>
[x] 2.3 移除现有的占位内容,实现完整的个人信息页面功能
@d8d/rencai-attendance-ui/src/pages/AttendancePage/AttendancePage.tsx中导入Navbar组件[x] 3.2 添加Navbar组件,配置为TabBar页面
<Navbar
title="考勤记录"
leftIcon=""
leftText=""
onClickLeft={() => {}}
backgroundColor="bg-white"
border={true}
fixed={true}
placeholder={true}
/>
[x] 3.3 移除现有的占位内容,实现完整的考勤记录页面功能
@d8d/rencai-employment-ui/src/pages/EmploymentPage/EmploymentPage.tsx中导入Navbar组件[x] 4.2 添加Navbar组件,配置为非TabBar页面
<Navbar
title="就业信息"
leftIcon="i-heroicons-chevron-left-20-solid"
leftText="返回"
onClickLeft={() => Taro.navigateBack()}
backgroundColor="bg-white"
border={true}
fixed={true}
placeholder={true}
/>
[x] 4.3 移除现有的占位内容,实现完整的就业信息页面功能
@d8d/rencai-settings-ui/src/pages/SettingsPage/SettingsPage.tsx中导入Navbar组件[x] 5.2 添加Navbar组件,配置为TabBar页面
<Navbar
title="更多"
leftIcon=""
leftText=""
onClickLeft={() => {}}
backgroundColor="bg-white"
border={true}
fixed={true}
placeholder={true}
/>
[x] 5.3 移除现有的占位内容,实现完整的设置页面功能
故事017.002完成状态:
Navbar组件来源:
@d8d/mini-shared-ui-components/components/navbarexport { Navbar } 和 export defaultNavbarProps,包含title、leftIcon、leftText、backgroundColor等属性1. Navbar组件导入方式:
// 方式1: 命名导入
import { Navbar } from '@d8d/mini-shared-ui-components/components/navbar'
// 方式2: 默认导入
import Navbar from '@d8d/mini-shared-ui-components/components/navbar'
2. TabBar页面配置:
<Navbar
title="首页"
leftIcon=""
leftText=""
onClickLeft={() => {}} // 空函数,避免警告
backgroundColor="bg-white"
border={true}
fixed={true}
placeholder={true}
/>
3. 非TabBar页面配置:
<Navbar
title="就业信息"
leftIcon="i-heroicons-chevron-left-20-solid"
leftText="返回"
onClickLeft={() => Taro.navigateBack()}
backgroundColor="bg-white"
border={true}
fixed={true}
placeholder={true}
/>
4. 与TabBarLayout的集成:
return (
<RencaiTabBarLayout activeKey="index">
<ScrollView className="h-[calc(100%-60px)] overflow-y-auto" scrollY>
<Navbar title="首页" leftIcon="" leftText="" onClickLeft={() => {}} />
{/* 页面内容 */}
</ScrollView>
</RencaiTabBarLayout>
)
用人方Dashboard (TabBar页面):
// mini-ui-packages/yongren-dashboard-ui/src/pages/Dashboard/Dashboard.tsx:139-148
<Navbar
title="企业仪表板"
leftIcon=""
leftText=""
onClickLeft={() => {}}
backgroundColor="bg-white"
border={true}
fixed={true}
placeholder={true}
/>
用人方OrderDetail (非TabBar页面):
// mini-ui-packages/yongren-order-management-ui/src/pages/OrderDetail/OrderDetail.tsx:580-589
<Navbar
title="订单详情"
leftIcon="i-heroicons-chevron-left-20-solid"
leftText="返回"
backgroundColor="bg-white"
border={true}
fixed={true}
placeholder={true}
onClickLeft={() => console.log('返回')}
/>
Q1: TabBar页面需要返回按钮吗? A: 不需要。TabBar页面是小程序的顶级页面,用户通过底部TabBar切换,返回按钮会造成用户困惑。
Q2: 如何判断一个页面是否是TabBar页面?
A: 检查mini-talent/src/app.config.ts中的tabBar.list配置,如果在list中就是TabBar页面。
Q3: Navbar的placeholder属性有什么作用? A: 在fixed=true时,placeholder会在Navbar位置创建一个占位元素,避免页面内容被遮挡。
Q4: 为什么onClickLeft要传空函数而不是undefined? A: 避免React警告,即使不使用onClickLeft,也应该传一个空函数。
测试框架: Jest (mini项目使用Jest)
组件渲染测试:
交互测试:
样式测试:
集成测试:
| 日期 | 版本 | 描述 | 作者 |
|---|---|---|---|
| 2025-12-26 | 1.0 | 创建故事文档 | Bob (Scrum Master) |
此部分由开发代理在实施过程中填写
Claude Sonnet (claude-sonnet-4-20250514)
无需调试日志,实施顺利。
修改的文件:
mini-ui-packages/rencai-dashboard-ui/src/pages/Dashboard/Dashboard.tsx - 添加Navbar导入和组件,移除空白占位mini-ui-packages/rencai-personal-info-ui/src/pages/PersonalInfoPage/PersonalInfoPage.tsx - 添加Navbar导入和组件,重构为ScrollViewmini-ui-packages/rencai-attendance-ui/src/pages/AttendancePage/AttendancePage.tsx - 添加Navbar导入和组件,重构为ScrollViewmini-ui-packages/rencai-employment-ui/src/pages/EmploymentPage/EmploymentPage.tsx - 添加Navbar导入和组件(带返回),重构为ScrollViewmini-ui-packages/rencai-settings-ui/src/pages/SettingsPage/SettingsPage.tsx - 添加Navbar导入和组件,重构为ScrollView此部分由QA代理在审查完成后填写