feat: add collapsible section for AI agent settings to reduce visual clutter

This commit is contained in:
jxxghp
2026-05-14 20:27:28 +08:00
parent 74c980c7a5
commit f3ab2a8eff
+442 -419
View File
@@ -191,6 +191,9 @@ const advancedDialog = ref(false)
const savingBasic = ref(false) const savingBasic = ref(false)
const testingLlm = ref(false) const testingLlm = ref(false)
// 智能助手配置项较多,默认收起以降低基础设置页的视觉占用。
const aiAgentSettingsCollapsed = ref(true)
type LlmSettingsSnapshot = { type LlmSettingsSnapshot = {
AI_AGENT_ENABLE: boolean AI_AGENT_ENABLE: boolean
LLM_PROVIDER: string LLM_PROVIDER: string
@@ -997,7 +1000,7 @@ watch(currentLlmSnapshotKey, (snapshotKey, previousSnapshotKey) => {
variant="outlined" variant="outlined"
:class="['mt-6', isTransparentTheme ? 'ai-agent-settings-card-transparent' : 'ai-agent-settings-card']" :class="['mt-6', isTransparentTheme ? 'ai-agent-settings-card-transparent' : 'ai-agent-settings-card']"
> >
<VCardItem class="pb-2"> <VCardItem class="pb-3">
<template #prepend> <template #prepend>
<VAvatar color="primary" variant="tonal" size="40"> <VAvatar color="primary" variant="tonal" size="40">
<VIcon icon="mdi-robot-outline" /> <VIcon icon="mdi-robot-outline" />
@@ -1009,437 +1012,457 @@ watch(currentLlmSnapshotKey, (snapshotKey, previousSnapshotKey) => {
<VCardSubtitle> <VCardSubtitle>
{{ t('setting.system.aiAgentSectionDesc') }} {{ t('setting.system.aiAgentSectionDesc') }}
</VCardSubtitle> </VCardSubtitle>
<template #append>
<VTooltip location="top">
<template #activator="{ props }">
<VBtn
v-bind="props"
:icon="aiAgentSettingsCollapsed ? 'mdi-chevron-down' : 'mdi-chevron-up'"
variant="text"
color="primary"
size="small"
:aria-label="aiAgentSettingsCollapsed ? t('setting.about.expand') : t('setting.about.collapse')"
@click="aiAgentSettingsCollapsed = !aiAgentSettingsCollapsed"
/>
</template>
<span>{{
aiAgentSettingsCollapsed ? t('setting.about.expand') : t('setting.about.collapse')
}}</span>
</VTooltip>
</template>
</VCardItem> </VCardItem>
<VCardText class="pt-2"> <VExpandTransition>
<VRow> <VCardText v-show="!aiAgentSettingsCollapsed" class="pt-2">
<VCol cols="12" md="4"> <VRow>
<VSwitch <VCol cols="12" md="4">
v-model="SystemSettings.Basic.AI_AGENT_ENABLE" <VSwitch
:label="t('setting.system.aiAgentEnable')" v-model="SystemSettings.Basic.AI_AGENT_ENABLE"
:hint="t('setting.system.aiAgentEnableHint')" :label="t('setting.system.aiAgentEnable')"
persistent-hint :hint="t('setting.system.aiAgentEnableHint')"
/> persistent-hint
</VCol> />
<VCol v-if="SystemSettings.Basic.AI_AGENT_ENABLE" cols="12" md="4"> </VCol>
<VSwitch <VCol v-if="SystemSettings.Basic.AI_AGENT_ENABLE" cols="12" md="4">
v-model="SystemSettings.Basic.AI_AGENT_GLOBAL" <VSwitch
:label="t('setting.system.aiAgentGlobal')" v-model="SystemSettings.Basic.AI_AGENT_GLOBAL"
:hint="t('setting.system.aiAgentGlobalHint')" :label="t('setting.system.aiAgentGlobal')"
persistent-hint :hint="t('setting.system.aiAgentGlobalHint')"
/> persistent-hint
</VCol> />
<VCol v-if="SystemSettings.Basic.AI_AGENT_ENABLE" cols="12" md="4"> </VCol>
<VSwitch <VCol v-if="SystemSettings.Basic.AI_AGENT_ENABLE" cols="12" md="4">
v-model="SystemSettings.Basic.AI_AGENT_VERBOSE" <VSwitch
:label="t('setting.system.aiAgentVerbose')" v-model="SystemSettings.Basic.AI_AGENT_VERBOSE"
:hint="t('setting.system.aiAgentVerboseHint')" :label="t('setting.system.aiAgentVerbose')"
persistent-hint :hint="t('setting.system.aiAgentVerboseHint')"
/> persistent-hint
</VCol> />
<VCol v-if="SystemSettings.Basic.AI_AGENT_ENABLE" cols="12" md="6"> </VCol>
<VAutocomplete <VCol v-if="SystemSettings.Basic.AI_AGENT_ENABLE" cols="12" md="6">
v-model="SystemSettings.Basic.LLM_PROVIDER" <VAutocomplete
:label="t('setting.system.llmProvider')" v-model="SystemSettings.Basic.LLM_PROVIDER"
:hint="t('setting.system.llmProviderHint')" :label="t('setting.system.llmProvider')"
persistent-hint :hint="t('setting.system.llmProviderHint')"
:items="llmProviderItems" persistent-hint
:loading="loadingLlmProviders" :items="llmProviderItems"
prepend-inner-icon="mdi-robot" :loading="loadingLlmProviders"
@update:model-value="handleLlmProviderChanged" prepend-inner-icon="mdi-robot"
/> @update:model-value="handleLlmProviderChanged"
</VCol> />
<VCol v-if="SystemSettings.Basic.AI_AGENT_ENABLE && showBaseUrlField" cols="12" md="6"> </VCol>
<VCombobox <VCol v-if="SystemSettings.Basic.AI_AGENT_ENABLE && showBaseUrlField" cols="12" md="6">
:model-value="SystemSettings.Basic.LLM_BASE_URL"
@update:model-value="
(value: any) => {
if (typeof value === 'object' && value !== null) {
setBaseUrlPreset(value.id, value.value)
} else {
setBaseUrlPreset('', value || '')
}
}
"
:label="t('setting.system.llmBaseUrl')"
:hint="t('setting.system.llmBaseUrlHint')"
:placeholder="selectedLlmProvider?.default_base_url || 'https://api.deepseek.com'"
:items="llmBaseUrlPresetItems"
item-title="title"
item-value="value"
persistent-hint
prepend-inner-icon="mdi-link"
>
<template #item="{ props, item }">
<VListItem v-bind="props" :subtitle="item.raw.subtitle" />
</template>
</VCombobox>
</VCol>
<VCol v-if="SystemSettings.Basic.AI_AGENT_ENABLE && showApiKeyField" cols="12" md="6">
<VTextField
v-model="SystemSettings.Basic.LLM_API_KEY"
:label="selectedLlmProvider?.api_key_label || t('setting.system.llmApiKey')"
:hint="selectedLlmProvider?.api_key_hint || t('setting.system.llmApiKeyHint')"
:placeholder="t('setting.system.llmApiKeyPlaceholder')"
persistent-hint
type="password"
prepend-inner-icon="mdi-key-variant"
/>
</VCol>
<VCol v-if="SystemSettings.Basic.AI_AGENT_ENABLE && llmProviderAuthMethods.length > 0" cols="12">
<VAlert type="info" variant="tonal">
<div class="d-flex flex-column flex-md-row justify-space-between ga-3">
<div>
<div class="text-subtitle-2">{{ t('setting.system.llmProviderAuth') }}</div>
<div class="text-body-2">
{{ selectedLlmProvider?.description || t('setting.system.llmProviderAuthHint') }}
</div>
<div v-if="providerConnected" class="text-body-2 mt-2">
{{
t('setting.system.llmProviderConnectedAs', {
label: llmProviderAuthLabel || selectedLlmProvider?.name,
})
}}
</div>
</div>
<div class="d-flex flex-wrap ga-2">
<VBtn
v-for="method in llmProviderAuthMethods"
:key="method.id"
color="primary"
variant="tonal"
prepend-icon="mdi-account-arrow-right-outline"
@click="startProviderAuth(method.id)"
>
{{ method.label }}
</VBtn>
<VBtn
v-if="providerConnected"
color="error"
variant="text"
prepend-icon="mdi-link-off"
@click="disconnectProviderAuth"
>
{{ t('setting.system.llmProviderDisconnect') }}
</VBtn>
</div>
</div>
</VAlert>
</VCol>
<VCol v-if="SystemSettings.Basic.AI_AGENT_ENABLE" cols="12" md="6">
<div>
<VCombobox <VCombobox
:model-value="SystemSettings.Basic.LLM_MODEL" :model-value="SystemSettings.Basic.LLM_BASE_URL"
@update:model-value=" @update:model-value="
(val: any) => { (value: any) => {
SystemSettings.Basic.LLM_MODEL = typeof val === 'object' && val !== null ? val.id : val if (typeof value === 'object' && value !== null) {
handleLlmModelChanged() setBaseUrlPreset(value.id, value.value)
} else {
setBaseUrlPreset('', value || '')
}
} }
" "
:label="t('setting.system.llmModel')" :label="t('setting.system.llmBaseUrl')"
:hint="t('setting.system.llmModelHint')" :hint="t('setting.system.llmBaseUrlHint')"
:placeholder="t('setting.system.llmModelHint')" :placeholder="selectedLlmProvider?.default_base_url || 'https://api.deepseek.com'"
:items="llmBaseUrlPresetItems"
item-title="title"
item-value="value"
persistent-hint persistent-hint
:items="llmModels" prepend-inner-icon="mdi-link"
item-title="name"
item-value="id"
:loading="loadingModels"
prepend-inner-icon="mdi-brain"
> >
<template #append-inner> <template #item="{ props, item }">
<VBtn <VListItem v-bind="props" :subtitle="item.raw.subtitle" />
variant="text"
icon="mdi-refresh"
size="small"
@click="refreshLlmModels(true)"
:disabled="!canRefreshModels"
/>
</template> </template>
</VCombobox> </VCombobox>
</VCol>
<VCol v-if="SystemSettings.Basic.AI_AGENT_ENABLE && showApiKeyField" cols="12" md="6">
<VTextField
v-model="SystemSettings.Basic.LLM_API_KEY"
:label="selectedLlmProvider?.api_key_label || t('setting.system.llmApiKey')"
:hint="selectedLlmProvider?.api_key_hint || t('setting.system.llmApiKeyHint')"
:placeholder="t('setting.system.llmApiKeyPlaceholder')"
persistent-hint
type="password"
prepend-inner-icon="mdi-key-variant"
/>
</VCol>
<VCol v-if="SystemSettings.Basic.AI_AGENT_ENABLE && llmProviderAuthMethods.length > 0" cols="12">
<VAlert type="info" variant="tonal">
<div class="d-flex flex-column flex-md-row justify-space-between ga-3">
<div>
<div class="text-subtitle-2">{{ t('setting.system.llmProviderAuth') }}</div>
<div class="text-body-2">
{{ selectedLlmProvider?.description || t('setting.system.llmProviderAuthHint') }}
</div>
<div v-if="providerConnected" class="text-body-2 mt-2">
{{
t('setting.system.llmProviderConnectedAs', {
label: llmProviderAuthLabel || selectedLlmProvider?.name,
})
}}
</div>
</div>
<VAlert v-if="selectedLlmModelInfo" type="info" variant="tonal" density="compact" class="mt-2"> <div class="d-flex flex-wrap ga-2">
{{ selectedLlmModelInfo }} <VBtn
v-for="method in llmProviderAuthMethods"
:key="method.id"
color="primary"
variant="tonal"
prepend-icon="mdi-account-arrow-right-outline"
@click="startProviderAuth(method.id)"
>
{{ method.label }}
</VBtn>
<VBtn
v-if="providerConnected"
color="error"
variant="text"
prepend-icon="mdi-link-off"
@click="disconnectProviderAuth"
>
{{ t('setting.system.llmProviderDisconnect') }}
</VBtn>
</div>
</div>
</VAlert> </VAlert>
</VCol>
<div class="d-flex justify-end mt-2"> <VCol v-if="SystemSettings.Basic.AI_AGENT_ENABLE" cols="12" md="6">
<VBtn <div>
color="info" <VCombobox
variant="tonal" :model-value="SystemSettings.Basic.LLM_MODEL"
density="comfortable" @update:model-value="
prepend-icon="mdi-connection" (val: any) => {
:disabled="!canTestLlm" SystemSettings.Basic.LLM_MODEL = typeof val === 'object' && val !== null ? val.id : val
:loading="testingLlm" handleLlmModelChanged()
class="llm-test-trigger" }
@click="testLlmConnection" "
:label="t('setting.system.llmModel')"
:hint="t('setting.system.llmModelHint')"
:placeholder="t('setting.system.llmModelHint')"
persistent-hint
:items="llmModels"
item-title="name"
item-value="id"
:loading="loadingModels"
prepend-inner-icon="mdi-brain"
> >
{{ t('setting.system.llmTestAction') }} <template #append-inner>
</VBtn> <VBtn
variant="text"
icon="mdi-refresh"
size="small"
@click="refreshLlmModels(true)"
:disabled="!canRefreshModels"
/>
</template>
</VCombobox>
<VAlert v-if="selectedLlmModelInfo" type="info" variant="tonal" density="compact" class="mt-2">
{{ selectedLlmModelInfo }}
</VAlert>
<div class="d-flex justify-end mt-2">
<VBtn
color="info"
variant="tonal"
density="comfortable"
prepend-icon="mdi-connection"
:disabled="!canTestLlm"
:loading="testingLlm"
class="llm-test-trigger"
@click="testLlmConnection"
>
{{ t('setting.system.llmTestAction') }}
</VBtn>
</div>
</div> </div>
</div> </VCol>
</VCol> <VCol v-if="SystemSettings.Basic.AI_AGENT_ENABLE" cols="12" md="6">
<VCol v-if="SystemSettings.Basic.AI_AGENT_ENABLE" cols="12" md="6"> <VTextField
<VTextField v-model.number="SystemSettings.Basic.LLM_MAX_CONTEXT_TOKENS"
v-model.number="SystemSettings.Basic.LLM_MAX_CONTEXT_TOKENS" :label="t('setting.system.llmMaxContextTokens')"
:label="t('setting.system.llmMaxContextTokens')" :hint="t('setting.system.llmMaxContextTokensHint')"
:hint="t('setting.system.llmMaxContextTokensHint')" persistent-hint
persistent-hint type="number"
type="number" prepend-inner-icon="mdi-counter"
prepend-inner-icon="mdi-counter" />
/> </VCol>
</VCol> <VCol v-if="SystemSettings.Basic.AI_AGENT_ENABLE" cols="12" md="6">
<VCol v-if="SystemSettings.Basic.AI_AGENT_ENABLE" cols="12" md="6"> <VSelect
<VSelect v-model="SystemSettings.Basic.LLM_THINKING_LEVEL"
v-model="SystemSettings.Basic.LLM_THINKING_LEVEL" :label="t('setting.system.llmThinking')"
:label="t('setting.system.llmThinking')" :hint="t('setting.system.llmThinkingHint')"
:hint="t('setting.system.llmThinkingHint')" :items="thinkingLevelItems"
:items="thinkingLevelItems" persistent-hint
persistent-hint />
/> </VCol>
</VCol> <VCol v-if="SystemSettings.Basic.AI_AGENT_ENABLE" cols="12" md="6">
<VCol v-if="SystemSettings.Basic.AI_AGENT_ENABLE" cols="12" md="6"> <VSelect
<VSelect v-model="SystemSettings.Basic.AI_AGENT_JOB_INTERVAL"
v-model="SystemSettings.Basic.AI_AGENT_JOB_INTERVAL" :label="t('setting.system.aiAgentJobInterval')"
:label="t('setting.system.aiAgentJobInterval')" :hint="t('setting.system.aiAgentJobIntervalHint')"
:hint="t('setting.system.aiAgentJobIntervalHint')" persistent-hint
persistent-hint :items="[
:items="[ { title: t('setting.system.aiAgentJobIntervalDisabled'), value: 0 },
{ title: t('setting.system.aiAgentJobIntervalDisabled'), value: 0 }, { title: t('setting.system.aiAgentJobInterval1h'), value: 1 },
{ title: t('setting.system.aiAgentJobInterval1h'), value: 1 }, { title: t('setting.system.aiAgentJobInterval3h'), value: 3 },
{ title: t('setting.system.aiAgentJobInterval3h'), value: 3 }, { title: t('setting.system.aiAgentJobInterval6h'), value: 6 },
{ title: t('setting.system.aiAgentJobInterval6h'), value: 6 }, { title: t('setting.system.aiAgentJobInterval12h'), value: 12 },
{ title: t('setting.system.aiAgentJobInterval12h'), value: 12 }, { title: t('setting.system.aiAgentJobInterval24h'), value: 24 },
{ title: t('setting.system.aiAgentJobInterval24h'), value: 24 }, { title: t('setting.system.aiAgentJobInterval1w'), value: 168 },
{ title: t('setting.system.aiAgentJobInterval1w'), value: 168 }, { title: t('setting.system.aiAgentJobInterval1M'), value: 720 },
{ title: t('setting.system.aiAgentJobInterval1M'), value: 720 }, ]"
]" prepend-inner-icon="mdi-timer-outline"
prepend-inner-icon="mdi-timer-outline" />
/> </VCol>
</VCol> </VRow>
</VRow> <VRow>
<VRow> <VCol v-if="SystemSettings.Basic.AI_AGENT_ENABLE" cols="12" md="4">
<VCol v-if="SystemSettings.Basic.AI_AGENT_ENABLE" cols="12" md="4"> <VSwitch
<VSwitch v-model="SystemSettings.Basic.LLM_SUPPORT_IMAGE_INPUT"
v-model="SystemSettings.Basic.LLM_SUPPORT_IMAGE_INPUT" :label="t('setting.system.llmSupportImageInput')"
:label="t('setting.system.llmSupportImageInput')" :hint="t('setting.system.llmSupportImageInputHint')"
:hint="t('setting.system.llmSupportImageInputHint')" persistent-hint
persistent-hint />
/> </VCol>
</VCol> </VRow>
</VRow> <VRow>
<VRow> <VCol v-if="SystemSettings.Basic.AI_AGENT_ENABLE" cols="12" md="6">
<VCol v-if="SystemSettings.Basic.AI_AGENT_ENABLE" cols="12" md="6"> <VSwitch
<VSwitch v-model="SystemSettings.Basic.LLM_SUPPORT_AUDIO_INPUT"
v-model="SystemSettings.Basic.LLM_SUPPORT_AUDIO_INPUT" :label="t('setting.system.llmSupportAudioInput')"
:label="t('setting.system.llmSupportAudioInput')" :hint="t('setting.system.llmSupportAudioInputHint')"
:hint="t('setting.system.llmSupportAudioInputHint')" persistent-hint
persistent-hint />
/> </VCol>
</VCol> <VCol v-if="SystemSettings.Basic.AI_AGENT_ENABLE" cols="12" md="6">
<VCol v-if="SystemSettings.Basic.AI_AGENT_ENABLE" cols="12" md="6"> <VSwitch
<VSwitch v-model="SystemSettings.Basic.LLM_SUPPORT_AUDIO_OUTPUT"
v-model="SystemSettings.Basic.LLM_SUPPORT_AUDIO_OUTPUT" :label="t('setting.system.llmSupportAudioOutput')"
:label="t('setting.system.llmSupportAudioOutput')" :hint="t('setting.system.llmSupportAudioOutputHint')"
:hint="t('setting.system.llmSupportAudioOutputHint')" persistent-hint
persistent-hint />
/> </VCol>
</VCol> <VCol
<VCol v-if="SystemSettings.Basic.AI_AGENT_ENABLE && SystemSettings.Basic.LLM_SUPPORT_AUDIO_INPUT"
v-if="SystemSettings.Basic.AI_AGENT_ENABLE && SystemSettings.Basic.LLM_SUPPORT_AUDIO_INPUT" cols="12"
cols="12" md="6"
md="6" >
> <VSelect
<VSelect v-model="SystemSettings.Basic.AUDIO_INPUT_PROVIDER"
v-model="SystemSettings.Basic.AUDIO_INPUT_PROVIDER" :label="t('setting.system.audioInputProvider')"
:label="t('setting.system.audioInputProvider')" :hint="t('setting.system.audioInputProviderHint')"
:hint="t('setting.system.audioInputProviderHint')" :items="audioProviderItems"
:items="audioProviderItems" persistent-hint
persistent-hint prepend-inner-icon="mdi-microphone-message"
prepend-inner-icon="mdi-microphone-message" />
/> </VCol>
</VCol> <VCol
<VCol v-if="SystemSettings.Basic.AI_AGENT_ENABLE && SystemSettings.Basic.LLM_SUPPORT_AUDIO_INPUT"
v-if="SystemSettings.Basic.AI_AGENT_ENABLE && SystemSettings.Basic.LLM_SUPPORT_AUDIO_INPUT" cols="12"
cols="12" md="6"
md="6" >
> <VTextField
<VTextField v-model="SystemSettings.Basic.AUDIO_INPUT_MODEL"
v-model="SystemSettings.Basic.AUDIO_INPUT_MODEL" :label="t('setting.system.audioInputModel')"
:label="t('setting.system.audioInputModel')" :hint="t('setting.system.audioInputModelHint')"
:hint="t('setting.system.audioInputModelHint')" persistent-hint
persistent-hint prepend-inner-icon="mdi-waveform"
prepend-inner-icon="mdi-waveform" />
/> </VCol>
</VCol> <VCol
<VCol v-if="SystemSettings.Basic.AI_AGENT_ENABLE && SystemSettings.Basic.LLM_SUPPORT_AUDIO_INPUT"
v-if="SystemSettings.Basic.AI_AGENT_ENABLE && SystemSettings.Basic.LLM_SUPPORT_AUDIO_INPUT" cols="12"
cols="12" md="6"
md="6" >
> <VTextField
<VTextField v-model="SystemSettings.Basic.AUDIO_INPUT_API_KEY"
v-model="SystemSettings.Basic.AUDIO_INPUT_API_KEY" :label="t('setting.system.audioInputApiKey')"
:label="t('setting.system.audioInputApiKey')" :hint="t('setting.system.audioInputApiKeyHint')"
:hint="t('setting.system.audioInputApiKeyHint')" persistent-hint
persistent-hint prepend-inner-icon="mdi-key-variant"
prepend-inner-icon="mdi-key-variant" type="password"
type="password" />
/> </VCol>
</VCol> <VCol
<VCol v-if="SystemSettings.Basic.AI_AGENT_ENABLE && SystemSettings.Basic.LLM_SUPPORT_AUDIO_INPUT"
v-if="SystemSettings.Basic.AI_AGENT_ENABLE && SystemSettings.Basic.LLM_SUPPORT_AUDIO_INPUT" cols="12"
cols="12" md="6"
md="6" >
> <VTextField
<VTextField v-model="SystemSettings.Basic.AUDIO_INPUT_BASE_URL"
v-model="SystemSettings.Basic.AUDIO_INPUT_BASE_URL" :label="t('setting.system.audioInputBaseUrl')"
:label="t('setting.system.audioInputBaseUrl')" :hint="t('setting.system.audioInputBaseUrlHint')"
:hint="t('setting.system.audioInputBaseUrlHint')" persistent-hint
persistent-hint prepend-inner-icon="mdi-link-variant"
prepend-inner-icon="mdi-link-variant" />
/> </VCol>
</VCol> <VCol
<VCol v-if="SystemSettings.Basic.AI_AGENT_ENABLE && SystemSettings.Basic.LLM_SUPPORT_AUDIO_INPUT"
v-if="SystemSettings.Basic.AI_AGENT_ENABLE && SystemSettings.Basic.LLM_SUPPORT_AUDIO_INPUT" cols="12"
cols="12" md="6"
md="6" >
> <VTextField
<VTextField v-model="SystemSettings.Basic.AUDIO_INPUT_LANGUAGE"
v-model="SystemSettings.Basic.AUDIO_INPUT_LANGUAGE" :label="t('setting.system.audioInputLanguage')"
:label="t('setting.system.audioInputLanguage')" :hint="t('setting.system.audioInputLanguageHint')"
:hint="t('setting.system.audioInputLanguageHint')" persistent-hint
persistent-hint prepend-inner-icon="mdi-translate"
prepend-inner-icon="mdi-translate" />
/> </VCol>
</VCol> <VCol
<VCol v-if="SystemSettings.Basic.AI_AGENT_ENABLE && SystemSettings.Basic.LLM_SUPPORT_AUDIO_OUTPUT"
v-if="SystemSettings.Basic.AI_AGENT_ENABLE && SystemSettings.Basic.LLM_SUPPORT_AUDIO_OUTPUT" cols="12"
cols="12" md="6"
md="6" >
> <VSelect
<VSelect v-model="SystemSettings.Basic.AUDIO_OUTPUT_PROVIDER"
v-model="SystemSettings.Basic.AUDIO_OUTPUT_PROVIDER" :label="t('setting.system.audioOutputProvider')"
:label="t('setting.system.audioOutputProvider')" :hint="t('setting.system.audioOutputProviderHint')"
:hint="t('setting.system.audioOutputProviderHint')" :items="audioProviderItems"
:items="audioProviderItems" persistent-hint
persistent-hint prepend-inner-icon="mdi-account-voice"
prepend-inner-icon="mdi-account-voice" />
/> </VCol>
</VCol> <VCol
<VCol v-if="SystemSettings.Basic.AI_AGENT_ENABLE && SystemSettings.Basic.LLM_SUPPORT_AUDIO_OUTPUT"
v-if="SystemSettings.Basic.AI_AGENT_ENABLE && SystemSettings.Basic.LLM_SUPPORT_AUDIO_OUTPUT" cols="12"
cols="12" md="6"
md="6" >
> <VTextField
<VTextField v-model="SystemSettings.Basic.AUDIO_OUTPUT_MODEL"
v-model="SystemSettings.Basic.AUDIO_OUTPUT_MODEL" :label="t('setting.system.audioOutputModel')"
:label="t('setting.system.audioOutputModel')" :hint="t('setting.system.audioOutputModelHint')"
:hint="t('setting.system.audioOutputModelHint')" persistent-hint
persistent-hint prepend-inner-icon="mdi-waveform"
prepend-inner-icon="mdi-waveform" />
/> </VCol>
</VCol> <VCol
<VCol v-if="SystemSettings.Basic.AI_AGENT_ENABLE && SystemSettings.Basic.LLM_SUPPORT_AUDIO_OUTPUT"
v-if="SystemSettings.Basic.AI_AGENT_ENABLE && SystemSettings.Basic.LLM_SUPPORT_AUDIO_OUTPUT" cols="12"
cols="12" md="6"
md="6" >
> <VTextField
<VTextField v-model="SystemSettings.Basic.AUDIO_OUTPUT_API_KEY"
v-model="SystemSettings.Basic.AUDIO_OUTPUT_API_KEY" :label="t('setting.system.audioOutputApiKey')"
:label="t('setting.system.audioOutputApiKey')" :hint="t('setting.system.audioOutputApiKeyHint')"
:hint="t('setting.system.audioOutputApiKeyHint')" persistent-hint
persistent-hint prepend-inner-icon="mdi-key-variant"
prepend-inner-icon="mdi-key-variant" type="password"
type="password" />
/> </VCol>
</VCol> <VCol
<VCol v-if="SystemSettings.Basic.AI_AGENT_ENABLE && SystemSettings.Basic.LLM_SUPPORT_AUDIO_OUTPUT"
v-if="SystemSettings.Basic.AI_AGENT_ENABLE && SystemSettings.Basic.LLM_SUPPORT_AUDIO_OUTPUT" cols="12"
cols="12" md="6"
md="6" >
> <VTextField
<VTextField v-model="SystemSettings.Basic.AUDIO_OUTPUT_BASE_URL"
v-model="SystemSettings.Basic.AUDIO_OUTPUT_BASE_URL" :label="t('setting.system.audioOutputBaseUrl')"
:label="t('setting.system.audioOutputBaseUrl')" :hint="t('setting.system.audioOutputBaseUrlHint')"
:hint="t('setting.system.audioOutputBaseUrlHint')" persistent-hint
persistent-hint prepend-inner-icon="mdi-link-variant"
prepend-inner-icon="mdi-link-variant" />
/> </VCol>
</VCol> <VCol
<VCol v-if="SystemSettings.Basic.AI_AGENT_ENABLE && SystemSettings.Basic.LLM_SUPPORT_AUDIO_OUTPUT"
v-if="SystemSettings.Basic.AI_AGENT_ENABLE && SystemSettings.Basic.LLM_SUPPORT_AUDIO_OUTPUT" cols="12"
cols="12" md="6"
md="6" >
> <VTextField
<VTextField v-model="SystemSettings.Basic.AUDIO_OUTPUT_VOICE"
v-model="SystemSettings.Basic.AUDIO_OUTPUT_VOICE" :label="t('setting.system.audioOutputVoice')"
:label="t('setting.system.audioOutputVoice')" :hint="t('setting.system.audioOutputVoiceHint')"
:hint="t('setting.system.audioOutputVoiceHint')" persistent-hint
persistent-hint prepend-inner-icon="mdi-account-voice"
prepend-inner-icon="mdi-account-voice" />
/> </VCol>
</VCol> <VCol
<VCol v-if="SystemSettings.Basic.AI_AGENT_ENABLE && SystemSettings.Basic.LLM_SUPPORT_AUDIO_OUTPUT"
v-if="SystemSettings.Basic.AI_AGENT_ENABLE && SystemSettings.Basic.LLM_SUPPORT_AUDIO_OUTPUT" cols="12"
cols="12" >
> <VSwitch
<VSwitch v-model="SystemSettings.Basic.AUDIO_OUTPUT_INCLUDE_TEXT"
v-model="SystemSettings.Basic.AUDIO_OUTPUT_INCLUDE_TEXT" :label="t('setting.system.audioOutputIncludeText')"
:label="t('setting.system.audioOutputIncludeText')" :hint="t('setting.system.audioOutputIncludeTextHint')"
:hint="t('setting.system.audioOutputIncludeTextHint')" persistent-hint
persistent-hint />
/> </VCol>
</VCol> </VRow>
</VRow> <VRow>
<VRow> <VCol v-if="SystemSettings.Basic.AI_AGENT_ENABLE" cols="12">
<VCol v-if="SystemSettings.Basic.AI_AGENT_ENABLE" cols="12"> <VSwitch
<VSwitch v-model="SystemSettings.Basic.AI_AGENT_RETRY_TRANSFER"
v-model="SystemSettings.Basic.AI_AGENT_RETRY_TRANSFER" :label="t('setting.system.aiAgentRetryTransfer')"
:label="t('setting.system.aiAgentRetryTransfer')" :hint="t('setting.system.aiAgentRetryTransferHint')"
:hint="t('setting.system.aiAgentRetryTransferHint')" persistent-hint
persistent-hint />
/> </VCol>
</VCol> </VRow>
</VRow> <VRow>
<VRow> <VCol v-if="SystemSettings.Basic.AI_AGENT_ENABLE" cols="12">
<VCol v-if="SystemSettings.Basic.AI_AGENT_ENABLE" cols="12"> <VSwitch
<VSwitch v-model="SystemSettings.Basic.AI_RECOMMEND_ENABLED"
v-model="SystemSettings.Basic.AI_RECOMMEND_ENABLED" :label="t('setting.system.aiRecommendEnabled')"
:label="t('setting.system.aiRecommendEnabled')" :hint="t('setting.system.aiRecommendEnabledHint')"
:hint="t('setting.system.aiRecommendEnabledHint')" persistent-hint
persistent-hint />
/> </VCol>
</VCol> <VCol
<VCol v-if="SystemSettings.Basic.AI_AGENT_ENABLE && SystemSettings.Basic.AI_RECOMMEND_ENABLED"
v-if="SystemSettings.Basic.AI_AGENT_ENABLE && SystemSettings.Basic.AI_RECOMMEND_ENABLED" cols="12"
cols="12" md="6"
md="6" >
> <VTextarea
<VTextarea v-model="SystemSettings.Basic.AI_RECOMMEND_USER_PREFERENCE"
v-model="SystemSettings.Basic.AI_RECOMMEND_USER_PREFERENCE" :label="t('setting.system.aiRecommendUserPreference')"
:label="t('setting.system.aiRecommendUserPreference')" :hint="t('setting.system.aiRecommendUserPreferenceHint')"
:hint="t('setting.system.aiRecommendUserPreferenceHint')" persistent-hint
persistent-hint rows="1"
rows="1" auto-grow
auto-grow prepend-inner-icon="mdi-account-heart"
prepend-inner-icon="mdi-account-heart" />
/> </VCol>
</VCol> <VCol
<VCol v-if="SystemSettings.Basic.AI_AGENT_ENABLE && SystemSettings.Basic.AI_RECOMMEND_ENABLED"
v-if="SystemSettings.Basic.AI_AGENT_ENABLE && SystemSettings.Basic.AI_RECOMMEND_ENABLED" cols="12"
cols="12" md="6"
md="6" >
> <VTextField
<VTextField v-model.number="SystemSettings.Basic.AI_RECOMMEND_MAX_ITEMS"
v-model.number="SystemSettings.Basic.AI_RECOMMEND_MAX_ITEMS" :label="t('setting.system.aiRecommendMaxItems')"
:label="t('setting.system.aiRecommendMaxItems')" :hint="t('setting.system.aiRecommendMaxItemsHint')"
:hint="t('setting.system.aiRecommendMaxItemsHint')" persistent-hint
persistent-hint type="number"
type="number" prepend-inner-icon="mdi-format-list-numbered"
prepend-inner-icon="mdi-format-list-numbered" />
/> </VCol>
</VCol> </VRow>
</VRow> </VCardText>
</VCardText> </VExpandTransition>
</VCard> </VCard>
</VForm> </VForm>
</VCardText> </VCardText>