Files
CN_Tool_client/frontend/src/views/system-ops/dbms/contracts/check-mysql-api-debug-contract.mjs
yexb 3dff953b8d feat(dbms): 支持MySQL数据库连接管理功能
- 添加MySQL数据库类型的连接支持,默认端口为3306,用户名为root
- 实现Oracle与MySQL连接类型的差异化表单验证逻辑
- 更新连接树组件以区分不同数据库类型的显示方式
- 集成备份恢复任务面板,支持双标签页切换功能
- 优化表格排序功能,增强连接列表的可操作性
- 调整任务面板布局,改进用户体验和界面交互
- 新增连接对话框中数据库类型的选择与初始化逻辑
2026-06-09 13:16:11 +08:00

56 lines
2.4 KiB
JavaScript

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')