From 4e4186f87a6d9017669f42f5c02e9f6e52968941 Mon Sep 17 00:00:00 2001 From: JOJO <1498581755@qq.com> Date: Tue, 7 Apr 2026 17:12:53 +0800 Subject: [PATCH] fix: polish tutorial/theme copy and align review dialog themes --- android-webview-app/APP_CHANGELOG.md | 12 +++ android-webview-app/app/build.gradle.kts | 4 +- .../overlay/ConversationReviewDialog.vue | 93 ++++++++++--------- .../personalization/PersonalizationDrawer.vue | 12 +-- static/src/stores/tutorial.ts | 2 +- 5 files changed, 68 insertions(+), 55 deletions(-) diff --git a/android-webview-app/APP_CHANGELOG.md b/android-webview-app/APP_CHANGELOG.md index a91583f..013f2b8 100644 --- a/android-webview-app/APP_CHANGELOG.md +++ b/android-webview-app/APP_CHANGELOG.md @@ -1,5 +1,17 @@ # App 更新说明 +# 1.0.18 +- 新增完整「新手教程」系统(高光 + 悬浮说明窗):覆盖桌面端与手机端核心功能入口 +- 教程交互统一优化:仅保留“下一步”,支持自动点击与点击特效,避免误触真实页面 +- 手机端教程新增专属流程:菜单展开、对话记录、工作文件、新建对话、模型/思考模式、个人空间全链路引导 +- 教程定位与层级修复:高光区域更贴合小目标;教程弹窗始终保持最高图层,不再被移动端菜单遮挡 +- 个人空间教程体验优化:教程期间支持滚动查看内容;移动端标签自动横向滚动到可见后再点击;桌面端标签自动纵向滚动后再点击 +- 新增“连接状态指示灯”教程步骤:绿色表示连接正常,红色表示与后端断开 +- 教程入口页精简:移除“已完成/重新开始”状态文案,统一为“开始新手教程” +- 主题命名文案统一:将“Claude 经典”调整为“经典”,并同步更新相关引导文案 +- 模型偏好页优化:移除“默认思考模型”中“思考模式”的“推荐”标记 +- 修复“对话回顾”弹窗多主题适配问题:经典/明亮/夜间主题下的背景、边框、文本、按钮与状态样式统一跟随主题变量 + # 1.0.17 - 登录/注册页改为 Vue 实现,统一前端技术栈 - 登录/注册页接入主题变量体系,自动跟随已保存主题(Claude / 浅色 / 深色) diff --git a/android-webview-app/app/build.gradle.kts b/android-webview-app/app/build.gradle.kts index d2dc829..cd81597 100644 --- a/android-webview-app/app/build.gradle.kts +++ b/android-webview-app/app/build.gradle.kts @@ -16,8 +16,8 @@ android { applicationId = "com.cyjai.agent" minSdk = 24 targetSdk = 35 - versionCode = 19 - versionName = "1.0.17" + versionCode = 20 + versionName = "1.0.18" testInstrumentationRunner = "androidx.test.runner.AndroidJUnitRunner" } diff --git a/static/src/components/overlay/ConversationReviewDialog.vue b/static/src/components/overlay/ConversationReviewDialog.vue index 6207448..2c2f970 100644 --- a/static/src/components/overlay/ConversationReviewDialog.vue +++ b/static/src/components/overlay/ConversationReviewDialog.vue @@ -159,7 +159,7 @@ const formatUpdatedAt = (value: string | number) => { .review-overlay { position: fixed; inset: 0; - background: rgba(18, 19, 22, 0.4); + background: var(--theme-overlay-scrim, rgba(18, 19, 22, 0.4)); backdrop-filter: blur(8px); display: flex; align-items: center; @@ -171,13 +171,13 @@ const formatUpdatedAt = (value: string | number) => { .review-window { width: min(1100px, 96vw); height: min(720px, 88vh); - background: #ffffff; + background: var(--theme-surface-card, var(--claude-panel)); border-radius: 20px; - box-shadow: 0 28px 80px rgba(15, 23, 42, 0.25); + box-shadow: var(--theme-shadow-strong, 0 28px 80px rgba(15, 23, 42, 0.25)); display: flex; flex-direction: column; overflow: hidden; - border: 1px solid rgba(15, 23, 42, 0.06); + border: 1px solid var(--theme-control-border, var(--claude-border)); } .review-header, @@ -186,18 +186,18 @@ const formatUpdatedAt = (value: string | number) => { display: flex; align-items: center; justify-content: space-between; - background: rgba(249, 248, 245, 0.8); + background: var(--theme-surface-muted, var(--claude-left-rail)); } .review-header .title { font-size: 18px; font-weight: 700; - color: #182033; + color: var(--claude-text); } .review-header .subtitle { font-size: 13px; - color: #6b7280; + color: var(--claude-text-secondary); margin-top: 4px; } @@ -209,11 +209,11 @@ const formatUpdatedAt = (value: string | number) => { .hint { font-size: 12px; - color: #4b5563; + color: var(--claude-text-secondary); padding: 6px 10px; border-radius: 10px; - background: #f3f4f6; - border: 1px solid #e5e7eb; + background: var(--theme-surface-soft, var(--claude-panel)); + border: 1px solid var(--theme-control-border, var(--claude-border)); max-width: 280px; white-space: nowrap; text-overflow: ellipsis; @@ -228,7 +228,7 @@ const formatUpdatedAt = (value: string | number) => { } .review-left { - border-right: 1px solid rgba(15, 23, 42, 0.06); + border-right: 1px solid var(--theme-control-border, var(--claude-border)); padding: 12px 14px 14px; display: flex; flex-direction: column; @@ -240,22 +240,22 @@ const formatUpdatedAt = (value: string | number) => { justify-content: space-between; align-items: center; font-weight: 600; - color: #1f2937; + color: var(--claude-text); margin-bottom: 8px; } .counts { font-size: 12px; - color: #6b7280; + color: var(--claude-text-secondary); } .conversation-list { flex: 1 1 auto; overflow-y: auto; overflow-x: hidden; - border: 1px solid rgba(15, 23, 42, 0.06); + border: 1px solid var(--theme-control-border, var(--claude-border)); border-radius: 12px; - background: #ffffff; + background: var(--theme-surface-card, var(--claude-panel)); padding: 8px; display: flex; flex-direction: column; @@ -272,8 +272,8 @@ const formatUpdatedAt = (value: string | number) => { max-width: 360px; align-self: center; text-align: left; - background: #ffffff; - border: 1px solid rgba(15, 23, 42, 0.08); + background: var(--theme-surface-card, var(--claude-panel)); + border: 1px solid var(--theme-control-border, var(--claude-border)); border-radius: 10px; padding: 14px 14px; cursor: pointer; @@ -284,14 +284,14 @@ const formatUpdatedAt = (value: string | number) => { } .conversation-item:hover { - border-color: rgba(218, 119, 86, 0.4); - box-shadow: 0 6px 18px rgba(15, 23, 42, 0.12); + border-color: var(--claude-accent); + box-shadow: var(--theme-shadow-soft, 0 6px 18px rgba(15, 23, 42, 0.12)); transform: translateY(-1px); } .conversation-item.active { - border-color: rgba(218, 119, 86, 0.8); - box-shadow: 0 8px 22px rgba(218, 119, 86, 0.2); + border-color: var(--claude-accent-strong); + box-shadow: 0 8px 22px rgba(218, 119, 86, 0.22); } .conversation-item.current { @@ -303,7 +303,7 @@ const formatUpdatedAt = (value: string | number) => { align-items: center; gap: 8px; font-weight: 600; - color: #1f2937; + color: var(--claude-text); } .conversation-item .title { @@ -316,8 +316,8 @@ const formatUpdatedAt = (value: string | number) => { .conversation-item .tag { padding: 2px 8px; border-radius: 999px; - background: rgba(79, 70, 229, 0.12); - color: #4f46e5; + background: var(--theme-surface-soft, rgba(79, 70, 229, 0.12)); + color: var(--claude-text-secondary); font-size: 12px; } @@ -329,14 +329,14 @@ const formatUpdatedAt = (value: string | number) => { .conversation-item .meta { margin-top: 6px; font-size: 12px; - color: #6b7280; + color: var(--claude-text-secondary); display: flex; gap: 10px; } .empty { text-align: center; - color: #6b7280; + color: var(--claude-text-secondary); padding: 20px 0; } @@ -351,7 +351,7 @@ const formatUpdatedAt = (value: string | number) => { flex-direction: column; padding: 12px; min-height: 0; - background: #ffffff; + background: var(--theme-surface-card, var(--claude-panel)); } .preview-header { @@ -359,20 +359,20 @@ const formatUpdatedAt = (value: string | number) => { justify-content: space-between; align-items: center; font-weight: 600; - color: #1f2937; + color: var(--claude-text); padding: 8px 0; } .preview-count { font-size: 12px; - color: #6b7280; + color: var(--claude-text-secondary); } .preview-box { flex: 1 1 auto; - border: 1px solid rgba(15, 23, 42, 0.06); + border: 1px solid var(--theme-control-border, var(--claude-border)); border-radius: 12px; - background: #ffffff; + background: var(--theme-surface-card, var(--claude-panel)); padding: 10px; overflow: auto; width: 100%; @@ -384,7 +384,7 @@ const formatUpdatedAt = (value: string | number) => { gap: 6px; font-family: Menlo, Consolas, 'SFMono-Regular', monospace; font-size: 13px; - color: #1f2937; + color: var(--claude-text); white-space: pre-wrap; word-break: break-all; } @@ -392,13 +392,13 @@ const formatUpdatedAt = (value: string | number) => { .preview-line { padding: 6px 8px; border-radius: 8px; - background: #fff; - border: 1px solid rgba(15, 23, 42, 0.05); + background: var(--theme-surface-soft, var(--claude-panel)); + border: 1px solid var(--theme-control-border, var(--claude-border)); } .placeholder { text-align: center; - color: #4b5563; + color: var(--claude-text-secondary); display: flex; flex-direction: column; gap: 8px; @@ -421,11 +421,11 @@ const formatUpdatedAt = (value: string | number) => { .text-sub { font-size: 13px; - color: #6b7280; + color: var(--claude-text-secondary); } .placeholder.error .text-main { - color: #b91c1c; + color: #dc2626; } .review-footer { @@ -451,7 +451,7 @@ const formatUpdatedAt = (value: string | number) => { align-items: center; gap: 8px; font-size: 14px; - color: #374151; + color: var(--claude-text); } .toggle-send input { @@ -462,7 +462,7 @@ const formatUpdatedAt = (value: string | number) => { width: 38px; height: 22px; border-radius: 999px; - background: #e5e7eb; + background: var(--theme-control-border, var(--claude-border)); position: relative; transition: background 0.2s ease; } @@ -473,7 +473,7 @@ const formatUpdatedAt = (value: string | number) => { width: 18px; height: 18px; border-radius: 50%; - background: #ffffff; + background: var(--theme-surface-card, #ffffff); box-shadow: 0 1px 3px rgba(0, 0, 0, 0.18); top: 2px; left: 2px; @@ -481,7 +481,7 @@ const formatUpdatedAt = (value: string | number) => { } .toggle-send input:checked + .switch { - background: #d14b31; + background: var(--claude-accent-strong); } .toggle-send input:checked + .switch::after { @@ -493,16 +493,17 @@ const formatUpdatedAt = (value: string | number) => { } .ghost-btn { - background: #f3f4f6; - color: #1f2937; + background: var(--theme-surface-soft, var(--claude-panel)); + color: var(--claude-text); + border: 1px solid var(--theme-control-border, var(--claude-border)); } .ghost-btn:hover:not(:disabled) { - background: #e5e7eb; + background: var(--theme-surface-muted, var(--claude-left-rail)); } .primary-btn { - background: linear-gradient(135deg, #da7756, #d44b31); + background: linear-gradient(135deg, var(--claude-accent), var(--claude-accent-strong)); color: #fffaf0; box-shadow: 0 10px 24px rgba(212, 75, 49, 0.28); } @@ -525,7 +526,7 @@ const formatUpdatedAt = (value: string | number) => { } .review-left { border-right: none; - border-bottom: 1px solid rgba(15, 23, 42, 0.06); + border-bottom: 1px solid var(--theme-control-border, var(--claude-border)); } } diff --git a/static/src/components/personalization/PersonalizationDrawer.vue b/static/src/components/personalization/PersonalizationDrawer.vue index 1470d2c..e5f190b 100644 --- a/static/src/components/personalization/PersonalizationDrawer.vue +++ b/static/src/components/personalization/PersonalizationDrawer.vue @@ -834,7 +834,7 @@
在浅色、深色和 Claude 经典之间一键切换。会立即应用并保存在本地。
+在经典、明亮和夜间之间一键切换。会立即应用并保存在本地。