Commit Graph

46 Commits

Author SHA1 Message Date
gitadmin 5430f51885 fix: 修复 IMAP 邮件内容获取问题
- 使用 body: '.' 获取邮件完整内容,替代 source(某些 IMAP 服务器不支持)
- 添加详细的 fetch 结果日志,记录返回的字段名
- 改进邮件获取失败时的日志输出
2026-07-10 13:33:02 +08:00
gitadmin c11e9fbc64 feat: 邮件扫描导入功能增强
- 新增 scan-emails/import API 端点,支持手动导入跳过的邮件为工单
- 前端添加'导入跳过的邮件为工单'按钮,扫描完成后可选择导入
- 添加扫描详情日志,记录无内容邮件的跳过原因
- 修复 scan_history 表 details_json 为空的问题
2026-07-10 13:22:55 +08:00
gitadmin 75ca749db7 fix: 根本修复 getClientIP tree-shaking 问题
- audit.ts: 直接定义 getClientIP 函数,而非从 shared 库 re-export
- 原因: Next.js standalone 构建的 tree-shaking 会丢弃 re-export 的函数
- 影响: 修复所有使用 getClientIP 的 API 路由(scan-emails、scan-status、auth/login)
2026-07-10 13:09:47 +08:00
gitadmin 73b442717e fix: 修复 getClientIP 导入导致的树摇问题
- scan-emails/route.ts: 直接定义 getClientIP 函数,避免从 @/lib/audit 导入
- scan-status/route.ts: 同上
- 原因: Next.js tree-shaking 在打包时未将 getClientIP 包含在模块导出中
- scan-history API: 新增扫描历史查询接口
- db-schema: 新增 scan_history 表
2026-07-10 12:59:21 +08:00
gitadmin b6f0393450 feat: 邮件扫描功能增强与 Bug 修复
主要更新:
- 新增邮箱工单检测模块,支持扫描邮箱并自动导入工单
- 新增扫描取消机制,支持用户中途取消扫描任务
- 新增扫描历史持久化,保存到 scan_history 表
- 修复 IMAP 连接管理问题,连接失败时正确重置 client
- 修复邮件搜索范围,从今天改为最近 7 天

Bug 修复:
- B-1: 修复 getClientIP 传入 null 问题,正确获取客户端 IP
- B-2: 修复 toISOString() 违反规范,改用 formatBeijingTime
- B-3: 修复 refreshStatus/refreshErrors 缺少 .catch() 处理
- E-1: 添加 detailsTruncated 字段,超过 500 条时显示截断警告
- E-2: 添加 5 分钟整体超时控制,避免扫描长时间挂起
- E-3: 优化 refreshErrors 路径依赖,使用安全的属性合并
- E-4: scanning 状态从 scanState.status 派生,保持状态一致
- 修复超时状态被覆盖为 completed 的 Bug

新增文件:
- src/lib/monitor/scan-state.ts: 共享扫描状态管理
- src/app/api/monitor/scan-emails/route.ts: 邮件扫描 API
- src/app/api/monitor/scan-status/route.ts: 扫描状态查询 API
- src/app/api/monitor/scan-history/route.ts: 扫描历史查询 API
2026-07-10 11:49:16 +08:00
gitadmin d64c950894 fix: middleware publicPaths /api/internal + Dockerfile sqlite3 2026-07-08 10:35:59 +08:00
gitadmin c179e47c6b fix: logout redirect uses OIDC_REDIRECT_URI instead of request headers (open redirect fix) 2026-07-07 17:24:49 +08:00
gitadmin c50c06f095 fix: logout 302 redirect instead of JSON, use x-forwarded-host 2026-07-07 17:18:19 +08:00
gitadmin 248ccaeb66 chore: .env.example 统一为本地开发配置(JWT_SECRET/AUTHELIA_URL/COOKIE_DOMAIN) 2026-07-03 14:01:38 +08:00
gitadmin 36aee38160 feat: SSO切换账号按钮 + 生产配置模板 2026-07-03 12:12:11 +08:00
gitadmin 6bba264927 fix: 移除 middleware adminPaths,解决非 admin 角色 Forbidden 问题
- 移除 middleware 中的 adminPaths: ['/settings'] 配置
- settings 页面权限由各 API 端点自行检查,middleware 仅负责认证
- 修复 viewer/operator 等非 admin 角色访问 /settings/* 返回 403 的问题
- 侧边栏 hasAnyAdminPerm 增加 audit-logs 和 monitor 权限检查
2026-07-02 18:02:12 +08:00
gitadmin f507adfaa1 feat: 权限细化 tickets:edit/tickets:delete + 多 Webhook 推送组
- tickets:write 拆分为 tickets:edit(处理工单)和 tickets:delete(删除工单)
- 内置 operator 角色默认同时拥有两个权限
- 迁移脚本自动将已有角色的 tickets:write 替换为两个新权限
- 微信推送支持多个 webhook 推送组,每个可独立启用/禁用
- 每个推送组包含独立的运行参数(检查间隔、静默期)
- 旧格式 wechat.webhook_url 自动迁移为新数组格式
- worker 推送逻辑适配多 webhook(遍历所有启用的推送组)
2026-07-02 17:39:36 +08:00
gitadmin 38129bdb67 docs: 更新 CHANGELOG — 企业微信消息格式对齐 + 时区修复 2026-07-02 17:12:10 +08:00
gitadmin 02918fa907 feat: 企业微信推送消息格式全面对齐 zabbix-01 脚本
- P1-P5: 结单消息按 fault_type 分支,补齐机架位置/故障类型/故障时间/月度统计
- P6: OEM 维修档位标题补全「基于月度内累计故障时长计算」
- P7: OEM 诊断字段顺序调整(到期时间在故障信息之前)
- P8: 每小时提醒显示「X小时Y分」
- P9/P10: 静默期积压消息格式对齐(动态剩余时间、机架位置、30min 区分)
- 修复: isInSilentPeriod/isTimeToFlush 时区问题(UTC+8 偏移)
- 修复: 先推送后更新 DB,防止推送失败通知丢失
- 修复: faultDetail 截断 500 字符防止超限
- 修复: tierPenaltyMap 提取为类级常量
2026-07-02 16:45:43 +08:00
gitadmin d39d2e65b3 refactor: P1 共享库迁移
- audit.ts: 引用 shared/lib/audit(包装器保持原接口)
- jwt-shared.ts: 引用 shared/lib/auth/jwt(包装器保持 signSharedJwt/verifySharedJwt)
- wechat-pusher.ts: pushText 改用 shared WeChatPusher,保留 formatAvailabilityMessage
- middleware.ts: 使用 shared/lib/auth/middleware 工厂
- tsconfig: 添加 @shared/* 路径
- 添加 shared symlink

独立审查通过
2026-07-01 18:42:49 +08:00
gitadmin 091ef426db feat: SSO 统一认证登录
- 集成 Authelia OIDC,支持统一认证登录
- 添加 OIDC 登录页面和回调处理
- 更新 docker-compose.yml 统一环境变量管理
- 更新 CHANGELOG.md 和 CLAUDE.md
2026-06-30 17:09:24 +08:00
gitadmin 565f891e1e fix: logout 端点添加 domain 参数清除跨域 cookie
- logout 端点清除 cookie 时添加 domain 参数
- 修复 .tlyq.ai 域的 tlyq_session cookie 未正确清除的问题
2026-06-29 20:05:19 +08:00
gitadmin d8c65d5121 feat: SSO 统一认证 + ThemeProvider 三模式 + Card 边框统一
- 安装 openid-client v5,新增 OIDC 登录/callback 端点
- ThemeProvider 支持 light/dark/auto 三种模式
- TopBar 主题切换改为下拉菜单
- Card 暗色边框统一为 slate-800
- middleware 登录页已登录自动跳转 + /api/auth/login 放行
- 登录页添加 SSO 按钮 + LDAP 回退
2026-06-29 18:39:46 +08:00
gitadmin 24581166bc fix(monitor): OEM维修超时提醒消息格式优化
- 超时提醒格式:第X档已超时,达到第Y档扣XX%
- 提前1小时提醒格式:距离第X档(扣XX%)还剩1小时
- 第四档超时提示:已触发全额扣费(100%)
- 第四档还剩1小时提示:距离全额扣费(100%)还剩1小时
- 静默期积压消息:动态计算剩余时间并显示扣费比例
- 消息内容与空行分隔
2026-06-25 11:49:10 +08:00
gitadmin 3fd09dec25 fix(monitor): OEM维修第五档提醒消息区分扣费比例
- 第四档: 图标 + '距离第四档(扣50%)超时还剩1小时'
- 第五档:🚨 图标 + '距离第五档(扣100%)超时还剩1小时'
- 第五档额外提示:'即将进入全额扣费,请立即处理'
2026-06-25 11:12:45 +08:00
gitadmin b7b2b34a1f feat: 审计日志 + 邮件监控 + 修复删除工单 bug 2026-06-24 15:43:18 +08:00
gitadmin 1c1555e417 feat: 添加审计日志功能
- 新增 audit.ts 核心函数(writeAuditLog、diffObjects、getClientIP)
- 新增审计日志 API(分页查询、CSV 导出)
- 新增审计日志前端页面
- 更新 Sidebar 添加审计日志菜单项
- 添加审计权限配置
- 在所有写操作 API 中集成审计日志
- 更新 CLAUDE.md 添加审计日志开发规范
2026-06-23 10:59:24 +08:00
gitadmin 5f0c312e9c feat: 用户管理 UI 全面统一 + LDAP 邮箱同步 + 角色/Key 页面对齐
- 新增用户详情页,支持编辑(状态切换/密码确认)、键盘导航
- Modal/Button 拆分为独立文件,样式与 assets-ai 对齐
- LDAP 邮箱三路径同步:密码登录、SSO 免登录、批量同步接口
- 角色权限页:Badge 按角色分色、增加保存 loading、checkbox dark 样式
- API Key 页:成功提示颜色对齐、取消按钮 ghost 统一
- 全站字体/颜色一致:text-sm、dark mode 补全
- 删除确认统一改用 Modal 替换原生 confirm
2026-05-18 16:57:30 +08:00
gitadmin 703ed1a8d4 docs: 添加 Git Tag 日期版本号规范 2026-05-18 14:58:38 +08:00
gitadmin b40802efbf fix: SSO 免登录和本地 JWT 路径现在也会更新 last_login_at
此前仅密码登录路径更新 last_login_at,导致通过 SSO 共享 JWT
或本地 JWT 访问系统的用户始终显示"从未登录"。
2026-05-18 14:49:16 +08:00
gitadmin 726c8bee27 docs: 记录 middleware Edge Runtime 修复与连通性检查重试优化 2026-05-15 15:21:45 +08:00
gitadmin 651971e0fe fix: middleware 移除 better-sqlite3 依赖,修复 Edge Runtime 报错
middleware 运行在 Edge Runtime,不支持 Node.js 原生模块。
API Key 验证回归 ALLOWED_API_KEYS 环境变量检查,DB 验证由 route handler 负责。
2026-05-15 09:26:20 +08:00
gitadmin dce8b0b6cc docs: 记录 API Key 修复与中间件安全加固(v2026.05.14)
- [修复] IP 查询失败:assets-ai api_keys 表注册缺失的 key
- [优化] 中间件 API Key 验证统一为 ALLOWED_API_KEYS → DB 两级
- [新增] deploy-ai.sh 部署后自动验证 issue→assets 连通性
2026-05-15 09:13:46 +08:00
gitadmin 2697aaaa75 fix: 内置角色可编辑不可删除,修复种子迁移覆盖用户权限
- admin/operator/viewer 均为内置不可删除,但可编辑
- 移除 initDatabase() 中的权限合并迁移逻辑,避免每次启动覆盖用户自定义权限
- admin 在 API 层禁止删除
2026-05-14 17:29:55 +08:00
gitadmin 2d74f0a05b feat: 前端按钮基于 permissions 显隐 — 导出/新建报告/下载/删除
三处修改:
- TicketList 导出按钮基于 tickets:export 权限显隐
- 报告列表页新建/批量下载/批量删除按钮及各状态行内操作基于 reports:create/reports:download 显隐
- 报告详情页生成文档/下载报告/重新生成按钮基于 permissions 显隐
2026-05-14 17:05:14 +08:00
gitadmin 152241e666 feat: 前端侧边栏和全部工单页面改为基于permissions数组控制显隐
- Sidebar: isAdmin boolean → permissions string[],所有导航项按 perm 属性过滤
- 侧边栏 navItems 新增 perm 字段,canSee() 检查 tickets:read/tickets:create/tickets:import/reports:read
- "全部工单"仅 permissions.includes('*') 可见,"系统设置"区由 hasAnyAdminPerm() 控制
- 设置子项按各自 perm 过滤(users:read/roles:read/api-keys:read)
- /tickets/all 页面权限检查同步改为 permissions.includes('*')
2026-05-14 17:01:22 +08:00
gitadmin 48f8084b9b feat: 报告API三层权限检查 — read/download/create 全覆盖
- GET /api/reports — 新增 reports:read 权限检查
- POST /api/reports — 修复为 reports:create(原错误使用 reports:read)
- DELETE /api/reports — 新增 reports:create 权限检查
- GET /api/reports/[id] — 新增 reports:read 权限检查
- DELETE /api/reports/[id] — 新增 reports:create 权限检查
- POST /api/reports/[id]/generate — 从 reports:write 改为 reports:create
- GET /api/reports/[id]/download — 新增 reports:download 权限检查
- POST /api/reports/download — 新增 reports:download 权限检查

5 个文件,共 8 个改动点
2026-05-14 16:57:29 +08:00
gitadmin 200fd7d3a1 feat: 工单API细粒度权限 — create/import/export 独立检查
- POST /api/tickets 手动建单改用 tickets:create
- POST /api/tickets/import 导入改用 tickets:import
- GET /api/tickets/export 新增 tickets:export 权限检查(此前仅有登录检查,是一个安全漏洞)
- PUT/DELETE /api/tickets/[id] 和 PUT /api/tickets/batch 保持 tickets:write 不变
2026-05-14 16:54:34 +08:00
gitadmin a52241f4db feat: 角色管理UI扩展权限项至14个,种子数据自动迁移operator/viewer权限 2026-05-14 16:51:11 +08:00
gitadmin 1ae84294bb feat: UserPayload 增加 permissions 字段,getCurrentUser 补全权限列表
- UserPayload 新增 permissions: string[] 字段
- getCurrentUser() 三个返回路径(共享JWT查DB/SSO自动创建/本地JWT)
  均通过 getUserPermissions() 从 roles 表实时查询补全权限
- 新增 getUserPermissions(role) 工具函数,admin 返回 ['*'],
  其他角色从 roles 表解析 permissions JSON
- login() 函数和 login API 路由同步补全 permissions
- verifyToken() 返回对象补全 permissions 空值防止类型错误
2026-05-14 16:47:35 +08:00
gitadmin 4b6bee1868 feat: SSO 集成 — 共享 JWT + LDAP 认证 + 跨站点用户管理 API
- 新增 src/lib/jwt-shared.ts:共享 JWT 签发/验证(与 OA 共用密钥)
- 新增 src/lib/ldap.ts:LDAP 认证与用户存在性检查
- 新增 src/app/api/internal/roles/route.ts:内部 API 供 OA 查询角色
- 重构 auth.ts:SSO 共享 JWT 验证
- 重构 middleware.ts:SSO 优先 + 本地认证回退
- 更新 docker-compose.yml:挂载 docker.sock 用于运行时 LLDAP 密码获取
- 更新 next.config.ts:serverExternalPackages 添加 ldapts
- 更新 Dockerfile:生产依赖安装优化
2026-05-14 16:37:56 +08:00
gitadmin 01a717e8b2 feat: SSO双路径认证 + 端口修正 5176→6176
- 中间件支持 X-Remote-User (SSO) + JWT 双路径
- /api/auth/me 签发 JWT,支持 SSO header 回退
- 退出登录同时清除 SSO cookie
- 侧边栏系统设置仅 admin 可见
- package.json 端口 5176→6176
- 跨站点引用端口全部修正
2026-05-09 17:14:53 +08:00
gitadmin f578198cf9 feat: 添加 .dockerignore 减小 Docker 构建上下文
排除 node_modules、.next、data 等目录,解决 Build Cache 膨胀问题。
2026-05-08 12:55:44 +08:00
gitadmin f692546281 feat: 周报预览运营数据增加无故障天数
参照月报逻辑,在 buildWeeklyMetadata 中计算无故障天数,
排除"其他"子分类工单,按故障影响日期范围统计。
2026-05-08 09:28:39 +08:00
gitadmin 5c94719693 feat: 报告系统重构 — 异步生成、预览重设计、跨月工单支持
- 报告创建与 DOCX 生成分离,新增 POST /api/reports/[id]/generate 异步路由
- 报告预览/列表页重设计:KPI 5列布局、状态标签颜色、故障分类中性色
- 月报支持跨月进行中工单:图表/第二章/第三章/第四章全覆盖
- OLE Package 嵌入自然周周报到月报附件章节
- 修复月报第一章/第二章未排除 fault_subcategory='其他' 工单
- 修复当日恢复故障被计入离线节点(恢复 date < close_time 判定)
- 报告预览无故障天数改为完整日期范围计算
- Button 组件增加 loading 支持、API Key 过期检查修复
2026-05-07 21:45:14 +08:00
gitadmin a5f19ebeda feat: 周报 metadata 扩展到 16 字段,抽取 buildWeeklyMetadata 辅助函数 2026-05-07 16:12:01 +08:00
gitadmin e5bdf61cce feat: 月报 metadata 扩展到 16 字段,抽取 buildMonthlyMetadata 辅助函数 2026-05-07 16:05:19 +08:00
gitadmin b6eed5d0c0 fix: 修复 ReportPreviewData 缩进和 avgAvailability 可空性 2026-05-07 16:01:38 +08:00
gitadmin 80d81836a1 feat: 新增 ReportPreviewData 接口和 ready 状态类型 2026-05-07 15:57:06 +08:00
gitadmin 6a6d0f309d chore: 初始化仓库 — 工单跟踪系统 2026-05-07 10:34:40 +08:00
gitadmin a9bad37849 Initial commit 2026-05-07 09:51:42 +08:00