12 KiB
12 KiB
变更日志
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.sh),API Key 不匹配时部署立即报错退出 - [修复]
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_sessioncookie,HS256,与 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.ts6 个 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 镜像安装 echarts,Dockerfile 补全 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 仅操作待办;删除仅限创建人+admin;API 层 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 个 volume(data、.next、package.json、tsconfig)
2026-04-25
- [新增] 工单核心 API(CRUD + 分页 + 筛选 + 搜索)
- [新增] 工单列表页面(
/tickets) - [新增] 新建/编辑/详情页面
- [新增] 月度统计 API(
/api/stats/monthly) - [新增] SLA 达标率统计(
/api/stats/sla) - [新增] 报告生成与导出(Word / PDF / Excel 总表)
- [新增] 调用 assets.tlyq.ai API 获取设备信息,工单详情页展示关联设备卡片
- [调整] PLAN v5:SLA 指标改为「服务可用性」计算,故障分类规则(含 SQL 批量更新语句)
- [新增] assets-client.ts,支持通过 device_ip 模糊匹配 business_ip / hdm_ip 获取设备信息
2026-04-24
- [新增] 项目初始化,基于 Next.js 15.1 + SQLite(standalone 输出模式)
- [新增] 认证系统(JWT cookie 方式),登录/登出/当前用户 API
- [新增] 用户管理(
/settings/users)和角色权限系统(admin/operator/viewer) - [新增] 数据库初始化脚本(init-db.ts),预置角色和默认管理员账号
- [新增] Docker 部署配置(两阶段构建 alpine + debian slim)