Status: done
As a 小程序用户, I want 下拉刷新后页面能正确回到顶部位置, so that 我可以正常浏览刷新后的列表内容,不需要手动滚动回顶部.
当前企业小程序的三个列表页面都使用了 ScrollView 的 refresher 属性进行下拉刷新。这在小程序环境中会导致下拉刷新后页面位置无法自动回到顶部的问题,用户需要手动滚动才能看到刷新后的内容。
影响的页面:
/pages/yongren/dashboard/index/pages/yongren/talent/list/index/pages/yongren/order/list/index将 ScrollView refresher (局部刷新) 改为使用 Taro 的 usePullDownRefresh (页面级刷新)。
技术要点:
usePullDownRefresh 钩子Taro.stopPullDownRefresh() 停止刷新动画enablePullDownRefresh: truerefresherEnabledrefresherTriggeredonRefresherRefresh首页下拉刷新正常工作
enablePullDownRefresh: trueusePullDownRefresh 钩子替代 ScrollView refresher人才列表页下拉刷新正常工作
enablePullDownRefresh: trueusePullDownRefresh 钩子替代 ScrollView refresher订单列表页下拉刷新正常工作
enablePullDownRefresh: trueusePullDownRefresh 钩子替代 ScrollView refresher代码质量
refreshing 状态变量pnpm typecheck)[x] Task 1: 修复 Dashboard 页面下拉刷新 (AC: #1)
enablePullDownRefresh: trueusePullDownRefresh 钩子refreshing 状态变量Taro.stopPullDownRefresh()[x] Task 2: 修复 TalentManagement 页面下拉刷新 (AC: #2)
enablePullDownRefresh: trueusePullDownRefresh 钩子refreshing 状态变量[x] Task 3: 修复 OrderList 页面下拉刷新 (AC: #3)
enablePullDownRefresh: trueusePullDownRefresh 钩子refreshing 状态变量[x] Task 4: 验证和测试 (AC: #4)
ScrollView 的 refresher 属性在小程序中存在已知的回位问题。当用户下拉刷新后,ScrollView 的滚动位置不会自动回到顶部,导致用户需要手动滚动才能看到刷新后的内容。
使用 Taro 提供的页面级下拉刷新 usePullDownRefresh 可以解决此问题,因为页面级刷新会自动处理滚动位置的回位。
需要修改的组件文件:
/mnt/code/188-179-template-6/mini-ui-packages/yongren-dashboard-ui/src/pages/Dashboard/Dashboard.tsx/mnt/code/188-179-template-6/mini-ui-packages/yongren-talent-management-ui/src/pages/TalentManagement/TalentManagement.tsx/mnt/code/188-179-template-6/mini-ui-packages/yongren-order-management-ui/src/pages/OrderList/OrderList.tsx需要修改的配置文件:
/mnt/code/188-179-template-6/mini/src/pages/yongren/dashboard/index.config.ts (需要创建或修改)/mnt/code/188-179-template-6/mini/src/pages/yongren/talent/list/index.config.ts (已启用)/mnt/code/188-179-template-6/mini/src/pages/yongren/order/list/index.config.ts (已启用)使用 usePullDownRefresh 的正确模式:
import { usePullDownRefresh, useRefetch } from '@tarojs/taro'
import Taro from '@tarojs/taro'
const MyComponent: React.FC = () => {
const queryClient = useQueryClient()
usePullDownRefresh(async () => {
try {
// 刷新数据
await queryClient.invalidateQueries({ queryKey: ['myData'] })
} finally {
// 停止刷新动画
Taro.stopPullDownRefresh()
}
})
// 组件其余部分...
}
需要移除的代码:
// 移除这些状态
const [refreshing, setRefreshing] = useState(false)
// 移除这些 ScrollView 属性
<ScrollView
refresherEnabled // 移除
refresherTriggered={refreshing} // 移除
onRefresherRefresh={onRefresh} // 移除
>
小程序页面配置文件位于主小程序项目目录中:
/mnt/code/188-179-template-6/mini/src/pages/yongren/*/index.config.ts组件源代码位于各自的 UI 包中:
mini-ui-packages/yongren-dashboard-uimini-ui-packages/yongren-talent-management-uimini-ui-packages/yongren-order-management-uiClaude (d8d-model)
None
✅ Story 13.27 实现完成
修改内容:
Dashboard 页面 (首页)
mini/src/pages/yongren/dashboard/index.config.ts,添加 enablePullDownRefresh: trueusePullDownRefresh 钩子替代 ScrollView refresherrefreshing 状态变量和 refresher 相关属性TalentManagement 页面 (人才列表页)
enablePullDownRefresh: trueusePullDownRefresh 钩子替代 ScrollView refresherrefreshing 状态变量和 refresher 相关属性OrderList 页面 (订单列表页)
enablePullDownRefresh: trueusePullDownRefresh 钩子替代 ScrollView refresherrefreshing 状态变量和 refresher 相关属性技术方案:
验证结果:
代码审查修复 (2026-01-19):
HIGH 优先级修复:
console.log 改为 console.debug (行 313, 330, 348)console.error 改为 console.debug (行 306)console.error 改为 console.debug (行 122)MEDIUM 优先级修复:
getStatusLabel、getStatusClass、getEnterpriseUserInfo 移到组件外部以提高性能类型检查验证:
修改的文件:
mini/src/pages/yongren/dashboard/index.config.ts (创建)mini-ui-packages/yongren-dashboard-ui/src/pages/Dashboard/Dashboard.tsxmini-ui-packages/yongren-talent-management-ui/src/pages/TalentManagement/TalentManagement.tsxmini-ui-packages/yongren-order-management-ui/src/pages/OrderList/OrderList.tsx