import { forwardRef, useImperativeHandle, useMemo, useRef, useState, } from "react"; import { Col, Form, Input, message, Modal, Row, Select, Tabs, TabsProps, } from "antd"; import LangInput from "@/components/LangInput"; import LangInputTextarea from "@/components/LangInputTextarea"; import { TableType } from "@/enum"; import { createColumn, createTable } from "@/utils"; import { TableItemType } from "@/type"; import { useModel, useRequest } from "umi"; import { GetAllDesignTables, GetAllBusinessTableColumns, GetBusinessTablesByTableId, ListLangByKey, } from "@/api"; import { validateTableCode, validateAliasName } from "@/utils/validator"; import { pick } from "lodash-es"; import CustomColorPicker from "@/components/CustomColorPicker"; export default forwardRef(function AddTable( props: { onChange: (tables: TableItemType[]) => void; }, ref ) { const [open, setOpen] = useState(false); const tableItemRef = useRef(); const { project, graph } = useModel("erModel"); const [tabActiveKey, setTabActiveKey] = useState("1"); const [form] = Form.useForm(); const [form1] = Form.useForm(); const [formModel, setFormModel] = useState(); const [hideAddTab, setHideAddTab] = useState(false); const [color, setColor] = useState(); useImperativeHandle(ref, () => ({ open: () => { // 获取当前模型类型 tableItemRef.current = createTable(project.type, project.id); setFormModel(tableItemRef.current.table); setOpen(true); setColor(undefined); }, openImportMode: () => { setTabActiveKey("2"); run(); setHideAddTab(true); setOpen(true); }, close: () => { setOpen(false); }, })); const { data, loading, run } = useRequest(() => GetAllDesignTables(), { manual: true, }); const tableOptions = useMemo(() => { const options = data?.result?.appBusinessTables ?.filter( (item: any) => // 过滤当前数据表类型及存在相同schemaName、aliasName的表 item?.type == project?.type // && !project.tables.find( // (tableItem) => // tableItem.table.schemaName === item.schemaName || // tableItem.table.aliasName === item.aliasName // ) ) ?.map((item: any) => { // 判断是否存在已引入的表 const hasTable = project.tables.find( (tableItem: TableItemType) => tableItem.table.schemaName === item.schemaName || tableItem.table.aliasName === item.aliasName ); return { label: `${item?.schemaName}(${item.name})`, value: item?.id, disabled: hasTable, }; }) || []; return options; }, [data]); const items: TabsProps["items"] = [ { key: "1", label: `新建`, children: (
handleChange("schemaName", e.target.value)} /> handleChange("aliasName", e.target.value)} /> handleChange("langNameList", lang)} /> handleChange("langDescriptionList", lang) } />
), }, { key: "2", label: `引入`, children: (