feat: update app refresh entry and release metadata
This commit is contained in:
parent
b29e6a67f8
commit
81d4c17ae7
@ -1,5 +1,23 @@
|
|||||||
# App 更新说明
|
# App 更新说明
|
||||||
|
|
||||||
|
# 1.0.10
|
||||||
|
- 手机 App 左上角菜单新增“刷新页面”入口(仅 App 端显示)
|
||||||
|
- 加载界面(正在连接服务器)新增“刷新页面”按钮
|
||||||
|
- 继续优化 App 内更新下载链路稳定性
|
||||||
|
|
||||||
|
# 1.0.9-test1
|
||||||
|
- 测试版本:验证 App 内下载更新链路(DownloadManager)是否在不同浏览器环境下稳定工作
|
||||||
|
|
||||||
|
# 1.0.9
|
||||||
|
- 修复 App 内点击“更新”后依赖外部浏览器下载导致部分机型失败的问题
|
||||||
|
- 新增 Android JS Bridge 下载通道:优先使用系统 DownloadManager 直接下载 APK
|
||||||
|
- 前端下载逻辑增加桥接优先与浏览器回退,提升下载成功率
|
||||||
|
|
||||||
|
# 1.0.8
|
||||||
|
- 同步最新对话压缩体验:压缩中状态提示更稳定,压缩完成后反馈更清晰
|
||||||
|
- 优化压缩后会话切换与列表刷新表现,减少需要手动刷新的情况
|
||||||
|
- 修复电脑端摘要行与正式输出内容的对齐问题
|
||||||
|
|
||||||
# 1.0.7
|
# 1.0.7
|
||||||
- 应用图标替换为新的机器人插画 PNG 版本
|
- 应用图标替换为新的机器人插画 PNG 版本
|
||||||
|
|
||||||
|
|||||||
@ -16,8 +16,8 @@ android {
|
|||||||
applicationId = "com.cyjai.agent"
|
applicationId = "com.cyjai.agent"
|
||||||
minSdk = 24
|
minSdk = 24
|
||||||
targetSdk = 35
|
targetSdk = 35
|
||||||
versionCode = 8
|
versionCode = 12
|
||||||
versionName = "1.0.7"
|
versionName = "1.0.10"
|
||||||
|
|
||||||
testInstrumentationRunner = "androidx.test.runner.AndroidJUnitRunner"
|
testInstrumentationRunner = "androidx.test.runner.AndroidJUnitRunner"
|
||||||
}
|
}
|
||||||
|
|||||||
@ -5,10 +5,10 @@
|
|||||||
|
|
||||||
<application
|
<application
|
||||||
android:allowBackup="true"
|
android:allowBackup="true"
|
||||||
android:icon="@drawable/ic_launcher_photo"
|
android:icon="@drawable/ic_launcher_photo_v2"
|
||||||
android:label="@string/app_name"
|
android:label="@string/app_name"
|
||||||
android:networkSecurityConfig="@xml/network_security_config"
|
android:networkSecurityConfig="@xml/network_security_config"
|
||||||
android:roundIcon="@drawable/ic_launcher_photo"
|
android:roundIcon="@drawable/ic_launcher_photo_v2"
|
||||||
android:supportsRtl="true"
|
android:supportsRtl="true"
|
||||||
android:theme="@style/Theme.AgentWebView"
|
android:theme="@style/Theme.AgentWebView"
|
||||||
android:usesCleartextTraffic="false">
|
android:usesCleartextTraffic="false">
|
||||||
|
|||||||
Binary file not shown.
|
After Width: | Height: | Size: 1.5 MiB |
1
static/icons/refresh-cw.svg
Normal file
1
static/icons/refresh-cw.svg
Normal file
@ -0,0 +1 @@
|
|||||||
|
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" width="24" height="24" fill="none" stroke="#000000" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" style="opacity:1;"><path d="M3 12a9 9 0 0 1 9-9a9.75 9.75 0 0 1 6.74 2.74L21 8"/><path d="M21 3v5h-5m5 4a9 9 0 0 1-9 9a9.75 9.75 0 0 1-6.74-2.74L3 16"/><path d="M8 16H3v5"/></svg>
|
||||||
|
After Width: | Height: | Size: 355 B |
@ -33,6 +33,9 @@
|
|||||||
<div class="loading-copy">
|
<div class="loading-copy">
|
||||||
<h2>加载中...</h2>
|
<h2>加载中...</h2>
|
||||||
<p>正在连接服务器,请稍候</p>
|
<p>正在连接服务器,请稍候</p>
|
||||||
|
<button type="button" class="loading-refresh-btn" @click="refreshCurrentPage">
|
||||||
|
刷新页面
|
||||||
|
</button>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
@ -409,7 +412,7 @@
|
|||||||
</button>
|
</button>
|
||||||
<button
|
<button
|
||||||
type="button"
|
type="button"
|
||||||
class="dropdown-item mobile-menu-item"
|
class="dropdown-item mobile-menu-item mobile-menu-item--personal"
|
||||||
aria-label="个人空间"
|
aria-label="个人空间"
|
||||||
@click="handleMobilePersonalClick"
|
@click="handleMobilePersonalClick"
|
||||||
>
|
>
|
||||||
@ -425,6 +428,16 @@
|
|||||||
<img class="mobile-menu-icon" :src="mobileMenuIcons.newChat" alt="" aria-hidden="true" />
|
<img class="mobile-menu-icon" :src="mobileMenuIcons.newChat" alt="" aria-hidden="true" />
|
||||||
<div class="item-label">新建对话</div>
|
<div class="item-label">新建对话</div>
|
||||||
</button>
|
</button>
|
||||||
|
<button
|
||||||
|
v-if="isAppShell"
|
||||||
|
type="button"
|
||||||
|
class="dropdown-item mobile-menu-item mobile-menu-item--refresh"
|
||||||
|
aria-label="刷新页面"
|
||||||
|
@click="handleMobileRefreshClick"
|
||||||
|
>
|
||||||
|
<img class="mobile-menu-icon" :src="mobileMenuIcons.refresh" alt="" aria-hidden="true" />
|
||||||
|
<div class="item-label">刷新页面</div>
|
||||||
|
</button>
|
||||||
</div>
|
</div>
|
||||||
</transition>
|
</transition>
|
||||||
<transition name="header-menu">
|
<transition name="header-menu">
|
||||||
@ -535,10 +548,14 @@ import VirtualMonitorSurface from './components/chat/VirtualMonitorSurface.vue';
|
|||||||
import VideoPicker from './components/overlay/VideoPicker.vue';
|
import VideoPicker from './components/overlay/VideoPicker.vue';
|
||||||
|
|
||||||
const mobilePanelIcon = new URL('../icons/align-left.svg', import.meta.url).href;
|
const mobilePanelIcon = new URL('../icons/align-left.svg', import.meta.url).href;
|
||||||
|
const isAppShell =
|
||||||
|
typeof window !== 'undefined' &&
|
||||||
|
(new URLSearchParams(window.location.search).has('app_shell') || Boolean((window as any)?.AndroidThemeBridge));
|
||||||
const mobileMenuIcons = {
|
const mobileMenuIcons = {
|
||||||
workspace: new URL('../icons/folder.svg', import.meta.url).href,
|
workspace: new URL('../icons/folder.svg', import.meta.url).href,
|
||||||
personal: new URL('../icons/user.svg', import.meta.url).href,
|
personal: new URL('../icons/user.svg', import.meta.url).href,
|
||||||
newChat: new URL('../icons/pencil.svg', import.meta.url).href
|
newChat: new URL('../icons/pencil.svg', import.meta.url).href,
|
||||||
|
refresh: new URL('../icons/refresh-cw.svg', import.meta.url).href
|
||||||
};
|
};
|
||||||
|
|
||||||
defineOptions(appOptions);
|
defineOptions(appOptions);
|
||||||
|
|||||||
@ -118,6 +118,18 @@ export const uiMethods = {
|
|||||||
this.uiSetMobileOverlayMenuOpen(false);
|
this.uiSetMobileOverlayMenuOpen(false);
|
||||||
},
|
},
|
||||||
|
|
||||||
|
refreshCurrentPage() {
|
||||||
|
if (typeof window === 'undefined') {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
window.location.reload();
|
||||||
|
},
|
||||||
|
|
||||||
|
handleMobileRefreshClick() {
|
||||||
|
this.uiSetMobileOverlayMenuOpen(false);
|
||||||
|
this.refreshCurrentPage();
|
||||||
|
},
|
||||||
|
|
||||||
closeMobileOverlay() {
|
closeMobileOverlay() {
|
||||||
if (!this.activeMobileOverlay) {
|
if (!this.activeMobileOverlay) {
|
||||||
this.uiCloseMobileOverlay();
|
this.uiCloseMobileOverlay();
|
||||||
|
|||||||
@ -1101,8 +1101,9 @@ if (typeof window !== 'undefined') {
|
|||||||
const bridge = (window as any)?.AndroidThemeBridge;
|
const bridge = (window as any)?.AndroidThemeBridge;
|
||||||
const bridgeVcRaw = bridge && typeof bridge.getAppVersionCode === 'function' ? String(bridge.getAppVersionCode() || '') : '';
|
const bridgeVcRaw = bridge && typeof bridge.getAppVersionCode === 'function' ? String(bridge.getAppVersionCode() || '') : '';
|
||||||
const bridgeVnRaw = bridge && typeof bridge.getAppVersionName === 'function' ? String(bridge.getAppVersionName() || '') : '';
|
const bridgeVnRaw = bridge && typeof bridge.getAppVersionName === 'function' ? String(bridge.getAppVersionName() || '') : '';
|
||||||
const finalVcRaw = vcRaw || bridgeVcRaw;
|
// App 端优先使用 Bridge 实时版本,避免 WebView 恢复旧 URL 参数导致显示过期版本号
|
||||||
const finalVnRaw = vnRaw || bridgeVnRaw;
|
const finalVcRaw = bridgeVcRaw || vcRaw;
|
||||||
|
const finalVnRaw = bridgeVnRaw || vnRaw;
|
||||||
appCurrentVersionCode.value = /^\d+$/.test(finalVcRaw) ? Number(finalVcRaw) : null;
|
appCurrentVersionCode.value = /^\d+$/.test(finalVcRaw) ? Number(finalVcRaw) : null;
|
||||||
appCurrentVersionName.value = finalVnRaw || '';
|
appCurrentVersionName.value = finalVnRaw || '';
|
||||||
}
|
}
|
||||||
|
|||||||
@ -1575,7 +1575,7 @@
|
|||||||
}
|
}
|
||||||
|
|
||||||
/* 个人空间图标稍大一点 */
|
/* 个人空间图标稍大一点 */
|
||||||
.mobile-menu-item:nth-child(3) img.mobile-menu-icon {
|
.mobile-menu-item--personal img.mobile-menu-icon {
|
||||||
width: 26px !important;
|
width: 26px !important;
|
||||||
height: 26px !important;
|
height: 26px !important;
|
||||||
}
|
}
|
||||||
@ -2473,6 +2473,23 @@
|
|||||||
color: var(--claude-text-secondary);
|
color: var(--claude-text-secondary);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
.loading-refresh-btn {
|
||||||
|
margin-top: 14px;
|
||||||
|
border: 1px solid var(--claude-border);
|
||||||
|
border-radius: 10px;
|
||||||
|
background: var(--claude-panel);
|
||||||
|
color: var(--claude-text);
|
||||||
|
padding: 8px 14px;
|
||||||
|
font-size: 13px;
|
||||||
|
cursor: pointer;
|
||||||
|
transition: transform 0.18s ease, box-shadow 0.18s ease;
|
||||||
|
}
|
||||||
|
|
||||||
|
.loading-refresh-btn:hover {
|
||||||
|
transform: translateY(-1px);
|
||||||
|
box-shadow: 0 8px 20px rgba(61, 57, 41, 0.14);
|
||||||
|
}
|
||||||
|
|
||||||
.boxes {
|
.boxes {
|
||||||
--size: 34px;
|
--size: 34px;
|
||||||
--duration: 900ms;
|
--duration: 900ms;
|
||||||
|
|||||||
Loading…
Reference in New Issue
Block a user