kuaifan
8c809bbff1
feat(team): 团队管理支持标记成员邮箱认证状态
...
- 成员行操作菜单新增「标记邮箱为已认证/未认证」,复用 users.email_verity
字段与 api/users/operation 接口,新增 setverity/clearverity 操作类型
- 创建用户:邮箱下方新增「标记邮箱为已认证」复选框(默认勾选),
「首次登录需改密」复选框移到初始密码下方
- 批量导入:预览列表邮箱右侧显示主题色已认证图标(错误行不显示),
支持勾选行后批量标记已/未认证;部门与认证批量行加标签对齐、
三个批量按钮样式随选中状态统一
- createByAdmin 新增 emailVerity 选项,createuser/import 透传逐行认证状态
- 新增导入预览默认认证状态单测
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-06-02 05:49:33 +00:00
kuaifan
daca384822
feat(todo): 待办设置权限放开系统管理员(任意群可设/取消他人待办)
...
- checkTodoOwnerPermission 最高优先级放行系统管理员,覆盖无群主的全员群等场景
- 同步设/取消待办、到点提醒接口报错文案与系统设置描述
- 补充管理员放行测试(user/project/全员群)
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-06-01 15:02:20 +00:00
kuaifan
6b54b7b1c5
feat(todo): 聊天待办支持提醒时间(到点引用原消息+@提及)
...
给消息待办增加可选「提醒时间」,到点由 todo-alert 机器人对原消息发起
reply、正文 @ 仍在群内的被指派成员,完全复用原生回复/提及链路(定向未读、
红点、绕过会话免打扰、App 推送);被指派人全部退群则跳过发送并标记已提醒。
设/改/取消提醒的权限沿用 todo_set_permission 开关与 checkTodoOwnerPermission。
后端:
- 迁移:web_socket_dialog_msg_todos 增加 remind_at/reminded_at 及索引,
注册为日期字段
- WebSocketDialogMsgTodo::dueReminders() 选取到点(未提醒/未完成)待办(limit 500)
- WebSocketDialogMsg::setTodoRemind() 纯数据写入(改时间重置 reminded_at),
接入 toggleTodoMsg($remindAt) 与 msg__todo 透传
- 接口 msg__todoremind 设置/修改/取消提醒(权限闸门、消息类型校验、
pushMsg 同步 todo_done)
- TodoRemindTask 到点按消息发提醒(reminded_at 防重复、迟发补发、原消息/
会话删除兜底),buildRemindText 生成 <span class="mention user"> 文本,
接入 crontab;登记 todo-alert 机器人
- msgJoinGroup 从提醒文本中提取被 @ 成员
前端:
- 设待办弹窗新增「提醒时间」(预设 + 自定义 DatePicker)
- 待办详情浮层每条待办可查看/修改/取消提醒:DatePicker on-clear「清空」
二次确认后取消,无时间时仅关闭面板不发请求
- 待办浮层窄屏(≤500px)改为 待办/完成 tab 切换,宽屏维持双列;列表为空
展示空状态占位;提醒时间用 Icon 替换 emoji
- 时间读写对齐项目任务时间的时区约定
测试:tests/Feature/TodoRemindTest(数据/选取/写入/权限决策/buildRemindText/
text mention 提取),TodoSetPermissionTest 无回归。
任务 #124 后续增强。
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-06-01 12:08:34 +00:00
kuaifan
20b5daba50
feat(manage): 团队管理支持管理员创建/批量导入员工账号(含部门、职位)
...
单个创建:邮箱/昵称/初始密码 + 可选首登改密、职位、部门(多选,选子部门自动补选上级,并加入对应部门群)。
批量导入:上传 Excel/CSV → 预览逐行校验 → 确认后导入。职位为模板第4列(选填,逐行解析校验),部门在预览表按行勾选后由底部设置部门到选中写入;导入按行返回结果(全成功关弹窗+成功提示;含失败留弹窗显示失败明细;仅 success>0 才刷新列表)。
后端:User::createByAdmin 选项数组化 + 校验助手 assertValidProfession/assertValidDepartments;importUsers 逐行 department/profession;UsersController createuser/import;UserImport/UserImportTemplate(含职位列)。
测试:tests/Feature/AdminCreateUserTest、tests/Unit/UserImportParseTest。
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-06-01 01:26:34 +00:00
kuaifan
aa2e0acaba
feat(dialog): 系统设置支持禁止其他人员设置/取消聊天待办
...
新增系统级开关 todo_set_permission(open=允许默认 / close=禁止)。
开关为禁止时,仅本人、群主/群管理员、项目负责人/项目管理员、任务负责人
可设置或取消聊天消息待办,其他人由后端拦截;默认允许,保持现有行为。
- SystemController::setting 接入开关读写(白名单 + 默认 open)
- WebSocketDialog::checkTodoOwnerPermission 角色判断(复用 isOwner 等)
- WebSocketDialogMsg::toggleTodoMsg 内权限闸门:close 且影响到他人且
非放行角色时 retError;仅影响自己始终放行;open 时行为零变化
- SystemSetting.vue「消息相关」新增「待办设置权限」开关 UI
- 国际化文案(original-api.txt / original-web.txt)
- TodoSetPermissionTest 覆盖角色判断、闸门决策及真实拦截路径(8 用例)
任务 #124。系统后台 admin 不特殊放行;「完成待办」不在本次范围。
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-05-31 15:12:46 +00:00
kuaifan
ef7293704b
refactor(manage): 收口部门负责人ID规范化逻辑并简化后端对话可见性校验
...
- 后端:任务群/项目群统一按项目级共享判断,不再区分任务可见性
- 前端:新增 department/owner/ids/save mutation 及 normalizeIntArray 工具函数
- 前端:departmentOwnerReadonlyUrls 从 action 局部变量提升至 state
- 前端:修复 TaskDetail 提示文本多余空格
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-05-21 06:06:39 +00:00
kuaifan
7f7a82b4b8
feat(manage): 部门负责人视角支持项目级可见开关并尊重任务可见性
...
新增项目级"负责人视角"开关(projects.department_owner_view,默认开启),
项目负责人可关闭,关闭后该项目及其群聊对部门负责人视角隐藏。同时将负责人
只读视角调整为尊重任务可见性:仅"全员可见"任务可被查看/进入任务群,指定
成员可见的任务仅对被指定成员开放。
- 新增 projects.department_owner_view 字段(migration)
- ProjectController::update 支持读写该开关
- UserDepartment::ownerViewContext 过滤已关闭项目,并合并为单次 JOIN 查询
- ProjectTask::findForDepartmentView / task__one / tasks 列表尊重任务可见性
- WebSocketDialog::checkDialog 任务群按可见性放行
- 前端项目设置新增开关(仅系统开启该功能时显示)
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-05-21 04:46:11 +00:00
kuaifan
0863e5529a
feat(manage): 实现部门负责人视角,支持只读查看部门成员项目与任务
...
部门负责人/部门管理员可通过系统配置开启,选择管理部门后只读查看
本部门及下级部门成员的全部项目和任务。前端自动根据 department_readonly
标记禁用编辑操作,后端统一注入负责人视角上下文控制数据访问边界。
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-05-21 00:14:36 +00:00
kuaifan
7e5b31cfb2
feat(template): 添加共享模板功能,支持项目间模板使用控制
2026-05-11 03:26:59 +00:00
kuaifan
d81b4ed273
refactor: 优化API文档注释格式;调整AbstractModel方法注释
2026-05-11 02:50:14 +00:00
kuaifan
7dc641e69e
feat(template): 添加跨项目任务模板支持,增加使用统计和搜索功能
2026-05-11 01:13:54 +00:00
kuaifan
e43588c3b2
fix(multi-owner): close permission lifecycle gaps
2026-05-09 12:31:54 +00:00
kuaifan
64649b514e
feat(multi-owner): 群/项目/部门支持主+副双负责人体系
2026-05-09 12:29:38 +00:00
kuaifan
24710289e1
feat(multi-owner): 群/项目/部门支持主+副双负责人体系
...
- 群组:新增 web_socket_dialog_users.role(1=主、2=副),主可任命/罢免副群主,副可邀请/移出普通成员
- 项目:project_users.owner 扩展为 0/1/2(成员/主/副),主独占转让和删除,副共享日常管理;任务可见性、通知、分配等下游逻辑统一用「主+副」
- 部门:新增 user_department_owners 表存储副负责人;部门群同步副群主,赋予群管理员权限
- 转移用户时副身份不替补、降级为普通成员
- 配套 migration/backfill、API、前端 UI、i18n 词条与三项 Feature 测试
- .gitignore 忽略 .playwright-mcp/
2026-05-03 00:05:31 +00:00
kuaifan
82d2ca6360
feat(ai): AI助手聊天记录服务端持久化
...
- 图片缓存不再二次压缩,用户预览与AI收到的图片质量一致
- 新增 ai_assistant_sessions 表及 AiAssistantSession 模型
- 新增会话 API:session/list、session/save、session/delete
- 前端会话存储从 IndexedDB 切换为服务端 API,图片落盘到 uploads/assistant/{YYYYMM}/{user_id}/
- saveSessionStore 添加防抖,删除会话时同步清理内存缓存
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-04-17 04:22:35 +00:00
kuaifan
6a71964592
feat(dialog): 重构合并转发功能
...
- 合并转发消息体改为存储 msg_ids + preview,不再存储完整消息列表
- 新增 mergedetail API 按需加载合并转发详情
- 详情展示从 Modal 改为 DrawerOverlay,支持完整消息渲染
- 统一不可转发消息类型过滤(tag/top/todo/notice/word-chain/vote/template)
- 合并转发标题改为前端国际化拼接
- DialogWrapper 支持 staticMsgs 静态模式用于详情渲染
- 优化多选操作栏和转发确认界面样式
2026-04-05 09:31:41 +00:00
kuaifan
9e65500748
refactor(ai): 简化AI模块逻辑
2026-04-04 23:18:21 +00:00
kuaifan
984b98e4fc
feat(task): 实现消息合并转发功能,支持批量选择和转发消息
2026-04-04 07:43:26 +08:00
kuaifan
04708cedb6
feat(task): 增加解除任务关联功能
...
支持用户在任务详情中解除误关联的任务,权限与修改任务一致(项目负责人、任务负责人、任务协助人)。
- 新增 ProjectTaskRelation::deleteRelation() 删除双向关联并推送 WebSocket
- 新增 API POST /api/project/task/related/delete 接口
- 前端关联任务列表 hover 显示删除按钮,点击确认后解除关联
Generated with [Claude Code](https://claude.ai/code )
Co-Authored-By: Claude <noreply@anthropic.com>
2026-03-09 06:38:13 +00:00
kuaifan
1ac6bad2bb
fix(task): 修复工作流切换时完成状态处理逻辑
...
- 恢复工作流切换时通过 $data['complete_at'] 设置完成状态,确保走统一处理入口
- 修复工作流切换时主任务完成状态校验被跳过的问题
- 修复工作流切换时 $updateMarking['is_update_project'] 未设置的问题
- checkAndAutoSetFlowItem 仅在用户单独提交 complete_at 时调用
Generated with [Claude Code](https://claude.ai/code )
via [Happy](https://happy.engineering )
Co-Authored-By: Claude <noreply@anthropic.com>
Co-Authored-By: Happy <yesreply@happy.engineering>
2026-01-22 07:34:09 +00:00
kuaifan
c4dd04ccb6
fix(task): 修复任务完成/取消完成时工作流状态自动切换逻辑
...
- 重构 flow_item_id 变更时的完成状态处理,使用 completeTask 方法替代直接赋值
- 新增 checkAndAutoSetFlowItem 方法,支持自动设置唯一的开始/结束状态
- 存在多个开始/结束状态时抛出带状态列表的错误(-4005/-4006),由前端引导用户选择
- 修复 complete_at 与 flow_item_id 同时存在时的重复处理问题
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-01-22 05:30:32 +00:00
kuaifan
29be29b9cf
feat(ai): 优化 AI 提示词并完善建议交互功能
...
- 优化后端提示词:描述生成、子任务拆分、负责人推荐,新增栏目信息,去掉无效的 similar_count
- 优化前端提示词:去掉硬性字数限制,即时消息改为简短输出
- 新增 :::ai-action{...}::: 语法处理,支持单独采纳/忽略 assignee 和 similar
- 采纳/忽略后更新消息状态显示
- 负责人改为追加模式,保留现有负责人
- 新增任务关联功能,similar 采纳时自动创建双向关联
- 相似度阈值从 0.7 调整为 0.5,搜索结果增加到 200
Generated with [Claude Code](https://claude.ai/code )
via [Happy](https://happy.engineering )
Co-Authored-By: Claude <noreply@anthropic.com>
Co-Authored-By: Happy <yesreply@happy.engineering>
2026-01-21 15:30:07 +00:00
kuaifan
452af4bd2f
fix(ai): address issues from second code review
...
- Add STATUS_APPLIED and STATUS_DISMISSED constants to model
- Add markApplied() and markDismissed() methods
- Update event status after apply/dismiss actions (prevent duplicate ops)
- Validate related_task_id exists and user has permission
- Filter empty or overly long subtask names before creation
Generated with [Claude Code](https://claude.ai/code )
via [Happy](https://happy.engineering )
Co-Authored-By: Claude <noreply@anthropic.com>
Co-Authored-By: Happy <yesreply@happy.engineering>
2026-01-21 15:30:06 +00:00
kuaifan
841405505d
feat(ai): add ProjectTaskAiEvent model
2026-01-21 15:30:06 +00:00
kuaifan
0cefb7eaff
feat(task): 兼容 start_at/end_at 参数,统一转换为 times
...
- 新增 ProjectTask::normalizeTimes() 方法统一处理时间参数
- 支持只传 end_at 时自动补充 start_at
- 支持只传 start_at 时保留已有 end_at
2026-01-16 08:37:32 +00:00
kuaifan
07360a8d2c
feat(manticore): 添加同步失败自动重试机制
...
- 新增 ManticoreSyncFailure 模型记录同步失败的条目
- 添加 RetryManticoreSync 命令实现失败重试逻辑
- ManticoreBase 增加 runWithRetry 包装器,连接断开时自动重连
- 统一 deleteVector 方法,减少重复代码
- 修复 quoteValue 传入非字符串的类型问题
2026-01-15 08:28:55 +00:00
kuaifan
1c27719ac4
no message
2026-01-14 20:15:48 +08:00
kuaifan
c2c27a684b
feat: 复制/周期任务时复制子任务并重置状态
...
- 复制任务时同时复制子任务,子任务状态重置为未完成
- 周期任务生成时,子任务状态重置为未完成并映射到 start 工作流
- 新增 getProjectFlowItems 方法获取项目工作流状态
- 新增 formatFlowItemName 方法格式化工作流状态名称
- 新增 copySubTasks 方法复制子任务到新父任务
- 新增 moveSubTasks 方法移动子任务,重构 moveTask 复用代码
2026-01-14 11:31:28 +00:00
kuaifan
4f2d382fd6
fix: 移除 Markdown 消息中的工具使用标签
2026-01-13 12:57:54 +00:00
kuaifan
42e4ddbd17
fix: 修复权限级联同步缺口
...
修复 Manticore 搜索索引在特定场景下 allowed_users 权限未能正确同步的问题:
Observer.updated 补充:
- ProjectUserObserver: 处理项目成员移交时的权限级联
- ProjectTaskUserObserver: 处理任务成员移交时的权限更新
批量操作绕过 Observer 修复(delete → remove):
- FileUser: deleteFileAll/deleteFileUser 方法
- ProjectTask: 可见性设置时的批量删除
- ProjectController: 子任务升级和任务复制时的批量删除
文件批量更新封装:
- File 新增 updateChildFilesUserid() 方法,统一处理子文件 userid
更新及 Manticore 同步
2026-01-13 11:55:45 +00:00
kuaifan
47c53a18fa
fix: 修复跨项目移动任务时子任务工作流状态未更新的问题
...
跨项目移动任务时,子任务的 flow_item_id 和 flow_item_name 没有被正确更新,
导致子任务在新项目中显示的工作流状态与新项目的工作流不匹配。
2026-01-13 10:50:42 +00:00
kuaifan
1ac3a4cc96
feat: 添加 user_update hook 事件并重构用户生命周期 hook
...
- 新增 user_update 事件,当用户基本信息变更时触发
- 扩展 dispatchUserHook payload 包含完整用户信息(tel、profession、birthday、address、introduction、departments)
- 将 user_onboard/user_offboard/user_update hook 触发逻辑集中到 UserObserver
- 区分 profile_update(用户自己修改)和 admin_update(管理员修改)事件类型
- 修复 User::reg() 中 Manticore 索引同步遗漏问题
- 排除机器人账号的 hook 触发
2026-01-08 11:31:16 +00:00
kuaifan
4e99e398d6
feat: 添加动态时间提示和自动校正功能
...
- 在"最早可提前"下方动态显示最早可签到时间
- 在"最晚可延后"下方动态显示最晚可签到时间(跨天显示"次日"前缀)
- 输入值变化时自动校正到临界值,防止时间重叠
- 调整表单布局支持换行显示提示信息
2026-01-07 04:11:32 +00:00
kuaifan
6bdefc4f03
feat: 支持跨天打卡和时间重叠验证
...
- 允许签到"最晚可延后"时间超过 23:59:59,支持员工凌晨下班打卡
- 凌晨打卡记录自动归属前一天
- 前后端新增提前/延后时间重叠验证,防止产生歧义时间窗口
- 优化导出逻辑以正确处理跨天打卡记录
- 打卡消息提示归属日期信息
2026-01-06 12:31:41 +00:00
kuaifan
ec0db3a76c
refactor: 提取搜索逻辑到 Model Scope
...
- User: 新增 scopeSearchByKeyword
- Project: 新增 scopeSearchByKeyword
- ProjectTask: 新增 scopeSearchByKeyword
- File: 新增 scopeSearchByKeyword, scopeSharedToUser
- WebSocketDialogMsg: 新增 scopeSearchByKeyword, scopeAccessibleByUser
- SearchController: 使用新的 Model Scope 简化 MySQL 回退逻辑
2026-01-03 07:58:11 +00:00
kuaifan
a8d4f261a4
no message
2025-12-30 05:49:18 +00:00
kuaifan
a336fd4a1a
feat: omit content from report list APIs
2025-12-30 01:58:03 +00:00
kuaifan
55303689ea
feat: support configurable default priority
2025-12-26 02:42:47 +00:00
kuaifan
3b3ffd494f
feat: 规范以斜杠开头的命令
2025-12-24 06:10:39 +00:00
kuaifan
0b7a3046fe
fix: align parent task subtask progress with task detail (include archived, exclude deleted)
2025-12-19 21:36:00 +08:00
kuaifan
d77406951d
feat: 更新微应用菜单配置,统一使用类型字段替代URL类型字段
2025-12-18 02:44:37 +00:00
kuaifan
8c4b9e8d12
feat: 优化项目/报告控制器及任务模型
2025-12-11 02:06:13 +00:00
kuaifan
ac9e1e5e67
feat: call appstore user lifecycle hooks from main app
2025-12-09 10:30:23 +00:00
kuaifan
c668340661
feat: 优化消息推送逻辑
2025-12-05 02:10:37 +00:00
kuaifan
f0e844c308
feat: 添加个人任务上限设置,限制负责人或协助人的未完成任务数量
2025-11-28 11:05:08 +00:00
kuaifan
4983fe8feb
feat: 添加自定义微应用菜单功能,支持管理员配置和保存菜单项
2025-11-19 07:54:47 +00:00
kuaifan
8af6887daa
feat: 优化WebSocketDialogMsg和BotReceiveMsgTask中的消息格式,统一中文标点,增强可读性
2025-11-11 13:05:04 +00:00
kuaifan
cf78766a37
feat: 移除未使用的消息处理函数和Markdown插件任务创建功能,优化代码结构
2025-11-11 05:42:02 +00:00
kuaifan
944824b552
feat: 移除未使用的函数和代码,优化BotReceiveMsgTask和WebSocketDialogMsg的消息处理逻辑
2025-11-11 05:31:59 +00:00
kuaifan
477bb1ac8f
feat: MCP增加文件管理功能,支持获取文件访问URL、文件列表和文件搜索
2025-11-11 05:23:00 +00:00