blob: 99a0d1a9a9775aadd1c9caec3f244b5b67eb4fd4 [file] [log] [blame]
86133aaa3f5d2025-04-20 21:33:29 +08001import React, { useEffect, useState } from 'react';
2import BaseInfo from './components/BaseInfo';
3import { Card, Layout, message, Steps } from 'antd';
4import ColumnInfo from './components/ColumnInfo';
5import GenInfo from './components/GenInfo';
6import { getGenCode, updateData } from './service';
7import { formatTreeData } from '@/utils/tree';
8import styles from './style.less';
9import type { GenCodeType } from './data';
10import { getMenuTree } from '@/services/system/menu';
11import { getDictTypeList } from '@/services/system/dict';
12import queryString from 'query-string';
13import { useLocation } from '@umijs/max';
14
15const { Content } = Layout;
16
17export type GenCodeArgs = {
18 id: string;
19};
20
21const TableList: React.FC = () => {
22 const location = useLocation();
23 const query = queryString.parse(location.search);
24 const { id } = query as GenCodeArgs;
25 const tableId = id;
26
27 const [currentStep, setCurrentStep] = useState<number>(0);
28 const [columnData, setColumnData] = useState<any>([]);
29 const [baseInfoData, setBaseInfoData] = useState<any>([]);
30 const [genInfoData, setGenInfoData] = useState<any>([]);
31 const [menuTree, setMenuTree] = useState<any>([]);
32 const [dictData, setDictData] = useState<any>([]);
33 const [tableInfo, setTableInfo] = useState<any>([]);
34 const [formData, setFormData] = useState<any>([]);
35 const [stepComponent, setStepComponent] = useState<any>([]);
36 const [stepKey, setStepKey] = useState<string>('');
37
38 const getCurrentStepAndComponent = (key?: string) => {
39 if (key === 'base') {
40 return (
41 <BaseInfo
42 values={baseInfoData}
43 // eslint-disable-next-line @typescript-eslint/no-use-before-define
44 onStepSubmit={onNextStep}
45 />
46 );
47 }
48 if (key === 'column') {
49 return (
50 <ColumnInfo
51 data={columnData}
52 dictData={dictData}
53 // eslint-disable-next-line @typescript-eslint/no-use-before-define
54 onStepSubmit={onNextStep}
55 />
56 );
57 }
58 if (key === 'gen') {
59 return (
60 <GenInfo
61 values={genInfoData}
62 menuData={menuTree}
63 tableInfo={tableInfo}
64 // eslint-disable-next-line @typescript-eslint/no-use-before-define
65 onStepSubmit={onNextStep}
66 />
67 );
68 }
69 return null;
70 };
71
72 const onNextStep = (step: string, values: any, direction: string) => {
73 let stepKey = 'base';
74 if (step === 'base') {
75 setStepKey('column');
76 setCurrentStep(1);
77 setFormData(values);
78 setStepComponent(getCurrentStepAndComponent(stepKey));
79 } else if (step === 'column') {
80 if (direction === 'prev') {
81 setStepKey('base');
82 setCurrentStep(0);
83 } else {
84 setStepKey('gen');
85 const tableData: GenCodeType = formData || ({} as GenCodeType);
86 tableData.columns = values;
87 setCurrentStep(2);
88 setFormData(tableData);
89 }
90 setStepComponent(getCurrentStepAndComponent(stepKey));
91 } else if (step === 'gen') {
92 if (direction === 'prev') {
93 setStepKey('column');
94 setCurrentStep(1);
95 setStepComponent(getCurrentStepAndComponent(stepKey));
96 } else {
97 const postData: GenCodeType = {
98 ...formData,
99 ...values,
100 params: values,
101 tableId: tableId,
102 };
103 setFormData(postData);
104 updateData({ ...postData } as GenCodeType).then((res) => {
105 if (res.code === 200) {
106 message.success('提交成功');
107 history.back();
108 } else {
109 message.success('提交失败');
110 }
111 });
112 }
113 }
114 };
115 useEffect(() => {
116 setStepComponent(getCurrentStepAndComponent(stepKey));
117 }, [stepKey]);
118
119 useEffect(() => {
120 getGenCode(tableId).then((res) => {
121 if (res.code === 200) {
122 setBaseInfoData(res.data.info);
123 setColumnData(res.data.rows);
124 setGenInfoData(res.data.info);
125 setTableInfo(res.data.tables);
126 setStepKey('base');
127 } else {
128 message.error(res.msg);
129 }
130 });
131 getMenuTree().then((res) => {
132 if (res.code === 200) {
133 const treeData = formatTreeData(res.data);
134 setMenuTree(treeData);
135 } else {
136 message.error(res.msg);
137 }
138 });
139
140 getDictTypeList().then((res: any) => {
141 if (res.code === 200) {
142 const dicts = res.rows.map((item: any) => {
143 return {
144 label: item.dictName,
145 value: item.dictType,
146 };
147 });
148 setDictData(dicts);
149 } else {
150 message.error(res.msg);
151 }
152 });
153 }, []);
154
155 // const onFinish = (values: any) => {
156 // console.log('Success:', values);
157 // };
158
159 // const onFinishFailed = (errorInfo: any) => {
160 // console.log('Failed:', errorInfo);
161 // };
162
163 return (
164 <Content>
165 <Card className={styles.tabsCard} bordered={false}>
166 <Steps current={currentStep} className={styles.steps} items={[
167 {
168 title: '基本信息',
169 },
170 {
171 title: '字段信息',
172 },
173 {
174 title: '生成信息',
175 },
176 ]} />
177 {stepComponent}
178 </Card>
179 </Content>
180 );
181};
182
183export default TableList;