From 132c2a0afadec08f75d944f0eb8370d461397112 Mon Sep 17 00:00:00 2001 From: pipipi-pikachu Date: Fri, 12 Feb 2021 15:04:04 +0800 Subject: [PATCH] =?UTF-8?q?perf:=20=E4=BB=A3=E7=A0=81=E4=BC=98=E5=8C=96&?= =?UTF-8?q?=E6=B3=A8=E9=87=8A?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../useHotkey.ts => hooks/useGlobalHotkey.ts} | 22 +++--- src/{views/Editor => hooks}/usePasteEvent.ts | 13 +++- src/views/Editor/CanvasTool/index.vue | 5 ++ src/views/Editor/Thumbnails/index.vue | 3 + src/views/Editor/index.vue | 6 +- src/views/Screen/ScreenElement.vue | 1 + src/views/Screen/WritingBoardTool.vue | 7 +- src/views/Screen/index.vue | 35 ++++++--- .../element/TableElement/EditableTable.vue | 71 +++---------------- .../element/TableElement/StaticTable.vue | 68 +++--------------- .../element/TableElement/useHideCells.ts | 31 ++++++++ .../element/TableElement/useSubThemeColor.ts | 24 +++++++ .../components/element/TableElement/utils.ts | 31 ++++++++ 13 files changed, 168 insertions(+), 149 deletions(-) rename src/{views/Editor/useHotkey.ts => hooks/useGlobalHotkey.ts} (91%) rename src/{views/Editor => hooks}/usePasteEvent.ts (80%) create mode 100644 src/views/components/element/TableElement/useHideCells.ts create mode 100644 src/views/components/element/TableElement/useSubThemeColor.ts create mode 100644 src/views/components/element/TableElement/utils.ts diff --git a/src/views/Editor/useHotkey.ts b/src/hooks/useGlobalHotkey.ts similarity index 91% rename from src/views/Editor/useHotkey.ts rename to src/hooks/useGlobalHotkey.ts index c1ee7648..d667fb6b 100644 --- a/src/views/Editor/useHotkey.ts +++ b/src/hooks/useGlobalHotkey.ts @@ -4,17 +4,17 @@ import { ElementOrderCommand, ElementOrderCommands } from '@/types/edit' import { PPTElement } from '@/types/slides' import { KEYS } from '@/configs/hotkey' -import useSlideHandler from '@/hooks/useSlideHandler' -import useLockElement from '@/hooks/useLockElement' -import useDeleteElement from '@/hooks/useDeleteElement' -import useCombineElement from '@/hooks/useCombineElement' -import useCopyAndPasteElement from '@/hooks/useCopyAndPasteElement' -import useSelectAllElement from '@/hooks/useSelectAllElement' -import useMoveElement from '@/hooks/useMoveElement' -import useOrderElement from '@/hooks/useOrderElement' -import useHistorySnapshot from '@/hooks/useHistorySnapshot' -import useScreening from '@/hooks/useScreening' -import useScaleCanvas from '@/hooks/useScaleCanvas' +import useSlideHandler from './useSlideHandler' +import useLockElement from './useLockElement' +import useDeleteElement from './useDeleteElement' +import useCombineElement from './useCombineElement' +import useCopyAndPasteElement from './useCopyAndPasteElement' +import useSelectAllElement from './useSelectAllElement' +import useMoveElement from './useMoveElement' +import useOrderElement from './useOrderElement' +import useHistorySnapshot from './useHistorySnapshot' +import useScreening from './useScreening' +import useScaleCanvas from './useScaleCanvas' export default () => { const store = useStore() diff --git a/src/views/Editor/usePasteEvent.ts b/src/hooks/usePasteEvent.ts similarity index 80% rename from src/views/Editor/usePasteEvent.ts rename to src/hooks/usePasteEvent.ts index c88ec231..9c4fc815 100644 --- a/src/views/Editor/usePasteEvent.ts +++ b/src/hooks/usePasteEvent.ts @@ -1,8 +1,8 @@ import { computed, onMounted, onUnmounted } from 'vue' import { useStore } from '@/store' import { getImageDataURL } from '@/utils/image' -import usePasteTextClipboardData from '@/hooks/usePasteTextClipboardData' -import useCreateElement from '@/hooks/useCreateElement' +import usePasteTextClipboardData from './usePasteTextClipboardData' +import useCreateElement from './useCreateElement' export default () => { const store = useStore() @@ -13,10 +13,15 @@ export default () => { const { pasteTextClipboardData } = usePasteTextClipboardData() const { createImageElement } = useCreateElement() + // 粘贴图片到幻灯片元素 const pasteImageFile = (imageFile: File) => { getImageDataURL(imageFile).then(dataURL => createImageElement(dataURL)) } + /** + * 粘贴事件监听 + * @param e ClipboardEvent + */ const pasteListener = (e: ClipboardEvent) => { if (!editorAreaFocus.value && !thumbnailsFocus.value) return if (disableHotkeys.value) return @@ -28,6 +33,7 @@ export default () => { if (!clipboardDataFirstItem) return + // 如果剪贴板内有图片,优先尝试读取图片 for (const item of clipboardDataItems) { if (item.kind === 'file' && item.type.indexOf('image') !== -1) { const imageFile = item.getAsFile() @@ -35,7 +41,8 @@ export default () => { return } } - + + // 如果剪贴板内没有图片,但有文字内容,尝试解析文字内容 if (clipboardDataFirstItem.kind === 'string' && clipboardDataFirstItem.type === 'text/plain') { clipboardDataFirstItem.getAsString(text => pasteTextClipboardData(text)) } diff --git a/src/views/Editor/CanvasTool/index.vue b/src/views/Editor/CanvasTool/index.vue index e2cac522..21e4c865 100644 --- a/src/views/Editor/CanvasTool/index.vue +++ b/src/views/Editor/CanvasTool/index.vue @@ -113,12 +113,15 @@ export default defineComponent({ const chartPoolVisible = ref(false) const tableGeneratorVisible = ref(false) + // 绘制文字范围 const drawText = () => { store.commit(MutationTypes.SET_CREATING_ELEMENT, { type: 'text', data: null, }) } + + // 绘制形状范围 const drawShape = (shape: ShapePoolItem) => { store.commit(MutationTypes.SET_CREATING_ELEMENT, { type: 'shape', @@ -126,6 +129,8 @@ export default defineComponent({ }) shapePoolVisible.value = false } + + // 绘制线条路径 const drawLine = (line: LinePoolItem) => { store.commit(MutationTypes.SET_CREATING_ELEMENT, { type: 'line', diff --git a/src/views/Editor/Thumbnails/index.vue b/src/views/Editor/Thumbnails/index.vue index 3c816594..0f0ab408 100644 --- a/src/views/Editor/Thumbnails/index.vue +++ b/src/views/Editor/Thumbnails/index.vue @@ -63,6 +63,7 @@ export default defineComponent({ cutSlide, } = useSlideHandler() + // 切换页面 const changSlideIndex = (index: number) => { store.commit(MutationTypes.SET_ACTIVE_ELEMENT_ID_LIST, []) @@ -72,11 +73,13 @@ export default defineComponent({ const thumbnailsFocus = computed(() => store.state.thumbnailsFocus) + // 设置缩略图工具栏聚焦状态(只有聚焦状态下,该部分的快捷键才能生效) const setThumbnailsFocus = (focus: boolean) => { if (thumbnailsFocus.value === focus) return store.commit(MutationTypes.SET_THUMBNAILS_FOCUS, focus) } + // 拖拽调整顺序后进行数据的同步 const handleDragEnd = (eventData: { newIndex: number; oldIndex: number }) => { const { newIndex, oldIndex } = eventData if (oldIndex === newIndex) return diff --git a/src/views/Editor/index.vue b/src/views/Editor/index.vue index a76212c4..b1de568d 100644 --- a/src/views/Editor/index.vue +++ b/src/views/Editor/index.vue @@ -15,8 +15,8 @@