From cfd8769e9be5ba38078682c029490ca9d9a25ee0 Mon Sep 17 00:00:00 2001 From: alivender <13898766233@163.com> Date: Fri, 25 Apr 2025 16:11:53 +0800 Subject: [PATCH] feat: add project view --- package-lock.json | 79 ++++++- package.json | 1 + src/App.vue | 1 + src/components/DiagramCanvas.vue | 370 +++++++++++++++++++++++++++++++ src/router/index.ts | 4 +- src/views/ProjectView.vue | 137 ++++++++++++ 6 files changed, 589 insertions(+), 3 deletions(-) create mode 100644 src/components/DiagramCanvas.vue create mode 100644 src/views/ProjectView.vue diff --git a/package-lock.json b/package-lock.json index 3bbcd3d..7496ea4 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1,14 +1,15 @@ { "name": "fpga-weblab", - "version": "0.0.0", + "version": "0.1.0", "lockfileVersion": 3, "requires": true, "packages": { "": { "name": "fpga-weblab", - "version": "0.0.0", + "version": "0.1.0", "dependencies": { "@types/lodash": "^4.17.16", + "@wokwi/elements": "^1.7.0", "all": "^0.0.0", "lodash": "^4.17.21", "log-symbols": "^7.0.0", @@ -998,6 +999,21 @@ "@jridgewell/sourcemap-codec": "^1.4.14" } }, + "node_modules/@lit-labs/ssr-dom-shim": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/@lit-labs/ssr-dom-shim/-/ssr-dom-shim-1.3.0.tgz", + "integrity": "sha512-nQIWonJ6eFAvUUrSlwyHDm/aE8PBDu5kRpL0vHMg6K8fK3Diq1xdPjTnsJSwxABhaZ+5eBi1btQB5ShUTKo4nQ==", + "license": "BSD-3-Clause" + }, + "node_modules/@lit/reactive-element": { + "version": "1.6.3", + "resolved": "https://registry.npmjs.org/@lit/reactive-element/-/reactive-element-1.6.3.tgz", + "integrity": "sha512-QuTgnG52Poic7uM1AN5yJ09QMe0O28e10XzSvWDz02TJiiKee4stsiownEIadWm8nYzyDAyT+gKzUoZmiWQtsQ==", + "license": "BSD-3-Clause", + "dependencies": { + "@lit-labs/ssr-dom-shim": "^1.0.0" + } + }, "node_modules/@polka/url": { "version": "1.0.0-next.29", "resolved": "https://registry.npmjs.org/@polka/url/-/url-1.0.0-next.29.tgz", @@ -1626,6 +1642,21 @@ "undici-types": "~6.21.0" } }, + "node_modules/@types/react": { + "version": "19.1.2", + "resolved": "https://registry.npmjs.org/@types/react/-/react-19.1.2.tgz", + "integrity": "sha512-oxLPMytKchWGbnQM9O7D67uPa9paTNxO7jVoNMXgkkErULBPhPARCfkKL9ytcIJJRGjbsVwW4ugJzyFFvm/Tiw==", + "license": "MIT", + "dependencies": { + "csstype": "^3.0.2" + } + }, + "node_modules/@types/trusted-types": { + "version": "2.0.7", + "resolved": "https://registry.npmjs.org/@types/trusted-types/-/trusted-types-2.0.7.tgz", + "integrity": "sha512-ScaPdn1dQczgbl0QFTeTOmVHFULt394XJgOQNoyVhZ6r2vLnMLJfBPd53SB52T/3G36VI1/g2MZaX0cwDuXsfw==", + "license": "MIT" + }, "node_modules/@vitejs/plugin-vue": { "version": "5.2.3", "resolved": "https://registry.npmjs.org/@vitejs/plugin-vue/-/plugin-vue-5.2.3.tgz", @@ -1966,6 +1997,19 @@ } } }, + "node_modules/@wokwi/elements": { + "version": "1.7.0", + "resolved": "https://registry.npmjs.org/@wokwi/elements/-/elements-1.7.0.tgz", + "integrity": "sha512-8vgePMFmcmTldUvnCfkIMZ4tijy6H7e34JPQsdJPcJXUWdrp8XGEYnFETY6qrAI1Icm7SQChcarG/NpEV0Zn9Q==", + "license": "MIT", + "dependencies": { + "@types/react": ">=16", + "lit": "^2.0.0" + }, + "engines": { + "node": ">=16" + } + }, "node_modules/alien-signals": { "version": "1.0.13", "resolved": "https://registry.npmjs.org/alien-signals/-/alien-signals-1.0.13.tgz", @@ -2975,6 +3019,37 @@ "url": "https://opencollective.com/parcel" } }, + "node_modules/lit": { + "version": "2.8.0", + "resolved": "https://registry.npmjs.org/lit/-/lit-2.8.0.tgz", + "integrity": "sha512-4Sc3OFX9QHOJaHbmTMk28SYgVxLN3ePDjg7hofEft2zWlehFL3LiAuapWc4U/kYwMYJSh2hTCPZ6/LIC7ii0MA==", + "license": "BSD-3-Clause", + "dependencies": { + "@lit/reactive-element": "^1.6.0", + "lit-element": "^3.3.0", + "lit-html": "^2.8.0" + } + }, + "node_modules/lit-element": { + "version": "3.3.3", + "resolved": "https://registry.npmjs.org/lit-element/-/lit-element-3.3.3.tgz", + "integrity": "sha512-XbeRxmTHubXENkV4h8RIPyr8lXc+Ff28rkcQzw3G6up2xg5E8Zu1IgOWIwBLEQsu3cOVFqdYwiVi0hv0SlpqUA==", + "license": "BSD-3-Clause", + "dependencies": { + "@lit-labs/ssr-dom-shim": "^1.1.0", + "@lit/reactive-element": "^1.3.0", + "lit-html": "^2.8.0" + } + }, + "node_modules/lit-html": { + "version": "2.8.0", + "resolved": "https://registry.npmjs.org/lit-html/-/lit-html-2.8.0.tgz", + "integrity": "sha512-o9t+MQM3P4y7M7yNzqAyjp7z+mQGa4NS4CxiyLqFPyFWyc4O+nodLrkrxSaCTrla6M5YOLaT3RpbbqjszB5g3Q==", + "license": "BSD-3-Clause", + "dependencies": { + "@types/trusted-types": "^2.0.2" + } + }, "node_modules/lodash": { "version": "4.17.21", "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.21.tgz", diff --git a/package.json b/package.json index 6c945be..caa5c14 100644 --- a/package.json +++ b/package.json @@ -15,6 +15,7 @@ }, "dependencies": { "@types/lodash": "^4.17.16", + "@wokwi/elements": "^1.7.0", "all": "^0.0.0", "lodash": "^4.17.21", "log-symbols": "^7.0.0", diff --git a/src/App.vue b/src/App.vue index 908e59e..a718234 100644 --- a/src/App.vue +++ b/src/App.vue @@ -8,6 +8,7 @@ const items = [ { id: 1, icon: iconMenu, text: "用户界面", page: "/user" }, { id: 2, icon: iconMenu, text: "ComponentTest", page: "/test" }, { id: 3, icon: iconMenu, text: "JtagTest", page: "/test/jtag" }, + { id: 4, icon: iconMenu, text: "工程界面", page: "/project" }, // 新增工程界面入口 ]; diff --git a/src/components/DiagramCanvas.vue b/src/components/DiagramCanvas.vue new file mode 100644 index 0000000..a014b0a --- /dev/null +++ b/src/components/DiagramCanvas.vue @@ -0,0 +1,370 @@ + + + + + + + + + + + + + + {{ Math.round(scale * 100) }}% + + + + + + + diff --git a/src/router/index.ts b/src/router/index.ts index e25d963..82c0191 100644 --- a/src/router/index.ts +++ b/src/router/index.ts @@ -3,13 +3,15 @@ import LoginView from "../views/LoginView.vue"; import UserView from "../views/UserView.vue"; import TestView from "../views/TestView.vue"; import JtagTest from "../views/JtagTest.vue"; +import ProjectView from "../views/ProjectView.vue"; const routes = [ { path: "/", redirect: "/user" }, { path: "/login", name: "Login", component: LoginView }, { path: "/user", name: "User", component: UserView }, { path: "/test", name: "Test", component: TestView }, - { path: "/test/jtag", name:"JtagTest", component: JtagTest} + { path: "/test/jtag", name:"JtagTest", component: JtagTest}, + { path: "/project", name: "Project", component: ProjectView } // 新增工程界面 ]; const router = createRouter({ diff --git a/src/views/ProjectView.vue b/src/views/ProjectView.vue new file mode 100644 index 0000000..51eb4ee --- /dev/null +++ b/src/views/ProjectView.vue @@ -0,0 +1,137 @@ + + + + + FPGA 工程界面 + + + + + + + + + + + + + + + 属性编辑器 + 选择元器件以编辑属性 + + 编辑元器件: {{ getComponentName(selectedComponent) }} + + + + + + + + + + 选择元器件 + + + + + + + + + + + + + + {{ component.name }} + + + + + + + +