e6956aa001
- React frontend with route-level code splitting - Backend rebranded from Baihu to TaskPool - DB brand migration script and local compatibility
135 lines
5.9 KiB
Markdown
135 lines
5.9 KiB
Markdown
# 前端定制 (WebUI)
|
||
|
||
taskpool支持完全接管和替换默认系统面板界面。你可以开发自己专属的前端主题,甚至添加自定义的前端交互功能,并打包为独立的 WebUI 资源包上传至系统应用。
|
||
|
||
> [!IMPORTANT]
|
||
> **安全与一致性维护声明**:
|
||
> 更换前端包后,系统无法自动保障自定义前端的安全性,亦无法确保其与后续更新的后端 API 接口始终保持一致。**自定义前端包的更新、向后兼容维护与漏洞修复需完全由该前端资源提供者(或开发者)负责**。
|
||
|
||
---
|
||
|
||
## 快速使用
|
||
|
||
### 1. 网页端上传与切换
|
||
1. 进入系统后,点击导航栏的 **系统设置**。
|
||
2. 切换到 **前端定制** 面板。
|
||
3. 点击右上角的 **上传前端资源包**,选择你打包好的 `.zip`、`.tar.gz` 或 `.tgz` 格式的前端资源包。
|
||
4. 上传成功后,列表会显示该包的信息(名称、版本、作者、状态等)。
|
||
5. 点击操作栏中的 **启用** 按钮,系统将自动重载并切换至你的自定义前端包。
|
||
|
||
> [!WARNING]
|
||
> 自定义前端包若存在 Bug 或打包不完整可能导致界面白屏。如果不慎应用了错误或不兼容的包,请使用下方命令行工具恢复。
|
||
|
||
### 2. 命令行 (CLI) 运维
|
||
当界面因异常白屏无法访问时,可以进入taskpool容器/服务器终端,使用 `taskpool webui` 命令一键管理或恢复:
|
||
|
||
- **一键恢复默认内置界面**:
|
||
```bash
|
||
taskpool webui reset
|
||
```
|
||
- **查看已安装的资源包列表**:
|
||
```bash
|
||
taskpool webui list
|
||
```
|
||
- **手动切换/启用前端包**:
|
||
```bash
|
||
taskpool webui set <包名>
|
||
```
|
||
- **删除指定的前端包**:
|
||
```bash
|
||
taskpool webui delete <包名>
|
||
```
|
||
|
||
---
|
||
|
||
## 开发自定义前端
|
||
|
||
taskpool的前端架构是完全解耦的。你可以选择以下两种方式之一来定制专属前端:
|
||
|
||
### 方式一:基于现有代码二次开发(推荐)
|
||
如果你只是想修改部分样式、布局,或者在原有功能基础上增加新特性,最简单的方式是 **Fork `taskpool` 项目**。
|
||
1. Fork 本项目并克隆代码到本地。
|
||
2. 直接在项目的 `web/` 目录下,对现有的 Vue3 源码进行修改与定制。
|
||
3. 修改完成后,利用项目自带的 Makefile 打包命令(见下方说明)一键将你的修改编译为独立的 WebUI 资源包。
|
||
|
||
### 方式二:从零开始全新开发
|
||
如果你想用自己熟悉的技术栈(如 React, Angular,或者是纯静态的 HTML/JS)完全重写整个面板,这也是完全支持的!你只需要按照下方的核心规范进行开发和打包即可。
|
||
### 1. 核心校验规则
|
||
taskpool后端提取并启用前端资源时,会执行以下强校验:
|
||
1. **压缩包根目录下必须包含 `index.html`**:作为单页应用 (SPA) 的静态入口文件。
|
||
2. **压缩包根目录下必须包含 `uimanifest.json`**:声明该前端包的元数据信息。
|
||
|
||
### 2. 配置文件 `uimanifest.json` 规范
|
||
在前端打包产物的根目录下(与 `index.html` 同级),必须创建一个 `uimanifest.json` 文件。格式示例如下:
|
||
|
||
```json
|
||
{
|
||
"name": "custom-neon-theme",
|
||
"version": "1.0.2",
|
||
"author": "YourName",
|
||
"description": "taskpool霓虹暗黑风定制前端主题",
|
||
"min_panel_version": "1.0.0"
|
||
}
|
||
```
|
||
|
||
*注:`name` 字段不能设置为 `"default"`(default 被保留作为内置前端的系统标识)。*
|
||
|
||
### 3. API 请求地址与开发环境代理
|
||
在独立开发自定义前端时,需要配置请求与后端的通信地址及代理:
|
||
|
||
- **后端默认服务地址与端口**:
|
||
taskpool后端服务默认运行在端口 `8052` 上,本地调试 API 的基础 URL 通常为:
|
||
`http://127.0.0.1:8052/api/v1`
|
||
|
||
- **本地开发环境代理配置(以 Vite 为例)**:
|
||
为了避免跨域问题(CORS),推荐在前端开发服务器中设置代理。在 `vite.config.ts` 中配置示例如下:
|
||
```typescript
|
||
export default defineConfig({
|
||
server: {
|
||
proxy: {
|
||
'/api/v1': {
|
||
target: 'http://127.0.0.1:8052', // 本地运行的taskpool后端地址
|
||
changeOrigin: true
|
||
}
|
||
}
|
||
}
|
||
})
|
||
```
|
||
|
||
- **生产环境线上适配(相对路径)**:
|
||
前端包部署生效后,与后端处于同端口同域名下。后端会在返回的 `index.html` 的 `<head>` 中自动注入以下配置变量:
|
||
```html
|
||
<script>
|
||
window.__BASE_URL__ = ""; // 部署子路径前缀 (根据实际反代配置)
|
||
window.__API_VERSION__ = "/api/v1"; // API 接口版本前缀
|
||
</script>
|
||
```
|
||
建议在封装 Axios 或 Fetch 时,直接通过浏览器环境变量拼接相对路径作为 API 地址:
|
||
```typescript
|
||
const baseURL = `${window.location.origin}${window.__BASE_URL__ || ''}${window.__API_VERSION__ || '/api/v1'}`;
|
||
```
|
||
|
||
- **接口定义与类型参考**:
|
||
默认系统中已经定义好了所有的后端 API 接口签名、传参格式以及 TS 类型声明。你在二次开发或自定义前端时,可以直接参考项目源码中的前端接口定义文件: `web/src/api/index.ts`。
|
||
|
||
---
|
||
|
||
## 打包前端资源包(现成)
|
||
|
||
你可以利用taskpool项目自带的 `Makefile` 脚本,在现在的前端页面进行修改,将开发好的前端项目快速编译打包成标准的 `.tar.gz` 前端资源包, 自己使用或者分享使用。
|
||
|
||
### 使用 Makefile 打包
|
||
|
||
在项目根目录下,运行以下指令(参数必须填写完整):
|
||
|
||
```bash
|
||
make pack-webui NAME=neon-theme VERSION=1.0.2 AUTHOR=MyName DESC="霓虹定制主题包"
|
||
```
|
||
|
||
该指令会自动执行以下步骤:
|
||
1. 进入 `web/` 目录并安装依赖;
|
||
2. 编译构建前端静态资源(默认输出到 `web/dist`);
|
||
3. 在 `web/dist` 中自动按参数生成校验所需的 `uimanifest.json`;
|
||
4. 将该目录下所有文件使用 `tar` 命令进行 gzip 压缩打包;
|
||
5. 输出归档文件在项目根目录的 `bin/webui-neon-theme-1.0.2.tar.gz`,此包即可直接在面板中上传安装。
|