Initial commit: TaskPool React panel

- React frontend with route-level code splitting
- Backend rebranded from Baihu to TaskPool
- DB brand migration script and local compatibility
This commit is contained in:
2026-07-26 08:43:52 +08:00
commit e6956aa001
397 changed files with 73621 additions and 0 deletions
+34
View File
@@ -0,0 +1,34 @@
# 更新日志 ☕
本页面记录了任务池的主要版本更新历史。
## 最近更新概览
### 2026.03.19 - 仓库同步增强 (ql repo 兼容)
- **青龙指令兼容**:深度支持青龙仓库格式指令,支持自动解析脚本注释并同步为面板任务。
- **高级过滤逻辑**:支持基于正则的白名单、黑名单及依赖文件匹配特性。
- **解析器优化**:优化了定时任务 Cron 规则解析逻辑,修正了带 `#` 注释行的识别问题。
### 2026.03.05 - API 文档重构
- **OpenAPI 认证体系**:支持站点级 Token 配置与 Basic Auth 保护。
- **自定义 UI**:新增设计感十足的全局 **404 页面**
### 2026.03.04 - 消息推送系统重构
- **原生内置**:全新原生支持企业微信、钉钉、飞书、Telegram、Bark、邮件等十余种主流渠道。
- **事件捕获**:接入系统级事件通知自动捕获,告别原有必配外部推送服务的繁琐历史。
### 2026.02.13 - 任务执行引擎重构
- **深度集成 Mise**:支持 Python, Node.js, Go, Rust, PHP 等几乎所有主流语言的动态安装与多版本切换。
- **依赖管理**:同步上线跨语言统一依赖管理系统。
### 2026.02.11 - 安全性增强
- **随机密码策略**:首次启动使用随机密码并打印在日志中。
- **暴力破解防护**:登录接口增加防暴力破解。
- **路径遍历防护**:文件系统操作增加路径穿越锁定。
### 2026.02.10 - 任务调度重构
- **调度性能**:重写了并发控制逻辑,完善了任务队列。
- **体验优化**:优化文件树交互体验,支持任务执行实时日志流。
### 2026.02.06 - 镜像扩展
- **Debian 13 支持**:增加对 Debian 13 (Trixie) 镜像支持,整理 Docker 目录结构。
+25
View File
@@ -0,0 +1,25 @@
//go:build web
package static
import (
"embed"
"io/fs"
)
//go:embed dist/*
var distFS embed.FS
// GetFS 返回嵌入的 fs.FS
func GetFS() fs.FS {
subFS, err := fs.Sub(distFS, "dist")
if err != nil {
return nil
}
return subFS
}
// ReadFile 读取嵌入的文件
func ReadFile(name string) ([]byte, error) {
return distFS.ReadFile("dist/" + name)
}
+42
View File
@@ -0,0 +1,42 @@
//go:build !web
package static
import (
"io/fs"
"os"
"path/filepath"
)
// DefaultStaticDir 是 Docker 模式下默认的静态资源目录
const DefaultStaticDir = "/www/taskpool"
func GetFS() fs.FS {
dir := getStaticDir()
if dir == "" {
return nil
}
return os.DirFS(dir)
}
func ReadFile(name string) ([]byte, error) {
dir := getStaticDir()
if dir == "" {
return nil, os.ErrNotExist
}
return os.ReadFile(filepath.Join(dir, name))
}
func getStaticDir() string {
// 优先从环境变量读取
if dir := os.Getenv("BH_STATIC_DIR"); dir != "" {
if _, err := os.Stat(dir); err == nil {
return dir
}
}
// 回退到默认目录
if _, err := os.Stat(DefaultStaticDir); err == nil {
return DefaultStaticDir
}
return ""
}