From 8da53635c44b85d19bd02a6862fd6e446ab4656f Mon Sep 17 00:00:00 2001
From: JOJO <1498581755@qq.com>
Date: Tue, 1 Sep 2026 11:53:29 +0800
Subject: [PATCH] =?UTF-8?q?refactor(personalization):=20=E9=87=8D=E6=96=B0?=
=?UTF-8?q?=E5=BD=92=E7=B1=BB=E4=B8=AA=E4=BA=BA=E7=A9=BA=E9=97=B4=E9=80=89?=
=?UTF-8?q?=E9=A1=B9=E6=89=80=E5=B1=9E=E9=A1=B5=E7=AD=BE?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
- 数据管理页签删除,用量统计并入常规页
- 审核主动取证/续命轮数/token上限移至审核智能体页
- 使用自定义称呼移至个性化页,标题生成模型移至模型页
- 沙箱环境移至工作区与权限页
- 删除个性化页重复渲染的边线/高度开关
- 拆分撞车文案:默认思考模式(模型页)/默认工作模式(工作区页)
- 教程用量步骤锚点改指常规页
---
.../personalization/PersonalizationDrawer.vue | 16 +-
.../personalization/tabs/AppearanceTab.vue | 15 -
.../personalization/tabs/DataTab.vue | 182 ------------
.../personalization/tabs/GeneralTab.vue | 272 ++++++++++--------
.../personalization/tabs/ModelTab.vue | 50 +++-
.../personalization/tabs/PreferencesTab.vue | 50 +---
.../personalization/tabs/ReviewAgentsTab.vue | 81 ++++++
.../personalization/tabs/WorkspaceTab.vue | 158 +++++-----
static/src/locales/en-US/personalization.ts | 8 +-
static/src/locales/zh-CN/personalization.ts | 8 +-
static/src/stores/tutorial.ts | 3 +-
11 files changed, 393 insertions(+), 450 deletions(-)
delete mode 100644 static/src/components/personalization/tabs/DataTab.vue
diff --git a/static/src/components/personalization/PersonalizationDrawer.vue b/static/src/components/personalization/PersonalizationDrawer.vue
index 3620b0ac..1f1bf2a5 100644
--- a/static/src/components/personalization/PersonalizationDrawer.vue
+++ b/static/src/components/personalization/PersonalizationDrawer.vue
@@ -131,8 +131,6 @@
-
-
@@ -174,7 +172,6 @@ import WorkspaceTab from './tabs/WorkspaceTab.vue';
import ContextTab from './tabs/ContextTab.vue';
import ToolsTab from './tabs/ToolsTab.vue';
import FilesTab from './tabs/FilesTab.vue';
-import DataTab from './tabs/DataTab.vue';
import VoiceTab from './tabs/VoiceTab.vue';
import SubAgentsTab from './tabs/SubAgentsTab.vue';
import ReviewAgentsTab from './tabs/ReviewAgentsTab.vue';
@@ -251,7 +248,6 @@ type PersonalTab =
| 'context'
| 'tools'
| 'files'
- | 'data'
| 'voice'
| 'sub-agents'
| 'review-agents'
@@ -266,7 +262,6 @@ const baseTabs = [
{ id: 'context', labelKey: 'personalization.tabContext', icon: 'chatBubble' },
{ id: 'tools', labelKey: 'personalization.tabTools', icon: 'wrench' },
{ id: 'files', labelKey: 'personalization.tabFiles', icon: 'file' },
- { id: 'data', labelKey: 'personalization.tabData', icon: 'layers' },
{ id: 'voice', labelKey: 'personalization.tabVoice', icon: 'mic' },
{ id: 'sub-agents', labelKey: 'personalization.tabSubAgents', icon: 'bot' },
{ id: 'review-agents', labelKey: 'personalization.tabReviewAgents', icon: 'checkbox' }
@@ -863,9 +858,6 @@ onMounted(async () => {
watch(
() => [activeTab.value, visible.value],
([tab, isVisible]) => {
- if (isVisible && tab === 'data') {
- fetchUsageSummary();
- }
if (isVisible && tab === 'sub-agents') {
loadSubAgentRoles();
loadSubAgentSettings();
@@ -874,9 +866,13 @@ watch(
if (isVisible && tab === 'review-agents') {
loadSubAgentModels();
}
- if (isVisible && tab === 'general') {
- // 「标题生成模型」菜单复用子智能体模型库,需在常规页签也加载模型列表
+ if (isVisible && tab === 'model') {
+ // 「标题生成模型」菜单复用子智能体模型库,需在模型页签加载模型列表
loadSubAgentModels();
+ }
+ if (isVisible && tab === 'general') {
+ // 用量统计已并入常规页签,切到时拉取一次
+ fetchUsageSummary();
if (
isAppShell.value &&
!appUpdateInfo.value &&
diff --git a/static/src/components/personalization/tabs/AppearanceTab.vue b/static/src/components/personalization/tabs/AppearanceTab.vue
index 0b7c9122..76d00f94 100644
--- a/static/src/components/personalization/tabs/AppearanceTab.vue
+++ b/static/src/components/personalization/tabs/AppearanceTab.vue
@@ -145,21 +145,6 @@ const {
value: $event.target.checked ? 'route' : 'blank'
})
" />
-
-
-
-
- {{ $t('sandbox.sectionTitle') }}
- {{ $t('sandbox.sectionDesc') }}
-
-
-
{{
- sandboxStatusText
- }}
-
{{
- $t('sandbox.neverAgainSet')
- }}
-
-
-
+
+
+
+
+
+
+
+
{{ $t('personalization.usageInputLabel') }}
+
+ {{ formatTokenCount(usageSummary.total_input_tokens) }}
+
+
+
+
{{ $t('personalization.usageOutputLabel') }}
+
+ {{ formatTokenCount(usageSummary.total_output_tokens) }}
+
+
+
+
+
+
{{ $t('personalization.usageConversationsLabel') }}
+
+ {{ formatTokenCount(usageSummary.total_conversations) }}
+
+
+
+
{{ $t('personalization.usageMessagesLabel') }}
+
+ {{ formatTokenCount(usageSummary.total_user_messages) }}
+
+
+
+
{{ $t('personalization.usageToolsLabel') }}
+
+ {{ formatTokenCount(usageSummary.total_tools) }}
+
+
+
+
+ {{ usageError }}{{ $t('personalization.usageSyncing') }}{{ $t('personalization.usageUpdated', { time: usageUpdatedText }) }}
+
+
{{ $t('personalization.logoutTitle') }}
@@ -213,14 +170,97 @@ const {
diff --git a/static/src/components/personalization/tabs/ModelTab.vue b/static/src/components/personalization/tabs/ModelTab.vue
index 5c514ad3..8638435a 100644
--- a/static/src/components/personalization/tabs/ModelTab.vue
+++ b/static/src/components/personalization/tabs/ModelTab.vue
@@ -12,6 +12,7 @@ const {
personalization,
form,
activeDropdown,
+ closeDropdown,
defaultModelLabel,
filteredModelOptions,
floatingMenuStyle,
@@ -22,6 +23,7 @@ const {
selectDefaultModel,
selectDefaultReasoningEffort,
selectDefaultRunMode,
+ subAgentModels,
toggleDropdown,
runModeOptions,
reasoningEffortOptions,
@@ -79,9 +81,9 @@ const {
{{ $t('personalization.defaultRunModeTitle') }}{{ $t('personalization.defaultThinkingModeTitle') }}{{ $t('personalization.defaultRunModeDesc') }}{{ $t('personalization.defaultThinkingModeDesc') }}
+
+
+
+ {{ $t('personalization.titleModelTitle') }}
+ {{ $t('personalization.titleModelDesc') }}
+
+
+
+
+
+
+
+
+
diff --git a/static/src/components/personalization/tabs/PreferencesTab.vue b/static/src/components/personalization/tabs/PreferencesTab.vue
index b79a252c..4ab26ba5 100644
--- a/static/src/components/personalization/tabs/PreferencesTab.vue
+++ b/static/src/components/personalization/tabs/PreferencesTab.vue
@@ -20,11 +20,6 @@ const {
activeTheme,
communicationStyleLabel,
conversationContinuityLabel,
- currentBlockDisplayMode,
- stackedHideBorders,
- handleStackedHideBordersChange,
- minimalExpandHeightLimited,
- handleMinimalExpandHeightLimitedChange,
selectCommunicationStyle,
selectConversationContinuity
} = ctx;
@@ -96,6 +91,21 @@ const {
@focus="personalization.clearFeedback()"
/>
+
+
+
+ {{ $t('sandbox.sectionTitle') }}
+ {{ $t('sandbox.sectionDesc') }}
+
+
+ {{
+ sandboxStatusText
+ }}
+ {{
+ $t('sandbox.neverAgainSet')
+ }}
+
+
+
+
+
+
-
- {{ $t('personalization.goalModeDivider') }}
-
-
-
-
-
- {{ $t('personalization.goalMaxTurnsTitle') }}{{ $t('personalization.goalMaxTurnsDesc') }}
-
-
-
-
-
-
- {{ $t('personalization.goalTokenLimitValueTitle') }}{{ $t('personalization.goalTokenLimitValueDesc') }}
-
-
+
+
diff --git a/static/src/locales/en-US/personalization.ts b/static/src/locales/en-US/personalization.ts
index 568d7e47..4ec46645 100644
--- a/static/src/locales/en-US/personalization.ts
+++ b/static/src/locales/en-US/personalization.ts
@@ -15,7 +15,6 @@ export default {
tabContext: 'Context',
tabTools: 'Tools & Skills',
tabFiles: 'Files & Images',
- tabData: 'Data',
tabVoice: 'Voice Model',
tabSubAgents: 'Sub-agents',
tabReviewAgents: 'Review Agents',
@@ -82,8 +81,8 @@ export default {
defaultModelTitle: 'Default model',
defaultModelDesc: 'Preferred model for new conversations and the first request after sign-in',
modelDisabled: 'Disabled by administrator',
- defaultRunModeTitle: 'Default run mode',
- defaultRunModeDesc: 'Initial run mode on sign-in or when starting a new task',
+ defaultThinkingModeTitle: 'Default thinking mode',
+ defaultThinkingModeDesc: 'Initial thinking mode on sign-in or when starting a new task',
reasoningEffortTitle: 'Default reasoning effort',
reasoningEffortDesc: 'Reasoning effort level attached to model requests in thinking mode',
runModeFast: 'Fast mode',
@@ -166,7 +165,8 @@ export default {
permissionAutoApprovalDesc: 'Writes pass through; high-risk operations are auto-approved by the background review agent',
permissionUnrestricted: 'Unrestricted',
permissionUnrestrictedDesc: 'Tools execute directly through the normal flow',
- workRunModeDesc: 'Default run mode for new conversations; locked to read-only in plan mode',
+ defaultWorkModeTitle: 'Default work mode',
+ workRunModeDesc: 'Default work mode for new conversations; locked to read-only in plan mode',
workModePlan: 'Plan',
workModePlanDesc: 'Only makes a plan and executes after approval',
workModeAsk: 'Ask',
diff --git a/static/src/locales/zh-CN/personalization.ts b/static/src/locales/zh-CN/personalization.ts
index 626beeda..58afe8b8 100644
--- a/static/src/locales/zh-CN/personalization.ts
+++ b/static/src/locales/zh-CN/personalization.ts
@@ -16,7 +16,6 @@ export default {
tabContext: '上下文',
tabTools: '工具与 Skills',
tabFiles: '文件与图片',
- tabData: '数据管理',
tabVoice: '语音模型',
tabSubAgents: '子智能体',
tabReviewAgents: '审核智能体',
@@ -83,8 +82,8 @@ export default {
defaultModelTitle: '默认模型',
defaultModelDesc: '为新对话/登录后首次请求选择首选模型',
modelDisabled: '已被管理员禁用',
- defaultRunModeTitle: '默认运行模式',
- defaultRunModeDesc: '登录或新建任务时的初始运行模式',
+ defaultThinkingModeTitle: '默认思考模式',
+ defaultThinkingModeDesc: '登录或新建任务时的初始思考模式',
reasoningEffortTitle: '默认推理强度',
reasoningEffortDesc: '思考模式下请求模型时附带的推理强度参数',
runModeFast: '快速模式',
@@ -167,7 +166,8 @@ export default {
permissionAutoApprovalDesc: '工作区内写入直通;高风险操作由后台审核智能体自动审批',
permissionUnrestricted: '无限制',
permissionUnrestrictedDesc: '工具按常规流程直接执行',
- workRunModeDesc: '新建对话时的默认运行模式;计划模式下权限锁定为只读',
+ defaultWorkModeTitle: '默认工作模式',
+ workRunModeDesc: '新建对话时的默认工作模式;计划模式下权限锁定为只读',
workModePlan: '计划',
workModePlanDesc: '只制定计划,批准后执行',
workModeAsk: '询问',
diff --git a/static/src/stores/tutorial.ts b/static/src/stores/tutorial.ts
index a1bc97d2..fd688eee 100644
--- a/static/src/stores/tutorial.ts
+++ b/static/src/stores/tutorial.ts
@@ -477,10 +477,11 @@ const TUTORIAL_STEP_DEFS: TutorialStepDef[] = [
placement: 'right'
},
{
+ // 用量统计已并入「常规」页签,锚点指向 general
id: 'tab-usage',
titleKey: 'tutorial.tabUsageTitle',
descriptionKey: 'tutorial.tabUsageDesc',
- target: '[data-tutorial="personal-tab-usage"]',
+ target: '[data-tutorial="personal-tab-general"]',
mode: 'info',
autoClick: true,
placement: 'right'