AddTable.tsx 4.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147
  1. import { forwardRef, useImperativeHandle, useRef, useState } from "react";
  2. import { Col, Form, Input, Modal, Row, Select, Tabs, TabsProps } from "antd";
  3. import LangInput from "@/components/LangInput";
  4. import LangInputTextarea from "@/components/LangInputTextarea";
  5. import { TableType } from "@/enum";
  6. import { createTable } from "@/utils";
  7. import { TableItemType, ViewTable } from "@/type";
  8. import { useSearchParams } from "umi";
  9. export default forwardRef(function AddTable(
  10. props: {
  11. onChange: (value: TableItemType) => void;
  12. },
  13. ref
  14. ) {
  15. const [open, setOpen] = useState(false);
  16. const tableItemRef = useRef<TableItemType>();
  17. const [searchParams] = useSearchParams();
  18. const [tabActiveKey, setTabActiveKey] = useState("1");
  19. useImperativeHandle(ref, () => ({
  20. open: () => {
  21. // 获取当前模型类型
  22. tableItemRef.current = createTable(
  23. searchParams.get("type") as unknown as TableType
  24. );
  25. setFormModel(tableItemRef.current.table);
  26. setOpen(true);
  27. },
  28. close: () => {
  29. setOpen(false);
  30. },
  31. }));
  32. const [form] = Form.useForm();
  33. const [formModel, setFormModel] = useState<TableItemType['table']>();
  34. const items: TabsProps["items"] = [
  35. {
  36. key: "1",
  37. label: `新建`,
  38. children: (
  39. <div>
  40. <Form labelCol={{ span: 8 }} form={form}>
  41. <Row gutter={16}>
  42. <Col span={12}>
  43. <Form.Item label="表类型">
  44. <Input
  45. placeholder="请输入"
  46. value={
  47. formModel?.type == TableType.BusinessTable
  48. ? "业务表"
  49. : "视图表"
  50. }
  51. disabled
  52. />
  53. </Form.Item>
  54. </Col>
  55. <Col span={12}>
  56. <Form.Item label="编码">
  57. <Input
  58. placeholder="请输入"
  59. value={formModel?.schemaName}
  60. onChange={(e) => handleChange("schemaName", e.target.value)}
  61. />
  62. </Form.Item>
  63. </Col>
  64. </Row>
  65. <Row gutter={16}>
  66. <Col span={12}>
  67. <Form.Item label="表名">
  68. <LangInput
  69. value={formModel?.langNameList}
  70. onChange={(lang) => handleChange("langNameList", lang)}
  71. />
  72. </Form.Item>
  73. </Col>
  74. <Col span={12}>
  75. <Form.Item label="别名">
  76. <Input
  77. placeholder="请输入"
  78. value={formModel?.aliasName}
  79. onChange={(e) => handleChange("aliasName", e.target.value)}
  80. />
  81. </Form.Item>
  82. </Col>
  83. </Row>
  84. <Row gutter={16}>
  85. <Col span={24}>
  86. <Form.Item label="描述" labelCol={{ span: 4 }}>
  87. <LangInputTextarea
  88. value={formModel?.langDescriptionList}
  89. onChange={(lang) =>
  90. handleChange("langDescriptionList", lang)
  91. }
  92. />
  93. </Form.Item>
  94. </Col>
  95. </Row>
  96. </Form>
  97. </div>
  98. ),
  99. },
  100. {
  101. key: "2",
  102. label: `引入`,
  103. children: (
  104. <div>
  105. <Form.Item label="选择主表">
  106. <Select placeholder="请选择" />
  107. </Form.Item>
  108. </div>
  109. ),
  110. },
  111. ];
  112. const handleChange = (key: string, value: any) => {
  113. formModel && setFormModel({
  114. ...formModel,
  115. [key]: value
  116. });
  117. };
  118. const handleOk = () => {
  119. form.validateFields().then((values) => {
  120. if(tableItemRef.current && formModel) {
  121. props.onChange({
  122. ...tableItemRef.current,
  123. table: formModel
  124. })
  125. }
  126. setOpen(false);
  127. });
  128. };
  129. return (
  130. <Modal
  131. open={open}
  132. title="添加表"
  133. okText="确定"
  134. cancelText="取消"
  135. onCancel={() => setOpen(false)}
  136. onOk={handleOk}
  137. >
  138. <Tabs items={items} activeKey={tabActiveKey} onChange={setTabActiveKey} />
  139. </Modal>
  140. );
  141. });