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
XuqmGroup
36deeb218f
remove manual review button; store review is now fully automated via polling
...
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-05-17 12:15:06 +08:00
XuqmGroup
42b1868f54
fix: submit dialog pre-deselects and disables already-reviewing stores
...
- parseStoreReview state shown per store with review tag
- UNDER_REVIEW/APPROVED stores are disabled + labeled "审核进行中,将跳过"
- openSubmitStoreDialog filters them out of default selectedStores
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-05-16 15:58:56 +08:00
XuqmGroup
61dd09763a
feat: add app transfer, parallel upload toggle, webhook type config, fix Chinese encoding in JWT
...
- ops-platform: add 一键转移 button and dialog to AppListView; add transferApp API call
- tenant-platform/update: parallel upload toggle in 凭据配置 tab; REVIEW_WEBHOOK notifyType select (钉钉/企微/飞书/自定义); select field support in store config dialog with visibleWhen
- tenant-platform/jwt: fix Chinese garble in right-corner nickname by decoding JWT payload as UTF-8 via TextDecoder instead of raw atob()
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-05-16 15:34:42 +08:00
XuqmGroup
6b891bee92
feat(tenant-platform): service activation realtime + store review retry
...
- Add IM real-time notification for service activation approval/rejection
(LicenseManagementView, PushManagementView, AppDetailView)
- Add retry button for FAILED and REJECTED stores in version review detail
- Refactor storeReviewRealtime to single shared IM connection
- Bump @xuqm/vue3-sdk to 0.2.3 (fixes sendSync crash when SDK uninitialized)
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-05-16 14:27:02 +08:00
XuqmGroup
ce05fa4fe3
fix: sync store review detail dialog items when loadAppVersions refreshes table data
2026-05-16 13:28:58 +08:00
XuqmGroup
e912a5e65e
docs: remove WebSocket doc, strip Update from server SDKs, add Harmony license
...
- Remove docs/server/websocket.md and sidebar entry
- Server API: remove Update 服务 section (only IM + Push)
- Go/Python/Java SDK docs: remove Update from intro and capability tables
- RN license: remove manual initialize(baseUrl) section
- Flutter license: remove manual initialize(baseUrl) section
- Flutter/Harmony: fix git URLs to xuqmGroup org
- Harmony: add LicenseSDK to modules table and create harmony/license.md
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-05-16 11:56:40 +08:00
Dev
88e5a70d87
feat: 授权管理页面+路由,IM状态30s轮询,移除接入文档,ops去除appKey/平台列,Jenkinsfile固定main分支
2026-05-16 11:31:21 +08:00
XuqmGroup
b153521a91
docs(flutter/license): use canonical xuqm_flutter_license import path
...
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-05-16 02:47:23 +08:00
XuqmGroup
06436394ed
docs: fix version numbers, add license SDK docs; fix service gating reactivity
...
- Android: correct version header 0.5.x→0.4.x, add sdk-license to module table, update artifact versions to 0.4.10
- iOS: correct min version iOS 14→16, bump version to 0.2.0, update SPM ref to from: "0.2.0"
- RN: fix version 0.3.x→0.2.x, standardize npm registry URL, add @xuqm/rn-license to module table
- Flutter: update git ref to v0.2.2, add xuqm_flutter_license to module tables
- Add new docs: ios/license, rn/push, rn/license, flutter/push, flutter/update, flutter/license
- tenant-platform: make appKey a computed ref in Push/VersionManagementView to fix service gating reactivity on route change
- tenant-platform: add requestActivation API endpoint
- tenant-platform: add IM service gating UI (checkServiceEnabled + activation dialog)
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-05-16 02:23:57 +08:00
XuqmGroup
65914b0ec2
feat: ops租户筛选 + 服务去平台化 + 补全Flutter/H5/小程序文档
...
- AppListView: 添加租户模糊搜索筛选,显示租户名称
- AppDetailView: 功能服务表去掉平台列,按服务类型展示
- ops.ts: listApps 支持 tenantId 参数,AppItem 添加 tenantName
- 新增 Flutter/H5/小程序 setup.md 和 im.md 文档
- config.ts: sidebar 添加 Flutter/H5/小程序子页面
Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
2026-05-16 00:26:53 +08:00
XuqmGroup
ceb22c6286
fix: Jenkins checkout 使用 BRANCH 参数而非 scm 默认分支
...
checkout scm 忽略 BRANCH 参数,使用 Jenkins 任务配置的 SCM 分支。
改为显式 checkout 并引用 params.BRANCH,确保构建最新代码。
Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
2026-05-15 23:56:46 +08:00
XuqmGroup
b8831de24a
chore: update yarn.lock
...
Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
2026-05-15 23:22:16 +08:00
XuqmGroup
038d862838
License改造:ops平台管理最大设备数、审批有效期、License SDK文档
...
- ops平台AppDetailView添加License授权管理卡片(内联编辑最大设备数)
- 服务开通审批对话框LICENSE类型支持选择有效期
- ops API新增getAppLicense/updateMaxDevices方法
- 文档站新增Android License SDK集成文档
- setup.md添加sdk-license依赖和ProGuard规则
Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
2026-05-15 22:39:43 +08:00
XuqmGroup
c0f9bc1c47
一大波改动
2026-05-15 22:11:03 +08:00
XuqmGroup
c1c80e1a7c
Show app license device list directly
2026-05-15 21:42:17 +08:00
XuqmGroup
690d930a17
Show license device user info
2026-05-15 21:30:09 +08:00
XuqmGroup
02d64f1cb9
Add tenant license management
2026-05-15 21:00:24 +08:00
XuqmGroup
a917932a2d
一大波改动
2026-05-15 16:47:22 +08:00
XuqmGroup
1552bfb561
fix: add --platform to docker pull and handle pull failure
2026-05-14 15:37:24 +08:00
XuqmGroup
dd63093a85
fix: add --platform=linux/amd64 to Jenkinsfiles for cross-platform build
2026-05-14 15:29:11 +08:00
XuqmGroup
4d98ae151f
fix: add --platform=linux/amd64 to Dockerfiles for cross-platform build
2026-05-14 15:20:45 +08:00
XuqmGroup
041456805e
docs(android-sdk): 添加 Android SDK 完整文档与模块配置
...
- 新增 Android SDK 主文档,包含模块结构、集成方式、快速开始指南
- 添加 sdk-core、sdk-im、sdk-push、sdk-update、sdk-webview 各模块详细说明
- 配置各模块的 build.gradle.kts 文件,设置依赖和发布选项
- 更新 gradle.properties 版本配置和编译参数
- 重构 XWebViewView 组件,增加相机权限、文件选择、下载拦截功能
- 添加 XWebViewTypes.kt 定义配置类和控制器接口
- 集成 Flutter WebView 桥接代码,实现跨平台功能对齐
2026-05-11 15:21:54 +08:00
XuqmGroup
8f27adfe06
feat: split web jenkins jobs
2026-05-09 16:22:13 +08:00
XuqmGroup
09891bf46e
docs(deploy): 添加完整的部署文档和配置示例
...
- 新增 compose.production.yaml 和 compose.production.server.yaml 部署配置
- 添加 nginx.dev.xuqinmin.com.conf 和 nginx.sentry.xuqinmin.com.conf 反向代理配置
- 创建详细的部署指南文档 deploy/README.md,涵盖架构设计和部署步骤
- 添加前端访问文档 web/README.md,包含线上地址和接口说明
- 补充平台文档总览 README.md,整合各模块文档入口
- 配置多服务容器化部署,包括 tenant-service、im-service、push-service 等
- 设置外部数据库和 Redis 连接配置,确保服务间正确通信
- 配置 WebSocket 和 API 路由转发规则,支持实时通信和版本更新服务
2026-05-09 14:53:43 +08:00
Jenkins CI
3151df4054
ci(jenkins): optimize Jenkinsfile for Windows node
2026-05-08 18:46:59 +08:00
XuqmGroup
c11e8f6d71
feat(im): 添加平台事件通知功能支持应用审核状态实时更新
...
- 新增 ImPlatformEventController 提供令牌获取接口
- 新增 InternalImPlatformEventController 处理内部通知请求
- 实现 ImPlatformEventService 核心服务逻辑包括令牌签发和消息推送
- 添加 StoreReviewImNotifier 在更新服务中触发审核状态变更通知
- 在前端平台中集成实时审核状态更新功能
- 配置各项目环境版本管理文件 (.java-version, .nvmrc)
- 更新 Docker 忽略文件和 Maven 配置以优化构建流程
2026-05-08 18:32:46 +08:00
XuqmGroup
168bf4662c
docs(deploy): 添加部署文档和安全设计规范
...
- 新增 XuqmGroup 部署文档,包含部署方案、架构建议和部署步骤
- 添加安全设计规范,涵盖密码安全、AppSecret验证和服务端API认证
- 补充平台REST API规范,定义Server-to-Server调用接口和错误码
- 创建Java IM服务端SDK计划文档,规划Maven包发布和接口实现
2026-05-08 18:32:00 +08:00
XuqmGroup
55826db8c4
feat(update): 添加应用更新检查功能支持用户ID参数
...
- 在UpdateApi接口中新增可选的userId查询参数
- 新增UpdateSDK对象用于统一管理应用更新逻辑
- 实现应用版本检查、下载安装和APK文件处理功能
- 添加下载URL规范化处理逻辑
- 在Flutter SDK中新增update模块实现跨平台更新功能
- 在iOS SDK中新增UpdateSDK类提供应用更新检查接口
- 支持Android和iOS平台的应用商店跳转功能
- 添加React Native SDK的更新检查和插件注册功能
- 实现RN Bundle的检查、下载和缓存机制
2026-05-08 12:00:34 +08:00
XuqmGroup
832d180ff3
feat: add drag upload for rn bundles
2026-05-08 10:25:50 +08:00
XuqmGroup
bcdbf6fcc5
feat: add drag upload for app version dialog
2026-05-08 10:22:39 +08:00
XuqmGroup
775e6c85e8
feat: unify app identity on appKey in platforms
2026-05-08 10:09:22 +08:00
XuqmGroup
6eeea6f268
chore: sync local changes
2026-05-07 19:39:47 +08:00