oa-ai/CHANGELOG.md

68 lines
6.6 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
- [新增] 管理员权限接入 LLDAP `lldap_admin` 组:`isLldapAdmin()` 通过 LDAP 查询组成员决定管理权限,不再硬编码 `username === 'admin'`;将用户加入该组即可获得 OA 管理权限
- [优化] `/api/auth/me` 响应增加 `isAdmin` 字段,前端复用判断权限
- [修复] 部署后 Cloudflare 缓存旧 HTML 引用已删除 chunk 导致 Application Errormiddleware + nginx 双层 `Cache-Control: no-cache` 防缓存,部署脚本 `docker compose restart` 确保容器重启
- [修复] deploy-ai.sh 对无 Dockerfile 站点OA容器不重启Next.js 进程仍使用旧 `.next``docker compose up -d` 后追加 `docker compose restart`
- [新增] `nginx-proxy-ai/conf.d/oa-ai.conf` 纳入版本控制,新服务器可直接部署
- [优化] 统一顶栏 Header 组件:提取 `Header.tsx`(服务端)+ `HeaderUI.tsx`(客户端复用),三处页面(首页/用户管理/个人信息共用同一顶栏退出按钮、displayName、返回链接风格完全一致
- [优化] 个人信息页"修改密码"改为折叠按钮,点击后展开表单;新增"确认新密码"字段 + 两次输入一致性校验
- [优化] 门户首页欢迎语和右上角个人信息优先显示 displayName显示名回退 username
- [优化] 门户退出按钮改为 SVG 门+箭头图标,暗色/亮色模式均清晰可见hover 高亮
- [优化] 创建用户弹窗(未填邮箱时)新增显示用户名和显示名,"复制密码"改为"复制信息",复制内容与邮件一致(含用户名、密码、登录地址、安全提示)
- [修复] deploy-ai.sh 中 OA 的 localhost→域名 sed 替换在 macOS BSD sed 下静默失败,导致生产环境 OA 导航链接指向 localhost改用 `sed $SED_I_BACKUP`,同时 page.tsx 新增 `siteUrl()` 自动根据 `NODE_ENV` 构造域名
- [修复] OA 容器缺少 SMTP 环境变量创建用户填邮箱时邮件发送静默失败docker-compose.yml 添加 SMTP_HOST/PORT/USER/PASS/FROM
- [修复] OA 创建用户报 401`LDAP_ADMIN_PASS` 回退默认值与服务器 LLDAP 实际密码不匹配 → 改为 `docker exec lldap printenv` 动态获取
- [修复] assets/issue 缺少 LDAP_URL/LDAP_BASE_DN容器内回退 localhost 不可达 → docker-compose.yml 添加
- [修复] assets/issue 缺少 COOKIE_DOMAINJWT_SECRET 不一致,跨站点免登录失效 → 统一硬编码 JWT_SECRET + COOKIE_DOMAIN
- [修复] assets/issue 新用户 SSO 免登录自动创建:`getCurrentUser()` 增加 `INSERT OR IGNORE` 逻辑
- [修复] assets/issue Docker 镜像原生模块 musl/glibc 不兼容导致登录 API 500 → Dockerfile 改为 `npm install` 在 COPY standalone 之后 + `npm rebuild better-sqlite3` + 删除 musl 变体
- [修复] deploy-ai.sh `--build` 在无 Dockerfile 站点OA失败导致容器未重启 → 改为检测 Dockerfile 存在才加 `--build`
- [部署] deploy-ai.sh 新增构建后清理 musl 残留 + 根据 Dockerfile 存在与否自动决定是否 `--build`
- [调整] 所有站点 docker-compose.yml 统一 JWT_SECRET=oa-shared-jwt-secret-tlyq-2026、COOKIE_DOMAIN=.tlyq.ai
## 2026-05-12
- [新增] 修改密码增加复杂度要求:至少 8 位,大写/小写/数字/特殊字符 4 选 3前端实时显示密码强度指示器
- [修复] OA 容器只挂载单个 .db 文件导致 SQLite WAL 不共享权限管理中已删除用户仍可见改为挂载整个数据目录WAL 文件实时同步
- [新增] 创建用户支持邮件发送密码:新增邮箱输入框(选填),填写后通过 nodemailer 将用户名和密码发送至指定邮箱,未填写则弹窗显示(原流程)
- [新增] `src/lib/email.ts` 邮件发送工具163 企业邮箱 SMTPHTML + 纯文本双版本)
- [调整] 用户管理页标签重命名:「用户管理」→「删除用户」,「角色管理」→「权限管理」
- [调整] 邮件提示修改密码只能通过 OA 统一门户,不能在子站点修改
- [部署] OA 站点部署至 txjp 服务器,绑定域名 oa.tlyq.ai
- [部署] Cloudflare Origin Certificate 部署(覆盖 *.tlyq.ai15 年有效期)
- [修复] OA 用户管理/角色管理加载缓慢:容器缺少 assets/issue 数据库卷挂载LLDAP 缺少 sqlite3
- [修复] OA 容器重启后 nginx DNS 缓存旧 IP 导致 502重启 nginx 解决
- [修复] www-ai 容器未启动导致 nginx 重载失败,连锁影响 OA 配置不生效
- [调整] 所有站点 nginx 改为运行时 DNS 解析resolver 127.0.0.11),容器离线不再阻塞 nginx 重载
- [调整] OA API 路径改用环境变量ASSETS_DB_PATH / ISSUE_DB_PATH生产使用 Docker volume 路径
- [调整] sso.tlyq.ai 301 重定向至 oa.tlyq.ai
- [调整] assets/issue/oa JWT 密钥统一为 oa-shared-jwt-secret-tlyq-2026
- [调整] assets/issue docker-compose 移除 AUTHELIA_URL添加 LDAP/COOKIE/INTERNAL_API_KEY 环境变量
- [调整] LLDAP admin 密码同步为 3Vm!Y!@RCiPs
## 2026-05-11
- [新增] OA 统一门户项目创建Next.js 框架、LLDAP 认证、共享 JWT 跨站点免登录
- [新增] 门户首页6 站点卡片聚合导航(资产管理/工单跟踪/官网/云平台/Token工厂/代码仓库)
- [新增] 登录/退出功能:直连 LLDAP 认证,签发 tlyq_session 共享 JWT
- [新增] 个人信息页:账户信息展示 + 会话有效期 + 修改密码docker exec 调 lldap_set_password
- [新增] 用户管理admin 专属):创建用户/用户列表/角色管理三 tab
- [新增] 创建用户自动生成 12 位复杂密码,弹窗显示 + 一键复制
- [新增] 创建用户自动同步至 assets-ai/issue-ai支持角色预设
- [新增] 创建用户角色下拉从各站点实时获取可用角色列表
- [新增] 用户列表含删除功能LLDAP + 各站点 SQLite 同步删除)
- [新增] 角色管理:按站点修改用户角色,待保存机制 + 批量提交 + 确认弹窗
- [新增] 深色/浅色主题切换CSS 变量 + localStorage 持久化,同 assets/issue 风格)
- [新增] 统一顶栏:主题按钮 + 用户头像 + 个人信息链接 + 图标退出
- [新增] 站点卡片 hover 域名提示 + 动画效果
- [新增] CLAUDE.md / README.md / CHANGELOG.md
- [调整] 登录逻辑 v2.1LLDAP 优先认证 + 本地密码缓存回退 + localadmin 应急用户
- [调整] LLDAP 删除用户后assets/issue 实时检测并踢出已登录用户
- [调整] 会话有效期显示精确到秒
- [优化] 用户管理页与首页顶栏样式统一(主题按钮/头像/退出图标)
- [优化] 密码特殊字符通过 base64 编码传输,避免 shell 转义问题
- [优化] 站点卡片统一高度,移动端适配