From ce891e8515b9d4daa2f3f823eb0dd4a4306117ec Mon Sep 17 00:00:00 2001 From: Xiaoxia AI Date: Wed, 17 Jun 2026 09:35:48 +0800 Subject: [PATCH] feat: initialize Phase 6 task tracker with 40 frontend tasks --- scripts/create_tracker_db.py | 68 ++++++ scripts/init_phase6_tasks.py | 398 +++++++++++++++++++++++++++++++++++ tracker.db | Bin 0 -> 28672 bytes 3 files changed, 466 insertions(+) create mode 100644 scripts/create_tracker_db.py create mode 100644 scripts/init_phase6_tasks.py create mode 100644 tracker.db diff --git a/scripts/create_tracker_db.py b/scripts/create_tracker_db.py new file mode 100644 index 000000000..6364185a8 --- /dev/null +++ b/scripts/create_tracker_db.py @@ -0,0 +1,68 @@ +""" +创建推进器数据库表结构 +""" +import sqlite3 + +def create_tables(): + """创建数据库表""" + conn = sqlite3.connect("F:/openclaw-saas/tracker.db") + cursor = conn.cursor() + + # 创建 tasks 表 + cursor.execute(""" + CREATE TABLE IF NOT EXISTS tasks ( + id INTEGER PRIMARY KEY AUTOINCREMENT, + name TEXT NOT NULL, + description TEXT, + status TEXT DEFAULT 'pending', + phase TEXT, + milestone TEXT, + priority TEXT DEFAULT 'medium', + estimated_hours REAL, + actual_hours REAL, + created_at TEXT, + started_at TEXT, + completed_at TEXT, + assigned_to TEXT, + tags TEXT + ) + """) + + print("[OK] tasks 表创建成功") + + # 创建 milestones 表 + cursor.execute(""" + CREATE TABLE IF NOT EXISTS milestones ( + id INTEGER PRIMARY KEY AUTOINCREMENT, + name TEXT NOT NULL, + phase TEXT, + start_date TEXT, + end_date TEXT, + status TEXT DEFAULT 'pending', + description TEXT + ) + """) + + print("[OK] milestones 表创建成功") + + # 创建 logs 表 + cursor.execute(""" + CREATE TABLE IF NOT EXISTS logs ( + id INTEGER PRIMARY KEY AUTOINCREMENT, + task_id INTEGER, + message TEXT, + created_at TEXT, + FOREIGN KEY (task_id) REFERENCES tasks (id) + ) + """) + + print("[OK] logs 表创建成功") + + conn.commit() + conn.close() + + print("\n[SUCCESS] 数据库表结构创建完成!") + + +if __name__ == "__main__": + create_tables() diff --git a/scripts/init_phase6_tasks.py b/scripts/init_phase6_tasks.py new file mode 100644 index 000000000..349992feb --- /dev/null +++ b/scripts/init_phase6_tasks.py @@ -0,0 +1,398 @@ +""" +Phase 6: 前端完善 - 任务初始化脚本 +将 Phase 6 的所有任务同步到推进器 +""" +import sqlite3 +from datetime import datetime + +# Phase 6 任务列表 +PHASE6_TASKS = [ + # Week 1-2: 基础搭建 (7个任务) + { + "name": "项目初始化:Vite + React + TypeScript", + "description": "创建 Vite 项目,配置 React 18 和 TypeScript", + "phase": "Phase 6", + "milestone": "Week 1-2: 基础搭建", + "priority": "high", + "estimated_hours": 2, + }, + { + "name": "安装配置依赖包", + "description": "安装 Ant Design, React Router, Zustand, React Query, Axios 等", + "phase": "Phase 6", + "milestone": "Week 1-2: 基础搭建", + "priority": "high", + "estimated_hours": 2, + }, + { + "name": "搭建基础布局组件", + "description": "创建 Header, Sidebar, Footer 等布局组件", + "phase": "Phase 6", + "milestone": "Week 1-2: 基础搭建", + "priority": "high", + "estimated_hours": 4, + }, + { + "name": "API 客户端封装", + "description": "封装 Axios,配置拦截器和 token 管理", + "phase": "Phase 6", + "milestone": "Week 1-2: 基础搭建", + "priority": "high", + "estimated_hours": 3, + }, + { + "name": "路由配置", + "description": "配置 React Router,定义所有路由", + "phase": "Phase 6", + "milestone": "Week 1-2: 基础搭建", + "priority": "high", + "estimated_hours": 2, + }, + { + "name": "设计系统配置", + "description": "配置色彩、字体、间距等 CSS 变量", + "phase": "Phase 6", + "milestone": "Week 1-2: 基础搭建", + "priority": "medium", + "estimated_hours": 2, + }, + { + "name": "TypeScript 类型定义", + "description": "定义 API 响应、实体等 TypeScript 类型", + "phase": "Phase 6", + "milestone": "Week 1-2: 基础搭建", + "priority": "medium", + "estimated_hours": 3, + }, + + # Week 3: 认证页面 (5个任务) + { + "name": "登录页面", + "description": "实现用户登录界面和逻辑", + "phase": "Phase 6", + "milestone": "Week 3: 认证页面", + "priority": "high", + "estimated_hours": 4, + }, + { + "name": "注册页面", + "description": "实现用户注册界面和表单验证", + "phase": "Phase 6", + "milestone": "Week 3: 认证页面", + "priority": "high", + "estimated_hours": 4, + }, + { + "name": "忘记密码页面", + "description": "实现密码重置请求界面", + "phase": "Phase 6", + "milestone": "Week 3: 认证页面", + "priority": "high", + "estimated_hours": 3, + }, + { + "name": "重置密码页面", + "description": "实现密码重置界面", + "phase": "Phase 6", + "milestone": "Week 3: 认证页面", + "priority": "high", + "estimated_hours": 3, + }, + { + "name": "Token 管理和刷新", + "description": "实现自动 token 刷新和过期处理", + "phase": "Phase 6", + "milestone": "Week 3: 认证页面", + "priority": "high", + "estimated_hours": 4, + }, + + # Week 4: 工作空间管理 (6个任务) + { + "name": "工作空间列表页面", + "description": "显示所有工作空间,支持创建", + "phase": "Phase 6", + "milestone": "Week 4: 工作空间管理", + "priority": "high", + "estimated_hours": 5, + }, + { + "name": "工作空间详情页面", + "description": "显示工作空间概览、配额使用情况", + "phase": "Phase 6", + "milestone": "Week 4: 工作空间管理", + "priority": "high", + "estimated_hours": 4, + }, + { + "name": "成员列表和管理", + "description": "显示成员列表,支持角色修改和移除", + "phase": "Phase 6", + "milestone": "Week 4: 工作空间管理", + "priority": "high", + "estimated_hours": 5, + }, + { + "name": "邀请成员功能", + "description": "实现邀请成员弹窗和邮件发送", + "phase": "Phase 6", + "milestone": "Week 4: 工作空间管理", + "priority": "high", + "estimated_hours": 4, + }, + { + "name": "权限矩阵展示", + "description": "显示各角色的权限说明", + "phase": "Phase 6", + "milestone": "Week 4: 工作空间管理", + "priority": "medium", + "estimated_hours": 2, + }, + { + "name": "工作空间设置", + "description": "修改名称、删除工作空间等", + "phase": "Phase 6", + "milestone": "Week 4: 工作空间管理", + "priority": "medium", + "estimated_hours": 3, + }, + + # Week 5: 订阅管理 (5个任务) + { + "name": "套餐选择页面", + "description": "显示 Free/Pro/Enterprise 套餐对比", + "phase": "Phase 6", + "milestone": "Week 5: 订阅管理", + "priority": "high", + "estimated_hours": 5, + }, + { + "name": "升级流程", + "description": "实现订阅升级流程和确认", + "phase": "Phase 6", + "milestone": "Week 5: 订阅管理", + "priority": "high", + "estimated_hours": 4, + }, + { + "name": "配额展示组件", + "description": "显示项目数量、存储使用情况", + "phase": "Phase 6", + "milestone": "Week 5: 订阅管理", + "priority": "high", + "estimated_hours": 3, + }, + { + "name": "账单页面", + "description": "显示历史账单列表", + "phase": "Phase 6", + "milestone": "Week 5: 订阅管理", + "priority": "medium", + "estimated_hours": 4, + }, + { + "name": "发票申请入口", + "description": "提供发票申请表单", + "phase": "Phase 6", + "milestone": "Week 5: 订阅管理", + "priority": "low", + "estimated_hours": 3, + }, + + # Week 6: Admin 后台 (5个任务) + { + "name": "Dashboard 仪表盘", + "description": "显示关键指标和图表", + "phase": "Phase 6", + "milestone": "Week 6: Admin 后台", + "priority": "high", + "estimated_hours": 6, + }, + { + "name": "用户管理页面", + "description": "用户列表、搜索、详情", + "phase": "Phase 6", + "milestone": "Week 6: Admin 后台", + "priority": "high", + "estimated_hours": 5, + }, + { + "name": "用户操作功能", + "description": "封禁、解封、重置密码等", + "phase": "Phase 6", + "milestone": "Week 6: Admin 后台", + "priority": "high", + "estimated_hours": 4, + }, + { + "name": "系统监控页面", + "description": "显示 API 性能、数据库状态", + "phase": "Phase 6", + "milestone": "Week 6: Admin 后台", + "priority": "medium", + "estimated_hours": 5, + }, + { + "name": "日志查看器", + "description": "查看错误日志和慢查询", + "phase": "Phase 6", + "milestone": "Week 6: Admin 后台", + "priority": "medium", + "estimated_hours": 4, + }, + + # Week 7: 个人中心 (4个任务) + { + "name": "个人设置页面", + "description": "修改昵称、头像等", + "phase": "Phase 6", + "milestone": "Week 7: 个人中心", + "priority": "medium", + "estimated_hours": 4, + }, + { + "name": "账号安全设置", + "description": "修改密码、邮箱等", + "phase": "Phase 6", + "milestone": "Week 7: 个人中心", + "priority": "high", + "estimated_hours": 4, + }, + { + "name": "通知设置", + "description": "配置邮件通知偏好", + "phase": "Phase 6", + "milestone": "Week 7: 个人中心", + "priority": "low", + "estimated_hours": 3, + }, + { + "name": "Session 管理", + "description": "查看活跃设备、强制登出", + "phase": "Phase 6", + "milestone": "Week 7: 个人中心", + "priority": "medium", + "estimated_hours": 4, + }, + + # Week 8: 测试和优化 (8个任务) + { + "name": "E2E 测试:认证流程", + "description": "使用 Playwright 测试注册登录流程", + "phase": "Phase 6", + "milestone": "Week 8: 测试和优化", + "priority": "high", + "estimated_hours": 4, + }, + { + "name": "E2E 测试:工作空间", + "description": "测试工作空间创建和管理", + "phase": "Phase 6", + "milestone": "Week 8: 测试和优化", + "priority": "high", + "estimated_hours": 4, + }, + { + "name": "E2E 测试:订阅升级", + "description": "测试订阅升级流程", + "phase": "Phase 6", + "milestone": "Week 8: 测试和优化", + "priority": "high", + "estimated_hours": 3, + }, + { + "name": "性能优化:代码分割", + "description": "实现路由懒加载和代码分割", + "phase": "Phase 6", + "milestone": "Week 8: 测试和优化", + "priority": "high", + "estimated_hours": 3, + }, + { + "name": "性能优化:图片和资源", + "description": "优化图片加载和资源缓存", + "phase": "Phase 6", + "milestone": "Week 8: 测试和优化", + "priority": "medium", + "estimated_hours": 3, + }, + { + "name": "可访问性优化", + "description": "添加 ARIA 标签,键盘导航支持", + "phase": "Phase 6", + "milestone": "Week 8: 测试和优化", + "priority": "medium", + "estimated_hours": 4, + }, + { + "name": "移动端适配优化", + "description": "优化移动端体验和响应式布局", + "phase": "Phase 6", + "milestone": "Week 8: 测试和优化", + "priority": "medium", + "estimated_hours": 5, + }, + { + "name": "Bug 修复和收尾", + "description": "修复测试发现的 Bug,完善细节", + "phase": "Phase 6", + "milestone": "Week 8: 测试和优化", + "priority": "high", + "estimated_hours": 6, + }, +] + + +def init_phase6_tasks(): + """初始化 Phase 6 任务到数据库""" + + # 连接数据库 + db_path = "F:/openclaw-saas/tracker.db" + conn = sqlite3.connect(db_path) + cursor = conn.cursor() + + print("[Phase 6] 开始初始化任务...") + + # 插入任务 + created_count = 0 + for task in PHASE6_TASKS: + try: + cursor.execute(""" + INSERT INTO tasks ( + name, description, status, phase, milestone, + priority, estimated_hours, created_at + ) VALUES (?, ?, ?, ?, ?, ?, ?, ?) + """, ( + task["name"], + task["description"], + "pending", + task["phase"], + task["milestone"], + task["priority"], + task["estimated_hours"], + datetime.now().isoformat() + )) + created_count += 1 + print(f"[OK] {task['name']}") + except Exception as e: + print(f"[ERROR] {task['name']}: {e}") + + conn.commit() + conn.close() + + print(f"\n[SUCCESS] Phase 6 任务初始化完成!") + print(f"📊 总计 {len(PHASE6_TASKS)} 个任务") + print(f"✅ 成功创建 {created_count} 个任务") + print(f"\n任务分布:") + print(f" Week 1-2: 基础搭建 - 7 个任务") + print(f" Week 3: 认证页面 - 5 个任务") + print(f" Week 4: 工作空间管理 - 6 个任务") + print(f" Week 5: 订阅管理 - 5 个任务") + print(f" Week 6: Admin 后台 - 5 个任务") + print(f" Week 7: 个人中心 - 4 个任务") + print(f" Week 8: 测试和优化 - 8 个任务") + print(f"\n预计总工时:{sum(t['estimated_hours'] for t in PHASE6_TASKS)} 小时") + + +if __name__ == "__main__": + init_phase6_tasks() diff --git a/tracker.db b/tracker.db new file mode 100644 index 0000000000000000000000000000000000000000..28280139f3dbea90c650a5e754acaa1d1aea42e5 GIT binary patch literal 28672 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 literal 0 HcmV?d00001