4. 任务待办工具(technical-architecture)
1. 架构设计
2. 技术描述
3. 路由定义
| 路由 | 用途 |
|---|---|
| / | 今日任务页面(首页) |
| /tasks | 任务列表页面 |
| /task/add | 新增任务页面 |
| /task/:id | 任务详情页面 |
| /calendar | 日历视图页面 |
| /profile | 设置页面 |
| /statistics | 统计页面 |
4. 数据模型定义
4.1 任务数据模型
interface Task {
id: string; // 任务唯一标识
title: string; // 任务标题
description?: string; // 任务描述(可选)
dueDate: string; // 截止日期(ISO格式)
priority: 'low' | 'medium' | 'high'; // 优先级
status: 'pending' | 'completed'; // 任务状态
category?: string; // 任务分类(可选)
tags?: string[]; // 任务标签数组(可选)
completedAt?: string; // 完成时间(可选)
createdAt: string; // 创建时间
updatedAt: string; // 更新时间
}
interface TaskStatistics {
totalTasks: number; // 总任务数
completedTasks: number; // 已完成任务数
pendingTasks: number; // 待完成任务数
completionRate: number; // 完成率
dailyStats: {
date: string; // 日期
completed: number; // 当日完成任务数
total: number; // 当日总任务数
}[];
}
interface AppSettings {
theme: 'light' | 'dark'; // 主题模式
defaultPriority: 'low' | 'medium' | 'high'; // 默认优先级
enableNotifications: boolean; // 是否启用提醒
firstDayOfWeek: 0 | 1; // 周首日(0=周日,1=周一)
}
4.2 本地存储结构
interface LocalStorageData {
tasks: Task[]; // 任务列表
settings: AppSettings; // 应用设置
lastSyncTime?: string; // 最后同步时间
}
5. 核心功能实现
5.1 任务管理模块
// 任务状态管理
class TaskManager {
// 获取所有任务
getAllTasks(): Task[]
// 获取今日任务
getTodayTasks(): Task[]
// 添加新任务
addTask(task: Omit<Task, 'id' | 'createdAt' | 'updatedAt'>): Task
// 更新任务
updateTask(id: string, updates: Partial<Task>): Task
// 删除任务
deleteTask(id: string): boolean
// 切换任务状态
toggleTaskStatus(id: string): Task
// 按条件筛选任务
filterTasks(filters: {
status?: TaskStatus;
priority?: TaskPriority;
category?: string;
dateRange?: [string, string];
}): Task[]
}
5.2 日历模块
// 日历数据处理
class CalendarManager {
// 获取指定月份的任务分布
getMonthlyTasks(year: number, month: number): {
[date: string]: Task[]
}
// 获取指定日期的任务
getDailyTasks(date: string): Task[]
// 生成日历网格数据
generateCalendarGrid(year: number, month: number): CalendarCell[]
}
interface CalendarCell {
date: string; // 日期
day: number; // 日
isCurrentMonth: boolean; // 是否当前月
tasks: Task[]; // 当日任务
}
5.3 统计模块
// 统计数据计算
class StatisticsManager {
// 计算总体统计
calculateOverallStats(): TaskStatistics
// 计算指定日期范围的统计
calculateRangeStats(startDate: string, endDate: string): TaskStatistics
// 获取完成率趋势
getCompletionTrend(days: number): {
date: string;
completionRate: number;
}[]
// 获取分类统计
getCategoryStats(): {
category: string;
total: number;
completed: number;
}[]
}
6. 组件架构
6.1 页面组件结构
src/
├── components/ # 公共组件
│ ├── TaskItem.vue # 任务项组件
│ ├── TaskForm.vue # 任务表单组件
│ ├── CalendarGrid.vue # 日历网格组件
│ └── StatisticsCard.vue # 统计卡片组件
├── views/ # 页面组件
│ ├── Today.vue # 今日任务页面
│ ├── Tasks.vue # 任务列表页面
│ ├── TaskDetail.vue # 任务详情页面
│ ├── Calendar.vue # 日历视图页面
│ ├── Profile.vue # 设置页面
│ └── Statistics.vue # 统计页面
├── stores/ # 状态管理
│ ├── taskStore.ts # 任务状态管理
│ ├── settingsStore.ts # 设置状态管理
│ └── statisticsStore.ts # 统计状态管理
├── utils/ # 工具函数
│ ├── storage.ts # 本地存储工具
│ ├── date.ts # 日期处理工具
│ └── statistics.ts # 统计计算工具
└── router/ # 路由配置
└── index.ts # 路由定义
6.2 状态管理设计
// 任务状态管理
export const useTaskStore = defineStore('task', {
state: () => ({
tasks: [] as Task[],
currentFilter: 'all' as TaskFilterType,
searchKeyword: ''
}),
getters: {
filteredTasks: (state) => {
// 根据筛选条件和搜索关键词返回任务列表
},
todayTasks: (state) => {
// 返回今日任务
},
overdueTasks: (state) => {
// 返回过期任务
}
},
actions: {
async loadTasks() {
// 从本地存储加载任务
},
async saveTasks() {
// 保存任务到本地存储
},
addTask(taskData: TaskCreateData) {
// 添加新任务
},
updateTask(id: string, updates: Partial<Task>) {
// 更新任务
},
deleteTask(id: string) {
// 删除任务
}
}
})
7. 本地存储策略
7.1 数据存储格式
// LocalStorage 键名定义
const STORAGE_KEYS = {
TASKS: 'todo_tasks',
SETTINGS: 'todo_settings',
STATISTICS: 'todo_statistics'
}
// 数据存储工具类
class StorageManager {
// 保存数据
static set(key: string, data: any): void
// 获取数据
static get(key: string): any
// 删除数据
static remove(key: string): void
// 清空所有数据
static clear(): void
// 导出数据
static exportData(): string
// 导入数据
static importData(jsonString: string): boolean
}
7.2 数据备份与恢复
// 数据备份功能
class DataBackup {
// 创建备份
createBackup(): BackupData
// 恢复备份
restoreBackup(backupData: BackupData): boolean
// 验证备份数据
validateBackup(data: any): boolean
}
interface BackupData {
version: string; // 备份版本
timestamp: string; // 备份时间
tasks: Task[]; // 任务数据
settings: AppSettings; // 设置数据
statistics: TaskStatistics; // 统计数据
}
8. 性能优化
8.1 虚拟滚动
对于大量任务列表,使用虚拟滚动优化性能:
// 虚拟滚动实现
const VirtualScroll = {
// 计算可见区域
calculateVisibleRange(scrollTop: number, containerHeight: number): [number, number]
// 渲染可见项目
renderVisibleItems(items: Task[], startIndex: number, endIndex): Task[]
}
8.2 数据缓存
// 简单的内存缓存
class MemoryCache {
private cache = new Map<string, { data: any; expiry: number }>()
set(key: string, data: any, ttl: number = 60000): void
get(key: string): any
clear(): void
// 定期清理过期数据
cleanup(): void
}
20大项目拆解:从PRD到架构 文章被收录于专栏
想独立做出一个完整的项目却不知从何下手?本专栏是你的终极路线图。我们由浅入深,通过20个经典项目案例,手把手带你走过产品构思、需求撰写、功能设计、技术选型、架构搭建的全过程。从“音乐播放器”到“企业后台”,你将逐步建立对软件系统的完整认知,完成从理论到实践、从单一技能到复合能力的飞跃。
查看15道真题和解析