From 8f0b27222458a47d1662d76e0617093991953db0 Mon Sep 17 00:00:00 2001 From: pipipi-pikachu Date: Mon, 6 Jun 2022 12:51:15 +0800 Subject: [PATCH] =?UTF-8?q?chore:=20=E7=B1=BB=E5=9E=8B=E8=B0=83=E6=95=B4?= =?UTF-8?q?=EF=BC=8C=E6=94=AF=E6=8C=81=20volar?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .eslintrc.js | 6 +++ src/components/LaTeXEditor/index.vue | 9 ++++- src/types/edit.ts | 12 ++---- src/types/slides.ts | 4 +- src/views/Editor/Canvas/Operate/index.vue | 2 +- .../Editor/Canvas/hooks/useSelectElement.ts | 8 ++-- .../Editor/Toolbar/ElementAnimationPanel.vue | 9 +++-- .../Editor/Toolbar/ElementPositionPanel.vue | 38 ++++++++++--------- .../ElementStylePanel/AudioStylePanel.vue | 8 ++-- .../ChartStylePanel/index.vue | 8 ++-- .../ElementStylePanel/ImageStylePanel.vue | 4 +- .../ElementStylePanel/LatexStylePanel.vue | 6 +-- .../ElementStylePanel/LineStylePanel.vue | 12 +++--- .../ElementStylePanel/MultiStylePanel.vue | 10 ++--- .../ElementStylePanel/ShapeStylePanel.vue | 22 ++++++----- .../ElementStylePanel/TableStylePanel.vue | 9 ++--- .../ElementStylePanel/TextStylePanel.vue | 16 ++++---- .../Editor/Toolbar/MultiPositionPanel.vue | 13 ++++--- src/views/Editor/Toolbar/SlideDesignPanel.vue | 24 ++++++------ .../Editor/Toolbar/common/ElementFilter.vue | 4 +- .../Editor/Toolbar/common/ElementOpacity.vue | 2 +- .../Editor/Toolbar/common/ElementOutline.vue | 10 ++--- .../Editor/Toolbar/common/ElementShadow.vue | 8 ++-- .../Mobile/MobileEditor/ElementToolbar.vue | 27 +++++++------ .../MobileEditor/MobileEditableElement.vue | 2 +- .../Mobile/MobileEditor/MobileOperate.vue | 27 +++---------- .../Mobile/MobileEditor/SlideToolbar.vue | 2 +- src/views/Mobile/MobileEditor/index.vue | 17 +++++---- .../element/AudioElement/AudioPlayer.vue | 8 ++-- .../components/element/AudioElement/index.vue | 4 +- .../components/element/ChartElement/index.vue | 2 +- .../element/ImageElement/ImageClipHandler.vue | 24 ++++++++++-- .../ImageOutline/ImageEllipseOutline.vue | 1 - .../ImageOutline/ImagePolygonOutline.vue | 1 - .../ImageOutline/ImageRectOutline.vue | 1 - .../components/element/ImageElement/index.vue | 2 +- .../components/element/LatexElement/index.vue | 2 +- .../element/LineElement/BaseLineElement.vue | 3 -- .../components/element/LineElement/index.vue | 5 +-- .../element/ShapeElement/BaseShapeElement.vue | 1 - .../components/element/ShapeElement/index.vue | 3 +- .../element/TableElement/CustomTextarea.vue | 5 ++- .../element/TableElement/EditableTable.vue | 3 +- .../components/element/TableElement/index.vue | 2 +- .../components/element/TableElement/utils.ts | 3 +- .../element/TextElement/BaseTextElement.vue | 13 ++++--- .../components/element/TextElement/index.vue | 2 +- .../VideoElement/VideoPlayer/index.vue | 8 ++-- .../components/element/VideoElement/index.vue | 2 +- 49 files changed, 214 insertions(+), 200 deletions(-) diff --git a/.eslintrc.js b/.eslintrc.js index 50171d6a..fbf4959c 100644 --- a/.eslintrc.js +++ b/.eslintrc.js @@ -67,6 +67,12 @@ module.exports = { 'no-console': isProduction ? 'error' : 'warn', 'no-debugger': isProduction ? 'error' : 'warn', '@typescript-eslint/explicit-module-boundary-types': 'off', + '@typescript-eslint/ban-types': ['error', { + 'extendDefaults': true, + 'types': { + '{}': false, + }, + }], }, overrides: [ { diff --git a/src/components/LaTeXEditor/index.vue b/src/components/LaTeXEditor/index.vue index c1877b04..3ef7f746 100644 --- a/src/components/LaTeXEditor/index.vue +++ b/src/components/LaTeXEditor/index.vue @@ -73,7 +73,12 @@ import { FORMULA_LIST, SYMBOL_LIST } from '@/configs/latex' import FormulaContent from './FormulaContent.vue' import SymbolContent from './SymbolContent.vue' -const tabs = [ +interface Tab { + label: string; + value: 'symbol' | 'formula'; +} + +const tabs: Tab[] = [ { label: '常用符号', value: 'symbol' }, { label: '预置公式', value: 'formula' }, ] @@ -93,7 +98,7 @@ export default defineComponent({ }, setup(props, { emit }) { const latex = ref('') - const toolbarState = ref('symbol') + const toolbarState = ref<'symbol' | 'formula'>('symbol') const textAreaRef = ref() const selectedSymbolKey = ref(SYMBOL_LIST[0].type) diff --git a/src/types/edit.ts b/src/types/edit.ts index e7cd3b22..0e2d625b 100644 --- a/src/types/edit.ts +++ b/src/types/edit.ts @@ -1,14 +1,15 @@ import { ShapePoolItem } from '@/configs/shapes' import { LinePoolItem } from '@/configs/lines' +import { ImageClipDataRange } from './slides' -export const enum ElementOrderCommands { +export enum ElementOrderCommands { UP = 'up', DOWN = 'down', TOP = 'top', BOTTOM = 'bottom', } -export const enum ElementAlignCommands { +export enum ElementAlignCommands { TOP = 'top', BOTTOM = 'bottom', LEFT = 'left', @@ -62,13 +63,6 @@ export interface MultiSelectRange { maxY: number; } -export type ImageClipDataRange = [[number, number], [number, number]] - -export interface ImageClipData { - range: ImageClipDataRange; - path: string; -} - export interface ImageClipedEmitData { range: ImageClipDataRange; position: { diff --git a/src/types/slides.ts b/src/types/slides.ts index 5976f9b0..92110662 100644 --- a/src/types/slides.ts +++ b/src/types/slides.ts @@ -191,6 +191,8 @@ export interface ImageElementFilters { 'opacity'?: string; } +export type ImageClipDataRange = [[number, number], [number, number]] + /** * 图片裁剪 * @@ -199,7 +201,7 @@ export interface ImageElementFilters { * shape: 裁剪形状,见 configs/imageClip.ts CLIPPATHS */ export interface ImageElementClip { - range: [[number, number], [number, number]]; + range: ImageClipDataRange; shape: string; } diff --git a/src/views/Editor/Canvas/Operate/index.vue b/src/views/Editor/Canvas/Operate/index.vue index 265c3d76..f9e54494 100644 --- a/src/views/Editor/Canvas/Operate/index.vue +++ b/src/views/Editor/Canvas/Operate/index.vue @@ -31,7 +31,7 @@ :link="elementInfo.link" :openLinkDialog="openLinkDialog" v-if="isActive && elementInfo.link" - @mousedown.stop + @mousedown.stop="" /> diff --git a/src/views/Editor/Canvas/hooks/useSelectElement.ts b/src/views/Editor/Canvas/hooks/useSelectElement.ts index 94d6c064..4fa2c1e9 100644 --- a/src/views/Editor/Canvas/hooks/useSelectElement.ts +++ b/src/views/Editor/Canvas/hooks/useSelectElement.ts @@ -6,7 +6,7 @@ import { PPTElement } from '@/types/slides' export default ( elementList: Ref, - moveElement: (e: MouseEvent, element: PPTElement) => void, + moveElement: (e: MouseEvent | TouchEvent, element: PPTElement) => void, ) => { const mainStore = useMainStore() const { activeElementIdList, activeGroupElementId, handleElementId, editorAreaFocus } = storeToRefs(mainStore) @@ -14,7 +14,7 @@ export default ( // 选中元素 // startMove 表示是否需要再选中操作后进入到开始移动的状态 - const selectElement = (e: MouseEvent, element: PPTElement, startMove = true) => { + const selectElement = (e: MouseEvent | TouchEvent, element: PPTElement, startMove = true) => { if (!editorAreaFocus.value) mainStore.setEditorareaFocus(true) // 如果目标元素当前未被选中,则将他设为选中状态 @@ -69,8 +69,8 @@ export default ( // 如果目标元素已被选中,同时也是当前操作元素,那么当目标元素在该状态下再次被点击时,将被设置为多选元素中的激活成员 else if (activeGroupElementId.value !== element.id) { - const startPageX = e.pageX - const startPageY = e.pageY + const startPageX = e instanceof TouchEvent ? e.changedTouches[0].pageX : e.pageX + const startPageY = e instanceof TouchEvent ? e.changedTouches[0].pageY : e.pageY ;(e.target as HTMLElement).onmouseup = (e: MouseEvent) => { const currentPageX = e.pageX diff --git a/src/views/Editor/Toolbar/ElementAnimationPanel.vue b/src/views/Editor/Toolbar/ElementAnimationPanel.vue index fb8bf7c4..1e61b176 100644 --- a/src/views/Editor/Toolbar/ElementAnimationPanel.vue +++ b/src/views/Editor/Toolbar/ElementAnimationPanel.vue @@ -15,7 +15,7 @@ @click="activeTab = tab.key" >{{tab.label}} -