diff --git a/frontend/package.json b/frontend/package.json index d167c93b..ad54c7df 100644 --- a/frontend/package.json +++ b/frontend/package.json @@ -9,6 +9,7 @@ "preview": "vite preview" }, "dependencies": { + "lodash": "^4.17.21", "vue": "^3.5.13", "vue-router": "^4.5.0", "web-storage-cache": "^1.1.1" @@ -16,11 +17,11 @@ "devDependencies": { "@element-plus/icons-vue": "^2.3.1", "@types/crypto-js": "^4.2.2", - "crypto-js": "^4.2.0", "@types/node": "^22.14.1", "@vitejs/plugin-vue": "^5.2.2", "@vue/tsconfig": "^0.7.0", "axios": "^1.8.4", + "crypto-js": "^4.2.0", "element-plus": "^2.9.7", "less": "^4.3.0", "pinia": "^3.0.2", diff --git a/frontend/src/views/dashboard/PreviewDashboard.vue b/frontend/src/views/dashboard/PreviewDashboard.vue new file mode 100644 index 00000000..70afb45f --- /dev/null +++ b/frontend/src/views/dashboard/PreviewDashboard.vue @@ -0,0 +1,53 @@ + + + + + diff --git a/frontend/src/views/dashboard/canvas/DsCanvasCore.vue b/frontend/src/views/dashboard/canvas/DsCanvasCore.vue new file mode 100644 index 00000000..5862fb11 --- /dev/null +++ b/frontend/src/views/dashboard/canvas/DsCanvasCore.vue @@ -0,0 +1,898 @@ + + + + + diff --git a/frontend/src/views/dashboard/css/DeDrag.less b/frontend/src/views/dashboard/css/DeDrag.less new file mode 100644 index 00000000..08c48f67 --- /dev/null +++ b/frontend/src/views/dashboard/css/DeDrag.less @@ -0,0 +1,110 @@ +.dragAndResize +{ + position: relative; + + user-select: none; + + * + { + box-sizing: border-box; + margin: 0; + padding: 0; + } + + .item + { + position: absolute; + + width: 100px; + height: 100px; + + cursor: move; + + border: 1px solid; + background-color: #fff; + + .resizeHandle + { + position: absolute; + right: 2px; + bottom: 2px; + + width: 0; + height: 0; + + cursor: nw-resize; + + opacity: .5; + border-bottom: 10px solid black; + border-left: 10px solid transparent; + } + } + + .moveAnimation + { + transition: top 80ms ease; + } + + .canNotDrag + { + cursor: default!important; + } + + .cloneNode + { + z-index: 3; + + transition: none; + + opacity: .5; + } + + .movingItem + { + position: absolute; + + border: none; + &:before + { + position: absolute; + z-index: 2; + top: 0; + left: 0; + + width: 100%; + height: 100%; + + content: ''; + + background-color: #bbb; + } + } + + .positionBox + { + position: fixed; + top: 0; + right: 100px; + + overflow: auto; + + width: 500px; + height: 500px; + + border: 1px solid; + } + + .coords + { + position: fixed; + right: 100px; + bottom: 200px; + + overflow: auto; + + width: 200px; + height: 200px; + + border: 1px solid; + } +}