Name Last Update
.claude Loading commit data...
.trae Loading commit data...
config Loading commit data...
doc Loading commit data...
src Loading commit data...
.editorconfig Loading commit data...
.eslintrc Loading commit data...
.gitignore Loading commit data...
CLAUDE.md Loading commit data...
README.md Loading commit data...
babel.config.js Loading commit data...
components.d.ts Loading commit data...
jsconfig.json Loading commit data...
package.json Loading commit data...
pnpm-lock.yaml Loading commit data...
postcss.config.js Loading commit data...
project.config.json Loading commit data...
project.tt.json Loading commit data...
tailwind.config.js Loading commit data...
yarn.lock Loading commit data...

项目介绍

本项目是将原有H5预约系统迁移至微信小程序的实现。基于 Taro4 + Vue3 + NutUI 开发,保留了原有的功能和UI风格。

功能模块

  1. 预约流程

    • 日期与时间段选择 (pages/booking/index)
    • 预约信息确认与提交 (pages/submit/index)
    • 预约记录查看 (pages/bookingList/index)
    • 预约详情 (pages/bookingDetail/index)
  2. 参观者管理

    • 参观者列表 (pages/visitorList/index)
    • 添加/编辑参观者 (pages/addVisitor/index)
    • 支持身份证号校验与脱敏显示
  3. 个人中心

    • 预约码展示 (pages/bookingCode/index)
    • 我的页面 (pages/me/index)
    • 邀请码/证件号查询 (pages/search/index)
  4. 弱网与离线模式

    • 弱网提示页 (pages/weakNetwork/index)
    • 离线预约记录列表 (pages/offlineBookingList/index)
    • 离线预约记录详情/离线二维码 (pages/offlineBookingDetail/index)
    • 离线预约码入口页 (pages/offlineBookingCode/index)
    • 离线预约缓存刷新与轮询 (src/composables/useOfflineBookingCache.js, src/composables/useOfflineBookingCachePolling.js)
    • 网络从可用变为弱网/无网时,弹窗提示并可一键进入离线模式(src/app.js
  5. 义工核销

    • 义工登录与权限预检 (pages/volunteerLogin/index)
    • 核销页(扫码核销 + 结果展示)(pages/verificationResult/index)
  6. 公共功能

    • 全局路由封装 (hooks/useGo)
    • API 请求封装 (utils/request, api/index)
    • 登录授权流程 (pages/auth/index)
    • 弱网提示文案统一管理 (utils/uiText.js)

技术栈

  • 框架: Taro 4.x
  • UI库: NutUI 4.x (Vue3)
  • 语言: JavaScript (Vue3 Setup 语法糖)
  • 样式: Less + TailwindCSS (部分)
  • 状态管理: Pinia
  • 路由: Taro Router + 自定义 Hooks

项目结构

  • src/api: 接口定义
  • src/assets: 图片等静态资源
  • src/components: 公共组件 (qrCode, qrCodeSearch, reserveCard等)
  • src/composables: 组合式函数 (离线缓存/轮询等)
  • src/pages: 页面文件
  • src/hooks: 组合式函数 (useGo等)
  • src/stores: Pinia 状态管理 (main/router 等)
  • src/utils: 工具函数 (request, authRedirect, network, uiText 等)

项目运行

  1. 安装依赖

    pnpm install
    
  2. 运行开发环境

    pnpm dev:weapp
    
  3. 打包构建

    pnpm build:weapp
    

离线预约缓存轮询说明

目标

在「已授权 + 网络可用」时,定时刷新离线预约记录缓存(本地 storage:OFFLINE_BOOKING_DATA),用于弱网/离线兜底页面展示。

相关文件

  • 离线缓存刷新:src/composables/useOfflineBookingCache.js
    • 核心方法:refresh_offline_booking_cache({ force })
  • 轮询与网络监听:src/composables/useOfflineBookingCachePolling.js
    • 核心方法:enable_offline_booking_cache_polling(options) / disable_offline_booking_cache_polling()
  • 启动入口:src/app.js
    • 在授权成功后调用 enable_offline_booking_cache_polling()

启动条件

轮询启动需要同时满足:

  1. ref_count > 0:表示当前确实有人需要轮询(应用级启用会占用 1 个引用)
  2. network_usable === true:网络类型可用(由 src/utils/network.js 判定)

运行流程

  1. enable_offline_booking_cache_polling(options)
    • 缓存最后一次 options(用于网络恢复时重启轮询)
    • 增加 ref_count
    • 注册 Taro.onNetworkStatusChange(仅注册一次)
    • 如果当前网络可用,则启动定时器,默认每 60000ms 刷新一次
  2. 定时器 tick:
    • 调用 refresh_offline_booking_cache({ force: !!options?.force })
    • 内部会再次校验授权与网络,避免无效请求
  3. 网络变更监听:
    • 变为弱网/无网:立即停止轮询定时器
    • 恢复为可用网络:若 ref_count > 0,用最后一次 options 重新启动轮询
  4. disable_offline_booking_cache_polling()
    • 释放一次 ref_count
    • ref_count === 0 时:停止轮询并注销网络监听器

options 说明

  • interval_ms:轮询间隔(毫秒),默认 60000
  • immediate:是否立即刷新一次,默认 true
  • force:透传给 refresh_offline_booking_cache,用于强制刷新(默认 false

优化建议 (TODO)

  • 小程序授权流程有问题 - 已处理
  • 完善支付流程(目前为模拟/H5跳转)- 后端配合联调
  • 优化图片资源加载(考虑使用 CDN 或分包)- 有离线模式看情况处理
  • 弱网环境下的离线预约记录 - 已实现(本地缓存 + 离线列表/详情)
  • 义工核销接口联调与核销结果字段展示优化(依赖后端返回结构稳定)
  • 增强网络请求的错误处理与重试机制
  • 补充单元测试