初始化

This commit is contained in:
zg
2026-07-15 16:13:27 +08:00
parent 6d6f559793
commit c4023c1623
276 changed files with 42622 additions and 0 deletions

View File

@@ -0,0 +1,133 @@
---
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新增对外开放APIToken获取+邮件发送+一次消费新增邮件服务阿里企业邮箱新增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**: 图片 `<img>` 不带 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部署需要重新构建镜像