6.1 KiB
6.1 KiB
name, description, metadata
| name | description | metadata | ||||||||
|---|---|---|---|---|---|---|---|---|---|---|
| session-20260612-1 | 2026-06-12 会话 — 域名迁移mokee.com→zgitm.com、对外开放API、邮件服务、Token一次消费、文件管理、移动端适配 |
|
2026-06-12 会话
会话摘要
域名从 mokee.com 迁移到 zgitm.com,新增对外开放API(Token获取+邮件发送+一次消费),新增邮件服务(阿里企业邮箱),新增Token日志和文件管理页面,全员移动端适配,修复多个关键Bug。
关键操作
一、域名迁移 mokee.com → zgitm.com
.env.production所有 URL 改为zgitm.comauth.tsCookie domain.zgitm.com(环境变量VITE_COOKIE_DOMAIN)request.tsCookie 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:465SSL,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— 添加 gatewayUrlSysFile.java— 重构(file_data)SysEmailLog.java— 新建SysOpenTokenLog.java— 新建EmailService.java— 新建(setFrom修复)JwtUtil.java— generateOpenToken()FileService.java/FileServiceImpl.java— DB存储重写FileController.java— view端点+CORSEmailController.java— 发送+记录+Token日志OpenApiController.java— Token获取+邮件发送+编码兼容+自主解析tokenIdUserServiceImpl.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_DOMAINauth.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— 路由+标题faviconglobal.css— 全局移动端CSS
文档:
docs/open-api-doc.md— 对外开放API文档
已知问题
- E-1: Cookie domain localhost开发不可用(开发环境VITE_COOKIE_DOMAIN为空)
- PROD Nginx 需要配
zgitm.com域名 - Docker部署需要重新构建镜像