From e7a2073e00307a59b0e96d8eceb4290c8792efe4 Mon Sep 17 00:00:00 2001 From: hzj <1304805162@qq.com> Date: Mon, 20 Apr 2026 18:08:00 +0800 Subject: [PATCH] =?UTF-8?q?feat:=20=E8=AF=AD=E8=A8=80=E5=88=87=E6=8D=A2?= =?UTF-8?q?=E5=8A=9F=E8=83=BD?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .env.development | 4 +- build-egg-thread1.log | Bin 0 -> 800 bytes docs/UI橙色主题与交互顺序调整记录.md | 190 ++ docs/i18n/主要路由.md | 533 ++++ docs/i18n/线程协作.md | 1622 ++++++++++ docs/i18n/线程模板.md | 78 + docs/i18n/翻译清单.md | 312 ++ docs/i18n/翻译进度.md | 837 +++++ docs/问题排查记录-权限平台与开发服务地址.md | 212 ++ src/components/Breadcrumb/index.vue | 10 +- src/components/HeaderSearch/index.vue | 11 +- src/components/LanguageSwitch/index.vue | 96 + src/components/SizeSelect/index.vue | 26 +- src/components/data/AccountHanle/index.vue | 126 +- src/components/data/AccountInput/index.vue | 8 +- .../data/EditUserDiamondRewardForm/index.vue | 18 +- src/components/data/EditUserForm/index.vue | 35 +- .../EditUserGameCouponDeductionForm/index.vue | 18 +- .../data/EditUserGoldCoinRewardForm/index.vue | 48 +- .../data/GiftHistoryDetailsDrawer/index.vue | 58 +- .../data/InAppPurchaseDetails/index.vue | 156 +- .../data/InappPurchaseApple/index.vue | 112 +- .../data/InappPurchaseGoogle/index.vue | 93 +- .../bar-graph-charts.vue | 95 +- .../data/PropsSalesOverviewCharts/dialog.vue | 9 +- .../data/PropsSalesOverviewCharts/index.vue | 93 +- src/components/data/RestPassword/index.vue | 77 +- src/components/data/RoomInfo/index.vue | 83 +- src/components/data/SearchRoomInput/index.vue | 24 +- src/components/data/UserAuthForm/index.vue | 93 +- .../UserInfo/AccountStatusLatestLog/index.vue | 8 +- .../data/UserInfo/BankCardDrawer/index.vue | 92 +- .../BaseInfo/AssociatedDeviceTimeline.vue | 26 +- .../data/UserInfo/BaseInfo/index.vue | 172 +- .../data/UserInfo/UserTableExhibit/index.vue | 2 +- src/constant/el-const.js | 5 + src/constant/family.js | 3 + src/constant/origin.js | 16 + src/constant/team-type.js | 15 + src/lang/index.js | 249 ++ src/lang/messages/base/en.js | 48 + src/lang/messages/base/menu-en.js | 192 ++ src/lang/messages/base/zh.js | 45 + src/lang/messages/en.js | 306 ++ src/lang/messages/pages/en.js | 2746 +++++++++++++++++ src/lang/messages/pages/zh.js | 2745 ++++++++++++++++ src/lang/messages/zh.js | 45 + src/layout/components/NavbarLight.vue | 36 +- src/layout/components/Sidebar/Item.vue | 9 +- src/main.js | 31 +- src/permission.js | 10 +- src/store/getters.js | 1 + src/store/modules/app.js | 11 + src/styles/element-ui.scss | 71 + src/styles/sidebar.scss | 44 + src/styles/variables.scss | 2 +- src/utils/get-page-title.js | 3 +- src/utils/ops-message.js | 9 +- src/views/activity/template-cnf/index.vue | 124 +- src/views/cnf/lottery/index.vue | 282 +- .../components/active-index/index.vue | 255 +- .../bar-graph-charts.vue | 77 +- .../daily-currency-gold-origin-top/index.vue | 46 +- .../components/daily-currency-gold/index.vue | 59 +- .../daily-currency-gold/line-graph-charts.vue | 99 +- .../components/daily-currency/index.vue | 58 +- .../daily-currency/line-graph-charts.vue | 93 +- .../components/daily-purchase/index.vue | 66 +- .../line-graph-charts-general.vue | 314 +- .../daily-purchase/line-graph-charts.vue | 87 +- .../components/daily-register-user/index.vue | 41 +- .../daily-register-user/line-graph-charts.vue | 90 +- .../components/monthly-purchase/index.vue | 34 +- .../monthly-purchase/line-graph-charts.vue | 81 +- .../bar-graph-charts.vue | 77 +- .../user-daily-currency-gold-top/index.vue | 65 +- .../bar-graph-charts.vue | 77 +- .../index.vue | 49 +- .../dashboard/dashboard-charts/index.vue | 55 +- src/views/dashboard/dashboard.vue | 31 +- .../introduction/user-account-info/index.vue | 20 +- .../introduction/user-navigation/index.vue | 155 +- .../introduction/waiting-processing/index.vue | 181 +- src/views/dashboard/quick-link/index.vue | 51 +- .../game/egg/egg-exchange-record/index.vue | 16 +- src/views/game/egg/egg-lottery-cnf/index.vue | 140 +- .../game/egg/egg-lottery-record/index.vue | 16 +- src/views/game/egg/index.vue | 14 +- src/views/game/lottery-config/form-edit.vue | 294 +- src/views/game/lottery-config/index.vue | 47 +- .../lottery-config/select-propsr-popover.vue | 6 +- .../game/lucky-box/award-config/details.vue | 87 +- .../game/lucky-box/award-config/edit.vue | 41 +- .../game/lucky-box/award-config/index.vue | 36 +- .../game/lucky-box/bounty-config/details.vue | 81 +- .../game/lucky-box/bounty-config/edit.vue | 55 +- .../game/lucky-box/bounty-config/index.vue | 37 +- .../game/lucky-box/fortune-config/index.vue | 58 +- .../game/lucky-box/standard-config/edit.vue | 45 +- .../standard-config/gift-details.vue | 139 +- .../game/lucky-box/standard-config/index.vue | 48 +- .../lucky-box/standard-config/probability.vue | 85 +- src/views/login/index.vue | 12 +- src/views/message/push/index.vue | 14 +- src/views/message/push/new-push-form.vue | 87 +- src/views/message/push/push-log.vue | 49 +- src/views/message/push/push-task.vue | 358 ++- .../props/props-source-group/form-edit.vue | 270 +- src/views/props/props-source-group/index.vue | 47 +- src/views/room/profile/index.vue | 299 +- src/views/sys/country-code/index.vue | 90 +- src/views/sys/notice-message/index.vue | 144 +- src/views/sys/region-config/assist/index.vue | 197 +- src/views/sys/region-config/index.vue | 12 +- src/views/sys/region-config/region/index.vue | 405 ++- src/views/sys/start-page/form-edit.vue | 84 +- src/views/sys/start-page/index.vue | 132 +- src/views/team/business-development/index.vue | 62 +- src/views/team/diamond-policy/index.vue | 128 +- .../team/diamond-policy/props-form-edit.vue | 155 +- src/views/team/policy/index.vue | 136 +- src/views/tools/redis/index.vue | 18 +- src/views/tools/upload/index.vue | 15 +- .../administrator-auth-resource/index.vue | 78 +- .../user/app-manager/administrator/auth.vue | 6 +- .../user/app-manager/administrator/index.vue | 94 +- src/views/user/app-manager/index.vue | 15 +- src/views/user/freight/form-edit.vue | 50 +- .../freight/freight-seller-running-water.vue | 20 +- src/views/user/freight/index.vue | 116 +- src/views/user/freight/running-water.vue | 22 +- src/views/user/freight/seller-info.vue | 30 +- src/views/user/user-table/index.vue | 194 +- vue.config.js | 36 + 134 files changed, 15194 insertions(+), 4012 deletions(-) create mode 100644 build-egg-thread1.log create mode 100644 docs/UI橙色主题与交互顺序调整记录.md create mode 100644 docs/i18n/主要路由.md create mode 100644 docs/i18n/线程协作.md create mode 100644 docs/i18n/线程模板.md create mode 100644 docs/i18n/翻译清单.md create mode 100644 docs/i18n/翻译进度.md create mode 100644 docs/问题排查记录-权限平台与开发服务地址.md create mode 100644 src/components/LanguageSwitch/index.vue create mode 100644 src/lang/index.js create mode 100644 src/lang/messages/base/en.js create mode 100644 src/lang/messages/base/menu-en.js create mode 100644 src/lang/messages/base/zh.js create mode 100644 src/lang/messages/en.js create mode 100644 src/lang/messages/pages/en.js create mode 100644 src/lang/messages/pages/zh.js create mode 100644 src/lang/messages/zh.js diff --git a/.env.development b/.env.development index cc035d3..b5fa743 100644 --- a/.env.development +++ b/.env.development @@ -5,7 +5,9 @@ VUE_APP_BASE_API = '/console' VUE_CLI_BABEL_TRANSPILE_MODULES = true # application base url -VUE_APP_BASE_URL ='https://consoletest.azizichat.com' +# VUE_APP_BASE_URL ='https://consoletest.azizichat.com' +VUE_APP_BASE_URL ='https://console.atuchat.com' +# VUE_APP_BASE_URL = 'https://console.likeichat.com' # oss VUE_APP_OSS_BUCKET = 'tkm-likei' diff --git a/build-egg-thread1.log b/build-egg-thread1.log new file mode 100644 index 0000000000000000000000000000000000000000..021479b70e603e4cc2429170748519cf06cea778 GIT binary patch literal 800 zcmc(dOH0E*6ot=P@IPcFilz&}O;?Ima3iQoE7GPhM$)vTX;B1!y84|7A;Cq(l??N^ zGxu@MJ@fThYN44@MH(_MSjQ^0(LC(U+ly8`Yk>DF)BaOUh>pmyRIQx74EM3(aF=4Q z7zK7gOoo4=H>{;9JT}C*dZk_M=!_f@emPOje~gvrnV1UeB={V1x5s>EcG&-3FVdjL z=@Gu>x(+DK_7rSuP>exfL@_Lk(}UGz;qP|ME|oo^029NbVXW);iMx74P++BlcVBSPi2c z@zdPx?sxszv{R>9W4wBhAGR literal 0 HcmV?d00001 diff --git a/docs/UI橙色主题与交互顺序调整记录.md b/docs/UI橙色主题与交互顺序调整记录.md new file mode 100644 index 0000000..58dc7ee --- /dev/null +++ b/docs/UI橙色主题与交互顺序调整记录.md @@ -0,0 +1,190 @@ +# UI 橙色主题与交互顺序调整记录 + +## 1. 变更背景 + +本次调整目标: + +- 将项目整体视觉风格从原有偏冷色风格调整为偏橙色风格,主色以 `#FF9326`、`#FEB219` 为核心。 +- 取消暗夜模式,仅保留常规亮色展示。 +- 允许调整按钮样式、圆角、阴影、表单项顺序、搜索项顺序、静态多选/下拉选项顺序。 +- 明确不调整权限点、业务逻辑、接口行为、路由配置。 + +本次所有改动均以 UI 层和静态展示层为边界。 + +## 2. 整体视觉风格调整 + +### 2.1 主色与基础风格 + +已将项目主视觉切换为橙色系,重点调整包括: + +- 主按钮、默认按钮、文本按钮颜色统一为橙色主题。 +- 输入框、选择器、日期组件的聚焦态边框和阴影改为橙色高亮。 +- 弹窗、抽屉、卡片、表格等容器统一增加暖色边框、圆角和阴影。 +- 顶栏、侧边栏、Logo 区域统一为暖色风格。 + +重点样式文件: + +- `src/styles/element-ui.scss` +- `src/styles/variables.scss` +- `src/styles/index.scss` +- `src/styles/sidebar.scss` +- `src/styles/element-variables.scss` + +### 2.2 按钮与弹窗按钮视觉顺序 + +已统一主按钮视觉优先级,使确认类按钮更突出。 +其中弹窗/抽屉底部操作区通过样式顺序优化为主按钮优先展示,但未改动原始点击逻辑。 + +## 3. 暗夜模式取消 + +已取消暗夜模式入口及暗夜切换能力,处理方式如下: + +- `src/utils/theme.js` + - `getTheme()` 固定返回 `normal` + - `setTheme()` 固定写入 `normal` + - `checkSwitchTheme()` 固定清除根节点暗色类名 +- `src/layout/components/index.js` + - 导航栏导出切换为 `NavbarLight.vue` +- `src/layout/components/NavbarLight.vue` + - 新增简化版导航栏 + - 移除主题切换相关入口,仅保留常用功能 + +说明: + +- 原有权限逻辑、导航逻辑未修改。 +- 该处理方式属于 UI 层收口,不影响业务行为。 + +## 4. 搜索区与表单项顺序调整 + +针对页面内搜索区、过滤区、表单项的展示顺序做了纯 UI 层重排,主要通过模板顺序和样式 `order` 控制完成,不改查询参数结构和业务逻辑。 + +已调整的典型页面: + +- `src/views/user/user-table/index.vue` +- `src/views/user/user-table-role/index.vue` +- `src/views/user/freight/index.vue` +- `src/views/version/app/index.vue` + +调整方向包括: + +- 系统、国家、账号、设备、状态、性别、注册来源、来源平台、日期区间等筛选项顺序重新整理。 +- 搜索按钮、概览按钮、条件展开开关等操作项顺序重新排列。 +- 保证搜索区主流程更靠前,次级条件靠后。 + +## 5. 静态选项顺序调整 + +仅对前端文件内写死的选项顺序进行了整理;接口返回的列表未做改动。 + +### 5.1 公共输入组件 + +- `src/components/data/AccountInput/index.vue` + - 类型顺序由原来的“长 ID / 短 ID”调整为“短 ID / 长 ID” +- `src/components/data/SearchRoomInput/index.vue` + - 类型顺序由原来的“长 ID / 短 ID”调整为“短 ID / 长 ID” + +### 5.2 静态常量 + +- `src/constant/origin.js` + - 注册来源顺序调整 + - 来源平台顺序调整 + - App 平台顺序调整 +- `src/constant/type.js` + - `platformOrigins` 平台顺序调整为 Android 优先 + +说明: + +- 仅变更静态数组的前端展示顺序。 +- 未变更任何接口字段含义或后端约定。 + +## 6. 侧边栏折叠态图标居中修复 + +在橙色样式改造后,发现侧边栏收起状态下图标未居中。 +原因是旧实现依赖固定 `margin-left` 偏移,无法适配新的侧边栏宽度、内边距和圆角布局。 + +处理方式: + +- 修改 `src/styles/sidebar.scss` +- 将折叠菜单项和子菜单标题改为 `flex` 居中 +- 清除折叠态图标的额外左边距 + +修复结果: + +- 侧边栏收起后图标可在中轴线上正常居中显示 +- 不影响菜单高亮、路由跳转和交互逻辑 + +## 7. 弹窗被遮罩层覆盖问题修复 + +发现类似以下统计类弹窗: + +```vue + +``` + +存在“弹窗本体在遮罩层下方、展示不全且无法点击”的问题。 + +### 7.1 原因 + +- 遮罩层默认挂载到 `body` +- 弹窗本体未挂载到 `body` +- 页面内容容器存在局部层叠上下文和 `overflow: hidden` +- 最终导致遮罩层在外层,而弹窗仍在页面容器内部,被裁切或压住 + +### 7.2 修复方式 + +已为以下同类弹窗补充: + +- `:modal-append-to-body="true"` +- `:append-to-body="true"` + +已处理文件: + +- `src/components/data/UserRegistrationOverviewCharts/dialog.vue` +- `src/components/data/PropsSalesOverviewCharts/dialog.vue` + +### 7.3 修复结果 + +- 弹窗与遮罩层处于同一挂载层级 +- 弹窗可完整显示并可正常交互 +- 不影响弹窗内部业务逻辑 + +## 8. 验证情况 + +本次样式主改造完成后,已执行生产构建校验: + +```powershell +$env:NODE_OPTIONS='--openssl-legacy-provider'; npm run build:prod +``` + +结果: + +- 构建通过 +- 存在若干项目原有 warning +- 这些 warning 主要为旧代码中的导出提示、样式顺序提示、Sass 旧 API 提示,不属于本次 UI 改造新增问题 + +说明: + +- 后续对侧边栏折叠图标、统计弹窗挂载层级的修复属于局部样式修正,本记录未逐次重复构建 + +## 9. 变更边界说明 + +本次调整明确未涉及以下内容: + +- 权限点 +- 功能逻辑 +- 接口行为 +- 路由结构 +- 后端字段定义 + +本次属于前端 UI 视觉统一、静态交互顺序整理与样式问题修复。 + +## 10. 建议后续项 + +如后续继续做 UI 收口,可优先补充以下内容: + +- 继续逐页排查页面内写死的下拉、多选、单选顺序 +- 统一所有统计类、详情类弹窗的 `append-to-body` 规范 +- 继续检查折叠侧边栏下的图标、文字、tooltip 对齐一致性 +- 对全站弹窗、抽屉、表格筛选区形成统一样式规范文档 diff --git a/docs/i18n/主要路由.md b/docs/i18n/主要路由.md new file mode 100644 index 0000000..d735f1a --- /dev/null +++ b/docs/i18n/主要路由.md @@ -0,0 +1,533 @@ +## 路由摘要 + +### 文档定位 + +- 本文件是“首页 > 主要路由 > 其他路由”中的主要路由唯一清单 +- 本文件用于把 `src/permission.js` 中 `store.dispatch('user/getMenus')` 的接口返回结果整理成便于国际化领取、验收和运行检查的父子级路由清单 +- 需要查看主要路由的中文名、英文名、路由别名、路径、入口文件、完成状态时,统一以本文件为准 +- 本文件中的菜单层级不默认限制为“父级 > 子级”两层,若实际菜单存在三级结构,则按真实父链整理 +- 后续所有线程领取新任务前,除了读取 `线程协作.md`、`翻译进度.md`、`翻译清单.md`,还应先读取本文件 +- 其他文档不再重复维护完整主路由树,最多保留摘要并引用本文件 +- 下方保留原始接口返回,顶部摘要用于实际执行 + +### 全线程统一优先级 + +- 适用于所有线程,不只线程三 +- 统一领取优先级:`已完成 src/views 页面私有组件复查 > 首页 > 本文件中的主要路由页面 > 其他路由页面` +- 在“已完成 `src/views` 页面私有组件复查”完成前,暂不继续领取新的未完成普通页面 +- 只要首页或本文件中的主要路由页面还有未完成项,后续线程都应优先从这两部分中选择 +- 本文件中的主要路由页面之间,具体先领哪一个页面仍可按原来的方式灵活分配,只要先读 md、先写认领、避免冲突 +- 只有当首页和本文件中的主要路由页面全部处理完成后,才进入其他路由页面 + +### 首页 + +- 路由名:`Dashboard` +- 路径:`/dashboard` +- 路由来源:`src/router/index.js` +- 入口文件:`src/views/dashboard/index.vue` +- 当前状态:`已完成` + +首页模块建议按同一轮检查的文件范围: + +- `src/views/dashboard/index.vue` +- `src/views/dashboard/dashboard.vue` +- `src/views/dashboard/dashboard-charts/index.vue` +- `src/views/dashboard/quick-link/index.vue` +- `src/views/dashboard/introduction/index.vue` +- `src/views/dashboard/introduction/user-account-info/index.vue` +- `src/views/dashboard/introduction/user-navigation/index.vue` +- `src/views/dashboard/introduction/waiting-processing/index.vue` +- `src/views/dashboard/components/active-index/index.vue` +- `src/views/dashboard/components/daily-currency/index.vue` +- `src/views/dashboard/components/daily-currency-gold/index.vue` +- `src/views/dashboard/components/daily-purchase/index.vue` +- `src/views/dashboard/components/daily-register-user/index.vue` +- `src/views/dashboard/components/monthly-purchase/index.vue` +- `src/views/dashboard/components/user-daily-currency-gold-top/index.vue` +- `src/views/dashboard/components/user-daily-currency-recharge-top/index.vue` + +### 当前与国际化进度直接相关的主要路由 + +以下顺序按父级/子级路由整理,方便运行项目时逐项检查。 + +### 当前进行中的主要路由 + +- 当前无 + +### 已完成主要路由总览 + +- 用户管理 / User Management + - 路由别名:`AppUserManager` + - 用户列表 / User List + - 路由别名:`AppUserList` + - 路径:`user/user-table/index` + - 文件:`src/views/user/user-table/index.vue` + - 状态:已完成 +- 运营管理 / Operations Management + - 路由别名:`OperationManager` + - 数据配置 / Data Configuration + - 路由别名:`data:conf` + - 转盘抽奖品配置 / Spin Wheel Prize Configuration + - 路由别名:`cnf:lottery` + - 路径:`cnf/lottery/index` + - 文件:`src/views/cnf/lottery/index.vue` + - 状态:已完成 + - 国家管理 / Country Management + - 路由别名:`SysCountryCode` + - 路径:`sys/country-code/index` + - 文件:`src/views/sys/country-code/index.vue` + - 状态:已完成 + - 活动配置 / Activity Configuration + - 路由别名:`Activity:Config` + - 活动管理 / Activity Management + - 路由别名:`Activity:Manager` + - 路径:`activity/template-cnf/index` + - 文件:`src/views/activity/template-cnf/index.vue` + - 状态:已完成 + - 消息推送 / Message Push (需要重新检查) + - 路由别名:`MessageManagerPush` + - 路径:`message/push/index` + - 已完成文件: + - `src/views/message/push/index.vue` + - `src/views/message/push/new-push-form.vue` + - `src/views/message/push/push-log.vue` + - `src/views/message/push/push-task.vue` + - 状态:已完成 + - 运营日志 / Operations Logs + - 路由别名:`operation:log` + - 砸金蛋记录 / Golden Egg Smash Records + - 路由别名:`GameEgg` + - 路径:`game/egg/index` + - 已完成文件: + - `src/views/game/egg/index.vue` + - `src/views/game/egg/egg-exchange-record/index.vue` + - `src/views/game/egg/egg-lottery-record/index.vue` + - `src/views/game/egg/egg-lottery-cnf/index.vue` + - 状态:已完成 + - APP管理员 / App Administrator + - 路由别名:`AdministratorTable` + - 路径:`user/app-manager/index` + - 已完成文件: + - `src/views/user/app-manager/index.vue` + - `src/views/user/app-manager/administrator/index.vue` + - `src/views/user/app-manager/administrator/auth.vue` + - `src/views/user/app-manager/administrator-auth-resource/index.vue` + - 状态:已完成 + - App启动页 / App Launch Page + - 路由别名:`StartPage` + - 路径:`sys/start/page` + - 已完成文件: + - `src/views/sys/start-page/index.vue` + - `src/views/sys/start-page/form-edit.vue` + - 状态:已完成 + - 系统公告管理 / System Notice Management + - 路由别名:`NoticeMessage` + - 路径:`sys/notice-message/index` + - 文件:`src/views/sys/notice-message/index.vue` + - 状态:已完成 +- 语音房间 / Voice Rooms + - 路由别名:`VoiceRoom` + - 房间资料列表 / Room Profile List + - 路由别名:`ProfileRoom` + - 路径:`room/profile/index` + - 文件:`src/views/room/profile/index.vue` + - 状态:已完成 +- 道具管理 / Prop Management + - 路由别名:`PropsManager` + - 资源组配置 / Resource Group Configuration + - 路由别名:`PropsActivitySourceGroup` + - 路径:`props/props-source-group/index` + - 已完成文件: + - `src/views/props/props-source-group/index.vue` + - `src/views/props/props-source-group/form-edit.vue` + - 状态:已完成 +- 系统工具 / System Tools + - 路由别名:`ToolsManager` + - Redis缓存管理 / Redis Cache Management + - 路由别名:`RedisManager` + - 路径:`/redis` + - 文件:`src/views/tools/redis/index.vue` + - 状态:已完成 + - 文件上传 / File Upload + - 路由别名:`upload:file` + - 路径:`/upload/file` + - 文件:`src/views/tools/upload/index.vue` + - 状态:已完成 +- 主播中心 / Broadcaster Center + - 路由别名:`team:manaber` + - 代理钻石政策 / Agent Diamond Policy + - 路由别名:`TeamDiamondPolicyManager` + - 路径:`team/diamond-policy/index` + - 文件:`src/views/team/diamond-policy/index.vue` + - 状态:已完成 + - 代理政策 / Agent Policy + - 路由别名:`TeamPolicyManager` + - 路径:`team/policy/index` + - 文件:`src/views/team/policy/index.vue` + - 状态:已完成 + - BD列表 / BD List + - 路由别名:`BusinessDevelopment` + - 路径:`team/business-development/index` + - 文件:`src/views/team/business-development/index.vue` + - 状态:已完成 + +### 已完成但未在当前主要路由菜单返回中命中的补充页面 + +- 抽奖概率配置 / Lottery Probability Settings + - 路由别名:`GameLottery` + - 路由来源:`src/router/index.js` 静态路由 + - 路径:`game/lottery-config/index` + - 已完成文件: + - `src/views/game/lottery-config/index.vue` + - `src/views/game/lottery-config/form-edit.vue` + - `src/views/game/lottery-config/select-propsr-popover.vue` + - 状态:已完成 + +### 已部分完成但入口页仍需复核的主要路由 + +- 当前无 + +### 当前建议检查顺序 + +1. 先处理“已完成 `src/views` 页面私有组件复查”任务 +2. 首页 `Dashboard` 模块 +3. 本文件中“当前进行中的主要路由”: + - 当前无 +4. 本文件中“模块部分完成,入口页仍需复核”的页面: + - 当前无 +5. 本文件之外的其他路由页面 + +## 原始接口返回(保留) + +{ + "time": "1776417483715", + "status": true, + "errorCode": 0, + "body": { + "id": "160", + "theme": "normal", + "recentPreviews": [ + { + "reqTraceId": "GL-99fc25be00b9e5b70891628f3615fe89", + "reqUserId": "160", + "reqLanguage": "en", + "reqZoneId": "UTC", + "reqIp": "10.0.20.94", + "reqClient": "OPS", + "reqApi": "/console/dashboard/previews", + "reqApiVersion": "v2", + "reqTime": 1776417455831, + "id": "sys:role:list", + "type": "SYSTEM", + "name": "角色管理", + "link": "/system/manager/role", + "createTime": 1776417455831 + }, + { + "reqTraceId": "GL-4bdfb064bb5ba9936cc50ae6871d8094", + "reqUserId": "160", + "reqLanguage": "en", + "reqZoneId": "UTC", + "reqIp": "10.0.12.49", + "reqClient": "OPS", + "reqApi": "/console/dashboard/previews", + "reqApiVersion": "v2", + "reqTime": 1776417451877, + "id": "sys:user:list", + "type": "SYSTEM", + "name": "用户管理", + "link": "/system/manager/user", + "createTime": 1776417451878 + }, + { + "reqTraceId": "GL-5eea9989c975401d54c22eefce0def90", + "reqUserId": "160", + "reqLanguage": "en", + "reqZoneId": "UTC", + "reqIp": "10.0.20.94", + "reqClient": "OPS", + "reqApi": "/console/dashboard/previews", + "reqApiVersion": "v2", + "reqTime": 1776333417531, + "id": "RegionConfig", + "type": "SYSTEM", + "name": "区域配置", + "link": "/operation/manager/region/config", + "createTime": 1776333417531 + }, + { + "reqTraceId": "GL-0517a95d554779799e8899bffb75347b", + "reqUserId": "160", + "reqLanguage": "en", + "reqZoneId": "UTC", + "reqIp": "10.0.20.94", + "reqClient": "OPS", + "reqApi": "/console/dashboard/previews", + "reqApiVersion": "v2", + "reqTime": 1776332452114, + "id": "GameEgg", + "type": "SYSTEM", + "name": "砸金蛋记录", + "link": "/operation/manager/log/running_water/game/egg", + "createTime": 1776332452114 + }, + { + "reqTraceId": "GL-4c500d97fe3f6aa2e777c170e880bc31", + "reqUserId": "160", + "reqLanguage": "en", + "reqZoneId": "UTC", + "reqIp": "10.0.12.49", + "reqClient": "OPS", + "reqApi": "/console/dashboard/previews", + "reqApiVersion": "v2", + "reqTime": 1776313451145, + "id": "AppUserList", + "type": "SYSTEM", + "name": "用户列表", + "link": "/app/user/manager/user/table", + "createTime": 1776313451145 + }, + { + "reqTraceId": "GL-9eff89dc13f92cee8e476013e475b232", + "reqUserId": "160", + "reqLanguage": "en", + "reqZoneId": "UTC", + "reqIp": "10.0.20.94", + "reqClient": "OPS", + "reqApi": "/console/dashboard/previews", + "reqApiVersion": "v2", + "reqTime": 1776245058763, + "id": "TeamPolicyManager", + "type": "SYSTEM", + "name": "代理政策", + "link": "/team/team-policy", + "createTime": 1776245058764 + }, + { + "reqTraceId": "GL-dd55810a0797b1bd4288ebc6b7916f75", + "reqUserId": "160", + "reqLanguage": "en", + "reqZoneId": "UTC", + "reqIp": "10.0.12.49", + "reqClient": "OPS", + "reqApi": "/console/dashboard/previews", + "reqApiVersion": "v2", + "reqTime": 1776243303511, + "id": "team:member", + "type": "SYSTEM", + "name": "主播成员", + "link": "/team/team/member", + "createTime": 1776243303511 + }, + { + "reqTraceId": "GL-e41e534ef606191c784532ecefa38008", + "reqUserId": "160", + "reqLanguage": "en", + "reqZoneId": "UTC", + "reqIp": "10.0.12.49", + "reqClient": "OPS", + "reqApi": "/console/dashboard/previews", + "reqApiVersion": "v2", + "reqTime": 1776243294447, + "id": "BusinessDevelopment", + "type": "SYSTEM", + "name": "BD列表", + "link": "/team/business-development", + "createTime": 1776243294447 + }, + { + "reqTraceId": "GL-bae2f36d15f77bdb3e738dc58e1bc800", + "reqUserId": "160", + "reqLanguage": "en", + "reqZoneId": "UTC", + "reqIp": "10.0.20.94", + "reqClient": "OPS", + "reqApi": "/console/dashboard/previews", + "reqApiVersion": "v2", + "reqTime": 1776242391890, + "id": "game:config", + "type": "SYSTEM", + "name": "游戏列表", + "link": "/operation/manager/data_cnf/game-config", + "createTime": 1776242391890 + }, + { + "reqTraceId": "GL-022908aeb3ee33038d10981b0940fc26", + "reqUserId": "160", + "reqLanguage": "en", + "reqZoneId": "UTC", + "reqIp": "10.0.12.49", + "reqClient": "OPS", + "reqApi": "/console/dashboard/previews", + "reqApiVersion": "v2", + "reqTime": 1776158503061, + "id": "team:bdleader:work", + "type": "SYSTEM", + "name": "BDLeader工作", + "link": "/team/bd-leader-work", + "createTime": 1776158503061 + }, + { + "reqTraceId": "GL-7759554caea3846c5fca82c1478c28b3", + "reqUserId": "160", + "reqLanguage": "en", + "reqZoneId": "UTC", + "reqIp": "10.0.12.49", + "reqClient": "OPS", + "reqApi": "/console/dashboard/previews", + "reqApiVersion": "v2", + "reqTime": 1776074669162, + "id": "UserCustomGift", + "type": "SYSTEM", + "name": "用户专属礼物制作", + "link": "/app/user/manager/user_custom_gift", + "createTime": 1776074669162 + }, + { + "reqTraceId": "GL-9b16acbbd3ad6ac088740c1a30c564d1", + "reqUserId": "160", + "reqLanguage": "en", + "reqZoneId": "UTC", + "reqIp": "10.0.20.94", + "reqClient": "OPS", + "reqApi": "/console/dashboard/previews", + "reqApiVersion": "v2", + "reqTime": 1776074206583, + "id": "sys:resource:list", + "type": "SYSTEM", + "name": "资源管理", + "link": "/system/manager/resource", + "createTime": 1776074206583 + }, + { + "reqTraceId": "GL-d5e278dc379b183c02d52378775b1ad8", + "reqUserId": "160", + "reqLanguage": "en", + "reqZoneId": "UTC", + "reqIp": "10.0.20.94", + "reqClient": "OPS", + "reqApi": "/console/dashboard/previews", + "reqApiVersion": "v2", + "reqTime": 1776074206154, + "id": "sys:menu:list", + "type": "SYSTEM", + "name": "菜单管理", + "link": "/system/manager/menu", + "createTime": 1776074206154 + }, + { + "reqTraceId": "GL-f010314eafd3755510be60829bd7f5f8", + "reqUserId": "160", + "reqLanguage": "en", + "reqZoneId": "UTC", + "reqIp": "10.0.20.94", + "reqClient": "OPS", + "reqApi": "/console/dashboard/previews", + "reqApiVersion": "v2", + "reqTime": 1776070694764, + "id": "upload:file", + "type": "SYSTEM", + "name": "文件上传", + "link": "/system/manager/tools/manager/upload/file", + "createTime": 1776070694764 + }, + { + "reqTraceId": "GL-d305c7808e7665680e6f420c51f85be8", + "reqUserId": "160", + "reqLanguage": "en", + "reqZoneId": "UTC", + "reqIp": "10.0.20.94", + "reqClient": "OPS", + "reqApi": "/console/dashboard/previews", + "reqApiVersion": "v2", + "reqTime": 1776070692971, + "id": "tools:other", + "type": "SYSTEM", + "name": "小工具", + "link": "/system/manager/tools/manager/tools", + "createTime": 1776070692971 + }, + { + "reqTraceId": "GL-bfba1c4b6dddf7ca0e8afeb0567be6cb", + "reqUserId": "160", + "reqLanguage": "en", + "reqZoneId": "UTC", + "reqIp": "10.0.12.49", + "reqClient": "OPS", + "reqApi": "/console/dashboard/previews", + "reqApiVersion": "v2", + "reqTime": 1776070689919, + "id": "toot:gold:analyze", + "type": "SYSTEM", + "name": "金币分析", + "link": "/system/manager/tools/manager/gold-analyze", + "createTime": 1776070689919 + }, + { + "reqTraceId": "GL-9c6d5a4d2d0e240cdfa4f729d43b9fa8", + "reqUserId": "160", + "reqLanguage": "en", + "reqZoneId": "UTC", + "reqIp": "10.0.20.94", + "reqClient": "OPS", + "reqApi": "/console/dashboard/previews", + "reqApiVersion": "v2", + "reqTime": 1776070685881, + "id": "OrderCompensate", + "type": "SYSTEM", + "name": "订单补偿", + "link": "/system/manager/tools/manager/order/compensate", + "createTime": 1776070685882 + }, + { + "reqTraceId": "GL-f579fc5751d9d6867e1a703e7529ce18", + "reqUserId": "160", + "reqLanguage": "en", + "reqZoneId": "UTC", + "reqIp": "10.0.20.94", + "reqClient": "OPS", + "reqApi": "/console/dashboard/previews", + "reqApiVersion": "v2", + "reqTime": 1776070684510, + "id": "RedisManager", + "type": "SYSTEM", + "name": "Redis缓存管理", + "link": "/system/manager/tools/manager/redis", + "createTime": 1776070684511 + }, + { + "reqTraceId": "GL-dd1b84facd843153dd62aefea9fc01d4", + "reqUserId": "160", + "reqLanguage": "en", + "reqZoneId": "UTC", + "reqIp": "10.0.20.94", + "reqClient": "OPS", + "reqApi": "/console/dashboard/previews", + "reqApiVersion": "v2", + "reqTime": 1776070681380, + "id": "request:blacklist", + "type": "SYSTEM", + "name": "请求黑名单", + "link": "/system/manager/app/sys/request-blacklist", + "createTime": 1776070681380 + }, + { + "reqTraceId": "GL-2765d45daac6092185f983e42cc5c156", + "reqUserId": "160", + "reqLanguage": "en", + "reqZoneId": "UTC", + "reqIp": "10.0.12.49", + "reqClient": "OPS", + "reqApi": "/console/dashboard/previews", + "reqApiVersion": "v2", + "reqTime": 1776070679538, + "id": "ExternalIm", + "type": "SYSTEM", + "name": "IM通讯", + "link": "/system/manager/app/sys/external/im", + "createTime": 1776070679539 + } + ], + "customNavigations": [] + } +} diff --git a/docs/i18n/线程协作.md b/docs/i18n/线程协作.md new file mode 100644 index 0000000..f0cc060 --- /dev/null +++ b/docs/i18n/线程协作.md @@ -0,0 +1,1622 @@ +# 线程协作规范 + +## 目标 + +- 用于多线程并行推进国际化翻译时共享上下文 +- 避免多个线程翻译同一页面、重复新增同一批 key、或互相覆盖进度 +- 作为 `docs/i18n/翻译进度.md` 与 `docs/i18n/翻译清单.md` 的协作补充 + +## 文档定位 + +- 本文件只负责协作规则、认领顺序、线程状态、交接写法与经验沉淀 +- 主要路由的完整父子级结构、路由别名、路径、入口文件与优先检查顺序,统一看 `docs/i18n/主要路由.md` +- 阶段成果、构建验证、时间线进展,统一看 `docs/i18n/翻译进度.md` +- 文件级待办、进行中、已完成与认领清单,统一看 `docs/i18n/翻译清单.md` +- 新线程起手提示与首条消息模板,统一看 `docs/i18n/线程模板.md` +- 除本文件外,其他文档尽量不重复维护完整协作规则,避免规则更新时多处不一致 + +## 适用范围 + +- 线程一、线程二、线程三等并行翻译线程 +- 页面翻译、组件翻译、语言文件补充、展示适配修正、文档同步更新 + +## 协作原则 + +- 每个线程开始工作前,先读取以下 3 个文件: + - `docs/i18n/线程协作.md` + - `docs/i18n/翻译进度.md` + - `docs/i18n/翻译清单.md` +- 自 2026-04-17 起,领取新任务前还必须额外读取: + - `docs/i18n/主要路由.md` +- 每次准备领取新任务前,都要重新读取一次以上 3 份协作文档 + `docs/i18n/主要路由.md`,先确认最新认领状态已经落盘,避免两个线程在 md 尚未更新时重复认领同一文件 +- 所有线程统一领取优先级: + - 已完成 `src/views` 页面私有组件复查任务 + - 首页 `Dashboard` + - `docs/i18n/主要路由.md` 中列出的主要路由页面 + - 其他路由页面 +- 临时规则补充: + - 在“已完成 `src/views` 页面私有组件复查任务”完成前,暂不继续领取新的未完成普通页面 + - 这里的“私有组件”仅指 `src/views/**` 目录下、随页面一同渲染或由页面局部引用的组件,不包含公共组件目录 `src/components/**` +- 当首页或 `主要路由.md` 中仍有未完成页面时,不应优先领取其他普通路由页面 +- `主要路由.md` 中具体先领取哪一个页面,仍可按原来的灵活方式分配,只要遵守“不重复认领、不与其他线程冲突” +- 每次正式认领任务时,必须先把认领结果写入 md,再开始修改源码;不要先改代码、后补文档 +- 写入认领记录前,要先检查 3 份协作文档 + `docs/i18n/主要路由.md` 是否已有其他线程认领同一任务;写入完成后,要立刻再读一次同样的文档集合,确认没有新的冲突后再开工 +- 每个线程一次只认领明确的一组文件,避免交叉编辑 +- 只翻译展示文本,不修改功能逻辑、接口参数、路由路径、权限码、后端依赖值 +- 如果文本依赖接口返回且当前无法可靠推断,先跳过,并记录到 `docs/i18n/翻译清单.md` +- 每完成一轮修改后,必须同步更新: + - `docs/i18n/翻译进度.md` + - `docs/i18n/翻译清单.md` +- 自 2026-04-20 起,`src/views` 页面标记“已完成”时,还必须单独记录该页面私有组件状态: + - `无私有组件` + - `已随页面同步完成` + - `历史已完成,已复核通过` + - `历史已完成,但仍待复核` + +## 新线程启动速记 + +- 在 PowerShell 中读取 `docs/i18n/*.md` 或源码文件时,优先使用 `Get-Content -Raw -Encoding UTF8 `,否则终端可能出现乱码,但源码本身通常仍是 UTF-8。 +- 不是只有“新线程启动”才需要读 md;每次准备领取新文件前,也要再读一遍 3 份协作文档 + `docs/i18n/主要路由.md`,确认其他线程的认领状态已经同步到文档 +- 领取任务时,顺序固定为:先重读 3 份协作文档 + `docs/i18n/主要路由.md` -> 确认无人认领 -> 先写 md 认领 -> 再读一次同样的文档集合复查无冲突 -> 最后开始改代码 +- 本项目当前没有 `npm run build` 脚本;需要做构建验证时,统一使用 `npm run build:prod`。 +- 2026-04-17 当前环境补充: + - 优先直接执行 `npm run build:prod` + - 不要默认再用 `$env:NODE_OPTIONS='--openssl-legacy-provider'` + - 线程二已验证:当前 Node 会直接报 `--openssl-legacy-provider is not allowed in NODE_OPTIONS` + - 若直接执行 `npm run build:prod` 仍出现 `ERR_OSSL_EVP_UNSUPPORTED`,再退回使用 `$env:NODE_OPTIONS='--openssl-legacy-provider'; npm run build:prod` +- 新线程开始前,除了读 3 份协作文档 + `docs/i18n/主要路由.md`,还要先读最新的: + - `src/lang/messages/pages/en.js` + - `src/lang/messages/pages/zh.js` + 这样可以避免多线程同时追加 key 时互相覆盖。 +- 认领页面时,不要只看 `index.vue`。如果同目录还有页面私有子组件或抽屉组件,也要顺手扫描一遍是否仍有中文展示文案,例如: + - `src/views/team/diamond-policy/props-form-edit.vue` +- 历史上已经标记“已完成”的 `src/views` 页面,也不能默认其私有组件已完成;如果当时 md 只登记了入口页,后续必须补做一次目录级复核,并把组件状态补回 `翻译进度.md` +- 如果是“模块入口页 + tab/component 动态切换子页”结构,不能只按当前先看到的 1-2 个子页面认领;必须先把同一模块下所有会被入口页渲染到界面的子页面一起盘清 +- 如果页面里的私有子组件和现有模块语义一致,优先复用已有 key 体系,避免重复造轮子。本轮已验证可复用的 key 范围: + - `pages.propsSourceGroupForm` +- 快速扫描单文件中文展示文本时,可使用: + - `Select-String -Path -Pattern '[\u4e00-\u9fa5]' -Encoding UTF8` +- 如果确认只是注释中的中文,可以不处理;只有模板可见文案、按钮、表格列名、弹窗、placeholder、校验提示等属于必翻范围。 + +## 文件分工 + +### `docs/i18n/翻译进度.md` + +- 记录全局进展 +- 记录已完成页面、已完成组件、已做过的公共适配 +- 记录构建验证结果 +- 记录当前下一步目标 +- 自 2026-04-20 起,页面完成记录必须额外写明“页面私有组件状态” + +### `docs/i18n/翻译清单.md` + +- 记录待办、进行中、已完成 +- 记录哪些页面已被认领,哪些页面仍待处理 +- 记录哪些内容因接口返回数据暂时跳过 + +### `docs/i18n/主要路由.md` + +- 记录主要路由父子级结构 +- 记录路由中文名、英文名、路由别名、路径、入口文件与完成状态 +- 作为首页之后的主要检查与验收清单 + +### `docs/i18n/线程模板.md` + +- 记录新线程起手模板 +- 记录读取文档顺序与首条消息模板 +- 用于减少新线程重复漏读规则 + +### `docs/i18n/线程协作.md` + +- 记录线程协作规则 +- 记录线程认领关系 +- 记录交接规范 + +## 模块级最优检查方案 + +适用场景: + +- `src/views/**/index.vue` 内通过 `el-tabs`、``、`import Xxx from './xxx'`、抽屉、弹窗、局部组件等方式串起多个可见子页面 + +执行顺序: + +1. 先读入口页源码,找出所有 `import` 的同级页面、私有子组件、抽屉组件、弹窗组件 +2. 再对目标目录执行一次目录扫描: + - `Get-ChildItem -Recurse -File <模块目录>` +3. 把“入口页 import 到的文件”和“目录里实际存在的文件”做交叉核对 +4. 只要该文件会被入口页直接渲染到界面中,就要纳入同一轮检查范围 +5. 如果确实因为范围过大不能同轮处理,也必须先写入 `docs/i18n/翻译清单.md`: + - 哪个可见文件被暂时排除 + - 为什么排除 + - 下一个线程建议接手哪个文件 +6. 开工前,至少对“本次认领模块目录”执行一次递归中文扫描,确认没有漏掉同目录可见文件 +7. 完成后,必须再次对整个模块目录做递归中文扫描,而不是只扫本轮实际修改过的单个文件 + +最低检查清单: + +- 是否读取了入口页 +- 是否读取了模块目录文件列表 +- 是否核对了入口页里所有可见 tab / 动态组件 / 局部组件 +- 是否把故意跳过的可见文件写入 `翻译清单.md` +- 是否在完成后对整个模块目录重新扫描 + +本轮复盘案例: + +- `src/views/game/egg/index.vue` +- 问题:上一轮只认领了 + - `egg-exchange-record/index.vue` + - `egg-lottery-record/index.vue` +- 漏掉了: + - `egg-lottery-cnf/index.vue` +- 原因:虽然入口页 tab 中实际会展示该页,但上一轮仅在认领记录中写了“暂未纳入本次范围,避免一次认领过大”,没有同步把它作为“可见但待处理文件”明确写入 `翻译清单.md`,也没有把“入口页 import 列表”和“目录实际文件列表”做完整交叉核对 +- 后续要求:凡是模块入口页能直接切换到的子页面,不允许只凭主观缩小范围;若要拆轮次,必须先在 md 中显式登记遗漏文件 + +## 线程认领表 + +| 线程 | 当前状态 | 认领范围 | 说明 | +| --- | --- | --- | --- | +| 线程一 | 待分配 | 未认领 | 2026-04-20 已完成 `src/views/props/props-source-group/index.vue`、`src/views/sys/country-code/index.vue`、`src/views/user/app-manager/index.vue`、`src/views/sys/notice-message/index.vue` 与 `src/views/sys/start-page/index.vue` 国际化收口;当前无进行中任务 | +| 线程二 | 待分配 | 未认领 | 2026-04-17 已完成 `src/views/message/push/index.vue`、`src/views/message/push/new-push-form.vue`、`src/views/message/push/push-log.vue`、`src/views/message/push/push-task.vue` 的国际化收口、语言 key 补充、中文残留扫描、构建验证与 md 同步;`push-text-store.vue` 已登记为当前未纳入入口渲染链的排除项 | +| 线程三 | 待分配 | 未认领 | 2026-04-20 已完成 `src/views/tools/redis/index.vue` 与 `src/views/tools/upload/index.vue` 国际化收口、语言 key 补充、中文残留扫描、构建验证与 md 同步;当前无进行中任务,后续按临时规则优先处理“已完成 views 页面私有组件复查” | +| 线程四 | 待分配 | 未认领 | 避免和其他线程同时编辑同一语言模块 | + +## 最新认领记录 + +- 2026-04-20 + - 全线程临时任务更新: + - 暂停继续领取新的未完成普通页面 + - 先检查 `src/views` 下所有已标记完成页面的私有组件是否已完成国际化 + - 后续在 `docs/i18n/翻译进度.md` 中,页面完成记录必须额外带上“页面私有组件状态” + - 当前优先复核的历史已完成页面目录包括: + - `src/views/team/policy` + - `src/views/team/diamond-policy` + - `src/views/team/business-development` + - `src/views/room/profile` + - `src/views/activity/template-cnf` + - `src/views/cnf/lottery` + - 当前已发现但尚未补齐到已完成记录的私有组件示例: + - `src/views/team/policy/props-form-edit.vue` + - `src/views/team/diamond-policy/props-form-edit.vue` + - `src/views/team/business-development/add-bd.vue` + - `src/views/room/profile/user-drawer.vue` + - `src/views/activity/template-cnf/form-edit.vue` + - `src/views/cnf/lottery/select-prize.vue` +- 2026-04-20 + - 线程三已完成:`src/views/tools/upload/index.vue` + - 完成范围包括: + - 页面开关标签、拖拽上传提示、失败状态文案与文件大小超限提示国际化 + - 新增 `pages.uploadFile` 页面级语言 key,并同步写入 `src/lang/messages/pages/en.js` 与 `src/lang/messages/pages/zh.js` + - 对 `src/views/tools/upload/index.vue` 执行中文残留扫描 + - 执行构建验证 + - 同步更新 `docs/i18n/翻译进度.md`、`docs/i18n/翻译清单.md` 与 `docs/i18n/主要路由.md` + - 补充说明: + - 当前目录仅存在单一入口文件,无额外页面私有子组件 + - 直接执行 `npm run build:prod` 构建通过,当前仍保留项目原有 `22` 条 warning,未新增阻塞错误 +- 2026-04-20 + - 线程一已完成:`src/views/sys/start-page/index.vue` + - 完成范围包括: + - `src/views/sys/start-page/index.vue` + - `src/views/sys/start-page/form-edit.vue` + - 筛选区、状态下拉、活动类型本地映射、表格列头、按钮、删除确认、弹窗标题、表单标签、placeholder、保存/取消按钮与校验提示国际化 + - 新增 `pages.startPage` 页面级语言 key,并同步写入 `src/lang/messages/pages/en.js` 与 `src/lang/messages/pages/zh.js` + - 对 `src/views/sys/start-page/**/*.vue` 执行递归中文扫描 + - 执行构建验证 + - 同步更新 `docs/i18n/翻译进度.md`、`docs/i18n/翻译清单.md` 与 `docs/i18n/主要路由.md` + - 补充说明: + - `appStartPagePlanTypes` 的提交值与常量本身未改动,仅在页面展示层按值映射为国际化文案 + - 当前模块残余中文仅存在模板注释与“删除”代码注释中,不属于可见展示文案 + - 直接执行 `npm run build:prod` 构建通过,当前仍保留项目原有 `22` 条 warning,未新增阻塞错误 +- 2026-04-20 + - 线程三已新认领:`src/views/tools/upload/index.vue` + - 领取前动作: + - 已重新读取 `docs/i18n/线程协作.md` + - 已重新读取 `docs/i18n/翻译进度.md` + - 已重新读取 `docs/i18n/翻译清单.md` + - 已重新读取 `docs/i18n/主要路由.md` + - 已重新读取 `src/lang/messages/pages/en.js` + - 已重新读取 `src/lang/messages/pages/zh.js` + - 已读取 `src/views/tools/upload/index.vue` + - 已读取 `src/views/tools/upload` 目录文件列表 + - 已确认当前目录仅存在单一入口文件,无额外私有子页 + - 已确认当前没有其他线程认领该页面 + - 已按最新规则先更新 md,再开始源码改动 + - 认领范围包括: + - 页面开关标签、上传提示、失败状态文案与超限提示国际化 + - 中文残留扫描 + - 构建验证 + - `docs/i18n/翻译进度.md` 与 `docs/i18n/翻译清单.md` 同步更新 + - 不包含: + - 接口参数 + - 路由路径 + - 权限码 + - 后端依赖值 +- 2026-04-20 + - 线程三已完成:`src/views/tools/redis/index.vue` + - 完成范围包括: + - 页面入口快捷标签、空态文案、打卡缓存查询弹窗标题/按钮/校验提示国际化 + - 新增 `pages.redisTools` 页面级语言 key,并同步写入 `src/lang/messages/pages/en.js` 与 `src/lang/messages/pages/zh.js` + - 对 `src/views/tools/redis/index.vue` 执行中文残留扫描 + - 执行构建验证 + - 同步更新 `docs/i18n/翻译进度.md`、`docs/i18n/翻译清单.md` 与 `docs/i18n/主要路由.md` + - 补充说明: + - 当前源码中未发现剩余中文可见文本 + - 直接执行 `npm run build:prod` 先触发 `ERR_OSSL_EVP_UNSUPPORTED`,随后使用 `$env:NODE_OPTIONS='--openssl-legacy-provider'; npm run build:prod` 构建通过,仍为项目既有 `22` 条 warning,未新增阻塞错误 +- 2026-04-20 + - 线程三已新认领:`src/views/tools/redis/index.vue` + - 领取前动作: + - 已重新读取 `docs/i18n/线程协作.md` + - 已重新读取 `docs/i18n/翻译进度.md` + - 已重新读取 `docs/i18n/翻译清单.md` + - 已重新读取 `docs/i18n/主要路由.md` + - 已重新读取 `src/lang/messages/pages/en.js` + - 已重新读取 `src/lang/messages/pages/zh.js` + - 已读取 `src/views/tools/redis/index.vue` + - 已读取 `src/views/tools/redis` 目录文件列表 + - 已确认当前目录仅存在单一入口文件,无额外私有子页 + - 已确认当前没有其他线程认领该页面 + - 已按最新规则先更新 md,再开始源码改动 + - 认领范围包括: + - 页面入口标签、下拉项、空态文案、输入弹窗标题/按钮/校验提示国际化 + - 中文残留扫描 + - 构建验证 + - `docs/i18n/翻译进度.md` 与 `docs/i18n/翻译清单.md` 同步更新 + - 不包含: + - 接口参数 + - 路由路径 + - 权限码 + - 后端依赖值 +- 2026-04-20 + - 线程一已新认领:`src/views/sys/start-page/index.vue` + - 领取前动作: + - 已重新读取 `docs/i18n/线程协作.md` + - 已重新读取 `docs/i18n/翻译进度.md` + - 已重新读取 `docs/i18n/翻译清单.md` + - 已重新读取 `docs/i18n/主要路由.md` + - 已重新读取 `src/lang/messages/pages/en.js` + - 已重新读取 `src/lang/messages/pages/zh.js` + - 已读取 `src/views/sys/start-page/index.vue` + - 已读取 `src/views/sys/start-page/form-edit.vue` + - 已读取 `src/views/sys/start-page` 目录文件列表 + - 已对 `src/views/sys/start-page/**/*.vue` 执行递归中文扫描 + - 已按模块级最优检查方案核对入口页与目录实际文件 + - 已确认当前没有其他线程认领该模块 + - 已按最新规则先更新 md,再开始源码改动 + - 认领范围包括: + - `src/views/sys/start-page/index.vue` + - `src/views/sys/start-page/form-edit.vue` + - 筛选区、表格列头、按钮、状态文案、弹窗标题、表单标签、placeholder、确认提示与校验提示国际化 + - 中文残留扫描 + - 构建验证 + - `docs/i18n/翻译进度.md` 与 `docs/i18n/翻译清单.md` 同步更新 + - 不包含: + - 接口参数 + - 路由路径 + - 权限码 + - 后端依赖值 +- 2026-04-20 + - 线程一已完成:`src/views/sys/notice-message/index.vue` + - 完成范围包括: + - 页面筛选区、表格列头、类型文案、按钮、发布/上架确认提示、成功提示、弹窗标题、表单标签、placeholder 与校验提示国际化 + - 新增 `pages.noticeMessage` 页面级语言 key,并同步写入 `src/lang/messages/pages/en.js` 与 `src/lang/messages/pages/zh.js` + - 对 `src/views/sys/notice-message/**/*.vue` 执行递归中文扫描 + - 执行构建验证 + - 同步更新 `docs/i18n/翻译进度.md`、`docs/i18n/翻译清单.md` 与 `docs/i18n/主要路由.md` + - 补充说明: + - 当前源码残余中文仅存在字段行尾注释与“删除”注释,不属于可见展示文案 + - 直接执行 `npm run build:prod` 先触发 `ERR_OSSL_EVP_UNSUPPORTED`,随后使用 `$env:NODE_OPTIONS='--openssl-legacy-provider'; npm run build:prod` 构建通过,仍为项目既有 `22` 条 warning,未新增阻塞错误 +- 2026-04-20 + - 线程一已新认领:`src/views/sys/notice-message/index.vue` + - 领取前动作: + - 已重新读取 `docs/i18n/线程协作.md` + - 已重新读取 `docs/i18n/翻译进度.md` + - 已重新读取 `docs/i18n/翻译清单.md` + - 已重新读取 `docs/i18n/主要路由.md` + - 已重新读取 `src/lang/messages/pages/en.js` + - 已重新读取 `src/lang/messages/pages/zh.js` + - 已读取 `src/views/sys/notice-message/index.vue` + - 已读取 `src/views/sys/notice-message` 目录文件列表 + - 已对 `src/views/sys/notice-message/**/*.vue` 执行递归中文扫描 + - 已确认当前目录仅存在单一入口文件,无额外私有子页 + - 已确认当前没有其他线程认领该页面 + - 已按最新规则先更新 md,再开始源码改动 + - 认领范围包括: + - 页面筛选区、表格列头、类型文案、按钮、发布/上架确认提示、成功提示、弹窗标题、表单标签、placeholder 与校验提示国际化 + - 中文残留扫描 + - 构建验证 + - `docs/i18n/翻译进度.md` 与 `docs/i18n/翻译清单.md` 同步更新 + - 不包含: + - 接口参数 + - 路由路径 + - 权限码 + - 后端依赖值 +- 2026-04-20 + - 线程一已完成:`src/views/user/app-manager/index.vue` + - 完成范围包括: + - `src/views/user/app-manager/index.vue` + - `src/views/user/app-manager/administrator/index.vue` + - `src/views/user/app-manager/administrator/auth.vue` + - `src/views/user/app-manager/administrator-auth-resource/index.vue` + - 入口页 tab 标题、管理员列表页、权限管理页与权限设置弹窗的静态展示文案国际化 + - 新增 `pages.appManager` 页面级语言 key,并同步写入 `src/lang/messages/pages/en.js` 与 `src/lang/messages/pages/zh.js` + - 对 `src/views/user/app-manager/**/*.vue` 执行递归中文扫描 + - 执行构建验证 + - 同步更新 `docs/i18n/翻译进度.md`、`docs/i18n/翻译清单.md` 与 `docs/i18n/主要路由.md` + - 补充说明: + - 当前模块残余中文仅存在注释“去除校验”和注释掉的“管理房间”代码块,不属于可见展示文案 + - 直接执行 `npm run build:prod` 先触发 `ERR_OSSL_EVP_UNSUPPORTED`,随后使用 `$env:NODE_OPTIONS='--openssl-legacy-provider'; npm run build:prod` 构建通过,仍为项目既有 `22` 条 warning,未新增阻塞错误 +- 2026-04-20 + - 线程一已新认领:`src/views/user/app-manager/index.vue` + - 领取前动作: + - 已重新读取 `docs/i18n/线程协作.md` + - 已重新读取 `docs/i18n/翻译进度.md` + - 已重新读取 `docs/i18n/翻译清单.md` + - 已重新读取 `docs/i18n/主要路由.md` + - 已重新读取 `src/lang/messages/pages/en.js` + - 已重新读取 `src/lang/messages/pages/zh.js` + - 已读取 `src/views/user/app-manager/index.vue` + - 已读取 `src/views/user/app-manager` 目录文件列表 + - 已读取 `src/views/user/app-manager/administrator/index.vue` + - 已读取 `src/views/user/app-manager/administrator/auth.vue` + - 已读取 `src/views/user/app-manager/administrator-auth-resource/index.vue` + - 已对 `src/views/user/app-manager/**/*.vue` 执行递归中文扫描 + - 已按模块级最优检查方案核对入口页 tab 与目录实际文件 + - 已确认当前没有其他线程认领该模块 + - 已按最新规则先更新 md,再开始源码改动 + - 认领范围包括: + - `src/views/user/app-manager/index.vue` + - `src/views/user/app-manager/administrator/index.vue` + - `src/views/user/app-manager/administrator/auth.vue` + - `src/views/user/app-manager/administrator-auth-resource/index.vue` + - tab 标题、筛选区、表格列头、状态文案、按钮、弹窗标题、表单标签、确认提示与校验提示国际化 + - 中文残留扫描 + - 构建验证 + - `docs/i18n/翻译进度.md` 与 `docs/i18n/翻译清单.md` 同步更新 + - 不包含: + - 接口参数 + - 路由路径 + - 权限码 + - 后端依赖值 +- 2026-04-20 + - 线程一已完成:`src/views/sys/country-code/index.vue` + - 完成范围包括: + - 页面筛选区 placeholder、表格列头、状态文案、弹窗标题、表单标签、按钮、上传按钮与校验提示国际化 + - 新增 `pages.countryCode` 页面级语言 key,并同步写入 `src/lang/messages/pages/en.js` 与 `src/lang/messages/pages/zh.js` + - 对 `src/views/sys/country-code/index.vue` 执行中文残留扫描 + - 执行构建验证 + - 同步更新 `docs/i18n/翻译进度.md`、`docs/i18n/翻译清单.md` 与 `docs/i18n/主要路由.md` + - 补充说明: + - 当前源码残余中文仅存在注释“去除校验”,不属于可见展示文案 + - 使用 `$env:NODE_OPTIONS='--openssl-legacy-provider'; npm run build:prod` 构建通过,仍为项目既有 `22` 条 warning,未新增阻塞错误 +- 2026-04-20 + - 线程一已新认领:`src/views/sys/country-code/index.vue` + - 领取前动作: + - 已重新读取 `docs/i18n/线程协作.md` + - 已重新读取 `docs/i18n/翻译进度.md` + - 已重新读取 `docs/i18n/翻译清单.md` + - 已重新读取 `docs/i18n/主要路由.md` + - 已重新读取 `src/lang/messages/pages/en.js` + - 已重新读取 `src/lang/messages/pages/zh.js` + - 已读取 `src/views/sys/country-code/index.vue` + - 已确认该页面当前无同目录私有子页需要一并纳入 + - 已确认当前没有其他线程认领该文件 + - 已按最新规则先更新 md,再开始源码改动 + - 认领范围包括: + - 页面筛选区、表格列头、状态文案、弹窗标题、表单标签、按钮、上传按钮与校验提示国际化 + - 中文残留扫描 + - 构建验证 + - `docs/i18n/翻译进度.md` 与 `docs/i18n/翻译清单.md` 同步更新 + - 不包含: + - 接口参数 + - 路由路径 + - 权限码 + - 后端依赖值 +- 2026-04-20 + - 线程一已完成:`src/views/props/props-source-group/index.vue` + - 完成范围包括: + - 入口页筛选区 placeholder、搜索与添加按钮、表格列头、时间展示、编辑按钮与 loading 文案国际化 + - 复用 `common.search` 与既有 `pages.propsSourceGroupForm`,新增 `pages.propsSourceGroup` + - 对 `src/views/props/props-source-group/**/*.vue` 执行递归中文扫描 + - 执行构建验证 + - 同步更新 `docs/i18n/翻译进度.md`、`docs/i18n/翻译清单.md` 与 `docs/i18n/主要路由.md` + - 补充说明: + - 当前 `src/views/props/props-source-group/index.vue` 源码残余中文仅存在注释与行尾注释中,不属于可见展示文案 + - `src/views/props/props-source-group/form-edit.vue` 仍保留接口返回名称类文本与注释类中文;其中接口返回名称待后续样例数据支持后再决定是否补翻 + - `src/views/props/props-source-group/select-propsr-popover.vue` 当前未被入口页或 `form-edit.vue` 引用,不纳入本轮完成口径 + - 本轮直接执行 `npm run build:prod` 先触发 `ERR_OSSL_EVP_UNSUPPORTED`,随后使用 `$env:NODE_OPTIONS='--openssl-legacy-provider'; npm run build:prod` 构建通过,仍为项目既有 `22` 条 warning,未新增阻塞错误 +- 2026-04-20 + - 线程一已新认领:`src/views/props/props-source-group/index.vue` + - 领取前动作: + - 已重新读取 `docs/i18n/线程协作.md` + - 已重新读取 `docs/i18n/翻译进度.md` + - 已重新读取 `docs/i18n/翻译清单.md` + - 已重新读取 `docs/i18n/主要路由.md` + - 已重新读取 `src/lang/messages/pages/en.js` + - 已重新读取 `src/lang/messages/pages/zh.js` + - 已读取 `src/views/props/props-source-group/index.vue` + - 已读取 `src/views/props/props-source-group` 目录文件列表 + - 已对 `src/views/props/props-source-group/**/*.vue` 执行递归中文扫描 + - 已确认当前没有其他线程认领 `src/views/props/props-source-group/index.vue` + - 已按模块级最优检查方案核对入口页 import 列表与目录实际文件列表 + - 已按最新规则先更新 md,再开始源码改动 + - 认领范围包括: + - `src/views/props/props-source-group/index.vue` 内筛选区、按钮、表格列头、时间展示与操作文案国际化 + - 优先复用 `pages.propsSourceGroupForm`、通用语言项与既有 key;必要时再补充页面级语言 key + - 中文残留扫描 + - 构建验证 + - `docs/i18n/翻译进度.md` 与 `docs/i18n/翻译清单.md` 同步更新 + - 不包含: + - 接口参数 + - 路由路径 + - 权限码 + - 后端依赖值 + - 未接入入口渲染链的样例文件 + - 排除说明: + - `src/views/props/props-source-group/form-edit.vue` 已于前序轮次完成静态展示文案国际化 + - `src/views/props/props-source-group/select-propsr-popover.vue` 当前未被入口页或 `form-edit.vue` 引用,不纳入本轮完成口径;如后续接入渲染链,再单独认领 + +- 2026-04-17 + - 线程三已完成:首页 `Dashboard` 模块 + - 同步完成: + - `src/views/dashboard/index.vue` + - `src/views/dashboard/dashboard.vue` + - `src/views/dashboard/dashboard-charts/index.vue` + - `src/views/dashboard/quick-link/index.vue` + - `src/views/dashboard/introduction/user-account-info/index.vue` + - `src/views/dashboard/introduction/user-navigation/index.vue` + - `src/views/dashboard/introduction/waiting-processing/index.vue` + - `src/views/dashboard/components/active-index/index.vue` + - `src/views/dashboard/components/daily-currency/index.vue` + - `src/views/dashboard/components/daily-currency/line-graph-charts.vue` + - `src/views/dashboard/components/daily-currency-gold/index.vue` + - `src/views/dashboard/components/daily-currency-gold/line-graph-charts.vue` + - `src/views/dashboard/components/daily-currency-gold-origin-top/index.vue` + - `src/views/dashboard/components/daily-currency-gold-origin-top/bar-graph-charts.vue` + - `src/views/dashboard/components/daily-purchase/index.vue` + - `src/views/dashboard/components/daily-purchase/line-graph-charts-general.vue` + - `src/views/dashboard/components/daily-purchase/line-graph-charts.vue` + - `src/views/dashboard/components/daily-register-user/index.vue` + - `src/views/dashboard/components/daily-register-user/line-graph-charts.vue` + - `src/views/dashboard/components/monthly-purchase/index.vue` + - `src/views/dashboard/components/monthly-purchase/line-graph-charts.vue` + - `src/views/dashboard/components/user-daily-currency-gold-top/index.vue` + - `src/views/dashboard/components/user-daily-currency-gold-top/bar-graph-charts.vue` + - `src/views/dashboard/components/user-daily-currency-recharge-top/index.vue` + - `src/views/dashboard/components/user-daily-currency-recharge-top/bar-graph-charts.vue` + - `src/components/data/PropsSalesOverviewCharts/index.vue` + - `src/components/data/PropsSalesOverviewCharts/dialog.vue` + - `src/components/data/PropsSalesOverviewCharts/bar-graph-charts.vue` + - 完成范围包括: + - 首页入口欢迎区、tab 标题、账号区、系统时间、快捷入口、首页卡片、图表 tab 与首页直接依赖数据组件的可见静态文案国际化 + - 补充 `pages.dashboard` 到 `src/lang/messages/pages/en.js` 与 `src/lang/messages/pages/zh.js` + - 对 `src/views/dashboard/**/*` 与 `src/components/data/PropsSalesOverviewCharts/**/*` 执行中文残留扫描 + - 执行 `npm run build:prod` + - 同步更新 `docs/i18n/翻译进度.md` 与 `docs/i18n/翻译清单.md` + - 补充说明: + - 本轮一并处理了首页模块内实际渲染的私有图表子组件,避免只认领入口页导致子组件遗漏 + - `npm run build:prod` 通过,仍保留项目既有 `22` 条 warning,未新增阻塞错误 + - 线程一已完成:`src/views/sys/region-config/index.vue` + - 同步完成: + - `src/views/sys/region-config/assist/index.vue` + - `src/views/sys/region-config/region/index.vue`(本轮仅复用既有国际化并完成入口联动收口) + - 完成范围包括: + - 区域配置入口页 tab 标题国际化 + - 辅助配置页中的筛选区、表单标签、placeholder、按钮、表格列头、确认弹窗、拼接展示文案与校验提示国际化 + - 扩展 `src/lang/messages/pages/en.js` 对应 key + - 扩展 `src/lang/messages/pages/zh.js` 对应 key + - 对 `src/views/sys/region-config/index.vue` 与 `src/views/sys/region-config/assist/index.vue` 执行中文残留扫描 + - 执行 `npm run build:prod` + - 同步更新 `docs/i18n/翻译进度.md`、`docs/i18n/翻译清单.md` 与 `docs/i18n/主要路由.md` + - 补充说明: + - 本轮新增并复用 `pages.regionConfig.tabs` 与 `pages.regionConfig.assist` + - 当前源码残余中文仅存在于注释中,不属于可见展示文案 + - 构建通过,仍为项目既有 `22` 条 warning,未新增阻塞错误 +- 2026-04-17 + - 线程二已完成:`src/views/message/push/index.vue` + - 同步完成: + - `src/views/message/push/new-push-form.vue` + - `src/views/message/push/push-log.vue` + - `src/views/message/push/push-task.vue` + - 完成范围包括: + - 入口页 tab 标题国际化 + - 新建 Push 表单中的标签、placeholder、选项、按钮、确认弹窗、成功提示与校验提示国际化 + - Push 日志页中的筛选区、时间范围、表格列头与状态筛选文案国际化 + - 复用并扩展 `pages.messagePushTask`,新增 `pages.messagePush` 与 `pages.messagePushLog` + - 中文残留扫描 + - 执行 `npm run build:prod` + - 同步更新 `docs/i18n/翻译进度.md`、`docs/i18n/翻译清单.md` 与 `docs/i18n/主要路由.md` + - 补充说明: + - 当前模块残余中文仅存在于注释中,不属于可见展示文案 + - `src/views/message/push/push-text-store.vue` 仍未被 `index.vue` 入口 import 或切入 tab,本轮继续保留为排除项 + - 构建通过,仍为项目既有 `22` 条 warning,未新增阻塞错误 + - 线程一已完成:`src/views/user/freight/index.vue` + - 同步完成: + - `src/views/user/freight/form-edit.vue` + - `src/views/user/freight/running-water.vue` + - `src/views/user/freight/seller-info.vue` + - `src/views/user/freight/freight-seller-running-water.vue` + - 完成范围包括: + - 筛选区、按钮、表格列头、弹窗标题、表单标签、placeholder、校验提示、确认弹窗与收支展示文案国际化 + - 补充 `src/lang/messages/pages/en.js` 对应 key + - 补充 `src/lang/messages/pages/zh.js` 对应 key + - 对 `src/views/user/freight/**/*.vue` 执行递归中文扫描 + - 执行 `npm run build:prod` + - `docs/i18n/翻译进度.md` 与 `docs/i18n/翻译清单.md` 同步更新 + - 补充说明: + - 新增 `pages.userFreight` + - 模块内残余中文仅保留在注释、后端依赖提交值或当前非可见数据结构中,未改动逻辑、接口参数、路由路径与权限码 + - 构建通过,仍为项目既有 `22` 条 warning,未新增阻塞错误 + - 线程一已新认领:`src/views/sys/region-config/index.vue` + - 同步纳入范围: + - `src/views/sys/region-config/assist/index.vue` + - 领取前动作: + - 已重新读取 `docs/i18n/线程协作.md` + - 已重新读取 `docs/i18n/翻译进度.md` + - 已重新读取 `docs/i18n/翻译清单.md` + - 已重新读取 `docs/i18n/主要路由.md` + - 已重新读取 `src/lang/messages/pages/en.js` + - 已重新读取 `src/lang/messages/pages/zh.js` + - 已确认首页 `Dashboard` 模块已被线程三认领,`message/push` 已被线程二认领 + - 已确认当前没有其他线程认领 `src/views/sys/region-config/index.vue` + - 已核对 `src/views/sys/region-config/index.vue` 的 tab 入口与同目录可见子页关系 + - 已确认当前入口页实际渲染 `region/index.vue`、`assist/index.vue`,其中 `region/index.vue` 已完成,本轮仅处理剩余未完成可见子页与入口联动文案 + - 已按最新规则先更新 md,再开始源码改动 + - 认领范围包括: + - 区域配置入口页 tab 标题、辅助配置页中的筛选区、表单标签、placeholder、按钮、表格列头、确认弹窗与校验提示国际化 + - 复用或补充 `src/lang/messages/pages/en.js` 对应 key + - 复用或补充 `src/lang/messages/pages/zh.js` 对应 key + - 中文残留扫描 + - 构建验证 + - `docs/i18n/翻译进度.md` 与 `docs/i18n/翻译清单.md` 同步更新 + - 不包含: + - 接口参数 + - 路由路径 + - 权限码 + - 后端依赖值 +- 2026-04-17 + - 线程二已新认领:`src/views/message/push/index.vue` + - 同步纳入范围: + - `src/views/message/push/new-push-form.vue` + - `src/views/message/push/push-log.vue` + - `src/views/message/push/push-task.vue` + - 领取前动作: + - 已重新读取 `docs/i18n/线程协作.md` + - 已重新读取 `docs/i18n/翻译进度.md` + - 已重新读取 `docs/i18n/翻译清单.md` + - 已重新读取 `docs/i18n/主要路由.md` + - 已重新读取 `src/lang/messages/pages/en.js` + - 已重新读取 `src/lang/messages/pages/zh.js` + - 已读取 `src/views/message/push/index.vue` 与同目录文件列表,确认入口直接渲染 `new-push-form.vue`、`push-log.vue`、`push-task.vue` + - 已确认当前没有其他线程认领 `src/views/message/push/index.vue` 模块 + - 已按最新规则先更新 md,再开始源码改动 + - 认领范围包括: + - 页面入口 tab 标题国际化 + - `new-push-form.vue` 内静态展示文本国际化 + - `push-log.vue` 内静态展示文本国际化 + - 复核 `push-task.vue` 已有国际化并补齐入口联动文案 + - `src/lang/messages/pages/en.js` 对应 key 复用或补充 + - `src/lang/messages/pages/zh.js` 对应 key 复用或补充 + - 中文残留扫描 + - 构建验证 + - `docs/i18n/翻译进度.md` 与 `docs/i18n/翻译清单.md` 同步更新 + - 不包含: + - `src/views/message/push/push-text-store.vue` + - 排除说明: + - 当前 `src/views/message/push/index.vue` 只直接渲染 `new-push-form.vue`、`push-log.vue`、`push-task.vue` + - `push-text-store.vue` 目前未被该入口 import 或切入 tab,可后续按独立页面/死代码复核后再单独认领 + - 线程三已新认领:首页 `Dashboard` 模块 + - 同步纳入范围: + - `src/views/dashboard/index.vue` + - `src/views/dashboard/dashboard.vue` + - `src/views/dashboard/dashboard-charts/index.vue` + - `src/views/dashboard/quick-link/index.vue` + - `src/views/dashboard/introduction/index.vue` + - `src/views/dashboard/introduction/user-account-info/index.vue` + - `src/views/dashboard/introduction/user-navigation/index.vue` + - `src/views/dashboard/introduction/waiting-processing/index.vue` + - `src/views/dashboard/components/active-index/index.vue` + - `src/views/dashboard/components/daily-currency/index.vue` + - `src/views/dashboard/components/daily-currency-gold/index.vue` + - `src/views/dashboard/components/daily-purchase/index.vue` + - `src/views/dashboard/components/daily-register-user/index.vue` + - `src/views/dashboard/components/monthly-purchase/index.vue` + - `src/views/dashboard/components/user-daily-currency-gold-top/index.vue` + - `src/views/dashboard/components/user-daily-currency-recharge-top/index.vue` + - `src/components/data/PropsSalesOverviewCharts/index.vue` + - `src/components/data/PropsSalesOverviewCharts/dialog.vue` + - `src/components/data/PropsSalesOverviewCharts/bar-graph-charts.vue` + - 领取前动作: + - 已重新读取 `docs/i18n/线程协作.md` + - 已重新读取 `docs/i18n/翻译进度.md` + - 已重新读取 `docs/i18n/翻译清单.md` + - 已重新读取 `docs/i18n/主要路由.md` + - 已重新读取 `src/lang/messages/pages/en.js` + - 已重新读取 `src/lang/messages/pages/zh.js` + - 已确认当前没有其他线程认领首页模块 + - 已读取 `src/views/dashboard/index.vue`、`src/views/dashboard/dashboard.vue` 与首页模块目录文件列表 + - 已按首页模块目录整包认领,避免 tab、入口页与图表组件拆开后遗漏 + - 已补充核对首页直接依赖组件 `src/components/data/PropsSalesOverviewCharts/*` + - 已按最新规则先更新 md,再开始源码改动 + - 认领范围包括: + - 首页入口页、tab 标题、欢迎区、图表模块标题、筛选项、按钮、统计卡片、空态提示与说明文案国际化 + - 首页直接依赖的 `PropsSalesOverviewCharts` 组件内可见静态文案国际化 + - 复用或补充 `src/lang/messages/pages/en.js` 对应 key + - 复用或补充 `src/lang/messages/pages/zh.js` 对应 key + - 首页模块中文残留扫描 + - 构建验证 + - `docs/i18n/翻译进度.md` 与 `docs/i18n/翻译清单.md` 同步更新 + - 不包含: + - 接口参数 + - 路由路径 + - 权限码 + - 后端依赖值 + - 已更新全线程统一领取优先级: + - 首页 `Dashboard` + - `docs/i18n/主要路由.md` 中的主要路由页面 + - 其他路由页面 + - 规则说明: + - 该优先级适用于所有线程,不只线程三 + - `主要路由.md` 中具体先领哪一个页面,仍可按原有方式灵活分配 + - 只有当首页与 `主要路由.md` 中页面全部完成后,才进入其他路由页面 + - 线程三已补记完成:`src/components/data/EditUserDiamondRewardForm/index.vue` + - 完成范围包括: + - 组件内静态展示文本翻译 + - `src/lang/messages/pages/en.js` 对应 key 补充 + - `src/lang/messages/pages/zh.js` 对应 key 补充 + - 中文残留扫描 + - 构建验证 + - `docs/i18n/翻译进度.md` 与 `docs/i18n/翻译清单.md` 同步更新 + - 补充说明: + - 已完成钻石奖励弹窗标题、字段标签、placeholder、按钮与校验提示国际化 + - `userId`、`quantity`、`remarks` 提交字段与接口调用保持原样 + - 表单标签“钻石”复用 `pages.propsSourceGroupForm.resourceType.diamond` + - 新增 `pages.editUserDiamondRewardForm` + - 当前源码中未发现剩余中文展示文本 + - `npm run build:prod` 已通过,仍保留项目既有 `22` 条 warning,未新增阻塞错误 + - 线程二已完成:`src/components/data/EditUserGameCouponDeductionForm/index.vue` + - 完成范围包括: + - 组件内静态展示文本翻译 + - `src/lang/messages/pages/en.js` 对应 key 补充 + - `src/lang/messages/pages/zh.js` 对应 key 补充 + - 中文残留扫描 + - 构建验证 + - `docs/i18n/翻译进度.md` 与 `docs/i18n/翻译清单.md` 同步更新 + - 补充说明: + - 已完成扣除用户游戏券弹窗标题、表单标签、placeholder、按钮与校验提示国际化 + - 新增 `pages.editUserGameCouponDeductionForm` + - 当前源码中未发现剩余中文展示文本 + - 2026-04-17 当前环境直接执行 `npm run build:prod` 已通过,仍为项目既有 `22` 条 warning,未新增阻塞错误 + - 线程二已验证 `$env:NODE_OPTIONS='--openssl-legacy-provider'` 在当前 Node 下会报 `--openssl-legacy-provider is not allowed in NODE_OPTIONS`,后续线程应优先直接执行构建命令 + - 线程一已新认领:`src/views/user/freight/index.vue` + - 同步纳入范围: + - `src/views/user/freight/form-edit.vue` + - `src/views/user/freight/running-water.vue` + - `src/views/user/freight/seller-info.vue` + - `src/views/user/freight/freight-seller-running-water.vue` + - 领取前动作: + - 已重新读取 `docs/i18n/线程协作.md` + - 已重新读取 `docs/i18n/翻译进度.md` + - 已重新读取 `docs/i18n/翻译清单.md` + - 已重新读取 `src/lang/messages/pages/en.js` + - 已重新读取 `src/lang/messages/pages/zh.js` + - 已确认当前没有其他线程认领上述文件 + - 已核对 `src/views/user/freight/index.vue` 的入口页 import 与同目录可见子页 + - 已确认 `seller-info.vue` 继续渲染 `freight-seller-running-water.vue` + - 已按最新规则先更新 md,再开始源码改动 + - 认领范围包括: + - 筛选区、按钮、表格列头、弹窗标题、表单标签、placeholder、校验提示与确认弹窗国际化 + - 补充 `src/lang/messages/pages/en.js` 对应 key + - 补充 `src/lang/messages/pages/zh.js` 对应 key + - 中文残留扫描 + - 构建验证 + - `docs/i18n/翻译进度.md` 与 `docs/i18n/翻译清单.md` 同步更新 + - 不包含: + - 接口参数 + - 路由路径 + - 权限码 + - 后端依赖值 +- 2026-04-16 + - 线程一已完成:`src/views/game/egg/egg-lottery-cnf/index.vue` + - 补充复核: + - 已对 `src/views/game/egg/**/*.vue` 执行递归中文扫描 + - 已确认 `src/views/game/egg/index.vue`、`src/views/game/egg/egg-exchange-record/index.vue`、`src/views/game/egg/egg-lottery-record/index.vue`、`src/views/game/egg/egg-lottery-cnf/index.vue` 当前无剩余中文可见文本 + - 已补充 `pages.eggLotteryCnf` 中英文字段 + - 已执行 `npm run build:prod` + - 构建通过,仍为项目既有 warning,未新增阻塞错误 +- 2026-04-16 + - 线程一已补领:`src/views/game/egg/egg-lottery-cnf/index.vue` + - 领取前动作: + - 已重新读取 `docs/i18n/线程协作.md` + - 已重新读取 `docs/i18n/翻译进度.md` + - 已重新读取 `docs/i18n/翻译清单.md` + - 已重新读取 `src/lang/messages/pages/en.js` + - 已重新读取 `src/lang/messages/pages/zh.js` + - 已确认当前没有其他线程认领该文件 + - 已按“模块级最优检查方案”复核 Egg 目录入口页与可见子页范围 + - 已按最新规则先更新 md,再开始源码改动 + - 认领范围包括: + - 配置页筛选区、按钮、表格列头、占位文案、下拉选项、弹窗提示、校验提示国际化 + - 补充 `src/lang/messages/pages/en.js` 对应 key + - 补充 `src/lang/messages/pages/zh.js` 对应 key + - 中文残留扫描 + - 构建验证 + - `docs/i18n/翻译进度.md` 与 `docs/i18n/翻译清单.md` 同步更新 + - 不包含: + - 接口参数 + - 路由路径 + - 权限码 + - 后端依赖值 +- 2026-04-16 + - 线程一已新认领:`src/views/game/egg/index.vue` + - 同步纳入范围: + - `src/views/game/egg/egg-exchange-record/index.vue` + - `src/views/game/egg/egg-lottery-record/index.vue` + - 领取前动作: + - 已重新读取 `docs/i18n/线程协作.md` + - 已重新读取 `docs/i18n/翻译进度.md` + - 已重新读取 `docs/i18n/翻译清单.md` + - 已重新读取 `src/lang/messages/pages/en.js` + - 已重新读取 `src/lang/messages/pages/zh.js` + - 已确认当前没有其他线程认领上述文件 + - 已确认同目录下 `egg-lottery-cnf/index.vue` 暂未纳入本次范围,避免一次认领过大 + - 已按最新规则先更新 md,再开始源码改动 + - 认领范围包括: + - Egg 模块页签标题静态展示文本翻译 + - 兑换记录页与抽奖记录页中的筛选区、按钮、表格列标题等静态展示文本翻译 + - 复用或补充 `src/lang/messages/pages/en.js` 对应 key + - 复用或补充 `src/lang/messages/pages/zh.js` 对应 key + - 构建验证 + - `docs/i18n/翻译进度.md` 与 `docs/i18n/翻译清单.md` 同步更新 + - 不包含: + - 接口参数 + - 路由路径 + - 权限码 + - 后端依赖值 +- 2026-04-15 + - 线程二已新认领:`src/components/data/EditUserGameCouponDeductionForm/index.vue` + - 领取前动作: + - 已重新读取 `docs/i18n/线程协作.md` + - 已重新读取 `docs/i18n/翻译进度.md` + - 已重新读取 `docs/i18n/翻译清单.md` + - 已重新读取 `src/lang/messages/pages/en.js` + - 已重新读取 `src/lang/messages/pages/zh.js` + - 已确认当前没有其他线程认领该文件 + - 已按最新规则先更新 md,再开始源码改动 + - 认领范围包括: + - 组件内静态展示文本翻译 + - 复用或补充 `src/lang/messages/pages/en.js` 对应 key + - 复用或补充 `src/lang/messages/pages/zh.js` 对应 key + - 构建验证 + - `docs/i18n/翻译进度.md` 与 `docs/i18n/翻译清单.md` 同步更新 + - 不包含: + - 接口参数 + - 路由路径 + - 权限码 + - 后端依赖值 + - 线程三已新认领:`src/components/data/EditUserDiamondRewardForm/index.vue` + - 领取前动作: + - 已重新读取 `docs/i18n/线程协作.md` + - 已重新读取 `docs/i18n/翻译进度.md` + - 已重新读取 `docs/i18n/翻译清单.md` + - 已重新读取 `src/lang/messages/pages/en.js` + - 已重新读取 `src/lang/messages/pages/zh.js` + - 已确认当前没有其他线程认领该文件 + - 已按最新规则先更新 md,再开始源码改动 + - 认领范围包括: + - 组件内静态展示文本翻译 + - 复用或补充 `src/lang/messages/pages/en.js` 对应 key + - 复用或补充 `src/lang/messages/pages/zh.js` 对应 key + - 构建验证 + - `docs/i18n/翻译进度.md` 与 `docs/i18n/翻译清单.md` 同步更新 + - 不包含: + - 接口参数 + - 路由路径 + - 权限码 + - 后端依赖值 + - 线程一已新认领:`src/views/game/lucky-box/fortune-config/index.vue` + - 领取前动作: + - 已重新读取 `docs/i18n/线程协作.md` + - 已重新读取 `docs/i18n/翻译进度.md` + - 已重新读取 `docs/i18n/翻译清单.md` + - 已重新读取 `src/lang/messages/pages/en.js` + - 已重新读取 `src/lang/messages/pages/zh.js` + - 已确认当前没有其他线程认领上述文件 + - 已按最新规则先更新 md,再开始下一轮源码改动 + - 认领范围包括: + - 页面内静态展示文本翻译 + - 复用或补充 `src/lang/messages/pages/en.js` 对应 key + - 复用或补充 `src/lang/messages/pages/zh.js` 对应 key + - 构建验证 + - `docs/i18n/翻译进度.md` 与 `docs/i18n/翻译清单.md` 同步更新 + - 不包含: + - 接口参数 + - 路由路径 + - 权限码 + - 后端依赖值 + - 2026-04-16 线程一复核补充: + - 已重新读取 `docs/i18n/线程协作.md` + - 已重新读取 `docs/i18n/翻译进度.md` + - 已重新读取 `docs/i18n/翻译清单.md` + - 已重新读取 `src/lang/messages/pages/en.js` + - 已重新读取 `src/lang/messages/pages/zh.js` + - 已确认 `src/views/game/lucky-box/fortune-config/` 目录当前仅存在 `index.vue` + - 已确认 `index.vue` 中无剩余中文展示文本,`pages.luckyBoxFortuneConfig` 中英文字段已存在 + - 已使用 `$env:NODE_OPTIONS='--openssl-legacy-provider'; npm run build:prod` 完成构建验证 + - 构建通过,当前仍保留项目原有 `22` 条 warning,未新增阻塞错误 + - 已同步最终状态到 md,避免其他线程继续查找不存在的 `edit.vue`、`details.vue` + - 线程二已完成:`src/components/data/AccountInput/index.vue` + - 完成范围包括: + - 组件内静态展示文本翻译 + - `src/lang/messages/pages/en.js` 对应 key 补充 + - `src/lang/messages/pages/zh.js` 对应 key 补充 + - 中文残留扫描 + - 构建验证 + - `docs/i18n/翻译进度.md` 与 `docs/i18n/翻译清单.md` 同步更新 + - 补充说明: + - 已完成账号输入组件中类型选择 placeholder、类型选项与平台选择 placeholder 的国际化 + - 新增 `pages.accountInput` + - 当前源码中未发现剩余中文展示文本 + - `npm run build:prod` 通过,当前仍保留项目原有 `22` 条 warning,未新增阻塞错误 + - 线程二本轮完成后暂停认领,等待下一次任务 + - 线程一已完成:`src/views/sys/region-config/region/index.vue` + - 完成范围包括: + - 页面内静态展示文本翻译 + - `src/lang/messages/pages/en.js` 对应 key 补充 + - `src/lang/messages/pages/zh.js` 对应 key 补充 + - 构建验证 + - `docs/i18n/翻译进度.md` 与 `docs/i18n/翻译清单.md` 同步更新 + - 不包含: + - 接口参数 + - 路由路径 + - 权限码 + - 后端依赖值 + - 线程二已完成:`src/components/data/UserInfo/AccountStatusLatestLog/index.vue` + - 完成范围包括: + - 组件内静态展示文本翻译 + - `src/lang/messages/pages/en.js` 对应 key 补充 + - `src/lang/messages/pages/zh.js` 对应 key 补充 + - 中文残留扫描 + - 构建验证 + - `docs/i18n/翻译进度.md` 与 `docs/i18n/翻译清单.md` 同步更新 + - 补充说明: + - 新增 `pages.accountStatusLatestLog` + - `item.approvalUserName`、`item.statusName` 与 `item.createTime` 属于动态数据,按原值展示 + - `npm run build:prod` 通过,当前仍保留项目原有 `22` 条 warning,未新增阻塞错误 + - 线程二已完成:`src/views/game/lottery-config/index.vue` + - 完成范围包括: + - 页面内静态展示文本翻译 + - `src/lang/messages/pages/en.js` 对应 key 补充 + - `src/lang/messages/pages/zh.js` 对应 key 补充 + - 中文残留扫描 + - 构建验证 + - `docs/i18n/翻译进度.md` 与 `docs/i18n/翻译清单.md` 同步更新 + - 补充说明: + - 新增 `pages.gameLotteryConfig` + - `lotteryGameTypes` 中 `EGG` 的展示名称继续复用 `pages.gameLotteryConfigForm.gameType.egg` + - `showcaseTypes` 已改为复用 `pages.propsSourceGroupForm.word.onShelf/offShelf` + - 当前源码残留中文仅在注释掉的“上/下架”筛选块中,不属于可见展示文案 + - `npm run build:prod` 通过,当前仍保留项目原有 `22` 条 warning,未新增阻塞错误 + - 线程二已新认领:`src/components/data/UserInfo/AccountStatusLatestLog/index.vue` + - 领取前动作: + - 已重新读取 `docs/i18n/线程协作.md` + - 已重新读取 `docs/i18n/翻译进度.md` + - 已重新读取 `docs/i18n/翻译清单.md` + - 已重新读取 `src/lang/messages/pages/en.js` + - 已重新读取 `src/lang/messages/pages/zh.js` + - 已确认当前没有其他线程认领该文件 + - 已按最新规则先更新 md,再开始源码改动 + - 认领范围包括: + - 组件内静态展示文本翻译 + - 复用或补充 `src/lang/messages/pages/en.js` 对应 key + - 复用或补充 `src/lang/messages/pages/zh.js` 对应 key + - 构建验证 + - `docs/i18n/翻译进度.md` 与 `docs/i18n/翻译清单.md` 同步更新 + - 不包含: + - 接口参数 + - 路由路径 + - 权限码 + - 后端依赖值 + - 线程一已新认领:`src/components/data/InappPurchaseApple/index.vue` + - 认领范围包括: + - 组件内静态展示文本翻译 + - `src/lang/messages/pages/en.js` 对应 key 补充 + - `src/lang/messages/pages/zh.js` 对应 key 补充 + - 构建验证 + - `docs/i18n/翻译进度.md` 与 `docs/i18n/翻译清单.md` 同步更新 + - 不包含: + - 接口参数 + - 路由路径 + - 权限码 + - 后端依赖值 + - 线程一已完成核查:`src/components/data/InappPurchaseApple/index.vue` + - 核查结论: + - 当前组件已接入 `pages.inappPurchaseApple` + - 源码中未发现剩余中文展示文本 + - 本轮无需重复修改源码,仅同步认领状态 + - 线程一按当时规则重新读取 3 个 md 后确认: + - `src/components/data/InAppPurchaseDetails/index.vue` 已被线程二认领 + - 线程一不再认领该文件,避免冲突 + - 线程一已新认领:`src/components/data/InappPurchaseGoogle/index.vue` + - 领取前动作: + - 已重新读取 `docs/i18n/线程协作.md` + - 已重新读取 `docs/i18n/翻译进度.md` + - 已重新读取 `docs/i18n/翻译清单.md` + - 已确认当前没有其他线程认领该文件 + - 已按最新规则先更新 md,再开始源码改动 + - 认领范围包括: + - 组件内静态展示文本翻译 + - `src/lang/messages/pages/en.js` 对应 key 补充 + - `src/lang/messages/pages/zh.js` 对应 key 补充 + - 构建验证 + - `docs/i18n/翻译进度.md` 与 `docs/i18n/翻译清单.md` 同步更新 + - 不包含: + - 接口参数 + - 路由路径 + - 权限码 + - 后端依赖值 + - 线程一已完成:`src/components/data/InappPurchaseGoogle/index.vue` + - 完成范围包括: + - 组件内静态展示文本翻译 + - `src/lang/messages/pages/en.js` 对应 key 补充 + - `src/lang/messages/pages/zh.js` 对应 key 补充 + - 构建验证 + - `docs/i18n/翻译进度.md` 与 `docs/i18n/翻译清单.md` 同步更新 + - 不包含: + - 接口参数 + - 路由路径 + - 权限码 + - 后端依赖值 + - 线程一已新认领:`src/views/game/lucky-box/standard-config/gift-details.vue` + - 领取前动作: + - 已重新读取 `docs/i18n/线程协作.md` + - 已重新读取 `docs/i18n/翻译进度.md` + - 已重新读取 `docs/i18n/翻译清单.md` + - 已确认当前没有其他线程认领该文件 + - 已按最新规则先更新 md,再开始源码改动 + - 认领范围包括: + - 页面内静态展示文本翻译 + - `src/lang/messages/pages/en.js` 对应 key 补充 + - `src/lang/messages/pages/zh.js` 对应 key 补充 + - 构建验证 + - `docs/i18n/翻译进度.md` 与 `docs/i18n/翻译清单.md` 同步更新 + - 不包含: + - 接口参数 + - 路由路径 + - 权限码 + - 后端依赖值 + - 线程一已完成:`src/views/game/lucky-box/standard-config/gift-details.vue` + - 完成范围包括: + - 页面内静态展示文本翻译 + - 礼物类型展示映射本地化处理 + - `src/lang/messages/pages/en.js` 对应 key 补充 + - `src/lang/messages/pages/zh.js` 对应 key 补充 + - 中文残留扫描 + - 构建验证 + - `docs/i18n/翻译进度.md` 与 `docs/i18n/翻译清单.md` 同步更新 + - 补充说明: + - 保持礼物类型实际值、接口参数与页面逻辑不变 + - `npm run build:prod` 通过,沿用项目原有 `22` 条 warning,未新增阻塞错误 + - 线程一已新认领:`src/views/game/lucky-box/standard-config/index.vue` + - 同步纳入范围: + - `src/views/game/lucky-box/standard-config/edit.vue` + - `src/views/game/lucky-box/standard-config/probability.vue` + - 领取前动作: + - 已重新读取 `docs/i18n/线程协作.md` + - 已重新读取 `docs/i18n/翻译进度.md` + - 已重新读取 `docs/i18n/翻译清单.md` + - 已重新读取 `src/lang/messages/pages/en.js` + - 已重新读取 `src/lang/messages/pages/zh.js` + - 已确认当前没有其他线程认领上述文件 + - 已按最新规则先更新 md,再开始源码改动 + - 认领范围包括: + - 页面内静态展示文本翻译 + - 同目录私有编辑弹窗与概率配置弹窗静态展示文本翻译 + - 复用或补充 `src/lang/messages/pages/en.js` 对应 key + - 复用或补充 `src/lang/messages/pages/zh.js` 对应 key + - 构建验证 + - `docs/i18n/翻译进度.md` 与 `docs/i18n/翻译清单.md` 同步更新 + - 不包含: + - 接口参数 + - 路由路径 + - 权限码 + - 后端依赖值 + - 线程一已完成: + - `src/views/game/lucky-box/standard-config/index.vue` + - `src/views/game/lucky-box/standard-config/edit.vue` + - `src/views/game/lucky-box/standard-config/probability.vue` + - 完成范围包括: + - 页面内静态展示文本翻译 + - 同目录私有编辑弹窗与概率配置弹窗静态展示文本翻译 + - `src/lang/messages/pages/en.js` 对应 key 补充 + - `src/lang/messages/pages/zh.js` 对应 key 补充 + - 中文残留扫描 + - 构建验证 + - `docs/i18n/翻译进度.md` 与 `docs/i18n/翻译清单.md` 同步更新 + - 补充说明: + - 当前残留中文仅存在代码注释中,不属于可见展示文案 + - `npm run build:prod` 通过,沿用项目原有 `22` 条 warning,未新增阻塞错误 + - 线程一已新认领:`src/views/game/lucky-box/award-config/index.vue` + - 同步纳入范围: + - `src/views/game/lucky-box/award-config/edit.vue` + - `src/views/game/lucky-box/award-config/details.vue` + - 领取前动作: + - 已重新读取 `docs/i18n/线程协作.md` + - 已重新读取 `docs/i18n/翻译进度.md` + - 已重新读取 `docs/i18n/翻译清单.md` + - 已重新读取 `src/lang/messages/pages/en.js` + - 已重新读取 `src/lang/messages/pages/zh.js` + - 已确认当前没有其他线程认领上述文件 + - 已按最新规则先更新 md,再开始源码改动 + - 认领范围包括: + - 页面内静态展示文本翻译 + - 同目录私有编辑弹窗与奖励配置弹窗静态展示文本翻译 + - 复用或补充 `src/lang/messages/pages/en.js` 对应 key + - 复用或补充 `src/lang/messages/pages/zh.js` 对应 key + - 构建验证 + - `docs/i18n/翻译进度.md` 与 `docs/i18n/翻译清单.md` 同步更新 + - 不包含: + - 接口参数 + - 路由路径 + - 权限码 + - 后端依赖值 + - 线程一已完成: + - `src/views/game/lucky-box/award-config/index.vue` + - `src/views/game/lucky-box/award-config/edit.vue` + - `src/views/game/lucky-box/award-config/details.vue` + - 完成范围包括: + - 页面内静态展示文本翻译 + - 同目录私有编辑弹窗与奖励配置弹窗静态展示文本翻译 + - `src/lang/messages/pages/en.js` 对应 key 补充 + - `src/lang/messages/pages/zh.js` 对应 key 补充 + - 中文残留扫描 + - 构建验证 + - `docs/i18n/翻译进度.md` 与 `docs/i18n/翻译清单.md` 同步更新 + - 补充说明: + - 当前残留中文仅存在代码注释中,不属于可见展示文案 + - `propsType` 等本地常量值采用“值不变、展示翻译”方式处理 + - `npm run build:prod` 通过,沿用项目原有 `22` 条 warning,未新增阻塞错误 + - 线程一已新认领:`src/views/game/lucky-box/bounty-config/index.vue` + - 同步纳入范围: + - `src/views/game/lucky-box/bounty-config/edit.vue` + - `src/views/game/lucky-box/bounty-config/details.vue` + - 领取前动作: + - 已重新读取 `docs/i18n/线程协作.md` + - 已重新读取 `docs/i18n/翻译进度.md` + - 已重新读取 `docs/i18n/翻译清单.md` + - 已重新读取 `src/lang/messages/pages/en.js` + - 已重新读取 `src/lang/messages/pages/zh.js` + - 已确认当前没有其他线程认领上述文件 + - 已按最新规则先更新 md,再开始下一轮源码改动 + - 认领范围包括: + - 页面内静态展示文本翻译 + - 同目录私有编辑弹窗与道具配置弹窗静态展示文本翻译 + - 复用或补充 `src/lang/messages/pages/en.js` 对应 key + - 复用或补充 `src/lang/messages/pages/zh.js` 对应 key + - 构建验证 + - `docs/i18n/翻译进度.md` 与 `docs/i18n/翻译清单.md` 同步更新 + - 不包含: + - 接口参数 + - 路由路径 + - 权限码 + - 后端依赖值 + - 线程一已完成: + - `src/views/game/lucky-box/bounty-config/index.vue` + - `src/views/game/lucky-box/bounty-config/edit.vue` + - `src/views/game/lucky-box/bounty-config/details.vue` + - 完成范围包括: + - 页面内静态展示文本翻译 + - 同目录私有编辑弹窗与道具配置弹窗静态展示文本翻译 + - 礼物类型与道具类型本地映射国际化 + - `src/lang/messages/pages/en.js` 对应 key 补充 + - `src/lang/messages/pages/zh.js` 对应 key 补充 + - 中文残留扫描 + - 构建验证 + - `docs/i18n/翻译进度.md` 与 `docs/i18n/翻译清单.md` 同步更新 + - 补充说明: + - `DAILY`、`WEEKLY`、`giftTab`、`propsType`、`propsId`、`targetQuantity`、`validDays` 等实际提交值与接口参数保持原样 + - `giftConfigTabs` 与 `propsTypes` 采用“值不变、展示翻译”的方式在页面层本地映射 + - 当前三份源码中已无剩余中文展示文本 + - `npm run build:prod` 通过,沿用项目原有 `22` 条 warning,未新增阻塞错误 + - 线程三已新认领:`src/components/data/RoomInfo/index.vue` + - 领取前动作: + - 已重新读取 `docs/i18n/线程协作.md` + - 已重新读取 `docs/i18n/翻译进度.md` + - 已重新读取 `docs/i18n/翻译清单.md` + - 认领范围包括: + - 组件内静态展示文本翻译 + - `src/lang/messages/pages/en.js` 对应 key 补充 + - `src/lang/messages/pages/zh.js` 对应 key 补充 + - 构建验证 + - `docs/i18n/翻译进度.md` 与 `docs/i18n/翻译清单.md` 同步更新 + - 不包含: + - 接口参数 + - 路由路径 + - 权限码 + - 后端依赖值 + - 线程三已完成:`src/components/data/RoomInfo/index.vue` + - 完成范围包括: + - 组件内静态展示文本翻译 + - `src/lang/messages/pages/en.js` 对应 key 补充 + - `src/lang/messages/pages/zh.js` 对应 key 补充 + - 构建验证 + - `docs/i18n/翻译进度.md` 与 `docs/i18n/翻译清单.md` 同步更新 + - 补充说明: + - 文件内剩余中文来自注释掉的“装饰道具”代码块,不属于可见展示文案,本轮按协作规范保留 + - 线程三已新认领:`src/components/data/UserAuthForm/index.vue` + - 领取前动作: + - 已重新读取 `docs/i18n/线程协作.md` + - 已重新读取 `docs/i18n/翻译进度.md` + - 已重新读取 `docs/i18n/翻译清单.md` + - 认领范围包括: + - 组件内静态展示文本翻译 + - `src/lang/messages/pages/en.js` 对应 key 补充 + - `src/lang/messages/pages/zh.js` 对应 key 补充 + - 构建验证 + - `docs/i18n/翻译进度.md` 与 `docs/i18n/翻译清单.md` 同步更新 + - 不包含: + - 接口参数 + - 路由路径 + - 权限码 + - 后端依赖值 + - 线程三已完成:`src/components/data/UserAuthForm/index.vue` + - 完成范围包括: + - 组件内静态展示文本翻译 + - `src/lang/messages/pages/en.js` 对应 key 补充 + - `src/lang/messages/pages/zh.js` 对应 key 补充 + - 构建验证 + - `docs/i18n/翻译进度.md` 与 `docs/i18n/翻译清单.md` 同步更新 + - 补充说明: + - 已完成抽屉标题、卡片标题、手机号绑定操作、placeholder、校验提示、确认弹窗与成功提示国际化 + - 线程三已新认领:`src/components/data/UserInfo/BankCardDrawer/index.vue` + - 领取前动作: + - 已重新读取 `docs/i18n/线程协作.md` + - 已重新读取 `docs/i18n/翻译进度.md` + - 已重新读取 `docs/i18n/翻译清单.md` + - 已确认当前没有其他线程认领该文件 + - 已按最新规则先更新 md,再开始源码改动 + - 认领范围包括: + - 组件内静态展示文本翻译 + - `src/lang/messages/pages/en.js` 对应 key 补充 + - `src/lang/messages/pages/zh.js` 对应 key 补充 + - 构建验证 + - `docs/i18n/翻译进度.md` 与 `docs/i18n/翻译清单.md` 同步更新 + - 不包含: + - 接口参数 + - 路由路径 + - 权限码 + - 后端依赖值 + - 线程三已完成认领复查:`src/components/data/UserInfo/BankCardDrawer/index.vue` + - 复查动作: + - 已重新读取 `docs/i18n/线程协作.md` + - 已重新读取 `docs/i18n/翻译进度.md` + - 已重新读取 `docs/i18n/翻译清单.md` + - 已重新读取 `src/lang/messages/pages/en.js` + - 已重新读取 `src/lang/messages/pages/zh.js` + - 已确认当前没有其他线程认领该文件 + - 已确认认领信息已落盘,随后开始翻译与验证 + - 线程三已完成:`src/components/data/UserInfo/BankCardDrawer/index.vue` + - 完成范围包括: + - 组件内静态展示文本翻译 + - `src/lang/messages/pages/en.js` 对应 key 补充 + - `src/lang/messages/pages/zh.js` 对应 key 补充 + - 中文残留扫描 + - 构建验证 + - `docs/i18n/翻译进度.md` 与 `docs/i18n/翻译清单.md` 同步更新 + - 补充说明: + - 已完成抽屉标题、卡片标签、审核状态、使用状态、操作按钮、表单标签、placeholder、校验提示与确认弹窗国际化 + - `cardType`、银行卡类型枚举值与接口返回字段保持原样 + - `npm run build:prod` 通过,当前仍保留项目原有 `22` 条 warning,未新增阻塞错误 + - 线程三已新认领:`src/components/data/UserInfo/BaseInfo/AssociatedDeviceTimeline.vue` + - 领取前动作: + - 已重新读取 `docs/i18n/线程协作.md` + - 已重新读取 `docs/i18n/翻译进度.md` + - 已重新读取 `docs/i18n/翻译清单.md` + - 已重新读取 `src/lang/messages/pages/en.js` + - 已重新读取 `src/lang/messages/pages/zh.js` + - 已确认当前没有其他线程认领该文件 + - 已按最新规则先更新 md,再开始源码改动 + - 认领范围包括: + - 组件内静态展示文本翻译 + - 优先复用 `pages.userBaseInfo.labels` 既有 key,必要时再补充语言项 + - 构建验证 + - `docs/i18n/翻译进度.md` 与 `docs/i18n/翻译清单.md` 同步更新 + - 不包含: + - 接口参数 + - 路由路径 + - 权限码 + - 后端依赖值 + - 线程三已完成:`src/components/data/UserInfo/BaseInfo/AssociatedDeviceTimeline.vue` + - 完成范围包括: + - 组件内静态展示文本翻译 + - 复用 `pages.userBaseInfo.labels` 与 `pages.userBaseInfo.words.activeIp` 既有 key + - 中文残留扫描 + - 构建验证 + - `docs/i18n/翻译进度.md` 与 `docs/i18n/翻译清单.md` 同步更新 + - 补充说明: + - 已完成语言、时区、IP、客户端、设备信息、Push 信息与注册时间等标签国际化 + - `item.latestDevice.*` 与 `item.userProfile.createTime` 等动态数据保持原样 + - `npm run build:prod` 通过,当前仍保留项目原有 `22` 条 warning,未新增阻塞错误 + - 线程三已新认领:`src/components/data/SearchRoomInput/index.vue` + - 领取前动作: + - 已重新读取 `docs/i18n/线程协作.md` + - 已重新读取 `docs/i18n/翻译进度.md` + - 已重新读取 `docs/i18n/翻译清单.md` + - 已重新读取 `src/lang/messages/pages/en.js` + - 已重新读取 `src/lang/messages/pages/zh.js` + - 已确认当前没有其他线程认领该文件 + - 已按最新规则先更新 md,再开始源码改动 + - 认领范围包括: + - 组件内静态展示文本翻译 + - `src/lang/messages/pages/en.js` 对应 key 补充 + - `src/lang/messages/pages/zh.js` 对应 key 补充 + - 构建验证 + - `docs/i18n/翻译进度.md` 与 `docs/i18n/翻译清单.md` 同步更新 + - 不包含: + - 接口参数 + - 路由路径 + - 权限码 + - 后端依赖值 + - 线程三已完成:`src/components/data/SearchRoomInput/index.vue` + - 完成范围包括: + - 组件内静态展示文本翻译 + - `src/lang/messages/pages/en.js` 对应 key 补充 + - `src/lang/messages/pages/zh.js` 对应 key 补充 + - 中文残留扫描 + - 构建验证 + - `docs/i18n/翻译进度.md` 与 `docs/i18n/翻译清单.md` 同步更新 + - 补充说明: + - 已完成输入框 placeholder、类型选项、搜索弹窗文案与失败提示国际化 + - 新增 `pages.searchRoomInput` + - 当前源码残留中文仅在注释中,不属于可见展示文案 + - `npm run build:prod` 通过,当前仍保留项目原有 `22` 条 warning,未新增阻塞错误 + - 按当前要求,线程三本轮完成后暂停,等待下次认领 + - 线程三已新认领:`src/components/data/GiftHistoryDetailsDrawer/index.vue` + - 领取前动作: + - 已重新读取 `docs/i18n/线程协作.md` + - 已重新读取 `docs/i18n/翻译进度.md` + - 已重新读取 `docs/i18n/翻译清单.md` + - 已重新读取 `src/lang/messages/pages/en.js` + - 已重新读取 `src/lang/messages/pages/zh.js` + - 已确认当前没有其他线程认领该文件 + - 已按最新规则先更新 md,再开始源码改动 + - 认领范围包括: + - 组件内静态展示文本翻译 + - 优先复用现有 `pages.userBaseInfo` 与通用语言项,必要时再补充页面级语言 key + - 构建验证 + - `docs/i18n/翻译进度.md` 与 `docs/i18n/翻译清单.md` 同步更新 + - 不包含: + - 接口参数 + - 路由路径 + - 权限码 + - 后端依赖值 + - 线程三已完成:`src/components/data/GiftHistoryDetailsDrawer/index.vue` + - 完成范围包括: + - 组件内静态展示文本翻译 + - 复用 `pages.userBaseInfo.labels.anchor` 与 `pages.userBaseInfo.words.yes/no` + - `src/lang/messages/pages/en.js` 对应 key 补充 + - `src/lang/messages/pages/zh.js` 对应 key 补充 + - 中文残留扫描 + - 构建验证 + - `docs/i18n/翻译进度.md` 与 `docs/i18n/翻译清单.md` 同步更新 + - 补充说明: + - 已完成抽屉标题、发送人/房间、礼物信息快照、接收用户标签、日志事件与单据 ID 按钮国际化 + - 新增 `pages.giftHistoryDetailsDrawer` + - 当前源码残留中文仅在注释中,不属于可见展示文案 + - `npm run build:prod` 通过,当前仍保留项目原有 `22` 条 warning,未新增阻塞错误 + - 线程三已新认领:`src/components/data/EditUserForm/index.vue` + - 领取前动作: + - 已重新读取 `docs/i18n/线程协作.md` + - 已重新读取 `docs/i18n/翻译进度.md` + - 已重新读取 `docs/i18n/翻译清单.md` + - 已重新读取 `src/lang/messages/pages/en.js` + - 已重新读取 `src/lang/messages/pages/zh.js` + - 已确认当前没有其他线程认领该文件 + - 已按最新规则先更新 md,再开始源码改动 + - 认领范围包括: + - 组件内静态展示文本翻译 + - 优先复用现有 `pages.userBaseInfo.labels`,必要时再补充页面级语言 key + - 构建验证 + - `docs/i18n/翻译进度.md` 与 `docs/i18n/翻译清单.md` 同步更新 + - 不包含: + - 接口参数 + - 路由路径 + - 权限码 + - 后端依赖值 + - 线程三已完成:`src/components/data/EditUserForm/index.vue` + - 完成范围包括: + - 组件内静态展示文本翻译 + - 复用 `pages.userBaseInfo.labels.age/country` 与 `pages.userBaseInfo.words.male/female` + - `src/lang/messages/pages/en.js` 对应 key 补充 + - `src/lang/messages/pages/zh.js` 对应 key 补充 + - 中文残留扫描 + - 构建验证 + - `docs/i18n/翻译进度.md` 与 `docs/i18n/翻译清单.md` 同步更新 + - 补充说明: + - 已完成抽屉标题、昵称/性别表单项、出生日期 placeholder、关闭/提交按钮与校验提示国际化 + - 性别选项采用按值映射翻译,未改动全局 `genders` 常量本身 + - 新增 `pages.editUserForm` + - 当前源码中未发现剩余中文展示文本 + - `npm run build:prod` 通过,当前仍保留项目原有 `22` 条 warning,未新增阻塞错误 + - 线程三已新认领:`src/components/data/EditUserGoldCoinRewardForm/index.vue` + - 领取前动作: + - 已重新读取 `docs/i18n/线程协作.md` + - 已重新读取 `docs/i18n/翻译进度.md` + - 已重新读取 `docs/i18n/翻译清单.md` + - 已重新读取 `src/lang/messages/pages/en.js` + - 已重新读取 `src/lang/messages/pages/zh.js` + - 已确认当前没有其他线程认领该文件 + - 已按最新规则先更新 md,再开始源码改动 + - 认领范围包括: + - 组件内静态展示文本翻译 + - 奖励类型仅做展示层本地映射翻译,不改动原常量值与提交内容 + - 复用或补充 `src/lang/messages/pages/en.js` 对应 key + - 复用或补充 `src/lang/messages/pages/zh.js` 对应 key + - 构建验证 + - `docs/i18n/翻译进度.md` 与 `docs/i18n/翻译清单.md` 同步更新 + - 不包含: + - 接口参数 + - 路由路径 + - 权限码 + - 后端依赖值 + - 线程三已完成:`src/components/data/EditUserGoldCoinRewardForm/index.vue` + - 完成范围包括: + - 组件内静态展示文本翻译 + - 奖励类型展示层本地映射国际化,未改动原常量值与提交内容 + - `src/lang/messages/pages/en.js` 对应 key 补充 + - `src/lang/messages/pages/zh.js` 对应 key 补充 + - 中文残留扫描 + - 构建验证 + - `docs/i18n/翻译进度.md` 与 `docs/i18n/翻译清单.md` 同步更新 + - 补充说明: + - 已完成标题、表单标签、placeholder、按钮与校验提示国际化 + - `currencyRewardReasons` 相关提交值与备注拼接内容保持原样,仅对页面展示名称做本地映射翻译 + - 新增 `pages.editUserGoldCoinRewardForm` + - 当前源码残留中文仅在模板注释中,不属于可见展示文案 + - `npm run build:prod` 通过,当前仍保留项目原有 `22` 条 warning,未新增阻塞错误 + - 线程三本轮完成后切回待分配,暂不继续认领新任务 + - 线程二已认领并完成:`src/components/data/AccountHanle/index.vue` + - 认领范围包括: + - 组件内静态展示文本翻译 + - `src/lang/messages/pages/en.js` 对应 key 补充 + - `src/lang/messages/pages/zh.js` 对应 key 补充 + - 构建验证 + - `docs/i18n/翻译进度.md` 与 `docs/i18n/翻译清单.md` 同步更新 + - 特殊说明: + - 默认“警告”描述文案会直接写入提交表单,属于提交内容,不纳入本轮静态展示翻译 + - 不包含: + - 接口参数 + - 路由路径 + - 权限码 + - 后端依赖值 + - 线程二已认领并完成:`src/views/team/diamond-policy/index.vue` + - 认领范围包括: + - 页面内静态展示文本翻译 + - `src/lang/messages/pages/en.js` 对应 key 补充 + - `src/lang/messages/pages/zh.js` 对应 key 补充 + - 构建验证 + - `docs/i18n/翻译进度.md` 与 `docs/i18n/翻译清单.md` 同步更新 + - 不包含: + - 接口参数 + - 路由路径 + - 权限码 + - 后端依赖值 + - 线程二已新认领:`src/components/data/InAppPurchaseDetails/index.vue` + - 领取前动作: + - 已重新读取 `docs/i18n/线程协作.md` + - 已重新读取 `docs/i18n/翻译进度.md` + - 已重新读取 `docs/i18n/翻译清单.md` + - 已确认当前没有其他线程认领该文件 + - 已按最新规则先更新 md,再开始源码改动 + - 认领范围包括: + - 组件内静态展示文本翻译 + - `src/lang/messages/pages/en.js` 对应 key 补充 + - `src/lang/messages/pages/zh.js` 对应 key 补充 + - 构建验证 + - `docs/i18n/翻译进度.md` 与 `docs/i18n/翻译清单.md` 同步更新 + - 不包含: + - 接口参数 + - 路由路径 + - 权限码 + - 后端依赖值 + - 线程二已完成:`src/components/data/InAppPurchaseDetails/index.vue` + - 完成范围包括: + - 组件内静态展示文本翻译 + - `src/lang/messages/pages/en.js` 对应 key 补充 + - `src/lang/messages/pages/zh.js` 对应 key 补充 + - 中文残留扫描 + - 构建验证 + - `docs/i18n/翻译进度.md` 与 `docs/i18n/翻译清单.md` 同步更新 + - 补充说明: + - 已完成抽屉标题、信息分组标题、字段标签、状态映射、元数据表头与事件通知标题国际化 + - `createNickname`、`productDescriptor`、商品名称/内容/描述、原因、事件类型与通知数据属于接口返回内容,按原值展示 + - `npm run build:prod` 通过,当前仍保留项目原有 `22` 条 warning,未新增阻塞错误 + - 线程二已新认领:`src/views/game/lottery-config/form-edit.vue` + - 同步纳入范围: + - `src/views/game/lottery-config/select-propsr-popover.vue` + - 领取前动作: + - 已重新读取 `docs/i18n/线程协作.md` + - 已重新读取 `docs/i18n/翻译进度.md` + - 已重新读取 `docs/i18n/翻译清单.md` + - 已重新读取 `src/lang/messages/pages/en.js` + - 已重新读取 `src/lang/messages/pages/zh.js` + - 已确认当前没有其他线程认领上述文件 + - 已按最新规则先更新 md,再开始源码改动 + - 认领范围包括: + - 页面内静态展示文本翻译 + - 同目录私有组件静态展示文本翻译 + - `src/lang/messages/pages/en.js` 对应 key 补充或复用现有 key + - `src/lang/messages/pages/zh.js` 对应 key 补充或复用现有 key + - 构建验证 + - `docs/i18n/翻译进度.md` 与 `docs/i18n/翻译清单.md` 同步更新 + - 不包含: + - 接口参数 + - 路由路径 + - 权限码 + - 后端依赖值 + - 线程二已完成:`src/views/game/lottery-config/form-edit.vue` + - 同步完成: + - `src/views/game/lottery-config/select-propsr-popover.vue` + - 完成范围包括: + - 页面内静态展示文本翻译 + - 同目录私有组件静态展示文本翻译 + - `src/lang/messages/pages/en.js` 对应 key 补充与现有 key 复用 + - `src/lang/messages/pages/zh.js` 对应 key 补充与现有 key 复用 + - 中文残留扫描 + - 构建验证 + - `docs/i18n/翻译进度.md` 与 `docs/i18n/翻译清单.md` 同步更新 + - 补充说明: + - 新增 `pages.gameLotteryConfigForm` + - 资源类型名称优先复用 `pages.propsSourceGroupForm.resourceType` + - `lotteryGameTypes` 中 `EGG` 的展示名称在页面内本地映射翻译,未改动共享常量值 + - `specialIdTypes`、`pItem.name`、`badgeName` 等动态或接口返回内容保持原样 + - `npm run build:prod` 通过,当前仍保留项目原有 `22` 条 warning,未新增阻塞错误 + - 线程二已新认领:`src/views/game/lottery-config/index.vue` + - 领取前动作: + - 已重新读取 `docs/i18n/线程协作.md` + - 已重新读取 `docs/i18n/翻译进度.md` + - 已重新读取 `docs/i18n/翻译清单.md` + - 已重新读取 `src/lang/messages/pages/en.js` + - 已重新读取 `src/lang/messages/pages/zh.js` + - 已确认当前没有其他线程认领该文件 + - 已按最新规则先更新 md,再开始源码改动 + - 认领范围包括: + - 页面内静态展示文本翻译 + - 复用或补充 `src/lang/messages/pages/en.js` 对应 key + - 复用或补充 `src/lang/messages/pages/zh.js` 对应 key + - 构建验证 + - `docs/i18n/翻译进度.md` 与 `docs/i18n/翻译清单.md` 同步更新 + - 不包含: + - 接口参数 + - 路由路径 + - 权限码 + - 后端依赖值 + - 线程二已新认领:`src/components/data/UserInfo/UserTableExhibit/index.vue` + - 领取前动作: + - 已重新读取 `docs/i18n/线程协作.md` + - 已重新读取 `docs/i18n/翻译进度.md` + - 已重新读取 `docs/i18n/翻译清单.md` + - 已重新读取 `src/lang/messages/pages/en.js` + - 已重新读取 `src/lang/messages/pages/zh.js` + - 已确认当前没有其他线程认领该文件 + - 已按最新规则先更新 md,再开始源码改动 + - 认领范围包括: + - 组件内静态展示文本翻译 + - 优先复用 `pages.userBaseInfo.labels` 既有 key,必要时再补充语言项 + - 构建验证 + - `docs/i18n/翻译进度.md` 与 `docs/i18n/翻译清单.md` 同步更新 + - 不包含: + - 接口参数 + - 路由路径 + - 权限码 + - 后端依赖值 + - 线程二已完成:`src/components/data/UserInfo/UserTableExhibit/index.vue` + - 完成范围包括: + - 组件内静态展示文本翻译 + - 复用 `pages.userBaseInfo.labels.specialIdSuffix` 既有 key + - 中文残留扫描 + - 构建验证 + - `docs/i18n/翻译进度.md` 与 `docs/i18n/翻译清单.md` 同步更新 + - 补充说明: + - 特殊 ID 账号后缀改为复用现有国际化 key,未新增页面级语言项 + - `npm run build:prod` 通过,当前仍保留项目原有 `22` 条 warning,未新增阻塞错误 + - 线程二按用户要求在本任务完成后暂停,不继续认领新任务 + + - 线程二已新认领:`src/components/data/AccountInput/index.vue` + - 领取前动作: + - 已重新读取 `docs/i18n/线程协作.md` + - 已重新读取 `docs/i18n/翻译进度.md` + - 已重新读取 `docs/i18n/翻译清单.md` + - 已重新读取 `src/lang/messages/pages/en.js` + - 已重新读取 `src/lang/messages/pages/zh.js` + - 已确认当前没有其他线程认领该文件 + - 已按最新规则先更新 md,再开始源码改动 + - 认领范围包括: + - 组件内静态展示文本翻译 + - 复用或补充 `src/lang/messages/pages/en.js` 对应 key + - 复用或补充 `src/lang/messages/pages/zh.js` 对应 key + - 构建验证 + - `docs/i18n/翻译进度.md` 与 `docs/i18n/翻译清单.md` 同步更新 + - 不包含: + - 接口参数 + - 路由路径 + - 权限码 + - 后端依赖值 + +## 推荐分工方式 + +### 方案一:按页面拆分 + +- 线程一:`src/views/sys/region-config/region/index.vue` +- 线程二:`src/views/team/diamond-policy/index.vue` +- 线程三:`src/components/data/AccountHanle/index.vue` +- 线程四:`src/components/data/RoomInfo/index.vue` + +适合场景: + +- 页面之间相互独立 +- 各线程都能单独完成“页面文本 + 对应 i18n key + 文档更新” + +### 方案二:按类型拆分 + +- 线程一:处理 `views` 页面 +- 线程二:处理 `components/data` 组件 +- 线程三:专门补语言文件与整理 key +- 线程四:专门做构建验证、文档同步、展示适配修正 + +适合场景: + +- 线程较多 +- 需要有人专门收口语言文件和文档 + +## 强烈建议的执行顺序 + +1. 新线程启动后,先读取 3 份协作文档 + `docs/i18n/主要路由.md` +2. 先检查“已完成 `src/views` 页面私有组件复查任务”是否仍有待处理目录;若有,优先从这批目录中认领 +3. 每次准备领取新任务前,再读取一次同样的文档集合,确认认领状态已更新到文档 +4. 确认无人认领后,先在 md 中写明自己认领的文件 +5. 写完认领记录后,立刻再读取一次同样的文档集合,确认没有其他线程同时写入冲突 +6. 确认认领信息已落盘后,再改自己认领范围内的页面、组件和对应翻译 key +7. 如果需要新增公共 key,优先使用已有命名体系,避免同义重复 key +8. 修改完成后先本地构建验证 +9. 把结果同步写入 `翻译进度.md` 和 `翻译清单.md` +10. 在线程认领表里把状态改为“已完成”或“阻塞” + +## 线程之间如何“保持联系” + +- 通过 md 文件共享状态,而不是靠记忆 +- 通过“认领表”避免重复工作 +- 通过“阻塞记录”说明哪些地方因为接口返回数据暂时不能翻 +- 通过“已完成记录”告诉其他线程哪些文件不要再碰 +- 通过“页面私有组件状态”明确区分:页面本身已完成,还是页面连同私有组件都已复核完成 + +## 阻塞记录写法 + +- 文件: +- 阻塞原因: +- 是否依赖接口返回: +- 当前处理策略: +- 后续需要补充什么数据: + +## 交接写法 + +- 本线程已完成: +- 本线程未完成: +- 新增的语言 key 范围: +- 未处理原因: +- 下一个线程建议接手文件: + +## 注意事项 + +- 多线程时,最容易冲突的是: + - `src/lang/messages/pages/en.js` + - `src/lang/messages/pages/zh.js` + - `docs/i18n/翻译进度.md` + - `docs/i18n/翻译清单.md` +- 因此建议每个线程只处理自己页面对应的一段 key,并在合并前先读取最新版本 +- 每次领取新任务前,先重读 `docs/i18n/线程协作.md`、`docs/i18n/翻译进度.md`、`docs/i18n/翻译清单.md` 与 `docs/i18n/主要路由.md`,确认别人已经把认领状态写入 md,再决定是否认领 +- 认领任务不是“看到没人做就直接开改”,而是“先写 md 锁定任务,再开始源码修改” +- 写入认领记录前后都要复查 3 份协作文档 + `docs/i18n/主要路由.md`;如果发现同一文件被别的线程抢先认领,先停止代码修改并重新分配任务 +- 对“目录型模块”不能只看当前准备修改的 1 个文件;必须先核对入口页 `import` 列表和模块目录文件列表,确认是否还存在同级可见页面 +- 对 `src/views` 已完成页面,后续还要区分“页面完成”与“私有组件已复核完成”,不要只因为 `index.vue` 已翻译就直接把整个目录视为完成 +- 如果多个线程同时改语言文件,优先按页面模块分块追加,避免把同一对象区域改乱 +- 如果多个线程同时更新 md,优先追加“新增记录”而不是重写整个文档 +- 如果线程内发现了“后续线程大概率还会重复踩”的信息,优先补到本文件或 `docs/i18n/线程模板.md`,不要只留在会话里 diff --git a/docs/i18n/线程模板.md b/docs/i18n/线程模板.md new file mode 100644 index 0000000..456a3d0 --- /dev/null +++ b/docs/i18n/线程模板.md @@ -0,0 +1,78 @@ +# 线程模板 + +## 使用方式 + +- 新开一个并行线程时,把下面内容复制到线程首条消息里,并把“线程名”和“认领文件”替换掉 +- 新线程开始前,先读取: + - `docs/i18n/线程协作.md` + - `docs/i18n/翻译进度.md` + - `docs/i18n/翻译清单.md` + - `docs/i18n/主要路由.md` +- 每次准备领取新任务前,也要重新读取以上 3 份协作文档 + `docs/i18n/主要路由.md`,确认其他线程的认领状态已经写入文档,避免重复领取 +- 每次领取任务时,先更新 md 认领记录,再开始改源码;不要先改代码再补文档 +- 写入认领记录前和写完后,都要再检查一次以上 3 份协作文档 + `docs/i18n/主要路由.md`,确认没有线程冲突 + +## 文档定位 + +- 本文件只负责给新线程提供启动清单与首条消息模板 +- 协作规则本体以 `docs/i18n/线程协作.md` 为准 +- 主要路由结构与优先核查页面以 `docs/i18n/主要路由.md` 为准 +- 进度时间线与文件级状态分别以 `docs/i18n/翻译进度.md`、`docs/i18n/翻译清单.md` 为准 + +## 启动前补充检查 + +- 读取 md 或源码时使用:`Get-Content -Raw -Encoding UTF8 ` +- 领取任务前先重读 3 份协作文档 + `docs/i18n/主要路由.md`,再决定是否写入新的认领记录 +- 领取任务的推荐顺序:重读 3 份协作文档 + `docs/i18n/主要路由.md` -> 确认无人认领 -> 先写 md -> 再读同样的文档集合复查 -> 开始改代码 +- 所有线程统一领取优先级:`首页 > docs/i18n/主要路由.md > 其他路由` +- 只要首页或 `docs/i18n/主要路由.md` 中页面仍未完成,就不要跳到其他普通路由 +- 读取最新语言文件,避免覆盖别人新增的 key: + - `src/lang/messages/pages/en.js` + - `src/lang/messages/pages/zh.js` +- 扫描认领页面是否存在同目录私有子组件、抽屉、弹窗表单;如果有,一并检查中文展示文案 +- 构建验证使用:`npm run build:prod` +- 单文件快速扫中文可用:`Select-String -Path -Pattern '[\u4e00-\u9fa5]' -Encoding UTF8` + +## 推荐首条消息模板 + +你是国际化翻译协作中的【线程X】。 + +请先读取以下文件并基于其内容继续工作: + +- `docs/i18n/线程协作.md` +- `docs/i18n/翻译进度.md` +- `docs/i18n/翻译清单.md` +- `docs/i18n/主要路由.md` + +本线程当前认领文件: + +- `待填写文件路径` + +执行要求: + +- 只翻译展示文本 +- 不改功能逻辑 +- 不改接口参数 +- 不改路由路径 +- 不改权限码 +- 不改后端依赖值 +- 认领优先级遵守:`首页 > docs/i18n/主要路由.md > 其他路由` +- 如果文本依赖接口返回且当前无法推断,先跳过,并把阻塞写入 md +- 领取任务后,先把认领信息写入 md,确认无冲突后再开始改源码 +- 完成后同步更新: + - `docs/i18n/翻译进度.md` + - `docs/i18n/翻译清单.md` + +完成后输出: + +- 已完成文件 +- 新增语言 key 范围 +- 未处理阻塞项 +- 是否已更新 md + +## 已沉淀的复用经验 + +- 页面内资源组/奖励配置类抽屉,优先查看是否可复用 `pages.propsSourceGroupForm` +- 如果 PowerShell 直接读取出现乱码,优先怀疑读取编码,不要急着判断文件损坏 +- 如果 `npm run build` 失败,先检查 `package.json`,本项目应改用 `npm run build:prod` +- 多线程认领时,写 md 比改源码优先级更高;认领前后都要复查 3 份协作文档 + `docs/i18n/主要路由.md`,确认没有撞任务 diff --git a/docs/i18n/翻译清单.md b/docs/i18n/翻译清单.md new file mode 100644 index 0000000..ae22181 --- /dev/null +++ b/docs/i18n/翻译清单.md @@ -0,0 +1,312 @@ +# 国际化翻译清单 + +## 文档定位 + +- 本文件只负责维护文件级待办、进行中、已完成与当前认领状态 +- 需要看主要路由的完整父子级结构、路由别名、路径和入口文件时,统一查看 `docs/i18n/主要路由.md` +- 需要看阶段成果、构建验证与时间线时,统一查看 `docs/i18n/翻译进度.md` +- 状态说明: + - `已完成` + - `进行中` + - `待处理` + +## 你的要求 + +### 翻译范围 + +- 扫描项目中的中文展示文本 +- 只要不是涉及接口参数的内容,都要做翻译 +- 路由、导航、页面标题、选项、按钮、表单标签、表格列名、提示文案、空态文案等都属于处理范围 + +### 禁止改动项 + +- 不要改功能逻辑 +- 不要改接口参数 +- 不要改路由路径 +- 不要改权限码 +- 不要改接口依赖的状态值、枚举值、提交值 +- 不要把后端依赖的数据值翻译掉 + +### 文档维护要求 + +- 进度和清单文档统一放在 `docs/i18n/` +- 文档统一使用中文 +- 后续每一轮翻译都要实时更新这些文档,避免上下文丢失 +- 每轮源码翻译完成后,至少同步更新以下两份核心文档: + - `docs/i18n/翻译进度.md` + - `docs/i18n/翻译清单.md` +- 协作规则或主路由优先级发生变化时,再同步维护: + - `docs/i18n/线程协作.md` + - `docs/i18n/主要路由.md` + +### 展示适配要求 + +- 英文等较长文案要兼顾展示宽度,不只做字面翻译 +- 表单标签宽度不足时允许自动换行,必要时补充更宽的公共样式 +- 表单标签需要保持纵向居中,避免宽度调整后标题贴边 +- 表格列标题宽度不足时允许自动换行,避免英文单词被截断 +- 没有设置 `min-width` 的普通表格列,需要补全局默认最小宽度 +- 个别列仍不足时,再按页面单独调整 + +## 领取优先级 + +- 适用于所有线程,不只线程三 +- 统一领取优先级:`已完成 src/views 页面私有组件复查 > 首页 > docs/i18n/主要路由.md > 其他路由` +- 在“已完成 `src/views` 页面私有组件复查”完成前,暂不继续领取新的未完成普通页面 +- 只要首页或 `主要路由.md` 中页面仍未完成,后续线程都应优先从这两部分中选择任务 +- `主要路由.md` 中具体优先领取哪个页面,仍可按原来的协作方式灵活分配,只要先读 md、先写认领、避免冲突 + +## 已完成 + +### 已完成主要路由索引 + +- 详细父子级结构、路由别名、路径与入口文件统一见 `docs/i18n/主要路由.md` +- 以下索引已按 `docs/i18n/主要路由.md` 当前父子级顺序同步更新 +- 用户管理 / User Management + - 用户列表 / User List +- 运营管理 / Operations Management + - 数据配置 / Data Configuration + - 转盘抽奖品配置 / Spin Wheel Prize Configuration + - 国家管理 / Country Management + - 活动配置 / Activity Configuration + - 活动管理 / Activity Management + - 消息推送 / Message Push + - 运营日志 / Operations Logs + - 砸金蛋记录 / Golden Egg Smash Records + - APP管理员 / App Administrator + - App启动页 / App Launch Page + - 系统公告管理 / System Notice Management +- 语音房间 / Voice Rooms + - 房间资料列表 / Room Profile List +- 道具管理 / Prop Management + - 资源组配置 / Resource Group Configuration +- 系统工具 / System Tools + - Redis缓存管理 / Redis Cache Management + - 文件上传 / File Upload +- 主播中心 / Broadcaster Center + - 代理钻石政策 / Agent Diamond Policy + - 代理政策 / Agent Policy + - BD列表 / BD List +- 补充页面 + - 抽奖概率配置 / Lottery Probability Settings + +### 已完成文件平铺清单 + +- `src/views/login/index.vue` +- `src/components/Breadcrumb/index.vue` +- `src/components/HeaderSearch/index.vue` +- `src/components/SizeSelect/index.vue` +- `src/components/data/RestPassword/index.vue` +- `src/layout/components/NavbarLight.vue` +- `src/layout/components/Sidebar/Item.vue` +- `src/utils/get-page-title.js` +- `src/permission.js` +- `src/utils/ops-message.js` +- `src/views/dashboard/introduction/waiting-processing/index.vue` +- `src/views/dashboard/index.vue` +- `src/views/dashboard/dashboard.vue` +- `src/views/dashboard/dashboard-charts/index.vue` +- `src/views/dashboard/quick-link/index.vue` +- `src/views/dashboard/introduction/user-account-info/index.vue` +- `src/views/dashboard/introduction/user-navigation/index.vue` +- `src/views/dashboard/components/active-index/index.vue` +- `src/views/dashboard/components/daily-currency/index.vue` +- `src/views/dashboard/components/daily-currency/line-graph-charts.vue` +- `src/views/dashboard/components/daily-currency-gold/index.vue` +- `src/views/dashboard/components/daily-currency-gold/line-graph-charts.vue` +- `src/views/dashboard/components/daily-currency-gold-origin-top/index.vue` +- `src/views/dashboard/components/daily-currency-gold-origin-top/bar-graph-charts.vue` +- `src/views/dashboard/components/daily-purchase/index.vue` +- `src/views/dashboard/components/daily-purchase/line-graph-charts-general.vue` +- `src/views/dashboard/components/daily-purchase/line-graph-charts.vue` +- `src/views/dashboard/components/daily-register-user/index.vue` +- `src/views/dashboard/components/daily-register-user/line-graph-charts.vue` +- `src/views/dashboard/components/monthly-purchase/index.vue` +- `src/views/dashboard/components/monthly-purchase/line-graph-charts.vue` +- `src/views/dashboard/components/user-daily-currency-gold-top/index.vue` +- `src/views/dashboard/components/user-daily-currency-gold-top/bar-graph-charts.vue` +- `src/views/dashboard/components/user-daily-currency-recharge-top/index.vue` +- `src/views/dashboard/components/user-daily-currency-recharge-top/bar-graph-charts.vue` +- `src/components/data/PropsSalesOverviewCharts/index.vue` +- `src/components/data/PropsSalesOverviewCharts/dialog.vue` +- `src/components/data/PropsSalesOverviewCharts/bar-graph-charts.vue` +- `src/views/message/push/index.vue` +- `src/views/message/push/new-push-form.vue` +- `src/views/message/push/push-log.vue` +- `src/views/message/push/push-task.vue` +- `src/views/user/user-table/index.vue` +- `src/components/data/UserInfo/BaseInfo/index.vue` +- `src/views/room/profile/index.vue` +- `src/views/team/policy/index.vue` +- `src/views/props/props-source-group/form-edit.vue` +- `src/views/cnf/lottery/index.vue` +- `src/views/activity/template-cnf/index.vue` +- `src/views/team/business-development/index.vue` +- `src/views/team/diamond-policy/index.vue` +- `src/components/data/AccountHanle/index.vue` +- `src/views/sys/region-config/region/index.vue` +- `src/components/data/RoomInfo/index.vue` +- `src/components/data/UserAuthForm/index.vue` +- `src/components/data/InappPurchaseApple/index.vue`(已核查,无需重复修改) +- `src/components/data/InAppPurchaseDetails/index.vue` +- `src/components/data/InappPurchaseGoogle/index.vue` +- `src/components/data/UserInfo/BankCardDrawer/index.vue` +- `src/components/data/UserInfo/BaseInfo/AssociatedDeviceTimeline.vue` +- `src/components/data/UserInfo/AccountStatusLatestLog/index.vue` +- `src/components/data/UserInfo/UserTableExhibit/index.vue` +- `src/components/data/SearchRoomInput/index.vue` +- `src/components/data/GiftHistoryDetailsDrawer/index.vue` +- `src/components/data/EditUserForm/index.vue` +- `src/components/data/EditUserGoldCoinRewardForm/index.vue` +- `src/components/data/EditUserDiamondRewardForm/index.vue` +- `src/views/game/lucky-box/standard-config/gift-details.vue` +- `src/views/game/lucky-box/standard-config/index.vue` +- `src/views/game/lucky-box/standard-config/edit.vue` +- `src/views/game/lucky-box/standard-config/probability.vue` +- `src/views/game/lucky-box/award-config/index.vue` +- `src/views/game/lucky-box/award-config/edit.vue` +- `src/views/game/lucky-box/award-config/details.vue` +- `src/views/game/lucky-box/bounty-config/index.vue` +- `src/views/game/lucky-box/bounty-config/edit.vue` +- `src/views/game/lucky-box/bounty-config/details.vue` +- `src/views/game/lucky-box/fortune-config/index.vue`(已复核完成;目录实际仅存在该文件) +- `src/views/game/egg/index.vue` +- `src/views/game/egg/egg-exchange-record/index.vue` +- `src/views/game/egg/egg-lottery-record/index.vue` +- `src/views/game/egg/egg-lottery-cnf/index.vue` +- `src/views/game/lottery-config/form-edit.vue` +- `src/views/game/lottery-config/select-propsr-popover.vue` +- `src/views/game/lottery-config/index.vue` +- `src/components/data/AccountInput/index.vue` +- `src/components/data/EditUserGameCouponDeductionForm/index.vue` +- `src/views/user/freight/index.vue` +- `src/views/user/freight/form-edit.vue` +- `src/views/user/freight/running-water.vue` +- `src/views/user/freight/seller-info.vue` +- `src/views/user/freight/freight-seller-running-water.vue` +- `src/views/sys/region-config/index.vue` +- `src/views/sys/region-config/assist/index.vue` +- `src/views/props/props-source-group/index.vue` +- `src/views/sys/country-code/index.vue` +- `src/views/user/app-manager/index.vue` +- `src/views/user/app-manager/administrator/index.vue` +- `src/views/user/app-manager/administrator/auth.vue` +- `src/views/user/app-manager/administrator-auth-resource/index.vue` +- `src/views/sys/notice-message/index.vue` +- `src/views/sys/start-page/index.vue` +- `src/views/sys/start-page/form-edit.vue` +- `src/views/tools/redis/index.vue` +- `src/views/tools/upload/index.vue` +- 表格展示适配:表头自动换行 + 默认最小宽度补齐 +- 表格展示适配:表头 `.cell` 高度自适应 + 纵向居中修正 +- 表单展示适配:标题纵向居中 + +## 进行中 + +- 临时任务:已完成 `src/views` 页面私有组件复查 + - 状态:进行中 + - 范围说明: + - 只检查 `src/views/**` 下已经标记“已完成”的页面目录 + - 只复查页面私有组件,不包含公共组件目录 `src/components/**` + - 后续页面完成记录需要额外写明“私有组件状态” + - 当前优先复核目录: + - `src/views/team/policy` + - `src/views/team/diamond-policy` + - `src/views/team/business-development` + - `src/views/room/profile` + - `src/views/activity/template-cnf` + - `src/views/cnf/lottery` + - 当前已发现但尚未补齐到已完成记录的私有组件: + - `src/views/team/policy/props-form-edit.vue` + - `src/views/team/diamond-policy/props-form-edit.vue` + - `src/views/team/business-development/add-bd.vue` + - `src/views/team/business-development/auth.vue` + - `src/views/team/business-development/bind-bd-leader.vue` + - `src/views/team/business-development/bind-team.vue` + - `src/views/team/business-development/team-member.vue` + - `src/views/room/profile/room-active-charts.vue` + - `src/views/room/profile/room-operation-log.vue` + - `src/views/room/profile/room-visitor-log.vue` + - `src/views/room/profile/user-drawer.vue` + - `src/views/activity/template-cnf/activity-rank.vue` + - `src/views/activity/template-cnf/activity-rank-reward.vue` + - `src/views/activity/template-cnf/form-edit.vue` + - `src/views/activity/template-cnf/reward-edit.vue` + - `src/views/activity/template-cnf/template-editor/attr-editor.vue` + - `src/views/activity/template-cnf/template-editor/index.vue` + - `src/views/activity/template-cnf/template-editor/lang-text-editor.vue` + - `src/views/activity/template-cnf/template-editor/page-editor.vue` + - `src/views/activity/template-cnf/template-editor/props-card.vue` + - `src/views/activity/template-cnf/template-editor/reward-array-editor.vue` + - `src/views/activity/template-cnf/template-form/index.vue` + - `src/views/cnf/lottery/select-prize.vue` + - 当前明确排除: + - `src/views/message/push/push-text-store.vue` + - 原因:当前未纳入入口渲染链,继续按既有排除项处理 + - `src/views/props/props-source-group/select-propsr-popover.vue` + - 原因:当前未被入口页或 `form-edit.vue` 引用,继续按既有排除项处理 + +## 优先待处理 + +- 已完成 `src/views` 页面目录中的私有组件复查任务 +- 主要路由中已部分完成、但仍需继续收口的入口页 +- 主要路由中的其他页面 + - 统一参考 `docs/i18n/主要路由.md` + - 当首页与本文件中的“优先待处理”完成后,再继续处理 `主要路由.md` 中剩余未完成页面 + +## 第一批高优先级页面 + +- `src/views/user/user-table/index.vue`:已完成 +- `src/views/room/profile/index.vue`:已完成 +- `src/views/team/policy/index.vue`:已完成 +- `src/views/message/push/index.vue`:已完成(线程二;同步收口 `new-push-form.vue`、`push-log.vue` 与 `push-task.vue`) +- `src/views/message/push/push-task.vue`:已完成 +- `src/components/data/UserInfo/BaseInfo/index.vue`:已完成 + +## 第二批高优先级页面 + +- `src/views/props/props-source-group/form-edit.vue`:已完成静态文案,接口返回名称待补数据 +- `src/views/cnf/lottery/index.vue`:已完成 +- `src/views/activity/template-cnf/index.vue`:已完成 +- `src/views/team/business-development/index.vue`:已完成 +- `src/views/sys/region-config/region/index.vue`:已完成(线程一) +- `src/views/team/diamond-policy/index.vue`:已完成(线程二) +- `src/views/game/lottery-config/form-edit.vue`:已完成(线程二) +- `src/views/game/lottery-config/index.vue`:已完成(线程二) + +## 高优先级组件 + +- `src/components/data/AccountHanle/index.vue`:已完成(线程二) +- `src/components/data/InappPurchaseApple/index.vue`:已核查完成(线程一) +- `src/components/data/InAppPurchaseDetails/index.vue`:已完成(线程二) +- `src/components/data/InappPurchaseGoogle/index.vue`:已完成(线程一) +- `src/components/data/RoomInfo/index.vue`:已完成(线程三) +- `src/components/data/UserInfo/BankCardDrawer/index.vue`:已完成(线程三) +- `src/components/data/UserAuthForm/index.vue`:已完成(线程三) +- `src/components/data/UserInfo/AccountStatusLatestLog/index.vue`:已完成(线程二) + +## 本轮保留项 +- `src/components/data/AccountHanle/index.vue` + - 默认“警告”描述文案保留中文 + - 原因:该内容会直接写入提交表单并发给后端,不按纯展示文案处理 +- `src/components/data/RoomInfo/index.vue` + - 注释掉的“装饰道具”代码块仍保留中文 + - 原因:当前不渲染,不属于可见展示文案;领取任务前已按新规则重读 3 份协作文档 + `docs/i18n/主要路由.md` 后再认领 +- `src/views/props/props-source-group/select-propsr-popover.vue` + - 当前保留原样 + - 原因:已核对 `src/views/props/props-source-group/index.vue` 的入口 import 列表与模块目录文件列表;该文件当前未被入口页或 `form-edit.vue` 引用,不属于本轮入口渲染链 +- `src/views/props/props-source-group/form-edit.vue` + - 仍保留接口返回名称类文本与注释类中文 + - 原因:接口返回的 `badgeName`、`pItem.name`、资源名称等需依赖样例数据判断是否可安全翻译;注释不属于可见展示文案 +- `src/views/user/app-manager/**/*.vue` + - 当前保留注释“去除校验”和注释掉的“管理房间”代码块原样 + - 原因:均不属于可见展示文案;接口返回的 `resourceName` 等后端资源名称保持原样,不做翻译 +- `src/views/sys/notice-message/index.vue` + - 当前保留字段行尾注释与“删除”注释原样 + - 原因:均不属于可见展示文案;`permissionsSysOriginPlatforms` 的 `item.label` 作为公共系统来源数据,本轮未改其值 + +## 需持续关注 + +- 历史语言文件中的旧键名和新语义键并存 +- 页面中文较多的文件需要分批推进,避免一次性改动过大 +- 优先处理高频页面、公共组件、用户详情类抽屉和配置类页面 diff --git a/docs/i18n/翻译进度.md b/docs/i18n/翻译进度.md new file mode 100644 index 0000000..9c20fd2 --- /dev/null +++ b/docs/i18n/翻译进度.md @@ -0,0 +1,837 @@ +# 国际化翻译进度 + +## 文档定位 + +- 本文件只负责记录全局进展、阶段成果、构建验证结果与下一步目标 +- 主要路由的完整父子级结构、路由别名、路径、入口文件与主路由优先级,以 `docs/i18n/主要路由.md` 为准 +- 文件级待办、进行中、已完成与认领状态,以 `docs/i18n/翻译清单.md` 为准 +- 协作规则、读 md 顺序、认领要求与交接规范,以 `docs/i18n/线程协作.md` 为准 + +## 当前目标 + +- 将项目页面中出现的中文展示文本逐步接入国际化 +- 当前先支持 `en` 和 `zh` +- 后续如果增加 `bn`、`ar`、`tr` 等语言,优先复用现有键名体系 + +## 任务优先级 + +- 全线程统一优先级:`已完成 src/views 页面私有组件复查 > 首页 > docs/i18n/主要路由.md > 其他路由` +- 在“已完成 `src/views` 页面私有组件复查”完成前,暂不继续领取新的未完成普通页面 +- 只要首页 `Dashboard` 模块或 `主要路由.md` 中页面仍未完成,后续线程领取新任务时都应优先从这两部分中选择 +- `主要路由.md` 中具体先领哪个页面仍可灵活分配,但不得跳过首页整体优先级 + +## 必须遵守的约束 + +- 只翻译展示文本 +- 不修改功能逻辑 +- 不修改接口参数 +- 不修改路由路径 +- 不修改权限码 +- 不修改后端依赖的枚举值、状态值、别名值、提交值 +- 凡是会传给接口、或依赖后端匹配的值,一律保持原样 +- 已经本来就是英文的展示文本,不强制改动 + +## 展示适配要求 + +- 英文等较长展示文案需要考虑布局适配 +- 表单标签在宽度不足时允许自动换行,并可按页面需要补充更宽的标签样式 +- 表格列表列标题在宽度不足时允许自动换行,不再截断单词 +- 对未设置 `min-width` 的普通表格列补全局默认最小宽度,先保证大部分标题至少能展示完整单词 +- 个别仍然宽度不足的列,后续再按页面逐项微调 + +## 已完成 + +### 主要路由完成摘要 + +- 详细父子级结构、路由别名、路径与验收入口统一见 `docs/i18n/主要路由.md` +- 以下摘要已按 `docs/i18n/主要路由.md` 当前父子级顺序同步更新 +- 已完成主路由摘要: + - 用户管理 / User Management + - 用户列表 / User List + - 运营管理 / Operations Management + - 数据配置 / Data Configuration + - 转盘抽奖品配置 / Spin Wheel Prize Configuration + - 国家管理 / Country Management + - 活动配置 / Activity Configuration + - 活动管理 / Activity Management + - 消息推送 / Message Push + - 运营日志 / Operations Logs + - 砸金蛋记录 / Golden Egg Smash Records + - APP管理员 / App Administrator + - App启动页 / App Launch Page + - 系统公告管理 / System Notice Management + - 语音房间 / Voice Rooms + - 房间资料列表 / Room Profile List + - 道具管理 / Prop Management + - 资源组配置 / Resource Group Configuration + - 系统工具 / System Tools + - Redis缓存管理 / Redis Cache Management + - 文件上传 / File Upload + - 主播中心 / Broadcaster Center + - 代理钻石政策 / Agent Diamond Policy + - 代理政策 / Agent Policy + - BD列表 / BD List +- 已完成但未在当前主要路由菜单返回中命中的补充页面: + - 抽奖概率配置 / Lottery Probability Settings +### 基础能力 + +- 已接入项目国际化基础能力 +- 已使用 Vuex 存储当前语言 +- 已接入 Element UI 语言包切换 +- 已支持基于时区的默认语言识别 +- 未匹配到现有语言类型时,默认回退到英文 + +### 导航与通用区域 + +- 已增加导航栏语言切换入口 +- 已增加头像下拉中的语言切换入口 +- 已支持侧边栏路由标题翻译 +- 已调整侧边栏宽度、自动换行和图标居中表现 + +### 其他已处理内容 + +- 已移除 `src/views/dashboard/introduction/waiting-processing/index.vue` 中“每日一文”相关展示数据 +- 已保留系统时间展示 +- 已将默认语言检测与浏览器时区关联 +- 已将语言切换结果持久化 + - 刷新后优先使用用户上次选择的语言 + - 只有首次没有持久化记录时,才使用默认语言判断逻辑 + +## 本轮新增进展 + +### 2026-04-20 + +- 已完成页面: + - `src/views/tools/upload/index.vue` + - 说明:已完成上传方式开关、拖拽上传提示、失败状态与超限提示国际化;接口参数、文件上传逻辑、路由路径与后端依赖值保持原样 +- 页面私有组件状态: + - `src/views/tools/upload/index.vue`:无私有组件,已完成 +- 已补充页面级语言 key: + - `src/lang/messages/pages/en.js` + - `src/lang/messages/pages/zh.js` + - 新增范围:`pages.uploadFile` +- 已完成模块级复核: + - `src/views/tools/upload/index.vue` + - 说明:已执行中文残留扫描;当前未发现剩余中文可见文本 +- 已完成构建验证: + - 直接执行 `npm run build:prod` 构建通过 + - 说明:当前仍保留项目原有 `22` 条 warning,未因本轮 `tools/upload` 国际化改动新增阻塞错误 +- 已完成页面: + - `src/views/sys/start-page/index.vue` + - 说明:已完成筛选区 placeholder、状态下拉、活动类型展示映射、表格列头、按钮、删除确认与成功提示国际化;接口参数、状态值、路由路径与系统来源数据保持原样 +- 已处理页面私有子组件: + - `src/views/sys/start-page/form-edit.vue` + - 说明:已完成弹窗标题、表单标签、placeholder、保存/取消按钮、必填校验提示与活动类型展示映射国际化;提交字段、上传逻辑与接口调用保持原样 +- 已补充页面级语言 key: + - `src/lang/messages/pages/en.js` + - `src/lang/messages/pages/zh.js` + - 新增范围:`pages.startPage` +- 已完成模块级复核: + - `src/views/sys/start-page/**/*.vue` + - 说明:已执行递归中文残留扫描;当前残余中文仅保留在模板注释与“删除”代码注释中 +- 已完成构建验证: + - 直接执行 `npm run build:prod` 构建通过 + - 说明:当前仍保留项目原有 `22` 条 warning,未因本轮 `sys/start-page` 国际化改动新增阻塞错误 +- 已完成页面: + - `src/views/tools/redis/index.vue` + - 说明:已完成入口快捷标签、空态文案、打卡缓存查询弹窗标题/按钮/校验提示国际化;接口方法名、缓存查询 key、路由路径与返回数据结构保持原样 +- 已补充页面级语言 key: + - `src/lang/messages/pages/en.js` + - `src/lang/messages/pages/zh.js` + - 新增范围:`pages.redisTools` +- 已完成模块级复核: + - `src/views/tools/redis/index.vue` + - 说明:已执行中文残留扫描;当前未发现剩余中文可见文本 +- 已完成构建验证: + - 首次直接执行 `npm run build:prod` 触发 `ERR_OSSL_EVP_UNSUPPORTED` + - 改用 `$env:NODE_OPTIONS='--openssl-legacy-provider'; npm run build:prod` 后构建通过 + - 说明:当前仍保留项目原有 `22` 条 warning,未因本轮 `tools/redis` 国际化改动新增阻塞错误 +- 已完成页面: + - `src/views/sys/notice-message/index.vue` + - 说明:已完成筛选区、表格列头、类型文案、按钮、发布/上架确认提示、成功提示、弹窗标题、表单标签、placeholder 与校验提示国际化;接口参数、状态值、类型值、路由路径与公共系统来源数据保持原样 +- 已补充页面级语言 key: + - `src/lang/messages/pages/en.js` + - `src/lang/messages/pages/zh.js` + - 新增范围:`pages.noticeMessage` +- 已完成模块级复核: + - `src/views/sys/notice-message/**/*.vue` + - 说明:已执行递归中文残留扫描;当前残余中文仅保留在字段行尾注释与“删除”注释中 +- 已完成构建验证: + - 首次直接执行 `npm run build:prod` 触发 `ERR_OSSL_EVP_UNSUPPORTED` + - 改用 `$env:NODE_OPTIONS='--openssl-legacy-provider'; npm run build:prod` 后构建通过 + - 说明:当前仍保留项目原有 `22` 条 warning,未因本轮 `sys/notice-message` 国际化改动新增阻塞错误 +- 已完成页面: + - `src/views/user/app-manager/index.vue` + - 说明:已完成入口页 tab 标题国际化,并按模块级检查方案一并收口两个可见子页与权限设置弹窗;接口参数、角色值、分组值、路由路径与后端资源名称保持原样 +- 已处理页面私有子组件: + - `src/views/user/app-manager/administrator/index.vue` + - `src/views/user/app-manager/administrator/auth.vue` + - `src/views/user/app-manager/administrator-auth-resource/index.vue` + - 说明:已完成筛选区、表格列头、状态文案、按钮、弹窗标题、表单标签、确认提示、校验提示与本地角色/分组映射国际化;接口返回的 `resourceName` 等后端数据未做翻译 +- 已补充页面级语言 key: + - `src/lang/messages/pages/en.js` + - `src/lang/messages/pages/zh.js` + - 新增范围:`pages.appManager` +- 已完成模块级复核: + - `src/views/user/app-manager/**/*.vue` + - 说明:已执行递归中文残留扫描;当前残余中文仅保留在注释“去除校验”与注释掉的“管理房间”代码块中 +- 已完成构建验证: + - 首次直接执行 `npm run build:prod` 触发 `ERR_OSSL_EVP_UNSUPPORTED` + - 改用 `$env:NODE_OPTIONS='--openssl-legacy-provider'; npm run build:prod` 后构建通过 + - 说明:当前仍保留项目原有 `22` 条 warning,未因本轮 `user/app-manager` 国际化改动新增阻塞错误 +- 已完成页面: + - `src/views/sys/country-code/index.vue` + - 说明:已完成筛选区 placeholder、表格列头、状态文案、弹窗标题、表单标签、按钮、上传按钮与校验提示国际化;接口参数、提交字段、路由路径与后端依赖值保持原样 +- 已补充页面级语言 key: + - `src/lang/messages/pages/en.js` + - `src/lang/messages/pages/zh.js` + - 新增范围:`pages.countryCode` +- 已完成模块级复核: + - `src/views/sys/country-code/index.vue` + - 说明:已执行中文残留扫描;当前残余中文仅保留在注释中 +- 已完成构建验证: + - 直接使用 `$env:NODE_OPTIONS='--openssl-legacy-provider'; npm run build:prod` 构建通过 + - 说明:当前仍保留项目原有 `22` 条 warning,包含项目既有 `getAddressUrl` 导出缺失 warning,未因本轮 `sys/country-code` 国际化改动新增阻塞性错误 +- 已完成页面: + - `src/views/props/props-source-group/index.vue` + - 说明:已完成入口页筛选区 placeholder、搜索与添加按钮、表格列头、时间展示、编辑按钮与 loading 文案国际化;接口查询参数、分页结构、上下架开关值与弹窗逻辑保持原样 +- 已补充页面级语言 key: + - `src/lang/messages/pages/en.js` + - `src/lang/messages/pages/zh.js` + - 新增范围:`pages.propsSourceGroup` + - 复用范围:`common.search`、`pages.propsSourceGroupForm` +- 已完成模块级复核: + - `src/views/props/props-source-group/index.vue` + - `src/views/props/props-source-group/form-edit.vue` + - 说明:已对 `src/views/props/props-source-group/**/*.vue` 执行递归中文扫描;当前 `index.vue` 残余中文仅在注释中,`form-edit.vue` 残余主要为注释与接口返回名称类文本,`select-propsr-popover.vue` 当前未接入入口渲染链 +- 已完成构建验证: + - 首次直接执行 `npm run build:prod` 触发 `ERR_OSSL_EVP_UNSUPPORTED` + - 改用 `$env:NODE_OPTIONS='--openssl-legacy-provider'; npm run build:prod` 后构建通过 + - 说明:当前仍保留项目原有 `22` 条 warning,未因本轮 `props-source-group/index.vue` 国际化改动新增阻塞错误 +- 已新增临时任务规则: + - 暂停继续领取新的未完成普通页面 + - 先检查 `src/views` 下所有已标记完成页面的私有组件是否已完成国际化 + - 后续页面完成记录必须额外写明“页面私有组件状态” +- 已形成首批历史页面私有组件复核队列: + - `src/views/team/policy/props-form-edit.vue` + - `src/views/team/diamond-policy/props-form-edit.vue` + - `src/views/team/business-development/add-bd.vue` + - `src/views/team/business-development/auth.vue` + - `src/views/team/business-development/bind-bd-leader.vue` + - `src/views/team/business-development/bind-team.vue` + - `src/views/team/business-development/team-member.vue` + - `src/views/room/profile/room-active-charts.vue` + - `src/views/room/profile/room-operation-log.vue` + - `src/views/room/profile/room-visitor-log.vue` + - `src/views/room/profile/user-drawer.vue` + - `src/views/activity/template-cnf/activity-rank.vue` + - `src/views/activity/template-cnf/activity-rank-reward.vue` + - `src/views/activity/template-cnf/form-edit.vue` + - `src/views/activity/template-cnf/reward-edit.vue` + - `src/views/activity/template-cnf/template-editor/attr-editor.vue` + - `src/views/activity/template-cnf/template-editor/index.vue` + - `src/views/activity/template-cnf/template-editor/lang-text-editor.vue` + - `src/views/activity/template-cnf/template-editor/page-editor.vue` + - `src/views/activity/template-cnf/template-editor/props-card.vue` + - `src/views/activity/template-cnf/template-editor/reward-array-editor.vue` + - `src/views/activity/template-cnf/template-form/index.vue` + - `src/views/cnf/lottery/select-prize.vue` + +### 2026-04-17 + +- 已完成首页模块: + - `src/views/dashboard/index.vue` + - `src/views/dashboard/dashboard.vue` + - `src/views/dashboard/dashboard-charts/index.vue` + - `src/views/dashboard/quick-link/index.vue` + - `src/views/dashboard/introduction/user-account-info/index.vue` + - `src/views/dashboard/introduction/user-navigation/index.vue` + - `src/views/dashboard/introduction/waiting-processing/index.vue` + - `src/views/dashboard/components/active-index/index.vue` + - `src/views/dashboard/components/daily-currency/index.vue` + - `src/views/dashboard/components/daily-currency/line-graph-charts.vue` + - `src/views/dashboard/components/daily-currency-gold/index.vue` + - `src/views/dashboard/components/daily-currency-gold/line-graph-charts.vue` + - `src/views/dashboard/components/daily-currency-gold-origin-top/index.vue` + - `src/views/dashboard/components/daily-currency-gold-origin-top/bar-graph-charts.vue` + - `src/views/dashboard/components/daily-purchase/index.vue` + - `src/views/dashboard/components/daily-purchase/line-graph-charts-general.vue` + - `src/views/dashboard/components/daily-purchase/line-graph-charts.vue` + - `src/views/dashboard/components/daily-register-user/index.vue` + - `src/views/dashboard/components/daily-register-user/line-graph-charts.vue` + - `src/views/dashboard/components/monthly-purchase/index.vue` + - `src/views/dashboard/components/monthly-purchase/line-graph-charts.vue` + - `src/views/dashboard/components/user-daily-currency-gold-top/index.vue` + - `src/views/dashboard/components/user-daily-currency-gold-top/bar-graph-charts.vue` + - `src/views/dashboard/components/user-daily-currency-recharge-top/index.vue` + - `src/views/dashboard/components/user-daily-currency-recharge-top/bar-graph-charts.vue` + - `src/components/data/PropsSalesOverviewCharts/index.vue` + - `src/components/data/PropsSalesOverviewCharts/dialog.vue` + - `src/components/data/PropsSalesOverviewCharts/bar-graph-charts.vue` + - 说明:已完成首页入口、概览卡片、图表 tab、图表 legend/tooltip、快捷入口与首页直接依赖销售总览组件的国际化收口,并补齐运行时语言切换所需的首页响应式联动 +- 已补充页面级语言 key: + - `src/lang/messages/pages/en.js` + - `src/lang/messages/pages/zh.js` + - 新增范围:`pages.dashboard` +- 已完成模块级复核: + - `src/views/dashboard/**/*` + - `src/components/data/PropsSalesOverviewCharts/**/*` + - 说明:模块内静态中文展示文案残留扫描结果为 0 +- 已完成构建验证: + - `npm run build:prod` + - 说明:本轮首页 i18n 改动编译通过,仍保留项目既有 `22` 条 warning,未新增阻塞错误 +- 已完成页面: + - `src/views/message/push/index.vue` + - `src/views/message/push/new-push-form.vue` + - `src/views/message/push/push-log.vue` + - `src/views/message/push/push-task.vue` + - 说明:已完成消息推送入口页 tab、新建 Push 表单与 Push 日志页的可见静态文案国际化,并补齐 `push-task.vue` 中遗留成功提示;未改动接口参数、路由路径、权限码与后端依赖值 +- 已补充页面级语言 key: + - `src/lang/messages/pages/en.js` + - `src/lang/messages/pages/zh.js` + - 新增范围:`pages.messagePush`、`pages.messagePushLog` + - 扩展范围:`pages.messagePushTask` +- 已完成模块级复核: + - `src/views/message/push/index.vue` + - `src/views/message/push/new-push-form.vue` + - `src/views/message/push/push-log.vue` + - `src/views/message/push/push-task.vue` + - 说明:已执行中文残留扫描,当前残余中文仅保留在注释中;`push-text-store.vue` 仍未被入口页渲染,已在协作文档中标记为排除项 +- 已完成构建验证: + - `npm run build:prod` + - 说明:构建通过,当前仍保留项目原有 `22` 条 warning,未因本轮 `message/push` i18n 改动新增阻塞性错误 +- 已完成页面: + - `src/views/user/freight/index.vue` + - `src/views/user/freight/form-edit.vue` + - `src/views/user/freight/running-water.vue` + - `src/views/user/freight/seller-info.vue` + - `src/views/user/freight/freight-seller-running-water.vue` + - 说明:已完成用户货运模块列表页、编辑页、流水页与卖家相关弹窗中的静态展示文案国际化;仅对展示层做本地化映射,未改动后端依赖提交值、接口参数、路由路径与业务逻辑 +- 已补充页面级语言 key: + - `src/lang/messages/pages/en.js` + - `src/lang/messages/pages/zh.js` + - 新增范围:`pages.userFreight` +- 已完成模块级复核: + - `src/views/user/freight/**/*.vue` + - 说明:已执行递归中文扫描;当前残余中文仅保留在注释、后端依赖提交值或当前非可见数据结构中 +- 已完成构建验证: + - `npm run build:prod` + - 说明:构建通过,当前仍保留项目原有 `22` 条 warning,未因本轮 i18n 改动新增阻塞性错误 +- 已完成页面: + - `src/views/sys/region-config/index.vue` + - `src/views/sys/region-config/assist/index.vue` + - 说明:已完成区域配置入口页 tab 标题与辅助配置页可见静态文案国际化;`region/index.vue` 沿用既有国际化结果,本轮完成入口联动收口;未改动接口参数、路由路径、权限码与后端依赖值 +- 已扩展页面级语言 key: + - `src/lang/messages/pages/en.js` + - `src/lang/messages/pages/zh.js` + - 扩展范围:`pages.regionConfig.tabs`、`pages.regionConfig.assist` +- 已完成模块级复核: + - `src/views/sys/region-config/index.vue` + - `src/views/sys/region-config/assist/index.vue` + - 说明:已执行中文残留扫描;当前残余中文仅保留在注释中 +- 已完成构建验证: + - `npm run build:prod` + - 说明:构建通过,当前仍保留项目原有 `22` 条 warning,未因本轮 `sys/region-config` i18n 改动新增阻塞性错误 +- 已处理组件: + - `src/components/data/EditUserDiamondRewardForm/index.vue` + - 说明:已完成钻石奖励弹窗标题、字段标签、placeholder、按钮与校验提示国际化;`userId`、`quantity`、`remarks` 提交字段与接口调用保持原样,表单标签“钻石”复用 `pages.propsSourceGroupForm.resourceType.diamond` +- 已补充页面级语言 key: + - `src/lang/messages/pages/en.js` + - `src/lang/messages/pages/zh.js` + - 新增范围:`pages.editUserDiamondRewardForm` +- 已完成构建验证: + - `src/components/data/EditUserDiamondRewardForm/index.vue` 国际化改动编译通过 + - 2026-04-17 当前环境直接执行 `npm run build:prod` 已通过,当前仍保留项目原有 `22` 条 warning,未因本轮 i18n 改动新增阻塞性错误 +- 已处理组件: + - `src/components/data/EditUserGameCouponDeductionForm/index.vue` + - 说明:已完成扣除用户游戏券弹窗标题、表单标签、placeholder、按钮与校验提示国际化;接口参数、提交数量与备注内容保持原样 +- 已补充页面级语言 key: + - `src/lang/messages/pages/en.js` + - `src/lang/messages/pages/zh.js` + - 新增范围:`pages.editUserGameCouponDeductionForm` +- 已完成构建验证: + - `src/components/data/EditUserGameCouponDeductionForm/index.vue` 国际化改动编译通过 + - 2026-04-17 当前环境直接执行 `npm run build:prod` 已通过,当前仍保留项目原有 `22` 条 warning,未因本轮 i18n 改动新增阻塞性错误 +- 已沉淀线程经验到文档: + - 2026-04-17 当前 Node 环境下,`$env:NODE_OPTIONS='--openssl-legacy-provider'` 会直接报 `--openssl-legacy-provider is not allowed in NODE_OPTIONS` + - 后续构建验证优先直接执行 `npm run build:prod` + +### 2026-04-16 + +- 已补领页面: + - `src/views/game/egg/egg-lottery-cnf/index.vue` + - 说明:线程一已按最新协作规则重新读取 3 份 md 与语言文件,并已把此前遗漏的 Egg 配置页正式登记为本轮进行中任务;后续将只处理可见静态展示文本,不改接口参数与页面逻辑 +- 已完成页面: + - `src/views/game/egg/index.vue` + - `src/views/game/egg/egg-exchange-record/index.vue` + - `src/views/game/egg/egg-lottery-record/index.vue` + - `src/views/game/egg/egg-lottery-cnf/index.vue` + - 说明:线程一已完成 Egg 模块入口页、兑换记录页、抽奖记录页与配置页的静态展示文本国际化收口;配置页补充了筛选区、按钮、表格列头、占位文案、奖品类型下拉、校验提示与确认弹窗翻译,并新增 `pages.eggLotteryCnf` +- 已完成模块级复核: + - `src/views/game/egg/**/*.vue` + - 说明:已按“模块级最优检查方案”对 Egg 模块做递归中文扫描,当前未发现剩余中文可见文本 +- 已完成构建验证: + - `npm run build:prod` + - 说明:本轮直接执行构建已通过,仍保留项目既有 `22` 条 warning,未新增阻塞错误 +- 发现检查缺口: + - `src/views/game/egg/egg-lottery-cnf/index.vue` + - 说明:该文件与 `src/views/game/egg/index.vue` 同属一个可见 tab 模块,上一轮线程一虽然在认领记录中写了“暂未纳入本次范围”,但没有把它同步登记为“可见但待处理文件”,也没有按模块目录做完整核对;这说明此前的目录级检查还不够严谨 +- 已补充协作规范: + - `docs/i18n/线程协作.md` + - 新增“模块级最优检查方案” + - 目的:后续认领 `views` 模块时,先核对入口页 import、tab、动态组件与模块目录文件列表,避免再次漏掉像 `egg-lottery-cnf/index.vue` 这样的同级可见页面 +- 已完成页面: + - `src/views/game/lucky-box/fortune-config/index.vue` + - 说明:已完成 `fortune-config` 页面静态展示文本国际化复核;本轮确认目录实际仅存在 `index.vue`,协作文档里提到的 `edit.vue`、`details.vue` 并不存在,无需继续查找或翻译 +- 已复核页面级语言 key: + - `src/lang/messages/pages/en.js` + - `src/lang/messages/pages/zh.js` + - 复核范围:`pages.luckyBoxFortuneConfig` + - 说明:中英文语言项已齐备,`index.vue` 中无剩余中文展示文本 +- 已完成构建验证: + - 首次直接执行 `npm run build:prod` 因当前 Node/OpenSSL 组合触发 `ERR_OSSL_EVP_UNSUPPORTED` + - 改用 `$env:NODE_OPTIONS='--openssl-legacy-provider'; npm run build:prod` 后构建通过 + - 当前仍保留项目原有 `22` 条 warning,未因本轮 fortune-config 收口新增阻塞错误 +- 已同步修正文档: + - `docs/i18n/线程协作.md` + - `docs/i18n/翻译清单.md` + - `docs/i18n/翻译进度.md` + - 说明:已移除对不存在的 `src/views/game/lucky-box/fortune-config/edit.vue`、`src/views/game/lucky-box/fortune-config/details.vue` 的错误引用,避免后续线程误判任务范围 + +### 2026-04-15 + +- 已处理组件: + - `src/components/data/AccountInput/index.vue` + - 说明:已完成账号输入组件中类型选择 placeholder、类型选项和平台选择 placeholder 的国际化;账号输入值、平台值与外部传入参数保持原样 +- 已补充页面级语言 key: + - `src/lang/messages/pages/en.js` + - `src/lang/messages/pages/zh.js` + - 新增范围:`pages.accountInput` +- 已完成构建验证: + - `src/components/data/AccountInput/index.vue` 国际化改动编译通过 + - 当前仍保留项目原有 `22` 条 warning,未因本轮 i18n 改动新增阻塞性错误 +- 已处理组件: + - `src/components/data/InappPurchaseGoogle/index.vue` + - 说明:已完成弹窗标题、购买记录、Google 订阅单据、状态文案、复制按钮、空内容提示与 tooltip 的国际化;订阅令牌、json 内容、订单状态与接口返回值保持原样 +- 已补充页面级语言 key: + - `src/lang/messages/pages/en.js` + - `src/lang/messages/pages/zh.js` + - 新增范围:`pages.inappPurchaseGoogle` +- 已完成构建验证: + - `src/components/data/InappPurchaseGoogle/index.vue` 国际化改动编译通过 + - 当前仍保留项目原有 `22` 条 warning,未因本轮 i18n 改动新增阻塞性错误 +- 已处理组件: + - `src/components/data/InAppPurchaseDetails/index.vue` + - 说明:已完成抽屉标题、订单信息区、状态流转、商品信息、元数据、事件通知和状态映射的国际化;`createNickname`、`productDescriptor`、商品名称/内容/描述、原因、事件类型与通知数据保持接口返回原值 +- 已补充页面级语言 key: + - `src/lang/messages/pages/en.js` + - `src/lang/messages/pages/zh.js` + - 新增范围:`pages.inAppPurchaseDetails` +- 已完成构建验证: + - `src/components/data/InAppPurchaseDetails/index.vue` 国际化改动编译通过 + - 当前仍保留项目原有 `22` 条 warning,未因本轮 i18n 改动新增阻塞性错误 +- 已完成核查组件: + - `src/components/data/InappPurchaseApple/index.vue` + - 说明:当前组件已接入 `pages.inappPurchaseApple`,源码中未发现剩余中文展示文本,本轮无需重复修改源码 +- 已处理组件: + - `src/components/data/UserAuthForm/index.vue` + - 说明:已完成抽屉标题、卡片标题、手机号绑定按钮、已绑定状态、placeholder、校验提示、确认弹窗与成功提示的国际化;认证类型列表中的 `item.type` 与手机号数据保持接口返回原样 +- 已补充页面级语言 key: + - `src/lang/messages/pages/en.js` + - `src/lang/messages/pages/zh.js` + - 新增范围:`pages.userAuthForm` +- 已完成构建验证: + - `src/components/data/UserAuthForm/index.vue` 国际化改动编译通过 + - 当前仍保留项目原有 `22` 条 warning,未因本轮 i18n 改动新增阻塞性错误 +- 已处理组件: + - `src/components/data/RoomInfo/index.vue` + - 说明:已完成折叠面板标题、基础资料字段、状态标签、布尔展示文案、设置信息字段、徽章 tooltip 文案的国际化;房间公告内容、国家码、平台值与接口返回数据保持原样 +- 已补充页面级语言 key: + - `src/lang/messages/pages/en.js` + - `src/lang/messages/pages/zh.js` + - 新增范围:`pages.roomInfo` +- 保留项: + - `src/components/data/RoomInfo/index.vue` + - 内容:注释掉的“装饰道具”代码块中的中文 + - 原因:该代码块当前不渲染,不属于可见展示文案,按协作规范不作为本轮必翻项处理 +- 已完成构建验证: + - `src/components/data/RoomInfo/index.vue` 国际化改动编译通过 + - 当前仍保留项目原有 `22` 条 warning,未因本轮 i18n 改动新增阻塞性错误 +- 已完成页面: + - `src/views/sys/region-config/region/index.vue` + - 说明:已完成筛选区、表格列头、操作菜单、抽屉标题、表单标签、placeholder、钱包设置、确认弹窗与校验提示的国际化;接口参数、区域编码字段、提交结构与元数据 key 保持原样 +- 已补充页面级语言 key: + - `src/lang/messages/pages/en.js` + - `src/lang/messages/pages/zh.js` + - 新增范围:`pages.regionConfig` +- 已完成构建验证: + - `src/views/sys/region-config/region/index.vue` 国际化改动编译通过 + - 当前仍保留项目原有 `22` 条 warning,未因本轮 i18n 改动新增阻塞性错误 +- 已处理组件: + - `src/components/data/AccountHanle/index.vue` + - 说明:已完成弹窗标题、表单标签、处罚分组名、处罚选项名、天数选项、按钮、校验提示与翻译失败提示文案国际化;处罚值、提交字段和默认警告内容保持原样 +- 已补充页面级语言 key: + - `src/lang/messages/pages/en.js` + - `src/lang/messages/pages/zh.js` + - 新增范围:`pages.accountHandle` +- 阻塞/保留项: + - `src/components/data/AccountHanle/index.vue` + - 内容:默认“警告”描述文案 + - 原因:该文本会直接写入提交表单并发送给后端,属于提交内容,不按纯展示文案处理 +- 已完成构建验证: + - `src/components/data/AccountHanle/index.vue` 国际化改动编译通过 +- 已完成页面: + - `src/views/team/diamond-policy/index.vue` + - 说明:已完成筛选区、政策菜单、表格列头、编辑区、历史抽屉、校验提示与确认弹窗翻译;接口参数、政策类型值、提交结构和删除/发布逻辑保持原样 +- 已处理页面私有子组件: + - `src/views/team/diamond-policy/props-form-edit.vue` + - 说明:已完成抽屉内静态展示文案翻译,并复用现有 `pages.propsSourceGroupForm` key,避免重复新增同义 key +- 已补充页面级语言 key: + - `src/lang/messages/pages/en.js` + - `src/lang/messages/pages/zh.js` + - 新增范围:`pages.teamDiamondPolicy` +- 已完成构建验证: + - `src/views/team/diamond-policy/index.vue` 国际化改动编译通过 + - `src/views/team/diamond-policy/props-form-edit.vue` 国际化改动编译通过 + - 当前仍保留项目原有 `22` 条 warning,未因本轮 i18n 改动新增阻塞性错误 +- 已完成页面: + - `src/views/game/lottery-config/form-edit.vue` + - 说明:已完成弹窗标题、游戏类型、奖励列表、添加配置区、按钮、placeholder、校验提示与概率提示的国际化;`lotteryGameTypes` 的共享常量值未改动,仅在页面展示层对 `EGG` 做了本地映射翻译 +- 已处理页面私有子组件: + - `src/views/game/lottery-config/select-propsr-popover.vue` + - 说明:已完成弹出层标题、类型名称标签与选择按钮国际化 +- 已补充页面级语言 key: + - `src/lang/messages/pages/en.js` + - `src/lang/messages/pages/zh.js` + - 新增范围:`pages.gameLotteryConfigForm` + - 复用范围:`pages.propsSourceGroupForm.resourceType`、`pages.propsSourceGroupForm.validation` +- 保留项: + - `src/views/game/lottery-config/form-edit.vue` + - 内容:`specialIdTypes`、`pItem.name`、`badgeName` 等动态或接口返回内容 + - 原因:这类文本不属于静态展示文案,本轮按原值展示 +- 已完成构建验证: + - `src/views/game/lottery-config/form-edit.vue` 国际化改动编译通过 + - `src/views/game/lottery-config/select-propsr-popover.vue` 国际化改动编译通过 + - 当前仍保留项目原有 `22` 条 warning,未因本轮 i18n 改动新增阻塞性错误 +- 已完成页面: + - `src/views/game/lottery-config/index.vue` + - 说明:已完成筛选区 placeholder、搜索/添加按钮、游戏类型列、道具列、时间列、编辑按钮与游戏类型展示映射国际化;接口查询参数、分页结构和编辑逻辑保持原样 +- 已补充页面级语言 key: + - `src/lang/messages/pages/en.js` + - `src/lang/messages/pages/zh.js` + - 新增范围:`pages.gameLotteryConfig` +- 保留项: + - `src/views/game/lottery-config/index.vue` + - 内容:注释掉的“上/下架”筛选块中的中文 + - 原因:该区块当前不渲染,不属于可见展示文案 +- 已完成构建验证: + - `src/views/game/lottery-config/index.vue` 国际化改动编译通过 + - 当前仍保留项目原有 `22` 条 warning,未因本轮 i18n 改动新增阻塞性错误 +- 已沉淀线程经验到文档: + - 新线程读取源码与 md 时统一使用 UTF-8 显式编码 + - 每次领取新任务前都要重新读取 `docs/i18n/线程协作.md`、`docs/i18n/翻译进度.md`、`docs/i18n/翻译清单.md` 与 `docs/i18n/主要路由.md`,确认认领状态已经写入 md 后再决定是否领取 + - 每次认领任务时,必须先更新 md 再开始改源码;写入认领记录前后都要复查 3 份协作文档 + `docs/i18n/主要路由.md`,确认没有线程冲突 + - 构建验证统一使用 `npm run build:prod` + - 同目录私有子组件需和页面一起扫描,避免“主页面已翻、抽屉仍是中文” + +### 2026-04-14 + +- 已建立页面级翻译文件目录: + - `src/lang/messages/pages/en.js` + - `src/lang/messages/pages/zh.js` +- 已将页面级翻译模块接入: + - `src/lang/messages/en.js` + - `src/lang/messages/zh.js` +- 已完成页面: + - `src/views/message/push/push-task.vue` + - 说明:仅替换展示文本,接口值如 `OFFICIAL_MESSAGE_NOTICE`、语言值 `ar/tr/en`、状态值等保持不变 + - `src/views/user/user-table/index.vue` + - 说明:已完成页面可见文案翻译,接口查询字段、权限码、提交值和路由逻辑未改动 +- 已处理组件: + - `src/components/data/UserInfo/BaseInfo/index.vue` + - 当前状态:已完成展示文本翻译,剩余中文仅存在注释中 +- 已完成页面: + - `src/views/room/profile/index.vue` + - 说明:已完成筛选区、表格、操作菜单、弹窗、表单校验文案和下拉展示项翻译;接口参数、事件值、角色值、审批状态值保持原样 +- 已完成页面: + - `src/views/team/policy/index.vue` + - 说明:已完成筛选区、政策列表、编辑区、历史政策抽屉、确认提示与状态文案翻译;政策类型值、查询参数、发布状态字段等后端依赖值保持原样 +- 已完成可见静态文案: + - `src/views/props/props-source-group/form-edit.vue` + - 说明:已完成抽屉标题、表单标签、按钮、占位文案、校验提示、奖励摘要和本地资源类型名称翻译 + - 待补接口样例: + - 奖励列表中的 `badgeName` + - 资源选择项中的 `pItem.name` + - 接口返回的礼物 / 徽章 / 表情包 / 通用资源名称 + - 处理策略:这类文本依赖接口返回,当前先保留原样,等待你后续提供接口返回数据后再逐项补齐 +- 已完成页面: + - `src/views/cnf/lottery/index.vue` + - 说明:已完成配置页中的卡片标题、表单标签、按钮、弹窗提示、默认奖品文案和默认配置区翻译;仅处理展示文案,抽奖配置结构、接口提交体和字段值保持原样 +- 已完成页面: + - `src/views/activity/template-cnf/index.vue` + - 说明:已完成筛选区、帮助说明、表格列标题、状态标签、操作菜单、加载文案与确认弹窗翻译;活动状态值、权限码、接口查询参数和路由跳转参数保持原样 +- 已完成页面: + - `src/views/team/business-development/index.vue` + - 说明:已完成筛选区、表格列头、操作菜单、无权限提示、复制结果提示与删除确认弹窗翻译;权限码、接口查询参数、分页参数和操作逻辑保持原样 +- 已补充并固定文档目录: + - `docs/i18n/翻译进度.md` + - `docs/i18n/翻译清单.md` +- 后续翻译时需要同步更新的文档: + - `docs/i18n/翻译进度.md` + - `docs/i18n/翻译清单.md` +- 已将你的约束写入文档并作为后续执行规则: + - 只翻译展示文本 + - 不修改功能逻辑 + - 不修改接口参数 + - 不修改路由路径 + - 不修改权限码 + - 不修改后端依赖值 +- 已补充国际化表单适配样式: + - 为英文等较长标题增加可复用的表单标签宽度和自动换行方案 + - 已补充表单标题纵向居中,避免标签宽度加大后文字贴上边 + - 当前已接入页面: + - `src/views/message/push/push-task.vue` + - `src/views/room/profile/index.vue` + - 公共样式位置: + - `src/styles/element-ui.scss` +- 已完成表格展示适配方案: + - 表头标题支持自动换行,避免英文标题被直接截断 + - 未设置 `min-width` 的普通 `el-table-column` 增加全局默认最小宽度 + - 已修正表头 `.cell` 高度自适应与纵向居中,避免 `th` 足够高但标题文本仍贴边 + - 相关入口位置: + - `src/styles/element-ui.scss` + - `src/main.js` +- 已完成两次构建验证: + - 语言切换持久化改动编译通过 + - `src/views/room/profile/index.vue` 国际化改动编译通过 + - `src/views/team/policy/index.vue` 国际化改动编译通过 + - `src/views/props/props-source-group/form-edit.vue` 静态文案国际化改动编译通过 + - `src/views/cnf/lottery/index.vue` 国际化改动编译通过 + - `src/views/activity/template-cnf/index.vue` 国际化改动编译通过 + - `src/views/team/business-development/index.vue` 国际化改动编译通过 + - 表格标题自动换行与默认最小宽度适配编译通过 + - 表格标题 `.cell` 高度自适应与纵向居中修正编译通过 + - 表单标题纵向居中适配编译通过 +- 已处理组件: + - `src/components/data/UserInfo/BankCardDrawer/index.vue` + - 说明:已完成抽屉标题、卡片标签、审核状态、使用状态、操作按钮、表单标签、placeholder、校验提示与确认弹窗国际化;`cardType` 与银行卡类型枚举值保持原样 +- 已补充页面级语言 key: + - `src/lang/messages/pages/en.js` + - `src/lang/messages/pages/zh.js` + - 新增范围:`pages.bankCardDrawer` +- 已完成构建验证: + - `src/components/data/UserInfo/BankCardDrawer/index.vue` 国际化改动编译通过 + - 当前仍保留项目原有 `22` 条 warning,未因本轮 i18n 改动新增阻塞性错误 +- 已处理页面: + - `src/views/game/lucky-box/standard-config/gift-details.vue` + - 说明:已完成列表弹窗、表格列头、操作按钮、提示文案、表单标签、placeholder、校验提示与礼物类型展示映射的国际化;礼物类型实际值、接口参数与页面逻辑保持原样 +- 已补充页面级语言 key: + - `src/lang/messages/pages/en.js` + - `src/lang/messages/pages/zh.js` + - 新增范围:`pages.luckyBoxGiftDetails` +- 已完成构建验证: + - `src/views/game/lucky-box/standard-config/gift-details.vue` 国际化改动编译通过 + - 当前仍保留项目原有 `22` 条 warning,未因本轮 i18n 改动新增阻塞性错误 +- 已完成页面: + - `src/views/game/lucky-box/standard-config/index.vue` + - 说明:已完成筛选区、表格列头、类型标签、操作按钮、删除确认与成功提示的国际化;列表筛选值、状态布尔值与接口逻辑保持原样 +- 已处理页面私有子组件: + - `src/views/game/lucky-box/standard-config/edit.vue` + - `src/views/game/lucky-box/standard-config/probability.vue` + - 说明:已完成编辑弹窗与概率配置弹窗中的标题、表单标签、placeholder、校验提示、说明提示、保存确认与错误提示国际化;概率数值、礼物关联值与接口参数保持原样 +- 已补充页面级语言 key: + - `src/lang/messages/pages/en.js` + - `src/lang/messages/pages/zh.js` + - 新增范围:`pages.luckyBoxStandardConfig` +- 已完成构建验证: + - `src/views/game/lucky-box/standard-config/index.vue` 国际化改动编译通过 + - `src/views/game/lucky-box/standard-config/edit.vue` 国际化改动编译通过 + - `src/views/game/lucky-box/standard-config/probability.vue` 国际化改动编译通过 + - 当前仍保留项目原有 `22` 条 warning,未因本轮 i18n 改动新增阻塞性错误 +- 已处理组件: + - `src/components/data/UserInfo/BaseInfo/AssociatedDeviceTimeline.vue` + - 说明:已完成语言、时区、IP、客户端、设备信息、Push 信息与注册时间等标签国际化;`item.latestDevice.*` 与 `item.userProfile.createTime` 等动态数据保持原样 +- 语言 key 处理: + - 本轮复用 `pages.userBaseInfo.labels` + - 本轮复用 `pages.userBaseInfo.words.activeIp` + - 无需新增页面级语言 key +- 已完成构建验证: + - `src/components/data/UserInfo/BaseInfo/AssociatedDeviceTimeline.vue` 国际化改动编译通过 + - 当前仍保留项目原有 `22` 条 warning,未因本轮 i18n 改动新增阻塞性错误 +- 已处理组件: + - `src/components/data/UserInfo/AccountStatusLatestLog/index.vue` + - 说明:已完成最新账号处理日志标签文案国际化;`item.approvalUserName`、`item.statusName` 与 `item.createTime` 保持动态原值展示 +- 已补充页面级语言 key: + - `src/lang/messages/pages/en.js` + - `src/lang/messages/pages/zh.js` + - 新增范围:`pages.accountStatusLatestLog` +- 已完成构建验证: + - `src/components/data/UserInfo/AccountStatusLatestLog/index.vue` 国际化改动编译通过 + - 当前仍保留项目原有 `22` 条 warning,未因本轮 i18n 改动新增阻塞性错误 +- 已处理组件: + - `src/components/data/UserInfo/UserTableExhibit/index.vue` + - 说明:已完成特殊 ID 账号展示后缀国际化;直接复用 `pages.userBaseInfo.labels.specialIdSuffix`,未新增页面级语言 key +- 已完成构建验证: + - `src/components/data/UserInfo/UserTableExhibit/index.vue` 国际化改动编译通过 + - 当前仍保留项目原有 `22` 条 warning,未因本轮 i18n 改动新增阻塞性错误 +- 已处理组件: + - `src/components/data/SearchRoomInput/index.vue` + - 说明:已完成房间 ID 输入框 placeholder、类型选择、搜索结果弹窗与失败提示国际化;房间数据与接口返回内容保持原样 +- 已补充页面级语言 key: + - `src/lang/messages/pages/en.js` + - `src/lang/messages/pages/zh.js` + - 新增范围:`pages.searchRoomInput` +- 已完成构建验证: + - `src/components/data/SearchRoomInput/index.vue` 国际化改动编译通过 + - 当前仍保留项目原有 `22` 条 warning,未因本轮 i18n 改动新增阻塞性错误 +- 已处理组件: + - `src/components/data/GiftHistoryDetailsDrawer/index.vue` + - 说明:已完成抽屉标题、发送人/房间、礼物信息快照、接收用户标签、日志事件与单据 ID 按钮国际化;礼物值、房间资料、日志内容与接口返回数据保持原样 +- 已补充页面级语言 key: + - `src/lang/messages/pages/en.js` + - `src/lang/messages/pages/zh.js` + - 新增范围:`pages.giftHistoryDetailsDrawer` +- 已完成构建验证: + - `src/components/data/GiftHistoryDetailsDrawer/index.vue` 国际化改动编译通过 + - 当前仍保留项目原有 `22` 条 warning,未因本轮 i18n 改动新增阻塞性错误 +- 已处理组件: + - `src/components/data/EditUserForm/index.vue` + - 说明:已完成用户编辑抽屉标题、昵称/性别表单项、出生日期 placeholder、关闭/提交按钮与校验提示国际化;国家选择与接口返回数据保持原样 +- 已补充页面级语言 key: + - `src/lang/messages/pages/en.js` + - `src/lang/messages/pages/zh.js` + - 新增范围:`pages.editUserForm` +- 已完成构建验证: + - `src/components/data/EditUserForm/index.vue` 国际化改动编译通过 + - 当前仍保留项目原有 `22` 条 warning,未因本轮 i18n 改动新增阻塞性错误 +- 已处理组件: + - `src/components/data/EditUserGoldCoinRewardForm/index.vue` + - 说明:已完成金币奖励弹窗标题、表单标签、placeholder、按钮与校验提示国际化;`currencyRewardReasons` 的提交值与备注拼接内容保持原样,仅在页面展示层做奖励类型本地映射翻译 +- 已补充页面级语言 key: + - `src/lang/messages/pages/en.js` + - `src/lang/messages/pages/zh.js` + - 新增范围:`pages.editUserGoldCoinRewardForm` +- 保留项: + - `src/components/data/EditUserGoldCoinRewardForm/index.vue` + - 内容:模板注释中的中文 + - 原因:该部分不渲染,不属于可见展示文案 +- 已完成构建验证: + - `src/components/data/EditUserGoldCoinRewardForm/index.vue` 国际化改动编译通过 + - 当前仍保留项目原有 `22` 条 warning,未因本轮 i18n 改动新增阻塞性错误 +- 已完成页面: + - `src/views/game/lucky-box/award-config/index.vue` + - 说明:已完成筛选区、表格列头、类型标签、操作按钮、删除确认与成功提示的国际化;列表筛选值与接口逻辑保持原样 +- 已处理页面私有子组件: + - `src/views/game/lucky-box/award-config/edit.vue` + - `src/views/game/lucky-box/award-config/details.vue` + - 说明:已完成编辑弹窗与奖励配置弹窗中的标题、表单标签、placeholder、校验提示、按钮与本地常量类型映射国际化;资源值、目标次数、接口参数与逻辑保持原样 +- 已补充页面级语言 key: + - `src/lang/messages/pages/en.js` + - `src/lang/messages/pages/zh.js` + - 新增范围:`pages.luckyBoxAwardConfig` +- 已完成构建验证: + - `src/views/game/lucky-box/award-config/index.vue` 国际化改动编译通过 + - `src/views/game/lucky-box/award-config/edit.vue` 国际化改动编译通过 + - `src/views/game/lucky-box/award-config/details.vue` 国际化改动编译通过 + - 当前仍保留项目原有 `22` 条 warning,未因本轮 i18n 改动新增阻塞性错误 +- 已完成页面: + - `src/views/game/lucky-box/bounty-config/index.vue` + - 说明:已完成筛选区、表格列头、类型标签、操作按钮、删除确认与成功提示的国际化;`DAILY`、`WEEKLY` 等实际值与接口逻辑保持原样 +- 已处理页面私有子组件: + - `src/views/game/lucky-box/bounty-config/edit.vue` + - `src/views/game/lucky-box/bounty-config/details.vue` + - 说明:已完成编辑弹窗与道具配置弹窗中的标题、表单标签、placeholder、校验提示、按钮、礼物类型/道具类型本地映射国际化;资源值、提交字段、接口参数与逻辑保持原样 +- 已补充页面级语言 key: + - `src/lang/messages/pages/en.js` + - `src/lang/messages/pages/zh.js` + - 新增范围:`pages.luckyBoxBountyConfig` +- 已完成构建验证: + - `src/views/game/lucky-box/bounty-config/index.vue` 国际化改动编译通过 + - `src/views/game/lucky-box/bounty-config/edit.vue` 国际化改动编译通过 + - `src/views/game/lucky-box/bounty-config/details.vue` 国际化改动编译通过 + - 当前仍保留项目原有 `22` 条 warning,未因本轮 i18n 改动新增阻塞性错误 + +## 当前进行中 + +- 历史已完成 `src/views` 页面私有组件复查任务当前优先于新页面认领 +- 下一步目标: + - 先补查已标记完成页面目录中的私有组件,并把组件状态补写入进度文档 + - 完成该临时任务后,再继续按 `docs/i18n/主要路由.md` 领取下一个未完成主路由页面 +- 当前认领线程: + - 线程一:当前无进行中任务;已完成 `src/views/sys/start-page/index.vue` 与 `src/views/sys/start-page/form-edit.vue`,并已完成构建验证与 md 同步 + - 线程二:当前无进行中任务;已完成 `src/views/message/push/index.vue`、`src/views/message/push/new-push-form.vue`、`src/views/message/push/push-log.vue`、`src/views/message/push/push-task.vue`,并已完成构建验证与 md 同步 + - 线程三:当前无进行中任务;已完成 `src/views/tools/upload/index.vue`,后续与其他线程一样优先处理历史已完成页面私有组件复查 + +## 扫描概况 + +### views 目录 + +- `src/views` 中命中中文展示文本总数:`9165` +- `src/views` 中涉及文件数:`430` + +#### 中文密度较高的页面 + +- `src/views/user/user-table/index.vue`:158 +- `src/views/props/props-source-group/form-edit.vue`:140 +- `src/views/cnf/lottery/index.vue`:133 +- `src/views/room/profile/index.vue`:128 +- `src/views/team/policy/index.vue`:125 +- `src/views/activity/template-cnf/index.vue`:90 +- `src/views/team/business-development/index.vue`:89 +- `src/views/sys/region-config/region/index.vue`:已完成 +- `src/views/team/diamond-policy/index.vue`:已完成 +- `src/views/game/lottery-config/form-edit.vue`:已完成 + +### components 目录 + +- `src/components` 中命中中文展示文本总数:`752` +- `src/components` 中涉及文件数:`57` + +#### 中文密度较高的组件 + +- `src/components/data/UserInfo/BaseInfo/index.vue`:79 +- `src/components/data/InappPurchaseApple/index.vue`:54 +- `src/components/data/AccountHanle/index.vue`:已完成 +- `src/components/data/InAppPurchaseDetails/index.vue`:45 +- `src/components/data/InappPurchaseGoogle/index.vue`:40 +- `src/components/data/RoomInfo/index.vue`:39 +- `src/components/data/UserInfo/BankCardDrawer/index.vue`:33 +- `src/components/data/UserAuthForm/index.vue`:32 + +## 建议执行顺序 + +### 第一批 + +- `src/views/user/user-table/index.vue` +- `src/components/data/UserInfo/BaseInfo/index.vue` +- `src/views/room/profile/index.vue` +- `src/views/message/push/push-task.vue` +- `src/views/team/policy/index.vue` + +### 第二批 + +- `src/views/props/props-source-group/form-edit.vue` +- `src/views/cnf/lottery/index.vue` +- `src/views/activity/template-cnf/index.vue` +- `src/views/team/business-development/index.vue` +- `src/views/sys/region-config/region/index.vue`(已完成) +- `src/views/team/diamond-policy/index.vue` +- `src/views/game/lottery-config/form-edit.vue`(已完成) + +### 第三批 + +- `src/components/data/AccountHanle/index.vue` +- `src/components/data/InappPurchaseApple/index.vue` +- `src/components/data/InAppPurchaseDetails/index.vue` +- `src/components/data/InappPurchaseGoogle/index.vue` +- `src/components/data/RoomInfo/index.vue` + +## 备注 + +- 终端里部分文件曾出现乱码展示,已确认源码本身为 UTF-8,后续按 UTF-8 读取和修改 +- 在 PowerShell 中建议显式使用:`Get-Content -Raw -Encoding UTF8 ` +- 部分旧语言文件中存在历史遗留键值写法混用问题,后续会逐步收口,但不影响当前继续翻译页面 +- 路由 / 菜单翻译与页面展示文案翻译分开处理,避免相互影响 +- 校验提示、按钮、标签、空态、对话框标题属于安全翻译区 +- 类似 `PASS`、`NOT_PASS`、`OFFICIAL_MESSAGE_NOTICE`、`NORMAL`、`FREEZE` 这类后端依赖值必须保持原样 +- 本项目构建验证命令为:`npm run build:prod` diff --git a/docs/问题排查记录-权限平台与开发服务地址.md b/docs/问题排查记录-权限平台与开发服务地址.md new file mode 100644 index 0000000..f525e44 --- /dev/null +++ b/docs/问题排查记录-权限平台与开发服务地址.md @@ -0,0 +1,212 @@ +# 问题排查记录:权限平台默认值与开发服务 Network 地址 + +## 记录时间 + +- 2026-04 + +## 背景 + +本次排查涉及两个独立但连续出现的问题: + +1. 页面初始化时,`this.permissionsSysOriginPlatforms[0]` 偶发拿不到,导致默认平台没有赋值,后续 `renderData(true)` 不执行。 +2. 本地执行 `npm run dev` 后,控制台一直显示 `Network: unavailable`,但同机器的其他项目可以正常显示类似 `http://192.168.0.115:5173/` 的局域网访问地址。 + +--- + +## 一、权限平台默认值偶发为空 + +### 现象 + +页面中存在如下初始化逻辑: + +```js +const querySystem = this.permissionsSysOriginPlatforms[0]; +if (!querySystem) { + return; +} +that.listQuery.sysOrigins = [querySystem.value]; +that.renderData(true); +``` + +当 `this.permissionsSysOriginPlatforms[0]` 为空时,页面会直接返回,默认查询条件与首屏数据都不会初始化。 + +### 结论 + +`permissionsSysOriginPlatforms` 不是接口直接返回的平台数组,而是: + +1. 按钮权限接口先返回权限别名列表。 +2. 前端再用本地写死的 `sysOriginPlatforms` 常量进行过滤。 +3. 过滤结果再写入 Vuex,页面最终通过 getter 读取。 + +也就是说: + +- 平台候选项来源于前端常量。 +- 当前用户能拿到哪些平台,取决于按钮权限接口返回的权限别名。 + +### 关键代码链路 + +- 页面读取位置:`src/views/user/user-table/index.vue` +- getter 映射位置:`src/store/getters.js` +- Vuex 组装位置:`src/store/modules/user.js` +- 平台常量定义:`src/constant/origin.js` +- 按钮权限接口:`src/api/ops-system.js` + +### 根因 + +根因是时序问题,不是页面本地代码本身写错: + +1. 路由守卫中会调用 `store.dispatch('user/buttonPermissions')`。 +2. 但原逻辑没有 `await` 这个异步请求。 +3. 页面已经进入并执行 `created()` 时,权限数据可能还没回填到 Vuex。 +4. 于是 `this.permissionsSysOriginPlatforms[0]` 偶发为空。 + +另外还有一个补充前提: + +- 当前前端常量里只有 `ATYOU` 一个系统平台,并且依赖权限 `query:atyou`。 +- 如果接口没有返回这个权限,过滤后数组本身也会为空。 + +### 已做处理 + +已在 `src/permission.js` 中将: + +```js +store.dispatch('user/buttonPermissions') +``` + +修改为: + +```js +await store.dispatch('user/buttonPermissions') +``` + +### 处理结果 + +调整后,路由放行前会先等待按钮权限加载完成,页面 `created()` 再读取 `permissionsSysOriginPlatforms` 时,不会再因为异步竞争导致首项为空。 + +### 后续建议 + +- 若后续仍出现空数组,需要优先检查接口返回是否包含 `query:atyou`。 +- 如果页面还需要进一步增强健壮性,可以在页面侧增加 watcher 或兜底默认逻辑,但当前首先应保证路由阶段权限已完成回填。 + +--- + +## 二、开发服务 `Network: unavailable` + +### 现象 + +执行 `npm run dev` 后输出类似: + +```txt +App running at: + - Local: http://localhost:9528 + - Network: unavailable +``` + +但同一台机器上的其他项目可以正常显示局域网访问地址。 + +### 初步排查结论 + +这不是项目无法启动,也不是没有局域网 IP,而是 Vue CLI 选错了网卡。 + +通过系统网络信息确认: + +- 当前机器存在可用私网地址:`192.168.0.115` +- 同时还存在一个虚拟网卡地址:`26.26.26.1` + +### 根因 + +项目使用的是较老版本的 `@vue/cli-service 3.6.0`。 + +该版本在生成 `Network` 地址时,会在内部调用 `address.ip()` 取一个 IPv4 地址,然后只接受以下私网地址范围: + +- `10.x.x.x` +- `172.16.x.x` 到 `172.31.x.x` +- `192.168.x.x` + +如果拿到的不是私网地址,就会直接将 `Network` 显示为 `unavailable`。 + +本次机器环境中,Vue CLI 优先拿到的是虚拟网卡 `26.26.26.1`,由于它不属于私网范围,因此被直接丢弃,最终控制台显示 `Network: unavailable`。 + +### 关键代码位置 + +- 输出逻辑:`node_modules/@vue/cli-service/lib/commands/serve.js` +- 局域网地址选择逻辑:`node_modules/@vue/cli-service/lib/util/prepareURLs.js` + +### 已尝试处理 + +#### 第一步 + +先在 `vue.config.js` 中增加: + +```js +host: '0.0.0.0' +``` + +目的: + +- 让 dev server 监听所有网卡,而不是只监听本机回环地址。 + +结果: + +- 监听范围已放开。 +- 但 `Network` 仍然显示 `unavailable`。 +- 说明问题不在监听地址,而在 Vue CLI 的网卡识别逻辑。 + +#### 第二步 + +在 `vue.config.js` 中新增自定义 LAN IP 选择逻辑,替代 Vue CLI 默认的“随便取一个 IPv4”的方式。 + +处理思路: + +1. 使用 `os.networkInterfaces()` 枚举网卡。 +2. 只保留私网 IPv4。 +3. 优先选择 `WLAN / Wi-Fi / Ethernet / 以太网` 这类常见真实网卡。 +4. 排除 `TAP / VPN / Virtual / VMware / Hyper-V / Docker / vEthernet` 等虚拟网卡。 +5. 将最终结果写入 `devServer.public`。 + +### 当前配置结果 + +`vue.config.js` 已调整为: + +- `host: '0.0.0.0'` +- `public: lanIp ? \`${lanIp}:${port}\` : undefined` + +并增加了自动识别私网地址的辅助函数。 + +### 处理结果 + +此修改的目的不是单纯让服务“能访问”,而是: + +1. 明确让服务监听所有网卡。 +2. 明确告诉旧版 Vue CLI 应该向外公布哪个局域网地址。 +3. 避免其误选虚拟网卡后把 Network 判成 unavailable。 + +### 备用方案 + +如果后续本机 IP 变化,或当前网络环境特殊,也可以临时手动指定: + +```powershell +$env:DEV_SERVER_PUBLIC_IP='192.168.0.115' +npm run dev +``` + +或: + +```powershell +npm run dev -- --public 192.168.0.115:9528 +``` + +--- + +## 本次涉及的改动文件 + +- `src/permission.js` +- `vue.config.js` +- `docs/问题排查记录-权限平台与开发服务地址.md` + +## 本次经验总结 + +1. 页面里出现“偶发空值”时,优先检查数据来源是不是异步回填,而不是只盯页面局部逻辑。 +2. `permissionsSysOriginPlatforms` 这类字段要区分“候选项来源”和“最终权限结果来源”。 +3. 老版本 Vue CLI 对网卡选择并不稳定,机器上存在 VPN、TAP、虚拟网卡时,`Network: unavailable` 往往是地址识别问题,不代表 dev server 本身不可用。 +4. 对局域网访问有明确需求的项目,最好显式配置 `devServer.host` 与 `devServer.public`,不要完全依赖工具链自动推断。 diff --git a/src/components/Breadcrumb/index.vue b/src/components/Breadcrumb/index.vue index 0f4bdfd..343619e 100644 --- a/src/components/Breadcrumb/index.vue +++ b/src/components/Breadcrumb/index.vue @@ -4,8 +4,8 @@ - {{ item.meta.title }} - {{ item.meta.title }} + {{ translateTitle(item.meta.title) }} + {{ translateTitle(item.meta.title) }} @@ -13,6 +13,7 @@ + + diff --git a/src/components/SizeSelect/index.vue b/src/components/SizeSelect/index.vue index edaa007..45acae0 100644 --- a/src/components/SizeSelect/index.vue +++ b/src/components/SizeSelect/index.vue @@ -1,12 +1,11 @@ -