diff --git a/src/modules/components/collapse/collapse.ts b/src/modules/components/collapse/collapse.ts index edaa9e5..de2c51d 100644 --- a/src/modules/components/collapse/collapse.ts +++ b/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, ], }; } diff --git a/src/modules/components/tips_combo/tips_combo.ts b/src/modules/components/tips_combo/tips_combo.ts new file mode 100644 index 0000000..c1b049a --- /dev/null +++ b/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; + } + } + } +} \ No newline at end of file diff --git a/src/modules/constants/constant.ts b/src/modules/constants/constant.ts index 65df36e..dbf1b28 100644 --- a/src/modules/constants/constant.ts +++ b/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, + } +] \ No newline at end of file diff --git a/src/modules/crud/crud.typings.d.ts b/src/modules/crud/crud.typings.d.ts index 339f02a..0193583 100644 --- a/src/modules/crud/crud.typings.d.ts +++ b/src/modules/crud/crud.typings.d.ts @@ -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; diff --git a/src/modules/pages/connection/connection_jdbc/connection_jdbc.ts b/src/modules/pages/connection/connection_jdbc/connection_jdbc.ts index 9651233..817b50d 100644 --- a/src/modules/pages/connection/connection_jdbc/connection_jdbc.ts +++ b/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'), diff --git a/src/modules/pages/maintain/forms/components/form.jdbc.ts b/src/modules/pages/maintain/forms/components/form.jdbc.ts index 9cf4aad..869f63d 100644 --- a/src/modules/pages/maintain/forms/components/form.jdbc.ts +++ b/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 }), }; } diff --git a/src/modules/pages/maintain/forms/form.ts b/src/modules/pages/maintain/forms/form.ts index 9ac3908..609b880 100644 --- a/src/modules/pages/maintain/forms/form.ts +++ b/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", }); }