|
@@ -1,9 +1,17 @@
|
|
|
<template>
|
|
|
<div id="compBox">
|
|
|
<!-- 组件弹窗 -->
|
|
|
- <div class="comp-list-drawer" :style="getDrawerStyle" ondragover="return false">
|
|
|
+ <div
|
|
|
+ class="comp-list-drawer"
|
|
|
+ :style="getDrawerStyle"
|
|
|
+ ondragover="return false"
|
|
|
+ >
|
|
|
<div class="drawer-title">{{ selectedMenu?.name }}</div>
|
|
|
- <Collapse :bordered="false" style="border-radius: 0" v-if="selectedMenu?.isGroup">
|
|
|
+ <Collapse
|
|
|
+ :bordered="false"
|
|
|
+ style="border-radius: 0"
|
|
|
+ v-if="selectedMenu?.isGroup"
|
|
|
+ >
|
|
|
<CollapsePanel
|
|
|
class="custom-collapse-panel"
|
|
|
v-for="group in getList"
|
|
@@ -11,12 +19,18 @@
|
|
|
:header="group.name"
|
|
|
>
|
|
|
<Space :size="4" wrap>
|
|
|
- <div class="comp-item"
|
|
|
+ <div
|
|
|
+ class="comp-item"
|
|
|
v-for="item in group.children"
|
|
|
:key="item.name"
|
|
|
@click="handleAddComp(item)"
|
|
|
>
|
|
|
- <img :src="item.icon" draggable="true" @dragstart="handleDragStart(item)" @dragend="handleDragEnd">
|
|
|
+ <img
|
|
|
+ :src="item.icon"
|
|
|
+ draggable="true"
|
|
|
+ @dragstart="handleDragStart(item)"
|
|
|
+ @dragend="handleDragEnd"
|
|
|
+ />
|
|
|
<div class="comp-name">{{ item.name }}</div>
|
|
|
</div>
|
|
|
</Space>
|
|
@@ -24,17 +38,22 @@
|
|
|
</Collapse>
|
|
|
<div class="comp-box" v-else>
|
|
|
<Space :size="4" wrap>
|
|
|
- <div class="comp-item"
|
|
|
+ <div
|
|
|
+ class="comp-item"
|
|
|
v-for="item in getList"
|
|
|
:key="item.name"
|
|
|
@click="handleAddComp(item)"
|
|
|
>
|
|
|
- <img :src="item.icon" draggable="true" @dragstart="handleDragStart(item)" @dragend="handleDragEnd"/>
|
|
|
+ <img
|
|
|
+ :src="item.icon"
|
|
|
+ draggable="true"
|
|
|
+ @dragstart="handleDragStart(item)"
|
|
|
+ @dragend="handleDragEnd"
|
|
|
+ />
|
|
|
<div class="comp-name">{{ item.name }}</div>
|
|
|
</div>
|
|
|
</Space>
|
|
|
</div>
|
|
|
-
|
|
|
</div>
|
|
|
|
|
|
<Layout style="height: 100%">
|
|
@@ -45,7 +64,12 @@
|
|
|
style="background: #f7fafc"
|
|
|
width="100"
|
|
|
>
|
|
|
- <Menu theme="light" @click="handleMenuClick" v-model:selected-keys="selectedKeys" class="comp-menu">
|
|
|
+ <Menu
|
|
|
+ theme="light"
|
|
|
+ @click="handleMenuClick"
|
|
|
+ v-model:selected-keys="selectedKeys"
|
|
|
+ class="comp-menu"
|
|
|
+ >
|
|
|
<MenuItem v-for="item in compSetting.compList" :key="item.type">
|
|
|
<component :is="item.icon" />
|
|
|
<span>{{ item.name }}</span>
|
|
@@ -70,7 +94,7 @@ import {
|
|
|
} from "ant-design-vue";
|
|
|
import { compSetting } from "@/config/compSetting";
|
|
|
import type { CompCategory, CompItem } from "@/config/compSetting";
|
|
|
-import { useEventListener } from "@vueuse/core"
|
|
|
+import { useEventListener } from "@vueuse/core";
|
|
|
import { useProjectStore } from "@/store/modules/project";
|
|
|
import { useStageStore } from "@/store/modules/stage";
|
|
|
|
|
@@ -108,7 +132,11 @@ watch(
|
|
|
);
|
|
|
|
|
|
useEventListener(document, "click", (e) => {
|
|
|
- if (openDrawer.value && !e?.target?.closest(".comp-list-drawer") && !e?.target?.closest(".comp-menu")) {
|
|
|
+ if (
|
|
|
+ openDrawer.value &&
|
|
|
+ !e?.target?.closest(".comp-list-drawer") &&
|
|
|
+ !e?.target?.closest(".comp-menu")
|
|
|
+ ) {
|
|
|
openDrawer.value = false;
|
|
|
selectedKeys.value = [];
|
|
|
}
|
|
@@ -137,8 +165,8 @@ const handleAddComp = (item: CompItem) => {
|
|
|
props: {
|
|
|
x: stageStore.width / 2,
|
|
|
y: stageStore.height / 2,
|
|
|
- }
|
|
|
- }
|
|
|
+ },
|
|
|
+ },
|
|
|
};
|
|
|
|
|
|
projectStore.addElement(compData);
|
|
@@ -150,7 +178,7 @@ const handleAddComp = (item: CompItem) => {
|
|
|
const handleDragStart = (item: CompItem) => {
|
|
|
openDrawer.value = false;
|
|
|
selectedKeys.value = [];
|
|
|
-
|
|
|
+
|
|
|
projectStore.setAddCompData({
|
|
|
key: Date.now(),
|
|
|
name: item.name,
|
|
@@ -159,9 +187,9 @@ const handleDragStart = (item: CompItem) => {
|
|
|
props: {
|
|
|
x: 0,
|
|
|
y: 0,
|
|
|
- }
|
|
|
- }
|
|
|
- })
|
|
|
+ },
|
|
|
+ },
|
|
|
+ });
|
|
|
};
|
|
|
// 拖拽结束 清空临时数据
|
|
|
const handleDragEnd = () => {
|
|
@@ -194,13 +222,13 @@ const handleDragEnd = () => {
|
|
|
.custom-collapse-panel {
|
|
|
border-radius: 0;
|
|
|
background: #fff;
|
|
|
- :deep .ant-collapse-header {
|
|
|
+ :deep(.ant-collapse-header) {
|
|
|
padding: 4px 16px;
|
|
|
border-bottom: solid 1px #f0f0f0;
|
|
|
background: @bg-color;
|
|
|
font-size: 13px;
|
|
|
}
|
|
|
- :deep .ant-collapse-content-box {
|
|
|
+ :deep(.ant-collapse-content-box) {
|
|
|
padding: 16px;
|
|
|
padding-bottom: 24px;
|
|
|
}
|
|
@@ -226,37 +254,34 @@ const handleDragEnd = () => {
|
|
|
}
|
|
|
}
|
|
|
|
|
|
-.ant-menu-light {
|
|
|
+:deep(.ant-menu-light) {
|
|
|
background: none;
|
|
|
- :deep {
|
|
|
- .ant-menu-item:not(.ant-menu-item-selected):hover {
|
|
|
- background: #eff8ff;
|
|
|
- }
|
|
|
- .ant-menu-item {
|
|
|
- width: 100%;
|
|
|
- border-radius: 0;
|
|
|
- margin-inline: 0;
|
|
|
- &:not(.ant-menu-item-selected) {
|
|
|
- color: #666;
|
|
|
- }
|
|
|
- }
|
|
|
- .ant-menu-item-selected {
|
|
|
- position: relative;
|
|
|
- }
|
|
|
- .ant-menu-item-selected::before {
|
|
|
- content: "";
|
|
|
- position: absolute;
|
|
|
- left: 0;
|
|
|
- top: 0;
|
|
|
- height: 100%;
|
|
|
- border-left: 3px solid #1890ff;
|
|
|
+
|
|
|
+ .ant-menu-item:not(.ant-menu-item-selected):hover {
|
|
|
+ background: #eff8ff;
|
|
|
+ }
|
|
|
+ .ant-menu-item {
|
|
|
+ width: 100%;
|
|
|
+ border-radius: 0;
|
|
|
+ margin-inline: 0;
|
|
|
+ &:not(.ant-menu-item-selected) {
|
|
|
+ color: #666;
|
|
|
}
|
|
|
}
|
|
|
-}
|
|
|
-:deep {
|
|
|
- .ant-layout-sider-trigger {
|
|
|
- background: none;
|
|
|
- color: #666;
|
|
|
+ .ant-menu-item-selected {
|
|
|
+ position: relative;
|
|
|
}
|
|
|
+ .ant-menu-item-selected::before {
|
|
|
+ content: "";
|
|
|
+ position: absolute;
|
|
|
+ left: 0;
|
|
|
+ top: 0;
|
|
|
+ height: 100%;
|
|
|
+ border-left: 3px solid #1890ff;
|
|
|
+ }
|
|
|
+}
|
|
|
+:deep(.ant-layout-sider-trigger) {
|
|
|
+ background: none;
|
|
|
+ color: #666;
|
|
|
}
|
|
|
</style>
|