diff --git a/components.d.ts b/components.d.ts
index 37d0b42..18778eb 100644
--- a/components.d.ts
+++ b/components.d.ts
@@ -21,6 +21,7 @@ declare module 'vue' {
DiagramCanvas: typeof import('./src/components/LabCanvas/DiagramCanvas.vue')['default']
Dialog: typeof import('./src/components/Dialog.vue')['default']
ETH: typeof import('./src/components/equipments/ETH.vue')['default']
+ FunctionBar: typeof import('./src/components/FunctionBar.vue')['default']
HDMI: typeof import('./src/components/equipments/HDMI.vue')['default']
IpInputField: typeof import('./src/components/InputField/IpInputField.vue')['default']
LabCanvas: typeof import('./src/components/LabCanvasNew/LabCanvas.vue')['default']
@@ -42,6 +43,11 @@ declare module 'vue' {
RekaSplitterGroup: typeof import('reka-ui')['SplitterGroup']
RouterLink: typeof import('vue-router')['RouterLink']
RouterView: typeof import('vue-router')['RouterView']
+ ScrollAreaCorner: typeof import('reka-ui')['ScrollAreaCorner']
+ ScrollAreaRoot: typeof import('reka-ui')['ScrollAreaRoot']
+ ScrollAreaScrollbar: typeof import('reka-ui')['ScrollAreaScrollbar']
+ ScrollAreaThumb: typeof import('reka-ui')['ScrollAreaThumb']
+ ScrollAreaViewport: typeof import('reka-ui')['ScrollAreaViewport']
SD: typeof import('./src/components/equipments/SD.vue')['default']
SevenSegmentDisplay: typeof import('./src/components/equipments/SevenSegmentDisplay.vue')['default']
SFP: typeof import('./src/components/equipments/SFP.vue')['default']
@@ -52,6 +58,11 @@ declare module 'vue' {
SplitterPanel: typeof import('reka-ui')['SplitterPanel']
SplitterResizeHandle: typeof import('reka-ui')['SplitterResizeHandle']
Switch: typeof import('./src/components/equipments/Switch.vue')['default']
+ TabsContent: typeof import('reka-ui')['TabsContent']
+ TabsIndicator: typeof import('reka-ui')['TabsIndicator']
+ TabsList: typeof import('reka-ui')['TabsList']
+ TabsRoot: typeof import('reka-ui')['TabsRoot']
+ TabsTrigger: typeof import('reka-ui')['TabsTrigger']
ThemeControlButton: typeof import('./src/components/ThemeControlButton.vue')['default']
ThemeControlToggle: typeof import('./src/components/ThemeControlToggle.vue')['default']
TutorialCarousel: typeof import('./src/components/TutorialCarousel.vue')['default']
diff --git a/src/components/FunctionBar.vue b/src/components/FunctionBar.vue
new file mode 100644
index 0000000..b5db5ae
--- /dev/null
+++ b/src/components/FunctionBar.vue
@@ -0,0 +1,70 @@
+
+
+
+
+
+
diff --git a/src/components/Navbar.vue b/src/components/Navbar.vue
index 1c11536..e49cb1b 100644
--- a/src/components/Navbar.vue
+++ b/src/components/Navbar.vue
@@ -50,18 +50,6 @@
测试功能
-
-
-
- HTTP视频流
-
-
-
-
-
- 示波器
-
-
diff --git a/src/router/index.ts b/src/router/index.ts
index f9761e5..723c3d4 100644
--- a/src/router/index.ts
+++ b/src/router/index.ts
@@ -19,8 +19,6 @@ const router = createRouter({
{ path: "/test", name: "test", component: TestView },
{ path: "/user", name: "user", component: UserView },
{ path: "/admin", name: "admin", component: AdminView },
- { path: "/video-stream", name: "videoStream", component: VideoStreamView },
- { path: "/oscilloscope", name: "oscilloscope", component: OscilloscopeView },
],
});
diff --git a/src/views/ProjectView.vue b/src/views/ProjectView.vue
index 50f432a..fdc9519 100644
--- a/src/views/ProjectView.vue
+++ b/src/views/ProjectView.vue
@@ -1,41 +1,89 @@
-
-
-
-
+
+
+
+
+
+
+
+
+
+
+
+
+
+
-
-
-
+
+
+
+
-
+
-
+
@@ -46,16 +94,19 @@ import DiagramCanvas from "@/components/LabCanvas/DiagramCanvas.vue";
import ComponentSelector from "@/components/LabCanvas/ComponentSelector.vue";
import PropertyPanel from "@/components/PropertyPanel.vue";
import MarkdownRenderer from "@/components/MarkdownRenderer.vue";
+import FunctionBar from "@/components/FunctionBar.vue";
import { useProvideComponentManager } from "@/components/LabCanvas";
-import type { DiagramData, DiagramPart } from "@/components/LabCanvas";
+import type { DiagramData } from "@/components/LabCanvas";
+import { useAlertStore } from "@/components/Alert";
-// 获取路由参数
import { useRoute } from "vue-router";
const route = useRoute();
// 提供组件管理服务
const componentManager = useProvideComponentManager();
+const alert = useAlertStore();
+
// --- 文档面板控制 ---
const showDocPanel = ref(false);
const documentContent = ref("");
@@ -106,34 +157,6 @@ async function loadDocumentContent() {
const showComponentsMenu = ref(false);
const diagramCanvas = ref(null);
-// --- 页面动画和通知 ---
-const showNotification = ref(false);
-const notificationMessage = ref("");
-const notificationType = ref<"success" | "error" | "info">("info");
-
-function showToast(
- message: string,
- type: "success" | "error" | "info" = "info",
- duration = 3000,
-) {
- const canvasInstance = diagramCanvas.value as any;
- if (canvasInstance && canvasInstance.showToast) {
- canvasInstance.showToast(message, type, duration);
- } else {
- // 后备方案:使用原来的通知系统
- notificationMessage.value = message;
- notificationType.value = type;
- showNotification.value = true;
-
- // 设置自动消失
- setTimeout(() => {
- showNotification.value = false;
- }, duration);
- }
-}
-
-// --- 事件处理器(委托给组件管理器) ---
-
function openComponentsMenu() {
showComponentsMenu.value = true;
}
@@ -155,7 +178,7 @@ async function handleAddTemplate(templateData: {
}) {
const result = await componentManager.addTemplate(templateData);
if (result) {
- showToast(result.message, result.success ? "success" : "error");
+ alert?.show(result.message, result.success ? "success" : "error");
}
}