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:
@@ -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 目录结构。
|
||||
@@ -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)
|
||||
}
|
||||
@@ -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 ""
|
||||
}
|
||||
Reference in New Issue
Block a user