XuqmGroup
344baead4e
fix: copy workspace package.json before yarn install so devDeps are installed
...
vue-tsc and other workspace devDeps were missing because COPY <workspace>/
ran after yarn install, leaving yarn without sub-package manifests.
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-06-11 17:27:39 +08:00
XuqmGroup
500eca8d6a
refactor(jenkins): 简化 Jenkinsfile 版本管理和部署流程
...
- 移除复杂的版本策略参数,统一使用自动递增版本号
- 修改 Docker 镜像标签策略,使用 latest 标签进行部署
- 简化版本计算逻辑,统一维护服务版本文件
- 更新部署脚本,直接使用 latest 标签拉取镜像
- 添加版本文件自动提交到 Git 的功能
- 重构版本记录更新机制,使用 Python 脚本管理 versions.json
- 统一所有 Jenkinsfile 的环境变量和构建参数结构
2026-06-11 17:23:49 +08:00
XuqmGroup
6b94c30628
chore(ci): 移除 DEPLOY 和 NO_CACHE 参数,构建后必然部署
...
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-06-11 17:07:57 +08:00
XuqmGroup
0572bbdd38
fix(ci): 修复 Jenkinsfile.tenant-web/ops-web 缓存穿透和错误处理
...
- 添加 --build-arg GIT_COMMIT 使 Docker 每次提交都重新构建源码层
- 添加 NO_CACHE 参数支持强制禁用缓存
- 修复 bat 错误处理(if %errorlevel% neq 0 exit /b 1)
- Deploy 阶段添加 lock('prod-deploy') + retry(2) 防并发失败
- Dockerfile.ops: 将 COPY ops-platform 移到 yarn install 之后,添加 ARG GIT_COMMIT
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-06-11 17:05:43 +08:00
XuqmGroup
07d6307b5d
fix(ci): 修复 bat 脚本错误处理,Docker 失败时立即退出
...
原 || exit /b %ERRORLEVEL% 在 Windows bat 中无法可靠捕获 Docker API
错误(Docker Desktop 宕机时返回 500 但 %ERRORLEVEL% 可能仍为 0),
导致构建失败时管道仍标记为 SUCCESS。改为 if %errorlevel% neq 0 exit /b 1。
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-06-11 15:20:16 +08:00
XuqmGroup
50eb60b895
fix(ci): 部署阶段加 lock(prod-deploy) 和 retry,防止并发 pull 失败
...
多个 Jenkins job 同时向同一服务器执行 docker pull 时,containerd
ingest 目录存在 rename 竞争,会出现 "no such file or directory"
错误。通过全局锁 prod-deploy 序列化所有部署操作(与 Server
Jenkinsfile 共享同一锁名),并加 retry(2) 兜底。
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-06-11 15:16:37 +08:00
XuqmGroup
58f7fb4a44
fix(web): 修复双垂直滚动条并优化Docker构建缓存策略
...
- MainLayout: 为侧边栏添加 overflow:hidden,避免 el-aside 默认
overflow:auto 在菜单内容较多时产生第二条垂直滚动条
- Dockerfile.tenant: 将 COPY 源码移至 yarn install 之后并引入
GIT_COMMIT ARG,确保每次提交都重新构建源码层,防止 --cache-from
错误复用旧层导致更新未生效
- Jenkinsfile: 传入 GIT_COMMIT 构建参数;新增 NO_CACHE 参数,缓存
异常时可强制全量重建
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-06-11 15:11:43 +08:00
XuqmGroup
90c9705ff1
feat(system): 添加系统更新检查和选择性更新功能
...
- 新增 streamSelectiveUpdate 函数支持选择性服务更新
- 添加 UpdateCheckResult 接口定义版本更新检查结果
- 实现 checkForUpdates 函数获取版本更新信息
- 在安全中心视图添加版本信息显示和更新检查按钮
- 添加选择性更新对话框支持按服务选择更新
- 实现版本管理视图中的实时更新通知配置
- 添加从 IM 导入灰度成员功能
- 移除应用密钥管理相关的重复组件实现
2026-06-11 14:11:06 +08:00
XuqmGroup
8abcf59147
feat(app): 支持多平台包名配置和应用信息编辑功能
...
- 后端增加至少填写一个平台包名的验证逻辑
- 前端调整应用数据模型,将包名字段改为可选类型
- 添加应用详情页的编辑功能和表单验证
- 优化应用列表页包名显示逻辑,支持多平台包名展示
- 重构应用配置指引页面,按平台分类展示商店配置指南
- 在版本管理页面增加包名配置检查和相应提示
- 新增应用信息编辑弹窗组件和相关业务逻辑
2026-06-11 13:04:28 +08:00
XuqmGroup
0a8011d9be
refactor(version): 优化版本管理中的灰度发布配置
...
- 移除 GrayMemberGroup 和 GraySelectionSource 类型定义
- 添加 GrayTag 类型定义以支持标签模式
- 重命名 normalizeCallbackUrl 函数为 normalizeUrl
- 简化灰度发布配置逻辑,移除本地选择源相关代码
- 将灰度同步回调URL和发布回调URL统一为 graySyncUrl 和 publishCallbackUrl
- 更新灰度成员加载逻辑为标签加载逻辑
- 移除成员模式下的回调地址验证和选择源设置
- 简化灰度模式切换条件判断逻辑
2026-06-11 12:36:27 +08:00
XuqmGroup
f116b63369
feat(update): 重构灰度发布系统并新增标签管理功能
...
- 灰度模式简化为 PERCENT 和 MEMBERS 两种
- 新增成员标签系统,支持标签 CRUD 和按标签选择发版
- 成员同步保留已有标签,手动成员不受同步影响
- 支持标签 + 额外成员组合选择:groupNames + extraMemberIds
- 发布时回调集成方获取成员列表,支持 AppSecret 签名验证
- 从 IM 服务导入成员功能
- 修复 isInGrayRelease() 中的 String.contains() 误匹配 bug
- 移除 IM_PUSH_USERS、CUSTOMER_SYNC、CUSTOMER_CALLBACK 模式
- 更新前端界面,优化灰度成员选择体验
- 添加发布配置和操作日志等相关数据库表结构
2026-06-11 12:30:13 +08:00
XuqmGroup
cbc29cf255
feat(update): 添加 API Key 管理和 WebSocket 实时通知功能
...
- 新增 API Key 管理功能,支持外部工具认证调用平台 API
- 实现 WebSocket 实时通知,版本发布时推送轻量通知给客户端
- 添加 APK 文件哈希校验,支持已下载检测和直接安装
- 支持外部 APK 上传使用 API Key 认证
- 优化私有化部署自动注入 nginx WebSocket 代理配置
- 扩展 SDK 功能包括已下载检测、直接安装和实时通知监听
2026-06-11 12:25:16 +08:00
XuqmGroup
cd39c7fb30
feat(app): 添加重新生成应用配置文件功能
...
- 在AppController中新增regenerateConfigFile接口
- 在AppService中实现重新生成配置文件的业务逻辑
- 记录重新生成配置文件的操作日志
- 在前端API中添加重新生成功能调用方法
- 在应用详情页面添加重新生成按钮和确认对话框
- 实现重新生成配置文件的前端交互逻辑
2026-06-02 17:43:36 +08:00
XuqmGroup
348c04ba72
refactor(app): 将许可证文件功能替换为配置文件功能
...
- 替换 LicenseFileCrypto 为 ConfigFileCrypto 加密类
- 将 /license-file 相关接口重命名为 /config-file
- 修改数据库实体中的 licenseFileContent 字段为 configFileContent
- 更新前端 API 调用从 downloadLicenseFile 改为 downloadConfigFile
- 将安全中心的 License 文件解析功能改为 Config 文件解析
- 更新文件扩展名从 .xuqmlicense 改为 .xuqmconfig
- 修改后端服务方法 ensureLicenseFile 为 ensureConfigFile
- 调整加密解密逻辑以支持新的配置文件格式
2026-06-02 17:35:29 +08:00
XuqmGroup
62966dcf20
feat(ui): 添加服务应用切换记忆功能并优化菜单结构
...
- 在IM、授权、推送、版本管理视图中添加最近使用应用的记忆功能
- 新增serviceApp工具函数用于存储和获取最近使用的应用
- 将系统日志、数据库、操作日志菜单项归类到运维管理子菜单
- 修复实体类索引字段命名不一致问题
- 在安全配置中启用方法级别安全注解支持
2026-05-28 10:53:13 +08:00
XuqmGroup
db3158d2e4
refactor(logs): 更新操作日志视图中的推送服务注释
...
- 修改了推送服务相关的注释说明
- 移除了重复的用户信息编辑和状态变更操作日志条目
- 添加了关于与im-service重复的说明注释
2026-05-27 17:30:03 +08:00
XuqmGroup
5b2a89e964
feat(logs): 添加操作日志功能支持推送和授权模块
...
- 在JwtAuthFilter中设置认证详情到claims
- 为license-service添加LicenseOperationLog相关实体、仓库和服务
- 为push-service添加PushOperationLog相关实体、仓库和服务
- 在LicenseAdminController中注入并使用操作日志记录授权变更
- 在PushManagementController中注入并使用操作日志记录推送操作
- 更新OperationLogService以支持从JWT claims获取用户信息
- 扩展OperationLogService支持推送和授权操作日志查询
- 在前端OperationLogView中添加推送和授权日志选项卡
- 添加LicenseOperationLog和PushOperationLog接口定义
- 实现推送和授权日志的数据加载和分页功能
- 添加操作类型和资源类型的标签映射支持
2026-05-27 13:36:16 +08:00
XuqmGroup
908916fefd
feat(logs): 添加即时通讯操作日志并优化界面显示
...
- 在 operation log 视图中新增即时通讯标签页
- 为 IM 服务添加操作摘要、资源类型等字段支持
- 统一三个标签页的操作类型和资源类型的中文映射
- 重构操作摘要生成功能,区分租户平台、即时通讯和版本管理
- 优化表格列宽度和布局显示
- 添加 IM 日志的数据加载和分页功能
- 新增 IM 应用选择和页面切换事件处理
- 在 API 定义中添加 summary 字段支持
2026-05-27 12:52:29 +08:00
XuqmGroup
4b13f64966
feat(log): 优化操作日志记录和展示功能
...
- 在OperationLogEntity实体中新增summary和ipAddress字段存储摘要和IP信息
- 修改operationLogService.record方法支持传入操作摘要信息
- 实现客户端IP地址解析功能,支持X-Forwarded-For和X-Real-IP头
- 更新系统更新服务中的数据库表结构迁移逻辑,增加NOT NULL列处理
- 优化前端操作日志页面展示,添加标签分类和详情弹窗功能
- 在系统更新流式响应中增加网络连接异常处理机制
- 添加Nginx代理配置中的缓冲区设置以支持实时日志流式传输
2026-05-27 12:27:43 +08:00
XuqmGroup
38e138f955
fix(core): 统一全局异常处理器并添加数据库管理功能
...
- 在所有服务的GlobalExceptionHandler中添加HttpServletRequest参数以记录请求上下文
- 统一异常响应格式为ResponseEntity<ApiResponse<Void>>并改进错误日志记录
- 添加对多种异常类型的处理包括参数验证、请求方法不支持、权限拒绝等
- 为业务异常添加不同级别的日志记录(warn/error)和状态码映射
- 在前端系统API中新增数据库表管理相关接口定义和实现
- 添加数据库表列表、列信息和数据查询的API调用函数
2026-05-27 11:51:19 +08:00
XuqmGroup
ba48d9f535
feat(components): 添加新的Element Plus组件支持
...
- 集成ElCheckbox组件支持
- 集成ElSkeleton组件支持
- 集成ElTabs和ElTabPane标签页组件支持
2026-05-23 00:32:18 +08:00
XuqmGroup
ad734ff204
feat(system-logs): 两端平台新增服务日志查看页面
...
- tenant-platform: /system-logs 页面,私有化模式下侧边栏显示;支持服务切换、
行数选择、刷新间隔配置(5s/10s/30s/1min)、自动滚动
- ops-platform: /system-logs 页面,始终可见;复用相同交互,通过 ROLE_OPS 接口获取日志
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-05-22 23:22:58 +08:00
XuqmGroup
e999d4d443
feat(system): 添加系统版本查询和数据库迁移功能
...
- 移除 license-service 中 DeviceEntity 的 device_id 唯一约束注解
- 添加 /api/system/version 接口用于查询当前部署版本
- 实现数据库 schema 版本化迁移机制
- 添加自动执行数据库迁移的功能
- 在前端安全中心界面显示当前版本和迁移状态
- 优化配置文件修复逻辑和代码结构
2026-05-22 23:04:36 +08:00
XuqmGroup
ee20767d57
fix(security-center): add missing isMobile ref and fix Jenkins build failure handling
...
- Add isMobile reactive ref with resize listener in SecurityCenterView
to fix TypeScript build error TS2339
- Fix Jenkinsfile: use '|| exit /b %ERRORLEVEL%' after docker build/push
and ssh deploy commands so Windows bat steps actually fail the pipeline
when a command returns non-zero exit code
Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
2026-05-22 19:33:38 +08:00
XuqmGroup
a8db0519ae
feat(security-center): add license file parser
...
- SecurityCenterView: add license file upload/parse card with ElUpload and ElDescriptions
- appApi: add parseLicenseFile() calling POST /api/apps/license/parse
Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
2026-05-22 18:38:17 +08:00
XuqmGroup
655c5bc598
web: decouple license file download from license service status
...
Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
2026-05-22 17:57:01 +08:00
XuqmGroup
e965c012e6
feat(security-center): add reset container operation alongside update
...
- system.ts: extract streamOperation helper; add streamSystemReset export
- SecurityCenterView: replace single update button with update/reset descriptions table; shared dialog driven by operationType ref
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-05-22 15:33:35 +08:00
XuqmGroup
d0b7a51c2c
fix(version): 修复版本管理中文件删除按钮文本显示问题
...
- 删除按钮文本从"删除重新上传"改为"删除"
- 保持原有的删除功能不变
- 优化界面文本简洁性
2026-05-21 18:39:34 +08:00
XuqmGroup
7465ee9b65
fix(version): 修复应用包上传文件为空时的处理逻辑
...
- 添加文件存在性检查避免空值传递
- 调整代码顺序确保正确的执行流程
- 防止因空文件导致的应用包检测异常
- 优化上传表单的数据初始化逻辑
2026-05-21 18:31:21 +08:00
XuqmGroup
293df1f821
fix(update): 修复版本列表排序并改进Android包上传功能
...
- 将版本查询排序从versionCode改为createdAt以正确显示最新版本
- 为Android包上传表单添加已上传文件显示区域
- 实现删除已上传文件的功能以便重新上传
- 添加上传组件引用以支持文件清除操作
- 增加Document和Delete图标导入用于文件管理界面
- 添加已上传文件信息的样式和布局支持
2026-05-21 18:20:06 +08:00
XuqmGroup
cfe8d19da9
fix: 修正服务端 UTC LocalDateTime 在浏览器中的解析偏差
...
Jackson 配置 time-zone: UTC,LocalDateTime 序列化为不含时区后缀的
ISO 字符串(如 "2026-05-21T14:30:00")。浏览器将此类字符串视为本地
时间,导致非中国时区或非 UTC+8 环境出现 8 小时偏差。
修复:formatTime 对无时区后缀的 ISO 字符串补充 'Z',确保按 UTC 解析
后再转换为北京时间。
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-05-21 16:49:55 +08:00
XuqmGroup
f3c58866df
feat(license): 支持在租户平台修改 License 过期时间
...
描述详情框中的过期时间行增加内联日期选择器,与最大设备数保持
相同的行内编辑交互,支持设置具体日期或留空(永久有效)。
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-05-21 16:24:39 +08:00
XuqmGroup
c4373c8cc1
feat: 全平台时间显示统一为北京时间 (Asia/Shanghai)
...
新增 formatTime 工具函数,强制使用 Asia/Shanghai 时区,
替换两个平台所有视图中裸 toLocaleString('zh-CN') 调用。
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-05-21 16:09:55 +08:00
XuqmGroup
2b7857a820
fix(app-detail): License 文件下载行简化为纯下载按钮
...
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-05-21 15:31:53 +08:00
XuqmGroup
3c98850a36
feat(app-detail): 下载 license 文件移至应用信息卡片,附 SDK 接入引导
...
- 授权管理页不再显示下载入口
- 应用信息卡片新增 "SDK 接入文件" 行(LICENSE 开通后可见),
包含下载按钮和 autoInitialize 使用说明
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-05-21 15:25:17 +08:00
XuqmGroup
ef0876fc5d
feat(security): 一键更新 UI + 私有/公有化条件渲染
...
- 安全中心按部署模式条件显示:PRIVATE 显示更新卡片,PUBLIC 显示迁移卡片
- 新增 api/system.ts:getDeploymentStatus + streamSystemUpdate(流式日志)
- 更新进度用暗色终端风格日志框展示,自动滚动到底部
- RESTART_SELF 事件后轮询服务恢复,最长等待 90s
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-05-21 14:47:10 +08:00
XuqmGroup
66129cb89d
feat(license): 租户平台新增最大设备数编辑,ops 彻底移除 license 管理入口
...
ops-platform:
- AppDetailView: 移除整个 License 授权管理卡片(含设备数查看和 maxDevices 编辑)
- ops.ts: 移除 LicenseStatusInfo 类型、getAppLicense / updateMaxDevices API
tenant-platform:
- license.ts: 新增 updateAppLicense() 调用 PATCH /api/license/admin/apps/{appKey}
- LicenseManagementView: 「最大设备数」旁新增「修改」按钮,
弹出行内 InputNumber 编辑,保存后刷新显示
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-05-21 12:47:03 +08:00
XuqmGroup
290a6999fe
feat(deploy): 完成私有化部署全流程验收
...
- 更新部署进度文档,标记P5-02/P5-03为已完成状态
- 修复中文乱码问题,MySQL数据层使用UNHEX函数配合nginx字符集设置
- 配置im-service和update-service的内部服务URL,从127.0.0.1改为Docker服务名
- 实现全功能验收,nginx为所有服务添加路由映射并返回正确的状态码
- 创建私有化部署默认信息文档,记录完整的部署配置和访问地址
- 添加部署清理脚本clean.sh,支持一键清理容器、配置和数据目录
- 更新敏感配置模板,添加详细的密码和密钥配置说明
- 优化前端实时消息轮询机制,通过WebSocket心跳检测决定是否启用HTTP轮询回退
2026-05-19 19:23:28 +08:00
XuqmGroup
3900d25d51
feat(tenant-platform): migration key UI + app market publish options
...
- Add migrate API client (request-code / generate-key)
- SecurityCenterView: 私有化部署迁移 card with email verify → one-time key dialog
- VersionManagementView: remove preflight check dialog; open submit directly
- VersionManagementView: replace 手动上架/审核后自动/定时 with 立即上架/计划上架 only
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-05-19 15:12:56 +08:00
XuqmGroup
b6f2aedc70
docs(private): 更新私有化SDK设计文档添加配置管理和错误码规范
...
- Flutter包名格式从xuqm_private_flutter_*改为xuqm_private_*
- 添加configVersion字段用于追踪配置变更,格式为YYYY.MM.DD-序号
- 添加配置版本管理说明,包含schemaVersion兼容性策略
- 添加配置热更新机制,支持冷加载和热加载两种方式
- 添加多环境配置支持,可通过activeProfile指定生效环境
- 添加统一错误码规范,覆盖配置缺失、格式错误、版本不兼容等场景
- 更新验收标准,包含热更新、多环境切换、错误码一致性要求
- 添加私有化开发计划中的错误码规范、文档同步、数据迁移等任务
- 补充MySQL运维细节、证书自动续期、监控告警、日志收集等部署要求
- 添加性能基准指标,包含HTTP API、WebSocket、文件传输等性能要求
- 修复应用商店审核状态轮询中的逻辑错误,添加小米商店特殊处理
- 更新前端界面显示审核版本信息,优化状态刷新逻辑
2026-05-18 19:17:44 +08:00
XuqmGroup
a1e4d5741b
docs(private): 完善私有化部署开发计划和设计规范
...
- 增加实时进度和交接规则,定义任务状态枚举和更新格式
- 创建任务进度台账,涵盖P0-P5阶段全部开发任务
- 补充部署仓库交付边界确认和进度审计规范
- 完善MySQL/Redis双模式支持,增加external/managed选项
- 增加离线部署、安全治理、可观测性等完整交付能力
- 更新仓库结构设计,增加secrets.env、observability、data目录
- 补充健康检查、诊断脚本、升级回滚、备份恢复详细要求
- 优化应用商店审核状态查询逻辑,增加手动刷新接口
- 修复小米和VIVO商店状态查询中的版本匹配逻辑错误
- 增加缓存键版本隔离,防止不同版本状态混淆
- 优化厂商API连通性检查和审核状态轮询机制
2026-05-18 19:00:38 +08:00
XuqmGroup
b77ccc663a
feat(private-deploy): 支持 MySQL/Redis 外部连接和托管模式部署
...
- 添加 external 和 managed 两种数据库/缓存模式支持
- 实现 MySQL/Redis 托管安装脚本和配置向导
- 支持客户自备连接或部署脚本新建基础设施
- 更新部署文档说明不同模式的配置和验证要求
- 添加应用版本防重复上传和删除功能
- 实现应用商店预提交检查和发布计划功能
2026-05-18 18:37:10 +08:00
XuqmGroup
57f8b36fab
docs(deploy): 移除 Jenkins 配置和 Android Demo 计划文档
...
- 删除 jenkins-setup.md 完整的 Jenkins 服务配置指南
- 更新 README.md 部署文档标题为公有化部署文档
- 添加私有化部署说明章节和相关设计文档链接
- 从 REST API 设计文档中移除 demo-service 相关描述
- 更新推送架构图中业务服务端描述为客户端服务器
- 删除 android-demo-plan.md Android Demo 开发计划文档
- 删除 multi-platform-im-roadmap.md 多平台 IM 路线图文档
- 删除 java-im-server-sdk-plan.md Java IM 服务端 SDK 计划文档
2026-05-18 17:57:05 +08:00
XuqmGroup
d08a6fd16a
fix(update): remove confusing '直接上传' badge from store review card
...
The badge was not meaningful to users who just need to know if the
version is live on the store. Removed it — the '已上线' state label is
sufficient.
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-05-18 17:53:16 +08:00
XuqmGroup
1310488835
feat(update): show 已上线 state and pre-existing badge for store review
...
- reviewLabel: APPROVED now displays '已上线' instead of '已通过'
- parseStoreReview: extract liveOnStore and preExisting fields from JSON
- Store review dialog card: show '直接上传' badge when preExisting=true,
indicating the version was published directly to the store rather than
via the platform submission flow
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-05-18 17:30:38 +08:00
XuqmGroup
416783047c
feat(tenant-platform): editable changelog with audit trail in version table
...
Adds an edit button (pencil icon) on each row's changelog cell.
Clicking it opens a dialog pre-filled with the current text; saving
calls PATCH /app/{id}/changelog and refreshes the list and op-log.
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-05-18 16:48:20 +08:00
XuqmGroup
7d100a9efc
fix(auth): use auth.logout() instead of localStorage.removeItem in interceptors
...
When a 401/expired-token fires in client.ts or file.ts, the handlers were
clearing localStorage but not the Pinia auth.token ref. The route guard
reads Pinia, so router.push('/login') was immediately bounced back to
/dashboard, leaving the user in a ghost-authenticated state where all API
calls failed with 401.
Calling auth.logout() clears both Pinia state and localStorage atomically,
so the route guard correctly allows the redirect to /login.
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-05-18 14:12:03 +08:00
XuqmGroup
eba5133fed
fix: file upload 403 no longer clears token or triggers logout
...
403 from the file service (e.g. permissions/CORS error) was incorrectly
treated as an auth failure, removing the token and redirecting to login.
403 should only show an error message; only 401 indicates an auth failure.
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-05-18 13:31:11 +08:00
XuqmGroup
4b8eea2622
fix: remove orphaned container before docker compose recreate in correct Jenkinsfile
...
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-05-17 12:44:14 +08:00
XuqmGroup
c54ba18f8a
fix deploy: remove orphaned container before docker compose recreate
...
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-05-17 12:35:05 +08:00