Skip to content

Commit ff06c31

Browse files
committed
refactor-workspace
1 parent d02abb4 commit ff06c31

11 files changed

Lines changed: 156 additions & 103 deletions

File tree

chat2db-client/src/blocks/Tree/TreeNodeRightClick/index.less

Lines changed: 0 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -1,20 +1,5 @@
11
@import '../../../styles/var.less';
22

3-
.operationItem {
4-
display: flex;
5-
align-items: center;
6-
7-
.operationTitle {
8-
margin-left: 14px;
9-
}
10-
11-
:global {
12-
.ant-dropdown {
13-
z-index: 1080;
14-
}
15-
}
16-
}
17-
183
.monacoEditorBox {
194
margin-top: -15px;
205
height: 60vh;

chat2db-client/src/blocks/Tree/TreeNodeRightClick/index.tsx

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -49,7 +49,6 @@ function TreeNodeRightClick(props: IProps) {
4949
const dataSourceFormConfig = dataSourceFormConfigs.find((t: IConnectionConfig) => {
5050
return t.type === data.extraParams?.databaseType;
5151
})!;
52-
5352
const monacoEditorRef = useRef<IExportRefFunction>(null);
5453

5554
const operationColumnConfig: { [key in OperationColumn]: (data: ITreeNode) => IOperationColumnConfigItem } = {

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

Lines changed: 14 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -9,7 +9,7 @@ import { treeConfig, switchIcon, ITreeConfigItem } from './treeConfig';
99
import { useCommonStore } from '@/store/common';
1010
import LoadingGracile from '@/components/Loading/LoadingGracile';
1111
import { setFocusId, useTreeStore } from './treeStore';
12-
import { screenOutMenu } from './screenOutMenu';
12+
import { getRightClickMenu } from './rightClickMenu';
1313
import MenuLabel from '@/components/MenuLabel';
1414

1515
interface IProps {
@@ -49,7 +49,7 @@ const TreeNode = memo((props: TreeNodeIProps) => {
4949
const isFocus = useTreeStore((state) => state.focusId) === treeNodeData.key;
5050

5151
// 加载数据
52-
function loadData() {
52+
function loadData(_props?: { refresh: boolean }) {
5353
const treeNodeConfig: ITreeConfigItem = treeConfig[treeNodeData.pretendNodeType || treeNodeData.treeNodeType];
5454
setIsLoading(true);
5555
setTreeNodeData({
@@ -62,6 +62,7 @@ const TreeNode = memo((props: TreeNodeIProps) => {
6262
extraParams: {
6363
...treeNodeData.extraParams,
6464
},
65+
refresh: _props?.refresh || false,
6566
})
6667
.then((res) => {
6768
if (res.length) {
@@ -138,7 +139,7 @@ const TreeNode = memo((props: TreeNodeIProps) => {
138139
// 点击节点
139140
const handelClickTreeNode = () => {
140141
useCommonStore.setState({
141-
focusedContent: (treeNodeData.key || '') as any,
142+
focusedContent: (treeNodeData.name || '') as any,
142143
});
143144
setFocusId(treeNodeData.key || '');
144145
};
@@ -151,17 +152,19 @@ const TreeNode = memo((props: TreeNodeIProps) => {
151152
}, [treeNodeData]);
152153

153154
const treeNodeDom = useMemo(() => {
154-
// const { dropdowns } = useTreeNodeRightClick({ data: treeNodeData });
155+
const dropdownsItems = getRightClickMenu({ treeNodeData, loadData }).map((item) => {
156+
return {
157+
...item,
158+
label: <MenuLabel {...item.labelProps} />,
159+
};
160+
});
161+
155162
return (
156163
<Dropdown
157164
trigger={['contextMenu']}
158165
menu={{
159-
items: screenOutMenu({treeNodeData,loadData}).map((item) => {
160-
return {
161-
...item,
162-
label: <MenuLabel {...item.labelProps} />,
163-
};
164-
}),
166+
items: dropdownsItems || [],
167+
style: dropdownsItems ? {} : { display: 'none' }, // 有菜单项才显示
165168
}}
166169
overlayStyle={{
167170
zIndex: 1080,
@@ -171,6 +174,7 @@ const TreeNode = memo((props: TreeNodeIProps) => {
171174
<div
172175
className={classnames(styles.treeNode, { [styles.treeNodeFocus]: isFocus })}
173176
onClick={handelClickTreeNode}
177+
onContextMenu={handelClickTreeNode}
174178
data-chat2db-general-can-copy-element
175179
>
176180
<div className={styles.left}>
Lines changed: 136 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,136 @@
1+
import { ITreeNode } from '@/typings';
2+
import { OperationColumn } from '@/constants';
3+
import i18n from '@/i18n';
4+
5+
// ----- components -----
6+
import { dataSourceFormConfigs } from '@/components/ConnectionEdit/config/dataSource';
7+
import { IConnectionConfig } from '@/components/ConnectionEdit/config/types';
8+
9+
// ----- config -----
10+
import { ITreeConfigItem, treeConfig } from './treeConfig';
11+
12+
// 所有的方法
13+
// import { refreshTreeNode } from './functions/refresh'
14+
15+
interface IProps {
16+
treeNodeData: ITreeNode;
17+
loadData: any;
18+
}
19+
20+
interface IOperationColumnConfigItem {
21+
text: string;
22+
icon: string;
23+
handle: () => void;
24+
}
25+
26+
export const getRightClickMenu = (props: IProps) => {
27+
const { treeNodeData, loadData } = props;
28+
29+
// 拿出当前节点的配置
30+
const treeNodeConfig: ITreeConfigItem = treeConfig[treeNodeData.treeNodeType];
31+
const { operationColumn } = treeNodeConfig;
32+
33+
const dataSourceFormConfig = dataSourceFormConfigs.find((t: IConnectionConfig) => {
34+
return t.type === treeNodeData.extraParams?.databaseType;
35+
})!;
36+
37+
const operationColumnConfig: { [key in string]: IOperationColumnConfigItem } = {
38+
// 刷新
39+
[OperationColumn.Refresh]: {
40+
text: i18n('common.button.refresh'),
41+
icon: '\uec08',
42+
handle: () =>{
43+
loadData({
44+
refresh: true
45+
})
46+
}
47+
},
48+
// 创建表
49+
[OperationColumn.CreateTable]: {
50+
text: i18n('editTable.button.createTable'),
51+
icon: '\ue792',
52+
handle: () => {
53+
console.log('创建表');
54+
// const operationData = {
55+
// type: 'new',
56+
// nodeData: _data,
57+
// };
58+
// setOperationDataDialog(operationData)
59+
},
60+
},
61+
// 创建console
62+
[OperationColumn.CreateConsole]: {
63+
text: i18n('workspace.menu.queryConsole'),
64+
icon: '\ue619',
65+
handle: () => {
66+
console.log('创建console');
67+
},
68+
},
69+
// 删除表
70+
[OperationColumn.DeleteTable]: {
71+
text: i18n('workspace.menu.deleteTable'),
72+
icon: '\ue6a7',
73+
handle: () => {
74+
// setVerifyDialog(true);
75+
},
76+
},
77+
// 查看ddl
78+
[OperationColumn.ViewDDL]: {
79+
text: i18n('workspace.menu.ViewDDL'),
80+
icon: '\ue665',
81+
handle: () => {
82+
//
83+
},
84+
},
85+
// 置顶
86+
[OperationColumn.Top]: {
87+
text: treeNodeData.pinned ? i18n('workspace.menu.unPin') : i18n('workspace.menu.pin'),
88+
icon: treeNodeData.pinned ? '\ue61d' : '\ue627',
89+
handle: () => {},
90+
},
91+
// 编辑表
92+
[OperationColumn.EditTable]: {
93+
text: i18n('workspace.menu.editTable'),
94+
icon: '\ue602',
95+
handle: () => {},
96+
},
97+
// 复制名称
98+
[OperationColumn.CopyName]: {
99+
text: i18n('common.button.copyName'),
100+
icon: '\uec7a',
101+
handle: () => {
102+
navigator.clipboard.writeText(treeNodeData.name);
103+
},
104+
},
105+
};
106+
107+
// 有些数据库不支持的操作,需要排除掉
108+
function excludeSomeOperation() {
109+
const excludes = dataSourceFormConfig.baseInfo.excludes;
110+
const newOperationColumn: OperationColumn[] = [];
111+
operationColumn?.map((item: OperationColumn) => {
112+
let flag = false;
113+
excludes?.map((t) => {
114+
if (item === t) {
115+
flag = true;
116+
}
117+
});
118+
if (!flag) {
119+
newOperationColumn.push(item);
120+
}
121+
});
122+
return newOperationColumn;
123+
}
124+
125+
return excludeSomeOperation().map((t, i) => {
126+
const concrete = operationColumnConfig[t];
127+
return {
128+
key: i,
129+
onClick: concrete?.handle,
130+
labelProps: {
131+
icon: concrete?.icon,
132+
label: concrete?.text,
133+
},
134+
};
135+
});
136+
};

chat2db-client/src/blocks/Tree/screenOutMenu.ts

Lines changed: 0 additions & 75 deletions
This file was deleted.

chat2db-client/src/blocks/Tree/treeConfig.tsx

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -182,7 +182,7 @@ export const treeConfig: { [key in TreeNodeType]: ITreeConfigItem } = {
182182
});
183183
});
184184
},
185-
operationColumn: [OperationColumn.CreateConsole, OperationColumn.CreateTable, OperationColumn.Refresh],
185+
operationColumn: [OperationColumn.CreateConsole, OperationColumn.CopyName, OperationColumn.Refresh,],
186186
next: TreeNodeType.SCHEMAS,
187187
},
188188

chat2db-client/src/constants/tree.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -30,7 +30,7 @@ export enum OperationColumn {
3030
CreateTable = 'createTable', //创建表
3131
CreateConsole = 'createConsole', // 新建console
3232
DeleteTable = 'deleteTable', // 删除表
33-
ViewDDL = 'viewDDL', // 导出ddl
33+
ViewDDL = 'viewDDL', // 查看ddl
3434
EditSource = 'editSource', // 编辑数据源
3535
Top = 'top', // 置顶
3636
EditTable = 'editTable', // 编辑表

chat2db-client/src/i18n/en-us/common.ts

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -45,6 +45,7 @@ export default {
4545
'common.text.table': 'Table',
4646
'common.tips.saveSuccessfully': 'Save Successfully',
4747
'common.button.copy': 'Copy',
48+
'common.button.copyName': 'Copy name',
4849
'common.button.copySuccessfully': 'Copy Successfully',
4950
'common.button.createConsole': 'Create Console',
5051
'common.button.exportWord': 'Export to Word',

chat2db-client/src/i18n/en-us/workspace.ts

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -9,6 +9,7 @@ export default {
99
'workspace.menu.pin': 'Pin',
1010
'workspace.menu.unPin': 'Unpin',
1111
'workspace.menu.editTableData': 'Edit Table Data',
12+
'workspace.menu.queryConsole': 'Query console',
1213
'workspace.menu.deleteTablePlaceHolder': 'Please enter the name of the table you want to delete',
1314
'workspace.tips.affirmDeleteTable':
1415
'The table name you entered is not the same as the table name you want to delete, please confirm again',

chat2db-client/src/i18n/zh-cn/common.ts

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -45,6 +45,7 @@ export default {
4545
'common.text.table': '表',
4646
'common.tips.saveSuccessfully': '保存成功',
4747
'common.button.copy': '复制',
48+
'common.button.copyName': '复制名称',
4849
'common.button.copySuccessfully': '复制成功',
4950
'common.button.createConsole': '新建控制台',
5051
'common.button.exportWord': '导出到Word',

0 commit comments

Comments
 (0)