Browse Source
* commit 'f414107f3e50a0ed3ffdcb5778f250bf4238fb4c': DEC-19760 feat: 【BI配合】驱动管理 DEC-20237 fix: 【迭代】【驱动管理】使用某个自定义驱动新建数据连接,下拉框选中后再次下拉,使用相同驱动文件的的所有自定义驱动都会标蓝选中 DEC-20235 fix: 【迭代】【驱动管理】新建数据连接选择自定义驱动,点击添加驱动再退出,所有没有选择驱动类的自定义驱动标蓝显示 DEC-20201 fix: 【迭代】【驱动管理】切换为自定义驱动,已经填好的数据库信息不会保存 DEC-19760 feat: 【BI配合】驱动管理,war包部署不支持提醒 DEC-20204 fix: 【迭代】【驱动管理】次管权限没有限制,可以进入驱动管理页面 DEC-20200 fix: 【迭代】【驱动管理】新建数据连接,选择自定义驱动,保存后显示默认驱动 DEC-20201 fix: 【迭代】【驱动管理】切换为自定义驱动,已经填好的数据库信息不会保存 DEC-20047 fix: 【迭代】【部分数据连接支持fetchSize】平台设置fetchSize为空回填数值为0 DEC-20026 fix: 【自动化】数据连接-新增JNDI类型数据连接无法保存和测试连接 DEC-20036 fix: 【自动化】数据连接管理-其他JDBC类型,切换驱动类型后URL没有联动变化 DEC-20078 fix: 【迭代】【部分数据连接支持fetchSize】JNDI数据连接新建、编辑页面的「测试连接」、「保存」按钮点击无反应 DEC-19879 feat: 驱动管理-前端research/11.0
superman
3 years ago
8 changed files with 385 additions and 33 deletions
@ -0,0 +1,126 @@ |
|||||||
|
import { model, Model } from '@core/core'; |
||||||
|
import { ConnectionJDBC } from '../../../../crud/crud.typings'; |
||||||
|
import { getJdbcDatabaseType } from '../../../../app.service'; |
||||||
|
import { ApiFactory } from '../../../../crud/apiFactory'; |
||||||
|
|
||||||
|
const api = new ApiFactory().create(); |
||||||
|
|
||||||
|
@model() |
||||||
|
export class DriverSelectorModel extends Model { |
||||||
|
static xtype = 'dec.dcm.model.maintain.form.jdbc.driver_selector'; |
||||||
|
|
||||||
|
state = () => { |
||||||
|
const defaultDrivers = this.getDrivers(); |
||||||
|
const [driverSource, selectedDriver] = this.resolveSelectedDriverType(); |
||||||
|
|
||||||
|
return { |
||||||
|
defaultDrivers, |
||||||
|
driverSource, |
||||||
|
selectedDriverType: driverSource === '' ? 'default' : 'custom', |
||||||
|
customDrivers: [], |
||||||
|
defaultDriver: { |
||||||
|
driver: driverSource === '' ? selectedDriver : '', |
||||||
|
}, |
||||||
|
customDriver: { |
||||||
|
driver: driverSource !== '' ? selectedDriver : '', |
||||||
|
value: driverSource !== '' ? `${this.options.driver} (${driverSource})` : '', |
||||||
|
}, |
||||||
|
}; |
||||||
|
}; |
||||||
|
|
||||||
|
computed = { |
||||||
|
driverClassItems: () => this.model.customDrivers.map(driver => { |
||||||
|
return { |
||||||
|
text: `${driver.driverClass} (${driver.name})`, |
||||||
|
value: `${driver.driverClass} (${driver.name})`, |
||||||
|
driverClass: driver.driverClass, |
||||||
|
}; |
||||||
|
}), |
||||||
|
|
||||||
|
driverTypeComboValue: () => this.model.driverSource === '' ? 'default' : 'custom', |
||||||
|
|
||||||
|
driverManageEntryVisible: () => this.model.selectedDriverType === 'custom' && BI.Services.getService('dec.service.global').isAdmin(), |
||||||
|
}; |
||||||
|
|
||||||
|
actions = { |
||||||
|
initDriverClassList: cb => { |
||||||
|
|
||||||
|
api.getSimpleDriverList().then(res => { |
||||||
|
this.model.customDrivers = res.data.filter(driver => { |
||||||
|
return BI.isKey(driver.driverClass); |
||||||
|
}); |
||||||
|
cb(); |
||||||
|
}); |
||||||
|
}, |
||||||
|
|
||||||
|
changeDefaultDriver: driver => { |
||||||
|
this.model.defaultDriver.driver = driver; |
||||||
|
this.model.driverSource = ''; |
||||||
|
}, |
||||||
|
|
||||||
|
changeCustomDriver: value => { |
||||||
|
|
||||||
|
const item = this.model.driverClassItems.find(item => { |
||||||
|
return item.value === value; |
||||||
|
}); |
||||||
|
const driver = item.driverClass; |
||||||
|
this.model.customDriver.driver = driver; |
||||||
|
|
||||||
|
this.model.customDrivers.some(customDriver => { |
||||||
|
if (customDriver.driverClass === driver) { |
||||||
|
this.model.driverSource = customDriver.name; |
||||||
|
this.model.customDriver.value = `${driver} (${customDriver.name})`; |
||||||
|
|
||||||
|
return true; |
||||||
|
} |
||||||
|
|
||||||
|
return false; |
||||||
|
}); |
||||||
|
}, |
||||||
|
|
||||||
|
changeSelectedDriverType: driverTypeComboValue => { |
||||||
|
this.model.selectedDriverType = driverTypeComboValue; |
||||||
|
this.model.driverSource = driverTypeComboValue === 'default' ? '' : this.model.driverSource; |
||||||
|
}, |
||||||
|
|
||||||
|
changeDriverSource: driverTypeComboValue => { |
||||||
|
this.model.driverSource = driverTypeComboValue === 'default' ? '' : this.model.driverSource; |
||||||
|
}, |
||||||
|
}; |
||||||
|
|
||||||
|
private resolveSelectedDriverType = () => { |
||||||
|
if (BI.isNotEmptyString(this.options.driverSource)) { |
||||||
|
return [this.options.driverSource, this.options.driver]; |
||||||
|
} |
||||||
|
|
||||||
|
return [this.options.driverSource, this.options.driver]; |
||||||
|
}; |
||||||
|
|
||||||
|
private getDrivers = () => { |
||||||
|
const connectionData = this.options.connectionData as ConnectionJDBC; |
||||||
|
const connectionType = getJdbcDatabaseType(connectionData.database, connectionData.driver); |
||||||
|
const drivers = connectionType.drivers ? |
||||||
|
connectionType.drivers.map(item => { |
||||||
|
return { |
||||||
|
text: item, |
||||||
|
value: item, |
||||||
|
}; |
||||||
|
}) : |
||||||
|
[{ |
||||||
|
text: connectionType.driver, |
||||||
|
value: connectionType.driver, |
||||||
|
}]; |
||||||
|
|
||||||
|
if (!drivers.some(item => item.text === connectionData.driver)) { |
||||||
|
return [ |
||||||
|
{ |
||||||
|
text: connectionData.driver, |
||||||
|
value: connectionData.driver, |
||||||
|
}, |
||||||
|
...drivers, |
||||||
|
]; |
||||||
|
} |
||||||
|
|
||||||
|
return drivers; |
||||||
|
}; |
||||||
|
} |
@ -0,0 +1,185 @@ |
|||||||
|
import { shortcut, store } from '@core/core'; |
||||||
|
|
||||||
|
import { |
||||||
|
Button, |
||||||
|
EditorIconCheckCombo, |
||||||
|
SearchTextValueCombo, |
||||||
|
TextValueCombo, |
||||||
|
} from '@fui/core'; |
||||||
|
import { ConnectionJDBC } from '../../../../crud/crud.typings'; |
||||||
|
import { getJdbcDatabaseType } from '../../../../app.service'; |
||||||
|
import { DriverSelectorModel } from './driverselector.model'; |
||||||
|
|
||||||
|
|
||||||
|
@shortcut() |
||||||
|
@store(DriverSelectorModel, { |
||||||
|
props(this: DriverSelector) { |
||||||
|
return this.options; |
||||||
|
}, |
||||||
|
}) |
||||||
|
export class DriverSelector extends BI.Widget { |
||||||
|
static xtype = 'dec.dcm.maintain.form.jdbc.driver_selector'; |
||||||
|
|
||||||
|
props = { |
||||||
|
driver: '', |
||||||
|
driverSource: '', |
||||||
|
connectionData: {} as ConnectionJDBC, |
||||||
|
}; |
||||||
|
|
||||||
|
defaultDrivers: EditorIconCheckCombo = null; |
||||||
|
|
||||||
|
customDrivers: SearchTextValueCombo = null; |
||||||
|
|
||||||
|
beforeRender(cb: Function) { |
||||||
|
this.store.initDriverClassList(cb); |
||||||
|
} |
||||||
|
|
||||||
|
watch = { |
||||||
|
driverClassItems: items => { |
||||||
|
this.customDrivers.populate(items); |
||||||
|
this.customDrivers.setValue(this.model.customDriver.value); |
||||||
|
}, |
||||||
|
|
||||||
|
driverManageEntryVisible: b => { |
||||||
|
this.driverManageEntry.setVisible(b); |
||||||
|
}, |
||||||
|
}; |
||||||
|
|
||||||
|
private driverManageEntry = null; |
||||||
|
|
||||||
|
render() { |
||||||
|
const { driver } = this.options.connectionData; |
||||||
|
|
||||||
|
return { |
||||||
|
type: BI.VerticalAdaptLayout.xtype, |
||||||
|
rgap: 10, |
||||||
|
items: [ |
||||||
|
{ |
||||||
|
el: { |
||||||
|
type: BI.TextValueCombo.xtype, |
||||||
|
width: 86, |
||||||
|
value: this.model.selectedDriverType, |
||||||
|
items: [ |
||||||
|
{ |
||||||
|
text: BI.i18nText('Dec-Basic_Default'), |
||||||
|
value: 'default', |
||||||
|
}, { |
||||||
|
text: BI.i18nText('Dec-Basic_Custom'), |
||||||
|
value: 'custom', |
||||||
|
}, |
||||||
|
], |
||||||
|
listeners: [ |
||||||
|
{ |
||||||
|
eventName: BI.TextValueCombo.EVENT_CHANGE, |
||||||
|
action: value => { |
||||||
|
this.store.changeSelectedDriverType(value); |
||||||
|
if (value === 'default') { |
||||||
|
this.defaultDrivers.setVisible(true); |
||||||
|
this.customDrivers.setVisible(false); |
||||||
|
this.fireEvent('EVENT_CHANGE'); |
||||||
|
return; |
||||||
|
} |
||||||
|
|
||||||
|
this.defaultDrivers.setVisible(false); |
||||||
|
this.customDrivers.setVisible(true); |
||||||
|
if (BI.isKey(this.customDrivers.getValue()[0])) { |
||||||
|
this.fireEvent('EVENT_CHANGE'); |
||||||
|
} |
||||||
|
}, |
||||||
|
}, |
||||||
|
], |
||||||
|
}, |
||||||
|
}, { |
||||||
|
el: { |
||||||
|
type: BI.EditorIconCheckCombo.xtype, |
||||||
|
$testId: 'dec-editor-icon-check-combo', |
||||||
|
$value: 'driver', |
||||||
|
ref: _ref => { |
||||||
|
this.defaultDrivers = _ref; |
||||||
|
}, |
||||||
|
invisible: this.model.driverSource !== '', |
||||||
|
width: 204, |
||||||
|
items: this.model.defaultDrivers, |
||||||
|
value: this.model.defaultDriver.driver, |
||||||
|
listeners: [ |
||||||
|
{ |
||||||
|
eventName: BI.EditorIconCheckCombo.EVENT_CHANGE, |
||||||
|
action: () => { |
||||||
|
this.store.changeDefaultDriver(this.defaultDrivers.getValue()); |
||||||
|
this.fireEvent('EVENT_CHANGE'); |
||||||
|
}, |
||||||
|
}, |
||||||
|
], |
||||||
|
}, |
||||||
|
}, { |
||||||
|
el: { |
||||||
|
type: BI.SearchTextValueCombo.xtype, |
||||||
|
$testId: 'dec-editor-icon-check-combo', |
||||||
|
$value: 'driver', |
||||||
|
ref: _ref => { |
||||||
|
this.customDrivers = _ref; |
||||||
|
}, |
||||||
|
invisible: this.model.driverSource === '', |
||||||
|
width: 204, |
||||||
|
watermark: BI.i18nText('Dec-Please_Input'), |
||||||
|
items: this.model.driverClassItems, |
||||||
|
value: this.model.customDriver.value, |
||||||
|
text: () => this.model.customDriver.value || '', |
||||||
|
defaultText: BI.i18nText('Dec-Please_Select'), |
||||||
|
warningTitle: BI.i18nText('Dec-Dcm-Driver_Driver_File_Lost'), |
||||||
|
listeners: [ |
||||||
|
{ |
||||||
|
eventName: BI.SearchTextValueCombo.EVENT_CHANGE, |
||||||
|
action: () => { |
||||||
|
this.store.changeCustomDriver(this.customDrivers.getValue()[0]); |
||||||
|
this.fireEvent('EVENT_CHANGE'); |
||||||
|
}, |
||||||
|
}, |
||||||
|
], |
||||||
|
}, |
||||||
|
}, { |
||||||
|
el: { |
||||||
|
type: 'dec.connection.driver.entry', |
||||||
|
ref: (_ref: Button) => { |
||||||
|
this.driverManageEntry = _ref; |
||||||
|
}, |
||||||
|
el: { |
||||||
|
type: BI.Button.xtype, |
||||||
|
level: 'ignore', |
||||||
|
text: BI.i18nText('Dec-Dcm_Create_New_Driver'), |
||||||
|
}, |
||||||
|
from: '.dec-dcm', |
||||||
|
invisible: !this.model.driverManageEntryVisible, |
||||||
|
listeners: [ |
||||||
|
{ |
||||||
|
eventName: 'EVENT_CLOSE', |
||||||
|
action: () => { |
||||||
|
this.store.initDriverClassList(BI.emptyFn); |
||||||
|
}, |
||||||
|
}, |
||||||
|
], |
||||||
|
}, |
||||||
|
}, |
||||||
|
], |
||||||
|
}; |
||||||
|
} |
||||||
|
|
||||||
|
validation(): boolean { |
||||||
|
if (this.model.selectedDriverType === 'default' && BI.isKey(this.model.defaultDriver.driver)) { |
||||||
|
return true; |
||||||
|
} |
||||||
|
if (this.model.selectedDriverType === 'custom' && BI.isKey(this.model.customDriver.driver)) { |
||||||
|
return true; |
||||||
|
} |
||||||
|
BI.Msg.toast(BI.i18nText('Dec-Dcm_Driver_Class_Not_Allow_Empty'), { level: 'error' }); |
||||||
|
|
||||||
|
return false; |
||||||
|
} |
||||||
|
|
||||||
|
getValue() { |
||||||
|
return { |
||||||
|
driverSource: this.model.driverSource, |
||||||
|
driver: this.model.driverSource === '' ? this.model.defaultDriver.driver : this.model.customDriver.driver, |
||||||
|
}; |
||||||
|
} |
||||||
|
} |
Loading…
Reference in new issue