|
@@ -19,8 +19,12 @@ import { useStore, useStoreRenderProcessors } from "../../store";
|
|
|
import { computed, watch } from "vue";
|
|
|
import { useHistory } from "@/core/hook/use-history";
|
|
|
import { ShapeType } from "..";
|
|
|
-import { TableData, interactiveToData as tableInteractiveToData } from "../table";
|
|
|
-import { delItem, getCurrentNdx, SerialData } from ".";
|
|
|
+import {
|
|
|
+ TableCollData,
|
|
|
+ TableData,
|
|
|
+ interactiveToData as tableInteractiveToData,
|
|
|
+} from "../table";
|
|
|
+import { defaultTableStyle, delItem, getCurrentNdx, SerialData } from ".";
|
|
|
import {
|
|
|
useGetViewBoxPositionPixel,
|
|
|
useViewerInvertTransform,
|
|
@@ -38,10 +42,6 @@ const addHandler = (value: SerialData) => {
|
|
|
store.addItem("serial", value);
|
|
|
};
|
|
|
|
|
|
-const delHandler = (ndx: number) => {
|
|
|
- delItem(store, data.value[ndx]);
|
|
|
-};
|
|
|
-
|
|
|
const joinKey = "serial-table";
|
|
|
const jTable = computed(() =>
|
|
|
store.getTypeItems("table").find((item) => item.key === joinKey)
|
|
@@ -58,11 +58,16 @@ const margin = computed(() => {
|
|
|
const invMat = useViewerInvertTransform();
|
|
|
const getPosition = useGetViewBoxPositionPixel();
|
|
|
const addTable = () => {
|
|
|
- const w = 304;
|
|
|
- const h = 32;
|
|
|
+ const w =
|
|
|
+ (defaultTableStyle.nameColWidth + defaultTableStyle.valueColWidth) *
|
|
|
+ defaultTableStyle.repColCount;
|
|
|
+ const h = defaultTableStyle.colHeight;
|
|
|
|
|
|
let pos = getPosition(
|
|
|
- { right: 44 + margin.value[1], top: 175 + margin.value[0] },
|
|
|
+ {
|
|
|
+ right: defaultTableStyle.right + margin.value[1],
|
|
|
+ top: defaultTableStyle.top + margin.value[0],
|
|
|
+ },
|
|
|
{ width: w, height: h }
|
|
|
);
|
|
|
pos = invMat.value.point(pos);
|
|
@@ -71,18 +76,40 @@ const addTable = () => {
|
|
|
y: pos.y + h,
|
|
|
};
|
|
|
|
|
|
+ const content: TableCollData[] = [];
|
|
|
+ for (let i = 0; i < defaultTableStyle.repColCount; i++) {
|
|
|
+ content.push(
|
|
|
+ {
|
|
|
+ content: "序号",
|
|
|
+ readonly: true,
|
|
|
+ notdel: true,
|
|
|
+ width: defaultTableStyle.nameColWidth,
|
|
|
+ height: defaultTableStyle.colHeight,
|
|
|
+ key: "serial-name",
|
|
|
+ fontSize: defaultTableStyle.fontSize,
|
|
|
+ padding: defaultTableStyle.padding,
|
|
|
+ },
|
|
|
+ {
|
|
|
+ content: "描述",
|
|
|
+ readonly: true,
|
|
|
+ notdel: true,
|
|
|
+ width: defaultTableStyle.valueColWidth,
|
|
|
+ height: defaultTableStyle.colHeight,
|
|
|
+ fontSize: defaultTableStyle.fontSize,
|
|
|
+ key: "serial-value",
|
|
|
+ padding: defaultTableStyle.padding,
|
|
|
+ }
|
|
|
+ );
|
|
|
+ }
|
|
|
+
|
|
|
return tableInteractiveToData({
|
|
|
info: { cur: [pos, end] },
|
|
|
preset: {
|
|
|
notaddRow: true,
|
|
|
notaddCol: true,
|
|
|
key: joinKey,
|
|
|
- content: [
|
|
|
- [
|
|
|
- { content: "序号", readonly: true, notdel: true },
|
|
|
- { content: "描述", readonly: true, notdel: true },
|
|
|
- ],
|
|
|
- ],
|
|
|
+ fontSize: defaultTableStyle.fontSize,
|
|
|
+ content: [content],
|
|
|
},
|
|
|
store,
|
|
|
history,
|
|
@@ -92,28 +119,40 @@ const addTable = () => {
|
|
|
|
|
|
const syncTable = (table: TableData) => {
|
|
|
const items = data.value;
|
|
|
- const cols = table.content.map((row) => row[0]);
|
|
|
+ const cols = table.content.flatMap((row) => {
|
|
|
+ const cols = [];
|
|
|
+ for (let i = 0; i < row.length; i += 2) {
|
|
|
+ cols.push(row[i]);
|
|
|
+ }
|
|
|
+ return cols;
|
|
|
+ });
|
|
|
const tempRow = table.content[table.content.length - 1];
|
|
|
- let isUpdate = false;
|
|
|
+ const colCount = tempRow.length / 2;
|
|
|
|
|
|
- for (const item of items) {
|
|
|
+ let isUpdate = false;
|
|
|
+ for (let i = 0; i < items.length; i++) {
|
|
|
+ const item = items[i];
|
|
|
if (cols.some((col) => col.content === item.content)) {
|
|
|
continue;
|
|
|
}
|
|
|
- table.height += tempRow[0].height;
|
|
|
- table.content.push([
|
|
|
- { ...tempRow[0], content: item.content! },
|
|
|
- { ...tempRow[1], content: "", readonly: false },
|
|
|
- ]);
|
|
|
- isUpdate = true;
|
|
|
- }
|
|
|
- for (let i = 1; i < cols.length; i++) {
|
|
|
- const col = cols[i];
|
|
|
- if (items.some((item) => col.content === item.content)) {
|
|
|
- continue;
|
|
|
+ let rowNdx = Math.floor(i / colCount) + 1;
|
|
|
+ let colNdx = (i % colCount) * 2;
|
|
|
+ if (colNdx) {
|
|
|
+ table.content[rowNdx][colNdx].content = item.content!;
|
|
|
+ } else {
|
|
|
+ table.height += tempRow[0].height;
|
|
|
+ let cols = [
|
|
|
+ { ...tempRow[0], content: item.content! },
|
|
|
+ { ...tempRow[1], content: "", readonly: false },
|
|
|
+ ];
|
|
|
+ for (let i = 1; i < colCount; i++) {
|
|
|
+ cols.push(
|
|
|
+ { ...tempRow[2], content: "" },
|
|
|
+ { ...tempRow[3], content: "", readonly: false }
|
|
|
+ );
|
|
|
+ }
|
|
|
+ table.content.push(cols);
|
|
|
}
|
|
|
- table.height -= tempRow[0].height;
|
|
|
- table.content.splice(i, 1);
|
|
|
isUpdate = true;
|
|
|
}
|
|
|
return isUpdate;
|
|
@@ -127,7 +166,12 @@ const updateJoinTable = () => {
|
|
|
table && history.preventTrack(() => store.delItem("table", table!.id));
|
|
|
return;
|
|
|
}
|
|
|
- table || history.preventTrack(() => store.addItem("table", (table = addTable())));
|
|
|
+ if (!table) {
|
|
|
+ history.preventTrack(() => {
|
|
|
+ store.addItem("table", (table = addTable()));
|
|
|
+ console.log(table);
|
|
|
+ });
|
|
|
+ }
|
|
|
if (syncTable(table!)) {
|
|
|
history.preventTrack(() =>
|
|
|
store.setItem("table", {
|