Browse Source

Merge pull request #7152 in DEC/decision-webui-dcm from final/11.0 to persist/11.0

* commit 'b065c176d91d9b7d6bef29d0d0f46dcf4a4dbabb':
  无JIRA任务,修复类型错误
  REPORT-91396 fix:拼接url精准匹配:database
  REPORT-90864 fix:拼接url精准匹配/database
  无JIRA任务,更新下类型
  REPORT-90807 fix: 适配加解密改造
  无JIRA任务,优化下类型
  REPORT-88759 feat: 数据连接适配FDL
  REPORT-88994 feat:适配Kingbase8.0版本
persist/11.0
superman 2 years ago
parent
commit
864f857a6e
  1. 2
      package.json
  2. 3
      src/modules/app.service.ts
  3. 2
      src/modules/components/collapse/collapse.ts
  4. 41
      src/modules/components/tips_combo/tips_combo.ts
  5. 12
      src/modules/constants/constant.ts
  6. 6
      src/modules/crud/crud.service.ts
  7. 66
      src/modules/crud/crud.typings.d.ts
  8. 4
      src/modules/crud/decision.api.ts
  9. 58
      src/modules/pages/connection/connection_jdbc/connection_jdbc.ts
  10. 294
      src/modules/pages/maintain/forms/components/form.jdbc.ts
  11. 17
      src/modules/pages/maintain/forms/form.ts
  12. 26
      tsconfig.json
  13. 1
      types/globals.d.ts
  14. 9
      types/request.d.ts

2
package.json

@ -20,7 +20,7 @@
"@types/jest": "24.0.11",
"@typescript-eslint/eslint-plugin": "^5.0.0",
"@typescript-eslint/parser": "^5.0.0",
"axios": "0.18.0",
"axios": "^0.24.0",
"babel-loader": "8.0.6",
"body-parser": "1.18.3",
"chokidar": "2.1.5",

3
src/modules/app.service.ts

@ -76,7 +76,8 @@ export function splitUrl(host: string, port: string, database: string, baseUrl:
}
return baseUrl.replace('hostname', host).replace(':port', port ? `:${port}` : '')
.replace('database', database)
.replace('/database', `/${database}`)
.replace(':database', `:${database}`)
.replace('dbname', database);
}

2
src/modules/components/collapse/collapse.ts

@ -12,6 +12,7 @@ export class Collapse extends BI.BasicButton {
name: '',
isCollapse: true,
$testId: 'dec-dcm-components-collapse',
el: {},
}
rightFont: IconLabel;
@ -57,6 +58,7 @@ export class Collapse extends BI.BasicButton {
lgap: 2,
text: this.options.name,
},
this.options.el,
],
};
}

41
src/modules/components/tips_combo/tips_combo.ts

@ -0,0 +1,41 @@
import { shortcut } from '@core/core';
import { BubbleCombo, BubblePopupView, IconButton } from '@fui/core';
@shortcut()
export class TipsCombo extends BI.Widget {
public static xtype = 'dec.dcm.tips.combo';
public props: BubblePopupView['props'] & IconButton['props'] = {
trigger: 'hover',
direction: 'top'
};
private bubbleCombo: BubbleCombo;
private bubbleComboPopup: BubblePopupView;
public render() {
const { direction, trigger, el } = this.options;
return {
type: BI.BubbleCombo.xtype,
trigger,
direction,
el: {
type: BI.IconButton.xtype,
cls: "detail-font",
},
popup: {
type: BI.BubblePopupView.xtype,
ref: (_ref: BubblePopupView) => {
this.bubbleComboPopup = _ref;
},
el,
},
listeners: [],
ref: (_ref: BubbleCombo) => {
this.bubbleCombo = _ref;
}
}
}
}

12
src/modules/constants/constant.ts

@ -459,6 +459,7 @@ export const DATA_BASE_TYPES = [
text: 'KINGBASE',
databaseType: 'kingbase',
driver: 'com.kingbase.Driver',
versions: ['KingbaseES 7.0'],
url: 'jdbc:kingbase://hostname:port/database',
commonly: false,
internal: true,
@ -867,3 +868,14 @@ export const JNDI_FACTORYS = [
export const PAGE_SIZE = 50;
export const INT_MAX_VALUE = 2147483647;
export const INT_MIN_VALUE = -2147483648;
export const YES_OR_NO = [
{
text: BI.i18nText('Dec-Basic_Yes'),
value: 1,
},
{
text: BI.i18nText('Dec-Basic_No'),
value: 0,
}
]

6
src/modules/crud/crud.service.ts

@ -15,7 +15,7 @@ export function requestGet(url: string, data?: any): Promise<ResultType> {
export function requestPost(url: string, data = {}): Promise<ResultType> {
return new Promise(resolve => {
Dec.reqPost(getFullUrl(url), data, re => {
Dec.reqByEncrypt("POST", getFullUrl(url), data, re => {
resolve(re);
});
});
@ -23,7 +23,7 @@ export function requestPost(url: string, data = {}): Promise<ResultType> {
export function requestDelete(url: string, data = {}) {
return new Promise(resolve => {
Dec.reqDelete(getFullUrl(url), data, re => {
Dec.reqByEncrypt("DELETE", getFullUrl(url), data, re => {
resolve(re);
});
});
@ -31,7 +31,7 @@ export function requestDelete(url: string, data = {}) {
export function requestPut(url: string, data = {}) {
return new Promise(resolve => {
Dec.reqPut(getFullUrl(url), data, re => {
Dec.reqByEncrypt("PUT", getFullUrl(url), data, re => {
resolve(re);
});
});

66
src/modules/crud/crud.typings.d.ts vendored

@ -35,17 +35,17 @@ type ConnectionDataOfSSH = {
sshTimeOut: number;
sshKeepAlive: number;
} & (
| {
sshType: 'NORMAL'; // 验证方法:密码
sshPrivateKeyPath: ''; // 没啥意义,该验证方法下为空字符串
sshSecret: string; // 密码
}
| {
sshType: 'KEY'; // 验证方法:公钥
sshPrivateKeyPath: string; // 私钥
sshSecret: string; // 密码短语
}
);
| {
sshType: 'NORMAL'; // 验证方法:密码
sshPrivateKeyPath: ''; // 没啥意义,该验证方法下为空字符串
sshSecret: string; // 密码
}
| {
sshType: 'KEY'; // 验证方法:公钥
sshPrivateKeyPath: string; // 私钥
sshSecret: string; // 密码短语
}
);
type ConnectionDataOfSSL = {
usingSsl: boolean; // 使用SSL通道
@ -110,7 +110,7 @@ export interface ConnectionPoolJDBC {
minEvictableIdleTimeMillis?: number;
}
export type ConnectionJDBC ={
export type ConnectionJDBC = {
/**
*
*/
@ -206,8 +206,46 @@ export type ConnectionJDBC ={
identity?: string;
connectionPoolAttr: ConnectionPoolJDBC;
}& ConnectionDataOfSSH &
ConnectionDataOfSSL
/**
*
*/
parallelLoad?: IParallelLoad;
/**
* HDFS
*/
hdfs?: {
/**
* HDFS地址
*/
hdfsAddress?: string;
};
} & ConnectionDataOfSSH & ConnectionDataOfSSL;
/**
*
*/
export interface IParallelLoad {
/**
*
*/
serverAddress?: string;
/**
*
*/
serverAddressItems?: string[];
/**
*
*/
reuseTemporaryTable?: string;
/**
*
*/
filePiecesLimit?: string;
/**
*
*/
fileSizeLimit?: string
}
export interface ContextHashtable {
'java.naming.factory.initial': string;

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

@ -108,12 +108,12 @@ export class DecisionApi implements Api {
getCipher(password: string) {
return BI.Providers.getProvider('dec.provider.cipher')
.getCipher(password);
.getCompleteCipher(password);
}
getPlain(cipher: string) {
return BI.Providers.getProvider('dec.provider.cipher')
.getPlain(cipher);
.getCompletePlain(cipher);
}
getHyperlink(name: string) {

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

@ -21,6 +21,7 @@ export class ConnectionJdbc extends BI.Widget {
sshSet: VerticalLayout;
sslSet: VerticalLayout;
advancedSet: VerticalLayout;
parallelLoadSet: VerticalLayout;
render() {
const connectionData = this.model.connectionSelectedOne.connectionData as ConnectionJDBC;
@ -50,6 +51,10 @@ export class ConnectionJdbc extends BI.Widget {
verifyCa,
sslClientPrivateKey,
sslClientCertificate,
// 并行装载
parallelLoad,
// HDFS
hdfs,
} = connectionData;
const databaseType = getJdbcDatabaseType(database, driver);
const { host, port, databaseName, version } = resolveUrlInfo(url, database);
@ -112,6 +117,59 @@ export class ConnectionJdbc extends BI.Widget {
name: BI.i18nText('Dec-Dcm_Connection_Form_OriginalCharsetName'),
value: originalCharsetName ? originalCharsetName : BI.i18nText('Dec-Dcm_Connection_Form_Default'),
},
// HDFS设置
{
type: FormItem.xtype,
invisible: BI.isNull(hdfs),
name: BI.i18nText('Dec-Dcm_Connection_Address', 'HDFS'),
value: hdfs?.hdfsAddress,
},
// 并行装载设置
{
type: Collapse.xtype,
invisible: BI.isNull(parallelLoad),
name: BI.i18nText('Dec-Dcm_Connection_Setting', BI.i18nText('Dec-Dcm_Connection_Parallel_Load')),
listeners: [
{
eventName: EVENT_CHANGE,
action: (isCollapse: boolean) => {
this.parallelLoadSet.setVisible(!isCollapse);
},
},
],
},
{
type: BI.VerticalLayout.xtype,
invisible: true,
ref: (_ref: VerticalLayout) => {
this.parallelLoadSet = _ref;
},
items: [
{
type: FormItem.xtype,
_bgap: vgap,
name: `${BI.i18nText('Dec-Dcm_Connection_Server_Address')}-${BI.i18nText('Dec-Memory_Detection_Server_Cluster_Node', '1')}`,
value: parallelLoad?.serverAddress,
},
{
type: FormItem.xtype,
_bgap: vgap,
name: BI.i18nText('Dec-Dcm_Connection_Reuse_Temporary_Table'),
value: parallelLoad?.reuseTemporaryTable,
},
{
type: FormItem.xtype,
_bgap: vgap,
name: BI.i18nText('Dec-Dcm_Connection_Temporary_File_Pieces_Limit'),
value: parallelLoad?.filePiecesLimit,
},
{
type: FormItem.xtype,
name: BI.i18nText('Dec-Dcm_Connection_Temporary_File_Size_Limit'),
value: parallelLoad?.fileSizeLimit,
},
],
},
{
type: FormItem.xtype,
name: BI.i18nText('Dec-Dcm_Connection_Form_Pattern'),

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

@ -3,7 +3,7 @@ import { Collapse, EVENT_CHANGE } from 'src/modules/components/collapse/collapse
import { FormItem } from '../../components/form_item/form_item';
import { Connection, ConnectionJDBC, ConnectionPoolJDBC } from 'src/modules/crud/crud.typings';
import { connectionType } from '@constants/env';
import { CONNECT_CHARSET, CONNECTION_LAYOUT, INT_MAX_VALUE, INT_MIN_VALUE, CONNECT_SSH_TYPE, CONNECT_SSL_TYPE } from '@constants/constant';
import { CONNECT_CHARSET, CONNECTION_LAYOUT, INT_MAX_VALUE, INT_MIN_VALUE, CONNECT_SSH_TYPE, CONNECT_SSL_TYPE, YES_OR_NO } from '@constants/constant';
import { getAllDatabaseTypes, getJdbcDatabaseType, resolveUrlInfo, splitUrl } from '../../../../app.service';
import { DatabaseType } from 'src/modules/app.typings';
import { TextChecker } from '../../../../components/text_checker/text_checker';
@ -12,9 +12,12 @@ import { ApiFactory } from 'src/modules/crud/apiFactory';
import { Editor, Label, TextAreaEditor, TextEditor, TextValueCombo, VerticalLayout, MultiSelectItem } from '@fui/core';
import { DriverSelector } from '../../components/driverselector/driverselector';
import { FileUpload } from '../../../../components/file_upload/file_upload';
import { TipsCombo } from '../../../../components/tips_combo/tips_combo';
const api = new ApiFactory().create();
const EDITOR_WIDTH = 300, EDITOR_HEIGHT = 20;
@shortcut()
export class FormJdbc extends BI.Widget {
static xtype = 'dec.dcm.maintain.form.jdbc';
@ -29,6 +32,8 @@ export class FormJdbc extends BI.Widget {
databaseType: DatabaseType;
allDatabaseTypes = getAllDatabaseTypes();
parallelLoadSet: VerticalLayout;
hdfsSet: VerticalLayout;
sshSet: VerticalLayout;
sshForm: VerticalLayout;
sslSet: VerticalLayout;
@ -87,6 +92,17 @@ export class FormJdbc extends BI.Widget {
minIdle: null,
minEvictableIdleTimeMillis: null,
fetchSize: null,
// 并行装载
parallelLoad: {
serverAddress: '',
isReuseTemporaryTable: 0,
filePiecesLimit: null,
fileSizeLimit: null,
},
// HDFS
hdfs: {
hdfsAddress: null,
}
};
render() {
@ -120,6 +136,10 @@ export class FormJdbc extends BI.Widget {
verifyCa = false,
sslClientPrivateKey = '',
sslClientCertificate = '',
// 并行装载
parallelLoad,
// HDFS
hdfs,
} = connectionData as ConnectionJDBC;
this.oldPassword = password;
this.oldSshSecret = sshSecret;
@ -163,7 +183,7 @@ export class FormJdbc extends BI.Widget {
{
type: TextChecker.xtype,
$value: 'connection-name',
width: 300,
width: EDITOR_WIDTH,
value: connectionName,
allowBlank: true,
ref: (_ref: TextChecker) => {
@ -181,7 +201,7 @@ export class FormJdbc extends BI.Widget {
forms: [
{
type: BI.TextValueCombo.xtype,
width: 300,
width: EDITOR_WIDTH,
value: this.version,
items: () => databaseType.versions.map(item => {
return {
@ -250,7 +270,7 @@ export class FormJdbc extends BI.Widget {
{
type: BI.TextEditor.xtype,
$value: 'database-name',
width: 300,
width: EDITOR_WIDTH,
allowBlank: true,
watermark: BI.i18nText('Dec-Dcm_Connection_Form_Database_Name'),
value: databaseName,
@ -276,7 +296,7 @@ export class FormJdbc extends BI.Widget {
{
type: BI.TextEditor.xtype,
$value: 'database-host',
width: 300,
width: EDITOR_WIDTH,
allowBlank: true,
value: host,
watermark: BI.i18nText('Dec-Dcm_Connection_Form_Host'),
@ -302,7 +322,7 @@ export class FormJdbc extends BI.Widget {
{
type: TextChecker.xtype,
$value: 'database-port',
width: 300,
width: EDITOR_WIDTH,
allowBlank: true,
value: port,
watermark: BI.i18nText('Dec-Dcm_Connection_Form_Database_Port'),
@ -337,7 +357,7 @@ export class FormJdbc extends BI.Widget {
{
type: BI.TextValueCombo.xtype,
$value: 'auth-type',
width: 300,
width: EDITOR_WIDTH,
value: authType,
ref: (_ref: TextValueCombo) => {
this.form.authType = _ref;
@ -381,7 +401,7 @@ export class FormJdbc extends BI.Widget {
{
type: BI.TextEditor.xtype,
$value: 'username',
width: 300,
width: EDITOR_WIDTH,
allowBlank: true,
value: user,
watermark: BI.i18nText('Dec-Dcm_Connection_Form_UserName'),
@ -404,8 +424,8 @@ export class FormJdbc extends BI.Widget {
type: BI.Editor.xtype,
$value: 'password',
cls: 'bi-border bi-border-radius',
width: 300,
height: 20,
width: EDITOR_WIDTH,
height: EDITOR_HEIGHT,
allowBlank: true,
value: password,
inputType: 'password',
@ -478,7 +498,7 @@ export class FormJdbc extends BI.Widget {
{
type: BI.TextValueCombo.xtype,
$value: 'principal',
width: 300,
width: EDITOR_WIDTH,
value: principal,
ref: (_ref: TextEditor) => {
this.form.principal = _ref;
@ -536,7 +556,7 @@ export class FormJdbc extends BI.Widget {
{
type: BI.TextValueCombo.xtype,
$value: 'original-charset-name',
width: 300,
width: EDITOR_WIDTH,
value: originalCharsetName ? originalCharsetName : '',
items: CONNECT_CHARSET,
ref: (_ref: TextValueCombo) => {
@ -549,7 +569,6 @@ export class FormJdbc extends BI.Widget {
{
type: FormItem.xtype,
invisible: BI.isUndefined(databaseType.hasSchemas) ? !databaseType.hasSchema : !databaseType.hasSchemas[this.version],
height: 64,
name: BI.i18nText('Dec-Dcm_Connection_Form_Pattern'),
forms: [
{
@ -577,8 +596,8 @@ export class FormJdbc extends BI.Widget {
{
type: BI.TextValueCombo.xtype,
$value: 'schema',
width: 300,
vgap: 15,
width: EDITOR_WIDTH,
tgap: 15,
disabled: true,
value: schema,
items: schema ? [{ text: schema, value: schema }] : [],
@ -593,6 +612,209 @@ export class FormJdbc extends BI.Widget {
this.schemaForm = _ref;
},
},
// 并行装载设置
{
type: Collapse.xtype,
invisible: BI.isNull(parallelLoad),
name: BI.i18nText('Dec-Dcm_Connection_Setting', BI.i18nText('Dec-Dcm_Connection_Parallel_Load')),
el: {
type: TipsCombo.xtype,
_lgap: 6,
el: {
type: BI.CenterAdaptLayout.xtype,
innerHgap: 15,
innerVgap: 10,
items: [
{
type: BI.Label.xtype,
text: BI.i18nText('Dec-Dcm_Connection_Setting_Tips', BI.i18nText('Dec-Dcm_Connection_Parallel_Load')),
},
/**
* FIXME: 帮助链接待提供
*/
{
type: BI.A.xtype,
href: '',
el: {
type: BI.Label.xtype,
text: BI.i18nText('Dec-BI_Help_Paper'),
}
}
]
}
},
listeners: [
{
eventName: EVENT_CHANGE,
action: (isCollapse: boolean) => {
this.parallelLoadSet.setVisible(!isCollapse);
}
}
]
},
{
type: BI.VerticalLayout.xtype,
invisible: true,
ref: (_ref: VerticalLayout) => {
this.parallelLoadSet = _ref;
},
items: [
{
// 服务器地址-节点1
type: FormItem.xtype,
name: `${BI.i18nText('Dec-Dcm_Connection_Server_Address')}-${BI.i18nText('Dec-Memory_Detection_Server_Cluster_Node', '1')}`,
_bgap: vgap,
forms: [
{
type: BI.TextValueCombo.xtype,
$value: 'server-cluster-node',
width: EDITOR_WIDTH,
value: parallelLoad?.serverAddress ?? '',
items: parallelLoad?.serverAddressItems || [],
listeners: [
{
eventName: BI.TextValueCombo.EVENT_CHANGE,
action: (value: string) => {
this.form.parallelLoad.serverAddress = value;
}
}
]
},
],
},
{
// 复用临时表
type: FormItem.xtype,
name: BI.i18nText('Dec-Dcm_Connection_Reuse_Temporary_Table'),
_bgap: vgap,
forms: [
{
type: BI.TextValueCombo.xtype,
$value: 'reuse-temporary-table',
width: EDITOR_WIDTH,
value: parallelLoad?.reuseTemporaryTable ?? 0,
items: YES_OR_NO,
watermark: BI.i18nText('Dec-Dcm_Connection_Reuse_Temporary_Table'),
listeners: [
{
eventName: BI.TextValueCombo.EVENT_CHANGE,
action: (value: number) => {
this.form.parallelLoad.isReuseTemporaryTable = value;
}
}
]
},
],
},
{
// 临时文件条数限制
type: FormItem.xtype,
name: BI.i18nText('Dec-Dcm_Connection_Temporary_File_Pieces_Limit'),
_bgap: vgap,
forms: [
{
type: BI.Editor.xtype,
$value: 'temporary-file-pieces-limit',
cls: 'bi-border bi-border-radius',
width: EDITOR_WIDTH,
height: EDITOR_HEIGHT,
allowBlank: true,
value: parallelLoad?.filePiecesLimit ?? '',
watermark: BI.i18nText('Dec-Dcm_Connection_Temporary_File_Pieces_Limit'),
ref: (_ref: Editor) => {
this.form.parallelLoad.filePiecesLimit = _ref;
},
},
],
},
{
// 临时文件大小限制(MB)
type: FormItem.xtype,
name: BI.i18nText('Dec-Dcm_Connection_Temporary_File_Size_Limit'),
forms: [
{
type: BI.Editor.xtype,
$value: 'temporary-file-size-limit',
cls: 'bi-border bi-border-radius',
width: EDITOR_WIDTH,
height: EDITOR_HEIGHT,
allowBlank: true,
value: parallelLoad?.fileSizeLimit ?? '',
watermark: BI.i18nText('Dec-Dcm_Connection_Temporary_File_Size_Limit'),
ref: (_ref: Editor) => {
this.form.parallelLoad.fileSizeLimit = _ref;
},
},
],
},
]
},
// HDFS设置
{
type: Collapse.xtype,
invisible: BI.isNull(hdfs),
name: BI.i18nText('Dec-Dcm_Connection_Setting', 'HDFS'),
el: {
type: TipsCombo.xtype,
_lgap: 6,
el: {
type: BI.CenterAdaptLayout.xtype,
innerHgap: 15,
innerVgap: 10,
items: [
{
type: BI.Label.xtype,
text: BI.i18nText('Dec-Dcm_Connection_Setting_Tips', 'HDFS'),
},
{
type: BI.A.xtype,
href: '',
el: {
type: BI.Label.xtype,
text: BI.i18nText('Dec-BI_Help_Paper'),
}
}
]
}
},
listeners: [
{
eventName: EVENT_CHANGE,
action: (isCollapse: boolean) => {
this.hdfsSet.setVisible(!isCollapse);
}
}
]
},
{
type: BI.VerticalLayout.xtype,
invisible: true,
ref: (_ref: VerticalLayout) => {
this.hdfsSet = _ref;
},
items: [
{
// HDFS地址
type: FormItem.xtype,
name: BI.i18nText('Dec-Dcm_Connection_Address', 'HDFS'),
forms: [
{
type: BI.Editor.xtype,
$value: 'hdfs-connection-address',
cls: 'bi-border bi-border-radius',
width: EDITOR_WIDTH,
height: EDITOR_HEIGHT,
allowBlank: true,
value: hdfs?.hdfsAddress ?? '',
watermark: BI.i18nText('Dec-Dcm_Connection_Address', 'HDFS'),
ref: (_ref: Editor) => {
this.form.hdfs.hdfsAddress = _ref;
},
},
],
}
]
},
// 分隔线
{
type: BI.Layout.xtype,
@ -607,7 +829,7 @@ export class FormJdbc extends BI.Widget {
{
type: BI.TextEditor.xtype,
$value: 'database-url',
width: 300,
width: EDITOR_WIDTH,
allowBlank: true,
value: url,
watermark: BI.i18nText('Dec-Dcm_Connection_Form_Database_URL'),
@ -636,7 +858,7 @@ export class FormJdbc extends BI.Widget {
{
type: TextChecker.xtype,
$value: 'max-active',
width: 300,
width: EDITOR_WIDTH,
allowBlank: false,
value: maxActive,
watermark: BI.i18nText('Dec-Dcm_Connection_Form_Database_Max_Active'),
@ -662,7 +884,7 @@ export class FormJdbc extends BI.Widget {
{
type: BI.TextValueCombo.xtype,
$value: 'check',
width: 300,
width: EDITOR_WIDTH,
allowBlank: true,
value: testOnBorrow,
items: this.getBooleanItem(),
@ -685,7 +907,7 @@ export class FormJdbc extends BI.Widget {
allowBlank: true,
watermark: BI.i18nText('Dec-Dcm_Connection_Form_SQL_Validation_Query_Watermark'),
value: api.getPlain(validationQuery || ''),
width: 300,
width: EDITOR_WIDTH,
height: 100,
ref: (_ref: TextAreaEditor) => {
this.form.validationQuery = _ref;
@ -701,7 +923,7 @@ export class FormJdbc extends BI.Widget {
{
type: TextChecker.xtype,
$value: 'max-wait',
width: 300,
width: EDITOR_WIDTH,
allowBlank: false,
value: maxWait,
watermark: BI.i18nText('Dec-Dcm_Connection_Form_Database_Max_Wait'),
@ -842,7 +1064,7 @@ export class FormJdbc extends BI.Widget {
ref: (_ref: TextValueCombo) => {
this.form.sshType = _ref;
},
width: 300,
width: EDITOR_WIDTH,
watermark: BI.i18nText('Dec-Dcm_Connection_Form_VerifyType'),
items: CONNECT_SSH_TYPE,
value: sshType,
@ -985,7 +1207,7 @@ export class FormJdbc extends BI.Widget {
ref: (_ref: TextValueCombo) => {
this.form.verifyCa = _ref;
},
width: 300,
width: EDITOR_WIDTH,
watermark: BI.i18nText('Dec-Dcm_Connection_Form_Verify_CA_Certificate'),
items: this.getBooleanItem(),
value: verifyCa,
@ -1059,7 +1281,7 @@ export class FormJdbc extends BI.Widget {
{
type: TextChecker.xtype,
$value: 'initial-size',
width: 300,
width: EDITOR_WIDTH,
allowBlank: false,
value: initialSize,
validationChecker: [
@ -1084,7 +1306,7 @@ export class FormJdbc extends BI.Widget {
{
type: TextChecker.xtype,
$value: 'min-idle',
width: 300,
width: EDITOR_WIDTH,
allowBlank: false,
value: minIdle,
watermark: BI.i18nText('Dec-Dcm_Connection_Form_Database_Min_Idle'),
@ -1109,7 +1331,7 @@ export class FormJdbc extends BI.Widget {
{
type: BI.TextValueCombo.xtype,
$value: 'test-on-return',
width: 300,
width: EDITOR_WIDTH,
allowBlank: true,
value: testOnReturn,
items: this.getBooleanItem(),
@ -1127,7 +1349,7 @@ export class FormJdbc extends BI.Widget {
{
type: BI.TextValueCombo.xtype,
$value: 'test-while-idle',
width: 300,
width: EDITOR_WIDTH,
allowBlank: true,
value: testWhileIdle,
items: this.getBooleanItem(),
@ -1145,7 +1367,7 @@ export class FormJdbc extends BI.Widget {
{
type: TextChecker.xtype,
$value: 'test-between-evicition-millis',
width: 300,
width: EDITOR_WIDTH,
allowBlank: false,
value: timeBetweenEvictionRunsMillis,
watermark: BI.i18nText('Dec-Dcm_Connection_Form_Database_Test_Between_Eviction_Millis'),
@ -1176,7 +1398,7 @@ export class FormJdbc extends BI.Widget {
{
type: TextChecker.xtype,
$value: 'test-pereviction-run-num',
width: 300,
width: EDITOR_WIDTH,
allowBlank: false,
value: numTestsPerEvictionRun,
watermark: BI.i18nText('Dec-Dcm_Connection_Form_Database_Tests_PerEviction_Run_Num'),
@ -1201,7 +1423,7 @@ export class FormJdbc extends BI.Widget {
{
type: TextChecker.xtype,
$value: 'min-evictable-idle-time-millis',
width: 300,
width: EDITOR_WIDTH,
allowBlank: false,
value: minEvictableIdleTimeMillis,
watermark: BI.i18nText('Dec-Dcm_Connection_Form_Database_Min_Evictable_Idle_Time_Millis'),
@ -1239,7 +1461,7 @@ export class FormJdbc extends BI.Widget {
{
type: TextChecker.xtype,
$value: 'fetch-size',
width: 300,
width: EDITOR_WIDTH,
allowBlank: true,
value: fetchSize === -2 ? '' : fetchSize,
watermark: 'Fetchsize',
@ -1422,6 +1644,7 @@ export class FormJdbc extends BI.Widget {
const connectionPoolAttr = connectionData.connectionPoolAttr;
const originalCharsetName = this.form.originalCharsetName.getValue()[0] || '';
// TODO 获取表单数据这里待优化
const { parallelLoad, hdfs } = this.form;
return {
connectionType: connectionType.JDBC,
@ -1478,6 +1701,17 @@ export class FormJdbc extends BI.Widget {
numTestsPerEvictionRun: this.form.numTestsPerEvictionRun.getValue(),
minEvictableIdleTimeMillis: this.form.minEvictableIdleTimeMillis.getValue(),
},
// 并行装载
parallelLoad: {
serverAddress: parallelLoad.serverAddress,
isReuseTemporaryTable: parallelLoad.isReuseTemporaryTable,
filePiecesLimit: parallelLoad.filePiecesLimit.getValue(),
fileSizeLimit: parallelLoad.fileSizeLimit.getValue(),
},
hdfs: {
hdfsAddress: hdfs.hdfsAddress.getValue(),
}
// HDFS
}),
};
}

17
src/modules/pages/maintain/forms/form.ts

@ -38,8 +38,8 @@ export class MaintainForm extends BI.Widget {
value.creator = BI.get(this.getFormData(), 'creator');
this.store.updateConnection(this.connectionName, value).then(result => {
if (result.errorCode) {
if(result.errorCode === DecCst.ErrorCode.NO_IP_AUTHORIZED){
BI.Msg.toast(BI.i18nText("Dec-Basic_Save_Fail"),{
if (result.errorCode === DecCst.ErrorCode.NO_IP_AUTHORIZED) {
BI.Msg.toast(BI.i18nText("Dec-Basic_Save_Fail"), {
level: "error",
});
}
@ -121,15 +121,16 @@ export class MaintainForm extends BI.Widget {
let editConnection: Connection;
let connectionData: ConnectionJDBC;
if (this.model.datebaseTypeSelected) {
const { databaseType: database, fetchSize } = this.model.datebaseTypeSelectedOne;
connectionData = {
driver: this.model.datebaseTypeSelectedOne.driver,
url: this.model.datebaseTypeSelectedOne.url,
database: this.model.datebaseTypeSelectedOne.databaseType,
...this.model.datebaseTypeSelectedOne,
database,
connectionName,
connectionPoolAttr: DEFAULT_JDBC_POOL,
port: '',
host: 'localhost',
fetchSize: this.model.datebaseTypeSelectedOne.fetchSize ?? -1,
fetchSize: fetchSize ?? -1,
identity: BI.UUID(),
};
editConnection = {
@ -258,8 +259,8 @@ export class MaintainForm extends BI.Widget {
private addConnection(form: Connection) {
this.store.addConnection(form).then(result => {
if (result.errorCode) {
if(result.errorCode === DecCst.ErrorCode.NO_IP_AUTHORIZED){
BI.Msg.toast(BI.i18nText("Dec-Basic_Save_Fail"),{
if (result.errorCode === DecCst.ErrorCode.NO_IP_AUTHORIZED) {
BI.Msg.toast(BI.i18nText("Dec-Basic_Save_Fail"), {
level: "error",
});
}

26
tsconfig.json

@ -5,8 +5,8 @@
"module": "es2015",
"moduleResolution": "node",
"lib": [
"es2017",
"dom"
"es2017",
"dom"
],
"declaration": true,
"experimentalDecorators": true,
@ -21,11 +21,21 @@
"noFallthroughCasesInSwitch": true,
"skipLibCheck": false,
"paths": {
"ui": ["./src/ui"],
"ReportCst": ["./private/constants"],
"types": ["./types/index.d.ts"],
"@core/*": ["./src/modules/core/*"],
"@constants/*": ["./src/modules/constants/*"]
"ui": [
"./src/ui"
],
"ReportCst": [
"./private/constants"
],
"types": [
"./types/index.d.ts"
],
"@core/*": [
"./src/modules/core/*"
],
"@constants/*": [
"./src/modules/constants/*"
]
}
},
"include": [
@ -33,6 +43,6 @@
"src/**/*.ts",
"private/*.ts",
"private/**/*.ts",
"types/globals.d.ts"
"types"
]
}

1
types/globals.d.ts vendored

@ -16,6 +16,7 @@ declare const Dec: {
personal: {
username: string;
};
reqByEncrypt: (method: AxiosType.X_Method, url: string, data?: any, config?: AxiosType.X_AxiosRequestConfig) => {},
socketEmit: (type: string, name: string, callback: (re: any) => void) => void;
// req
reqGet: RequestFunction;

9
types/request.d.ts vendored

@ -0,0 +1,9 @@
import { Method, AxiosRequestConfig } from 'axios';
declare namespace AxiosType {
type X_Method = Method
interface X_AxiosRequestConfig extends AxiosRequestConfig { }
}
export = AxiosType;
export as namespace AxiosType;
Loading…
Cancel
Save