From 7ba46917879d21d560bbd0c4fd6aa907c7d1f41a Mon Sep 17 00:00:00 2001 From: chndfang Date: Sun, 11 May 2025 18:46:59 +0800 Subject: [PATCH] feat: light --- README.md | 238 +++++++++++++++++++++- mocks/robot/syncByGroupId | 5 + mocks/scene/getByGroupId | 32 ++- mocks/scene/saveByGroupId | 5 + src/apis/robot/api.ts | 16 +- src/apis/scene/api.ts | 30 ++- src/apis/scene/type.ts | 4 + src/assets/icons/light/area1-active.png | Bin 0 -> 578 bytes src/assets/icons/light/area1-detail.png | Bin 0 -> 568 bytes src/assets/icons/light/area1.png | Bin 0 -> 536 bytes src/assets/icons/light/area11-active.png | Bin 0 -> 1094 bytes src/assets/icons/light/area11-detail.png | Bin 0 -> 1025 bytes src/assets/icons/light/area11.png | Bin 0 -> 1003 bytes src/assets/icons/light/area12-active.png | Bin 0 -> 1057 bytes src/assets/icons/light/area12-detail.png | Bin 0 -> 1060 bytes src/assets/icons/light/area12.png | Bin 0 -> 970 bytes src/assets/icons/light/battery.png | Bin 0 -> 473 bytes src/assets/icons/light/battery_charge.png | Bin 0 -> 699 bytes src/assets/icons/light/connect_off.png | Bin 0 -> 980 bytes src/assets/icons/light/connect_on.png | Bin 0 -> 782 bytes src/assets/icons/light/control.png | Bin 0 -> 903 bytes src/assets/icons/light/detail.png | Bin 0 -> 580 bytes src/assets/icons/light/dot.png | Bin 0 -> 328 bytes src/assets/icons/light/dropdown.png | Bin 0 -> 305 bytes src/assets/icons/light/edit.png | Bin 0 -> 643 bytes src/assets/icons/light/edit_group.png | Bin 0 -> 688 bytes src/assets/icons/light/exit.png | Bin 0 -> 484 bytes src/assets/icons/light/pen.png | Bin 0 -> 601 bytes src/assets/icons/light/plus.png | Bin 0 -> 314 bytes src/assets/icons/light/point.png | Bin 0 -> 1167 bytes src/assets/icons/light/redo.png | Bin 0 -> 567 bytes src/assets/icons/light/register.png | Bin 0 -> 637 bytes src/assets/icons/light/robot.png | Bin 0 -> 1024 bytes src/assets/icons/light/route.png | Bin 0 -> 795 bytes src/assets/icons/light/save.png | Bin 0 -> 644 bytes src/assets/icons/light/search.png | Bin 0 -> 607 bytes src/assets/icons/light/trash.png | Bin 0 -> 759 bytes src/assets/icons/light/trash_fill.png | Bin 0 -> 719 bytes src/assets/icons/light/undo.png | Bin 0 -> 559 bytes src/assets/images/empty-light.png | Bin 0 -> 2221 bytes src/assets/themes/editor-light.json | 32 ++- src/components/editor-toolbar.vue | 9 +- src/components/robot-group.vue | 156 ++------------ src/pages/exception.vue | 2 - src/pages/group-editor.vue | 30 ++- src/pages/scene-editor.vue | 1 - src/services/editor.service.ts | 27 +-- 47 files changed, 417 insertions(+), 170 deletions(-) create mode 100644 mocks/robot/syncByGroupId create mode 100644 mocks/scene/saveByGroupId create mode 100644 src/assets/icons/light/area1-active.png create mode 100644 src/assets/icons/light/area1-detail.png create mode 100644 src/assets/icons/light/area1.png create mode 100644 src/assets/icons/light/area11-active.png create mode 100644 src/assets/icons/light/area11-detail.png create mode 100644 src/assets/icons/light/area11.png create mode 100644 src/assets/icons/light/area12-active.png create mode 100644 src/assets/icons/light/area12-detail.png create mode 100644 src/assets/icons/light/area12.png create mode 100644 src/assets/icons/light/battery.png create mode 100644 src/assets/icons/light/battery_charge.png create mode 100644 src/assets/icons/light/connect_off.png create mode 100644 src/assets/icons/light/connect_on.png create mode 100644 src/assets/icons/light/control.png create mode 100644 src/assets/icons/light/detail.png create mode 100644 src/assets/icons/light/dot.png create mode 100644 src/assets/icons/light/dropdown.png create mode 100644 src/assets/icons/light/edit.png create mode 100644 src/assets/icons/light/edit_group.png create mode 100644 src/assets/icons/light/exit.png create mode 100644 src/assets/icons/light/pen.png create mode 100644 src/assets/icons/light/plus.png create mode 100644 src/assets/icons/light/point.png create mode 100644 src/assets/icons/light/redo.png create mode 100644 src/assets/icons/light/register.png create mode 100644 src/assets/icons/light/robot.png create mode 100644 src/assets/icons/light/route.png create mode 100644 src/assets/icons/light/save.png create mode 100644 src/assets/icons/light/search.png create mode 100644 src/assets/icons/light/trash.png create mode 100644 src/assets/icons/light/trash_fill.png create mode 100644 src/assets/icons/light/undo.png create mode 100644 src/assets/images/empty-light.png diff --git a/README.md b/README.md index 2f6c1c6..d83cf01 100644 --- a/README.md +++ b/README.md @@ -19,12 +19,225 @@ SceneDetail "data": { "id": "mock-scene-1", "label": "模拟场景A", - "json": "{\"x\":0,\"y\":0,\"scale\":1,\"pens\":[],\"origin\":{\"x\":0,\"y\":0},\"center\":{\"x\":0,\"y\":0},\"paths\":{},\"template\":\"4c2a10f\",\"locked\":10,\"version\":\"1.0.78\",\"dataPoints\":[],\"robotGroups\":[{\"id\":\"mock-robot-group-1\",\"label\":\"模拟机器人组A\",\"robots\":[\"mock-robot-1\",\"mock-robot-2\",\"mock-robot-3\"]},{\"sid\":\"mock-scene-1\",\"id\":\"mock-robot-group-2\",\"label\":\"模拟机器人组B\",\"robots\":[\"mock-robot-4\"]}],\"robots\":[{\"gid\":\"mock-robot-group-1\",\"id\":\"mock-robot-1\",\"label\":\"模拟机器人A\",\"brand\":\"模拟品牌A\",\"type\":1,\"ip\":\"127.0.1.1\"},{\"gid\":\"mock-robot-group-1\",\"id\":\"mock-robot-2\",\"label\":\"模拟机器人B\",\"brand\":\"模拟品牌A\",\"type\":2,\"ip\":\"127.0.1.2\"},{\"gid\":\"mock-robot-group-1\",\"id\":\"mock-robot-3\",\"label\":\"模拟机器人C\",\"brand\":\"模拟品牌A\",\"type\":3,\"ip\":\"127.0.1.3\"},{\"gid\":\"mock-robot-group-2\",\"id\":\"mock-robot-4\",\"label\":\"模拟机器人D\",\"brand\":\"模拟品牌B\",\"type\":1,\"ip\":\"127.0.2.1\"}]}" + "json": "{\"x\":0,\"y\":0,\"scale\":1,\"pens\":[{\"id\":\"1417882e\",\"name\":\"area\",\"tags\":[\"area\",\"area-11\"],\"label\":\"测试互斥区\",\"x\":275,\"y\":54,\"width\":178,\"height\":107,\"lineWidth\":1,\"area\":{\"type\":11,\"points\":[\"083f10\",\"3a350276\"],\"routes\":[\"4781a31f\",\"fc86102\",\"6f33b86\"]},\"locked\":4,\"fontSize\":14,\"lineHeight\":1.5,\"anchors\":[],\"rotate\":0},{\"id\":\"f236e4b\",\"name\":\"area\",\"tags\":[\"area\",\"area-1\"],\"label\":\"测试库区\",\"x\":281,\"y\":246,\"width\":292,\"height\":152,\"lineWidth\":1,\"area\":{\"type\":1,\"points\":[\"343a2f0\"],\"routes\":[]},\"locked\":4,\"fontSize\":14,\"lineHeight\":1.5,\"anchors\":[],\"rotate\":0},{\"id\":\"de62ae3\",\"name\":\"area\",\"tags\":[\"area\",\"area-12\"],\"label\":\"测试非互斥区\",\"x\":63,\"y\":67,\"width\":203,\"height\":325,\"lineWidth\":1,\"area\":{\"type\":12,\"points\":[\"776fa1bf\",\"ea84ca\",\"51b95527\",\"200e2898\"],\"routes\":[]},\"locked\":4,\"fontSize\":14,\"lineHeight\":1.5,\"anchors\":[],\"rotate\":0},{\"x\":100,\"y\":100,\"width\":24,\"height\":24,\"lineWidth\":2,\"iconSize\":4,\"image\":\"\",\"canvasLayer\":3,\"id\":\"776fa1bf\",\"name\":\"point\",\"tags\":[\"point\"],\"label\":\"测试普通点\",\"point\":{\"type\":1},\"fontSize\":14,\"lineHeight\":1.5,\"anchors\":[{\"penId\":\"776fa1bf\",\"id\":\"t\",\"x\":0.5,\"y\":0},{\"penId\":\"776fa1bf\",\"id\":\"b\",\"x\":0.5,\"y\":1},{\"penId\":\"776fa1bf\",\"id\":\"l\",\"x\":0,\"y\":0.5},{\"penId\":\"776fa1bf\",\"id\":\"r\",\"x\":1,\"y\":0.5}],\"rotate\":0,\"connectedLines\":[{\"lineId\":\"3de9971\",\"lineAnchor\":\"42f48978\",\"anchor\":\"r\"},{\"lineId\":\"142dbab5\",\"lineAnchor\":\"70b09d5\",\"anchor\":\"b\"}]},{\"x\":200,\"y\":100,\"width\":24,\"height\":24,\"lineWidth\":2,\"iconSize\":4,\"image\":\"\",\"canvasLayer\":3,\"id\":\"ea84ca\",\"name\":\"point\",\"tags\":[\"point\"],\"label\":\"测试等待点\",\"point\":{\"type\":2,\"actions\":[\"343a2f0\"]},\"fontSize\":14,\"lineHeight\":1.5,\"anchors\":[{\"penId\":\"ea84ca\",\"id\":\"t\",\"x\":0.5,\"y\":0},{\"penId\":\"ea84ca\",\"id\":\"b\",\"x\":0.5,\"y\":1},{\"penId\":\"ea84ca\",\"id\":\"l\",\"x\":0,\"y\":0.5},{\"penId\":\"ea84ca\",\"id\":\"r\",\"x\":1,\"y\":0.5}],\"rotate\":0,\"connectedLines\":[{\"lineId\":\"3de9971\",\"lineAnchor\":\"60110d7\",\"anchor\":\"l\"},{\"lineId\":\"4781a31f\",\"lineAnchor\":\"73e75ced\",\"anchor\":\"r\"}]},{\"x\":300,\"y\":100,\"width\":24,\"height\":24,\"lineWidth\":2,\"iconSize\":4,\"image\":\"\",\"canvasLayer\":3,\"id\":\"083f10\",\"name\":\"point\",\"tags\":[\"point\"],\"label\":\"测试避让点\",\"point\":{\"type\":3},\"fontSize\":14,\"lineHeight\":1.5,\"anchors\":[{\"penId\":\"083f10\",\"id\":\"t\",\"x\":0.5,\"y\":0},{\"penId\":\"083f10\",\"id\":\"b\",\"x\":0.5,\"y\":1},{\"penId\":\"083f10\",\"id\":\"l\",\"x\":0,\"y\":0.5},{\"penId\":\"083f10\",\"id\":\"r\",\"x\":1,\"y\":0.5}],\"rotate\":0,\"connectedLines\":[{\"lineId\":\"4781a31f\",\"lineAnchor\":\"4c98bb6\",\"anchor\":\"l\"},{\"lineId\":\"fc86102\",\"lineAnchor\":\"19ec7bcb\",\"anchor\":\"r\"}]},{\"x\":400,\"y\":100,\"width\":24,\"height\":24,\"lineWidth\":2,\"iconSize\":4,\"image\":\"\",\"canvasLayer\":3,\"id\":\"3a350276\",\"name\":\"point\",\"tags\":[\"point\"],\"label\":\"测试临时避让点\",\"point\":{\"type\":4},\"fontSize\":14,\"lineHeight\":1.5,\"anchors\":[{\"penId\":\"3a350276\",\"id\":\"t\",\"x\":0.5,\"y\":0},{\"penId\":\"3a350276\",\"id\":\"b\",\"x\":0.5,\"y\":1},{\"penId\":\"3a350276\",\"id\":\"l\",\"x\":0,\"y\":0.5},{\"penId\":\"3a350276\",\"id\":\"r\",\"x\":1,\"y\":0.5}],\"rotate\":0,\"connectedLines\":[{\"lineId\":\"fc86102\",\"lineAnchor\":\"ef8cad\",\"anchor\":\"l\"},{\"lineId\":\"6f33b86\",\"lineAnchor\":\"2a73e4b\",\"anchor\":\"r\"}]},{\"x\":100,\"y\":300,\"width\":48,\"height\":60,\"lineWidth\":3,\"iconSize\":10,\"image\":\"/point/11-dark.png\",\"canvasLayer\":3,\"id\":\"51b95527\",\"name\":\"point\",\"tags\":[\"point\"],\"label\":\"测试电梯点\",\"point\":{\"type\":11},\"fontSize\":14,\"lineHeight\":1.5,\"anchors\":[{\"penId\":\"51b95527\",\"id\":\"t\",\"x\":0.5,\"y\":0},{\"penId\":\"51b95527\",\"id\":\"b\",\"x\":0.5,\"y\":1},{\"penId\":\"51b95527\",\"id\":\"l\",\"x\":0,\"y\":0.5},{\"penId\":\"51b95527\",\"id\":\"r\",\"x\":1,\"y\":0.5}],\"rotate\":0,\"connectedLines\":[{\"lineId\":\"7a48284\",\"lineAnchor\":\"4275bcb\",\"anchor\":\"r\"},{\"lineId\":\"142dbab5\",\"lineAnchor\":\"9167210\",\"anchor\":\"t\"},{\"lineId\":\"a3ad044\",\"lineAnchor\":\"d02372d\",\"anchor\":\"b\"},{\"lineId\":\"71734a6\",\"lineAnchor\":\"f004754\",\"anchor\":\"b\"}]},{\"x\":200,\"y\":300,\"width\":48,\"height\":60,\"lineWidth\":3,\"iconSize\":10,\"image\":\"/point/12-dark.png\",\"canvasLayer\":3,\"id\":\"200e2898\",\"name\":\"point\",\"tags\":[\"point\"],\"label\":\"测试自动门点\",\"point\":{\"type\":12},\"fontSize\":14,\"lineHeight\":1.5,\"anchors\":[{\"penId\":\"200e2898\",\"id\":\"t\",\"x\":0.5,\"y\":0},{\"penId\":\"200e2898\",\"id\":\"b\",\"x\":0.5,\"y\":1},{\"penId\":\"200e2898\",\"id\":\"l\",\"x\":0,\"y\":0.5},{\"penId\":\"200e2898\",\"id\":\"r\",\"x\":1,\"y\":0.5}],\"rotate\":0,\"connectedLines\":[{\"lineId\":\"7a48284\",\"lineAnchor\":\"1fe7246\",\"anchor\":\"l\"},{\"lineId\":\"83bc37\",\"lineAnchor\":\"a99e85a\",\"anchor\":\"r\"}]},{\"x\":300,\"y\":300,\"width\":48,\"height\":60,\"lineWidth\":3,\"iconSize\":10,\"image\":\"/point/13-dark.png\",\"canvasLayer\":3,\"id\":\"e94941e\",\"name\":\"point\",\"tags\":[\"point\"],\"label\":\"测试充电点\",\"point\":{\"type\":13,\"robots\":[\"mock-robot-1\",\"mock-robot-3\"]},\"fontSize\":14,\"lineHeight\":1.5,\"anchors\":[{\"penId\":\"e94941e\",\"id\":\"t\",\"x\":0.5,\"y\":0},{\"penId\":\"e94941e\",\"id\":\"b\",\"x\":0.5,\"y\":1},{\"penId\":\"e94941e\",\"id\":\"l\",\"x\":0,\"y\":0.5},{\"penId\":\"e94941e\",\"id\":\"r\",\"x\":1,\"y\":0.5}],\"rotate\":0,\"connectedLines\":[{\"lineId\":\"83bc37\",\"lineAnchor\":\"1daa737f\",\"anchor\":\"l\"},{\"lineId\":\"b52b5a\",\"lineAnchor\":\"c416385\",\"anchor\":\"r\"}]},{\"x\":400,\"y\":300,\"width\":48,\"height\":60,\"lineWidth\":3,\"iconSize\":10,\"image\":\"/point/14-dark.png\",\"canvasLayer\":3,\"id\":\"5bdd329\",\"name\":\"point\",\"tags\":[\"point\"],\"label\":\"测试停靠点\",\"point\":{\"type\":14,\"robots\":[\"mock-robot-4\"]},\"fontSize\":14,\"lineHeight\":1.5,\"anchors\":[{\"penId\":\"5bdd329\",\"id\":\"t\",\"x\":0.5,\"y\":0},{\"penId\":\"5bdd329\",\"id\":\"b\",\"x\":0.5,\"y\":1},{\"penId\":\"5bdd329\",\"id\":\"l\",\"x\":0,\"y\":0.5},{\"penId\":\"5bdd329\",\"id\":\"r\",\"x\":1,\"y\":0.5}],\"rotate\":0,\"connectedLines\":[{\"lineId\":\"b52b5a\",\"lineAnchor\":\"794362b4\",\"anchor\":\"l\"},{\"lineId\":\"610d367\",\"lineAnchor\":\"e17e57e\",\"anchor\":\"r\"}]},{\"x\":500,\"y\":300,\"width\":48,\"height\":60,\"lineWidth\":3,\"iconSize\":10,\"image\":\"/point/15-dark.png\",\"canvasLayer\":3,\"id\":\"343a2f0\",\"name\":\"point\",\"tags\":[\"point\"],\"label\":\"测试动作点\",\"point\":{\"type\":15},\"fontSize\":14,\"lineHeight\":1.5,\"anchors\":[{\"penId\":\"343a2f0\",\"id\":\"t\",\"x\":0.5,\"y\":0},{\"penId\":\"343a2f0\",\"id\":\"b\",\"x\":0.5,\"y\":1},{\"penId\":\"343a2f0\",\"id\":\"l\",\"x\":0,\"y\":0.5},{\"penId\":\"343a2f0\",\"id\":\"r\",\"x\":1,\"y\":0.5}],\"rotate\":0,\"connectedLines\":[{\"lineId\":\"6f33b86\",\"lineAnchor\":\"48a214cc\",\"anchor\":\"t\"},{\"lineId\":\"610d367\",\"lineAnchor\":\"34153c1c\",\"anchor\":\"l\"}]},{\"x\":100,\"y\":500,\"width\":48,\"height\":60,\"lineWidth\":3,\"iconSize\":10,\"image\":\"/point/16-dark.png\",\"canvasLayer\":3,\"id\":\"b6c6cfb\",\"name\":\"point\",\"tags\":[\"point\"],\"label\":\"测试禁行点\",\"point\":{\"type\":16},\"fontSize\":14,\"lineHeight\":1.5,\"anchors\":[{\"penId\":\"b6c6cfb\",\"id\":\"t\",\"x\":0.5,\"y\":0},{\"penId\":\"b6c6cfb\",\"id\":\"b\",\"x\":0.5,\"y\":1},{\"penId\":\"b6c6cfb\",\"id\":\"l\",\"x\":0,\"y\":0.5},{\"penId\":\"b6c6cfb\",\"id\":\"r\",\"x\":1,\"y\":0.5}],\"rotate\":0,\"connectedLines\":[{\"lineId\":\"a3ad044\",\"lineAnchor\":\"5657322\",\"anchor\":\"t\"},{\"lineId\":\"71734a6\",\"lineAnchor\":\"b23aeab\",\"anchor\":\"t\"}]},{\"height\":0,\"lineName\":\"line\",\"lineWidth\":2,\"name\":\"line\",\"type\":1,\"width\":76,\"x\":124,\"y\":112,\"anchors\":[{\"x\":0,\"y\":0,\"id\":\"42f48978\",\"lineLength\":76,\"connectTo\":\"776fa1bf\",\"anchorId\":\"r\"},{\"x\":1,\"y\":0,\"id\":\"60110d7\",\"connectTo\":\"ea84ca\",\"anchorId\":\"l\"}],\"id\":\"3de9971\",\"fontSize\":14,\"lineHeight\":1.5,\"length\":76,\"ex\":200,\"ey\":112,\"rotate\":0,\"tags\":[\"route\"],\"route\":{\"type\":\"line\",\"pass\":1},\"iconSize\":10},{\"height\":0,\"lineName\":\"line\",\"lineWidth\":2,\"name\":\"line\",\"type\":1,\"width\":76,\"x\":224,\"y\":112,\"anchors\":[{\"x\":0,\"y\":0,\"id\":\"73e75ced\",\"lineLength\":76,\"connectTo\":\"ea84ca\",\"anchorId\":\"r\"},{\"x\":1,\"y\":0,\"id\":\"4c98bb6\",\"connectTo\":\"083f10\",\"anchorId\":\"l\"}],\"id\":\"4781a31f\",\"fontSize\":14,\"lineHeight\":1.5,\"length\":76,\"ex\":300,\"ey\":112,\"rotate\":0,\"tags\":[\"route\"],\"route\":{\"type\":\"line\",\"pass\":1},\"iconSize\":10},{\"height\":0,\"lineName\":\"line\",\"lineWidth\":2,\"name\":\"line\",\"type\":1,\"width\":76,\"x\":324,\"y\":112,\"anchors\":[{\"x\":0,\"y\":0,\"id\":\"19ec7bcb\",\"lineLength\":76,\"connectTo\":\"083f10\",\"anchorId\":\"r\"},{\"x\":1,\"y\":0,\"id\":\"ef8cad\",\"connectTo\":\"3a350276\",\"anchorId\":\"l\"}],\"id\":\"fc86102\",\"fontSize\":14,\"lineHeight\":1.5,\"length\":76,\"ex\":400,\"ey\":112,\"rotate\":0,\"tags\":[\"route\"],\"route\":{\"type\":\"line\",\"pass\":0},\"iconSize\":10},{\"height\":188,\"lineName\":\"bezier3\",\"lineWidth\":2,\"name\":\"line\",\"type\":1,\"width\":100,\"x\":424,\"y\":112,\"anchors\":[{\"x\":0,\"y\":0,\"id\":\"2a73e4b\",\"lineLength\":261.42706298828125,\"connectTo\":\"3a350276\",\"anchorId\":\"r\",\"next\":{\"connectTo\":\"3a350276\",\"x\":1,\"y\":0},\"curvePoints\":[{\"x\":429.628698846413,\"y\":112.00131527398665,\"step\":0.019125793415749503},{\"x\":435.0421177914929,\"y\":112.0105221918932,\"step\":0.038251586831499006},{\"x\":440.2444545181759,\"y\":112.0355123976396,\"step\":0.057377380247248505},{\"x\":445.23990670939816,\"y\":112.08417753514566,\"step\":0.07650317366299801},{\"x\":450.03267204809555,\"y\":112.16440924833132,\"step\":0.09562896707874752},{\"x\":454.62694821720453,\"y\":112.28409918111657,\"step\":0.11475476049449702},{\"x\":459.0269328996611,\"y\":112.45113897742122,\"step\":0.13388055391024653},{\"x\":463.2368237784013,\"y\":112.6734202811652,\"step\":0.15300634732599602},{\"x\":467.2608185363613,\"y\":112.95883473626844,\"step\":0.17213214074174552},{\"x\":471.10311485647725,\"y\":113.3152739866508,\"step\":0.191257934157495},{\"x\":474.76791042168526,\"y\":113.75062967623222,\"step\":0.2103837275732445},{\"x\":478.2594029149214,\"y\":114.2727934489326,\"step\":0.229509520988994},{\"x\":481.58179001912174,\"y\":114.88965694867184,\"step\":0.24863531440474348},{\"x\":484.73926941722266,\"y\":115.60911181936983,\"step\":0.267761107820493},{\"x\":487.73603879215995,\"y\":116.43904970494648,\"step\":0.2868869012362425},{\"x\":490.57629582686997,\"y\":117.38736224932177,\"step\":0.306012694651992},{\"x\":493.26423820428863,\"y\":118.46194109641547,\"step\":0.3251384880677415},{\"x\":495.80406360735225,\"y\":119.67067789014757,\"step\":0.344264281483491},{\"x\":498.1999697189969,\"y\":121.02146427443796,\"step\":0.36339007489924047},{\"x\":500.45615422215866,\"y\":122.52219189320655,\"step\":0.38251586831498996},{\"x\":502.5768147997735,\"y\":124.18075239037323,\"step\":0.40164166173073945},{\"x\":504.5661491347779,\"y\":126.00503740985792,\"step\":0.42076745514648894},{\"x\":506.4283549101077,\"y\":128.0029385955805,\"step\":0.43989324856223844},{\"x\":508.1676298086991,\"y\":130.1823475914609,\"step\":0.45901904197798793},{\"x\":509.7881715134881,\"y\":132.55115604141903,\"step\":0.4781448353937374},{\"x\":511.2941777074111,\"y\":135.11725558937476,\"step\":0.4972706288094869},{\"x\":512.6898460734039,\"y\":137.88853787924805,\"step\":0.5163964222252364},{\"x\":513.979374294403,\"y\":140.87289455495875,\"step\":0.5355222156409859},{\"x\":515.166960053344,\"y\":144.07821726042678,\"step\":0.5546480090567354},{\"x\":516.2568010331636,\"y\":147.51239763957207,\"step\":0.5737738024724849},{\"x\":517.2530949167974,\"y\":151.1833273363145,\"step\":0.5928995958882344},{\"x\":518.160039387182,\"y\":155.09889799457397,\"step\":0.6120253893039839},{\"x\":518.981832127253,\"y\":159.26700125827045,\"step\":0.6311511827197334},{\"x\":519.722670819947,\"y\":163.69552877132372,\"step\":0.6502769761354829},{\"x\":520.3867531481998,\"y\":168.39237217765378,\"step\":0.6694027695512323},{\"x\":520.9782767949476,\"y\":173.36542312118053,\"step\":0.6885285629669818},{\"x\":521.5014394431267,\"y\":178.62257324582387,\"step\":0.7076543563827313},{\"x\":521.960438775673,\"y\":184.17171419550368,\"step\":0.7267801497984808},{\"x\":522.3594724755227,\"y\":190.02073761413982,\"step\":0.7459059432142303},{\"x\":522.7027382256118,\"y\":196.1775351456523,\"step\":0.7650317366299798},{\"x\":522.9944337088766,\"y\":202.649998433961,\"step\":0.7841575300457293},{\"x\":523.2387566082532,\"y\":209.44601912298575,\"step\":0.8032833234614788},{\"x\":523.4399046066776,\"y\":216.57348885664655,\"step\":0.8224091168772283},{\"x\":523.6020753870861,\"y\":224.04029927886322,\"step\":0.8415349102929778},{\"x\":523.7294666324146,\"y\":231.85434203355572,\"step\":0.8606607037087273},{\"x\":523.8262760255993,\"y\":240.02350876464396,\"step\":0.8797864971244768},{\"x\":523.8967012495764,\"y\":248.5556911160478,\"step\":0.8989122905402263},{\"x\":523.944939987282,\"y\":257.45878073168717,\"step\":0.9180380839559757},{\"x\":523.9751899216521,\"y\":266.740669255482,\"step\":0.9371638773717252},{\"x\":523.991648735623,\"y\":276.4092483313521,\"step\":0.9562896707874747},{\"x\":523.9985141121307,\"y\":286.4724096032176,\"step\":0.9754154642032242},{\"x\":523.9999837341114,\"y\":296.93804471499806,\"step\":0.9945412576189737}]},{\"x\":1,\"y\":1,\"id\":\"48a214cc\",\"connectTo\":\"343a2f0\",\"anchorId\":\"t\",\"prev\":{\"connectTo\":\"343a2f0\",\"x\":1,\"y\":0}}],\"id\":\"6f33b86\",\"fontSize\":14,\"lineHeight\":1.5,\"length\":261.42706298828125,\"ex\":524,\"ey\":300,\"rotate\":0,\"tags\":[\"route\"],\"route\":{\"type\":\"bezier3\",\"pass\":1},\"iconSize\":10},{\"height\":0,\"lineName\":\"line\",\"lineWidth\":2,\"name\":\"line\",\"type\":1,\"width\":52,\"x\":148,\"y\":330,\"anchors\":[{\"x\":0,\"y\":0,\"id\":\"4275bcb\",\"lineLength\":52,\"connectTo\":\"51b95527\",\"anchorId\":\"r\"},{\"x\":1,\"y\":0,\"id\":\"1fe7246\",\"connectTo\":\"200e2898\",\"anchorId\":\"l\"}],\"id\":\"7a48284\",\"fontSize\":14,\"lineHeight\":1.5,\"length\":52,\"ex\":200,\"ey\":330,\"rotate\":0,\"tags\":[\"route\"],\"route\":{\"type\":\"line\",\"direction\":-1,\"pass\":0},\"iconSize\":10},{\"height\":0,\"lineName\":\"line\",\"lineWidth\":2,\"name\":\"line\",\"type\":1,\"width\":52,\"x\":248,\"y\":330,\"anchors\":[{\"x\":0,\"y\":0,\"id\":\"a99e85a\",\"lineLength\":52,\"connectTo\":\"200e2898\",\"anchorId\":\"r\"},{\"x\":1,\"y\":0,\"id\":\"1daa737f\",\"connectTo\":\"e94941e\",\"anchorId\":\"l\"}],\"id\":\"83bc37\",\"fontSize\":14,\"lineHeight\":1.5,\"length\":52,\"ex\":300,\"ey\":330,\"rotate\":0,\"tags\":[\"route\"],\"route\":{\"type\":\"line\",\"direction\":-1,\"pass\":2},\"iconSize\":10},{\"height\":0,\"lineName\":\"line\",\"lineWidth\":2,\"name\":\"line\",\"type\":1,\"width\":52,\"x\":348,\"y\":330,\"anchors\":[{\"x\":0,\"y\":0,\"id\":\"c416385\",\"lineLength\":52,\"connectTo\":\"e94941e\",\"anchorId\":\"r\"},{\"x\":1,\"y\":0,\"id\":\"794362b4\",\"connectTo\":\"5bdd329\",\"anchorId\":\"l\"}],\"id\":\"b52b5a\",\"fontSize\":14,\"lineHeight\":1.5,\"length\":52,\"ex\":400,\"ey\":330,\"rotate\":0,\"tags\":[\"route\"],\"route\":{\"type\":\"line\",\"direction\":-1,\"pass\":2},\"iconSize\":10},{\"height\":0,\"lineName\":\"line\",\"lineWidth\":2,\"name\":\"line\",\"type\":1,\"width\":52,\"x\":448,\"y\":330,\"anchors\":[{\"x\":0,\"y\":0,\"id\":\"e17e57e\",\"lineLength\":52,\"connectTo\":\"5bdd329\",\"anchorId\":\"r\"},{\"x\":1,\"y\":0,\"id\":\"34153c1c\",\"connectTo\":\"343a2f0\",\"anchorId\":\"l\"}],\"id\":\"610d367\",\"fontSize\":14,\"lineHeight\":1.5,\"length\":52,\"ex\":500,\"ey\":330,\"rotate\":0,\"tags\":[\"route\"],\"route\":{\"type\":\"line\",\"direction\":-1,\"pass\":2},\"iconSize\":10},{\"height\":176,\"lineName\":\"bezier3\",\"lineWidth\":2,\"name\":\"line\",\"type\":1,\"width\":30.771470449097436,\"x\":111.06455012865847,\"y\":124,\"anchors\":[{\"x\":0.03039990802158661,\"y\":0,\"id\":\"70b09d5\",\"lineLength\":184.74794006347656,\"connectTo\":\"776fa1bf\",\"anchorId\":\"b\",\"next\":{\"connectTo\":\"776fa1bf\",\"x\":-0.2945764370816521,\"y\":0.2840909090909091},\"curvePoints\":[{\"x\":111.36422292283041,\"y\":128.0087911028092,\"step\":0.027063901217421298},{\"x\":111.06455012865847,\"y\":131.92376469453697,\"step\":0.054127802434842595},{\"x\":111.07671816392144,\"y\":135.75657674797324,\"step\":0.08119170365226389},{\"x\":111.37646357505673,\"y\":139.51888323590805,\"step\":0.10825560486968519},{\"x\":111.93952290850163,\"y\":143.2223401311311,\"step\":0.1353195060871065},{\"x\":112.74163271069344,\"y\":146.87860340643246,\"step\":0.1623834073045278},{\"x\":113.7585295280695,\"y\":150.49932903460197,\"step\":0.1894473085219491},{\"x\":114.96594990706711,\"y\":154.09617298842957,\"step\":0.2165112097393704},{\"x\":116.33963039412362,\"y\":157.6807912407052,\"step\":0.2435751109567917},{\"x\":117.8553075356763,\"y\":161.2648397642187,\"step\":0.270639012174213},{\"x\":119.4887178781626,\"y\":164.85997453176012,\"step\":0.2977029133916343},{\"x\":121.21559796801965,\"y\":168.4778515161192,\"step\":0.3247668146090556},{\"x\":123.01168435168493,\"y\":172.130126690086,\"step\":0.3518307158264769},{\"x\":124.85271357559566,\"y\":175.82845602645028,\"step\":0.3788946170438982},{\"x\":126.71442218618925,\"y\":179.58449549800218,\"step\":0.4059585182613195},{\"x\":128.57254672990288,\"y\":183.40990107753134,\"step\":0.4330224194787408},{\"x\":130.40282375317406,\"y\":187.31632873782797,\"step\":0.4600863206961621},{\"x\":132.18098980243994,\"y\":191.31543445168168,\"step\":0.4871502219135834},{\"x\":133.882781424138,\"y\":195.41887419188268,\"step\":0.5142141231310047},{\"x\":135.48393516470537,\"y\":199.63830393122066,\"step\":0.541278024348426},{\"x\":136.96018757057954,\"y\":203.98537964248564,\"step\":0.5683419255658473},{\"x\":138.28727518819778,\"y\":208.4717572984675,\"step\":0.5954058267832686},{\"x\":139.44093456399736,\"y\":213.1090928719562,\"step\":0.6224697280006899},{\"x\":140.39690224441563,\"y\":217.90904233574162,\"step\":0.6495336292181112},{\"x\":141.13091477588995,\"y\":222.88326166261362,\"step\":0.6765975304355325},{\"x\":141.6187087048576,\"y\":228.04340682536218,\"step\":0.7036614316529538},{\"x\":141.8360205777559,\"y\":233.4011337967773,\"step\":0.7307253328703751},{\"x\":141.7585869410222,\"y\":238.9680985496487,\"step\":0.7577892340877964},{\"x\":141.36214434109382,\"y\":244.7559570567664,\"step\":0.7848531353052177},{\"x\":140.62242932440802,\"y\":250.77636529092035,\"step\":0.811917036522639},{\"x\":139.51517843740217,\"y\":257.04097922490035,\"step\":0.8389809377400603},{\"x\":138.01612822651362,\"y\":263.56145483149646,\"step\":0.8660448389574816},{\"x\":136.10101523817963,\"y\":270.3494480834985,\"step\":0.8931087401749029},{\"x\":133.74557601883757,\"y\":277.4166149536964,\"step\":0.9201726413923242},{\"x\":130.9255471149247,\"y\":284.77461141488004,\"step\":0.9472365426097455},{\"x\":127.6166650728784,\"y\":292.4350934398394,\"step\":0.9743004438271669}]},{\"x\":0.4203715221454731,\"y\":1,\"id\":\"9167210\",\"connectTo\":\"51b95527\",\"anchorId\":\"t\",\"prev\":{\"connectTo\":\"51b95527\",\"x\":2.0452532476616665,\"y\":0.4318181818181818}}],\"id\":\"142dbab5\",\"fontSize\":14,\"lineHeight\":1.5,\"length\":184.74794006347656,\"ex\":141.8360205777559,\"ey\":300,\"rotate\":0,\"tags\":[\"route\"],\"route\":{\"type\":\"bezier3\",\"c1\":{\"x\":-10,\"y\":50},\"c2\":{\"x\":-50,\"y\":100},\"pass\":10,\"direction\":-1},\"iconSize\":10},{\"height\":140,\"lineName\":\"line\",\"lineWidth\":2,\"name\":\"line\",\"type\":1,\"width\":0,\"x\":124,\"y\":360,\"anchors\":[{\"x\":0,\"y\":0,\"id\":\"d02372d\",\"lineLength\":140,\"connectTo\":\"51b95527\",\"anchorId\":\"b\"},{\"x\":0,\"y\":1,\"id\":\"5657322\",\"connectTo\":\"b6c6cfb\",\"anchorId\":\"t\"}],\"id\":\"a3ad044\",\"fontSize\":14,\"lineHeight\":1.5,\"length\":140,\"ex\":124,\"ey\":500,\"rotate\":0,\"tags\":[\"route\"],\"route\":{\"type\":\"line\",\"pass\":10},\"iconSize\":10},{\"height\":140,\"lineName\":\"line\",\"lineWidth\":2,\"name\":\"line\",\"type\":1,\"width\":0,\"x\":124,\"y\":360,\"anchors\":[{\"x\":0,\"y\":0,\"id\":\"f004754\",\"lineLength\":140,\"connectTo\":\"51b95527\",\"anchorId\":\"b\"},{\"x\":0,\"y\":1,\"id\":\"b23aeab\",\"connectTo\":\"b6c6cfb\",\"anchorId\":\"t\"}],\"id\":\"71734a6\",\"fontSize\":14,\"lineHeight\":1.5,\"length\":140,\"ex\":124,\"ey\":500,\"rotate\":0,\"tags\":[\"route\"],\"route\":{\"type\":\"line\"},\"iconSize\":10}],\"origin\":{\"x\":0,\"y\":0},\"center\":{\"x\":0,\"y\":0},\"paths\":{},\"template\":\"b3f1f88\",\"theme\":\"dark\",\"background\":\"#1e2430\",\"color\":\"#bdc7db\",\"locked\":0,\"robotGroups\":[{\"id\":\"5e69b45\",\"label\":\"测试机器人组A\",\"robots\":[\"mock-robot-1\",\"mock-robot-2\",\"mock-robot-3\"]},{\"id\":\"26b26411\",\"label\":\"测试机器人组B\",\"robots\":[\"mock-robot-4\",\"mock-robot-5\"]}],\"robots\":[{\"id\":\"mock-robot-1\",\"label\":\"模拟机器人A\",\"brand\":\"模拟品牌A\",\"type\":1,\"ip\":\"127.0.1.1\",\"gid\":\"5e69b45\"},{\"id\":\"mock-robot-2\",\"label\":\"模拟机器人B\",\"brand\":\"模拟品牌A\",\"type\":2,\"ip\":\"127.0.1.2\",\"gid\":\"5e69b45\"},{\"id\":\"mock-robot-3\",\"label\":\"模拟机器人C\",\"brand\":\"模拟品牌A\",\"type\":3,\"ip\":\"127.0.1.3\",\"gid\":\"5e69b45\"},{\"id\":\"mock-robot-4\",\"label\":\"模拟机器人D\",\"brand\":\"模拟品牌B\",\"type\":1,\"ip\":\"127.0.2.1\",\"gid\":\"26b26411\"},{\"id\":\"mock-robot-5\",\"label\":\"模拟机器人E\",\"brand\":\"模拟品牌B\",\"type\":2,\"ip\":\"127.0.2.2\",\"gid\":\"26b26411\"}],\"version\":\"1.0.78\",\"dataPoints\":[]}" }, "message": "模拟提示" } ``` +## 保存场景 + +POST /scene/saveById + +请求体: +{ id: string; json: string } + +响应体: +无 + +## 获取组场景 + +POST /scene/getByGroupId + +请求体: +{ id: string; sid: string } + +响应体: +GroupSceneDetail + +示例: + +```json +{ + "code": 200, + "success": true, + "data": { + "id": "mock-group-scene-1", + "label": "模拟组场景A", + "group": { + "sid": "mock-scene-1", + "id": "mock-robot-group", + "label": "模拟机器人组", + "robots": ["mock-robot-1", "mock-robot-2"] + }, + "robots": [ + { + "id": "mock-robot-1", + "label": "模拟机器人A", + "brand": "模拟品牌A", + "type": 1, + "ip": "127.0.1.1", + "isConnected": true, + "state": 4, + "canOrder": true, + "canStop": true, + "canControl": true + }, + { + "id": "mock-robot-2", + "label": "模拟机器人B", + "brand": "模拟品牌A", + "type": 2, + "ip": "127.0.1.2" + } + ] + }, + "message": "模拟提示" +} +``` + +## 保存组场景 + +POST /scene/saveByGroupId + +请求体: +{ id: string; sid: string; json: string } + +响应体: +无 + +# 机器人接口 + +## 获取所有机器人 + +POST /robot/getAll + +请求体: +无 + +响应体: +Array + +示例: + +```json +{ + "code": 200, + "success": true, + "data": [ + { + "id": "mock-robot-1", + "label": "模拟机器人A", + "brand": "模拟品牌A", + "type": 1, + "ip": "127.0.1.1" + }, + { + "id": "mock-robot-2", + "label": "模拟机器人B", + "brand": "模拟品牌A", + "type": 2, + "ip": "127.0.1.2" + }, + { + "id": "mock-robot-3", + "label": "模拟机器人C", + "brand": "模拟品牌A", + "type": 3, + "ip": "127.0.1.3" + }, + { + "id": "mock-robot-4", + "label": "模拟机器人D", + "brand": "模拟品牌B", + "type": 1, + "ip": "127.0.2.1" + }, + { + "id": "mock-robot-5", + "label": "模拟机器人E", + "brand": "模拟品牌B", + "type": 2, + "ip": "127.0.2.2" + }, + { + "id": "mock-robot-6", + "label": "模拟机器人F", + "brand": "模拟品牌B", + "type": 3, + "ip": "127.0.2.3" + } + ], + "message": "模拟提示" +} +``` + +## 注册机器人 + +POST /robot/register + +请求体: +RobotDetail + +示例 + +```json +{ + "isSimulative": 1, + "gid": "26b26411", + "label": "测试机器人", + "brand": 1, + "type": 2, + "ip": "127.0.0.1", + "minBattery": 0, + "chargeBattery": 40, + "taskBattery": 60, + "swapBattery": 20, + "maxBattery": 100 +} +``` + +响应体: +RobotInfo + +示例 + +```json +{ + "code": 200, + "success": true, + "data": { + "id": "mock-robot-0", + "label": "模拟机器人-注册", + "brand": "模拟品牌A", + "type": 1, + "ip": "127.0.0.0" + }, + "message": "模拟提示" +} +``` + +## 批量抢占控制权 + +POST /robot/seizeByIds + +请求体: +{ ids: string[] } + +响应体: +string[] + +示例 + +```json +{ + "code": 200, + "success": true, + "data": ["mock-robot-1", "mock-robot-2"], + "message": "模拟提示" +} +``` + +## 同步组文件 + +POST /robot/syncByGroupId + +请求体: +{ id: string; sid: string } + +响应体: +无 + # 数据结构 1. 场景相关 @@ -35,12 +248,21 @@ interface SceneDetail { label: string; // 场景名称 json?: string; // 场景JSON } + +interface GroupSceneDetail { + id: string; // 组场景id + label: string; // 组场景名称 + json?: string; // 组场景JSON + group: RobotGroup; // 机器人组 + robots?: Array; // 组场景机器人 +} ``` 2. 机器人相关 ```typescript interface RobotGroup { + sid?: string; // 场景id id: string; // 机器人组id label: string; // 机器人组名称 robots?: Array; // 机器人列表 @@ -60,6 +282,14 @@ interface RobotInfo { canStop?: boolean; // 急停状态 canControl?: boolean; // 控制状态 } +export interface RobotDetail extends RobotInfo { + isSimulative?: 0 | 1; // 是否仿真机器人 + minBattery?: number; // 最小电量 + maxBattery?: number; // 最大电量 + chargeBattery?: number; // 充电电量 + taskBattery?: number; // 任务电量 + swapBattery?: number; // 交换电量 +} enum RobotBrand { '先工' = 1, @@ -110,6 +340,8 @@ interface MapRouteInfo { type: MapRouteType; // 线路类型 direction?: -1 | 1; // 方向 pass?: MapRoutePassType; // 可通行类型 + c1?: Point; // 控制点A + c2?: Point; // 控制点B } interface MapAreaInfo { type: MapAreaType; // 区域类型 @@ -117,6 +349,10 @@ interface MapAreaInfo { routes?: Array; // 绑定线路id集合 } +export type Point = Record<'x' | 'y', number>; +export type Rect = Record<'x' | 'y' | 'width' | 'height', number>; +export type AnchorPosition = 't' | 'b' | 'l' | 'r'; + enum MapPointType { 普通点 = 1, 等待点, diff --git a/mocks/robot/syncByGroupId b/mocks/robot/syncByGroupId new file mode 100644 index 0000000..270bbc8 --- /dev/null +++ b/mocks/robot/syncByGroupId @@ -0,0 +1,5 @@ +{ + "code": 200, + "success": true, + "message": "模拟提示" +} diff --git a/mocks/scene/getByGroupId b/mocks/scene/getByGroupId index 1927dd6..c242237 100644 --- a/mocks/scene/getByGroupId +++ b/mocks/scene/getByGroupId @@ -3,7 +3,37 @@ "success": true, "data": { "id": "mock-group-scene-1", - "label": "模拟组场景A" + "label": "模拟组场景A", + "group": { + "sid": "mock-scene-1", + "id": "mock-robot-group", + "label": "模拟机器人组", + "robots": [ + "mock-robot-1", + "mock-robot-2" + ] + }, + "robots": [ + { + "id": "mock-robot-1", + "label": "模拟机器人A", + "brand": "模拟品牌A", + "type": 1, + "ip": "127.0.1.1", + "isConnected": true, + "state": 4, + "canOrder": true, + "canStop": true, + "canControl": true + }, + { + "id": "mock-robot-2", + "label": "模拟机器人B", + "brand": "模拟品牌A", + "type": 2, + "ip": "127.0.1.2" + } + ] }, "message": "模拟提示" } diff --git a/mocks/scene/saveByGroupId b/mocks/scene/saveByGroupId new file mode 100644 index 0000000..8ecc2d2 --- /dev/null +++ b/mocks/scene/saveByGroupId @@ -0,0 +1,5 @@ +{ + "code": 200, + "success": false, + "message": "模拟提示" +} diff --git a/src/apis/robot/api.ts b/src/apis/robot/api.ts index 33df5f0..35f6cdb 100644 --- a/src/apis/robot/api.ts +++ b/src/apis/robot/api.ts @@ -1,6 +1,6 @@ import http from '@core/http'; -import type { RobotDetail, RobotInfo } from './type'; +import type { RobotDetail, RobotGroup, RobotInfo } from './type'; const enum API { 获取所有机器人 = '/robot/getAll', @@ -8,6 +8,7 @@ const enum API { 注册机器人 = '/robot/register', 批量抢占控制权 = '/robot/seizeByIds', + 同步组文件 = 'robot/syncByGroupId', } export async function getAllRobots(): Promise> { @@ -47,3 +48,16 @@ export async function seizeRobotByIds(ids: Array): Promise { + if (!id || !sid) return false; + type B = { id: string; sid: string }; + type D = void; + try { + const body = { id, sid }; + await http.post(API.同步组文件, body); + return true; + } catch (error) { + console.debug(error); + return false; + } +} diff --git a/src/apis/scene/api.ts b/src/apis/scene/api.ts index 7320581..6013460 100644 --- a/src/apis/scene/api.ts +++ b/src/apis/scene/api.ts @@ -1,13 +1,14 @@ import type { RobotGroup } from '@api/robot'; import http from '@core/http'; -import type { SceneDetail, SceneInfo } from './type'; +import type { GroupSceneDetail, SceneDetail, SceneInfo } from './type'; const enum API { 获取场景 = '/scene/getById', 保存场景 = '/scene/saveById', 获取组场景 = '/scene/getByGroupId', + 保存组场景 = '/scene/saveByGroupId', } export async function getSceneById(id: SceneInfo['id']): Promise { @@ -38,16 +39,33 @@ export async function saveSceneById(id: SceneInfo['id'], json: string): Promise< } } -export async function getSceneByGroupId(id: RobotGroup['id'], sid: RobotGroup['sid']): Promise { - if (!id) return null; - type B = { id: string; sid?: string }; - type D = SceneDetail; +export async function getSceneByGroupId( + id: RobotGroup['id'], + sid: RobotGroup['sid'], +): Promise { + if (!id || !sid) return null; + type B = { id: string; sid: string }; + type D = GroupSceneDetail; try { const body = { id, sid }; - const data = await http.post(API.获取场景, body); + const data = await http.post(API.获取组场景, body); return data ?? null; } catch (error) { console.debug(error); return null; } } + +export async function saveSceneByGroupId(id: RobotGroup['id'], sid: RobotGroup['sid'], json: string): Promise { + if (!id || !sid) return false; + type B = { id: string; sid: string; json: string }; + type D = void; + try { + const body = { id, sid, json }; + await http.post(API.保存组场景, body); + return true; + } catch (error) { + console.debug(error); + return false; + } +} diff --git a/src/apis/scene/type.ts b/src/apis/scene/type.ts index b5b790f..3de82eb 100644 --- a/src/apis/scene/type.ts +++ b/src/apis/scene/type.ts @@ -8,6 +8,10 @@ export interface SceneInfo { export interface SceneDetail extends SceneInfo { json?: string; // 场景JSON } +export interface GroupSceneDetail extends SceneDetail { + group: RobotGroup; + robots?: Array; +} export interface SceneData extends Meta2dData { robots?: Array; diff --git a/src/assets/icons/light/area1-active.png b/src/assets/icons/light/area1-active.png new file mode 100644 index 0000000000000000000000000000000000000000..7e28911059771e29d9fe6813bfa823bf64cd7093 GIT binary patch literal 578 zcmV-I0=@l-P)Px${7FPXRA@u(S*=pTKoI^u2?~Z6pl<*Y6ny|B8c;|Ei=h}SSX8M+;{gK_-T+>p zLsgMWcP7_K(GS6 zp)m4UNK4zEEh43O@^avR5fG7m07n3R0X&g>E3>MDepnBP$PIw41oV*Pg@r&>{on-d zGdXi+Ay8F65-5EOiAYt8R@ILlh#p8MwL{3o5L%58N>$Kx+xcbA|NH5R?(Hm;skn1u zv@Rc4be{xn0fe@`Vb&*ksW(0e>;X7ToqMcibW|7ucqIAml|T^~hu31P#9qJ1q6bLZ z@jF)H)u_brEtFWmA?btXK)OPYD`<(ws_F+PU@G)lx`LJvsHz{9fa7st=4IZ_LNo8^ zS#_uP`!GdtH0-y0DINnw^*Bb*FWh_ff|Y z6UkQAs;fEVGc1#NnT~jtIc9wwO^oic!##s>snZu9NfrtCu;M(=XuJph0E->^KqjF~ QhyVZp07*qoM6N<$f?g8)=l}o! literal 0 HcmV?d00001 diff --git a/src/assets/icons/light/area1-detail.png b/src/assets/icons/light/area1-detail.png new file mode 100644 index 0000000000000000000000000000000000000000..8158489c66f5a9b9629835582fa86286c4be3dba GIT binary patch literal 568 zcmV-80>}M{P)Px$@<~KNRA@u(nZGVYK@i4&H<6&Bq7W*Df<{R+3W+D6Q_<->$L(}V6;B{hC?r%$ ziAp0Op`t-3Wa6ys-Mf3&-t3+~IlIX%?#Z09-#6dPnLRTd8ooLW$4@3uwSt2b7z37p zIba$XEg9@5@C@7*KkN1`0+YZNFi|pS*LH8fDe!6k?Xv<|0VAn%2*o~1gnBg8K3Wp13ObVbZ1iqa^k@Y13YwS$dPR>$U>!*9 zedQSW>bflcL?a*}G!Mwfe##}@zXP6P6L5hJP0CRFXbNNkg$J?%tu16Z2XYSldZ6cc zAET|JS7^P0xPx$(n&-?RA@u(nXxhiK@f(&3yCN%z#9+}@c=?GBB7E>kVr{INX2p_guDSSpoj?B zzwBJ?j@_G`su?@yrjxC`>e=bP|L*Iq?g3*igE6x1>;kL6BB1xbly~3> zxCAcRE^Y%b58M<7^-MutfHgqRnzR9UPRMv;u#8^<#LQ5d0Biy0DY(7ChNI%QLl*#r zj^f^kVo-;E(H9w{!dLfhR_?hiLun)fZ&t!C^kBR(P#_e}Mif4?E(X3j=1F7%hMym4 zPg4#|9Do&I1Na24fqMrvzWUJ_I0oiQqd$N>2LNCF=m5?vgLfPNeDyN`SI6q>QD6Pc zKxV*7>KsC$TM1u}`sxQuVpBnRz(j6pjtsAW1w2mg8?`JVtd~>Ml9@?FTnsT z1M8K(Cl(9x{uS^L8bF)DzDen;AB=$vp!7gyU}6hd&Vif*KOU&H_aVkA)e2p$plu=N zs~^1%mMx}}&0okA#i!!rY^ aQ1lJrnVvD*$jlP}0000g8wv literal 0 HcmV?d00001 diff --git a/src/assets/icons/light/area11-active.png b/src/assets/icons/light/area11-active.png new file mode 100644 index 0000000000000000000000000000000000000000..550c758720462a24859fa56c56542c16f74c102f GIT binary patch literal 1094 zcmV-M1iAZ(P)Px(07*naRA@u(SuJc7K@@(U1VsZ9K@FNp6c8)~Fj%NWL4zY9vkCVk1Jz1!K@_s#qJ-dor)7aVi_Z3qC#GiLVC z%x;_61vAt4QL@vl)n^63?z9hN002oT{Mjj9s*9Ar13+M=CVc>7D&H!6U}g(7mLPf7 z%pSXq-sK*I4`9u?&bX(y4&YJgCM0i~*$wZ$w*bC&?c)RZZf2Lf8`hiumm6hts!?(A zB4wX>3l0Fxbv-z|PV&67!08eYK7c<#z|M_Q-dBKR^}WG9#UOkD^fv>LonlG;3Icz= zCJyxcQcL`I07^kj1%NwM1*z}fU16fEq>nE{fjun%Pt8pJJ+2%ASQ>Ek_6x})ivg0# z?-$3_-puv^JedUmxq<+kD*$mhaG`xOTLqxMeVK|26)4?X8YyZ~<+b*|ssp9UhXBG{ zt}49Jb$U$^6LS>}X{D+X*C-zXh;bp&h$NM8l{=){8vqu&fQQ#fipD(feowkhDh5QQ z#fQ51f0u4mRhZ;;GrQ|H&r*KC0?vdw1@!~9AQk~^bRmpgC#fPQ0H@4Mbb27$r1p$; zWU|C^V~tyxK;&X-VwQ3_d=0>C0RBQpmq%Gc0Xr&2CaG(5uWZJ7SB!AFmS<)Gk{X=7$w<`#qM=!|zGMS%a~lwE{pryd=0eC(O0Gh`r;CzuwWOYdHCKWkltKS}gaA=_H(@UFO;`(K|U@JQS7Dfee z2to?I1hCiju+(*uVGxTRWEC`$svZ8Jri0i!v5A5pslp`pY$fY;luM(so-h60yQ`2* z41{BzQp9gjYYJIE10`L^he~piAe6i1N}-5p>fKr|t-7=+iY=>!J^8@oBbUsDAhrN( z*2F_&iE&;g4#iCt0Cy^y8MT9_p($|*m`G*Kxjp*!GaEq86H3-NW-5Bnc44X873^}G zJ_Gd^&J2K;?UWuhL=%wqHLrqO@$jYjU7RU7dzv|b606159(w@)023hiKnjbO5C8xG M07*qoM6N<$f|Wt=ssI20 literal 0 HcmV?d00001 diff --git a/src/assets/icons/light/area11-detail.png b/src/assets/icons/light/area11-detail.png new file mode 100644 index 0000000000000000000000000000000000000000..497958b323e498bde46acc998004a504296822ec GIT binary patch literal 1025 zcmV+c1pfPpP)Px&yGcYrRA@u(nY*t{Q543%n@CU~3KD|CBZS7QKooR39TgRw&flSj!AK$n4dVG7G1ugNmu*C5zMPQYr z1Cn-0S}SQ~hU6znA0<7J^kv!`;t8yibS40=#qxEL_}xIJc5HKhOJE%E5x_4=w;E4k zwWLE~qF1FGVF{d+bg+3V{ttXE=|RIhJ0xv4<6cVokekO6I4@~~832&SlGxR*hJUbY zM@%@Cx%zpEGr`dG*0NNitl+*t?Y^_;%o21=g@*?p5 z1o)p_I6DRjcAgVxX(Txa@I+1zMVqb(Q#UeB;+UkJg+wqhZe{nwvju$fnB1KhbLumx zoR2gED;=04P&&`d`YjWf+17`Jmrr2K6F~Ftm9$mTMsuqps!?NloeRseJORS=se(|= z)f8Ei%r7+rkisOI-yzZPY;7k@4XAXEq&6!h5Q|Px&yy+Nm9FgiktA&yre>Ovno|h@ z51s{Ilvd6hx_!ZH?9U`afV~fYQPNOvqQ7sHFY%3kEk_^){>`H3dt0+@rmvUm*!S(8 z5)85iZN@V;2;Yb`t3Cpg2A|sf66Kmw$qywx>pOu-gJ-SNK_JGRthqOMzrlnsrKAa^ zz@yKzg;sOSNa4>;68qXKRcyX1lr-`LW&hYPJx(u4;CN;ApbG#5s3OERPU(_4lH*f8 zz}2#*g4RXgySr0Qjlkwa_`-yWZb*R*NsdVMttSHAF<~=jM#zkFrV~=*W}g##5|s2X z2MZ{-sDJOBxU}lQJV*|k6MCIEE<9-xsq#z7=O{jXU2wZGxO?Xk*(6DDH6@YRD=N_h zQ|kJ4_1PT;W@{OE;oQPqSu(>4&K7S`4s(j>5pv#a{j4ESi80%qr~(ly)KY^GZ9BoJ{x1mD16 v<7ZwR6@Nft;~$;%*?Az4J*vJAOP;`A-^JT8STZD`00000NkvXXu0mjfWggTs literal 0 HcmV?d00001 diff --git a/src/assets/icons/light/area11.png b/src/assets/icons/light/area11.png new file mode 100644 index 0000000000000000000000000000000000000000..65e39ae7d509dc2c65a6257a1f455460a100b04d GIT binary patch literal 1003 zcmVPx&rAb6VRA@u(nLVsbK^TVLTT&591&x|gg=h&HElL%llL!*g`Ky#@H3+Ssp`@iD zp}n~(O7_{zY`!}?bLQuqdv-UuU$WWko|)PAo%w#=`F2e!Zfh%!Uoir^BwdztM$&#s zeD1O@ld-&ROZqYPhJ*wF{LTTd#RB-Vj!f;`=JA$5AMhT)Z%Kz6PhyXxYi^c+aXDiyK$w^s0qjk zpH@kmNNi3mypwP0eB@3bCssN+$4)r@1b1C6lnSmQ0WS`&mPv zPx&+et)0RA@u(Sv^b@K@k3?wUTJ5i8k6wr*_6xqZZmKjYb>)I)5tBj);v!8==(3 z7--Q>O0ZKJNuUI!kvZ6{O!zQ*yCh-Tz?D!?6wD! z9w2!Qzy$y&0PJ^9uHH)kRsei3v+3MTZPwKSAbAA9d#89Co^@*lwh8Dh!IMoU>`8vqycZvp`?dVmzeD`vKtBb=o2MIO8Z;A*gEtW-|K z04VM+dIG1-Y%E9Vx-~s8lK^ge-<8z9jLz(102YJ99qkEIHR((wRl&r!B6;#?XNKO! z7yt&0M{>ia!2=4XpWgRPGaLCY0L(0TR^%u`vd=K3_$ED2O3)BMjhlxa$c+Ev0KNum zUjx_zu;v~eaNlzH`D+I10g|TxoCk0K!1V}#P~Qyzb7uBA7sx;Wkd(r=037lZ$pKI; z7mx`v)4P$110Z=Cz-0jY0?BOvXsg0&CUuAw1>jEHn-P;q8TCZ}NadNNJao{V{0g@i z2}Es36$9YH=267*YC~oK{0ag1f4lw4mk@}+kJp7$41kV&9sLz$wGt$sxn%YAdS_VwNQt&IC;kX!|XD79goGQaDxg(ahfF0MID7 z>qC8{EU%i`coKk1ywV_4PA|2&R&k|O)vcnfFdvh{ig&RkKz>rCLPx{D9x2}WVvFRf zK8u^($nro+yXt#NKrWxUbt(Qy52O?z`8=o;56x^nwJ+y8$-@A2x_1wulpvCigRXNb z)qtgVdfrvY`n}b%nN5@qp=7DcRXAMd^3U&$^2%r%fh3OsxbM3efWk;kSZ9hfMEO+4V9Nc13d_ zre$!kl>=nw7h5?}+OBbjo&GPTYZN_IcqvSN0ML}R7*1O`at0DYIf6^A83HI}$*z3% bya)aOTP&$SX0m*u00000NkvXXu0mjf#PsKH literal 0 HcmV?d00001 diff --git a/src/assets/icons/light/area12-detail.png b/src/assets/icons/light/area12-detail.png new file mode 100644 index 0000000000000000000000000000000000000000..ea7d2e3d9b652bbd0b130ae15ac27bad125db5e6 GIT binary patch literal 1060 zcmV+<1l#+GP)Px&-bqA3RA@u(na!(CQ543XE8m4E29g1yP=tX20|PNL5hG@1GEx2uGe%~N$bgwL zFrXM93Lz8&M3Ij|6z}ia`?l}0&pB(~v)^>FtnYPBnqasbGC ziZ&9(hr&LzOVXA^07ZSdkHGkD4!~hkxaTCj>#2+mb|{fSEu85obNuxjfa6B+X-VIE zDkGhaCNfCFQ$1z60i3L%NRo9-6}g@WR8cen(2xeB2srCwiKG*f=1H0@X@;bWl70r41C;66CzO|T6+0?P+ecU3TazcCH~mcB`PA?dXj$glw5=}nRrB!+kZM0SAOk;K2P zGzodUvil0K%2 znode~_Y{3w066*=Ck%jm+wwxmEkHXaogz_B)YSwv0pJuo=)8+pNSdF>Bz?X%0KoY3 zA(9uY)%-Fd(#5|9xn*aPj;KsOSuDx!o5^rJo0F*)K?^0>ZE!s`LM;OmfSa@ zwZ@fC!`}=ne$0VBAGUTI`B%LW@PrtiRs~)mEqp@k^new?#|~rIk*Qrv|$8b+)=L0WHrNe(7%HZlfhSnE~5Om`Nix&OT&2 z5VG8ZtW+@*leIV!E%RQf5W{c1PiwwzW!6X`WagGR+Ud(Ff?ykED^1D0%uP|}c(+K4 z89CgyY^5cX+eEY8M`*1GAgk%1VYL8AS8JU$_zw^kKf8k!A2cQ2vb?!eiaY?JHt;4p zQ3OrYXau}#?`U{h+j7kaL__J_8yk!%aSon;Ea^?#OTz#VJxgm%J5!1AoRE0FEA6V* zK+ZtYf{x+^LV8j3y*_M}c*@I5j#HfEJHMFgqzPVTMPO^4bZvQr4=aT{x~uSv090{f e4Px&gh@m}RA@u(m_5u*K@f)DuT>FB5*k`MbfP6FXweWFf1RJoPbX*y4N4jjT6C1? z(2!92Yv=^emtEO!vU_*-o;~=IJIT#W&e=0F@9aCXGdrh6E^~|Af6V~=>mBs$z&=Sk zB(0aUH2l1NzmW7!(tSy{ydSl!n*?CBq9-e zmn9uZ6p+-Zjj46#06aH|%XYKvLxc*3-YD$knjs3~w>bbmjpAhuv?=)noxUV5p&@z) ziwA(`tnfHu1JgzC41g!}Va;p@a>4pr6j~?gm2u#Pr0X z5bX_s6ZcRiWH>`llnS=lp%vlehi*9mM3GWG0YID6naGozIPon5AbrI53wWA2qDC8@%7ai* zcxIcq+Dx!j(jKEPOC?V`O)Gq?QVeYLpP7E2`631AX{X60fJdPsowR;<2O4GqhML?! z!y$FtD8|r_Fwii}*aY?rG*q$kCZ{N^Z)_#V1=r35l?`Zm-7*V6Bj^<6v7|d50RPKS zZ_D!gP?7#%s9me{yqO?zcQszCP+G~aD3sI%`RExc;>8xbk|tG+H%wjpaD2$c)^%g( zpoc;==hF8R4YVjKtQ{S|B~vL*N&48qaa61dr~4oZ)qFW)y3T902CSwqd2f@L5=tp` zC9&5|wbXePW!8~@X>a5%qb)YqN;+XG1vH{!3=vy_(B(eJS`FJ)g31GxhKP;6yOo&6 zXs(%yo#-_BXshW;Q*k$Q(-`C%o6J08zNIT|kz6O5jXp{}2btG+X`rDq1w?JWrFonQ{qGt(SvCYI%%I}jZuf<)2|^{s&+^5hY~ zi!ufPj6o+#EC167Bji;F?YibbiBj=m%LAm##g@lV>l!%DY|S+azeq1=@;OXd3{eZF sEsv40DCDu-Wz7sgmoN@cvgmi<7mYHuG5%iPx$lSxEDR9HvtmQhZ^KoEv!iV1zt25*2j(6{;~C-4du4xl%ny@4D68gJkY>f`z( zH?TL5fDfAJjw!YqT3BWqiXmqE*xBuV^Y7o8K{&7n4~z#a5O*V1A*&Fl02e=e4_(Eb z&Iia_0Js67E|-yM91*7k@aTdwdJ1MU-M*4S8O$fign-UX530K^18alR(?OMh{MZ`; zQCRno+Up4;F_>>Wrv!94@m`cVM3L(p-EWh(4v0TK4gqnP?@2{}akgoHS)s`Z6^lfF z(Wv2<-lXq0?)!fRl!5pL2^#?^Zy|;vm`6pHy7#)PtOEIQrwb$#00O{PPXx2n3`moi zNye*iYd~W!1f*YIPx%bxA})R9HvtmP>NlKoEwz^|GtXLMe-?EXfVb4Z;Z$BC>XT0?Y}FPhfn5WSxMx z0lop;AS_cssj#psg@EaJB#%8BG{|!73Jc9jrFnhx&)?IHuwxB(j0Z}fyc;PMDiz98 zAg_P-Jw!pxUBPvm7=8kvntUQOpldh7bNSz&;C0Pp>k*r8+n8jDGiw2w}{Wx{}*_*7fX`sG$D^Swpt5GMaO3KP< z)eT&C$*kXb>lX%k3XFh=9&zA8Kv7UV0!Cx80Ras6{IIE0Mg6Y=WkqN)puu4e2-{l$ z5Uy;rPK3GTu`1A_?{yIpUx{lk1e7-B7A(R`r#0hImTJ!qM1ku@YrBU?$9XC_AHv3q z1L+{5pxOpT{8hedc;fi8&;JD|G3JUJU8IQ2>*8?FZffdrbc+>}{j+ zYFiTIaLd5EAO^y`snn5my-xtDeiykZE3>CUSn&;G(AobONPx&j!8s8R9Hvtm`hUIKoEwzhl;E4irfGe_^~4kY${dA;shZl0G|MS0_+n&PJnX) z!U>SY2AM^&Gjs5!oIL{nY*WG&l11^4p;XGZC5Wds`e{n9ZD>i4PGTTve%2@VAP;yu~qjvq_zCUiZZh+`m zEX)CVbxop+dy{7Cj)>gIYea3eaI89{LRE);^p1cMl_+46b0GzngnUp7?yrh+=xN`% zLWHxT3bg{st~PzSDT(EKuL88}V#_=?ZnUNVX>zmA)uH!IelO#pSb=%2WRWOTV{H>p z9o)}`bHM>(5k&|~o9u%zsk8K1lX3#e;;BnaD~uuWGaec@TT?|V7PixB5*MDDhv!Im z8GR_CR|y73rf|v6Csp{hKJ>NXxm3tFqcE)|VQ{+VZatUy?-T+N`$Y7MG3M<)c%BNU zNJ1e@9LY5grCJtN1l+q#?8vzxa&v>|dQLPb(x=78*?2@E5~4dtY|CRt;w7OsC#nr3 zxT-w*9h+_4eWQou-b4tuwZM;*SUyGvuFE(V$}9TR0I;mpIRjKhxSRML1#*k(7!qS@*Z!Ja_xhmC>CIf{KRs#c2 zoE!8#Rnt}5h1%oN#S^I2LpE+49s}S_WJsZ3CrMX*CznI=tfQN0)CDFV-Mu-7S<#@M zhQDYW&Q)km#H0b<1|;QLSSrVTN$qjthC}HZ%Rm{2d{bMEC$}@Fj0P#dKlFSIHr_RncAOS5y$>M2LYS{~`Y>AfvilCGY zg1p|^Px%$Vo&&R9HvtmqBjYKoo}mXIHAK0^$hd1SN~AW>vTWIYDALKH>QP0RsQ&>*Z)&erx-ppnDHs+LfGde@ zA)3F3(a=F<0u+Q{U`5OW7?=X@mcUa5Ocwyo_pnl_JA3^t2!Aw?4n~k@{IVbC!D7~R zp$np`=l8@7*M6A##~lxJUFw2Z6_LtB!R(7#PI0o|V+0z^TI)`>K!5iRwj|DU%J>V` zz89NpVC*e`=69|2X{JC)8#vT9wSetn_kQWNHYd3QeQ`>c1a1PR9rPXLQM{e}H-#*x zbOq+FEJ(oZthH(S6|kJ5^eK7b=7ZpjenlphM!|P#6VtK->2lN82*L#JV_01C!P`LqL9Omy>Nt zociM+PZ({>l8me76vxc)%r4+FY1Pn;4=Xe*-7~oAIcfNMu)h_O5Vy1TV?PUsSYx!D z(gM7@^^tj!bO+8IsOD2hXYD}%FAmJHx(!8`T^eXz%lZty^je0gYi}A+6H1sDalq7b z+w14-N&^yk>@BBI2a~!Ucu>@J?R8J5OfZ{rQAif94GVn+c`A8IjR5mT1|on8Aigql z#~+kgz-W)Xd|7wO<=+q!=G|$F*FG^0(zGrzTon{QbzdkIoSEcjPWV=s1|U3T!oQ{O z5Q`2Ie*&mNz>2|hfNz4IFvoyIZt5&1J!X!hzsrs(uKVvBP?Dm50LLS%G}r8*SpWb4 M07*qoM6N<$g36s?hyVZp literal 0 HcmV?d00001 diff --git a/src/assets/icons/light/control.png b/src/assets/icons/light/control.png new file mode 100644 index 0000000000000000000000000000000000000000..0049923a1f882b6b186a5c414fa91618ce975802 GIT binary patch literal 903 zcmV;219<$2P)Px&K}keGRA@u(nu~1|K@5hS4xj_5fKUNY0Z;*DM*k3z2O{!48^j0z82?#B__T5{gWxkwvH{?6JnxNHgE9WDh!Bw! z$p%2NQn+jKX-XyPBSo?Sq!?AB{JWDd!LQiut#7qJ6e!Jw@VeS0f1fb_TyO@ z&50?~3L91BY+xAs;26thjNaPph!9Z@YikLB9f@^~AJj6uuXw!fx0Au77xHs<5}l(aI6jX>z6L$wu@U(1;830Jw^gMv5Iq8~97iQQZ>x6}~NFx=}<)(>% zeSXmNECA;C=hltLK{q*0;n zIEt2}5Z=G;6HyxYL%FVD13Pt&EMh1W)=?JHB4*Eny6d4)OLbfMz4bj&r^~B!(WojR zjTjM>k9{M9DM+KO;cd%!&p@oVjSNa(91?4p#E%m60qxXVhAw^Yy`MHpL>orKT+1Y? zx|v4(AUJfGV`E>;Ji`d)l^TiqPL=oBtTu&sXX!u#wE<#lxYHrgUvB-e0}UXeR8sE) zgsT&Kqy#h+d~bd?I!8Cra!Ul%(5UIvq>!$~^9RkTMoA9=e>H=(_X=%R<%no+WiK3VPx${z*hZRA@u(S%FQ&Fburk05*ULcqRZgfC=CyfDM2RU;^AfC+#JU<2q$ zt@J8Q?6|S=MX^+=Qe($wJC5znFmakqTz^ymr9D_ZFeMLc0XPOQZ=VeSd~(n?06rf8 zUIARU@1ksN2%R^QE<|a07jVBzNu&nAO=FD{Ns!a`TL6ogYzaUK%lGxA7lPi80btC( zJ6SeW>~`o(!~k3YI8EKjX?@TOF#t~h_MH?;75ms^r^6wp7yyP3!)P6d>6KyhhhhM} zGUoZQM&KQ>nF`=Xx$6?ZvvO^JS$8>V*awXr^MD3`n5Pw*Y0sJqfM||ZD9x%yj@xC zYWfNn59COr+M3G+06V8Mi|JQ*iUME=vEg_yf?%Ldc|vk;x4JGtgT* zRY=v1Qx0v(?gD@#klj?Rd+Td47c!uxoX%0qX~#A$Aw=-J%s!1_pP~00@Ld7n_%z_TA$b6Kg9LhV(k89U`Rw5QUXkPyv*%`s$w51Jwf~E$|DFN?kEK S(n}Zs0000v(!e|c$Ysd6#LQl%@bl#av;EWM%<8Q^-`kS= z;^);bd+Kct?B~7Jz}vyH$4SY-GLPBFX(N!w@N@_7367&oW(rJG9-ApBi*WPYJHT>- zDLCQFuJ?_m1%H|Jbj2k#eCOOgcK`QY=FJHmS7J;K@I{1q%x`dgs$(k7`+?)yk_d_L zbHT+I8MgDk{(P@kclNAqHVdZDTu+@h#I4-vxc>-i-OoiiQMXdx>mPV^{CtL2-UoZ5 zkM8$t@38Gkm$5&{mgAuEKvanFRH5_)!7kPu2NsRvxejg`VjCC*7sza9lw26G;5*yA Y#k*|`Gt<6*0tO9(r>mdKI;Vst0EHlYfB*mh literal 0 HcmV?d00001 diff --git a/src/assets/icons/light/dropdown.png b/src/assets/icons/light/dropdown.png new file mode 100644 index 0000000000000000000000000000000000000000..694f34d3bdd66bd255dd5ccff2512258d66b073f GIT binary patch literal 305 zcmeAS@N?(olHy`uVBq!ia0vp^1|ZDA1|-9oezpTC#^NA%Cx&(BWL^R}uRUEHLo%G- zPCdwbD1gWLuC0ZENV5S~vw;XZo8!(fr~AFh3%Tl7E?4uL7yC8e;^$4jefCTrUb9Sg z5E76*p{^pOv0a_=G6<; zKD^?)_ceC6mDT}S2isGX3@etGhBQd6a_~5P{R3x%Udx_8DhC2PCO%!x7}2rusVswb z$Hk|y4EGg|O)qD9qo{LwH>217yjNClXP1>)`uueZFV1<-oUnPCh#%9Ez-^mU2r>CB X6h#czEuU`z^frU1tDnm{r-UW|%!G7) literal 0 HcmV?d00001 diff --git a/src/assets/icons/light/edit.png b/src/assets/icons/light/edit.png new file mode 100644 index 0000000000000000000000000000000000000000..f24ee5096e9a0bc4032e722d7fce3f0c6bc0238a GIT binary patch literal 643 zcmV-}0(||6P)Px%JxN4CR9Hvtn2SvUK@f)j=|DP=4x|IEK&e2jK&?QiK&?PJP%6+4qyyOk#Q8r#0-tOxH)5D)tbODOu%eo zOjQ|^KQ%<<=M)g*=Ei&(jfXaH85o9w8xkuKnWTV7O?s|LA9XsyaG$A&e5Qc@oTEJ| z6f@RMzA|LE_mBQgP^+rO{JIA>MPc}15g?N)cslK>Q$Qk(1j?jb)=MGpboPcRsSr;M zOG536uF4csDB><2VZuFl**@teH%14?kms&c{0A`RMp(QTZb2>q^a$W3LBed$S``%5 zDqqD!!ua;lvaDy7h% z_9F*jzgJaGFx-oat??*TI^2GGoEmA`Zk)37TG+;pu}BM>1Fiy^^O+r&mQ`nJ+vcDj zVr?nXAn65IE dus=A3{sH|KVKmM_BJBVG002ovPDHLkV1ik-A-(_r literal 0 HcmV?d00001 diff --git a/src/assets/icons/light/edit_group.png b/src/assets/icons/light/edit_group.png new file mode 100644 index 0000000000000000000000000000000000000000..b5a71ea44ac525d93d508e11fcbd96408f0ecac9 GIT binary patch literal 688 zcmV;h0#E&kP)Px%YDq*vRA@u(m`#$>KorOSFT|C@RJ;M+08cPbMW)J?dIHNEFjbN&S28Orus}~> zZZPgF$$~ioN5~OU6I~g3RvHQ6D@pg@G|^;5!Rz$<_5Xb|k5KW4D(*jO0No1yzX~+{ z5v!a&frfYX;96zvzBS4Ur~)KT91}tdz%e0|0nYq!M>Y%$=Fd!MrR&J>qTbs#vhT^- zD+8!(YJL6CS~ME7V?vYyu%@Fnh%6PS#TwHL!tPa&d^|QpA;7smo-nwt?EG?JxL|aD zTsrdW1B`P-d?}fTlm50W2Nwdz{#Wm`$uj9MA3x@sI$!N*n>= zp#kb8`EHPJjatt_Pw& z;Y7EQJ?Nfd2xWcRs7~j;J7m!NrGX9rf+x0KptI3&^K&tbZ0AX0q8ES=L_O!JaAfLw zoQ6VCEde6i5#d||Y@d}>C$6Rfbh~aqoP>}lduQL=AsNO+de>oY<>iE?5Gt+`D}c?| z-pz>`;82|?$bk?baYbI1Z4RTJ^J-a5#(f4}tbaor%m@EdXi{JcyP8Ryfv5p=H!>gu z;fqKIpu?P*Kom6N)5wA18^b}18bGOxG6EP_cj6ocif*Tx6sUM7CeZxO9y}`(`X_po z0EkdHIY)Mw zmH-&t0C*|;Vp;pY2JqN-`vzzt>yV5+Gd_L4bd*N;g$l?xqQkZZ&~fV7J!=JYEASgY WPx$o=HSOR9HvVnBh^wFbsv?n*c^&1V*3}024qb04AWFfOdn9029y=*nn<8HxSmH zb7!ZCYbTK}_1`x3=l5hwGBLBknepIqfJEdDzzcv|05>fq-$-sO)a_JAL_Pq#CKlY2 zTvP!Pk$1PyDzVrRz`BY;BBIv(1~6Ly8<4Kx?Bh`R%Hstcfy05zrXBdQO^_F;S^g1t=FrH*5}60#gep z%w@XfiA`ZB)X4TBP!i^xLX*@(-ZDLzhn!?>u2AX8oIOxjPx%6G=otR9Hvtm+MgiF%*T*>3|ZX1Fb-*Ks!)6kP5^KgbIWT#0sPYJCF{vgX>-< znTav4T@r>LG8!x`|<2%QyF1x4frz$Jhk$xRLu^eX_kAUU)DCm^p#s`7tUO+dd|qhX9dPD!qs z04Az61*rw~=m5<~E~*1Y;F1L)B3j{d4@P_Awklu*E>{rhB(8GGwCwWF|8LJaI0sX3 znS$^|T6eDEI?drlQUX^9nS>jpU>`UK(k}>mX`J)qULhU`7b*w~_)ap`-23HVML5?6 zwUYVS*qUD*&vde**`#J)W8Otv6G`;`Eyzq;mrG`MUPn^9e- z54%<*b=C{6n#$Q1Boz$go=zN}A-WcDB?`LX)dSD?m~ctJKzM_G*-E)=h;!jJAD|<= zZ}NkxHI~=W92Aj%;Wbd#<}l<|w%xxfTr|XH;&sP&+e|}H&EQgidUX6wS&(y09YOOm z+PDk%3Eq|paq5(&P-iPb6SC}-+5RqF-V>cyq| nW)&>msMUREz(bWic?Ev~6OR%&{0zGI00000NkvXXu0mjf6^H@Y literal 0 HcmV?d00001 diff --git a/src/assets/icons/light/plus.png b/src/assets/icons/light/plus.png new file mode 100644 index 0000000000000000000000000000000000000000..f4ab18b4f78469133d88c190a21c190b72966fc8 GIT binary patch literal 314 zcmV-A0mc4_P)Px#^hrcPR9HvtmC+5tFbqU}8^8uI8LYqrFajgMWOM_%fk`APMF{C!9HD$%f8Dsx zFX;s~_=CauOn})Pl0g~F8py8K863u-yC2N#YG!kRx&XLm;p+NsTU-DiX104n%>cHe z0eTArpv&-Gnp7}%7hvkh$Y4s}2xqX#xlMAIX-!Us|Kg9FOEOwGC)WTz%T1BBw+uFw zn`R%Gat+|I9JOjcOQvAPU0L#!@?%n+-~ATz}3FRYncDR{pN3IG5A M07*qoM6N<$f~2m3R{#J2 literal 0 HcmV?d00001 diff --git a/src/assets/icons/light/point.png b/src/assets/icons/light/point.png new file mode 100644 index 0000000000000000000000000000000000000000..5519774a923d49e8f16036eef1213d9e6a543a63 GIT binary patch literal 1167 zcmV;A1aSL_P)Px(Nl8RORA@u(nY*t|K@`Tnn-CNT359qh;uRV};t>)GiB3mFMW^$3=%}cusOZQo zD8wT{BBAgs5Cw&JB#6fS$)1z3?yT7}XYXB{neei&UN0D9atxVr$r;3El7*MMN{w=P*~8~_U??UA&z*3y>sPbA%! z^s7d1Er6wxj!IhL9P&ZZtA^)zmh_1%XkvqX8zrrF_Os_&O?=bq9PMJ$oJ;=R?^RmL1ZaF#BwuN?AmSsWpT=c_b5!s{F$3sFKKNHb>7Vw z36MX|I!h%e1eKDK13=n5Wp;Vq$9M|c;zHhYBeW4I5M(B38;g7EIRHDFfg~u(d17;c z=PfpF;)Mg4)EXDNI}PAj%X0vzxN&Oplq{08-)JU(Ka=#M@iH{r62(MV{z%f71PJRq zm%2Fsmj7N#BhXhxMqvDd1U=?S+G{{~w?G1*a0YR+Q4Ao=u%xq;TyQEQja|(Br;~mO^xh;U&R3(xcD;!)q@v(MK?Ej}#N+%m7w$6vF%TNdKN` zazSh8g-k;z6#kUN$WDfoBA|(Axo9?OU}4Qb|F3X(Mr^`Fs*N+wxs8p zIY7|NwcSK*Gw1TZEr|J^YNx$m4m2T10m5yB8=*Q=-1wzhhp;#0{Z8#Pic-`c61?`l7Qd=yfwp%^i1fJ*7z|O>f&+}w>Pc70{ zdjqjju0Pkk78%fZn{1PP!19!J0T6Togck|##o9ZYmu%+dPJg}Z13)k^{D}#E6QmXp zyvEB^W8$Qk=eeuw6M#Ku?yr<3K{VtI#4~nlPg7!SYR!-ULY5-!j%L_#4IMHI^=(s? hz9Da*%8+pv{{@S|=P_^>#JvCj002ovPDHLkV1g+(9T5Nk literal 0 HcmV?d00001 diff --git a/src/assets/icons/light/redo.png b/src/assets/icons/light/redo.png new file mode 100644 index 0000000000000000000000000000000000000000..da8e4197ce388af6b3080fa34721ba58e8091edf GIT binary patch literal 567 zcmV-70?7S|P)Px$@kvBMRA@u(n4wO@KoExiOArVI0)apv5C{YUfk5!+2n2!$Kp+qZ9sq$rkS}SI z&34=FbZBob*-4taq}}a&|IE(pcBcck-GTeB2C(l4wg|KcI2C9q|7t*E*A_73a4i-T~0ay$X31AUKGypS% z1%OJyf;*LTl9fJ7>GnK3SlBfHIDXMxdAajAvt%sI?l~Pe2S9_l-ILlSz#mC3wE)qa z$8S>#QQ42Gc~rc6uOkel^UC@_YPtW$ITUp0VM!Z2lZ1!b(~+*Ov?9; zlmPOHNR`)U%1;4Mb*S~dRc)#qp;@H-6hOXsQUBZF;M~wsv8WcUltPc$8=vMpaNf_) z1J%xtE#j>KNFgd7U7kYWK2qi(rSq*-^PRyfm(d$ZXUWVQw7EiBX$`P(<10aLbYG&t zZ#XLfkc*^Iy7MG2SzO`FvX!74lS-i?F$RG8cZF>Px%H%UZ6R9HvtnC(r&Fc60CHh>N21keef8_)@W34jTJ37`|e29yct26O{DLN_?_ zR(9oDvG1HTR*`yA|1`1lA;N-oR5xxeNX8BD<~poM08I?*FDu(H+w9J=!KbA z*1fU{I=F8l0_467pc7^WtZEwI@1Eg25EL9UGhnlp1Qd}gB7%C}u-Sr$)JUxzU zc1rlXrm?P~$gdK`aQIJ+EVy3R2b(m5?0-`LSUrjnAnyf$+ma?CD4i&wFw|nTVdzvz zT(b5L%CW)+cgmxPz(o+#tFb|XOx5O0*K&19*n!0WPg`B4U3A!fI%hM0nGVT zbwKUSMFfc)9gMYSOwK2r6f^*$p+$>twQV_!7Yqd$RtyUyy6)CAl>>~^iFs&pl?Lm* zT?Qo%|ILEw5YeB^p(SG{<_rIeRlz7aO9jdxLE@sdWN=?F^Q2lHbbxSlk;p%R=cX#;IlYlk8tNH=KF@WOC~%@AcV70|NDkoOz``>K0Xu&;uD XY`tqZR?Zt|00000NkvXXu0mjf!9N$L literal 0 HcmV?d00001 diff --git a/src/assets/icons/light/robot.png b/src/assets/icons/light/robot.png new file mode 100644 index 0000000000000000000000000000000000000000..dbf736ef02bfdc4289fc1ba1278d164d1a7c74a7 GIT binary patch literal 1024 zcmV+b1poVqP)Px&x=BPqRA@u(n$4?DQ5431w+I77QG@{l0}3%f3=EXNfSD09Gk=GfnV}JXfij@T zM^Ow6C<wVsR-t+Er&w0JKtl7P1@3q&n*0VnLzITCTE(^=tex?Di zvI6;Q#$cy9w++B9U}t6cGvM8fKx_u~04so3z{{p{Cjr<2><$~h19xWx;4rW@ob>{D zojbb;z#2eGX2nC`OZZ(bKbF!TRB1$$C|)vsjUpvhEH>5%!0Gb?xMRwv$&b=Vs9{A9 z=lacYV0BPj(OgXTuH7vbpfC~ zZO(J*egK|0g}iw=|Jwj|HD3FizTWj?wbJ^UW-$Uv;26f+DN!oR{JR5m0OGdx`~>c0 zdP!XG2TR2U8)53VA9Kx73of-&_+EdTlib^8@E&wrMugrn*37kNP-bw1|Hb$WD zve)L>((hUOmI9#U!jdz#bbs#vN-r!9qI7@n0G3L*(*6GdI0a(WQmIwdDv{Fty+=Sv zsQRqZs~3da=sgKg>HgjUlz6+3wXFc=xshqeJlEF9a-)Rije7Fy!;KwuOg&17&qq2O z@GrL9NI4ffv6AuZ9Nz_!qed#8-v<;fQ7JtM{tNF;I#b49i$iA9pIKGn^b(-=n0dHT u>N#B_^yBKWxCYtwuLkoLfiZiQJ%GQyi}x|iEK9)v0000Px%)k#D_RA@u(nXz)yKoExibwQ|@@CK%)AZclkI!e;Sab>BXV}|eqHcyZ+Lq{RG z3Rajgbaav%T1-J5zX2XPGFVH_kzz?!;aB z40u845R;b`yGHjB;-6>k6%g-@0eHi3moDd{LpnZ-_95%OMe#!SZvY>R0r-Q_3BWn0 zm8|_T@j~}kVSo2~t1|PUB`?HG3r_WG2N+d=lTIHhKBs)ns?pl#o z3NRPW)XkaHVuvX+yQ(9AFo+c3D_tE^*pYEkH1G=@AKEL(= Z{{Ur3J3u0+7;yjq002ovPDHLkV1iXBY<~a% literal 0 HcmV?d00001 diff --git a/src/assets/icons/light/save.png b/src/assets/icons/light/save.png new file mode 100644 index 0000000000000000000000000000000000000000..b982128edea42502a68320ba81576dd61ed2aa87 GIT binary patch literal 644 zcmV-~0(Px%K1oDDRA@u(nJrHQF%X8|OArVI0)apv5C{YUfk5!n5eNhVfj}S-2m}IwKp@DI zY%itP?)GEby-V8Ua(CHwcHWuke6FeCgE1O7lyoGC?>$NTGcx@xiO-v) zpB%bl0ATi1(n${C#52E=UL}1bo(tXqn7@>CkV>#{|4S-}kOs~gN#2Jy34{*-Hh%3; z#y(Lo_Ub;nE08+oiLl%i4Z;V&l|IZrO2STAx6a#20Ql$`@=+js0I+>Lj#UMC4RS$Lz;Z z+)Fz4fZ!R<9e9A^;o) z1o6Toc(D@p?SpXwB)0EM=tiAJjs{AY%{kivl%@(fQn$}^4Rj3@+E5h}!i^H{so1FA zN)~SPYY0$H+-S={hG1sbz{Sv|D3N;TESh+79?lM+MKV{_jn=LQT(38~20DNg8?SMR zy9T-j3JaQULbXk3>Bg2F2i!hwR8365ZnxE2w-#*x3|2^8%-Tpbwz0Wu0FdP(OuNk) z)mEX?K<~$1wc6{xY?HPL7C_g-9cQ_H+Tes{$pJ?wQ{9k08$%PCrAAC4=II-eW}6ws zdf&DT`NnDsB+nFcgZVKH*aWddT71|gzvmpY`WWZFnKF}JDV`^|V&=p(DzDjSb^x=9 eGLz8GYv2#blczCo=bNwq0000Px%8A(JzR9HvFmVr^jFbqYN4PXP90J=f`1TX@f06GEf2Hk*ez%hZ!1i%Ea0o@?v z=j@(woycxU@Eu35wXG-VTT&(eysBLLs(L0O7b3#{Tsr{ox##=#4FWi$cOr5lB6Z@D zulD<`h^zqcbMfj0P*oaya$e_LymlbFoXvhu5u~)0F?WOjR6O&^l|`QdRMj^pPHN`T z(n1KZKM3Hw)O)|btsQ)h_qmRQ0L>}k4*(cNMw81F@fZLsU|vf_0N<{_yaSk>kb>K` zNIf4Dfg%d-sEa7!s&#hF(m5}1`Z8y7|(uk{sOrxI{ zSOd%!o$3YQB})J+%L`RySETTY%Xq3AhVPiRIrXp`9@KR=u(0Sn1fKKE27noUZtR-} zVhHYKI0@t1GQCYrNj_j%5JM9Y4TLRrC=-NYsu(4n@j5Ue%%N0OSy=eTxzJziVQBER z{hosDBIERs4PgR=Zo8a!5JL(tfhYp7UPA=SmtjU?G=SW6j0%tgF*<++F$q8qL^mr; t1`t8Kw6Ca}KPLt7O)GrDlLN$0`3HYx05I3K(>(wH002ovPDHLkV1j{S1u_5t literal 0 HcmV?d00001 diff --git a/src/assets/icons/light/trash.png b/src/assets/icons/light/trash.png new file mode 100644 index 0000000000000000000000000000000000000000..82098eb1d3e5c0c3dfe739a4db7bc0a96c0dd050 GIT binary patch literal 759 zcmVPx%u}MThRA@u(nW0l2F%ZQcGZhsGL{qN1Xrq5^@a z==?f_IYRFCZF2X~Z_3V`fK9Udb~i7Zdv^4-+bVR@SOcp*rHvmfLq$3MN|Lea{LL&hjp1Vc~ z4LdQiKnp-GtBm;J%x$t(3&04gIF5{rdBR#P03)n2;+!-032V)jP!Fp(4vdUxvX--n z>ym=EiNqFiDCxsw;af>pONJZ(?y9O>Os?aII|0Hj-Kkhmq}@N*R5Nbk~hR|cGxdU_RY zQEjB(6o7NYmj^E1NLvq9jy}~&XG$pDWGx*&Gdj0v>?)yjo7(}P%Z9s&>*$0xr49gf znOYYo7eL)o&vm37em_j9na;X7zkeckwl%7|H;^ApLsp&q*#gg27{!_4=0qfCEH~ z&6fQ^&vl+G;{4(zX1Z7w0CULzAlA+V5r=tf=d+u*jv~}b{Q`t9n-!wXhr`fv*Uzmz p8F0&CC*xiK>?F(!M)p1fe*hwxt}#FizkL7z002ovPDHLkV1i%ENm&2@ literal 0 HcmV?d00001 diff --git a/src/assets/icons/light/trash_fill.png b/src/assets/icons/light/trash_fill.png new file mode 100644 index 0000000000000000000000000000000000000000..33c6d11d4b5763698867a17608c9833f1bdb583b GIT binary patch literal 719 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 literal 0 HcmV?d00001 diff --git a/src/assets/themes/editor-light.json b/src/assets/themes/editor-light.json index 9e26dfe..adcf250 100644 --- a/src/assets/themes/editor-light.json +++ b/src/assets/themes/editor-light.json @@ -1 +1,31 @@ -{} \ No newline at end of file +{ + "color": "#595959", + "background": "#F0F2F5", + "point-s": { + "stroke": "#8C8C8C", + "strokeActive": "#EBB214", + "fill-1": "#14D1A5", + "fill-2": "#69C6F5", + "fill-3": "#E48B1D", + "fill-4": "#E48B1D" + }, + "point-l": { + "stroke": "#595959", + "strokeActive": "#EBB214" + }, + "route": { + "stroke-0": "#8C8C8C", + "stroke-1": "#52C41A", + "stroke-2": "#FAAD14", + "stroke-10": "#E63A3A" + }, + "area": { + "stroke-1": "#9ACDFF99", + "fill-1": "#9ACDFF33", + "stroke-11": "#FF535399", + "fill-11": "#FF9A9A33", + "stroke-12": "#0DBB8A99", + "fill-12": "#0DBB8A33", + "strokeActive": "#EBB214" + } +} diff --git a/src/components/editor-toolbar.vue b/src/components/editor-toolbar.vue index 83e1203..4beffe6 100644 --- a/src/components/editor-toolbar.vue +++ b/src/components/editor-toolbar.vue @@ -1,6 +1,6 @@ - - - + - +