feat: 完善后端并新增 Vue3 WebUI

后端:
- 修复登录校验、DB 并发(单例+WAL+纯Go sqlite)、会话密钥持久化等核心缺陷
- 新增 Timer CRUD/签到/手动触发、执行日志、仪表盘、驱动元数据等 API
- 统一驱动接口: 带 context 的执行器、真实错误返回、敏感字段掩码、连通性测试
- 补全钉钉执行器; Timer 触发/提醒去重; 配置支持默认值与环境变量覆盖

前端:
- Vite+Vue3+TS+Pinia+Element Plus, 由驱动元数据动态渲染配置表单
- 登录/仪表盘(倒计时环)/定时器/规则/账号/日志/设置页面, 支持暗色模式
- 主题色 #66ccff, 信号波纹 logo, go:embed 单二进制部署

构建: Dockerfile 增加前端构建阶段; 补充各驱动配置文档

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
This commit is contained in:
mei
2026-07-26 22:19:41 +08:00
co-authored by Claude Fable 5
parent 89e8b7fd66
commit 79774070fc
110 changed files with 8936 additions and 849 deletions
+13 -5
View File
@@ -1,17 +1,25 @@
# Bilibili
# Bilibili 配置
## Account Config
账号类型: `bilibili`,规则类型: `bilibili-dynamic`。
## 账号配置 (Account Config)
```json
{
"raw_cookies": "xxxx"
"raw_cookies": "SESSDATA=xxx; bili_jct=xxx; DedeUserID=xxx; ..."
}
```
## Dynamic Config
登录 [bilibili.com](https://www.bilibili.com) 后,从浏览器开发者工具(F12 → 网络 → 任意请求 → 请求头 → Cookie)复制完整的 Cookie 字符串。
在 WebUI 的账号页面可以点击“测试”验证 Cookie 是否有效。
## 规则配置 (Rule Config)
```json
{
"msg": "something"
"msg": "要发送的动态内容"
}
```
定时器到期后会以该账号发布一条纯文本动态。
+32
View File
@@ -0,0 +1,32 @@
# 钉钉机器人配置
钉钉在 goodBaby 中有两个用途:
1. **提醒渠道**:定时器临近到期时提醒你签到,在 WebUI 的“设置”页配置
2. **规则类型** (`dingtalk`):定时器到期后向钉钉群发送消息,不需要关联账号
## 获取机器人凭据
1. 在钉钉群中:群设置 → 智能群助手 → 添加机器人 → 自定义
2. 安全设置推荐选择“加签”,记下 Secret
3. 创建后复制 Webhook 地址中 `access_token=` 后面的值
## 规则配置 (Rule Config)
```json
{
"access_token": "机器人 access_token",
"secret": "加签 Secret(未开启加签可留空)",
"title": "消息标题",
"msg": "消息内容,支持 Markdown"
}
```
## 提醒渠道配置(设置页)
```json
{
"access_token": "机器人 access_token",
"secret": "加签 Secret"
}
```
+38 -2
View File
@@ -1,3 +1,39 @@
# Email Config
# Email 配置
## Email Account Config
账号类型: `email`,规则类型: `email`。
## 账号配置 (Account Config)
```json
{
"smtp_server": "smtp.example.com",
"port": 465,
"security": "ssl",
"username": "you@example.com",
"password": "你的密码或授权码",
"from": "you@example.com",
"test_destination": "test@example.com"
}
```
| 字段 | 必填 | 说明 |
| --- | --- | --- |
| `smtp_server` | 是 | SMTP 服务器地址 |
| `port` | 是 | 端口,SSL 一般为 465,STARTTLS 一般为 587 |
| `security` | 否 | `ssl` / `starttls` / `none`,默认 `ssl` |
| `username` | 是 | 登录用户名,通常是邮箱地址 |
| `password` | 是 | 密码或授权码(QQ 邮箱、163 等需要使用授权码) |
| `from` | 否 | 发件人地址,默认使用 `username` |
| `test_destination` | 否 | 填写后,点击“测试”会真的发送一封测试邮件到该地址 |
## 规则配置 (Rule Config)
```json
{
"title": "邮件标题",
"msg": "邮件正文",
"destinations": ["a@example.com", "b@example.com"]
}
```
每个收件人独立发送、独立重试,互不影响。
+33
View File
@@ -0,0 +1,33 @@
# GitHub 配置
账号类型: `github`,规则类型: `github-repo-public`。
定时器到期后,把指定的私有仓库设置为公开。
## 账号配置 (Account Config)
```json
{
"token": "ghp_xxxxxxxx",
"owner": "your-github-name"
}
```
| 字段 | 必填 | 说明 |
| --- | --- | --- |
| `token` | 是 | Personal Access Token,需要 `repo` 权限 |
| `owner` | 是 | 仓库所有者(用户名或组织名) |
Token 在 GitHub → Settings → Developer settings → Personal access tokens 创建。
在 WebUI 的账号页面可以点击“测试”验证 Token 是否有效。
## 规则配置 (Rule Config)
```json
{
"repos": ["repo-a", "repo-b"]
}
```
只填仓库名,不含所有者。
+33
View File
@@ -0,0 +1,33 @@
# OneBot (QQ) 配置
账号类型: `onebot`,规则类型: `onebot`。
对接 [NapCat](https://napneko.github.io/)、go-cqhttp 等实现了 OneBot HTTP API 的服务。
## 账号配置 (Account Config)
```json
{
"url": "http://localhost:3000",
"token": "your_access_token"
}
```
| 字段 | 必填 | 说明 |
| --- | --- | --- |
| `url` | 是 | OneBot HTTP 服务地址 |
| `token` | 是 | Access Token |
在 WebUI 的账号页面可以点击“测试”验证连通性(调用 `get_login_info`)。
## 规则配置 (Rule Config)
```json
{
"msg": "要发送的消息",
"send_groups": [123456789],
"send_users": [987654321]
}
```
`send_groups`(群号)与 `send_users`(好友 QQ 号)至少填写一项。