上半区发版配置、下半区渠道分发,顶部一个应用选择器共用。页面本体拆成 components/AppReleasePanel.vue 与 ChannelAppPanel.vue;/appversion、/channels 只留重定向。 ⚠️ 合的是入口不是表。app_release 与 channel_app 维度不同,两块各读各的接口、 各自提交,绝不能做成一个大表单整包保存——app_release 那一行还被「游客显隐控制」 页共用,后端是「读整行→只覆盖本组→整行写回」,整包提交会在本页保存时清空游客 登录配置。 ⚠️ 菜单 id 仍是 appversion(只改了 label 与 to):存量后台账号的 access 清单里存 的是这个串,改 id 等于让这些账号丢入口。只勾过旧 id channels 的账号由 auth.ts 的 hasAccess 兼容放行。 发版面板同步本次的新口径:线上版本按 Android / iOS 两栏、最低支持版本可留空 (= 线上版本)、判定预览可切平台;上传 APK 传完把直链填进「默认下载地址」输入框 并写进「渠道分发 → 官方渠道(100)」,下方面板随即重拉。 ⚠️ savechannelapp 是整行覆盖,所以写官方渠道地址必须「读整行→只改 address→写回」; getchannelapps 回的是 {items:[...]} 不是裸数组,当成数组取会永远走新建分支、 把官方渠道已有的上架状态/支付渠道清零且不报任何错。 Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>