Project Map · Features

它到底能干哪些事

从路由表逐条核出来的全集。界面名取自 src/locales/zh-CN.ts, 不是我自己起的。

基线:2026-08-12 的 gameboxclient 工作区快照。 路由信息来自 src/router/index.ts(剔除注释掉的条目后共 58 条)。

先说人话:整个工具分三块

游戏编辑器/game/*)—— 日常主战场。 18 张配置表,每张都是「列表页看一览、点进去改一条」的固定套路。 策划改数值、加道具、配掉落,全在这里。

专家模式/expert/*)—— 更重、更危险的操作。 直接编表格、发版、看错误日志、管脚本、改全局数据。

藏在首页里的东西 —— GM 工具和地图转换不是路由, 是首页面板上的弹窗。看路由表找不到它们。

怎么用这张表定位

看到界面上某个功能不知道代码在哪:先看地址栏 hash(比如 #/game/npc_edit),拿路径来这张表里查,直接得到组件文件。

地址栏没变化(说明是弹窗):跳到本页「非路由入口」一节。

一、游戏编辑器 /game/*

这 18 个模块结构高度一致:一个列表页 index.vue,一个编辑页 *_edit, 字段定义在 src/store/config/ 里的同名文件, 表单由 PropEditor 通用渲染。 看懂一个就看懂了十八个。

界面名 路由 组件 字段定义 备注
首页面板 /game/dashboard GameEditor/Dashboard/index.vue 1759 行聚合页,登录后的落地页;没有 showMenu,不在菜单里
NPC /game/npc · /game/npc_edit Npc/index.vue · Npc/NpcEdit.vue store/config/Npc.ts 唯一有 view.ts 做字段分组的模块,可当范本
物品 /game/item · /game/item_edit Item/index.vue · Item/Components/ItemEditor.vue store/config/Item.ts 最大的一张表,schema 5647 行;路由上方标着 // TODO: 暂时关闭
掉落 /game/drop · /game/drop_edit Drop/index.vue · Drop/DropEdit.vue store/config/Drop.ts 选项数据来自物品表,改物品会影响这里
活动 /game/active · /game/active_edit Active/index.vue · Active/ActiveEdit.vue store/config/Active.ts 含时间类控件(Time / TimeWeek / TimeDate)
商城 /game/shop · /game/shop_edit Shop/index.vue · Shop/Components/ShopEditor.vue store/config/Shop.ts 与「npc商店」是两张不同的表,别混
任务 /game/task · /game/task_edit Task/index.vue · Task/Components/TaskEdit.vue store/config/Task.ts Task/module.ts 被 Item / Box 等多个模块反向依赖
分解 /game/divide · /game/divide_edit Divide/index.vue · components/PropEditor/Components/SpecialForm.vue store/config/Divide.ts 编辑页直接指向通用组件,没有自己的页面文件;同样标着 // TODO: 暂时关闭
地图 /game/map · /game/map_edit · /game/map_addNpc_edit Map/index.vue · Map/mapEdit.vue(1610 行) views/GameEditor/Map/module.ts 唯一 keep: true 的模块(切走再回来保留状态);依赖 Konva 画布
npc商店 /game/npcStore · /game/npcStore_edit NpcStore/index.vue · NpcStore/edit.vue store/config/StoreCfg.ts 表名 store_cfg 与文件名不同,靠 tableConfigMap 映射
跳点 /game/gate · /game/gate_edit Gate/index.vue · Gate/edit.vue 无独立 schema 文件 编辑页从 NpcStore/module.tsSkill/module.ts 借选项数据(Gate/edit.vue:585,591),是耦合最乱的一个模块
鉴定类型 /game/identifyType · _edit IdentifyType/index.vue · IdentifyTypeEdit.vue store/config/IdentifyType.ts 与「鉴定属性」成对使用
鉴定属性 /game/identifyProp · _edit IdentifyProp/index.vue · IdentifyPropEdit.vue store/config/IdentifyProp.ts
升段系统 /game/levelup · _edit Levelup/index.vue · LevelupEdit.vue store/config/Levelup.ts
精炼、鉴定属性 /game/qualityProp · _edit QualityProp/index.vue · QualityPropEdit.vue store/config/QualityProp.ts 界面名就叫这个,含顿号,不是笔误
精炼属性 /game/reForging · _edit ReForging/index.vue · ReForgingEdit.vue store/config/ReForging.ts
精炼消耗 /game/reForgingCost · _edit ReForgingCost/index.vue · ReForgingCostEdit.vue store/config/ReForgingCost.ts
技能 /game/skill · /game/skill_edit Skill/index.vue · Skill/edit.vue(1086 行) views/GameEditor/Skill/module.ts 编辑页标题的 i18n 键与列表页共用同一个,标签页显示会重名
盒子 /game/box Box/index.vue store/config/Box.ts 没有独立编辑路由,改动在列表页内以弹窗完成
一个反直觉的细节:所有 *_edit 路由都同时写着 showMenu: true hidden: true。 这两个标记由不同代码消费 —— showMenusrc/components/Menu/src/Menu.vue:47 控制菜单组件整体显不显示, hiddensrc/components/Menu/src/helper.ts:25 把该条从菜单项里过滤掉。所以效果是「菜单里看不到,但路由确实存在」。

二、专家模式 /expert/*

这一区的操作副作用更重:直接改表、触发构建、动线上数据。 /expert 的默认落点是 /expert/release(发布页)。

界面名 路由 组件 它实际干什么
表编辑 /expert/excel GameEditor/Expert/index.vue(1183 行) 直接以表格形式编辑配置数据,绕过 PropEditor 的字段级校验。 还能点按钮把自己弹成独立窗口index.vue:238create-smallWin
发布 /expert/release views/Option/index.vue 发布栈。SVN 型任务提交本地改动,Jenkins 型任务触发远端构建。 详见架构图 FIG.05
错误日志 /expert/errorlog GameEditor/ErrorLog/index.vue 拉取服务端错误日志;会按当前版本切换 VITE_API_GM_PCODE
脚本管理 /expert/newscript GameEditor/NewScript/index.vue(1262 行) 管理游戏内 Lua 脚本,独立的 VITE_API_SCRIPT_PCODE
全局数据 /expert/globalData GameEditor/GlobalData/index.vue 门派等全局配置,走 VITE_API_SECTCONFIG_PCODE / VITE_API_SECTCONFIG_PATH
最近删除 /expert/delData GameEditor/DelData/index.vue 误删数据的回收站,配置在 extend/delData/delData.json
查找文件 /expert/cosDownload GameEditor/cosDownload/index.vue(51 行) 从对象存储 COS 里找并下载资源文件
网关配置 /expert/gateWay views/GateWay/index.vue 网关参数配置
(无标题) /expert/mainPage GameEditor/Dashboard/index.vue /game/dashboard 指向同一个组件; 没有 title、没有 showMenu,疑似只作为专家模式的备用落点

⚠️ 隔离

专家模式之间的跳转会被强制弹窗确认。 src/permission.ts:72-79 有一张 CONFIRM_ROUTES 表,当前只启用一条规则: 从任何 /expert/* 跳到 /expert/excel 时拦下来, 让 dialogStore.showConfirmDialog 弹确认框, 用户点确认后带上 ?CONFIRMED=true 再放行。

排障提示:如果有人报「点表编辑没反应」,先看是不是确认框被挡住了 或者被 next(false) 提前拦了。这段守卫在 needConfirm 分支里调完 next(false) 没有 return,后面的逻辑还会继续跑并可能再次调 next() —— Vue Router 对重复调用 next() 会告警。

三、非路由入口:在路由表里找不到的功能

这一节是新人最容易卡住的地方。 你在界面上明明看到了这些功能,但翻遍 router/index.ts 也找不到。 因为它们根本不是页面,是弹窗和独立窗口。

功能 入口在哪 实际组件 怎么找到它
GM 工具 首页面板上的按钮 views/GM/Index.vue,由 Dashboard/index.vue:78 引入 子功能各成一个目录:发邮件 SendMail、改年龄 ChangeAge、游戏公告 GameNotice、门派配置 SectConfig、学武功 LearnMartialArts、 强化 Ruggedization、加回生 AddRegeneration、 浩然值 ChangeHaoranValue、登录公告 LoginNotice
地图转换 首页面板上的按钮 views/MapTransform/Components/MapDialog.vue,由 Dashboard/index.vue:79 引入 extend/Python/** 下的 exe; 这条链路当前是断的,见依赖清单
选服 / 切版本 顶部工具条 components/confirmServer/ · views/GameEditor/components/serveChooseView.vue · serverControl.vue 改的是 defaultServerIdVITE_API_GM_PCODE影响之后所有请求打到哪台服
Excel 独立窗口 表编辑页上的按钮 主进程 createSmallWindow()helpers/window.ts:69 新窗口加载 /expert/excel,会话数据靠 transfer-session-data 这个 IPC 传过去; 守卫里的 docView() 专门伺候这个窗口
外部文档 / 论坛 顶栏下拉菜单 src/layout/Header.vue:63openDocument() 一个 URL 数组 + shell.openExternal,链接硬编码在源码里
内嵌文档小窗 主进程 openDoc IPC handler/channel.ts:76 打开一个 500×800 的置顶窗口加载语雀文档, URL 同样硬编码在 channel.ts
新手引导 部分页面自动触发 src/utils/guideSys.ts · src/router/intro.ts · store/modules/guide.ts 路由 meta.introSteps 上挂步骤定义,用 intro.js / shepherd.js

四、疑似停用 / 孤立

下面这些在仓库里占着地方,但接不到任何入口。 清理之前必须逐个 grep 确认没人引用 —— 有几个是「页面废了但里面的组件还被复用」。

东西 状态 能不能删
views/Database/index.vue 993 行,不在路由表 ❌ 不能直接删目录。Database/ 目录之外还有 10 个在用文件引用它(confirmServer、serveChooseView、serverControl、 ErrorLog、Expert、GlobalData、NewScript、GateWay、GM/GM.vue、GM/Index.vue), 主要是 const.tsVersionOptionComponents/ 下的几个弹窗
views/Script/index.vue 479 行,全项目零引用 ✅ 可删(脚本管理已被 /expert/newscript 取代)
views/Login/index.vue 路由里被注释,改指 ReLogin ⚠️ 目录不能删,Login/Password.vue 还挂在 /password
views/BasePage/ 有路由 /base/baseHome/base/stepEditView, 但都没有 showMenu,任何菜单里都到不了 ⚠️ 先问人:是在做的新功能,还是废弃的实验?
/preload/preloadbase 路由存在,指向 GameEditor/PreloadView/(758 行); 登录页把它注释掉了改跳 Dashboard ⚠️ 同上,像是被临时绕过的资源预加载页
/animation/animate 显式写着 showMenu: false;组件 Animation/index.vue 有 2585 行,是个完整的动画编辑器 ⚠️ 代码量这么大不像废弃,八成是从别处以编程方式跳转进去的。 值得单独问一次
electron/preload/index.ts 从未被构建 ✅ 可删,但删之前建议先决定「要不要补回 preload 架构」
src/config/axios/serviceold.ts 旧版 axios 封装 ✅ 可删,先确认没有文件 import 它
src/utils/extend/jenkins_old.ts 旧版 Jenkins 封装 ✅ 同上
src/directives/permission/hasPermi.ts 指令注册进了 app,但全项目没有一个 v-hasPermi 用法 ✅ 脚手架残留,可删
views/GameEditor/Buff/ 只有 29 行,没有页面,只有 module.ts ❌ 不能删,被 store/config/Item.ts 引用

删代码之前的固定动作

gameboxclient 根目录跑一次:

grep -rn "要删的文件名" src/ electron/ --include="*.ts" --include="*.vue" --include="*.tsx"

注意本项目大量使用动态引入() => import('...'))和 import.meta.glob,静态分析工具会漏报。 store/config/*.ts 尤其危险 —— 它们没有任何文件显式 import, 全靠 store/modules/table.ts:9 的 glob 扫进来。

五、一张表:配置表 ↔ schema 文件

表名和文件名不总是一致,这是本项目一个固定的绊脚点。 映射关系写在 src/store/modules/table.tstableConfigMap 里。

后端表名 schema 文件 一致?
npc Npc.ts ✅ 只差首字母大小写
item Item.ts
drop Drop.ts
task Task.ts
skill Skill.ts ⚠️ tableConfigMap 里登记了,但 store/config/没有 Skill.ts —— 技能的字段定义在 views/GameEditor/Skill/module.ts
map Map.ts ⚠️ 同上,实际在 views/GameEditor/Map/module.ts
store_cfg StoreCfg.ts ❌ 名字完全不同,必须查映射表
chat Chat.ts ✅(没有对应的独立页面,被 NPC 的对话字段使用)
box Box.ts 映射表里写的是 'Nox'table.tstableConfigMap)—— 看起来是拼写错误,store/config/ 下的文件叫 Box.ts

❌ 别学

tableConfigMapbox: 'Nox' 疑似打字错误。 src/store/modules/table.ts 的映射表把表名 box 映射到配置文件名 Nox,但 src/store/config/ 下只有 Box.ts,没有 Nox.ts

怎么办:先别急着改。查清楚有没有代码真的走 tableConfigMap['box'] 这条路 —— 如果盒子模块目前是直接用 getConfigByKey('Box') 拿的,那这个错误就是无害的死配置, 改了反而可能触发原本没走到的分支。把它记进待确认清单, 找到能验证的环境再动。