Commit 59cc9afd authored by 王昆's avatar 王昆

get db type from plugins

parent 4e7249e6
import { Modal, Notification, Select, Tabs, Spin } from '@arco-design/web-react'; import { Modal, Notification, Select, Tabs, Spin } from '@arco-design/web-react';
import { Parser } from '@dbml/core'; import { Parser } from '@dbml/core';
import { useRef, useState } from 'react'; import { useCallback, useRef, useState } from 'react';
import { nanoid } from 'nanoid'; import { nanoid } from 'nanoid';
import Editor from '@monaco-editor/react'; import Editor from '@monaco-editor/react';
import graphState from '../hooks/use-graph-state'; import graphState from '../hooks/use-graph-state';
...@@ -434,54 +434,65 @@ export default function ImportModal({ showModal, onCloseModal, cb = _p => { }, t ...@@ -434,54 +434,65 @@ export default function ImportModal({ showModal, onCloseModal, cb = _p => { }, t
const [dbList, setDbList] = useState([]); const [dbList, setDbList] = useState([]);
const searchParams = useSearchParams(); const searchParams = useSearchParams();
const applicationId = searchParams.get('applicationId'); const applicationId = searchParams.get('applicationId');
const organizationId = searchParams.get('organizationId');
useEffect(() => { const fetchDatasources = useCallback(async (applicationId, organizationId) => {
if (type === 5 && applicationId) { try {
setLoading(true); // 开始加载时显示loading const [response, pluginsResponse] = await Promise.all([fetch(`/ziwei/api/v1/datasources?applicationId=${applicationId}`, {
fetch(`/ziwei/api/v1/datasources?applicationId=${applicationId}`, {
method: "GET", method: "GET",
credentials: "include", credentials: "include",
}).finally(() => { }), fetch(`/ziwei/api/v1/plugins?organizationId==${organizationId}`, {
setLoading(false); // 请求完成后隐藏loading method: "GET",
}) credentials: "include",
.then(res => res.json()) })]);
.then(async data => { const data = await response.json();
if (data?.data && Array.isArray(data?.data)) { const plugins = await pluginsResponse.json();
const formattedData = await Promise.all(data.data.map(async item => { const pluginsMap = _.keyBy(plugins?.data, 'id');
// 从 datasourceConfiguration 中获取连接信息
const endpoint = item.datasourceConfiguration?.endpoints?.[0] || {};
// 获取认证信息,包含加密的密钥
const auth = item.datasourceConfiguration?.authentication || {};
// 如果存在加密密钥,需要进行解密
if (auth.privateKey && auth.encryptedAesKey) {
try {
// 解密密码
auth.password = await decryptMessage(auth.privateKey, auth.encryptedAesKey)
} catch (error) {
console.error('Failed to decrypt keys:', error);
Message.error(t('Failed to decrypt database credentials'));
}
}
return { if (data?.data && Array.isArray(data?.data)) {
host: endpoint.host || '127.0.0.1', return await Promise.all(data.data.map(async item => {
port: endpoint.port || 3306, const endpoint = item.datasourceConfiguration?.endpoints?.[0] || {};
user: auth.username || 'root', const auth = item.datasourceConfiguration?.authentication || {};
password: auth.password || '', if (auth.privateKey && auth.encryptedAesKey) {
database: auth.databaseName || '', try {
name: item.name || '', auth.password = await decryptMessage(auth.privateKey, auth.encryptedAesKey);
client: item.dbType === 1 ? 'oracle' : 'mysql2' // 根据 dbType 判断数据库类型 } catch (error) {
}; console.error('Failed to decrypt keys:', error);
})); Message.error(t('Failed to decrypt database credentials'));
setDbList(formattedData);
if (formattedData.length > 0) {
form.setFieldsValue(formattedData[0]);
} }
} }
return {
host: endpoint.host || '127.0.0.1',
port: endpoint.port || 3306,
user: auth.username || 'root',
password: auth.password || '',
database: auth.databaseName || '',
name: item.name || '',
client: pluginsMap[item.pluginId]?.name === 'Oracle' ? 'oracle' : 'mysql2'
};
}));
}
return [];
} catch (error) {
console.error('Error fetching datasources:', error);
Message.error(t('Failed to fetch datasources'));
return [];
}
}, [t])
useEffect(() => {
if (type === 5 && applicationId) {
setLoading(true);
fetchDatasources(applicationId, organizationId)
.then(formattedData => {
setDbList(formattedData);
if (formattedData.length > 0) {
form.setFieldsValue(formattedData[0]);
}
}) })
.catch(error => { .finally(() => {
console.error('Error fetching datasources:', error); setLoading(false);
Message.error(t('Failed to fetch datasources'));
}); });
} }
}, [type, applicationId]); }, [type, applicationId]);
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment