Commit 2aae7b09 authored by Maofei94's avatar Maofei94

fix: 数据库管理

parent 6f3aa35e
......@@ -50,17 +50,13 @@ const CurrentSolution = () => {
notification.error({
message: '提示',
description: res.message || '切换失败',
duration: 10,
duration: 15,
});
}
})
.catch(err => {
setLoading(false);
notification.error({
message: '提示',
description: err,
duration: 3,
});
console.error(err);
});
};
return (
......
......@@ -3,12 +3,13 @@
align-items: center;
}
.cardbox{
min-height: 200px;
min-height: 100px;
}
.btnBox{
margin-top: 40px;
display: flex;
justify-content: center;
align-items: center;
}
.tAlign{
text-align: center;
......
......@@ -16,12 +16,18 @@ import {
} from 'antd';
import { PageContainer } from '@ant-design/pro-layout';
import { connect } from 'react-redux';
import { get, post } from '../../services';
import {
setTableSQLDirName,
deleteConn,
initDBv4,
getInitDBLog,
getConnRecord,
getDataBaseConfig,
saveConnection,
getConnectionTest,
getDataBaseList,
updateConnDesc,
deleteInitDBLog,
connectionTest,
} from '@/services/database/api';
import styles from './InitDataBase.less';
......@@ -52,14 +58,15 @@ const InitDataBase = props => {
const [modalVisible, setModalVisible] = useState(false); // 修改秒速弹窗
const [initVisible, setInitVisible] = useState(false); // 数据库初始化弹窗
const [initContent, setInitContent] = useState(''); // 数据库初始化内容
const [initLoading, setInitLoading] = useState(false);
const [cardLoading, setCardLoading] = useState(false); // 初始化card Loading
const [finish, setFinish] = useState(false);
// 获取数据库链接记录
useEffect(() => {
setTableLoading(true);
get(`/Cityinterface/rest/services/OMS.svc/S_GetConnRecord`, {
getConnRecord({
_version: 9999,
dc: 1603334559186,
dc: Date.now(),
})
.then(res => {
setTableLoading(false);
......@@ -79,9 +86,9 @@ const InitDataBase = props => {
// 获取数据库配置信息
useEffect(() => {
setCardLoading(true);
get(`/Cityinterface/rest/services/OMS.svc/S_GetDataBaseConfig`, {
getDataBaseConfig({
_version: 9999,
dc: 1603334559186,
dc: Date.now(),
})
.then(res => {
setCardLoading(false);
......@@ -101,38 +108,58 @@ const InitDataBase = props => {
console.error(err);
});
}, []);
// 获取日志
const doInitLog = () => {
getInitDBLog({
_version: 9999,
_dc: Date.now(),
})
.then(res => {
if (res.success) {
let arr = [];
arr.push(
res.content
.split(/(\r\n)|(\n)/)
.map((item, index) => <p key={index}>{item}</p>),
);
setInitContent(arr);
}
})
.catch(err => {
setFinish(true);
});
};
// 数据库初始化
const initClick = () => {
setInitLoading(true);
setInitContent('');
setCardLoading(true);
setInitVisible(true);
let obj = form.getFieldsValue();
doInitLog();
for (let i = 0; i < 9; i++) {
setTimeout(() => {
doInitLog();
}, 100);
}
initDBv4({
_version: 9999,
_dc: Date.now(),
...obj,
})
.then(res => {
setInitLoading(false);
setCardLoading(false);
if (res.GetMe) {
getInitDBLog({
_version: 9999,
_dc: Date.now(),
}).then(res => {
if (res.success) {
setInitVisible(true);
setInitContent(res.content);
}
console.log(res.content.split(/[(\r\n)\r\n]+/));
});
console.log(res);
} else {
notification.error({
message: '提示',
duration: 3,
duration: 15,
description: res.Say.Message || '初始化失败',
});
}
})
.catch(err => {
setInitLoading(false);
setCardLoading(false);
console.log(err);
});
};
......@@ -150,7 +177,7 @@ const InitDataBase = props => {
const onFinish = values => {
setCardLoading(true);
const obj = values;
get('/Cityinterface/rest/services/OMS.svc/S_SaveConnection', {
saveConnection({
_version: 9999,
_dc: new Date().getTime(),
ip: obj.ip,
......@@ -170,7 +197,7 @@ const InitDataBase = props => {
} else {
notification.error({
message: '提示',
duration: 3,
duration: 15,
description: res.Say.Message || '保存失败',
});
}
......@@ -185,7 +212,7 @@ const InitDataBase = props => {
console.log(dbForm);
setCardLoading(true);
const obj = form.getFieldsValue();
get('/Cityinterface/rest/services/OMS.svc/S_GetConnectionTest', {
getConnectionTest({
_version: 9999,
_dc: new Date().getTime(),
ip: obj.ip,
......@@ -204,7 +231,7 @@ const InitDataBase = props => {
} else {
notification.error({
message: '提示',
duration: 3,
duration: 15,
description: res.Say.Message || '连接失败',
});
}
......@@ -212,19 +239,15 @@ const InitDataBase = props => {
.catch(err => {
setCardLoading(false);
console.log(err);
notification.error({
message: '提示',
duration: 3,
description: err || '连接失败',
});
});
};
// 获取数据库列表
const selectFocus = e => {
setOption([]);
let params = form.getFieldsValue();
get(`/Cityinterface/rest/services/OMS.svc/S_GetDataBaseList`, {
getDataBaseList({
_version: 9999,
_dc: 1603334559186,
_dc: Date.now(),
userName: params.userName || '',
password: params.password || '',
ip: params.ip || '',
......@@ -235,12 +258,11 @@ const InitDataBase = props => {
} else {
notification.error({
message: '通知',
duration: 3,
duration: 15,
description: res.message,
});
setOption([]);
}
console.log(res);
})
.catch(err => {
console.error(err);
......@@ -272,7 +294,7 @@ const InitDataBase = props => {
} else {
notification.error({
message: '提示',
duration: 3,
duration: 15,
description: res.message,
});
}
......@@ -283,7 +305,6 @@ const InitDataBase = props => {
};
// 展示修改描述
const changeDesc = val => {
console.log(val);
setDesc(val);
setModalVisible(true);
};
......@@ -291,12 +312,22 @@ const InitDataBase = props => {
const { value } = e.target;
setDesc(value);
};
// 关闭弹窗
const handleClick = () => {
setInitVisible(false);
setInitContent('');
setFinish(false);
deleteInitDBLog({
_version: 9999,
_dc: Date.now(),
});
};
// 弹窗确认回调
const modalOkCallback = () => {
console.log(form.getFieldsValue());
const obj = form.getFieldsValue();
// 更新描述
get('/Cityinterface/rest/services/OMS.svc/S_UpdateConnDesc', {
updateConnDesc({
_version: 9999,
_dc: new Date().getTime(),
ip: obj.ip,
......@@ -336,7 +367,7 @@ const InitDataBase = props => {
} else {
notification.error({
message: '提示',
duration: 3,
duration: 15,
description: res.message,
});
}
......@@ -351,31 +382,42 @@ const InitDataBase = props => {
title: '服务器名或IP地址',
dataIndex: 'ip',
key: 'ip',
width: 180,
ellipsis: true,
},
{
title: '数据库名称',
dataIndex: 'dbName',
key: 'dbName',
width: 180,
ellipsis: true,
},
{
title: '数据库用户名称',
dataIndex: 'userName',
key: 'userName',
width: 180,
ellipsis: true,
},
{
title: '保存时间',
dataIndex: 'saveTime',
key: 'saveTime',
width: 180,
ellipsis: true,
},
{
title: '描述',
dataIndex: 'desc',
key: 'desc',
ellipsis: true,
},
{
title: '操作',
dataIndex: 'action',
key: 'action',
width: 250,
ellipsis: true,
render: (text, record) => (
<Space>
<Button
......@@ -481,9 +523,7 @@ const InitDataBase = props => {
initClick();
}}
>
<Button type="primary" loading={initLoading}>
数据库初始化
</Button>
<Button type="primary">数据库初始化</Button>
</Popconfirm>
{defaultSqlDir && (
<Select
......@@ -541,8 +581,7 @@ const InitDataBase = props => {
footer={[
<Button
onClick={() => {
setInitVisible(false);
setInitContent('');
handleClick();
}}
type="primary"
>
......@@ -563,13 +602,14 @@ const InitDataBase = props => {
minHeight: '100px',
}}
cancelText="取消"
okText="确认修改"
okText="确认"
destroyOnClose
>
<Row>
<Col span={2} className={styles.decsBox}>
描述:
</Col>
<Col span={22}>
<Input
placeholder="请输入描述"
......
......@@ -7,11 +7,15 @@ import {
Modal,
Popconfirm,
notification,
Spin,
} from 'antd';
import { PageContainer } from '@ant-design/pro-layout';
import { get } from '../../services';
import styles from './ManagementDataBase.less';
import { updateDateBase } from '@/services/database/api';
import {
tableCheck,
updateDateBase,
databaseStandardGetLog,
} from '@/services/database/api';
const ManagementDataBase = () => {
const [autoCheckList, setAutoCheckList] = useState([]); // 自动列表
......@@ -26,7 +30,7 @@ const ManagementDataBase = () => {
// 检查数据库表
useEffect(() => {
setCheckLoading(true);
get(`/Cityinterface/rest/services/OMS.svc/TableCheck`, {
tableCheck({
_version: 9999,
_dc: new Date().getTime(),
})
......@@ -58,7 +62,7 @@ const ManagementDataBase = () => {
// 获取数据库升级记录
useEffect(() => {
setLogLoading(true);
get(`/Cityinterface/rest/services/OMS.svc/DatabaseStandard_GetLog`, {
databaseStandardGetLog({
_version: 9999,
_dc: new Date().getTime(),
})
......@@ -102,7 +106,7 @@ const ManagementDataBase = () => {
} else {
notification.error({
message: '通知',
duration: 3,
duration: 15,
description: res.message,
});
}
......@@ -113,21 +117,27 @@ const ManagementDataBase = () => {
});
};
const handleLog = text => {
console.log(text);
let arr = [];
arr.push(text.split(/[(\r\n)\r\n]+/).map(item => <p>${item}</p>));
arr.push(text.split(/(\r\n)|(\n)/).map(item => <p>{item}</p>));
setModalVisible(true);
setContent(text);
// setContent(text);
setContent(arr);
};
const autoCheckColumns = [
{
title: '表名称',
dataIndex: 'tableName',
key: 'tableName',
width: 200,
ellipsis: true,
},
{
title: '类型',
dataIndex: 'type',
key: 'type',
width: 180,
ellipsis: true,
},
{
title: '差异比较',
......@@ -141,6 +151,7 @@ const ManagementDataBase = () => {
dataIndex: 'tableName',
key: 'tableName',
width: 200,
ellipsis: true,
},
{
title: '差异比较',
......@@ -154,21 +165,29 @@ const ManagementDataBase = () => {
title: '登录名',
dataIndex: 'updateBy',
key: 'updateBy',
width: 200,
ellipsis: true,
},
{
title: '数据库名称',
dataIndex: 'name',
key: 'name',
width: 200,
ellipsis: true,
},
{
title: '数据库版本',
dataIndex: 'version',
key: 'version',
width: 200,
ellipsis: true,
},
{
title: '升级时间',
dataIndex: 'updateTime',
key: 'updateTime',
width: 200,
ellipsis: true,
},
{
title: '版本日志',
......@@ -209,38 +228,35 @@ const ManagementDataBase = () => {
<PageContainer>
<Card>
<div className={styles.tableTitle}>表结构自动化修复</div>
<Table
className={styles.mgTop20}
columns={autoCheckColumns}
dataSource={autoCheckList}
bordered
loading={checkLoading}
size="small"
/>
<div className={styles.btnBox}>
<Space>
<Button
type="primary"
onClick={handleCheck}
loading={checkLoading}
>
检查
</Button>
<Popconfirm
title="
是否升级当前连接数据库?"
okText="确认"
cancelText="取消"
onConfirm={() => {
handleUpdate();
}}
>
<Button danger type="primary" loading={checkLoading}>
升级
<Spin tip="loading..." spinning={checkLoading}>
<Table
className={styles.mgTop20}
columns={autoCheckColumns}
dataSource={autoCheckList}
bordered
size="small"
/>
<div className={styles.btnBox}>
<Space>
<Button type="primary" onClick={handleCheck}>
检查
</Button>
</Popconfirm>
</Space>
</div>
<Popconfirm
title="
是否升级当前连接数据库?"
okText="确认"
cancelText="取消"
onConfirm={() => {
handleUpdate();
}}
>
<Button danger type="primary">
升级
</Button>
</Popconfirm>
</Space>
</div>
</Spin>
</Card>
<Card className={styles.mgTop20}>
<div className={styles.tableTitle}>数据库升级记录</div>
......
......@@ -111,31 +111,43 @@ const MongDBTable = props => {
title: '标签',
dataIndex: 'name',
key: 'name',
width: '200px',
ellipsis: true,
},
{
title: 'ip',
dataIndex: 'ip',
key: 'ip',
width: 200,
ellipsis: true,
},
{
title: '端口',
dataIndex: 'port',
key: 'port',
width: 200,
ellipsis: true,
},
{
title: '数据库名',
dataIndex: 'dbName',
key: 'dbName',
width: 200,
ellipsis: true,
},
{
title: '类型',
dataIndex: 'type',
key: 'type',
width: 200,
ellipsis: true,
},
{
title: '复制集',
dataIndex: 'replicaSet',
key: 'replicaSet',
width: 200,
ellipsis: true,
},
// {
// title: '用户名',
......@@ -151,7 +163,6 @@ const MongDBTable = props => {
title: '操作',
dataIndex: 'options',
key: 'options',
width: 300,
render: (val, item) => [
<Tag color="#2db7f5" onClick={() => handleCon(val, item)}>
测试连接
......
......@@ -107,26 +107,36 @@ const MySQLTable = props => {
title: '标签',
dataIndex: 'name',
key: 'name',
width: 200,
ellipsis: true,
},
{
title: 'IP',
dataIndex: 'ip',
key: 'ip',
width: 200,
ellipsis: true,
},
{
title: '数据库名',
dataIndex: 'dbName',
key: 'dbName',
width: 200,
ellipsis: true,
},
{
title: '用户名',
dataIndex: 'userName',
key: 'userName',
width: 200,
ellipsis: true,
},
{
title: '密码',
dataIndex: 'password',
key: 'password',
width: 200,
ellipsis: true,
},
{
title: '操作',
......
......@@ -107,21 +107,29 @@ const OracleTable = props => {
title: '标签',
dataIndex: 'name',
key: 'name',
width: 200,
ellipsis: true,
},
{
title: '网络服务名/(ip:port/实例名)',
dataIndex: 'dbName',
key: 'dbName',
width: 400,
ellipsis: true,
},
{
title: '用户名',
dataIndex: 'userName',
key: 'userName',
width: 200,
ellipsis: true,
},
{
title: '密码',
dataIndex: 'password',
key: 'password',
width: 200,
ellipsis: true,
},
{
title: '操作',
......
......@@ -107,26 +107,36 @@ const SQLServerTable = props => {
title: '标签',
dataIndex: 'name',
key: 'name',
width: 200,
ellipsis: true,
},
{
title: 'ip',
dataIndex: 'ip',
key: 'ip',
width: 200,
ellipsis: true,
},
{
title: '数据库名',
dataIndex: 'dbName',
key: 'dbName',
width: 200,
ellipsis: true,
},
{
title: '用户名',
dataIndex: 'userName',
key: 'userName',
width: 200,
ellipsis: true,
},
{
title: '密码',
dataIndex: 'password',
key: 'password',
width: 200,
ellipsis: true,
},
{
title: '操作',
......
......@@ -29,6 +29,7 @@
}
.listItem{
padding-left: 5px;
cursor: pointer;
}
.selected{
background-color: #bae7ff;
......
......@@ -17,12 +17,43 @@ import { get, post } from '@/services/index';
export const connectionTest = params =>
get('/DBManager/ConnectionTest', params);
// 获取数据库配置信息
export const getDataBaseConfig = params =>
get('/Cityinterface/rest/services/OMS.svc/S_GetDataBaseConfig', params);
// 获取数据库连接记录
export const getConnRecord = params =>
get('/Cityinterface/rest/services/OMS.svc/S_GetConnRecord', params);
// 测试连接
export const getConnectionTest = params =>
get('/Cityinterface/rest/services/OMS.svc/S_GetConnectionTest', params);
// 保存数据库连接
export const saveConnection = params =>
get('/Cityinterface/rest/services/OMS.svc/S_SaveConnection', params);
// 获取数据库列表
export const getDataBaseList = params =>
get('/Cityinterface/rest/services/OMS.svc/S_GetDataBaseList', params);
// 数据库初始化
export const initDBv4 = params =>
get('/Cityinterface/rest/services/OMS.svc/S_InitDBv4', params);
// 更新描述
export const updateConnDesc = params =>
get('/Cityinterface/rest/services/OMS.svc/S_UpdateConnDesc', params);
// 获取日志
export const getInitDBLog = params =>
get('/Cityinterface/rest/services/OMS.svc/S_GetInitDBLog', params);
// 删除初始化日志
export const deleteInitDBLog = params =>
get('/Cityinterface/rest/services/OMS.svc/S_DeleteInitDBLog', params);
// 修改产品解决方案
export const setTableSQLDirName = params =>
get('/Cityinterface/rest/services/OMS.svc/S_SetTableSQLDirName', params);
......@@ -31,13 +62,31 @@ export const setTableSQLDirName = params =>
export const deleteConn = params =>
get('/Cityinterface/rest/services/OMS.svc/S_DeleteConn', params);
/**
*
* @解决方案管理
*/
// 切换解决方案配置
export const getSolutionList = params =>
get('/Cityinterface/rest/services/OMS.svc/W4_GetSolutionList', params);
// 切换解决方案
export const changeSolution = params =>
get('/Cityinterface/rest/services/OMS.svc/W4_ChangeSolution', params);
// 更新站点人员
/**
*
* @数据库标准化管理
*/
// 检查数据库表
export const tableCheck = params =>
get(`/Cityinterface/rest/services/OMS.svc/TableCheck`, params);
// 获取数据库升级记录
export const databaseStandardGetLog = params =>
get('/Cityinterface/rest/services/OMS.svc/DatabaseStandard_GetLog', params);
// 更新
export const updateDateBase = params =>
get(
'/Cityinterface/rest/services/OMS.svc/DatabaseStandard_UpdateDateBase',
......
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