Files
yinjianm ff50030364 feat(api): 新增节点墙检测自动托管与显隐
新增定时墙检测命令与节点托管字段,自动为开启托管的父
节点创建检测任务,并在 blocked 时自动隐藏节点、normal
时仅恢复由墙检测自动隐藏的节点

更新自动上线服务以尊重 blocked 与自动隐藏状态,避免疑
似被墙节点被重新发布;同时补齐管理端墙检测托管开关、
刷新入口、批量设置与相关测试和知识库同步
2026-04-28 00:51:49 +08:00

99 lines
4.8 KiB
Markdown
Raw Permalink 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.
# 任务清单: node-gfw-auto-check-and-online
> **@status:** completed | 2026-04-28 00:41
```yaml
@feature: node-gfw-auto-check-and-online
@created: 2026-04-28
@status: completed
@mode: R2
```
## LIVE_STATUS
```json
{"status":"completed","completed":8,"failed":0,"pending":0,"total":8,"percent":100,"current":"开发实施完成,准备归档方案包","updated_at":"2026-04-28 00:48:00"}
```
## 进度概览
| 完成 | 失败 | 跳过 | 总数 |
|------|------|------|------|
| 8 | 0 | 0 | 8 |
---
## 任务列表
### 1. 后端数据与调度
- [√] 1.1 新增 `database/migrations/*_add_gfw_auto_fields_to_v2_server_table.php`
- 预期变更: 为 `v2_server` 增加 `gfw_check_enabled``gfw_auto_hidden``gfw_auto_action_at` 字段。
- 完成标准: 迁移包含字段存在性保护和 down 回滚逻辑;默认节点自动墙检测开启。
- 验证方式: 代码审查迁移字段和回滚逻辑。
- depends_on: []
- [√] 1.2 修改 `app/Models/Server.php``app/Http/Requests/Admin/ServerSave.php``app/Http/Controllers/V2/Admin/Server/ManageController.php`
- 预期变更: 模型 casts、保存、单节点更新和批量更新支持新增字段。
- 完成标准: `getNodes/save/update/batchUpdate` 可读写新增字段,现有字段不回退。
- 验证方式: 代码审查请求校验和 payload 字段。
- depends_on: [1.1]
- [√] 1.3 修改 `app/Services/ServerGfwCheckService.php`
- 预期变更: 新增自动检测批量创建、跳过 active 任务、blocked/normal 自动显隐、blocked 状态查询辅助。
- 完成标准: 自动检测只作用父节点;子节点继承检测结果但不创建任务;partial/failed 不改变 show。
- 验证方式: 单元测试覆盖自动检测、自动隐藏、自动恢复和子节点联动。
- depends_on: [1.2]
- [√] 1.4 新增 `app/Console/Commands/SyncServerGfwChecks.php` 并修改 `app/Console/Kernel.php`
- 预期变更: 新增 `sync:server-gfw-checks` 命令并加入 Laravel Scheduler。
- 完成标准: 命令输出 started/skipped/active 等统计;调度不与现有命令冲突。
- 验证方式: 代码审查命令签名、调度频率和 withoutOverlapping。
- depends_on: [1.3]
- [√] 1.5 修改 `app/Services/ServerAutoOnlineService.php`
- 预期变更: 自动上线同步时把最新 inherited/source 墙状态 `blocked` 作为显示否决条件。
- 完成标准: `auto_online=1` 且在线的 blocked 节点仍保持隐藏;非 blocked 继续按在线状态同步。
- 验证方式: 单元测试覆盖 blocked 不被自动上线重新显示。
- depends_on: [1.3]
### 2. 管理端前端
- [√] 2.1 修改 `admin-frontend/src/types/api.d.ts``admin-frontend/src/api/admin.ts``admin-frontend/src/utils/nodes.ts`
- 预期变更: 类型、更新 payload、统计和搜索文本支持 `gfw_check_enabled/gfw_auto_hidden/gfw_auto_action_at`
- 完成标准: TypeScript 可识别新增字段;搜索可命中自动墙检/自动隐藏相关关键词。
- 验证方式: `npm run build`
- depends_on: [1.2]
- [√] 2.2 修改 `admin-frontend/src/views/nodes/NodesView.vue``NodeBatchEditDialog.vue`、节点编辑映射工具
- 预期变更: 新增刷新数据按钮、墙检测托管开关、批量设置入口和编辑保存字段映射。
- 完成标准: 父节点可切换自动墙检测;子节点开关提示只控制随父节点自动隐藏/恢复;刷新按钮显示加载反馈。
- 验证方式: `npm run build` + 代码级 UI 审查。
- depends_on: [2.1]
### 3. 测试与知识库
- [√] 3.1 修改/新增 `tests/Unit/ServerAutoOnlineServiceTest.php``tests/Unit/ServerGfwCheckServiceTest.php`
- 预期变更: 覆盖自动墙检测任务创建、blocked 自动隐藏、normal 自动恢复、自动上线 blocked 否决。
- 完成标准: 测试断言自动动作不会误恢复手动隐藏节点。
- 验证方式: 本机可用时运行 PHPUnit;不可用时报告 PHP CLI 缺失。
- depends_on: [1.3, 1.5]
---
## 执行日志
| 时间 | 任务 | 状态 | 备注 |
|------|------|------|------|
| 2026-04-28 00:24 | 方案设计 | in_progress | 已选择方案 A,准备开发实施 |
| 2026-04-28 00:36 | 后端开发 | completed | 已新增自动检测字段、命令、服务联动和测试 |
| 2026-04-28 00:43 | 前端开发 | completed | 已新增刷新按钮、墙检测托管开关和批量设置入口 |
| 2026-04-28 00:48 | 验证 | completed | `npm run build` 通过;PHP/Composer 不在 PATHPHPUnit 未执行 |
---
## 执行备注
- 用户确认“隐藏”即不发布到订阅配置;当前实现以 `show=0` 为发布边界。
- 子节点不创建自动检测任务,但可继承父节点检测结果;子节点开关只控制是否随父节点自动隐藏/恢复。
- `partial/failed` 不主动恢复由墙检测隐藏的节点;只有 `normal` 结果会恢复 `gfw_auto_hidden=1` 的节点。