提交图

104 次代码提交

作者 SHA1 备注 提交日期
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
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