feat(dbms): 支持MySQL数据库连接管理功能
- 添加MySQL数据库类型的连接支持,默认端口为3306,用户名为root - 实现Oracle与MySQL连接类型的差异化表单验证逻辑 - 更新连接树组件以区分不同数据库类型的显示方式 - 集成备份恢复任务面板,支持双标签页切换功能 - 优化表格排序功能,增强连接列表的可操作性 - 调整任务面板布局,改进用户体验和界面交互 - 新增连接对话框中数据库类型的选择与初始化逻辑
This commit is contained in:
@@ -0,0 +1,55 @@
|
||||
import fs from 'node:fs'
|
||||
import path from 'node:path'
|
||||
|
||||
const root = path.resolve(import.meta.dirname, '..')
|
||||
|
||||
const files = {
|
||||
page: path.join(root, 'index.vue'),
|
||||
dialog: path.join(root, 'components/DbmsConnectionDialog.vue'),
|
||||
taskPanel: path.join(root, 'components/DbmsTaskPanel.vue'),
|
||||
payload: path.join(root, 'utils/taskPayload.ts'),
|
||||
apiTypes: path.join(root, '../../../api/system/dbms/interface/index.ts')
|
||||
}
|
||||
|
||||
const read = file => fs.readFileSync(file, 'utf8')
|
||||
|
||||
const checks = [
|
||||
['connection list should not hardcode ORACLE dbType', !/dbType:\s*'ORACLE'/.test(read(files.page))],
|
||||
['mysql entry should not be blocked in connection type selection', !/if\s*\(dbType\s*===\s*'MYSQL'\)/.test(read(files.page))],
|
||||
['connection payload type should define databaseName', /databaseName\?:\s*string \| null/.test(read(files.apiTypes))],
|
||||
['connection form model should define databaseName', /databaseName:\s*string/.test(read(files.payload))],
|
||||
['payload builder should map MySQL databaseName', /databaseName:\s*dbType === 'MYSQL' \? form\.databaseName\.trim\(\) \|\| null : null/.test(read(files.payload))],
|
||||
[
|
||||
'backup file list should support MySQL JDBC_EXPORT strategy',
|
||||
/backupStrategy:\s*backupStrategy \|\| undefined/.test(read(files.payload))
|
||||
],
|
||||
[
|
||||
'mysql backup payload should prefer databaseName as schemaName fallback',
|
||||
/connection\.dbType === 'MYSQL'[\s\S]*connection\.databaseName[\s\S]*connection\.schemaName/.test(read(files.payload))
|
||||
],
|
||||
[
|
||||
'mysql task panel should lock backup strategy to JDBC_EXPORT',
|
||||
/isMysqlConnection[\s\S]*backupForm\.backupStrategy = 'JDBC_EXPORT'/.test(read(files.taskPanel))
|
||||
],
|
||||
[
|
||||
'task panel should hide Data Pump Directory field',
|
||||
!/label="Directory"[\s\S]*v-model="backupForm\.directoryName"/.test(read(files.taskPanel))
|
||||
],
|
||||
[
|
||||
'mysql task panel should label schema input as database name',
|
||||
/:label="schemaFieldLabel"/.test(read(files.taskPanel))
|
||||
],
|
||||
['connection dialog should render databaseName field for MySQL', /v-if="selectedDbType === 'MYSQL'"/.test(read(files.dialog))]
|
||||
]
|
||||
|
||||
const failed = checks.filter(([, passed]) => !passed)
|
||||
|
||||
if (failed.length) {
|
||||
console.error('dbms mysql api debug contract failed:')
|
||||
for (const [message] of failed) {
|
||||
console.error(`- ${message}`)
|
||||
}
|
||||
process.exit(1)
|
||||
}
|
||||
|
||||
console.log('dbms mysql api debug contract passed')
|
||||
Reference in New Issue
Block a user