issue-ai/CHANGELOG.md

17 KiB
Raw Blame History

变更日志

2026-07-02

  • [优化] 企业微信推送消息格式全面对齐 zabbix-01 脚本10 项修复)
    • 结单消息按故障类型区分OEM诊断/OEM维修/其他),补齐机架位置、故障类型、故障时间
    • OEM维修结单消息新增本月故障次数和本月总处理时长
    • 新故障通知OEM维修档位标题补全「基于月度内累计故障时长计算」
    • 新故障通知OEM诊断字段顺序调整到期时间在故障信息之前
    • 每小时提醒显示「X小时Y分」精度
    • 静默期积压消息格式对齐动态剩余时间、机架位置、diag_30min/diag_hourly 区分
  • [修复] isInSilentPeriod() / isTimeToFlush() 时区问题:新增 getBeijingHour() 使用 UTC+8 偏移,兼容 UTC 容器环境
  • [修复] 先推送后更新数据库,防止推送失败导致结单通知永久丢失
  • [修复] 共享库 WeChatPusher 错误消息不泄露 webhook URL
  • [修复] faultDetail 截断 500 字符,防止消息超企业微信 API 限制
  • [修复] tierPenaltyMap 提取为类级常量 TIER_PENALTY_MAP,消除 3 处重复定义
  • [修复] deploy-ai.sh Docker 构建前临时替换 shared 符号链接为实际目录,构建后恢复

2026-06-30

  • [新增] SSO 统一认证:集成 Authelia OIDC支持统一认证登录
  • [新增] OIDC 登录页面:添加「统一认证登录」按钮,支持 LDAP 回退
  • [新增] src/lib/oidc.tsOIDC 客户端配置PKCE + state + nonce
  • [新增] src/app/api/auth/login/oidc/route.tsOIDC 登录端点
  • [新增] src/app/api/auth/callback/route.tsOIDC 回调处理(含权限同步)
  • [新增] src/app/api/auth/logout/route.ts:跨域登出(支持 domain 参数)
  • [修复] NODE_TLS_REJECT_UNAUTHORIZED=0Authelia 使用自签名证书
  • [修复] OIDC redirect_uri 回调重定向到 localhost添加 getBaseUrl() 函数
  • [修复] token_endpoint_auth_method 配置缺失:添加 client_secret_basic
  • [修复] middleware 路由匹配:/api/auth/login 改为前缀匹配 /api/auth/login*
  • [优化] docker-compose.yml统一环境变量管理移除 env_file
  • [优化] .env.example添加 OIDC 配置模板

2026-06-24

  • [修复] SQLite 时区根源修复:重建表修改所有时间列 DEFAULT 为 datetime('now', '+8 hours'),涉及 7 个表 9 个列

2026-06-23审计日志

  • [新增] 审计日志详情可视化字段变更用表格对比message/keys 格式分别用文本和列表展示
  • [新增] 保留天数可编辑:默认隐藏保存按钮,修改值后蓝色高亮显示,保存成功/失败有颜色反馈
  • [优化] 审计日志列表详情列:显示操作摘要(邮件监控/微信推送/配置修改等),不再显示"-"
  • [优化] 表格列宽统一:时间/用户/操作/对象列防止换行,与 assets-ai 风格一致
  • [修复] 监控设置页"已保存"提示重复SectionSaveButton 移除冗余消息渲染
  • [修复] 导出文件名使用北京时间(修复凌晨时区偏移)

2026-06-23邮件监控集成

  • [新增] 邮件监控系统:将 zabbix-01 上的 mail_monitor.py 完整迁移到 issue-aiNode.js 实现
  • [新增] Background Worker独立进程运行entrypoint.shnode-cron 定时调度,与 Next.js Server 同时启动
  • [新增] IMAP 邮件监控:自动连接邮箱、过滤故障邮件、解析 HTML 表格、提取故障信息
  • [新增] 自动工单创建:从邮件解析结果自动创建工单,关联设备信息
  • [新增] 微信 webhook 推送:故障通知、可用性档位提醒、工单结单提醒
  • [新增] OEM 诊断提醒每小时提醒、30 分钟特别提醒、超时提醒
  • [新增] OEM 维修提醒:每档前 1 小时提醒、每档超时提醒、全部超出提醒
  • [新增] 静默期管理0:00-7:00 不发定时提醒7 点自动 flush 积压消息
  • [新增] 可用性计算五档位1%/3%/5%/10%),月度累计故障时长
  • [新增] 6 张数据库表settings、fault_records、reminder_state、processed_emails、pending_messages、monitor_logs
  • [新增] 设置页面(/settings/monitor邮箱配置、邮件过滤、微信推送、运行参数
  • [新增] 分模块保存按钮 + 高亮修改字段 + 错误详情可点击展开
  • [新增] 运行状态面板:今日处理、累计、错误、进行中故障均可点击展开详情
  • [新增] 监控 APIstatus/start/stop/trigger/settings/test-mail/test-wechatadmin 权限)
  • [新增] 审计日志集成:所有监控操作记录到 audit_logs
  • [新增] 数据迁移脚本:从 zabbix-01 迁移历史故障数据
  • [新增] Docker 集成entrypoint.sh 包装脚本builder 阶段编译 Worker 模块

2026-05-18

  • [新增] 用户详情页 — 点击用户名查看完整信息,支持编辑和键盘导航
  • [优化] 用户管理 UI 统一Modal/Button 拆分为独立文件、删除改用 Modal 确认、TopBar 样式统一
  • [调整] 用户列表页去创建时间列,编辑功能移到详情页,仅保留删除按钮
  • [新增] LDAP 邮箱自动同步:密码登录/SSO 路径均从 LLDAP 同步 mail 到本地 users.email,增加 /api/users/sync-emails 批量同步接口
  • [新增] 编辑用户弹窗增加启用/禁用状态切换、新密码二次确认
  • [优化] 角色权限页面 UI 统一:角色 Badge 按角色区分颜色、增加保存 loading、checkbox dark mode 样式
  • [优化] API Key 页面 UI 统一:成功提示颜色对齐、取消按钮 ghost 统一
  • [优化] 全站字体大小和颜色统一:列表页/详情页 text-sm 一致、dark mode 颜色补全
  • [修复] 用户管理"最后登录"时间不动态更新SSO 免登录、本地 JWT 会话验证路径现在也会更新 last_login_at

2026-05-15

  • [修复] middleware 移除 better-sqlite3 依赖,修复 Edge Runtime 不支持 Node.js 原生模块的编译报错(The edge runtime does not support Node.js 'fs' module
  • [优化] deploy-ai.sh 连通性检查增加重试机制3次/10s间隔应对同时部署两个站点时目标容器暂不可达

2026-05-14

  • [新增] 权限系统重构:工单细粒度权限(tickets:create 手动建单、tickets:import 导入、tickets:export 导出),tickets:write 缩窄为编辑/删除
  • [新增] 报告三层权限:reports:read(查看列表+预览)、reports:download(下载)、reports:create(新建+生成文档+删除)
  • [新增] /api/auth/me 返回 permissions 字段,前端根据权限数组控制按钮和导航显隐
  • [新增] 角色管理 UI 权限项从 8 个扩展到 14 个(含 api-keys:read/write
  • [修复] 角色管理页面admin/operator/viewer 标记为"内置"不可删除但可编辑admin 在 API 层禁止删除
  • [修复] 报告 API 路由全部补全权限检查(此前列表/预览/下载/删除均无权限检查)
  • [修复] 导出工单 API 新增 tickets:export 权限检查(此前仅验证登录态)
  • [修复] POST 创建报告权限从错误的 reports:read 修正为 reports:create
  • [修复] reports:write 全面替换为 reports:create
  • [修复] 种子数据迁移逻辑不再每次启动覆盖用户自定义权限,仅首次安装时创建默认权限
  • [修复] SSO 新用户免登录失败:根页面 getCurrentUser() 改为直接 redirect('/dashboard'),由中间件统一处理共享 JWT 认证(与 assets-ai 行为一致)
  • [修复] 手动建单输入业务 IP 按回车无法查询节点名称和设备序列号assets-ai api_keys 表中缺少 issue-ai 使用的 API Key服务端调用返回 401且前端静默吞错无提示
  • [优化] 中间件 API Key 验证统一为 ALLOWED_API_KEYS快速路径→ api_keys 数据库表(回退)两级验证;无效 key 不再被放行,中间件层直接返回 401安全加固与 assets-ai 行为一致)
  • [新增] 部署后自动验证 issue→assets API 连通性(deploy-ai.shAPI Key 不匹配时部署立即报错退出
  • [修复] next.config.ts 添加 ldaptsserverExternalPackages,确保 Next.js standalone 构建包含 LLDAP 客户端模块,避免 ldapUserExists() 因模块缺失失败导致 SSO 自动创建用户静默中断
  • [调整] 全局证书切换Cloudflare Origin CA → Let's Encrypt/etc/letsencrypt/live/www.tlyq.ai/),覆盖全部 7 个子域名nginx 8 个站点配置同步更新

2026-05-12

  • [部署] 云端 JWT 密钥统一为 oa-shared-jwt-secret-tlyq-2026三站点密钥一致
  • [部署] docker-compose 移除 AUTHELIA_URL添加 LDAP/COOKIE/INTERNAL_API_KEY 环境变量
  • [部署] LLDAP admin 密码更新为 3Vm!Y!@RCiPs
  • [部署] nginx 移除 auth_request恢复纯反向代理改为运行时 DNS 解析
  • [新增] src/lib/db-schema.tsusers 表新增 last_login_at / last_active_at 列
  • [新增] src/lib/auth.tsgetCurrentUser() 更新 last_active_at
  • [新增] src/app/api/auth/login/route.ts:登录时更新 last_login_at 和 last_active_at

2026-05-11

  • [新增] src/lib/ldap.tsldapUserExists() 函数,检查 LLDAP 中用户是否存在admin bind 搜索,不可达时容错放行)
  • [新增] src/lib/jwt-shared.ts:共享 JWT 签发/验证(tlyq_session cookieHS256与 OA/assets 共用密钥)
  • [调整] src/lib/auth.tsgetCurrentUser() 优先 tlyq_session,加入 LLDAP 存在性检查,用户被删除后自动清除 cookie 踢出
  • [调整] src/app/api/auth/login/route.tsLDAP 优先认证 + 本地密码缓存回退 + localadmin 应急用户直连
  • [调整] src/app/api/auth/logout/route.ts:同时清除 session_issuetlyq_session
  • [调整] src/app/api/auth/me/route.ts:移除 SSO header 路径,改用 getCurrentUser() 统一获取
  • [调整] src/middleware.ts:优先 tlyq_session → 回退 session_issue,移除 SSO 代理路径,放行 /api/internal/
  • [新增] src/app/api/internal/roles/route.ts:内部 API返回站点可用角色列表INTERNAL_API_KEY 鉴权)
  • [新增] src/app/api/users/[id]/route.tsadmin/localadmin 用户禁止删除和修改角色
  • [修复] src/components/tickets/TicketList.tsx已办工单点击业务IP/节点名称跳转到待办页面,改用 usePathname() 保持当前页面并正确筛选
  • [调整] src/app/(app)/settings/users/page.tsxadmin/localadmin 用户隐藏删除按钮,编辑时角色字段显示为只读
  • [新增] src/lib/db-schema.ts:预置 localadmin 应急用户admin 角色,纯本地 BCrypt 认证)

2026-05-07

  • [新增] 月报跨月进行中工单支持:第一章折线图覆盖未结单离线天数,第二章标注"处理中",第三章显示"进行中"/"—",第四章标注"仅计本月部分"

  • [修复] monthly-report-docx.ts 6 个 TypeScript 类型错误HeadingLevel 值类型、createCell align 推断过窄、children 数组类型改为 FileChild[]

  • [修复] API Key 过期检查失效:verifyApiKey 查询缺 expires_at 字段,导致过期判断永不触发

  • [修复] Button 组件不支持 loading 属性:增加 loading?: boolean 并在 loading 时禁用 + spinner 动画

  • [修复] scripts/import-steps.ts 参数类型错误:main() 增加 excelPath 判空守卫

  • [新增] 月报生成时自动生成当月自然周周报,以 OLE Package 嵌入「五、附件」章节,双击图标可在 Word 中打开

  • [新增] 报告管理页面重新设计:预览页 KPI 5 列布局、故障分类去背景色、报告列表状态标签颜色体系、操作按钮按状态显示

  • [新增] POST /api/reports/[id]/generate 异步生成路由,报告创建与 DOCX 生成分离,状态机 ready→generating→completed/failed

  • [修复] 月报第二章和第一章图表:排除 fault_subcategory = '其他' 工单,当日恢复故障不计入离线节点

  • [修复] 报告预览无故障天数改为按故障完整日期范围计算,与 DOCX 图表规则区分

2026-05-05

  • [修复] 云服务器月报生成失败:重建 Docker 镜像安装 echartsDockerfile 补全 Chromium 系统依赖库libglib2.0、libnss3 等 18 个)
  • [修复] 周报多个工单详情表格连在一起:在 2.2/3.2/4.2 节每个工单表格前加入「工单 N」编号标签
  • [新增] next.config.ts 添加 outputFileTracingIncludes,防止 fs.readFileSync 加载的依赖在 standalone 模式中丢失
  • [调整] CLAUDE.md 故障排查章节新增月报/周报生成失败的三类根因及修复方案

2026-05-03

  • [新增] 周报生成功能数据采集weekly-report.ts、DOCX 构建weekly-report-docx.ts、故障概况/详情表格、固定列宽布局

2026-05-02

  • [新增] 工单列表重构:拆分为"待办工单"和"已办工单"两个页面,现有工单全部归入已办
  • [新增] 手动建单页面(/tickets/create),支持 IP 回车自动查询设备信息
  • [新增] 工单类型字段(ticket_type),支持 OEM诊断/OEM维修与故障大类分离含历史数据迁移
  • [新增] admin 专属"全部工单"侧边栏入口,非 admin 自动重定向
  • [新增] 工单详情和待办列表显示 Tier 1 SLA 超时时间1% 自然月秒数)
  • [新增] ProcessForm 重构:默认 1 个时间线步骤、处理人下拉(腾讯/图灵)、多项必填校验、提交确认弹窗
  • [调整] 权限模型admin 可编辑/删除已办工单operator 仅操作待办;删除仅限创建人+adminAPI 层 403 守卫
  • [优化] 时间输入框改为文本格式YYYY-MM-DD HH:mm:ss支持复制粘贴失焦实时格式校验
  • [优化] 智能返回按钮、历史工单新标签页打开、空时间线隐藏、列表移除操作列
  • [调整] 报告生成:月报默认选中上个月,周报默认选上周一至上周日

2026-04-30

  • [新增] 报告管理页面重构:按钮、月报/周报类型、月份选择器、Toast + 轮询、批量删除(多选/全选/确认弹窗)
  • [新增] 月报生成逻辑重写:按 close_time 筛选、SLA 判定(可用性<99%且结论不含"无异常"→不计入)、故障日期精确到秒、第四章低可用性黄底红字标记
  • [优化] 第一章图表Y 轴动态范围自适应、排除"无故障"工单干扰、支持跨月工单正确计入
  • [修复] 报告生成时区修复UTC+8、ECharts 图表数据截断
  • [调整] 目录 TOC 风格还原、侧边栏导航改名为"报告管理"、表单输入框宽度优化
  • [新增] 创建 README 文档,包含完整的月报设计规则

2026-04-29

  • [新增] 工单列表支持拖拽自定义列宽、排序/筛选图标可点击、排序图标统一为 ChevronsUpDown
  • [修复] 筛选弹框过窄(改为自适应宽度)、表头 overflow 裁切下拉框、列头 button 嵌套非法 HTML
  • [修复] 编辑工单时配件名称保存无效(数据库缺列 + API 白名单遗漏)
  • [数据] 从总表 Excel 导入更换配件名称15 条成功6 条不匹配跳过)

2026-04-28

  • [调整] 工单号改造id 改为 14 位工单号,删除 ticket_no 列,旧格式自动迁移,生产环境 85 条工单 + 524 条时间线验证通过
  • [修复] deploy-ai.sh 打包时排除本地环境文件,防止 .env.local 覆盖服务器配置导致跳转链接错误
  • [修复] 登录后重定向middleware 携带 redirect 参数login page 登录后读取参数跳转,替代硬编码 /dashboard
  • [修复] 跨系统认证隔离JWT 增加 payload.id 空值检查防跨系统泄露cookie 名改为 session_issue 防 localhost 域冲突
  • [修复] assets-ai 调用 issue-ai 会话过期:缺少 ALLOWED_API_KEYS 配置,本地环境补齐
  • [修复] by-asset API 500 错误、导入页缺少工单号列、用户管理页缺少创建时间列
  • [文档] 更新 CLAUDE.md修正 API Key 配置说明,补充本地 .env.local 示例

2026-04-27

  • [新增] API Key 管理页面(/settings/api-keys),支持创建/删除 Key供外部系统调用 API
  • [新增] 工单 Excel 导入脚本(import-tickets.ts),支持批量导入工单数据
  • [新增] 工单时间线导入脚本(import-steps.ts),关联工单 ID 导入处理步骤
  • [优化] docker-compose.yml 使用 external webnet与 nginx-proxy-ai 共用网络
  • [调整] Docker 容器挂载 4 个 volumedata、.next、package.json、tsconfig

2026-04-25

  • [新增] 工单核心 APICRUD + 分页 + 筛选 + 搜索)
  • [新增] 工单列表页面(/tickets
  • [新增] 新建/编辑/详情页面
  • [新增] 月度统计 API/api/stats/monthly
  • [新增] SLA 达标率统计(/api/stats/sla
  • [新增] 报告生成与导出Word / PDF / Excel 总表)
  • [新增] 调用 assets.tlyq.ai API 获取设备信息,工单详情页展示关联设备卡片
  • [调整] PLAN v5SLA 指标改为「服务可用性」计算,故障分类规则(含 SQL 批量更新语句)
  • [新增] assets-client.ts支持通过 device_ip 模糊匹配 business_ip / hdm_ip 获取设备信息

2026-04-24

  • [新增] 项目初始化,基于 Next.js 15.1 + SQLitestandalone 输出模式)
  • [新增] 认证系统JWT cookie 方式),登录/登出/当前用户 API
  • [新增] 用户管理(/settings/users和角色权限系统admin/operator/viewer
  • [新增] 数据库初始化脚本init-db.ts预置角色和默认管理员账号
  • [新增] Docker 部署配置(两阶段构建 alpine + debian slim