diff --git a/src/hooks/useCreateElement.ts b/src/hooks/useCreateElement.ts index 9af57276..e1ff0051 100644 --- a/src/hooks/useCreateElement.ts +++ b/src/hooks/useCreateElement.ts @@ -3,7 +3,7 @@ import { MutationTypes } from '@/store' import { createRandomCode } from '@/utils/common' import { getImageSize } from '@/utils/image' import { VIEWPORT_SIZE, VIEWPORT_ASPECT_RATIO } from '@/configs/canvas' -import { ChartType, PPTElement, TableCell } from '@/types/slides' +import { ChartType, PPTElement } from '@/types/slides' import { ShapePoolItem } from '@/configs/shapes' import { LinePoolItem } from '@/configs/lines' import { @@ -12,7 +12,6 @@ import { DEFAULT_SHAPE, DEFAULT_LINE, DEFAULT_CHART, - DEFAULT_TABLE, } from '@/configs/element' import useHistorySnapshot from '@/hooks/useHistorySnapshot' @@ -77,24 +76,7 @@ export default () => { } const createTableElement = (rowCount: number, colCount: number) => { - const row: TableCell[] = new Array(colCount).fill({ colspan: 1, rowspan: 1, content: '' }) - const data: TableCell[][] = new Array(rowCount).fill(row) - - const DEFAULT_CELL_WIDTH = 80 - const DEFAULT_CELL_HEIGHT = 35 - const DEFAULT_BORDER_WIDTH = 2 - - const colWidths: number[] = new Array(colCount).fill(DEFAULT_CELL_WIDTH) - - createElement({ - ...DEFAULT_TABLE, - type: 'table', - id: createRandomCode(), - width: colCount * DEFAULT_CELL_WIDTH + DEFAULT_BORDER_WIDTH, - height: rowCount * DEFAULT_CELL_HEIGHT + DEFAULT_BORDER_WIDTH, - colWidths, - data, - }) + console.log(rowCount, colCount) } const createTextElement = (position: CommonElementPosition) => { diff --git a/src/mocks/index.ts b/src/mocks/index.ts index 6fa34fac..61ecf2ba 100644 --- a/src/mocks/index.ts +++ b/src/mocks/index.ts @@ -25,8 +25,13 @@ export const slides: Slide[] = [ left: 20, top: 20, width: 400, - height: 90, + height: 108, colWidths: [0.25, 0.25, 0.25, 0.25], + outline: { + width: 1, + style: 'solid', + color: '#999', + }, data: [ [ { id: '1', colspan: 1, rowspan: 1, text: '' }, diff --git a/src/types/slides.ts b/src/types/slides.ts index 11ef940b..fb231517 100644 --- a/src/types/slides.ts +++ b/src/types/slides.ts @@ -160,6 +160,7 @@ export interface PPTTableElement { groupId?: string; width: number; height: number; + outline: PPTElementOutline; colWidths: number[]; data: TableCell[][]; } diff --git a/src/views/Editor/Canvas/Operate/TableElementOperate.vue b/src/views/Editor/Canvas/Operate/TableElementOperate.vue index cd0f115a..b908dbcf 100644 --- a/src/views/Editor/Canvas/Operate/TableElementOperate.vue +++ b/src/views/Editor/Canvas/Operate/TableElementOperate.vue @@ -61,7 +61,9 @@ export default defineComponent({ const store = useStore() const canvasScale = computed(() => store.state.canvasScale) - const scaleWidth = computed(() => props.elementInfo.width * canvasScale.value) + const outlineWidth = computed(() => props.elementInfo.outline.width || 1) + + const scaleWidth = computed(() => (props.elementInfo.width + outlineWidth.value) * canvasScale.value) const scaleHeight = computed(() => props.elementInfo.height * canvasScale.value) const { textElementResizeHandlers, borderLines } = useCommonOperate(scaleWidth, scaleHeight) diff --git a/src/views/Screen/ScreenElement.vue b/src/views/Screen/ScreenElement.vue index 270b546c..f24722d6 100644 --- a/src/views/Screen/ScreenElement.vue +++ b/src/views/Screen/ScreenElement.vue @@ -24,6 +24,7 @@ import BaseTextElement from '@/views/components/element/TextElement/BaseTextElem import BaseShapeElement from '@/views/components/element/ShapeElement/BaseShapeElement.vue' import BaseLineElement from '@/views/components/element/LineElement/BaseLineElement.vue' import ScreenChartElement from '@/views/components/element/ChartElement/ScreenChartElement.vue' +import BaseTableElement from '@/views/components/element/TableElement/BaseTableElement.vue' export default defineComponent({ name: 'screen-element', @@ -49,6 +50,7 @@ export default defineComponent({ [ElementTypes.SHAPE]: BaseShapeElement, [ElementTypes.LINE]: BaseLineElement, [ElementTypes.CHART]: ScreenChartElement, + [ElementTypes.TABLE]: BaseTableElement, } return elementTypeMap[props.elementInfo.type] || null }) diff --git a/src/views/components/ThumbnailSlide/ThumbnailElement.vue b/src/views/components/ThumbnailSlide/ThumbnailElement.vue index ee5ad95b..f0a2640c 100644 --- a/src/views/components/ThumbnailSlide/ThumbnailElement.vue +++ b/src/views/components/ThumbnailSlide/ThumbnailElement.vue @@ -20,6 +20,7 @@ import BaseTextElement from '@/views/components/element/TextElement/BaseTextElem import BaseShapeElement from '@/views/components/element/ShapeElement/BaseShapeElement.vue' import BaseLineElement from '@/views/components/element/LineElement/BaseLineElement.vue' import BaseChartElement from '@/views/components/element/ChartElement/BaseChartElement.vue' +import BaseTableElement from '@/views/components/element/TableElement/BaseTableElement.vue' export default defineComponent({ name: 'base-element', @@ -41,6 +42,7 @@ export default defineComponent({ [ElementTypes.SHAPE]: BaseShapeElement, [ElementTypes.LINE]: BaseLineElement, [ElementTypes.CHART]: BaseChartElement, + [ElementTypes.TABLE]: BaseTableElement, } return elementTypeMap[props.elementInfo.type] || null }) diff --git a/src/views/components/element/ShapeElement/BaseShapeElement.vue b/src/views/components/element/ShapeElement/BaseShapeElement.vue index a684b02e..0ffcca93 100644 --- a/src/views/components/element/ShapeElement/BaseShapeElement.vue +++ b/src/views/components/element/ShapeElement/BaseShapeElement.vue @@ -1,5 +1,6 @@ + + + + diff --git a/src/views/components/element/TableElement/EditableDiv.vue b/src/views/components/element/TableElement/CustomTextarea.vue similarity index 71% rename from src/views/components/element/TableElement/EditableDiv.vue rename to src/views/components/element/TableElement/CustomTextarea.vue index 1b026017..e960a813 100644 --- a/src/views/components/element/TableElement/EditableDiv.vue +++ b/src/views/components/element/TableElement/CustomTextarea.vue @@ -1,7 +1,7 @@