Skip to content

Commit bc9e342

Browse files
committed
fix:some bug
1 parent 432f9ff commit bc9e342

7 files changed

Lines changed: 80 additions & 95 deletions

File tree

chat2db-client/src/blocks/SQLExecute/index.less

Lines changed: 0 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -41,12 +41,3 @@
4141
}
4242
}
4343
}
44-
45-
.noData {
46-
height: 100%;
47-
display: flex;
48-
flex-direction: column;
49-
justify-content: center;
50-
align-items: center;
51-
font-size: 12px;
52-
}

chat2db-client/src/blocks/SQLExecute/index.tsx

Lines changed: 6 additions & 46 deletions
Original file line numberDiff line numberDiff line change
@@ -15,7 +15,6 @@ import { v4 as uuidV4 } from 'uuid';
1515
import { Spin } from 'antd';
1616
import { useUpdateEffect } from '@/hooks/useUpdateEffect';
1717
import i18n from '@/i18n';
18-
import EmptyImg from '@/assets/img/empty.svg';
1918
interface IProps {
2019
className?: string;
2120
isActive: boolean;
@@ -45,7 +44,6 @@ const SQLExecute = memo<IProps>((props) => {
4544
const draggableRef = useRef<any>();
4645
const [appendValue, setAppendValue] = useState<IAppendValue>();
4746
const [resultData, setResultData] = useState<IManageResultData[]>([]);
48-
const [resultConfig, setResultConfig] = useState<IResultConfig[]>([]);
4947
const { doubleClickTreeNodeData, curTableList, curWorkspaceParams } = workspaceModel;
5048
const [tableLoading, setTableLoading] = useState(false);
5149
const controllerRef = useRef<AbortController>();
@@ -71,13 +69,16 @@ const SQLExecute = memo<IProps>((props) => {
7169
setAppendValue({ text: data.initDDL });
7270
}, [data.initDDL]);
7371

72+
useEffect(() => {
73+
console.log(resultData);
74+
}, [resultData]);
75+
7476
/**
7577
* 执行SQL
7678
* @param sql
7779
*/
7880
const handleExecuteSQL = async (sql: string) => {
7981
setTableLoading(true);
80-
setResultData([]);
8182

8283
const executeSQLParams: IExecuteSqlParams = {
8384
sql,
@@ -96,18 +97,6 @@ const SQLExecute = memo<IProps>((props) => {
9697
uuid: uuidV4(),
9798
}));
9899

99-
// 获取当前SQL的总条数
100-
// let reqDMLCountPromiseArr: Array<Promise<any>> = [];
101-
// (sqlResult || []).forEach((res) => {
102-
// const { originalSql } = res;
103-
// let p = sqlServer.getDMLCount({ ...executeSQLParams, sql: originalSql });
104-
// reqDMLCountPromiseArr.push(p);
105-
// });
106-
// let reqDMLCountArr = await Promise.all(reqDMLCountPromiseArr);
107-
108-
setResultConfig(
109-
sqlResult.map((res) => ({ ...defaultResultConfig, total: res.fuzzyTotal, hasNextPage: res.hasNextPage })),
110-
);
111100
setResultData(sqlResult);
112101
setTableLoading(false);
113102

@@ -119,39 +108,12 @@ const SQLExecute = memo<IProps>((props) => {
119108
historyServer.createHistory(createHistoryParams);
120109
};
121110

122-
/**
123-
* 因为 pageNo、pageSize等信息导致的
124-
* 单条SQL执行
125-
*/
126-
// const handleExecuteSQLbyConfigChanged = async (sql: string, config: IResultConfig, index: number) => {
127-
// setTableLoading(true);
128-
// const param = { ...data, ...config, sql };
129-
// const sqlResult = await sqlServer.executeSql(param);
130-
// resultData[index] = { ...resultData[index], ...sqlResult[0] };
131-
// setResultData([...resultData]);
132-
// resultConfig[index] = {
133-
// ...config,
134-
// total: isNumber(resultConfig[index].total) ? resultConfig[index].total : sqlResult[0].fuzzyTotal,
135-
// hasNextPage: sqlResult[0].hasNextPage,
136-
// };
137-
// setResultConfig([...resultConfig]);
138-
// setTableLoading(false);
139-
// };
140-
141111
const stopExecuteSql = () => {
142112
controllerRef.current && controllerRef.current.abort();
113+
setResultData([]);
143114
setTableLoading(false);
144115
};
145116

146-
const renderEmpty = () => {
147-
return (
148-
<div className={styles.noData}>
149-
<img src={EmptyImg} />
150-
<p>{i18n('common.text.noData')}</p>
151-
</div>
152-
);
153-
};
154-
155117
return (
156118
<div className={classnames(styles.box)}>
157119
<DraggableContainer layout="column" className={styles.boxRightCenter}>
@@ -193,10 +155,8 @@ const SQLExecute = memo<IProps>((props) => {
193155
{i18n('common.button.cancelRequest')}
194156
</div>
195157
</div>
196-
) : resultData?.length ? (
197-
<SearchResult executeSqlParams={data} queryResultDataList={resultData} />
198158
) : (
199-
renderEmpty()
159+
<SearchResult executeSqlParams={data} queryResultDataList={resultData} />
200160
)}
201161
</div>
202162
</DraggableContainer>

chat2db-client/src/components/ExecuteSQL/index.tsx

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -19,6 +19,7 @@ interface IProps {
1919
schemaName: string | undefined;
2020
tableName?: string;
2121
executeSuccessCallBack: () => void;
22+
executeSqlApi?: 'executeUpdateDataSql';
2223
}
2324

2425
export default memo<IProps>((props) => {
@@ -31,6 +32,7 @@ export default memo<IProps>((props) => {
3132
dataSourceId,
3233
schemaName,
3334
tableName,
35+
executeSqlApi = 'executeDDL',
3436
executeSuccessCallBack,
3537
} = props;
3638
const monacoEditorRef = useRef<IExportRefFunction>(null);
@@ -59,8 +61,7 @@ export default memo<IProps>((props) => {
5961
tableName,
6062
};
6163
setExecuteLoading(true);
62-
sqlService
63-
.executeDDL(executeSQLParams)
64+
sqlService[executeSqlApi](executeSQLParams)
6465
.then((res) => {
6566
if (res.success) {
6667
executeSuccessCallBack?.();

chat2db-client/src/components/SearchResult/TableBox/index.tsx

Lines changed: 24 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -96,6 +96,8 @@ export default function TableBox(props: ITableProps) {
9696
const [viewUpdateDataSqlModal, setViewUpdateDataSqlModal] = useState<boolean>(false);
9797
// 用于滚动到底部
9898
const tableBoxRef = React.useRef<HTMLDivElement>(null);
99+
// 所有数据准备好了
100+
const [allDataReady, setAllDataReady] = useState<boolean>(false);
99101

100102
const handleExportSQLResult = async (exportType: ExportTypeEnum, exportSize: ExportSizeEnum) => {
101103
const params: IExportParams = {
@@ -124,6 +126,7 @@ export default function TableBox(props: ITableProps) {
124126
const newTableData = dataListTransformTableData(queryResultData.dataList);
125127
setTableData(newTableData);
126128
setOldTableData(newTableData);
129+
setAllDataReady(true);
127130
}
128131
// 每次data变化,都需要重新计算oldDataList
129132
if (queryResultData.dataList?.length) {
@@ -398,7 +401,7 @@ export default function TableBox(props: ITableProps) {
398401

399402
const onClickTotalBtn = async () => {
400403
return sqlService.getDMLCount({
401-
sql: queryResultData.originalSql,
404+
sql: queryResultData.sql,
402405
...(props.executeSqlParams || {}),
403406
});
404407
};
@@ -548,7 +551,7 @@ export default function TableBox(props: ITableProps) {
548551
setUpdateData([]);
549552
});
550553
} else {
551-
setUpdateDataSql(res.originalSql);
554+
setUpdateDataSql(res.sql);
552555
setViewUpdateDataSqlModal(true);
553556
setInitError(res.message);
554557
}
@@ -717,22 +720,24 @@ export default function TableBox(props: ITableProps) {
717720
</Dropdown>
718721
</div>
719722
</div>
720-
<SupportBaseTable
721-
className={classnames('supportBaseTable', props.className, styles.table)}
722-
components={{ EmptyContent: () => <h2>{i18n('common.text.noData')}</h2> }}
723-
isStickyHead
724-
stickyTop={31}
725-
getRowProps={(record) => {
726-
const rowNo = record[`${preCode}0No.`];
727-
return {
728-
style: tableRowStyle(rowNo),
729-
onClick() {
730-
setCurOperationRowNo(rowNo);
731-
},
732-
};
733-
}}
734-
{...pipeline.getProps()}
735-
/>
723+
{allDataReady && (
724+
<SupportBaseTable
725+
className={classnames('supportBaseTable', props.className, styles.table)}
726+
components={{ EmptyContent: () => <h2>{i18n('common.text.noData')}</h2> }}
727+
isStickyHead
728+
stickyTop={31}
729+
getRowProps={(record) => {
730+
const rowNo = record[`${preCode}0No.`];
731+
return {
732+
style: tableRowStyle(rowNo),
733+
onClick() {
734+
setCurOperationRowNo(rowNo);
735+
},
736+
};
737+
}}
738+
{...pipeline.getProps()}
739+
/>
740+
)}
736741
{bottomStatus}
737742
</>
738743
);
@@ -794,6 +799,7 @@ export default function TableBox(props: ITableProps) {
794799
schemaName={props.executeSqlParams?.schemaName}
795800
databaseType={props.executeSqlParams?.databaseType}
796801
executeSuccessCallBack={executeSuccessCallBack}
802+
executeSqlApi="executeUpdateDataSql"
797803
/>
798804
</Modal>
799805
{contextHolder}

chat2db-client/src/components/SearchResult/index.less

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -47,3 +47,12 @@
4747
align-items: center;
4848
justify-content: center;
4949
}
50+
51+
.noData {
52+
height: 100%;
53+
display: flex;
54+
flex-direction: column;
55+
justify-content: center;
56+
align-items: center;
57+
font-size: 12px;
58+
}

chat2db-client/src/components/SearchResult/index.tsx

Lines changed: 36 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -1,11 +1,14 @@
1-
import React, { memo, useCallback, useEffect, useMemo, useState } from 'react';
1+
import React, { memo, useCallback, useMemo, useState } from 'react';
22
import classnames from 'classnames';
33
import TabsNew from '@/components/TabsNew';
44
import Iconfont from '@/components/Iconfont';
55
import StateIndicator from '@/components/StateIndicator';
66
import { IManageResultData } from '@/typings';
77
import TableBox from './TableBox';
88
import styles from './index.less';
9+
import EmptyImg from '@/assets/img/empty.svg';
10+
import i18n from '@/i18n';
11+
import { useUpdateEffect } from '@/hooks/useUpdateEffect';
912

1013
interface IProps {
1114
className?: string;
@@ -16,17 +19,17 @@ interface IProps {
1619
export default memo<IProps>((props) => {
1720
const { className, queryResultDataList = [] } = props;
1821
const [currentTab, setCurrentTab] = useState<string | number | undefined>();
19-
const [resultDataList, setResultDataList] = useState<IManageResultData[]>([]);
22+
const [resultDataList, setResultDataList] = useState<IManageResultData[]>(queryResultDataList);
2023

21-
useEffect(() => {
24+
useUpdateEffect(() => {
2225
if (!queryResultDataList.length) {
2326
return;
2427
}
2528

2629
if (!currentTab || !queryResultDataList.find((d) => d.uuid === currentTab)) {
2730
setCurrentTab(queryResultDataList[0].uuid);
2831
}
29-
32+
console.log([...queryResultDataList]);
3033
setResultDataList([...queryResultDataList]);
3134
}, [queryResultDataList]);
3235

@@ -66,29 +69,44 @@ export default memo<IProps>((props) => {
6669
});
6770
}, [resultDataList]);
6871

69-
const outputTab = useMemo(() => {
70-
return {
71-
prefixIcon: (
72-
<Iconfont key="output" className={classnames(styles['successIcon'], styles.statusIcon)} code={'\ue605'} />
73-
),
74-
popover: 'output',
75-
label: 'output',
76-
key: 'output',
77-
children: <div>output</div>,
78-
};
79-
}, []);
72+
const onEdit = useCallback(
73+
(type: 'add' | 'remove', value) => {
74+
if (type === 'remove') {
75+
const newResultDataList = resultDataList.filter((d) => d.uuid !== value.key);
76+
setResultDataList(newResultDataList);
77+
}
78+
},
79+
[resultDataList],
80+
);
81+
82+
// const outputTab = useMemo(() => {
83+
// return {
84+
// prefixIcon: (
85+
// <Iconfont key="output" className={classnames(styles['successIcon'], styles.statusIcon)} code={'\ue605'} />
86+
// ),
87+
// popover: 'output',
88+
// label: 'output',
89+
// key: 'output',
90+
// children: <div>output</div>,
91+
// };
92+
// }, []);
8093

8194
return (
8295
<div className={classnames(className, styles.searchResult)}>
83-
{!!tabsList.length && (
96+
{tabsList.length ? (
8497
<TabsNew
8598
hideAdd
8699
className={styles.tabs}
87100
onChange={onChange as any}
88101
activeKey={currentTab}
89-
// items={[outputTab, ...tabsList]}
90-
items={[...tabsList]}
102+
onEdit={onEdit as any}
103+
items={tabsList}
91104
/>
105+
) : (
106+
<div className={styles.noData}>
107+
<img src={EmptyImg} />
108+
<p>{i18n('common.text.noData')}</p>
109+
</div>
92110
)}
93111
</div>
94112
);

chat2db-client/src/service/sql.ts

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -214,15 +214,15 @@ const getModifyTableSql = createRequest<IModifyTableSqlParams, { sql: string }[]
214214
const executeDDL = createRequest<IExecuteSqlParams, { success: boolean, message: string, originalSql: string }>('/api/rdb/dml/execute_ddl', { method: 'post' });
215215

216216
// 执行修改表数据的sql
217-
const executeUpdateDataSql = createRequest<IExecuteSqlParams, { success: boolean, message: string, originalSql:string }>('/api/rdb/dml/execute_update', { method: 'post' });
217+
const executeUpdateDataSql = createRequest<IExecuteSqlParams, { success: boolean, message: string, sql:string }>('/api/rdb/dml/execute_update', { method: 'post' });
218218

219219
/** 获取修改表数据的接口 */
220220
const getExecuteUpdateSql = createRequest<any, string>('/api/rdb/dml/get_update_sql', { method: 'post' });
221221

222222
export default {
223223
executeUpdateDataSql,
224-
getExecuteUpdateSql,
225224
executeDDL,
225+
getExecuteUpdateSql,
226226
getModifyTableSql,
227227
getTableDetails,
228228
getDatabaseFieldTypeList,

0 commit comments

Comments
 (0)