Files
EmailBill/.doc/VERSION_SWITCH_SUMMARY.md
SunCheng d052ae5197 fix
2026-02-10 17:49:19 +08:00

3.2 KiB
Raw Permalink Blame History

版本切换功能实现总结

实现概述

在设置的开发者选项中添加了版本切换功能,用户可以在 V1 和 V2 版本之间切换。

修改的文件

1. Web/src/stores/version.js (新增)

  • 创建 Pinia store 管理版本状态
  • 使用 localStorage 持久化版本选择
  • 提供 setVersion()isV2() 方法

2. Web/src/views/SettingView.vue (修改)

  • 在开发者选项中添加"切换版本"选项
  • 显示当前版本V1/V2
  • 实现版本切换对话框
  • 实现版本切换后的路由跳转逻辑

3. Web/src/router/index.js (修改)

  • 引入 version store
  • 在路由守卫中添加版本路由重定向逻辑
  • V2 模式下自动跳转到 V2 路由(如果存在)
  • V1 模式下自动跳转到 V1 路由(如果在 V2 路由)

核心功能

  1. 版本选择界面

    • 设置页面显示当前版本
    • 点击弹出对话框,选择 V1 或 V2
    • 切换成功后显示提示信息
  2. 智能路由跳转

    • 选择 V2 后,如果当前路由有 V2 版本,自动跳转
    • 选择 V1 后,如果当前在 V2 路由,自动跳转到 V1
    • 没有对应版本时,保持当前路由不变
  3. 路由守卫保护

    • 每次路由跳转时检查版本设置
    • 自动重定向到正确版本的路由
    • 保留 query 和 params 参数
  4. 状态持久化

    • 版本选择保存在 localStorage
    • 刷新页面后版本设置保持不变

V2 路由命名规范

V2 路由必须遵循命名规范:原路由名-v2

示例:

  • V1: calendar → V2: calendar-v2
  • V1: budget → V2: budget-v2

当前支持的 V2 路由

  • calendarcalendar-v2 (CalendarV2.vue)

测试验证

  • ESLint 检查通过(无错误)
  • 构建成功pnpm build
  • 所有修改文件符合项目代码规范

使用示例

用户操作流程

  1. 进入"设置"页面
  2. 滚动到"开发者"分组
  3. 点击"切换版本"(当前版本显示在右侧)
  4. 选择"V1"或"V2"
  5. 系统自动跳转到对应版本的路由

开发者添加新 V2 路由

// router/index.js
{
  path: '/xxx-v2',
  name: 'xxx-v2',
  component: () => import('../views/XxxViewV2.vue'),
  meta: { requiresAuth: true }
}

添加后即可自动支持版本切换。

技术细节

版本检测逻辑

// 在路由守卫中
if (versionStore.isV2()) {
  // 尝试跳转到 V2 路由
  const v2RouteName = `${routeName}-v2`
  if (存在 v2Route) {
    跳转到 v2Route
  } else {
    保持当前路由
  }
}

版本状态管理

// stores/version.js
const currentVersion = ref(localStorage.getItem('app-version') || 'v1')

const setVersion = (version) => {
  currentVersion.value = version
  localStorage.setItem('app-version', version)
}

注意事项

  1. V2 路由必须按照 xxx-v2 命名规范
  2. 如果页面没有 V2 版本,切换后会保持在 V1 版本
  3. 路由守卫会自动处理所有版本相关的路由跳转
  4. 版本状态持久化在 localStorage 中

后续改进建议

  1. 可以在 UI 上添加更明显的版本标识
  2. 可以在无 V2 路由时给出提示
  3. 可以添加版本切换的动画效果
  4. 可以为不同版本设置不同的主题样式