|
|
@@ -8,7 +8,7 @@ import AppList from '../components/AppList.vue'
|
|
|
import AppListItem from '../components/AppListItem.vue'
|
|
|
|
|
|
// 状态管理
|
|
|
-const apps = ref<AppItem[]>([])
|
|
|
+const apps = ref<Record<string, AppItem[]>>({})
|
|
|
const selectedApp = ref<AppItem | null>(null)
|
|
|
const isFullScreen = ref(false)
|
|
|
const isLoading = ref(false)
|
|
|
@@ -26,7 +26,13 @@ function toggleLeftPanel() {
|
|
|
async function loadApps() {
|
|
|
try {
|
|
|
const data = await window.electronAPI.loadAppsJson()
|
|
|
- apps.value = data
|
|
|
+ if (Array.isArray(data)) {
|
|
|
+ apps.value = {
|
|
|
+ "未分组": data as AppItem[]
|
|
|
+ };
|
|
|
+ } else {
|
|
|
+ apps.value = data
|
|
|
+ }
|
|
|
} catch (error) {
|
|
|
console.error('Failed to load apps:', error)
|
|
|
}
|
|
|
@@ -148,13 +154,16 @@ onMounted(() => {
|
|
|
</button>
|
|
|
</h2>
|
|
|
<AppList>
|
|
|
- <AppListItem
|
|
|
- v-for="app in apps"
|
|
|
- :key="app.id"
|
|
|
- :app="app"
|
|
|
- :activeAppId="selectedApp?.id"
|
|
|
- @selectApp="selectApp(app)"
|
|
|
- />
|
|
|
+ <div v-for="(group, title) in apps" :key="title">
|
|
|
+ <h5>{{ title }}</h5>
|
|
|
+ <AppListItem
|
|
|
+ v-for="app in group"
|
|
|
+ :key="app.id"
|
|
|
+ :app="app"
|
|
|
+ :activeAppId="selectedApp?.id"
|
|
|
+ @selectApp="selectApp(app)"
|
|
|
+ />
|
|
|
+ </div>
|
|
|
</AppList>
|
|
|
<!-- 底部控制按钮 -->
|
|
|
<div class="bottom-panel">
|