diff --git a/src/pages/vimp/components/canvas-area.vue b/src/pages/vimp/components/canvas-area.vue
deleted file mode 100644
index 2d103a4..0000000
--- a/src/pages/vimp/components/canvas-area.vue
+++ /dev/null
@@ -1,64 +0,0 @@
-
-
-
-
-
diff --git a/src/pages/vimp/components/config-panel.vue b/src/pages/vimp/components/config-panel.vue
index 1e97451..183f069 100644
--- a/src/pages/vimp/components/config-panel.vue
+++ b/src/pages/vimp/components/config-panel.vue
@@ -1,14 +1,14 @@
@@ -107,22 +107,14 @@ const expandConfigPanel = () => {
'--n-tab-gap-vertical': '0',
}"
>
-
+
-
- {{ t.tab }}面板(占位)
-
+ {{ t.tab }}面板(占位)
diff --git a/src/pages/vimp/components/screen-panel.vue b/src/pages/vimp/components/screen-panel.vue
new file mode 100644
index 0000000..ba0208b
--- /dev/null
+++ b/src/pages/vimp/components/screen-panel.vue
@@ -0,0 +1,97 @@
+
+
+
+
+
diff --git a/src/pages/vimp/stores/index.ts b/src/pages/vimp/stores/index.ts
index e0e1af0..d86e9ac 100644
--- a/src/pages/vimp/stores/index.ts
+++ b/src/pages/vimp/stores/index.ts
@@ -2,3 +2,4 @@ export * from './alarm';
export * from './camera';
export * from './config-panel';
export * from './resource-panel';
+export * from './screen';
diff --git a/src/pages/vimp/stores/screen.ts b/src/pages/vimp/stores/screen.ts
new file mode 100644
index 0000000..306f0f1
--- /dev/null
+++ b/src/pages/vimp/stores/screen.ts
@@ -0,0 +1,58 @@
+import { defineStore } from 'pinia'
+import { ref } from 'vue'
+
+export interface Screen {
+ id: string
+ name: string
+}
+
+let counter = 4
+
+const genId = (): string => `screen-${crypto.randomUUID()}`
+
+const defaultName = (n: number): string => `屏幕 ${n}`
+
+export const useScreenStore = defineStore('vimp-screen', () => {
+ const screens = ref([
+ { id: 'screen-1', name: '屏幕 1' },
+ { id: 'screen-2', name: '屏幕 2' },
+ { id: 'screen-3', name: '屏幕 3' },
+ { id: 'screen-4', name: '屏幕 4' },
+ ])
+
+ const activeScreenId = ref(screens.value[0]?.id ?? '')
+
+ const addScreen = () => {
+ const id = genId()
+ screens.value.push({ id, name: defaultName(screens.value.length + 1) })
+ activeScreenId.value = id
+ }
+
+ const removeScreen = (id: string) => {
+ if (screens.value.length <= 1) return
+ const index = screens.value.findIndex(s => s.id === id)
+ if (index === -1) return
+ screens.value.splice(index, 1)
+ if (activeScreenId.value === id) {
+ const fallback = screens.value[index] ?? screens.value[index - 1]
+ if (fallback) activeScreenId.value = fallback.id
+ }
+ }
+
+ const renameScreen = (id: string, name: string) => {
+ const target = screens.value.find(s => s.id === id)
+ if (!target) return
+ const trimmed = name.trim()
+ if (trimmed.length === 0) return
+ if (trimmed === target.name) return
+ target.name = trimmed
+ }
+
+ return {
+ screens,
+ activeScreenId,
+ addScreen,
+ removeScreen,
+ renameScreen,
+ }
+})
diff --git a/src/pages/vimp/vimp-page.vue b/src/pages/vimp/vimp-page.vue
index e5a6e2c..580955f 100644
--- a/src/pages/vimp/vimp-page.vue
+++ b/src/pages/vimp/vimp-page.vue
@@ -1,13 +1,13 @@
-
+