--- name: session-20260612-1 description: 2026-06-12 会话 — 域名迁移mokee.com→zgitm.com、对外开放API、邮件服务、Token一次消费、文件管理、移动端适配 metadata: type: session date: 2026-06-12 sessionNumber: 1 startTime: 2026-06-12T00:00:00+08:00 --- # 2026-06-12 会话 ## 会话摘要 域名从 mokee.com 迁移到 zgitm.com,新增对外开放API(Token获取+邮件发送+一次消费),新增邮件服务(阿里企业邮箱),新增Token日志和文件管理页面,全员移动端适配,修复多个关键Bug。 ## 关键操作 ### 一、域名迁移 mokee.com → zgitm.com - `.env.production` 所有 URL 改为 `zgitm.com` - `auth.ts` Cookie domain `.zgitm.com`(环境变量 `VITE_COOKIE_DOMAIN`) - `request.ts` Cookie domain 环境变量化 - `IntegrationDoc.vue` 备用 URL 更新 - **Bug**: Cookie domain 拼写错误 `.zgtim.com` → 修正为 `.zgitm.com` - **Bug**: 登录不跳转 → Cookie domain 不匹配导致跨子域丢失 - Nginx 需要配置 `zgitm.com` 域名 ### 二、对外开放 API - **获取Token**: `POST /zgapi/v1/open/token` 只需传 `systemCode` - **发送邮件**: `POST /zgapi/v1/open/email/send` 带 Bearer Token - **一次消费**: 每个 Token 只能用一次,Redis `open:token:{id}:consumed` 标记 - **30分钟有效期** - 网关路由 `/zgapi/v1/open/` → admin - TokenAuthFilter 放行 `/zgapi/v1/open/token`,其他 open 路径验证 open token ### 三、邮件服务 - SMTP: `smtp.qiye.aliyun.com:465` SSL, `admin@zgitm.com` / `mokee2016.` - `EmailService.java` — 支持纯文本/HTML/附件,自动加 `[QA]`/`[PROD]` 前缀 - `EmailService.setFrom()` 设发件人(阿里企业邮箱要求发件人=认证账号) - `EmailController.java` — 后台发送+记录+分页查询+Token日志 - `sys_email_log` 表 — 发送记录 - `@ConditionalOnBean` 问题 → 改为 `@Autowired(required = false)` + null检查 - **Bug**: 网关模块无 mail 配置导致 `@Value("${spring.mail.username}")` 启动失败 → 加默认值 `:}` ### 四、编码兼容 - **Bug**: 外部系统发 GBK 编码 JSON → Jackson 按 UTF-8 解析失败 `Invalid UTF-8 start byte 0xb2` - 网关方案被拒绝 → 在 `OpenApiController` 手动读字节流,检测 GBK→UTF-8 转换 - API 文档要求 `Content-Type: application/json; charset=UTF-8` ### 五、文件管理 - 文件二进制存入数据库 `file_data LONGBLOB` - `sys_file` 表结构调整(QA+PROD) - `FileController.{id}/view` 端点输出图片流 - `FileList.vue` — 文件列表+上传+预览 - **Bug**: 图片显示 `ERR_BLOCKED_BY_ORB` → view 端点加 CORS 头 - **Bug**: 上传报 `MissingServletRequestPartException` → 网关 `spring.servlet.multipart.enabled=false` - **Bug**: 图片 `` 不带 Authorization 头 → TokenAuthFilter 支持 Cookie 读取 token ### 六、系统Bug全面检查 - A-1: `SysSystem` 缺 `gatewayUrl` 字段 → 已添加 - D-1/D-2: LoginView/UserForm 错误静默吞没 → 加错误提示 - E-1: Cookie domain 硬编码 → 改为环境变量 `VITE_COOKIE_DOMAIN` - F-1/F-2: assignRoles/assignMenus 不同步 Redis → 清除会话强制重登 - F-4: username 不同步 Redis → 已加同步 ### 七、移动端适配(全部22个Vue页面) - AdminLayout: 汉堡菜单 + 侧边栏滑出 + 遮罩 - 全局: 表格横向滚动、弹窗95vw、按钮缩小 - 所有列表页: 工具栏垂直排列、select/input 100%宽 - 所有表单页: max-width→100%、label缩到70px、按钮全宽 - 操作列: 去掉 `fixed="right"`,手机端只显示图标 ### 八、Token日志 - `sys_open_token_log` 表(QA+PROD) - `OpenTokenLogList.vue` — Token日志页面 - 菜单 "Token日志" 在日志审计下 - **Bug**: Token日志跳转登录 → 接口路径从 `/zgapi/v1/open/` 移到 `/zgapi/v1/admin/email/token-log/page` ### 九、API文档 - `docs/open-api-doc.md` — 独立API文档,使用生产地址 `gw.server.zgitm.com` - Java(Hutool)调用示例 - UTF-8 编码要求醒目提示 ### 十、数据库变更(QA+PROD均已执行) - `sys_file` 表重建(file_data LONGBLOB + 新结构) - `sys_file` 添加 `file_url` 兼容列 - `sys_open_token_log` 表创建 - `sys_email_log` 表创建 - 文件管理菜单+权限 `system:file:*` - 邮件管理菜单+权限 `system:email:*` - Token日志菜单+权限 `system:token:list` ## 修改文件清单 **后端**: - `SysSystem.java` — 添加 gatewayUrl - `SysFile.java` — 重构(file_data) - `SysEmailLog.java` — 新建 - `SysOpenTokenLog.java` — 新建 - `EmailService.java` — 新建(setFrom修复) - `JwtUtil.java` — generateOpenToken() - `FileService.java` / `FileServiceImpl.java` — DB存储重写 - `FileController.java` — view端点+CORS - `EmailController.java` — 发送+记录+Token日志 - `OpenApiController.java` — Token获取+邮件发送+编码兼容+自主解析tokenId - `UserServiceImpl.java` — Redis同步+会话失效 - `RoleServiceImpl.java` — 角色变更会话失效 - `AuthServiceImpl.java` — 反向索引 - `TokenAuthFilter.java` — Cookie token + Open API认证 - `GatewayController.java` — open路由+multipart修复 - 8个 application-*.yml — 日志级别+邮件配置+multipart禁用 **前端**: - `.env.production` / `.env.development` — VITE_COOKIE_DOMAIN - `auth.ts` — Cookie domain环境变量化 - `request.ts` — Cookie domain环境变量化 - `LoginView.vue` — 错误提示+移动端 - `AdminLayout.vue` — fetchUserInfo+汉堡菜单+移动端+文件/邮件/Token菜单 - `PersonalView.vue` — 头像上传修复+移动端 - `FileList.vue` — 新建(上传+预览+移动端) - `EmailList.vue` — 新建(发送+记录+移动端) - `OpenTokenLogList.vue` — 新建(移动端) - `IconPicker.vue` — 已上传图标标签页 - 15个页面 — 移动端@media适配 - 7个表格 — 去掉fixed="right" - `router/index.ts` — 路由+标题favicon - `global.css` — 全局移动端CSS **文档**: - `docs/open-api-doc.md` — 对外开放API文档 ## 已知问题 - E-1: Cookie domain localhost开发不可用(开发环境VITE_COOKIE_DOMAIN为空) - PROD Nginx 需要配 `zgitm.com` 域名 - Docker部署需要重新构建镜像