# Hua.Todo 跨平台代办管理应用

一个基于 WebView 容器（MAUI / Avalonia）+ 嵌入式 ASP.NET Core WebServer 架构开发的跨平台代办管理应用，支持 Windows、macOS、Android、iOS 和 Linux（预览）平台。通过 HTTP API 实现前后端通信，提供轻量、高效的任务管理体验。

## 🚀 功能特点

### 核心功能
- **跨平台支持**：基于 MAUI / Avalonia + WebView 架构，支持 Windows、macOS、Android、iOS 和 Linux（预览）
- **任务管理**：支持创建、编辑、删除、完成状态切换
- **优先级管理**：支持高、中、低三种优先级设置，通过颜色直观区分
- **任务状态跟踪**：清晰标记任务完成状态，支持过滤查看（全部/进行中/已完成）
- **本地数据持久化**：使用 SQLite 数据库保存数据，支持完全离线使用
- **HTTP API 通信**：前后端通过 RESTful API 进行数据交互
- **云同步（基础）**：支持手动配置服务端地址并登录后拉取云端任务（v1.2.0 为只读展示）

## 📦 安装与使用

### 环境要求
- **后端**：
  - .NET 10 SDK
  - Visual Studio 2022 或更高版本
- **前端**：
  - Node.js 18+ 
  - npm 或 yarn

### 快速开始

#### 1. 克隆或下载项目
```bash
git clone <仓库地址>
cd Hua.Todo
```

#### 2. 启动后端 API
```bash
cd src/Hua.Todo.Host
dotnet restore
dotnet run
```
API 将在 `http://localhost:5173` 启动
开发环境（`ASPNETCORE_ENVIRONMENT=Development`）下提供 Swagger UI：`http://localhost:5173/swagger`（或 `https://localhost:7175/swagger`）

#### 3. 启动前端 Web
```bash
cd src/Hua.Todo.Web
npm install
npm run dev
```
前端将在 `http://localhost:5174` 启动，并自动代理 `/api` 请求到 `http://localhost:5173`

#### 4. 启动 MAUI 客户端（Windows 三件套开发）
- 推荐：在 Visual Studio 中将启动项目设置为 `Hua.Todo.Maui`，并确保 `Hua.Todo.Host(5173)` 与 `Hua.Todo.Web(5174)` 已启动，然后按 F5 运行。
- 也可使用脚本一键拉起 Host + Vite（并可选启动 MAUI）：

```powershell
.\start-dev.ps1
```

### Windows 交付产物（安装包）

- 运行 `publish-windows.ps1` 生成 Inno Setup 安装包：`src/Hua.Todo.Maui/Output/Hua.Todo_Setup_vX.Y.Z.exe`（版本号来自 `Hua.Todo.Maui.csproj` 的 `<Version>`；根目录 `Directory.Build.targets` 会对 `Hua.Todo.Maui` 按 TargetFramework 条件配置 `UseMonoRuntime`：仅 Android 启用，其它目标关闭；同时会复制到 `artifacts/windows/<RID>/installer/`）
- 运行 `publish.ps1` 默认会同时发布 Windows + Linux（仅发布 Windows：`publish.ps1 -Windows`）
- 安装后主程序为：`Hua.Todo.Maui.exe`（快捷方式/安装后启动均指向该文件）
- 发布产物默认使用静态资源：`src/Hua.Todo.Maui/appsettings.json` 中 `WebServer.IsUsingStatic=true`
- 前端构建产物会输出到 `src/Hua.Todo.Maui/wwwroot`，并随 Windows 发布复制到发布目录（嵌入式服务器从 `AppContext.BaseDirectory/wwwroot` 提供静态文件）

### Linux 交付产物（v1.2.0）

- `.tar.gz` 发布脚本：`publish-linux.ps1`（或使用 `publish.ps1 -Linux`）
- Flatpak 基础结构（manifest/desktop entry/AppStream）：`pack/linux/`

### 使用说明
- **添加任务**：在前端界面中输入任务内容，设置优先级，点击添加按钮
- **管理任务**：查看任务列表，支持按状态过滤（全部/进行中/已完成）
- **完成任务**：点击任务前的复选框切换完成状态
- **删除任务**：点击删除按钮移除任务

## 🔧 开发指南

### 项目结构
```
Hua.Todo/
├── pack/                          # 打包与交付产物（Linux/安装包等）
├── docs/                          # 文档目录
│   ├── manual/                    # 用户/开发者手册
│   └── project/                   # 项目进度/需求文档
├── src/                           # 源代码目录
│   ├── Hua.Todo.Core/              # 领域实体与基础接口
│   ├── Hua.Todo.Application/       # 业务逻辑与应用层实现
│   ├── Hua.Todo.Host/              # 后端 API 宿主项目 (Kestrel)
│   ├── Hua.Todo.Web/               # 前端 Web 项目 (Vue.js 3 + Vite)
│   ├── Hua.Todo.Maui/              # 跨平台客户端项目 (Windows/Android/iOS/macOS)
│   ├── Hua.Todo.Avalonia/           # 桌面客户端项目 (Windows/macOS/Linux)
│   └── Hua.Todo.slnx           # 解决方案文件
├── .gitignore                     # Git 忽略文件
└── README.md                      # 项目说明文档
```

### API 端点
- `GET /api/task` - 获取任务列表（默认：全部）
- `GET /api/task/active` - 获取未完成任务
- `GET /api/task/completed` - 获取已完成任务
- `GET /api/task/{id}` - 获取单个任务
- `POST /api/task` - 创建任务
- `PUT /api/task` - 更新任务（通过 Body 内的 id 定位）
- `PATCH /api/task/{id}/toggle` - 切换完成状态
- `DELETE /api/task/{id}` - 删除任务
- `GET /api/task/{parentTaskId}/subtasks` - 获取子任务列表

## 🤝 交流与贡献

- **QQ 交流群**：2167048911 (Hua.Todo 交流群)
- **项目地址**：[Hua.Todo](https://git.we965.cn/Tools/Hua.Todo)
- **贡献指南**：欢迎提交 Pull Request，详见 [其他信息](docs/manual/其他信息.md)

## 📄 开源协议

本项目采用 **AGPL-3.0** 许可证。详细内容请参阅 [LICENSE](LICENSE) 文件。

## 📚 更多文档

### 用户与开发者手册
- [技术栈与模块说明](docs/manual/技术栈与模块.md)
- [版本更新历史](docs/manual/版本记录.md)
- [技术设计文档](docs/manual/技术设计文档.md)
- [代码规范文档](docs/manual/代码规范文档.md)
- [其他信息 (贡献、许可证、联系方式)](docs/manual/其他信息.md)

### 项目进度与需求
- [产品需求文档](docs/project/产品需求文档.md)
- [Android 离线排查计划](docs/project/Android_NotFound_排查计划.md)
- [实现对比文档](docs/project/实现对比文档.md)

---
**Hua.Todo** - 跨平台任务管理，让效率无处不在！
