Epics and Stories (Final): asset-light MVP

版本: 2.0.0 (Final)
日期: 2025-12-20
关联文档:


概览

本文档是基于技术架构设计的最终版 Epics 和 Stories,包含具体的技术实现任务。

Epic 总览

Epic ID名称Stories任务数预计工时
E0项目基础设施4163-4 天
E1资产盘点模块8285-7 天
E2配置方案模块6203-5 天
E3资产视图模块5183-4 天
E4收益分析模块5163-4 天
合计-289817-24 天

E0: 项目基础设施

E0-S1: 项目初始化

预计工时: 0.5 天

技术任务

任务 ID任务文件/路径
T0-1-1创建 Cargo 项目Cargo.toml
T0-1-2配置 Dioxus Desktop 依赖Cargo.toml
T0-1-3创建 Dioxus.toml 配置Dioxus.toml
T0-1-4创建目录结构src/*
T0-1-5创建 main.rs 入口src/main.rs
T0-1-6配置 rustfmt.tomlrustfmt.toml

代码模板

Cargo.toml:

[package]
name = "asset-light"
version = "0.1.0"
edition = "2021"

[dependencies]
dioxus = { version = "0.5", features = ["desktop", "router"] }
rusqlite = { version = "0.31", features = ["bundled"] }
serde = { version = "1.0", features = ["derive"] }
serde_json = "1.0"
uuid = { version = "1.0", features = ["v4", "serde"] }
chrono = { version = "0.4", features = ["serde"] }
rust_decimal = { version = "1.0", features = ["serde"] }
dirs = "5.0"
thiserror = "1.0"

验收标准:

  • cargo build 编译成功
  • cargo run 启动空白窗口
  • 目录结构符合架构设计

E0-S2: 数据持久化层

预计工时: 1 天

技术任务

任务 ID任务文件/路径
T0-2-1创建 Database 连接管理src/db/connection.rs
T0-2-2实现数据库路径管理src/db/connection.rs
T0-2-3创建迁移脚本 001_create_assetsmigrations/001_create_assets.sql
T0-2-4创建迁移脚本 002_create_snapshotsmigrations/002_create_snapshots.sql
T0-2-5创建迁移脚本 003_create_plansmigrations/003_create_plans.sql
T0-2-6实现迁移执行逻辑src/db/migrations.rs

SQL 迁移脚本

001_create_assets.sql:

CREATE TABLE IF NOT EXISTS assets (
    id TEXT PRIMARY KEY,
    name TEXT NOT NULL,
    category TEXT NOT NULL CHECK (category IN ('Cash', 'Stable', 'Advanced')),
    sub_category TEXT,
    current_value TEXT NOT NULL,
    notes TEXT,
    created_at TEXT NOT NULL,
    updated_at TEXT NOT NULL
);
CREATE INDEX IF NOT EXISTS idx_assets_category ON assets(category);

002_create_snapshots.sql:

CREATE TABLE IF NOT EXISTS snapshots (
    id TEXT PRIMARY KEY,
    snapshot_date TEXT NOT NULL,
    created_at TEXT NOT NULL,
    total_value TEXT NOT NULL
);
CREATE INDEX IF NOT EXISTS idx_snapshots_date ON snapshots(snapshot_date);

CREATE TABLE IF NOT EXISTS snapshot_items (
    id INTEGER PRIMARY KEY AUTOINCREMENT,
    snapshot_id TEXT NOT NULL,
    asset_id TEXT NOT NULL,
    asset_name TEXT NOT NULL,
    category TEXT NOT NULL,
    sub_category TEXT,
    value TEXT NOT NULL,
    FOREIGN KEY (snapshot_id) REFERENCES snapshots(id) ON DELETE CASCADE
);
CREATE INDEX IF NOT EXISTS idx_snapshot_items_snapshot ON snapshot_items(snapshot_id);

003_create_plans.sql:

CREATE TABLE IF NOT EXISTS allocation_plans (
    id TEXT PRIMARY KEY,
    name TEXT NOT NULL,
    description TEXT,
    is_active INTEGER NOT NULL DEFAULT 0,
    created_at TEXT NOT NULL,
    updated_at TEXT NOT NULL
);

CREATE TABLE IF NOT EXISTS allocations (
    id INTEGER PRIMARY KEY AUTOINCREMENT,
    plan_id TEXT NOT NULL,
    category TEXT NOT NULL,
    target_percentage TEXT NOT NULL,
    min_percentage TEXT,
    max_percentage TEXT,
    FOREIGN KEY (plan_id) REFERENCES allocation_plans(id) ON DELETE CASCADE
);
CREATE INDEX IF NOT EXISTS idx_allocations_plan ON allocations(plan_id);

验收标准:

  • 数据库文件创建在 ~/Library/Application Support/asset-light/data.db
  • 迁移执行成功
  • 表结构正确

E0-S3: 应用布局框架

预计工时: 1 天

技术任务

任务 ID任务文件/路径
T0-3-1定义路由枚举src/router.rs
T0-3-2创建 Layout 组件src/components/layout/mod.rs
T0-3-3创建 Sidebar 组件src/components/layout/sidebar.rs
T0-3-4创建 NavItem 组件src/components/layout/sidebar.rs
T0-3-5创建 PageContainer 组件src/components/layout/page_container.rs
T0-3-6创建 5 个页面占位组件src/pages/*.rs

组件结构

src/components/layout/
├── mod.rs          // pub mod sidebar; pub mod page_container;
├── sidebar.rs      // Sidebar, NavItem
└── page_container.rs

src/pages/
├── mod.rs
├── home.rs         // HomePage
├── assets.rs       // AssetsPage
├── history.rs      // HistoryPage
├── plans.rs        // PlansPage
└── analysis.rs     // AnalysisPage

验收标准:

  • 侧边栏显示 5 个导航项
  • 点击导航项切换页面
  • 当前页面导航项高亮

E0-S4: 全局状态管理

预计工时: 0.5 天

技术任务

任务 ID任务文件/路径
T0-4-1定义 AppState 结构体src/state/app_state.rs
T0-4-2实现 provide_app_statesrc/state/app_state.rs
T0-4-3实现 use_app_state Hooksrc/state/app_state.rs
T0-4-4在 App 组件中提供状态src/app.rs

状态结构

#![allow(unused)]
fn main() {
// src/state/app_state.rs
#[derive(Clone, Default)]
pub struct AppState {
    pub assets: Vec<Asset>,
    pub snapshots: Vec<Snapshot>,
    pub plans: Vec<AllocationPlan>,
    pub active_plan: Option<AllocationPlan>,
    pub is_inventory_mode: bool,
    pub loading: bool,
    pub error: Option<String>,
}
}

验收标准:

  • 全局状态在所有页面可访问
  • 状态变更触发 UI 更新

E1: 资产盘点模块

E1-S1: 资产条目数据模型

预计工时: 0.5 天

技术任务

任务 ID任务文件/路径
T1-1-1定义 Category 枚举src/models/category.rs
T1-1-2定义 Asset 结构体src/models/asset.rs
T1-1-3实现 Asset::new()src/models/asset.rs
T1-1-4创建 AssetRepositorysrc/db/asset_repo.rs
T1-1-5实现 CRUD 方法src/db/asset_repo.rs

Repository 接口

#![allow(unused)]
fn main() {
// src/db/asset_repo.rs
impl AssetRepository {
    pub fn insert(&self, asset: &Asset) -> Result<()>;
    pub fn update(&self, asset: &Asset) -> Result<()>;
    pub fn delete(&self, id: Uuid) -> Result<()>;
    pub fn find_by_id(&self, id: Uuid) -> Result<Option<Asset>>;
    pub fn find_all(&self) -> Result<Vec<Asset>>;
    pub fn find_by_category(&self, category: Category) -> Result<Vec<Asset>>;
}
}

验收标准:

  • 资产可增删改查
  • 按类别查询正常

E1-S2: 新增资产条目

预计工时: 1 天

技术任务

任务 ID任务文件/路径
T1-2-1创建 Modal 通用组件src/components/common/modal.rs
T1-2-2创建 Input 通用组件src/components/common/input.rs
T1-2-3创建 Select 通用组件src/components/common/select.rs
T1-2-4创建 Button 通用组件src/components/common/button.rs
T1-2-5创建 AssetForm 组件src/components/asset/asset_form.rs
T1-2-6创建 AssetServicesrc/services/asset_service.rs
T1-2-7实现表单验证逻辑src/components/asset/asset_form.rs

组件 Props

#![allow(unused)]
fn main() {
#[component]
pub fn AssetForm(
    asset: Option<Asset>,           // None = 新增, Some = 编辑
    on_save: EventHandler<Asset>,
    on_cancel: EventHandler<()>,
) -> Element
}

验收标准:

  • 点击新增按钮弹出表单
  • 表单验证生效
  • 保存成功关闭表单

E1-S3: 编辑资产条目

预计工时: 0.5 天

技术任务

任务 ID任务文件/路径
T1-3-1AssetItem 添加编辑按钮src/components/asset/asset_item.rs
T1-3-2复用 AssetForm 组件src/pages/assets.rs
T1-3-3实现编辑状态管理src/pages/assets.rs

验收标准:

  • 点击编辑打开预填充表单
  • 保存更新资产信息

E1-S4: 删除资产条目

预计工时: 0.5 天

技术任务

任务 ID任务文件/路径
T1-4-1创建 ConfirmDialog 组件src/components/common/confirm_dialog.rs
T1-4-2AssetItem 添加删除按钮src/components/asset/asset_item.rs
T1-4-3实现删除确认流程src/pages/assets.rs

验收标准:

  • 点击删除弹出确认
  • 确认后删除成功

E1-S5: 资产列表展示

预计工时: 1 天

技术任务

任务 ID任务文件/路径
T1-5-1创建 AssetList 组件src/components/asset/asset_list.rs
T1-5-2创建 CategoryGroup 组件src/components/asset/category_group.rs
T1-5-3创建 AssetItem 组件src/components/asset/asset_item.rs
T1-5-4实现折叠/展开功能src/components/asset/category_group.rs
T1-5-5实现汇总计算src/pages/assets.rs

组件层次

AssetList
├── CategoryGroup (Cash)
│   ├── AssetItem
│   └── AssetItem
├── CategoryGroup (Stable)
│   └── AssetItem
└── CategoryGroup (Advanced)
    └── AssetItem

验收标准:

  • 资产按类别分组显示
  • 显示类别汇总
  • 折叠展开正常

E1-S6: 执行盘点操作

预计工时: 1.5 天

技术任务

任务 ID任务文件/路径
T1-6-1定义 Snapshot 模型src/models/snapshot.rs
T1-6-2创建 SnapshotRepositorysrc/db/snapshot_repo.rs
T1-6-3创建 SnapshotServicesrc/services/snapshot_service.rs
T1-6-4创建 InventoryMode 组件src/components/snapshot/inventory_mode.rs
T1-6-5创建 InventoryItem 组件src/components/snapshot/inventory_item.rs
T1-6-6实现盘点次数限制检查src/services/snapshot_service.rs
T1-6-7实现盘点保存逻辑src/services/snapshot_service.rs

盘点流程

开始盘点 → 进入盘点模式 → 编辑各资产市值 → 完成盘点 → 创建快照 → 更新资产

验收标准:

  • 盘点模式 UI 区分明显
  • 可编辑各资产市值
  • 快照正确保存
  • 每日限制 5 次

E1-S7: 查看盘点历史列表

预计工时: 0.5 天

技术任务

任务 ID任务文件/路径
T1-7-1创建 SnapshotTimeline 组件src/components/snapshot/snapshot_timeline.rs
T1-7-2创建 SnapshotCard 组件src/components/snapshot/snapshot_card.rs
T1-7-3实现变化计算src/components/snapshot/snapshot_card.rs

验收标准:

  • 时间线展示历史
  • 显示变化金额和百分比

E1-S8: 查看盘点快照详情

预计工时: 0.5 天

技术任务

任务 ID任务文件/路径
T1-8-1创建 SnapshotDetail 组件src/components/snapshot/snapshot_detail.rs
T1-8-2实现详情弹窗或展开src/pages/history.rs

验收标准:

  • 可查看快照详细资产列表

E2: 配置方案模块

E2-S1: 配置方案数据模型

预计工时: 0.5 天

技术任务

任务 ID任务文件/路径
T2-1-1定义 AllocationPlan 结构体src/models/plan.rs
T2-1-2定义 Allocation 结构体src/models/plan.rs
T2-1-3创建 PlanRepositorysrc/db/plan_repo.rs
T2-1-4实现默认方案创建src/db/plan_repo.rs

验收标准:

  • 首次启动创建默认方案
  • 方案 CRUD 正常

E2-S2: 创建配置方案

预计工时: 1 天

技术任务

任务 ID任务文件/路径
T2-2-1创建 PlanEditor 组件src/components/plan/plan_editor.rs
T2-2-2创建 AllocationSlider 组件src/components/plan/allocation_slider.rs
T2-2-3实现 100% 验证逻辑src/components/plan/plan_editor.rs
T2-2-4创建 PlanServicesrc/services/plan_service.rs

验收标准:

  • 可创建新方案
  • 占比总和必须 100%

E2-S3: 编辑配置方案

预计工时: 0.5 天

技术任务

任务 ID任务文件/路径
T2-3-1PlanCard 添加编辑按钮src/components/plan/plan_card.rs
T2-3-2复用 PlanEditorsrc/pages/plans.rs

验收标准:

  • 可编辑现有方案

E2-S4: 删除配置方案

预计工时: 0.5 天

技术任务

任务 ID任务文件/路径
T2-4-1PlanCard 添加删除按钮src/components/plan/plan_card.rs
T2-4-2实现删除限制检查src/services/plan_service.rs

验收标准:

  • 激活方案不可删除
  • 最后一个方案不可删除

E2-S5: 激活配置方案

预计工时: 0.5 天

技术任务

任务 ID任务文件/路径
T2-5-1PlanCard 添加激活按钮src/components/plan/plan_card.rs
T2-5-2实现激活切换逻辑src/services/plan_service.rs
T2-5-3更新全局状态 active_plansrc/state/app_state.rs

验收标准:

  • 可切换激活方案
  • 始终只有一个激活

E2-S6: 预设方案模板

预计工时: 0.5 天

技术任务

任务 ID任务文件/路径
T2-6-1定义模板常量src/models/plan.rs
T2-6-2PlanEditor 添加模板选择src/components/plan/plan_editor.rs

模板定义:

#![allow(unused)]
fn main() {
impl AllocationPlan {
    pub fn template_conservative() -> Self { /* Cash 30, Stable 50, Advanced 20 */ }
    pub fn template_balanced() -> Self { /* Cash 20, Stable 40, Advanced 40 */ }
    pub fn template_aggressive() -> Self { /* Cash 10, Stable 20, Advanced 70 */ }
}
}

验收标准:

  • 提供 3 个模板
  • 选择模板自动填充

E3: 资产视图模块

E3-S1: 资产总览卡片

预计工时: 0.5 天

技术任务

任务 ID任务文件/路径
T3-1-1创建 TotalCard 组件src/components/dashboard/total_card.rs
T3-1-2创建 StatCard 通用组件src/components/common/stat_card.rs
T3-1-3实现汇总计算src/pages/home.rs

验收标准:

  • 显示总资产
  • 显示上次盘点日期

E3-S2: 配置对比图表

预计工时: 1 天

技术任务

任务 ID任务文件/路径
T3-2-1创建 PieChart 组件src/components/dashboard/pie_chart.rs
T3-2-2创建 PieChartPair 组件src/components/dashboard/pie_chart_pair.rs
T3-2-3实现 SVG 饼图渲染src/components/dashboard/pie_chart.rs
T3-2-4实现悬停提示src/components/dashboard/pie_chart.rs

验收标准:

  • 双饼图并列显示
  • 类别颜色一致

E3-S3: 偏离状态列表

预计工时: 1 天

技术任务

任务 ID任务文件/路径
T3-3-1创建 DeviationTable 组件src/components/dashboard/deviation_table.rs
T3-3-2创建 StatusBadge 组件src/components/common/status_badge.rs
T3-3-3创建 AnalysisServicesrc/services/analysis_service.rs
T3-3-4实现 calculate_deviationsrc/services/analysis_service.rs

验收标准:

  • 显示偏离度表格
  • 状态颜色正确

E3-S4: 无数据状态处理

预计工时: 0.5 天

技术任务

任务 ID任务文件/路径
T3-4-1创建 EmptyState 组件src/components/common/empty_state.rs
T3-4-2首页添加空状态处理src/pages/home.rs

验收标准:

  • 无数据时显示引导

E3-S5: 再平衡方向提示

预计工时: 0.5 天

技术任务

任务 ID任务文件/路径
T3-5-1DeviationTable 添加方向列src/components/dashboard/deviation_table.rs
T3-5-2实现方向箭头显示src/components/dashboard/deviation_table.rs

验收标准:

  • 显示调整方向

E4: 收益分析模块

E4-S1: 周期收益计算

预计工时: 1 天

技术任务

任务 ID任务文件/路径
T4-1-1创建 PeriodSelector 组件src/components/analysis/period_selector.rs
T4-1-2创建 ReturnCard 组件src/components/analysis/return_card.rs
T4-1-3实现 calculate_returnsrc/services/analysis_service.rs
T4-1-4实现周期筛选逻辑src/pages/analysis.rs

验收标准:

  • 可选择季度/年度
  • 正确计算收益

E4-S2: 收益归因分析

预计工时: 1 天

技术任务

任务 ID任务文件/路径
T4-2-1创建 AttributionTable 组件src/components/analysis/attribution_table.rs
T4-2-2实现类别收益计算src/services/analysis_service.rs
T4-2-3实现贡献度计算src/services/analysis_service.rs

验收标准:

  • 显示各类别收益
  • 正负收益颜色区分

E4-S3: 资产趋势图

预计工时: 1 天

技术任务

任务 ID任务文件/路径
T4-3-1创建 TrendChart 组件src/components/analysis/trend_chart.rs
T4-3-2实现 SVG 折线图src/components/analysis/trend_chart.rs
T4-3-3实现悬停数据点提示src/components/analysis/trend_chart.rs

验收标准:

  • 折线图正确渲染
  • 悬停显示详情

E4-S4: 自定义周期对比

预计工时: 0.5 天

技术任务

任务 ID任务文件/路径
T4-4-1PeriodSelector 添加自定义入口src/components/analysis/period_selector.rs
T4-4-2创建快照选择器src/components/analysis/snapshot_picker.rs

验收标准:

  • 可选择任意两个快照对比

E4-S5: 无数据状态处理

预计工时: 0.5 天

技术任务

任务 ID任务文件/路径
T4-5-1分析页添加空状态处理src/pages/analysis.rs

验收标准:

  • 数据不足时友好提示

Sprint 规划建议

Sprint 1: 基础设施 (3-4 天)

  • E0-S1: 项目初始化
  • E0-S2: 数据持久化层
  • E0-S3: 应用布局框架
  • E0-S4: 全局状态管理

Sprint 2: 资产管理 (5-7 天)

  • E1-S1: 资产数据模型
  • E1-S2: 新增资产
  • E1-S3: 编辑资产
  • E1-S4: 删除资产
  • E1-S5: 资产列表展示

Sprint 3: 盘点功能 (3-4 天)

  • E1-S6: 执行盘点
  • E1-S7: 盘点历史
  • E1-S8: 快照详情

Sprint 4: 配置方案 (3-4 天)

  • E2-S1 ~ E2-S6

Sprint 5: 仪表盘 (3-4 天)

  • E3-S1 ~ E3-S5

Sprint 6: 收益分析 (3-4 天)

  • E4-S1 ~ E4-S5

文件清单

需创建的文件 (共约 45 个)

src/models/ (5 个)

  • mod.rs, asset.rs, snapshot.rs, plan.rs, category.rs

src/db/ (5 个)

  • mod.rs, connection.rs, migrations.rs, asset_repo.rs, snapshot_repo.rs, plan_repo.rs

src/services/ (5 个)

  • mod.rs, asset_service.rs, snapshot_service.rs, plan_service.rs, analysis_service.rs

src/state/ (2 个)

  • mod.rs, app_state.rs

src/components/common/ (8 个)

  • mod.rs, button.rs, input.rs, select.rs, modal.rs, card.rs, confirm_dialog.rs, empty_state.rs, status_badge.rs, stat_card.rs

src/components/layout/ (3 个)

  • mod.rs, sidebar.rs, page_container.rs

src/components/asset/ (5 个)

  • mod.rs, asset_list.rs, asset_form.rs, asset_item.rs, category_group.rs

src/components/snapshot/ (5 个)

  • mod.rs, inventory_mode.rs, inventory_item.rs, snapshot_timeline.rs, snapshot_card.rs, snapshot_detail.rs

src/components/plan/ (4 个)

  • mod.rs, plan_list.rs, plan_card.rs, plan_editor.rs, allocation_slider.rs

src/components/dashboard/ (4 个)

  • mod.rs, total_card.rs, pie_chart.rs, pie_chart_pair.rs, deviation_table.rs

src/components/analysis/ (5 个)

  • mod.rs, period_selector.rs, return_card.rs, attribution_table.rs, trend_chart.rs, snapshot_picker.rs

src/pages/ (6 个)

  • mod.rs, home.rs, assets.rs, history.rs, plans.rs, analysis.rs

migrations/ (3 个)

  • 001_create_assets.sql, 002_create_snapshots.sql, 003_create_plans.sql

修订历史

版本日期作者变更说明
1.0.02025-12-20PM Agent初始版本
2.0.02025-12-20PM Agent基于架构添加技术任务