Project Map · Features
从路由表逐条核出来的全集。界面名取自 src/locales/zh-CN.ts,
不是我自己起的。
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.ts 和
Skill/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。
这两个标记由不同代码消费 —— showMenu 在
src/components/Menu/src/Menu.vue:47
控制菜单组件整体显不显示, hidden 在
src/components/Menu/src/helper.ts:25
把该条从菜单项里过滤掉。所以效果是「菜单里看不到,但路由确实存在」。
/expert/*
这一区的操作副作用更重:直接改表、触发构建、动线上数据。
/expert 的默认落点是 /expert/release(发布页)。
| 界面名 | 路由 | 组件 | 它实际干什么 |
|---|---|---|---|
| 表编辑 | /expert/excel |
GameEditor/Expert/index.vue(1183 行) |
直接以表格形式编辑配置数据,绕过 PropEditor 的字段级校验。
还能点按钮把自己弹成独立窗口(index.vue:238
发 create-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
|
改的是 defaultServerId 和
VITE_API_GM_PCODE,
影响之后所有请求打到哪台服
|
| Excel 独立窗口 | 表编辑页上的按钮 |
主进程
createSmallWindow()(helpers/window.ts:69)
|
新窗口加载 /expert/excel,会话数据靠
transfer-session-data 这个 IPC 传过去; 守卫里的
docView() 专门伺候这个窗口
|
| 外部文档 / 论坛 | 顶栏下拉菜单 |
src/layout/Header.vue:63 的
openDocument()
|
一个 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.ts 的 VersionOption 和
Components/ 下的几个弹窗
|
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 扫进来。
表名和文件名不总是一致,这是本项目一个固定的绊脚点。
映射关系写在 src/store/modules/table.ts 的
tableConfigMap 里。
| 后端表名 | 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.ts
的 tableConfigMap)—— 看起来是拼写错误,store/config/
下的文件叫 Box.ts
|
❌ 别学
tableConfigMap 里
box: 'Nox' 疑似打字错误。
src/store/modules/table.ts 的映射表把表名
box 映射到配置文件名 Nox,但
src/store/config/ 下只有 Box.ts,没有
Nox.ts。
怎么办:先别急着改。查清楚有没有代码真的走
tableConfigMap['box'] 这条路 —— 如果盒子模块目前是直接用
getConfigByKey('Box') 拿的,那这个错误就是无害的死配置,
改了反而可能触发原本没走到的分支。把它记进待确认清单, 找到能验证的环境再动。