# WinCat **Repository Path**: zzhou7676/win-cat ## Basic Information - **Project Name**: WinCat - **Description**: 一款基于 Windows 的团队协作办事提醒程序,支持行程事件管理、日历追踪、事件提醒等功能。 - **Primary Language**: Unknown - **License**: MIT - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 1 - **Forks**: 0 - **Created**: 2026-07-14 - **Last Updated**: 2026-07-15 ## Categories & Tags **Categories**: Uncategorized **Tags**: 团队协作, 办事提醒, 桌面提醒 ## README # WinCat - 团队协作办事提醒程序 一款基于 Windows 的团队协作办事提醒程序,支持行程事件管理、日历追踪、事件提醒等功能。 **版本**: v1.0.1 **更新日期**: 2026-07-15 **Git 标签**: v1.0.1 ## ✨ 功能特性 ### 📅 事件管理 - 创建、编辑、删除事件 - 事件优先级管理(紧急/高/中/低/普通) - 事件状态追踪(待办/进行中/已完成/已取消) - 事件卡片式展示 - **事件搜索**:支持按标题、描述搜索事件 ### 📆 日历视图 - 月视图、周视图、日视图切换 - 日期范围事件查询 - 日历上显示事件优先级颜色标识 ### 🔔 提醒功能 - 事件开始前自动提醒 - Windows 桌面通知弹窗 - 每分钟定时检查即将开始的事件 ### 📎 附件管理 - **拖拽上传**:支持拖拽文件到事件详情页面上传 - **文件选择**:点击按钮选择本地文件上传 - 附件缩略图显示(自动生成图片缩略图) - 支持多种文件类型(图片、文档、PDF 等) - 附件大小和数量统计 ### 💬 评论系统 - 在事件详情页面添加评论 - 评论列表按时间顺序展示 - 显示评论者名称和时间 - 支持删除评论 ### 👥 团队协作 - 用户注册与登录 - **事件分配**:将事件分配给团队成员 - **RBAC 角色权限**:管理员/经理/普通用户三级权限 - JWT 身份认证 ### 📊 统计面板 - 事件总数、已完成、进行中、待办统计 - 事件完成率百分比显示 - 优先级分布图表 - 近期即将开始的事件列表 - 数据实时刷新 ### ⚙️ 设置页面 - **提醒设置**:自定义提醒检查间隔(1-60分钟) - **网络设置**:配置服务端连接地址 - **外观设置**:主题切换(预留扩展) - 设置持久化存储(JSON 文件) - 一键恢复默认设置 ### 📤 数据导出 - 支持将所有事件导出为 CSV 文件 - 包含事件完整信息(ID、标题、描述、优先级、状态、时间等) - UTF-8 编码,支持中文 - 自动生成日期格式文件名 ### 🧪 测试支持 - xUnit 单元测试框架 - Moq 模拟测试 - 内存数据库测试(In-Memory Database) - 覆盖核心业务逻辑(EventService、UserService) ### 🎨 自适应界面 - Material Design 风格 - 自动调整窗口大小 - 现代化 UI 设计 ## 🛠️ 技术栈 | 层级 | 技术 | 说明 | |------|------|------| | 客户端 | WPF (.NET 8) | Windows 桌面应用 | | 服务端 | ASP.NET Core gRPC | 高性能 RPC 通信 | | 通信协议 | gRPC + Protocol Buffers | 跨平台数据传输 | | 数据库 | SQLite + EF Core | 轻量级嵌入式数据库 | | 认证 | JWT | 无状态身份认证 | | 权限 | RBAC | 基于角色的访问控制 | | MVVM | CommunityToolkit.Mvvm | 响应式视图模型 | | UI 框架 | MaterialDesignInXamlToolkit | Material Design 样式 | | 日志 | Serilog | 结构化日志记录 | ## 📋 环境要求 - **操作系统**: Windows 10/11 (64位) - **开发框架**: .NET 8 SDK - **开发工具**: Visual Studio 2022 (推荐) ## 🚀 快速开始 ### 1. 克隆项目 ```bash git clone cd WinCat ``` ### 2. 打开解决方案 使用 Visual Studio 2022 打开 `WinCat.sln`。 ### 3. 恢复依赖 在 Visual Studio 中: - 右键解决方案 → **还原 NuGet 包** - 或使用命令行: ```bash dotnet restore ``` ### 4. 构建项目 在 Visual Studio 中按 `Ctrl+Shift+B` 构建解决方案。 ### 5. 运行服务端和客户端 服务端和客户端需要同时运行,有以下几种方式: #### 方式一:多启动项目(推荐) 1. 在 Visual Studio 中,右键解决方案 `WinCat` → **属性** 2. 在 **启动项目** 选项卡中,选择 **多启动项目** 3. 将 `WinCat.Server` 和 `WinCat.Client` 的操作都设置为 **启动** 4. 按 `F5` 运行,两个项目会同时启动 #### 方式二:使用命令行 打开两个独立的命令行窗口: **窗口1 - 运行服务端:** ```bash cd WinCat.Server dotnet run ``` 服务端将在 `http://0.0.0.0:50051` 启动(支持局域网访问) **窗口2 - 运行客户端:** ```bash cd WinCat.Client dotnet run ``` #### 方式三:先运行服务端,再运行客户端 1. 设置 `WinCat.Server` 为启动项目(右键项目 → **设为启动项目**) 2. 按 `Ctrl+F5`(非调试模式)或 `F5`(调试模式)运行服务端 3. **停止调试**(按 `Shift+F5`) 4. 设置 `WinCat.Client` 为启动项目 5. 按 `F5` 运行客户端 6. **重新启动服务端**(在 **解决方案资源管理器** 中右键 `WinCat.Server` → **调试** → **启动新实例**) #### 方式四:使用两个 Visual Studio 实例 1. 使用第一个 Visual Studio 实例打开解决方案,运行 `WinCat.Server` 2. 使用第二个 Visual Studio 实例打开同一解决方案,运行 `WinCat.Client` ### 6. 登录系统 客户端启动后进入登录界面,使用默认账号登录: - 用户名: `admin` - 密码: `admin123` 系统首次启动时会自动创建默认管理员账号和 SQLite 数据库文件 `WinCat.db`。 ## 🔐 默认账号 ``` 用户名: admin 密码: admin123 ``` 系统启动时会自动创建默认管理员账号。 ## � RBAC 角色权限 | 角色 | 权限 | 说明 | |------|------|------| | **admin** | 全部权限 | 用户管理、事件管理、附件管理、评论管理、提醒管理 | | **manager** | 管理权限 | 除用户管理外的所有权限 | | **user** | 普通权限 | 事件、附件、评论、提醒相关操作 | ## �� 项目结构 ``` WinCat/ ├── WinCat.sln # 解决方案文件 ├── README.md # 使用说明 ├── PROJECT_CONSTRAINTS.md # 项目约束文档 ├── .gitignore # Git 忽略规则 ├── WinCat.Shared/ # 共享项目 │ ├── Protos/ │ │ └── winchat.proto # gRPC 协议定义 │ └── WinCat.Shared.csproj ├── WinCat.Data/ # 数据访问层 │ ├── Entities/ # 实体模型 │ │ ├── User.cs │ │ ├── Event.cs │ │ ├── Reminder.cs │ │ ├── Attachment.cs │ │ ├── Comment.cs │ │ └── ... │ ├── DatabaseContext.cs # EF Core 上下文 │ └── WinCat.Data.csproj ├── WinCat.Server/ # gRPC 服务端 │ ├── Program.cs # 服务启动入口 │ ├── Services/ # gRPC 服务实现 │ │ ├── UserServiceImpl.cs │ │ ├── EventServiceImpl.cs │ │ ├── ReminderServiceImpl.cs │ │ ├── AttachmentServiceImpl.cs │ │ ├── CommentServiceImpl.cs │ │ ├── PingServiceImpl.cs │ │ ├── JwtService.cs │ │ ├── RbacInterceptor.cs # RBAC 权限拦截器 │ │ └── FileStorageService.cs # 文件存储服务 │ └── WinCat.Server.csproj ├── WinCat.Client/ # WPF 客户端 │ ├── App.xaml/.cs # 应用入口与 DI 配置 │ ├── Resources/ │ │ └── Styles.xaml # 全局样式资源 │ ├── Services/ # 业务服务 │ │ ├── GrpcChannelService.cs │ │ ├── AuthenticationService.cs │ │ ├── UserService.cs │ │ ├── EventService.cs │ │ ├── ReminderService.cs │ │ ├── AttachmentService.cs │ │ ├── CommentService.cs │ │ ├── NotificationService.cs │ │ ├── SyncService.cs # 实时同步服务 │ │ └── LocalCacheService.cs # 本地缓存服务 │ ├── ViewModels/ # 视图模型 │ │ ├── LoginViewModel.cs │ │ ├── MainViewModel.cs │ │ ├── EventViewModel.cs │ │ ├── EventDetailViewModel.cs # 事件详情视图模型 │ │ ├── CalendarViewModel.cs │ │ ├── StatisticsViewModel.cs │ │ ├── SettingsViewModel.cs │ │ ├── PercentageConverter.cs # 值转换器 │ │ ├── PriorityToColorConverter.cs # 值转换器 │ │ └── CountToVisibilityConverter.cs # 值转换器 │ └── Views/ # 视图界面 │ ├── LoginView.xaml/.cs │ ├── MainView.xaml/.cs │ ├── EventView.xaml/.cs │ ├── EventCard.xaml/.cs │ ├── EventDetailView.xaml/.cs │ ├── CalendarView.xaml/.cs │ ├── StatisticsView.xaml/.cs │ ├── SettingsView.xaml/.cs │ └── NotificationWindow.xaml/.cs └── WinCat.Tests/ # 测试项目 ├── WinCat.Tests.csproj ├── Program.cs └── Services/ # 服务测试 ├── EventServiceTests.cs └── UserServiceTests.cs ``` ## 📖 使用说明 ### 登录与注册 1. 启动客户端后进入登录界面 2. 使用默认账号 `admin/admin123` 登录 3. 或点击"注册"按钮创建新账号 ### 创建事件 1. 登录后点击左侧导航栏的"事件"图标 2. 点击"创建事件"按钮 3. 填写事件标题、描述、时间等信息 4. 设置优先级和状态 5. (可选)将事件分配给团队成员 6. 点击"保存"完成创建 ### 搜索事件 1. 在事件列表页面顶部的搜索框输入关键词 2. 搜索支持匹配事件标题和描述 3. 按"刷新"按钮执行搜索 ### 附件管理 1. 在事件详情页面找到附件区域 2. **拖拽上传**:将文件拖拽到虚线框区域即可上传 3. **点击上传**:点击"选择文件"按钮选择本地文件 4. 上传后会显示文件缩略图、文件名和大小 5. 点击删除按钮可移除附件 ### 评论功能 1. 在事件详情页面找到评论区域 2. 在输入框中输入评论内容 3. 点击"发送"按钮提交评论 4. 评论会显示在列表中,包含用户名和时间 5. 点击删除按钮可移除自己的评论 ### 事件分配 1. 在事件详情页面找到"分配给"下拉框 2. 选择要分配的团队成员 3. 点击"保存"完成分配 4. 事件卡片会显示被分配人的信息 ### 日历查看 1. 点击左侧导航栏的"日历"图标 2. 使用顶部按钮切换月/周/日视图 3. 点击左右箭头切换月份 4. 日历上的彩色圆点表示当天有事件 ### 统计面板 1. 点击顶部导航栏的"统计面板"按钮 2. 查看事件总数、已完成、进行中、待办等统计数据 3. 查看完成率百分比和优先级分布图表 4. 查看近期即将开始的事件列表 5. 点击"刷新"按钮更新统计数据 ### 设置页面 1. 点击顶部导航栏的"设置"按钮 2. **提醒设置**:调整提醒检查间隔(1-60分钟) 3. **网络设置**:修改服务端连接地址 4. **外观设置**:选择主题样式(预留扩展) 5. 点击"保存"保存设置,或点击"恢复默认"重置 6. 设置会自动保存到本地 JSON 文件 ### 数据导出 1. 在事件列表页面点击"导出数据"按钮 2. 选择保存位置和文件名 3. 系统会生成 CSV 格式文件,包含所有事件信息 4. 导出文件使用 UTF-8 编码,支持中文显示 5. 文件名格式:`WinCat事件数据_yyyyMMdd.csv` ### 运行测试 1. 在 Visual Studio 中打开解决方案 2. 设置 `WinCat.Tests` 为启动项目 3. 按 `Ctrl+R, Ctrl+A` 运行所有测试 4. 或在"测试资源管理器"中选择特定测试运行 ### 事件提醒 1. 系统会根据设置的间隔检查即将开始的事件(默认5分钟) 2. 事件开始前5分钟会弹出通知窗口 3. 点击"查看详情"可跳转到事件详情 ## 🔧 配置说明 ### 服务端配置 服务端默认监听地址:`http://0.0.0.0:50051`(HTTP/2,支持局域网访问) 如需修改端口,编辑 `WinCat.Server/Program.cs`: ```csharp builder.WebHost.ConfigureKestrel(options => { options.ListenAnyIP(50051, o => { o.Protocols = HttpProtocols.Http2; }); }); ``` ### 局域网访问 服务端配置为 `ListenAnyIP`,同一局域网内的其他设备可以通过服务端的 IP 地址访问: 1. 查看服务端电脑的 IP 地址(如 `192.168.1.100`) 2. 在客户端修改连接地址为 `http://192.168.1.100:50051` ### 客户端配置 客户端默认连接地址:`http://localhost:50051` 如需修改服务端地址,编辑 `WinCat.Client/Services/GrpcChannelService.cs`: ```csharp private readonly string _serverAddress = "http://localhost:50051"; ``` ## 📝 开发规范 请参考 `PROJECT_CONSTRAINTS.md` 文件了解项目的开发规范和架构约束。 ## � 更新日志 ### v1.0.0 (2026-07-15) **新增功能:** - ✅ 事件管理(创建、编辑、删除、搜索) - ✅ 事件优先级管理(高/中/低) - ✅ 事件状态追踪(待办/进行中/已完成/已取消) - ✅ 事件卡片式展示 - ✅ 日历视图(月/周/日切换) - ✅ 事件提醒功能(Windows 桌面通知) - ✅ 附件管理(拖拽上传、文件选择) - ✅ 评论系统(添加、删除评论) - ✅ 团队协作(用户注册、登录、事件分配) - ✅ RBAC 角色权限(管理员/经理/普通用户) - ✅ JWT 身份认证 - ✅ 统计面板(事件统计、完成率、优先级分布) - ✅ 设置页面(提醒间隔、服务端地址、主题) - ✅ 数据导出(CSV 格式) - ✅ 实时同步服务(gRPC 双向流) - ✅ 本地缓存服务(SQLite) **技术实现:** - ✅ gRPC 服务端与客户端通信 - ✅ SQLite + EF Core 数据访问 - ✅ WPF + MVVM 架构 - ✅ Material Design 样式 - ✅ xUnit 单元测试(29个测试用例) **修复内容:** - ✅ 修复 XAML 控件命名空间引用错误 - ✅ 修复 MarkupExtension 语法错误 - ✅ 修复 Button 样式 CornerRadius 属性错误 - ✅ 修复命名空间冲突问题 - ✅ 修复依赖注入配置问题 - ✅ 修复值转换器实现问题 - ✅ 修复循环依赖问题(AuthenticationService ↔ GrpcChannelService) - ✅ 修复登录界面账号输入功能失效问题:添加了 TwoWay 绑定和 PropertyChanged 更新触发器,确保用户名输入实时更新视图模型,同时添加了 Enter 键快捷键支持 ## �� 许可证 MIT License --- ## 💡 提示 - 首次运行时数据库会自动创建并初始化默认数据 - 日志文件位于各项目的 `logs/` 目录下 - 建议使用 Visual Studio 2022 进行开发和调试 - 服务端默认支持局域网访问,方便团队协作