Browse Source

Merge pull request #6908 in DEC/decision-webui-dcm from release/11.0 to final/11.0

* commit 'a8d96361bb2fb549440bf43b2f51075e82cf92a3':
  Revert "REPORT-86413 feat: 数据连接适配平台加解密改造"
  REPORT-89173 fix: 适配下接口
  无JIRA任务,处理下类型
  REPORT-89173 fix: JNDI入口屏蔽
  REPORT-86413 feat: 数据连接适配平台加解密改造
  REPORT-87662 feat:tbase适配tdsql的更改
  REPORT-87662 feat:数据连接添加版本选择
  REPORT-86591 fix:tdsql数据库更名
final/11.0
superman 2 years ago
parent
commit
ac993f728d
  1. 18
      src/modules/app.service.ts
  2. 6
      src/modules/app.typings.d.ts
  3. 4
      src/modules/components/collapse/collapse.ts
  4. 3
      src/modules/constants/constant.ts
  5. 5
      src/modules/crud/api.ts
  6. 7
      src/modules/crud/decision.api.ts
  7. 4
      src/modules/crud/design.api.ts
  8. 22
      src/modules/pages/connection/connection_jdbc/connection_jdbc.ts
  9. 23
      src/modules/pages/database/database.model.ts
  10. 13
      src/modules/pages/database/database.ts
  11. 14
      src/modules/pages/maintain/components/driverselector/driverselector.model.ts
  12. 11
      src/modules/pages/maintain/components/driverselector/driverselector.ts
  13. 84
      src/modules/pages/maintain/forms/components/form.jdbc.ts

18
src/modules/app.service.ts

@ -1,7 +1,7 @@
import { DATA_BASE_TYPES, DATA_BASE_TYPES_OTHER, DESIGN_DRIVER_TYPE, OTHER_JDBC } from '@constants/constant';
import { DatabaseType } from './app.typings';
import { Connection } from './crud/crud.typings';
export function getAllDatabaseTypes():DatabaseType[] {
export function getAllDatabaseTypes(): DatabaseType[] {
return [
...DATA_BASE_TYPES,
...BI.Providers.getProvider('dec.connection.provider.datebase').customDatabaseType.map(item => {
@ -45,11 +45,11 @@ export function getJdbcDatabaseType(database: string, driver: string): DatabaseT
if (!databaseType) {
return DATA_BASE_TYPES_OTHER;
}
return databaseType;
}
export function resolveUrlInfo (url: string, database?: string) {
export function resolveUrlInfo(url: string, database?: string) {
if (BI.isNull(url)) return {};
return BI.Providers.getProvider('dec.connection.provider.datebase').getJdbcResolveByType(database)(url) || {
@ -70,11 +70,11 @@ export function splitUrl(host: string, port: string, database: string, baseUrl:
// https://work.fineres.com/browse/REPORT-72078
if (baseUrl.startsWith('jdbc:informix-sqli')) {
return baseUrl.replace('hostname', host)
.replace(':port', port ? `:${port}` : '')
.replace('database', database)
.replace(':INFORMIXSERVER={server}','');
.replace(':port', port ? `:${port}` : '')
.replace('database', database)
.replace(':INFORMIXSERVER={server}', '');
}
return baseUrl.replace('hostname', host).replace(':port', port ? `:${port}` : '')
.replace('database', database)
.replace('dbname', database);
@ -85,13 +85,13 @@ export function connectionCanEdit(connection: Connection) {
// privilegeType === 4 代表编辑权限,privilegeValue === 2 代表有权限
return connection.privilegeDetailBeanList.some(item => item.privilegeType === 4 && item.privilegeValue === 2);
}
return true;
}
export function getTextByDatabaseType(databaseType: string) {
const database = getAllDatabaseTypes().find(item => item.databaseType === databaseType);
return database ? database.text : '';
}

6
src/modules/app.typings.d.ts vendored

@ -8,9 +8,13 @@ export interface DatabaseType {
internal: boolean;
type: string;
hasSchema?: boolean;
hasSchemas?: {
[key: string]: boolean;
};
kerberos?: boolean;
iconUrl?: string;
versions?: string[];
urls?: {
[key: string]: string;
}
};
}

4
src/modules/components/collapse/collapse.ts

@ -64,4 +64,8 @@ export class Collapse extends BI.BasicButton {
doClick() {
this.store.setCollapse(!this.model.isCollapse);
}
setCollapse(v: boolean) {
this.store.setCollapse(v);
}
}

3
src/modules/constants/constant.ts

@ -704,10 +704,11 @@ export const DATA_BASE_TYPES = [
kerberos: false,
},
{
text: BI.i18nText('Dec-Dcm_Connection_TDSQL'),
text: 'TDSQL',
databaseType: 'tdsql',
driver: 'org.postgresql.Driver',
url: 'jdbc:postgresql://hostname:port/database',
versions: ['pgsql'],
commonly: false,
internal: true,
type: 'jdbc',

5
src/modules/crud/api.ts

@ -93,4 +93,9 @@ export interface Api {
*
*/
getHyperlink(name: string): string;
/**
* JNDI数据库类型可用状态
*/
getJNDIDatabaseStatus(): Promise<{ data?: boolean }>;
}

7
src/modules/crud/decision.api.ts

@ -131,11 +131,16 @@ export class DecisionApi implements Api {
getTimeOut(): Promise<{ data?: any }> {
return requestGet('kdc/timeout', {});
}
putTimeOut(value: number) {
return requestPut(`kdc/timeout?timeout=${value}`, {})
}
// 获取当前lic是否可以使用JNDI数据库类型
getJNDIDatabaseStatus(): Promise<{ data?: boolean }> {
return requestGet('databasetype/limit', {});
}
private sendEditStatusEvent(name: string, type: string): Promise<SocketResult> {
return new Promise(resolve => {
if (Dec && Dec.socket.connected) {

4
src/modules/crud/design.api.ts

@ -88,4 +88,8 @@ export class DesignApi implements Api {
// 设计器获取超链
return '';
}
getJNDIDatabaseStatus() {
return Promise.resolve({ data: true });
}
}

22
src/modules/pages/connection/connection_jdbc/connection_jdbc.ts

@ -52,7 +52,8 @@ export class ConnectionJdbc extends BI.Widget {
sslClientCertificate,
} = connectionData;
const databaseType = getJdbcDatabaseType(database, driver);
const { host, port, databaseName } = resolveUrlInfo(url, database);
const { host, port, databaseName, version } = resolveUrlInfo(url, database);
this.version = !BI.isUndefined(databaseType.versions) ? (version ?? databaseType.versions[0]) : version;
const { hgap, vgap } = CONNECTION_LAYOUT;
return {
@ -62,6 +63,13 @@ export class ConnectionJdbc extends BI.Widget {
items: [
{
type: FormItem.xtype,
name: BI.i18nText('Dec-Basic_Version'),
invisible: BI.isUndefined(this.version),
value: BI.i18nText('Dec-Migration_Database_Version', this.version),
},
{
type: FormItem.xtype,
_tgap: BI.isUndefined(this.version) ? vgap : 0,
name: BI.i18nText('Dec-Dcm_Connection_Form_Driver'),
value: BI.isKey(driverSource) ? `${driver} (${driverSource})` : driver,
},
@ -82,13 +90,13 @@ export class ConnectionJdbc extends BI.Widget {
},
authType
? {
type: FormItem.xtype,
name: BI.i18nText('Dec-Dcm_Connection_Form_AuthType'),
value: authType,
}
type: FormItem.xtype,
name: BI.i18nText('Dec-Dcm_Connection_Form_AuthType'),
value: authType,
}
: {
type: BI.Layout.xtype,
},
type: BI.Layout.xtype,
},
{
type: FormItem.xtype,
name: authType ? BI.i18nText('Dec-Dcm_Connection_Form_Principal') : BI.i18nText('Dec-Dcm_Connection_Form_UserName'),

23
src/modules/pages/database/database.model.ts

@ -2,10 +2,12 @@ import { model, Model } from '@core/core';
import { AppModel } from 'src/modules/app.model';
import { getAllDatabaseTypes } from '../../app.service';
import { DatabaseType } from '../../app.typings';
import { connectionType } from '@constants/env';
import { OTHER_JDBC } from '@constants/constant';
@model()
export class DatebaseModel extends Model<{
types : {
types: {
filter: AppModel['TYPE']['filter'];
datebaseTypeSelected: AppModel['TYPE']['datebaseTypeSelected'];
},
@ -20,20 +22,30 @@ export class DatebaseModel extends Model<{
isInternal: true,
isPlugin: true,
datebaseTypes: getAllDatabaseTypes().filter(item => item.commonly),
isJNDILimit: false,
};
}
computed = {
otherDatabases: () => {
return this.model.isJNDILimit
? [OTHER_JDBC]
: [OTHER_JDBC, connectionType.JNDI];
}
}
actions = {
setSearch:(search: string) => {
setSearch: (search: string) => {
this.model.search = search;
},
setFilter:(filter: string) => {
setFilter: (filter: string) => {
this.model.filter = filter;
},
setDatebaseTypes: (datebaseTypes: DatabaseType[]) => {
this.model.datebaseTypes = datebaseTypes;
this.model.datebaseTypeSelected = '';
},
setInternal:(isInternal: boolean) => {
setInternal: (isInternal: boolean) => {
this.model.isInternal = isInternal;
},
setPlugin: (isPlugin: boolean) => {
@ -42,5 +54,8 @@ export class DatebaseModel extends Model<{
setDatebaseTypeSelected(datebaseType: string) {
this.model.datebaseTypeSelected = datebaseType;
},
setJNDILimit: (v: boolean) => {
this.model.isJNDILimit = v;
},
}
}

13
src/modules/pages/database/database.ts

@ -6,6 +6,10 @@ import { connectionType } from '@constants/env';
import { DatebaseType } from './database_type/database_type';
import { getAllDatabaseTypes } from '../../app.service';
import { ButtonGroup, MultiSelectItem, SearchEditor } from '@fui/core';
import { ApiFactory } from 'src/modules/crud/apiFactory';
const api = new ApiFactory().create();
@shortcut()
@store(DatebaseModel)
export class Datebase extends BI.Widget {
@ -65,6 +69,7 @@ export class Datebase extends BI.Widget {
mounted() {
this.store.setFilter(DATEBASE_FILTER_TYPE.COMMONLY);
this.store.setDatebaseTypeSelected('');
this.getDatabaseTypeLimit();
}
render() {
@ -250,11 +255,17 @@ export class Datebase extends BI.Widget {
this.store.setDatebaseTypes(this.allDatabaseTypes.filter(item => item.commonly));
break;
case DATEBASE_FILTER_TYPE.OTHER:
this.store.setDatebaseTypes(this.allDatabaseTypes.filter(item => item.type === connectionType.JNDI || item.type === OTHER_JDBC));
this.store.setDatebaseTypes(this.allDatabaseTypes.filter(item => this.model.otherDatabases.includes(item.type)));
break;
default:
this.store.setDatebaseTypes(this.allDatabaseTypes.filter(item => item.type !== connectionType.JNDI && item.type !== OTHER_JDBC));
break;
}
}
// 获取JNDI
private async getDatabaseTypeLimit() {
const result = await api.getJNDIDatabaseStatus();
this.store.setJNDILimit(result.data);
}
}

14
src/modules/pages/maintain/components/driverselector/driverselector.model.ts

@ -87,6 +87,12 @@ export class DriverSelectorModel extends Model {
changeDriverSource: driverTypeComboValue => {
this.model.driverSource = driverTypeComboValue === 'default' ? '' : this.model.driverSource;
},
setDefaultDrivers: version => {
const defaultDrivers = this.getDrivers(version);
this.model.defaultDrivers = defaultDrivers;
this.changeDefaultDriver(defaultDrivers[0]?.value);
}
};
private resolveSelectedDriverType = () => {
@ -97,11 +103,12 @@ export class DriverSelectorModel extends Model {
return [this.options.driverSource, this.options.driver];
};
private getDrivers = () => {
private getDrivers = (version?: string) => {
const connectionData = this.options.connectionData as ConnectionJDBC;
const connectionType = getJdbcDatabaseType(connectionData.database, connectionData.driver);
const selectedVersion = version ?? this.options.version;
const drivers = connectionType.drivers ?
connectionType.drivers.map(item => {
(BI.isUndefined(connectionType.versions) ? connectionType.drivers : connectionType.drivers[selectedVersion]).map(item => {
return {
text: item,
value: item,
@ -111,8 +118,7 @@ export class DriverSelectorModel extends Model {
text: connectionType.driver,
value: connectionType.driver,
}];
if (!drivers.some(item => item.text === connectionData.driver)) {
if (BI.isUndefined(connectionType.versions) && !drivers.some(item => item.text === connectionData.driver)) {
return [
{
text: connectionData.driver,

11
src/modules/pages/maintain/components/driverselector/driverselector.ts

@ -24,6 +24,7 @@ export class DriverSelector extends BI.Widget {
driver: '',
driverSource: '',
connectionData: {} as ConnectionJDBC,
version: '',
};
defaultDrivers: EditorIconCheckCombo = null;
@ -43,6 +44,12 @@ export class DriverSelector extends BI.Widget {
driverManageEntryVisible: b => {
this.driverManageEntry.setVisible(b);
},
defaultDrivers: items => {
this.defaultDrivers.populate(items);
this.defaultDrivers.setValue(this.model.defaultDriver.driver);
this.fireEvent('EVENT_CHANGE');
}
};
private driverManageEntry = null;
@ -182,4 +189,8 @@ export class DriverSelector extends BI.Widget {
driver: this.model.driverSource === '' ? this.model.defaultDriver.driver : this.model.customDriver.driver,
};
}
setDefaultDrivers(version: string) {
this.store.setDefaultDrivers(version);
}
}

84
src/modules/pages/maintain/forms/components/form.jdbc.ts

@ -40,9 +40,11 @@ export class FormJdbc extends BI.Widget {
formKeyPath: FormItem;
formKrb5File: FormItem;
labelTips: Label;
schemaForm: FormItem;
form = {
connectionName: null,
version: null,
driver: null,
database: null,
host: null,
@ -138,8 +140,8 @@ export class FormJdbc extends BI.Widget {
} = connectionPoolAttr as ConnectionPoolJDBC;
const databaseType = getJdbcDatabaseType(database, driver);
this.databaseType = databaseType;
const { host, port, databaseName } = resolveUrlInfo(url, database);
const { host, port, databaseName, version } = resolveUrlInfo(url, database);
this.version = !BI.isUndefined(databaseType.versions) ? (version ?? databaseType.versions[0]) : version;
const { hgap, vgap } = CONNECTION_LAYOUT;
const valueRangeConfig = {
@ -171,6 +173,41 @@ export class FormJdbc extends BI.Widget {
},
],
},
// 版本
{
type: FormItem.xtype,
name: BI.i18nText('Dec-Basic_Version'),
invisible: BI.isUndefined(databaseType.versions),
forms: [
{
type: BI.TextValueCombo.xtype,
width: 300,
value: this.version,
items: () => databaseType.versions.map(item => {
return {
text: BI.i18nText('Dec-Migration_Database_Version', item),
value: item,
}
}),
ref: (_ref: TextValueCombo) => {
this.form.version = _ref;
},
listeners: [
{
eventName: BI.TextValueCombo.EVENT_CHANGE,
action: () => {
const version = this.form.version.getValue()[0];
this.version = version;
this.sslCollapse.setCollapse(true);
this.sslCollapse.setVisible(this.getSslSetEnabled());
!BI.isUndefined(databaseType.hasSchemas) && this.schemaForm.setVisible(databaseType.hasSchemas[version]);
this.form.driver.setDefaultDrivers(version);
},
},
],
},
],
},
// 驱动
{
type: FormItem.xtype,
@ -184,6 +221,7 @@ export class FormJdbc extends BI.Widget {
driver,
driverSource,
connectionData,
version: this.version,
listeners: [
{
eventName: 'EVENT_CHANGE',
@ -405,7 +443,7 @@ export class FormJdbc extends BI.Widget {
{
eventName: FileUpload.EVENT_CHECK_SUCCESS,
action: (value) => {
const principalsItems = BI.map(value.principals, function(index, item) {
const principalsItems = BI.map(value.principals, function (index, item) {
return {
text: item,
value: item
@ -485,7 +523,7 @@ export class FormJdbc extends BI.Widget {
action: () => {
this.setKerberos();
},
}
}
]
}
]
@ -510,7 +548,7 @@ export class FormJdbc extends BI.Widget {
// 模式
{
type: FormItem.xtype,
invisible: !databaseType.hasSchema,
invisible: BI.isUndefined(databaseType.hasSchemas) ? !databaseType.hasSchema : !databaseType.hasSchemas[this.version],
height: 64,
name: BI.i18nText('Dec-Dcm_Connection_Form_Pattern'),
forms: [
@ -551,6 +589,9 @@ export class FormJdbc extends BI.Widget {
],
},
],
ref: (_ref: FormItem) => {
this.schemaForm = _ref;
},
},
// 分隔线
{
@ -866,6 +907,9 @@ export class FormJdbc extends BI.Widget {
width: 100,
name: BI.i18nText('Dec-Dcm_Connection_Setting', 'SSL'),
invisible: !this.getSslSetEnabled(),
ref: (_ref: Collapse) => {
this.sslCollapse = _ref;
},
listeners: [
{
eventName: EVENT_CHANGE,
@ -1252,17 +1296,17 @@ export class FormJdbc extends BI.Widget {
const connectionType = getJdbcDatabaseType(connectionData.database, connectionData.driver);
const drivers = connectionType.drivers
? connectionType.drivers.map((item) => {
return {
text: item,
value: item,
};
})
return {
text: item,
value: item,
};
})
: [
{
text: connectionType.driver,
value: connectionType.driver,
},
];
{
text: connectionType.driver,
value: connectionType.driver,
},
];
if (!drivers.some((item) => item.text === connectionData.driver)) {
return [
@ -1309,7 +1353,7 @@ export class FormJdbc extends BI.Widget {
private getSslSetEnabled(): boolean {
const { databaseType } = this.databaseType;
return databaseType === 'mysql';
return databaseType === 'mysql' || this.version === 'mysql';
}
public setSchemas(schemas: string[]) {
@ -1329,7 +1373,7 @@ export class FormJdbc extends BI.Widget {
}
public setKerberos() {
const KerberosParams = BI.extend({},{
const KerberosParams = BI.extend({}, {
keytabPath: this.form.keyPath.getValue(),
krb5ConfPath: this.form.krb5Path.getValue(),
principal: this.form.principal.getValue()[0]
@ -1341,7 +1385,7 @@ export class FormJdbc extends BI.Widget {
public initPrincipals(keyPath, principal) {
let self = this;
api.getPrincipals(keyPath).then(res => {
const principalsItems = BI.map(res.data, function(index, item) {
const principalsItems = BI.map(res.data, function (index, item) {
return {
text: item,
value: item
@ -1354,12 +1398,12 @@ export class FormJdbc extends BI.Widget {
public changePrincipal() {
let self = this;
const KerberosParams = BI.extend({},{
const KerberosParams = BI.extend({}, {
keytabPath: this.form.keyPath.getValue(),
krb5ConfPath: this.form.krb5Path.getValue(),
principal: this.form.principal.getValue()[0]
});
api.changePrincipal(KerberosParams).then(res =>{
api.changePrincipal(KerberosParams).then(res => {
self.form.keyPath.setValue(res.data.keytabPath);
self.form.krb5Path.setValue(res.data.krb5ConfPath);
});

Loading…
Cancel
Save