ModReleaser/docs/frontend.md

120 lines
6.7 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

# 前端页面
## 布局
单页面应用,无需路由。自上而下:
```
┌─────────────────────────────────────────┐
│ ConfigSelector │
│ [选择配置 ▼] [+ 添加配置] │
├─────────────────────────────────────────┤
│ VersionTable │
│ ┌──────────┬────────────────┬────────┐ │
│ │ MC 版本 │ 构建产物 │ 源码 │ │
│ ├──────────┼────────────────┼────────┤ │
│ │ 1.21 │ xxx-1.0.0-... │ xxx.. │ │
│ │ 1.21.1 │ xxx-1.0.0-... │ xxx.. │ │
│ └──────────┴────────────────┴────────┘ │
├─────────────────────────────────────────┤
│ [一键发布] │
└─────────────────────────────────────────┘
```
## 组件
### ConfigSelector
- 下拉框列出 `configs/` 目录下所有配置(按 `name` 显示)
- 选中后触发后端解析,刷新 VersionTable
- 右侧 `[修改配置]` `[+ 添加配置]` 两个按钮,图标使用 Ant Design 图标库
- 修改配置:弹出 ConfigModal预填当前配置数据保存时覆盖原文件
- 添加配置:弹出 ConfigModal空白表单保存时创建新文件
- ConfigModal 添加 / 修改共用同一个组件,通过是否传入已有配置数据区分模式
### VersionTable
- 每行MC 版本 | 兼容范围 | 构建产物文件名 | 源码文件名
- MC 版本与兼容范围由后端计算,版本范围计算逻辑封装在 `lib/utils/mcVersion.ts`,前后端共用
- 构建产物和源码分别匹配 `filename_format``source_filename_format`
- 最后一个版本的兼容范围含泛匹配,显示格式:若覆盖完整的大版本则显示 `1.19.x` / `26.x` 等,否则显示 `1.20.1-1.20.3` 等具体范围。截止版本下拉框可编辑;下拉可选值取 Modrinth 与 CurseForge 元数据 API 返回的 MC 版本并集
- 已发布版本对比(平台差异)留到 PublishModal 第一页分别展示
- 切换 config 后后台解析期间Table 使用 Ant Design 自带的加载状态
### PublishModal
点击 `[一键发布]` 后弹出,分两页。
#### 第一页:版本选择
1. 弹出后加载 Modrinth 和 CurseForge 已有版本数据Table 使用 Ant Design 自带的加载状态
2. 加载完成后,左右两栏布局:
- 左栏Modrinth 版本列表
- 右栏CurseForge 版本列表
3. 每栏顶部为**待发布版本**(绿色高亮),按顺序排列;下方为已有版本(另一颜色)
4. 每个版本行最左侧有复选框:
- 待发布版本:默认勾选,可选择取消
- 已有版本:复选框禁用
- 若某待发布版本在平台上已存在(版本号完全一致),显示为已有版本颜色,复选框禁用
5. 点击"下一步"进入第二页
#### 第二页:发布设置
- **Changelog**Markdown 编辑器,带 Code / Preview 切换(类似 GitHub 评论框)
- **version_type**:下拉选择 `release`(默认) / `beta` / `alpha`
- 平台不再勾选(第一页已通过版本复选框隐式确定:某平台无任何勾选的待发布版本即不发布该平台)
- 点击"确认发布"开始执行
- 提供"上一步"按钮返回第一页修改选择
#### 发布执行与进度
- 一个 mod version 对应多个 MC version 变体,按顺序逐个提交,**不可并行**
- 任一请求失败则取消后续所有任务
- 点击确认后显示两个进度条(仅显示有发布任务的平台):
- `平台名: 已发布数 / 总发布数`
- 全部完成后或失败后,弹出结果 Modal 显示最终状态
### ConfigModal
添加 / 修改共用一个 Modal 组件。添加模式为空表单;修改模式预填当前配置数据,保存时覆盖原文件。
弹出后需请求 Modrinth 和 CurseForge API 获取可选值Table / Select 使用 Ant Design 自带的加载状态。加载完成后显示表单:
**通用字段**
| 字段 | 控件 | 说明 |
|------|------|------|
| `name` | Input | 配置文件显示名称 |
| `project_dir` | Input + 目录选择 | 项目目录绝对路径 |
| `minecraft_properties_dir` | Input | 默认 `./properties` |
| `project_properties_path` | Input | 默认 `./gradle.properties` |
| `mod_version_field` | Input | 默认 `mod_version` |
| `filename_format` | Input | 含 `${version}` `${mc_version}` |
| `source_filename_format` | Input | 含 `${version}` `${mc_version}` |
**Modrinth 字段**
| 字段 | 控件 | 说明 |
|------|------|------|
| `project_id` | Input | 项目 ID8 位 base62。输入后使用 Ant Design 防抖 hook 自动查询项目名称并显示在输入框下方以供确认 |
| `version_name` | Input | 模板字符串,含占位符。默认 `"ModName v${version} for Minecraft ${mc_version_range}"`。使用防抖自动显示匹配到的版本数量 |
| `version` | Input | 模板字符串,含占位符 |
| `loaders` | Select多选 | 选项从 `GET /tag/loader` 获取 |
| `environment` | Select | 运行环境,必填。选项使用 Ant Design OptGroup 分组,具体分组参考 `docs/modrinth/upload.md` 中的 `environment` 枚举值章节 |
| `dependencies` | 动态列表 | 每项含 `dependency_type`Selectrequired/optional/incompatible/embedded`project_id`Input |
**CurseForge 字段**
| 字段 | 控件 | 说明 |
|------|------|------|
| `project_id` | InputNumber | 项目 ID数字。输入后使用 Ant Design 防抖 hook 自动查询项目名称并显示在输入框下方以供确认 |
| `version_name` | Input | 模板字符串,含占位符。默认 `"#{filename_format}"`。使用防抖自动显示匹配到的版本数量 |
| `environment` | Select多选 | 选项从 Game Version Types APIEnvironment 类型)获取 |
| `loaders` | Select多选 | 选项从 Game Version Types APIModloader 类型)获取 |
| `relations` | 动态列表 | 每项含 `slug`Input`type`SelectembeddedLibrary/incompatible/optionalDependency/requiredDependency/tool |
> **防抖策略**`project_id` 和 `version_name` 的防抖延迟需设置较长(建议 800ms~1s避免触发两个平台 API 的速率限制。
底部:保存按钮,写入 `configs/{name}.json`