-
-
-
-
@@ -113,7 +123,7 @@ import { onMounted, ref, watch } from 'vue'
import { invoke } from '@tauri-apps/api/core'
import { debounce } from 'lodash-es'
import { open as openDialog } from '@tauri-apps/plugin-dialog'
-import { Folder, Settings2 } from 'lucide-vue-next'
+import { ContainerIcon, FileIcon, Folder, LanguagesIcon, PickaxeIcon, Settings2 } from 'lucide-vue-next'
import Button from '../../ui/Button.vue'
import { useToast } from '../../plugins/toast'
import Tabs from '../../ui/Tabs.vue'
@@ -126,8 +136,33 @@ const emit = defineEmits<{
const toast = useToast()
-const activeTab = ref('')
-const tabsData = ref([] as any[])
+const activePlugin = ref('')
+const tabsPluginData = ref([] as any[])
+
+const activeTab = ref('general')
+const tabsData = [
+ {
+ key: 'general',
+ label: '通用配置',
+ icon: Settings2
+ },
+ {
+ 'key': 'environment',
+ 'label': '环境配置',
+ 'icon': ContainerIcon
+ },
+ {
+ key: 'template',
+ label: '模板配置',
+ icon: FileIcon
+ },
+ {
+ key: 'advanced',
+ label: '高级配置',
+ icon: PickaxeIcon
+ }
+]
+
const globalConfig = ref(null as any)
const pluginConfig = ref
({
enabled: false,
@@ -144,18 +179,19 @@ const pluginConfig = ref({
const getSupportedLanguages = async () => {
try {
const languages = await invoke('get_supported_languages')
- tabsData.value = languages.map((language) => ({
+ tabsPluginData.value = languages.map((language) => ({
key: language.value,
- label: language.name
+ label: language.name,
+ svgUrl: `/icons/${ language.value.replace(/\d+$/, '') }.svg`
}))
- if (tabsData.value.length > 0 && !activeTab.value) {
- activeTab.value = tabsData.value[0].key
+ if (tabsPluginData.value.length > 0 && !activePlugin.value) {
+ activePlugin.value = tabsPluginData.value[0].key
}
}
catch (error) {
toast.error('获取支持的语言失败 - 错误信息: ' + error)
- tabsData.value = []
+ tabsPluginData.value = []
}
}
@@ -172,7 +208,7 @@ const getConfigure = async () => {
const handleTabChange = () => {
if (globalConfig.value && globalConfig.value.plugins) {
- pluginConfig.value = globalConfig.value.plugins.find((plugin: any) => plugin.language === activeTab.value)
+ pluginConfig.value = globalConfig.value.plugins.find((plugin: any) => plugin.language === activePlugin.value)
}
}
@@ -209,7 +245,7 @@ const updateGlobalConfig = async (updatedPlugin: PluginConfig) => {
try {
await invoke('update_app_config', { config: globalConfig.value })
- toast.success(`${ tabsData.value.find((tab: any) => tab.key === updatedPlugin.language).label } 配置已保存`)
+ toast.success(`${ tabsPluginData.value.find((tab: any) => tab.key === updatedPlugin.language).label } 配置已保存`)
emit('settings-changed', updatedPlugin)
}
catch (error) {
diff --git a/src/ui/Tabs.vue b/src/ui/Tabs.vue
index 73ad136..a428c96 100644
--- a/src/ui/Tabs.vue
+++ b/src/ui/Tabs.vue
@@ -21,8 +21,14 @@
:aria-controls="`tabpanel-${tab.key || tab.name || index}`"
role="tab"
:tabindex="isActiveTab(tab) ? 0 : -1">
-
-
+
+
+
+
+
+
+
+
@@ -91,6 +97,8 @@ export interface Tab
content?: Component
html?: string
text?: string
+ svgIcon?: string
+ svgUrl?: string
[key: string]: any
}