@@ -87,23 +119,47 @@ const isInternal = (tool: ToolItem) => tool.source === 'internal';
inset
@update:model-value="emit('toggle-tool', item)"
/>
-
-
+ |
- mdi-code-json
+
+ mdi-code-json
+
- {{ tmTool('functionTools.parameters') }}
-
+
+ {{ tmTool('functionTools.parameters') }}
+
+
{{ tmTool('functionTools.noParameters') }}
tool.source === 'internal';
>
- | {{ tmTool('functionTools.table.paramName') }} |
- {{ tmTool('functionTools.table.type') }} |
- {{ tmTool('functionTools.table.description') }} |
+
+ {{ tmTool('functionTools.table.paramName') }}
+ |
+
+ {{ tmTool('functionTools.table.type') }}
+ |
+
+ {{ tmTool('functionTools.table.description') }}
+ |
-
- | {{ paramName }} |
+
+ |
+ {{ paramName }}
+ |
-
+
{{ param?.type || '-' }}
|
- {{ param?.description || '-' }} |
+
+ {{ param?.description || '-' }}
+ |
diff --git a/dashboard/src/components/extension/componentPanel/composables/useComponentData.ts b/dashboard/src/components/extension/componentPanel/composables/useComponentData.ts
index 291ba53c4..bcabee271 100644
--- a/dashboard/src/components/extension/componentPanel/composables/useComponentData.ts
+++ b/dashboard/src/components/extension/componentPanel/composables/useComponentData.ts
@@ -24,7 +24,7 @@ export function useComponentData() {
/**
* 显示 Toast 消息
*/
- const toast = (message: string, color: string = 'success') => {
+ const toast = (message: string, color = 'success') => {
snackbar.message = message;
snackbar.color = color;
snackbar.show = true;
diff --git a/dashboard/src/components/extension/componentPanel/index.vue b/dashboard/src/components/extension/componentPanel/index.vue
index 552e67476..50f2072bd 100644
--- a/dashboard/src/components/extension/componentPanel/index.vue
+++ b/dashboard/src/components/extension/componentPanel/index.vue
@@ -155,16 +155,35 @@ watch(viewMode, async (mode) => {
-
+
-
+
- mdi-console-line
+
+ mdi-console-line
+
{{ tm('type.command') }}
- mdi-function-variant
+
+ mdi-function-variant
+
{{ tmTool('functionTools.title') }}
@@ -185,30 +204,46 @@ watch(viewMode, async (mode) => {
- mdi-console-line
+
+ mdi-console-line
+
{{ tm('summary.total') }}:
{{ filteredCommands.length }}
-
+
- mdi-close-circle-outline
+
+ mdi-close-circle-outline
+
{{ tm('summary.disabled') }}:
{{ summary.disabled }}
@@ -223,8 +258,10 @@ watch(viewMode, async (mode) => {
prominent
border="start"
>
-
- mdi-alert-circle
+
+
+ mdi-alert-circle
+
{{ tm('conflictAlert.title') }}
@@ -233,7 +270,12 @@ watch(viewMode, async (mode) => {
{{ tm('conflictAlert.description', { count: summary.conflicts }) }}
- mdi-lightbulb-outline
+
+ mdi-lightbulb-outline
+
{{ tm('conflictAlert.hint') }}
@@ -255,24 +297,40 @@ watch(viewMode, async (mode) => {
- mdi-function-variant
+
+ mdi-function-variant
+
{{ tm('summary.total') }}:
{{ filteredTools.length }}
-
+
- mdi-check-circle-outline
+
+ mdi-check-circle-outline
+
{{ tm('status.enabled') }}:
{{ filteredTools.filter(t => t.active).length }}
@@ -293,25 +351,30 @@ watch(viewMode, async (mode) => {
-
+
{{ snackbar.message }}
diff --git a/dashboard/src/components/folder/BaseCreateFolderDialog.vue b/dashboard/src/components/folder/BaseCreateFolderDialog.vue
index 59075f06f..23e1181d5 100644
--- a/dashboard/src/components/folder/BaseCreateFolderDialog.vue
+++ b/dashboard/src/components/folder/BaseCreateFolderDialog.vue
@@ -1,31 +1,60 @@
-
-
-
- mdi-folder-plus
- {{ labels.title }}
-
-
-
-
+
+
+
+
+ mdi-folder-plus
+
+ {{ labels.title }}
+
+
+
+
-
-
-
-
-
-
- {{ labels.cancelButton }}
-
-
- {{ labels.createButton }}
-
-
-
-
+
+
+
+
+
+
+ {{ labels.cancelButton }}
+
+
+ {{ labels.createButton }}
+
+
+
+
-
+
{{ translateIfKey(metadata[metadataKey]?.description) }} ({{ metadataKey }})
- ‼️
+ ‼️
{{ translateIfKey(metadata[metadataKey]?.hint) }}
-
+
-
+
-
-
+
+
-
+ :metadata-key="key"
+ :plugin-name="pluginName"
+ :path-prefix="getItemPath(key)"
+ />
-
-
+
+
@@ -226,22 +254,34 @@ function hasVisibleItemsAfter(items, currentIndex) {
{{ key }}
- ‼️
+ ‼️
{{ translateIfKey(metadata[metadataKey].items[key]?.hint) }}
+
-
-
+
+
@@ -252,21 +292,29 @@ function hasVisibleItemsAfter(items, currentIndex) {
- ‼️
+ ‼️
{{ translateIfKey(getItemHint(key, metadata[metadataKey].items[key])) }}
-
+
+
@@ -276,15 +324,22 @@ function hasVisibleItemsAfter(items, currentIndex) {
+ />
-
+
-
+
{{ metadata[metadataKey]?.description }}
@@ -292,54 +347,80 @@ function hasVisibleItemsAfter(items, currentIndex) {
- ‼️
+ ‼️
{{ metadata[metadataKey]?.hint }}
-
+
+
+
-
+
-
+
-
-
+
+
mdi-close
{{ t('core.common.editor.editingTitle') }} - {{ currentEditingKey }}
-
+
- {{ t('core.common.save') }}
+
+ {{ t('core.common.save') }}
+
-
+ />
diff --git a/dashboard/src/components/shared/AstrBotConfigV4.vue b/dashboard/src/components/shared/AstrBotConfigV4.vue
index 9c86c419a..ca7e35d70 100644
--- a/dashboard/src/components/shared/AstrBotConfigV4.vue
+++ b/dashboard/src/components/shared/AstrBotConfigV4.vue
@@ -206,28 +206,51 @@ function getSpecialSubtype(value) {
-
-
-
-
+
+
{{ translateIfKey(metadata[metadataKey]?.description) }}
- ‼️
-
+ ‼️
+
-
-
+
+
-
-
+
+
{{ translateIfKey(itemMeta?.description) || itemKey }}
@@ -235,12 +258,19 @@ function getSpecialSubtype(value) {
- ‼️
-
+ ‼️
+
-
+
-
-
-
+
+
+
-
+
{{ plugin === '*' ? t('core.shared.pluginSetSelector.allPluginsLabel') : plugin }}
@@ -281,35 +324,58 @@ function getSpecialSubtype(value) {
v-if="!itemMeta?.invisible && itemMeta?._special === 'select_persona' && itemKey === 'provider_settings.default_personality'"
class="persona-preview-row"
>
-
+
-
+
-
-
+
-
-
+
+
mdi-close
{{ t('core.common.editor.editingTitle') }} - {{ currentEditingKey }}
-
+
- {{ t('core.common.save') }}
+
+ {{ t('core.common.save') }}
+
-
-
+
diff --git a/dashboard/src/components/shared/BackupDialog.vue b/dashboard/src/components/shared/BackupDialog.vue
index c69aa4464..6164e2afd 100644
--- a/dashboard/src/components/shared/BackupDialog.vue
+++ b/dashboard/src/components/shared/BackupDialog.vue
@@ -1,369 +1,681 @@
-
-
-
- mdi-backup-restore
- {{ t('features.settings.backup.dialog.title') }}
-
+
+
+
+
+ mdi-backup-restore
+
+ {{ t('features.settings.backup.dialog.title') }}
+
-
-
-
-
- mdi-export
- {{ t('features.settings.backup.tabs.export') }}
-
-
- mdi-import
- {{ t('features.settings.backup.tabs.import') }}
-
-
- mdi-format-list-bulleted
- {{ t('features.settings.backup.tabs.list') }}
-
-
+
+
+
+
+
+ mdi-export
+
+ {{ t('features.settings.backup.tabs.export') }}
+
+
+
+ mdi-import
+
+ {{ t('features.settings.backup.tabs.import') }}
+
+
+
+ mdi-format-list-bulleted
+
+ {{ t('features.settings.backup.tabs.list') }}
+
+
-
-
-
-
- mdi-cloud-upload
- {{ t('features.settings.backup.export.title') }}
- {{ t('features.settings.backup.export.description') }}
-
-
- mdi-information
-
- {{ t('features.settings.backup.export.includes') }}
-
-
- mdi-export
- {{ t('features.settings.backup.export.button') }}
-
-
+
+
+
+
+
+ mdi-cloud-upload
+
+
+ {{ t('features.settings.backup.export.title') }}
+
+
+ {{ t('features.settings.backup.export.description') }}
+
+
+
+ mdi-information
+
+ {{ t('features.settings.backup.export.includes') }}
+
+
+
+ mdi-export
+
+ {{ t('features.settings.backup.export.button') }}
+
+
-
-
- {{ t('features.settings.backup.export.processing') }}
- {{ exportProgress.message || t('features.settings.backup.export.wait') }}
-
-
+
+
+
+ {{ t('features.settings.backup.export.processing') }}
+
+
+ {{ exportProgress.message || t('features.settings.backup.export.wait') }}
+
+
+
-
- mdi-check-circle
- {{ t('features.settings.backup.export.completed') }}
- {{ exportResult?.filename }}
-
- mdi-download
- {{ t('features.settings.backup.export.download') }}
-
-
- {{ t('features.settings.backup.export.another') }}
-
-
+
+
+ mdi-check-circle
+
+
+ {{ t('features.settings.backup.export.completed') }}
+
+
+ {{ exportResult?.filename }}
+
+
+
+ mdi-download
+
+ {{ t('features.settings.backup.export.download') }}
+
+
+ {{ t('features.settings.backup.export.another') }}
+
+
-
- mdi-alert-circle
- {{ t('features.settings.backup.export.failed') }}
-
- {{ exportError }}
-
-
- {{ t('features.settings.backup.export.retry') }}
-
-
-
+
+
+ mdi-alert-circle
+
+
+ {{ t('features.settings.backup.export.failed') }}
+
+
+ {{ exportError }}
+
+
+ {{ t('features.settings.backup.export.retry') }}
+
+
+
-
-
-
-
-
-
- mdi-alert
-
- {{ t('features.settings.backup.import.warning') }}
-
+
+
+
+
+
+
+ mdi-alert
+
+ {{ t('features.settings.backup.import.warning') }}
+
-
+
-
-
- mdi-upload
- {{ t('features.settings.backup.import.uploadAndCheck') }}
-
-
-
-
-
-
- mdi-cloud-upload
- {{ t('features.settings.backup.import.uploading') }}
-
- {{ uploadProgress.message || t('features.settings.backup.import.uploadWait') }}
-
-
- {{ formatFileSize(uploadProgress.uploaded) }} / {{ formatFileSize(uploadProgress.total) }}
- ({{ uploadProgress.percent }}%)
-
-
-
-
-
-
-
-
- {{ versionAlertIcon }}
-
-
- {{ versionAlertTitle }}
-
- {{ t('features.settings.backup.import.version.backupVersion') }}: {{ checkResult?.backup_version }}
- {{ t('features.settings.backup.import.version.currentVersion') }}: {{ checkResult?.current_version }}
-
-
- {{ t('features.settings.backup.import.version.backupTime') }}: {{ formatISODate(checkResult?.backup_time) }}
-
- {{ versionAlertMessage }}
-
-
-
-
-
-
- mdi-package-variant
- {{ t('features.settings.backup.import.backupContents') }}
-
-
-
-
- {{ checkResult.backup_summary.tables.length }} {{ t('features.settings.backup.import.tables') }}
-
-
- {{ t('features.settings.backup.import.knowledgeBases') }}
-
-
- {{ t('features.settings.backup.import.configFiles') }}
-
-
- {{ dir }}
-
-
-
-
-
-
-
- {{ warning }}
-
-
-
-
- mdi-close
- {{ t('core.common.cancel') }}
-
-
- mdi-alert
- {{ t('features.settings.backup.import.confirmImport') }}
-
-
-
-
-
-
-
- {{ t('features.settings.backup.import.processing') }}
- {{ importProgress.message || t('features.settings.backup.import.wait') }}
-
-
-
-
- mdi-check-circle
- {{ t('features.settings.backup.import.completed') }}
-
- {{ t('features.settings.backup.import.restartRequired') }}
-
-
- mdi-restart
- {{ t('features.settings.backup.import.restartNow') }}
-
-
- {{ t('core.common.close') }}
-
-
-
-
- mdi-alert-circle
- {{ t('features.settings.backup.import.failed') }}
-
- {{ importError }}
-
-
- {{ t('features.settings.backup.import.retry') }}
-
-
-
-
-
-
-
-
-
-
-
- mdi-folder-open-outline
- {{ t('features.settings.backup.list.empty') }}
-
-
-
-
-
-
- {{ backup.type === 'uploaded' ? 'mdi-upload' : 'mdi-zip-box' }}
-
-
-
- {{ backup.filename }}
-
- {{ formatFileSize(backup.size) }} · {{ formatDate(backup.created_at) }}
-
- v{{ backup.astrbot_version }}
-
-
- {{ t('features.settings.backup.list.uploaded') }}
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- mdi-refresh
- {{ t('features.settings.backup.list.refresh') }}
-
-
-
-
-
- mdi-information-outline
- {{ t('features.settings.backup.list.ftpHint') }}
-
-
-
-
-
-
-
-
- {{ t('core.common.close') }}
-
-
-
-
-
-
-
-
-
- mdi-pencil
- {{ t('features.settings.backup.list.renameTitle') }}
-
-
-
+
-
- .zip
-
-
-
- {{ t('features.settings.backup.list.renameHint') }}
-
-
-
-
-
- {{ t('core.common.cancel') }}
+
+ mdi-upload
+
+ {{ t('features.settings.backup.import.uploadAndCheck') }}
+
+
+
+
+
+
+
+ mdi-cloud-upload
+
+
+ {{ t('features.settings.backup.import.uploading') }}
+
+
+ {{ uploadProgress.message || t('features.settings.backup.import.uploadWait') }}
+
+
+ {{ formatFileSize(uploadProgress.uploaded) }} / {{ formatFileSize(uploadProgress.total) }}
+ ({{ uploadProgress.percent }}%)
+
+
+
+
+
+
+
+
+ {{ versionAlertIcon }}
+
+
+
+ {{ versionAlertTitle }}
+
+
+ {{ t('features.settings.backup.import.version.backupVersion') }}: {{ checkResult?.backup_version }}
+ {{ t('features.settings.backup.import.version.currentVersion') }}: {{ checkResult?.current_version }}
+
+
+ {{ t('features.settings.backup.import.version.backupTime') }}: {{ formatISODate(checkResult?.backup_time) }}
+
+
+ {{ versionAlertMessage }}
+
+
+
+
+
+
+
+
+ mdi-package-variant
+
+ {{ t('features.settings.backup.import.backupContents') }}
+
+
+
+
+ {{ checkResult.backup_summary.tables.length }} {{ t('features.settings.backup.import.tables') }}
+
+
+ {{ t('features.settings.backup.import.knowledgeBases') }}
+
+
+ {{ t('features.settings.backup.import.configFiles') }}
+
+
+ {{ dir }}
+
+
+
+
+
+
+
+
+ {{ warning }}
+
+
+
+
+
+
+ mdi-close
+
+ {{ t('core.common.cancel') }}
- {{ t('core.common.confirm') }}
+
+ mdi-alert
+
+ {{ t('features.settings.backup.import.confirmImport') }}
-
-
-
+
+
-
+
+
+
+
+ {{ t('features.settings.backup.import.processing') }}
+
+
+ {{ importProgress.message || t('features.settings.backup.import.wait') }}
+
+
+
+
+
+
+ mdi-check-circle
+
+
+ {{ t('features.settings.backup.import.completed') }}
+
+
+ {{ t('features.settings.backup.import.restartRequired') }}
+
+
+
+ mdi-restart
+
+ {{ t('features.settings.backup.import.restartNow') }}
+
+
+ {{ t('core.common.close') }}
+
+
+
+
+
+ mdi-alert-circle
+
+
+ {{ t('features.settings.backup.import.failed') }}
+
+
+ {{ importError }}
+
+
+ {{ t('features.settings.backup.import.retry') }}
+
+
+
+
+
+
+
+
+
+
+
+
+ mdi-folder-open-outline
+
+
+ {{ t('features.settings.backup.list.empty') }}
+
+
+
+
+
+
+
+ {{ backup.type === 'uploaded' ? 'mdi-upload' : 'mdi-zip-box' }}
+
+
+
+ {{ backup.filename }}
+
+ {{ formatFileSize(backup.size) }} · {{ formatDate(backup.created_at) }}
+
+ v{{ backup.astrbot_version }}
+
+
+ {{ t('features.settings.backup.list.uploaded') }}
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ mdi-refresh
+
+ {{ t('features.settings.backup.list.refresh') }}
+
+
+
+
+
+
+ mdi-information-outline
+
+ {{ t('features.settings.backup.list.ftpHint') }}
+
+
+
+
+
+
+
+
+ {{ t('core.common.close') }}
+
+
+
+
+
+
+
+
+
+
+ mdi-pencil
+
+ {{ t('features.settings.backup.list.renameTitle') }}
+
+
+
+
+ .zip
+
+
+
+ {{ t('features.settings.backup.list.renameHint') }}
+
+
+
+
+
+ {{ t('core.common.cancel') }}
+
+
+ {{ t('core.common.confirm') }}
+
+
+
+
+
+
diff --git a/dashboard/src/components/shared/ReadmeDialog.vue b/dashboard/src/components/shared/ReadmeDialog.vue
index f7c2d2faf..1e7873c7c 100644
--- a/dashboard/src/components/shared/ReadmeDialog.vue
+++ b/dashboard/src/components/shared/ReadmeDialog.vue
@@ -71,31 +71,30 @@ onUnmounted(() => {
if (copyFeedbackTimer.value) clearTimeout(copyFeedbackTimer.value);
});
-// 渲染后的 HTML
-const renderedHtml = computed(() => {
- // 强制依赖 locale,确保语言切换时重新渲染
- const _ = locale?.value;
- if (!content.value) return "";
+md.renderer.rules.fence = (tokens, idx) => {
+ const token = tokens[idx];
+ const lang = token.info.trim() || "";
+ const code = token.content;
- // 设置 fence 规则,直接使用当前作用域的 t 函数
- md.renderer.rules.fence = (tokens, idx) => {
- const token = tokens[idx];
- const lang = token.info.trim() || "";
- const code = token.content;
+ const highlighted =
+ lang && hljs.getLanguage(lang)
+ ? hljs.highlight(code, { language: lang }).value
+ : md.utils.escapeHtml(code);
- const highlighted =
- lang && hljs.getLanguage(lang)
- ? hljs.highlight(code, { language: lang }).value
- : md.utils.escapeHtml(code);
-
- return `
+ return `
${lang ? ` ${lang}` : ""}
${highlighted}
`;
- };
+};
+
+// 渲染后的 HTML
+const renderedHtml = computed(() => {
+ // 强制依赖 locale,确保语言切换时重新渲染
+ const _ = locale?.value;
+ if (!content.value) return "";
const rawHtml = md.render(content.value);
@@ -365,16 +364,29 @@ const showActionArea = computed(() => {
-
+
{{ modeConfig.title }}
-
+
mdi-close
-
-
+
+
{
color="primary"
size="64"
class="mb-4"
- >
- {{ modeConfig.loading }}
+ />
+
+ {{ modeConfig.loading }}
+
+ v-html="renderedHtml"
+ />
- mdi-alert-circle-outline
+ mdi-alert-circle-outline
+
{{ t("core.common.error") }}
@@ -435,9 +453,13 @@ const showActionArea = computed(() => {
class="d-flex flex-column align-center justify-center"
style="height: 100%"
>
- mdi-file-question-outline
+ mdi-file-question-outline
+
{{ modeConfig.emptyTitle }}
@@ -447,8 +469,12 @@ const showActionArea = computed(() => {
-
-
+
+
{{ t("core.common.close") }}
diff --git a/dashboard/src/components/shared/SidebarCustomizer.vue b/dashboard/src/components/shared/SidebarCustomizer.vue
index 098f32f46..925eb5d05 100644
--- a/dashboard/src/components/shared/SidebarCustomizer.vue
+++ b/dashboard/src/components/shared/SidebarCustomizer.vue
@@ -4,13 +4,16 @@
color="primary"
variant="outlined"
size="small"
- @click="openDialog"
style="margin-bottom: 8px;"
+ @click="openDialog"
>
{{ t('features.settings.sidebar.customize.title') }}
-
+
{{ t('features.settings.sidebar.customize.title') }}
@@ -18,15 +21,22 @@
icon="mdi-close"
variant="text"
@click="dialog = false"
- >
+ />
- {{ t('features.settings.sidebar.customize.subtitle') }}
+
+ {{ t('features.settings.sidebar.customize.subtitle') }}
+
-
- {{ t('features.settings.sidebar.customize.mainItems') }}
+
+
+ {{ t('features.settings.sidebar.customize.mainItems') }}
+
-
-
+
+
{{ t(item.title) }}
-
+
+ />
-
- {{ t('features.settings.sidebar.customize.moreItems') }}
+
+
+ {{ t('features.settings.sidebar.customize.moreItems') }}
+
-
-
+
+
{{ t(item.title) }}
-
+
+ />
@@ -101,7 +124,7 @@
>
{{ t('features.settings.sidebar.customize.reset') }}
-
+
-
-
-
+
+
+
-
diff --git a/dashboard/src/components/shared/T2ITemplateEditor.vue b/dashboard/src/components/shared/T2ITemplateEditor.vue
index feb0b50e1..0b3a1dcab 100644
--- a/dashboard/src/components/shared/T2ITemplateEditor.vue
+++ b/dashboard/src/components/shared/T2ITemplateEditor.vue
@@ -1,6 +1,11 @@
-
-
+
+
{{ tm('t2iTemplateEditor.dialogTitle') }}
-
-
+
+
+ />
-
-
-
+
+
+
{{ tm('t2iTemplateEditor.apply') }}
@@ -79,55 +90,80 @@
-
+
-
-
- {{ tm('t2iTemplateEditor.templateEditor') }}
-
-
+
+
+
+ {{ tm('t2iTemplateEditor.templateEditor') }}
+
+
+
- mdi-plus
+
+ mdi-plus
+
{{ tm('t2iTemplateEditor.new') }}
-
+
{{ tm('t2iTemplateEditor.resetBase') }}
{{ tm('t2iTemplateEditor.delete') }}
-
+
{{ tm('t2iTemplateEditor.save') }}
-
+
-
-
- {{ tm('t2iTemplateEditor.livePreview') }}
-
+
+
+
+ {{ tm('t2iTemplateEditor.livePreview') }}
+
+
{{ tm('t2iTemplateEditor.refreshPreview') }}
@@ -164,10 +208,18 @@
-
+
- mdi-information
+
+ mdi-information
+
{{ tm('t2iTemplateEditor.syntaxHint') }}
@@ -180,9 +232,9 @@
{{ tm('t2iTemplateEditor.saveAndApply') }}
@@ -192,50 +244,91 @@
-
+
{{ tm('t2iTemplateEditor.confirmReset') }}
{{ tm('t2iTemplateEditor.confirmResetMessage') }}
-
- {{ t('core.common.cancel') }}
- {{ tm('t2iTemplateEditor.confirmResetButton') }}
+
+
+ {{ t('core.common.cancel') }}
+
+
+ {{ tm('t2iTemplateEditor.confirmResetButton') }}
+
-
+
{{ tm('t2iTemplateEditor.confirmDelete') }}
{{ tm('t2iTemplateEditor.confirmDeleteMessage', { name: selectedTemplate }) }}
-
- {{ t('core.common.cancel') }}
- {{ tm('t2iTemplateEditor.confirmDeleteButton') }}
+
+
+ {{ t('core.common.cancel') }}
+
+
+ {{ tm('t2iTemplateEditor.confirmDeleteButton') }}
+
-
+
{{ tm('t2iTemplateEditor.confirmAction') }}
{{ tm('t2iTemplateEditor.confirmApplyMessage', { name: selectedTemplate }) }}
-
- {{ t('core.common.cancel') }}
- {{ t('core.common.confirm') }}
+
+
+ {{ t('core.common.cancel') }}
+
+
+ {{ t('core.common.confirm') }}
+
-
diff --git a/dashboard/src/components/shared/TemplateListEditor.vue b/dashboard/src/components/shared/TemplateListEditor.vue
index 9cc49d9a9..42868eebd 100644
--- a/dashboard/src/components/shared/TemplateListEditor.vue
+++ b/dashboard/src/components/shared/TemplateListEditor.vue
@@ -20,7 +20,9 @@
@click="addEntry(option.value)"
>
{{ translateIfKey(option.label) }}
- {{ translateIfKey(option.hint) }}
+
+ {{ translateIfKey(option.hint) }}
+
@@ -56,25 +58,54 @@
{{ expandedEntries[entryIndex] ? 'mdi-chevron-down' : 'mdi-chevron-right' }}
- {{ templateLabel(entry.__template_key) }}
-
+
+ {{ templateLabel(entry.__template_key) }}
+
+
{{ translateIfKey(getTemplate(entry)?.hint || getTemplate(entry)?.description) }}
-
+
mdi-delete
-
-
- {{ t('core.common.templateList.missingTemplate') || '找不到对应模板,请删除后重新添加。' }}
+
+
+
+ {{ t('core.common.templateList.missingTemplate') || '找不到对应模板,请删除后重新添加。' }}
+
-
-
+
+
{{ translateIfKey(itemMeta?.description) || itemKey }}
-
+
{{ translateIfKey(itemMeta.hint) }}
-
+
-
+
{{ translateIfKey(childMeta?.description) || childKey }}
@@ -101,7 +142,11 @@
-
+
+ />
@@ -119,7 +164,11 @@
-
+
{{ translateIfKey(itemMeta?.description) }} ({{ itemKey }})
@@ -130,7 +179,11 @@
-
+
+ />
diff --git a/dashboard/src/components/shared/TraceDisplayer.vue b/dashboard/src/components/shared/TraceDisplayer.vue
index 62c57ef47..cea6c8dba 100644
--- a/dashboard/src/components/shared/TraceDisplayer.vue
+++ b/dashboard/src/components/shared/TraceDisplayer.vue
@@ -5,27 +5,52 @@ import { EventSourcePolyfill } from 'event-source-polyfill';
-
+
-
+
- {{ formatTime(event.first_time) }}
-
+
+ {{ formatTime(event.first_time) }}
+
+
{{ shortSpan(event.span_id) }}
- {{ event.umo }}
+
+ {{ event.umo }}
+
@@ -33,33 +58,72 @@ import { EventSourcePolyfill } from 'event-source-polyfill';
{{ formatTime(event.last_time) }}
-->
- {{
- event.sender_name || '-' }}
+
+ {{
+ event.sender_name || '-' }}
+
- {{ event.message_outline || '-' }}
+
+ {{ event.message_outline || '-' }}
+
-
+
{{ event.collapsed ? 'Expand' : 'Collapse' }}
-
+
-
-
- {{ record.timeLabel }}
- {{ record.action }}
+
+
+
+ {{ record.timeLabel }}
+
+
+ {{ record.action }}
+
{{ record.fieldsText }}
-
- No trace data yet.
+
+ No trace data yet.
+
diff --git a/dashboard/src/components/shared/UninstallConfirmDialog.vue b/dashboard/src/components/shared/UninstallConfirmDialog.vue
index a6784d2a1..22d206596 100644
--- a/dashboard/src/components/shared/UninstallConfirmDialog.vue
+++ b/dashboard/src/components/shared/UninstallConfirmDialog.vue
@@ -15,9 +15,11 @@
{{ tm('dialogs.uninstall.message') }}
-
+
- {{ t('core.common.actions') }}:
+
+ {{ t('core.common.actions') }}:
+
-
+
-
- mdi-information-outline
+
+
+ mdi-information-outline
+
{{ tm('dialogs.uninstall.configHint') }}
@@ -42,10 +50,16 @@
color="error"
hide-details
>
-
+
-
- mdi-information-outline
+
+
+ mdi-information-outline
+
{{ tm('dialogs.uninstall.dataHint') }}
@@ -59,7 +73,7 @@
density="compact"
class="mt-4"
>
-
+
mdi-alert
{{ t('messages.validation.operation_cannot_be_undone') }}
@@ -67,7 +81,7 @@
-
+
-
-
- {{ t('core.common.restart.waiting') }}
-
-
-
-
-
+
+
+ {{ t('core.common.restart.waiting') }}
+
+
+
+
+
-
+
{
height: 30px;
z-index: 9999;
"
- >
+ />
@@ -582,22 +588,18 @@ const isChristmas = computed(() => {
}"
@click="handleLogoClick"
>
- AstrBot
-
+ AstrBot
+
ChatUI
+ >ChatUI
{{ botCurrVersion }}
@@ -612,10 +614,18 @@ const isChristmas = computed(() => {
group
density="compact"
>
-
+
Chat
- Bot
+
+ Bot
+
@@ -633,8 +643,11 @@ const isChristmas = computed(() => {
-
-
+
+
{
color="primary"
class="mobile-mode-toggle"
>
-
- mdi-robot
+
+
+ mdi-robot
+
Bot
-
- mdi-chat
+
+
+ mdi-chat
+
Chat
@@ -681,25 +704,30 @@ const isChristmas = computed(() => {
:location="$vuetify.display.xs ? 'bottom' : 'start center'"
offset="8"
>
-
+
@@ -710,19 +738,22 @@ const isChristmas = computed(() => {
elevation="8"
rounded="lg"
>
-
@@ -834,10 +876,12 @@ const isChristmas = computed(() => {
class="mb-4"
indeterminate
color="primary"
- >
+ />
- {{ botCurrVersion }}
+
+ {{ botCurrVersion }}
+
{{ updateStatus }}
@@ -860,22 +904,18 @@ const isChristmas = computed(() => {
- {{ t("core.header.updateDialog.tip") }}
- {{ t("core.header.updateDialog.tipContinue") }}
+ {{ t("core.header.updateDialog.tip") }}
+ {{ t("core.header.updateDialog.tipContinue") }}
- {{ t("core.header.updateDialog.dockerTip") }}
+ {{ t("core.header.updateDialog.dockerTip") }}
{{
t("core.header.updateDialog.dockerTipLink")
}}
- {{ t("core.header.updateDialog.dockerTipContinue") }}
+ {{ t("core.header.updateDialog.dockerTipContinue") }}
{
variant="tonal"
border="start"
>
-
+
mdi-alert-circle-outline
{{
t("core.header.updateDialog.preReleaseWarning.title")
}}
-
+
{{
t("core.header.updateDialog.preReleaseWarning.description")
}}
@@ -915,7 +955,7 @@ const isChristmas = computed(() => {
item-key="name"
:items-per-page="8"
>
-
+
{{ item.tag_name }}
{
{{ t("core.header.updateDialog.table.view") }}
+ {{ t("core.header.updateDialog.table.view") }}
+
{{ t("core.header.updateDialog.table.switch") }}
@@ -960,19 +1001,17 @@ const isChristmas = computed(() => {
-
+
{{ t("core.header.updateDialog.dashboardUpdate.title") }}
- {{
- t("core.header.updateDialog.dashboardUpdate.currentVersion")
- }}
- {{ dashboardCurrentVersion }}
-
+ {{
+ t("core.header.updateDialog.dashboardUpdate.currentVersion")
+ }}
+ {{ dashboardCurrentVersion }}
+
@@ -981,7 +1020,7 @@ const isChristmas = computed(() => {
t("core.header.updateDialog.dashboardUpdate.hasNewVersion")
}}
-
+
{{ t("core.header.updateDialog.dashboardUpdate.isLatest") }}
@@ -989,9 +1028,9 @@ const isChristmas = computed(() => {
{{
t("core.header.updateDialog.dashboardUpdate.downloadAndUpdate")
@@ -1001,7 +1040,7 @@ const isChristmas = computed(() => {
-
+
{
-
+
{{ t("core.header.updateDialog.releaseNotes.title") }}:
@@ -1028,7 +1070,7 @@ const isChristmas = computed(() => {
/>
-
+
{
-
+
{{ t("core.header.updateDialog.desktopApp.title") }}
@@ -1049,7 +1094,11 @@ const isChristmas = computed(() => {
{{ t("core.header.updateDialog.desktopApp.message") }}
-
+
{{ t("core.header.updateDialog.desktopApp.currentVersion") }}
{{ desktopUpdateCurrentVersion }}
@@ -1073,25 +1122,25 @@ const isChristmas = computed(() => {
-
+
{{ t("core.common.dialog.cancelButton") }}
{{ t("core.common.dialog.confirmButton") }}
@@ -1111,7 +1160,7 @@ const isChristmas = computed(() => {
+ />
{
{{ accountEditStatus.message }}
-
+
{
variant="outlined"
required
clearable
- @click:append-inner="showPassword = !showPassword"
prepend-inner-icon="mdi-lock-outline"
hide-details="auto"
class="mb-4"
- >
+ @click:append-inner="showPassword = !showPassword"
+ />
{
:label="t('core.header.accountDialog.form.newPassword')"
variant="outlined"
clearable
- @click:append-inner="showNewPassword = !showNewPassword"
prepend-inner-icon="mdi-lock-plus-outline"
:hint="t('core.header.accountDialog.form.passwordHint')"
persistent-hint
class="mb-4"
- >
+ @click:append-inner="showNewPassword = !showNewPassword"
+ />
{
:label="t('core.header.accountDialog.form.confirmPassword')"
variant="outlined"
clearable
- @click:append-inner="showConfirmPassword = !showConfirmPassword"
prepend-inner-icon="mdi-lock-check-outline"
:hint="t('core.header.accountDialog.form.confirmPasswordHint')"
persistent-hint
class="mb-4"
- >
+ @click:append-inner="showConfirmPassword = !showConfirmPassword"
+ />
{
:hint="t('core.header.accountDialog.form.usernameHint')"
persistent-hint
class="mb-3"
- >
+ />
@@ -1206,25 +1258,25 @@ const isChristmas = computed(() => {
-
+
-
+
{{ t("core.header.accountDialog.actions.cancel") }}
{{ t("core.header.accountDialog.actions.save") }}
@@ -1233,7 +1285,10 @@ const isChristmas = computed(() => {
-
+
diff --git a/dashboard/src/layouts/full/vertical-sidebar/NavItem.vue b/dashboard/src/layouts/full/vertical-sidebar/NavItem.vue
index 4051ccecd..f996d36bf 100644
--- a/dashboard/src/layouts/full/vertical-sidebar/NavItem.vue
+++ b/dashboard/src/layouts/full/vertical-sidebar/NavItem.vue
@@ -27,10 +27,20 @@ const isItemActive = computed(() => {
-
-
-
+
+
+
{{ t(item.title) }}
@@ -38,24 +48,57 @@ const isItemActive = computed(() => {
-
-
+
+
-
-
-
+
+
+
- {{ t(item.title) }}
- |