feat:基础功能实现

feat: 重构 TodoList 架构,新增动态 API 与 MAUI 内嵌 Web 服务
feat:优化交互逻辑,优化发布流程
This commit is contained in:
ShaoHua
2026-04-05 00:53:18 +08:00
parent ed3d90cd7a
commit ceb77e624e
147 changed files with 24036 additions and 206 deletions
+344
View File
@@ -0,0 +1,344 @@
# TodoList 项目结构说明
## 项目概述
TodoList 是一个跨平台的待办事项管理应用,采用多种技术栈实现不同平台的客户端。项目包含 WPF 桌面应用、MAUI 跨平台应用、Web 前端以及后端 API 服务。
## 项目结构
```
TodoList/
├── docs/ # 项目文档目录
│ ├── 产品需求文档.md # 产品需求说明
│ ├── 产品需求文档-1.1.0.md # v1.1.0版本需求
│ ├── 技术设计文档.md # 技术架构设计
│ ├── 代码规范文档.md # 代码编写规范
│ └── 实现对比文档.md # 不同实现方案对比
├── src/ # 源代码目录
│ ├── TodoList.Api/ # 后端 API 项目 (ASP.NET Core)
│ │ ├── Controllers/ # API 控制器
│ │ │ └── TasksController.cs # 任务相关API端点
│ │ ├── Data/ # 数据库相关
│ │ │ ├── TodoDbContext.cs # EF Core 数据库上下文
│ │ │ └── Migrations/ # 数据库迁移文件
│ │ │ ├── 20260313044926_InitialCreate.cs
│ │ │ ├── 20260313044926_InitialCreate.Designer.cs
│ │ │ ├── 20260313092658_AddParentTaskId.cs
│ │ │ ├── 20260313092658_AddParentTaskId.Designer.cs
│ │ │ └── TodoDbContextModelSnapshot.cs
│ │ ├── Models/ # 数据模型
│ │ │ └── TaskModels.cs # 任务数据传输对象
│ │ ├── Repositories/ # 数据访问层
│ │ │ └── TaskRepository.cs # 任务仓储实现
│ │ ├── Services/ # 业务服务层
│ │ │ └── TaskService.cs # 任务业务逻辑
│ │ ├── Properties/ # 项目属性
│ │ │ └── launchSettings.json # 启动配置
│ │ ├── Program.cs # 应用程序入口
│ │ ├── appsettings.json # 应用配置
│ │ ├── appsettings.Development.json # 开发环境配置
│ │ ├── TodoList.Api.csproj # 项目文件
│ │ ├── TodoList.Api.http # HTTP 测试文件
│ │ └── todolist.db # SQLite 数据库文件
│ │
│ ├── TodoList.Core/ # 核心业务逻辑层
│ │ ├── Entities/ # 领域实体
│ │ │ ├── Task.cs # 任务实体
│ │ │ └── TaskPriority.cs # 任务优先级枚举
│ │ ├── Interfaces/ # 接口定义
│ │ │ ├── ITaskRepository.cs # 任务仓储接口
│ │ │ └── ITaskService.cs # 任务服务接口
│ │ ├── Class1.cs # 临时类文件
│ │ └── TodoList.Core.csproj # 项目文件
│ │
│ ├── TodoList.Maui/ # MAUI 跨平台应用
│ │ ├── Models/ # 数据模型
│ │ │ ├── HotKeyConfig.cs # 热键配置模型
│ │ │ └── QuickEntryData.cs # 快速输入数据模型
│ │ ├── Services/ # 服务层
│ │ │ ├── Platforms/ # 平台特定服务
│ │ │ │ ├── WindowsGlobalHotKeyService.cs # Windows热键服务
│ │ │ │ ├── MacGlobalHotKeyService.cs # macOS热键服务
│ │ │ │ └── MobileGlobalHotKeyService.cs # 移动端热键服务
│ │ │ ├── GlobalHotKeyServiceFactory.cs # 热键服务工厂
│ │ │ ├── HotKeySettingsService.cs # 热键设置服务
│ │ │ └── IGlobalHotKeyService.cs # 热键服务接口
│ │ ├── Views/ # 视图层
│ │ │ ├── MainPage.xaml # 主页面
│ │ │ ├── MainPage.xaml.cs
│ │ │ ├── QuickEntryPage.xaml # 快速输入页面
│ │ │ ├── QuickEntryPage.xaml.cs
│ │ │ ├── HotKeySettingsPage.xaml # 热键设置页面
│ │ │ └── HotKeySettingsPage.xaml.cs
│ │ ├── Platforms/ # 平台特定代码
│ │ │ ├── Windows/ # Windows 平台
│ │ │ │ ├── App.xaml
│ │ │ │ ├── App.xaml.cs
│ │ │ │ ├── Package.appxmanifest
│ │ │ │ └── app.manifest
│ │ │ ├── MacCatalyst/ # macOS 平台
│ │ │ │ ├── AppDelegate.cs
│ │ │ │ ├── Program.cs
│ │ │ │ ├── Info.plist
│ │ │ │ └── Entitlements.plist
│ │ │ ├── iOS/ # iOS 平台
│ │ │ │ ├── AppDelegate.cs
│ │ │ │ ├── Program.cs
│ │ │ │ ├── Info.plist
│ │ │ │ └── Resources/
│ │ │ │ └── PrivacyInfo.xcprivacy
│ │ │ └── Android/ # Android 平台
│ │ │ ├── MainActivity.cs
│ │ │ ├── MainApplication.cs
│ │ │ ├── AndroidManifest.xml
│ │ │ └── Resources/
│ │ │ └── values/
│ │ │ └── colors.xml
│ │ ├── Resources/ # 资源文件
│ │ │ ├── AppIcon/ # 应用图标
│ │ │ │ ├── appicon.svg
│ │ │ │ └── appiconfg.svg
│ │ │ ├── Fonts/ # 字体文件
│ │ │ │ ├── OpenSans-Regular.ttf
│ │ │ │ └── OpenSans-Semibold.ttf
│ │ │ ├── Images/ # 图片资源
│ │ │ │ └── dotnet_bot.png
│ │ │ ├── Splash/ # 启动画面
│ │ │ │ └── splash.svg
│ │ │ ├── Raw/ # 原始资源
│ │ │ │ └── AboutAssets.txt
│ │ │ └── Styles/ # 样式资源
│ │ │ ├── Colors.xaml
│ │ │ └── Styles.xaml
│ │ ├── Properties/ # 项目属性
│ │ │ └── launchSettings.json
│ │ ├── App.xaml # 应用程序
│ │ ├── App.xaml.cs
│ │ ├── AppShell.xaml # 应用外壳
│ │ ├── AppShell.xaml.cs
│ │ ├── MainPage.xaml # 主页面(备用)
│ │ ├── MainPage.xaml.cs
│ │ ├── MauiProgram.cs # MAUI 程序入口
│ │ ├── TodoList.Maui.csproj # 项目文件
│ │ ├── IMPLEMENTATION_SUMMARY.md # 实现总结
│ │ └── README.md # MAUI 项目说明
│ │
│ └── TodoList.Web/ # Web 前端项目 (Vue.js)
│ ├── public/ # 静态资源
│ │ ├── favicon.svg
│ │ └── icons.svg
│ ├── src/ # 源代码
│ │ ├── api/ # API 调用
│ │ │ ├── client.ts # HTTP 客户端配置
│ │ │ └── tasks.ts # 任务相关 API
│ │ ├── assets/ # 资源文件
│ │ │ ├── hero.png
│ │ │ ├── vite.svg
│ │ │ └── vue.svg
│ │ ├── components/ # Vue 组件
│ │ │ ├── HelloWorld.vue
│ │ │ ├── TaskList.vue # 任务列表组件
│ │ │ └── TaskItem.vue # 任务项组件
│ │ ├── services/ # 服务层
│ │ │ └── localStorageService.ts # 本地存储服务
│ │ ├── types/ # TypeScript 类型定义
│ │ │ └── task.ts # 任务类型
│ │ ├── App.vue # 根组件
│ │ ├── main.ts # 应用入口
│ │ └── style.css # 全局样式
│ ├── .vscode/ # VS Code 配置
│ │ └── extensions.json
│ ├── .gitignore
│ ├── index.html # HTML 入口
│ ├── package.json # Node.js 依赖配置
│ ├── tsconfig.json # TypeScript 配置
│ ├── tsconfig.app.json
│ ├── tsconfig.node.json
│ ├── vite.config.ts # Vite 构建配置
│ └── README.md # Web 项目说明
├── TodoList/ # WPF 桌面应用项目
│ ├── Converters/ # 值转换器
│ │ └── EnumDescriptionConverter.cs
│ ├── Models/ # 数据模型
│ │ └── TodoItem.cs
│ ├── Services/ # 服务层
│ │ ├── IDataService.cs # 数据服务接口
│ │ ├── FileDataService.cs # 文件数据服务
│ │ ├── SqliteDataService.cs # SQLite 数据服务
│ │ ├── GlobalShortcutService.cs # 全局快捷键服务
│ │ └── SettingsService.cs # 设置服务
│ ├── ViewModels/ # 视图模型
│ │ ├── MainViewModel.cs
│ │ └── QuickEntryViewModel.cs
│ ├── Views/ # 视图
│ │ ├── MainWindow.xaml # 主窗口
│ │ ├── MainWindow.xaml.cs
│ │ ├── QuickEntryWindow.xaml # 快速输入窗口
│ │ └── QuickEntryWindow.xaml.cs
│ ├── App.xaml # 应用程序
│ ├── App.xaml.cs
│ ├── AssemblyInfo.cs # 程序集信息
│ ├── BuildSetup.ps1 # 构建安装包脚本
│ ├── setup.iss # Inno Setup 安装脚本
│ ├── icon.ico # 应用图标
│ └── TodoList.csproj # 项目文件
├── TodoList.slnx # Visual Studio 解决方案文件
├── .gitattributes # Git 属性配置
├── .gitignore # Git 忽略文件配置
├── README.md # 项目说明文档
├── SCRIPTS_README.md # 脚本使用说明
├── start-service.ps1 # 启动服务脚本
├── stop-service.ps1 # 停止服务脚本
└── restart-service.ps1 # 重启服务脚本
```
## 技术栈说明
### TodoList (WPF 桌面应用)
- **框架**: WPF (Windows Presentation Foundation)
- **语言**: C# (.NET 8.0)
- **架构模式**: MVVM (Model-View-ViewModel)
- **数据存储**: SQLite (sqlite-net-pcl)
- **MVVM 框架**: CommunityToolkit.Mvvm
- **功能**: Windows 桌面应用,支持全局快捷键、快速输入等功能
### TodoList.Api (后端 API)
- **框架**: ASP.NET Core Web API
- **语言**: C# (.NET 10.0)
- **ORM**: Entity Framework Core
- **数据库**: SQLite
- **API 文档**: Swashbuckle (Swagger)
- **功能**: 提供 RESTful API,处理业务逻辑和数据持久化
### TodoList.Core (核心业务逻辑)
- **语言**: C# (.NET 10.0)
- **架构**: 领域驱动设计 (DDD)
- **功能**: 定义核心实体、接口和业务规则
### TodoList.Maui (跨平台应用)
- **框架**: .NET MAUI
- **语言**: C# (.NET 10.0)
- **支持平台**: Windows, macOS, iOS, Android
- **功能**: 跨平台原生应用,支持平台特定的热键功能
### TodoList.Web (Web 前端)
- **框架**: Vue.js 3
- **语言**: TypeScript
- **构建工具**: Vite
- **HTTP 客户端**: Axios
- **状态管理**: Pinia
- **功能**: 响应式 Web 界面,通过 HTTP API 与后端通信
## 项目依赖关系
```
TodoList.Web (前端)
↓ HTTP API
TodoList.Api (后端)
↓ 项目引用
TodoList.Core (核心层)
↓ EF Core
SQLite 数据库
```
## 开发环境要求
### 后端开发
- .NET 10 SDK
- Visual Studio 2022 或更高版本
- SQLite
### 前端开发
- Node.js 18+
- npm 或 yarn
### MAUI 开发
- Visual Studio 2022 17.8 或更高版本
- .NET MAUI 工作负载
- 各平台开发工具(Xcode, Android Studio 等)
### WPF 开发
- .NET 8 SDK
- Visual Studio 2022 或更高版本
- Windows 操作系统
## 启动方式
### 启动后端 API
```bash
cd src/TodoList.Api
dotnet restore
dotnet ef database update
dotnet run
```
### 启动 Web 前端
```bash
cd src/TodoList.Web
npm install
npm run dev
```
### 运行 WPF 应用
```bash
cd TodoList
dotnet run
```
### 运行 MAUI 应用
```bash
cd src/TodoList.Maui
dotnet build
```
## API 端点
- `GET /api/tasks` - 获取任务列表
- `GET /api/tasks/{id}` - 获取单个任务
- `POST /api/tasks` - 创建任务
- `PUT /api/tasks/{id}` - 更新任务
- `PATCH /api/tasks/{id}/complete` - 切换完成状态
- `DELETE /api/tasks/{id}` - 删除任务
## 数据库结构
### Tasks 表
- Id (主键)
- Title (标题)
- Description (描述)
- Priority (优先级: High, Medium, Low)
- IsCompleted (完成状态)
- DueDate (截止日期)
- CreatedAt (创建时间)
- UpdatedAt (更新时间)
- ParentTaskId (父任务ID,支持子任务)
## 脚本说明
- `start-service.ps1` - 启动后端服务
- `stop-service.ps1` - 停止后端服务
- `restart-service.ps1` - 重启后端服务
- `TodoList/BuildSetup.ps1` - 构建 WPF 安装包
## 版本历史
- **v1.0.0**: 初始 WPF 版本
- **v1.1.0**: 重构为 MAUI + WebView 架构,实现跨平台支持
## 注意事项
1. WPF 项目仅支持 Windows 平台
2. MAUI 项目支持多平台,但需要相应的开发环境
3. Web 项目需要先启动后端 API 服务
4. SQLite 数据库文件位于 `src/TodoList.Api/todolist.db`
5. 首次运行需要执行数据库迁移命令
## 扩展阅读
- [产品需求文档](./docs/产品需求文档.md)
- [技术设计文档](./docs/技术设计文档.md)
- [代码规范文档](./docs/代码规范文档.md)
- [实现对比文档](./docs/实现对比文档.md)