diff --git a/src/components/MoveablePanel.vue b/src/components/MoveablePanel.vue
index 1ab2ff5e..9255872e 100644
--- a/src/components/MoveablePanel.vue
+++ b/src/components/MoveablePanel.vue
@@ -10,7 +10,7 @@
>
@@ -45,6 +45,10 @@ const props = defineProps({
},
})
+const emit = defineEmits<{
+ (event: 'close'): void
+}>()
+
const x = ref(0)
const y = ref(0)
diff --git a/src/hooks/useSelectAllElement.ts b/src/hooks/useSelectAllElement.ts
index b3560bff..666f8b48 100644
--- a/src/hooks/useSelectAllElement.ts
+++ b/src/hooks/useSelectAllElement.ts
@@ -4,10 +4,11 @@ import { useMainStore, useSlidesStore } from '@/store'
export default () => {
const mainStore = useMainStore()
const { currentSlide } = storeToRefs(useSlidesStore())
+ const { hiddenElementIdList } = storeToRefs(mainStore)
// 将当前页面全部元素设置为被选择状态
const selectAllElement = () => {
- const unlockedElements = currentSlide.value.elements.filter(el => !el.lock)
+ const unlockedElements = currentSlide.value.elements.filter(el => !el.lock && !hiddenElementIdList.value.includes(el.id))
const newActiveElementIdList = unlockedElements.map(el => el.id)
mainStore.setActiveElementIdList(newActiveElementIdList)
}
diff --git a/src/plugins/icon.ts b/src/plugins/icon.ts
index 4a10706e..74e304d7 100644
--- a/src/plugins/icon.ts
+++ b/src/plugins/icon.ts
@@ -108,6 +108,8 @@ import {
TextRotationNone,
TextRotationDown,
FormatBrush,
+ PreviewOpen,
+ PreviewClose,
} from '@icon-park/vue-next'
export const icons = {
@@ -217,6 +219,8 @@ export const icons = {
IconTextRotationNone: TextRotationNone,
IconTextRotationDown: TextRotationDown,
IconFormatBrush: FormatBrush,
+ IconPreviewOpen: PreviewOpen,
+ IconPreviewClose: PreviewClose,
}
export default {
diff --git a/src/store/main.ts b/src/store/main.ts
index 77c053af..6b6158e0 100644
--- a/src/store/main.ts
+++ b/src/store/main.ts
@@ -13,6 +13,7 @@ export interface MainState {
activeElementIdList: string[]
handleElementId: string
activeGroupElementId: string
+ hiddenElementIdList: string[]
canvasPercentage: number
canvasScale: number
canvasDragged: boolean
@@ -32,6 +33,7 @@ export interface MainState {
dialogForExport: DialogForExportTypes
databaseId: string
textFormatPainter: TextFormatPainter | null
+ showSelectPanel: boolean
}
const nanoid = customAlphabet('0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz')
@@ -42,6 +44,7 @@ export const useMainStore = defineStore('main', {
activeElementIdList: [], // 被选中的元素ID集合,包含 handleElementId
handleElementId: '', // 正在操作的元素ID
activeGroupElementId: '', // 组合元素成员中,被选中可独立操作的元素ID
+ hiddenElementIdList: [], // 被隐藏的元素ID集合
canvasPercentage: 90, // 画布可视区域百分比
canvasScale: 1, // 画布缩放比例(基于宽度1000px)
canvasDragged: false, // 画布被拖拽移动
@@ -61,6 +64,7 @@ export const useMainStore = defineStore('main', {
dialogForExport: '', // 导出面板
databaseId, // 标识当前应用的indexedDB数据库ID
textFormatPainter: null, // 文字格式刷
+ showSelectPanel: false, // 打开选择面板
}),
getters: {
@@ -94,6 +98,10 @@ export const useMainStore = defineStore('main', {
setActiveGroupElementId(activeGroupElementId: string) {
this.activeGroupElementId = activeGroupElementId
},
+
+ setHiddenElementIdList(hiddenElementIdList: string[]) {
+ this.hiddenElementIdList = hiddenElementIdList
+ },
setCanvasPercentage(percentage: number) {
this.canvasPercentage = percentage
@@ -166,5 +174,9 @@ export const useMainStore = defineStore('main', {
setTextFormatPainter(textFormatPainter: TextFormatPainter | null) {
this.textFormatPainter = textFormatPainter
},
+
+ setSelectPanelState(show: boolean) {
+ this.showSelectPanel = show
+ },
},
})
\ No newline at end of file
diff --git a/src/views/Editor/Canvas/hooks/useMouseSelection.ts b/src/views/Editor/Canvas/hooks/useMouseSelection.ts
index b458d22b..87d8b825 100644
--- a/src/views/Editor/Canvas/hooks/useMouseSelection.ts
+++ b/src/views/Editor/Canvas/hooks/useMouseSelection.ts
@@ -6,7 +6,7 @@ import { getElementRange } from '@/utils/element'
export default (elementList: Ref
, viewportRef: Ref) => {
const mainStore = useMainStore()
- const { canvasScale } = storeToRefs(mainStore)
+ const { canvasScale, hiddenElementIdList } = storeToRefs(mainStore)
const mouseSelectionVisible = ref(false)
const mouseSelectionQuadrant = ref(1)
@@ -117,8 +117,8 @@ export default (elementList: Ref, viewportRef: Ref
@@ -72,6 +73,7 @@
:isMultiSelect="activeElementIdList.length > 1"
:selectElement="selectElement"
:openLinkDialog="openLinkDialog"
+ v-show="!hiddenElementIdList.includes(element.id)"
/>
@@ -137,6 +139,7 @@ const {
activeElementIdList,
activeGroupElementId,
handleElementId,
+ hiddenElementIdList,
editorAreaFocus,
gridLineSize,
showRuler,
diff --git a/src/views/Editor/EditorHeader/index.vue b/src/views/Editor/EditorHeader/index.vue
index 96e97550..737fe63f 100644
--- a/src/views/Editor/EditorHeader/index.vue
+++ b/src/views/Editor/EditorHeader/index.vue
@@ -27,6 +27,7 @@