|
|
@@ -2,7 +2,7 @@
|
|
|
<div class="go-content-layers-group-list-item">
|
|
|
<div
|
|
|
class="root-item-content"
|
|
|
- :class="{ hover: hover, select: select }"
|
|
|
+ :class="{ hover: hover, select: select, 'list-mini': layerMode === 'text' }"
|
|
|
@click="clickHandle($event)"
|
|
|
@mousedown="groupMousedownHandle($event)"
|
|
|
@mouseenter="mouseenterHandle(componentGroupData)"
|
|
|
@@ -18,11 +18,13 @@
|
|
|
<folder-icon></folder-icon>
|
|
|
</template>
|
|
|
</n-icon>
|
|
|
- <n-ellipsis>
|
|
|
+ <n-ellipsis style="margin-right: auto">
|
|
|
<n-text class="go-ml-2 list-text" :depth="2">
|
|
|
{{ componentGroupData.chartConfig.title }}
|
|
|
</n-text>
|
|
|
</n-ellipsis>
|
|
|
+ <n-icon size="12" class="list-status-icon" :component="LockClosedOutlineIcon" v-if="status.lock" />
|
|
|
+ <n-icon size="12" class="list-status-icon" :component="EyeOffOutlineIcon" v-if="status.hide" />
|
|
|
</div>
|
|
|
<div :class="{ 'select-modal': select }"></div>
|
|
|
</div>
|
|
|
@@ -31,6 +33,7 @@
|
|
|
v-for="element in componentGroupData.groupList"
|
|
|
:key="element.id"
|
|
|
:componentData="element"
|
|
|
+ :layer-mode="layerMode"
|
|
|
@mousedown="mousedownHandle($event, element, componentGroupData.id)"
|
|
|
@mouseenter="mouseenterHandle(element)"
|
|
|
@mouseleave="mouseleaveHandle(element)"
|
|
|
@@ -50,13 +53,21 @@ import { useContextMenu, divider } from '@/views/chart/hooks/useContextMenu.hook
|
|
|
import { MenuOptionsItemType } from '@/views/chart/hooks/useContextMenu.hook.d'
|
|
|
import { CreateComponentType, CreateComponentGroupType } from '@/packages/index.d'
|
|
|
import { LayersListItem } from '../LayersListItem'
|
|
|
-import throttle from 'lodash/throttle'
|
|
|
import { icon } from '@/plugins'
|
|
|
+import { LayerModeEnum } from '../../enums'
|
|
|
+
|
|
|
+const { LockClosedOutlineIcon, EyeOffOutlineIcon } = icon.ionicons5
|
|
|
|
|
|
const props = defineProps({
|
|
|
componentGroupData: {
|
|
|
type: Object as PropType<CreateComponentGroupType>,
|
|
|
required: true
|
|
|
+ },
|
|
|
+ layerMode: {
|
|
|
+ type: Object as PropType<LayerModeEnum>,
|
|
|
+ default(): LayerModeEnum {
|
|
|
+ return 'thumbnail'
|
|
|
+ }
|
|
|
}
|
|
|
})
|
|
|
|
|
|
@@ -84,20 +95,29 @@ const optionsHandle = (
|
|
|
targetInstance: CreateComponentType
|
|
|
) => {
|
|
|
const filter = (menulist: MenuEnum[]) => {
|
|
|
- const list: MenuOptionsItemType[] = []
|
|
|
- allList.forEach(item => {
|
|
|
- if (menulist.includes(item.key as MenuEnum)) {
|
|
|
- list.push(item)
|
|
|
- }
|
|
|
- })
|
|
|
- return list
|
|
|
+ return allList.filter(i => menulist.includes(i.key as MenuEnum))
|
|
|
}
|
|
|
|
|
|
// 多选处理
|
|
|
if (chartEditStore.getTargetChart.selectId.length > 1) {
|
|
|
return filter([MenuEnum.GROUP])
|
|
|
} else {
|
|
|
- return [...filter([MenuEnum.UN_GROUP]), divider(), ...targetList]
|
|
|
+ const statusMenuEnums: MenuEnum[] = []
|
|
|
+ if (targetInstance.status.lock) {
|
|
|
+ statusMenuEnums.push(MenuEnum.LOCK)
|
|
|
+ } else {
|
|
|
+ statusMenuEnums.push(MenuEnum.UNLOCK)
|
|
|
+ }
|
|
|
+ if (targetInstance.status.hide) {
|
|
|
+ statusMenuEnums.push(MenuEnum.HIDE)
|
|
|
+ } else {
|
|
|
+ statusMenuEnums.push(MenuEnum.SHOW)
|
|
|
+ }
|
|
|
+ return [
|
|
|
+ ...filter([MenuEnum.UN_GROUP]),
|
|
|
+ divider(),
|
|
|
+ ...targetList.filter(i => !statusMenuEnums.includes(i.key as MenuEnum))
|
|
|
+ ]
|
|
|
}
|
|
|
}
|
|
|
|
|
|
@@ -125,6 +145,10 @@ const hover = computed(() => {
|
|
|
return props.componentGroupData.id === chartEditStore.getTargetChart.hoverId
|
|
|
})
|
|
|
|
|
|
+const status = computed(() => {
|
|
|
+ return props.componentGroupData.status
|
|
|
+})
|
|
|
+
|
|
|
// 组点击事件
|
|
|
const groupMousedownHandle = (e: MouseEvent) => {
|
|
|
onClickOutSide()
|
|
|
@@ -148,7 +172,11 @@ const groupMousedownHandle = (e: MouseEvent) => {
|
|
|
}
|
|
|
|
|
|
// 公共点击事件
|
|
|
-const mousedownHandle = (e: MouseEvent, componentInstance: CreateComponentType | CreateComponentGroupType, id?: string) => {
|
|
|
+const mousedownHandle = (
|
|
|
+ e: MouseEvent,
|
|
|
+ componentInstance: CreateComponentType | CreateComponentGroupType,
|
|
|
+ id?: string
|
|
|
+) => {
|
|
|
e.preventDefault()
|
|
|
e.stopPropagation()
|
|
|
|
|
|
@@ -169,6 +197,7 @@ const mouseleaveHandle = (componentInstance: CreateComponentType | CreateCompone
|
|
|
|
|
|
<style lang="scss" scoped>
|
|
|
$centerHeight: 52px;
|
|
|
+$centerMiniHeight: 28px;
|
|
|
$textSize: 10px;
|
|
|
|
|
|
@include go(content-layers-group-list-item) {
|
|
|
@@ -178,6 +207,11 @@ $textSize: 10px;
|
|
|
margin-bottom: 5px;
|
|
|
@extend .go-transition-quick;
|
|
|
|
|
|
+ :deep(.go-content-layers-list-item) {
|
|
|
+ margin-right: 0 !important;
|
|
|
+ width: 95% !important;
|
|
|
+ }
|
|
|
+
|
|
|
.root-item-content {
|
|
|
height: $centerHeight;
|
|
|
cursor: pointer;
|
|
|
@@ -196,6 +230,17 @@ $textSize: 10px;
|
|
|
border: 1px solid v-bind('themeColor') !important;
|
|
|
}
|
|
|
}
|
|
|
+
|
|
|
+ // mini样式
|
|
|
+ &.list-mini {
|
|
|
+ height: $centerMiniHeight;
|
|
|
+ .item-content {
|
|
|
+ height: calc(#{$centerMiniHeight} - 10px) !important;
|
|
|
+ }
|
|
|
+ .select-modal {
|
|
|
+ height: calc(#{$centerMiniHeight} + 2px) !important;
|
|
|
+ }
|
|
|
+ }
|
|
|
}
|
|
|
.select-modal,
|
|
|
.item-content {
|
|
|
@@ -220,5 +265,9 @@ $textSize: 10px;
|
|
|
padding-left: 6px;
|
|
|
font-size: $textSize;
|
|
|
}
|
|
|
+
|
|
|
+ .list-status-icon {
|
|
|
+ margin-left: 3px;
|
|
|
+ }
|
|
|
}
|
|
|
</style>
|