import { DeleteOutlined, PlusOutlined, } from "@ant-design/icons"; import { Col, Row, Form, Input, Select, Button, Tooltip, Popover, Popconfirm, } from "antd"; import React, { useEffect, useState } from "react"; import CustomColorPicker from "@/components/CustomColorPicker"; import { ColumnItem as ColumnItemType, TableItemType } from "@/type"; import { TABLE_TYPE_OPTIONS } from "@/constants"; import { createColumn } from "@/utils"; import { useModel } from "umi"; import { DndContext } from "@dnd-kit/core"; import type { DragEndEvent } from "@dnd-kit/core"; import { SortableContext, arrayMove, verticalListSortingStrategy, } from "@dnd-kit/sortable"; import { restrictToParentElement } from "@dnd-kit/modifiers"; import ColumnItem from "./ColumnItem"; import LangInput from "@/components/LangInput"; import LangInputTextarea from "@/components/LangInputTextarea"; import { validateAliasName, validateTableCode } from "@/utils/validator"; export default function TableItem({ data, onChange, active, setActive, }: { data: TableItemType; onChange: (data: TableItemType) => void; active?: string; setActive: (active: string) => void; }) { const { tableColumnList = [] } = data; const { addTable, deleteTable } = useModel("erModel"); const [list, setList] = useState(tableColumnList); const [table, setTable] = React.useState(data?.table); useEffect(() => { setList(tableColumnList); }, [tableColumnList]); const handleTableChange = (key: string, value: any) => { onChange({ tableColumnList, table: { ...table, [key]: value }, isTable: true, }); setTable({ ...table, [key]: value }); }; const handleChangeColumn = (index: number, key: string, value: any) => { const data = tableColumnList[index]; const newData = { ...data, [key]: value }; setList(tableColumnList.map((item, i) => (i === index ? newData : item))); onChange({ isTable: true, table, tableColumnList: tableColumnList.map((item, i) => { if (index === i) { return { ...item, [key]: value }; } return item; }), }); }; // 添加表 const handleAddChildTable = () => { addTable(table.id); }; // 添加字段 const handleAddColumn = () => { const newColumn: ColumnItemType = createColumn( table.id, tableColumnList.length + 1 ); onChange({ table, tableColumnList: [...tableColumnList, newColumn], isTable: true, }); }; const handleDeleteColumn = (columnId: string) => { onChange({ table, tableColumnList: tableColumnList.filter((item) => item.id !== columnId), isTable: true, }); }; const handleDragEnd = (dragItem: DragEndEvent) => { const { active, over } = dragItem; if (!active || !over) return; // 处理边界情况 const activeIndex = tableColumnList.findIndex( (item) => item.id === active.id ); const overIndex = tableColumnList.findIndex((item) => item.id === over.id); const newList = arrayMove(tableColumnList, activeIndex, overIndex); setList(newList); onChange({ table, tableColumnList: newList, isTable: true, }); }; return (