oa-ai/CHANGELOG.md

7.7 KiB
Raw Blame History

变更日志

2026-05-18

  • [安全] 邮件发送从 163 企业邮箱 SMTP → Resend APISending Access 权限),凭证从邮箱完整密码降级为仅可发信的 API Key
  • [安全] 创建用户不再邮件发送明文密码改为发送一次性密码设置链接JWT token24 小时有效),密码全程只有用户自己知道
  • [新增] /setup-password 密码设置页(公开,通过邮件链接访问)+ /api/auth/setup-password API
  • [新增] src/lib/setup-token.ts 一次性密码设置 token 签发/验证
  • [新增] 个人信息页 显示/修改邮箱EmailEditor 客户端组件inline 编辑)
  • [新增] 权限管理页 邮箱列 + admin 编辑任意用户邮箱
  • [修复] 创建用户时 LLDAP 存储真实邮箱(不再自动拼接 {username}@tlyq.ai
  • [修复] 全站时区统一 UTC+8修复 4 处 toISOString() + 1 处 datetime('now') 无偏移
  • [设计] 用户管理页全宽重设计:顶部 Tab 条 + 表格化列表 + toast 通知 + Header 宽度 1440px 统一
  • [调整] 用户列表创建时间精确到秒
  • [调整] 邮件模板移除 163 管理员联系方式

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 进程仍使用旧 .nextdocker 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 创建用户报 401LDAP_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 转义问题
  • [优化] 站点卡片统一高度,移动端适配