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}} -