issue-ai/CHANGELOG.md

135 lines
11 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

# 变更日志
## 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 行为一致)
- [修复] `next.config.ts` 添加 `ldapts``serverExternalPackages`,确保 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.ts`users 表新增 last_login_at / last_active_at 列
- [新增] `src/lib/auth.ts`getCurrentUser() 更新 last_active_at
- [新增] `src/app/api/auth/login/route.ts`:登录时更新 last_login_at 和 last_active_at
## 2026-05-11
- [新增] `src/lib/ldap.ts``ldapUserExists()` 函数,检查 LLDAP 中用户是否存在admin bind 搜索,不可达时容错放行)
- [新增] `src/lib/jwt-shared.ts`:共享 JWT 签发/验证(`tlyq_session` cookieHS256与 OA/assets 共用密钥)
- [调整] `src/lib/auth.ts``getCurrentUser()` 优先 `tlyq_session`,加入 LLDAP 存在性检查,用户被删除后自动清除 cookie 踢出
- [调整] `src/app/api/auth/login/route.ts`LDAP 优先认证 + 本地密码缓存回退 + localadmin 应急用户直连
- [调整] `src/app/api/auth/logout/route.ts`:同时清除 `session_issue``tlyq_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.ts`admin/localadmin 用户禁止删除和修改角色
- [修复] `src/components/tickets/TicketList.tsx`已办工单点击业务IP/节点名称跳转到待办页面,改用 `usePathname()` 保持当前页面并正确筛选
- [调整] `src/app/(app)/settings/users/page.tsx`admin/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、.nextpackage.jsontsconfig
## 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