# 云产品管理 在看板新增「云产品」标签页,集中管理用户在阿里云、腾讯云等平台购买的云资源信息,支持完整 CRUD。 ## 背景 用户购买了阿里云和腾讯云的多种云产品(ECS/CVM、RDS、OSS/COS、CDN、域名等),目前信息散落在各处,需要一个统一的管理入口,与服务器注册表、API 管理并列,形成完整的云资源管理体系。 --- ## 数据模型 单表 `cloud_products`,JSON 扩展字段 `config_data` 存放类型专属属性: ```sql cloud_products ( id TEXT PRIMARY KEY, vendor TEXT NOT NULL DEFAULT 'aliyun', -- aliyun | tencent | custom product_type TEXT NOT NULL DEFAULT 'ecs', -- ecs/cvm/rds/tdsql/oss/cos/cdn/domain/redis/clb/custom name TEXT NOT NULL, region TEXT, instance_id TEXT, endpoint TEXT, expire_at TEXT, -- ISO8601,到期时间 status TEXT NOT NULL DEFAULT 'active', -- active | expired | stopped config_data TEXT NOT NULL DEFAULT '{}', notes TEXT, sort_order INTEGER DEFAULT 0, created_at TEXT DEFAULT (datetime('now')), updated_at TEXT DEFAULT (datetime('now')) ) ``` --- ## 任务卡 ### ✅ DB 迁移:cloud_products 表 - status: done - complexity: S - files: src-tauri/src/db.rs - acceptance: 应用启动后 cloud_products 表存在,migrate_idempotent 测试通过 --- ### ✅ Rust CRUD:cloud_products.rs - status: done - complexity: S - depends: cloud-products(DB 迁移完成) - files: src-tauri/src/commands/cloud_products.rs - acceptance: 包含 CloudProduct struct + SaveCloudProductInput + list/create/update/delete 函数 + 4 条 tauri::command,错误返回 Result<_, String> --- ### ✅ 接线:mod.rs + lib.rs + commands.ts - status: done - complexity: S - depends: cloud-products(Rust CRUD 完成) - files: src-tauri/src/commands/mod.rs, src-tauri/src/lib.rs, src/lib/commands.ts - acceptance: Rust 编译通过,commands.ts 正确导出 CloudProduct 接口和 4 个 invoke 函数 --- ### ✅ 前端 Panel:CloudProductsPanel.tsx - status: done - complexity: M - depends: cloud-products(接线完成) - files: src/components/dashboard/CloudProductsPanel.tsx - acceptance: 按厂商(阿里云/腾讯云/自定义)分组展示卡片,支持完整增删改,到期 ≤ 7 天红色高亮,模态表单 vendor 联动 product_type 可选项 --- ### ✅ Dashboard 接入:云产品标签页 - status: done - complexity: S - depends: cloud-products(Panel 完成) - files: src/components/dashboard/Dashboard.tsx - acceptance: 看板子标签栏出现「云产品」,切换后渲染 CloudProductsPanel --- ## 复盘笔记 【复盘】前端 Panel:CloudProductsPanel.tsx 任务类型: 前端组件 复杂度: M 实际轮数: 1轮(预估 1 轮) 是否返工: 否 返工原因: 无 有效策略: 参照 ApiKeysPanel 分层结构(Modal + Card + VendorSection + Panel),vendor 联动 product_type 用 Record 查表,到期高亮用简单 Date diff 计算无需额外状态 遗留风险: config_data JSON 扩展字段当前 UI 不暴露,未来如需类型专属配置需新增表单字段