issue-ai/CHANGELOG.md

12 KiB
Raw Permalink Blame History

变更日志

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