diff --git a/README.md b/README.md index 5474677..cca899a 100644 --- a/README.md +++ b/README.md @@ -25,196 +25,193 @@ yarn dev BI.config(ConstantPluginTyps, (datas: string[]) => [...datas, { text: 'Redis', databaseType: 'Redis', + edit: '', + show: '', }]); ``` ### 数据连接填写页面 -ConstantName名称为`dec.constant.database.conf.connect.form.${name}.edit`,值为组件shortcut的名称 +edit属性值为填写组件shortcut的名称 ### 数据连接展示页面 -ConstantName名称为`dec.constant.database.conf.connect.form.${name}.show`,值为组件shortcut的名称 +show属性值为组件shortcut的名称 ### 示例 ``` -const ConstantRedisType = 'dec.constant.database.conf.connect.types'; -const ConstantRedisShow = 'dec.constant.database.conf.connect.form.Redis.show'; -const ConstantRedisEdit = 'dec.constant.database.conf.connect.form.Redis.edit'; - -BI.DOM.ready(() => { - BI.config(ConstantRedisType, datas => [...datas, { - text: 'Redis', - databaseType: 'Redis', - }]); - - const RedisShowName = 'dec.dcm.connection.plugin.redis.show'; - const RedisShow = BI.inherit(BI.Widget, { - props: { - formData: { - url: '', - port: '6379', - password: '', - }, - }, - render() { - const o = this.options; - - return { - type: 'bi.vertical', - hgap: 15, - vgap: 10, - items: [ - { - type: 'bi.left', - items: [ - { - type: 'bi.label', - cls: 'bi-font-bold', - width: 100, - textAlign: 'left', - text: '数据库地址', - }, - { - type: 'bi.label', - text: o.formData.url, - }, - ], - }, - { - type: 'bi.left', - items: [ - { - type: 'bi.label', - cls: 'bi-font-bold', - width: 100, - textAlign: 'left', - text: '端口号', - }, - { - type: 'bi.label', - text: o.formData.port, - }, - ], - }, - { - type: 'bi.left', - items: [ - { - type: 'bi.label', - cls: 'bi-font-bold', - width: 100, - textAlign: 'left', - text: '密码', - }, - { - type: 'bi.label', - text: o.formData.password, - }, - ], - }, - ], - }; - }, +const DataBaseConfigProvider = 'dec.connection.provider.datebase'; + +const RedisShowName = 'dec.dcm.connection.plugin.redis.show'; +const RedisEditName = 'dec.dcm.connection.plugin.redis.edit'; +BI.config(DataBaseConfigProvider, function (provider) { + provider.registerDatabaseType({ + text: "Redis", + databaseType: "Redis", + edit: "dec.dcm.connection.plugin.demo.edit", + show: "dec.dcm.connection.plugin.demo.show", }); +}); - BI.shortcut(RedisShowName, RedisShow); - BI.constant(ConstantRedisShow, RedisShowName); - - - const RedisEditName = 'dec.dcm.connection.plugin.redis.edit'; - const RedisEdit = BI.inherit(BI.Widget, { - props: { - formData: { - url: '', - port: '6379', - password: '', - }, +const RedisShow = BI.inherit(BI.Widget, { + props: { + formData: { + url: '', + port: '6379', + password: '', }, - render() { - const o = this.options; - - return { - type: 'bi.vertical', - hgap: 15, - vgap: 10, - items: [ - { - type: 'bi.left', - items: [ - { - type: 'bi.label', - cls: 'bi-font-bold', - width: 100, - textAlign: 'left', - text: '数据库地址', - }, - { - type: 'bi.text_editor', - width: 300, - allowBlank: true, - ref: _ref => { - this.url = _ref; - }, - text: o.formData.url, - }, - ], - }, - { - type: 'bi.left', - items: [ - { - type: 'bi.label', - cls: 'bi-font-bold', - width: 100, - textAlign: 'left', - text: '端口号', - }, - { - type: 'bi.text_editor', - width: 300, - allowBlank: true, - ref: _ref => { - this.port = _ref; - }, - text: o.formData.port, + }, + render() { + const o = this.options; + + return { + type: 'bi.vertical', + hgap: 15, + vgap: 10, + items: [ + { + type: 'bi.left', + items: [ + { + type: 'bi.label', + cls: 'bi-font-bold', + width: 100, + textAlign: 'left', + text: '数据库地址', + }, + { + type: 'bi.label', + text: o.formData.url, + }, + ], + }, + { + type: 'bi.left', + items: [ + { + type: 'bi.label', + cls: 'bi-font-bold', + width: 100, + textAlign: 'left', + text: '端口号', + }, + { + type: 'bi.label', + text: o.formData.port, + }, + ], + }, + { + type: 'bi.left', + items: [ + { + type: 'bi.label', + cls: 'bi-font-bold', + width: 100, + textAlign: 'left', + text: '密码', + }, + { + type: 'bi.label', + text: o.formData.password, + }, + ], + }, + ], + }; + }, +}); +BI.shortcut(RedisShowName, RedisShow); + +const RedisEdit = BI.inherit(BI.Widget, { + props: { + value: { + url: '', + port: '6379', + password: '', + }, + }, + render() { + const o = this.options; + + return { + type: 'bi.vertical', + hgap: 15, + vgap: 10, + items: [ + { + type: 'bi.left', + items: [ + { + type: 'bi.label', + cls: 'bi-font-bold', + width: 100, + textAlign: 'left', + text: '数据库地址', + }, + { + type: 'bi.text_editor', + width: 300, + allowBlank: true, + ref: _ref => { + this.url = _ref; }, - ], - }, - { - type: 'bi.left', - items: [ - { - type: 'bi.label', - cls: 'bi-font-bold', - width: 100, - textAlign: 'left', - text: '密码', + text: o.value.url, + }, + ], + }, + { + type: 'bi.left', + items: [ + { + type: 'bi.label', + cls: 'bi-font-bold', + width: 100, + textAlign: 'left', + text: '端口号', + }, + { + type: 'bi.text_editor', + width: 300, + allowBlank: true, + ref: _ref => { + this.port = _ref; }, - { - type: 'bi.text_editor', - width: 300, - allowBlank: true, - inputType: 'password', - ref: _ref => { - this.password = _ref; - }, - text: o.formData.password, + text: o.value.port, + }, + ], + }, + { + type: 'bi.left', + items: [ + { + type: 'bi.label', + cls: 'bi-font-bold', + width: 100, + textAlign: 'left', + text: '密码', + }, + { + type: 'bi.text_editor', + width: 300, + allowBlank: true, + inputType: 'password', + ref: _ref => { + this.password = _ref; }, - ], - }, - ], - }; - }, - getSubmitValue() { - return { - url: this.url.getValue(), - port: this.port.getValue(), - password: this.password.getValue(), - }; - }, - }); - - BI.shortcut(RedisEditName, RedisEdit); - BI.constant(ConstantRedisEdit, RedisEditName); + text: o.value.password, + }, + ], + }, + ], + }; + }, + getValue() { + return { + url: this.url.getValue(), + port: this.port.getValue(), + password: this.password.getValue(), + }; + }, }); +BI.shortcut(RedisEditName, RedisEdit); -``` \ No newline at end of file +``` diff --git a/src/modules/crud/api.ts b/src/modules/crud/api.ts index 8757a7f..0122e48 100644 --- a/src/modules/crud/api.ts +++ b/src/modules/crud/api.ts @@ -9,7 +9,7 @@ export interface Api { /** * 获取已添加的数据连接 */ - getConnectionlist(): Promise<{data?: Connection[]}>; + getConnectionlist(): Promise<{ data?: Connection[] }>; /** * 删除数据连接 @@ -38,7 +38,7 @@ export interface Api { * 获取连接池数据 * @param name */ - getConnectionPool(name: string): Promise<{data?: ConnectionPoolType}>; + getConnectionPool(name: string): Promise<{ data?: ConnectionPoolType }>; /** * 获取连接状态 @@ -67,6 +67,11 @@ export interface Api { */ getCipher(password: string): string; + /** + * 获取解密后文本 + */ + getPlain(cipher: string): string; + /** * 获取外链 */ diff --git a/src/modules/crud/decision.api.ts b/src/modules/crud/decision.api.ts index a39c2f7..6c2f2a5 100644 --- a/src/modules/crud/decision.api.ts +++ b/src/modules/crud/decision.api.ts @@ -6,7 +6,7 @@ import { editStatusEvent, errorCode } from '@constants/env'; export class DecisionApi implements Api { isDec = true; - getConnectionlist(): Promise<{data?: Connection[]}> { + getConnectionlist(): Promise<{ data?: Connection[] }> { return requestGet('list', {}); } @@ -20,31 +20,31 @@ export class DecisionApi implements Api { const form = { ...data, connectionId: data.connectionId || data.connectionName, - connectionData : JSON.stringify(data.connectionData), + connectionData: JSON.stringify(data.connectionData), }; - + return requestPost('', form); } updateConnection(data: Connection) { const form = { ...data, - connectionData : JSON.stringify(data.connectionData), + connectionData: JSON.stringify(data.connectionData), }; - + return requestPut('', form); } testConnection(data: Connection): Promise { const form = { ...data, - connectionData : JSON.stringify(data.connectionData), + connectionData: JSON.stringify(data.connectionData), }; - + return requestPost('test', form); } - getConnectionPool(name: string): Promise<{data?: ConnectionPoolType}> { + getConnectionPool(name: string): Promise<{ data?: ConnectionPoolType }> { return requestGet(`pool/info?connectionName=${encodeURIComponent(name)}`, {}); } @@ -81,7 +81,7 @@ export class DecisionApi implements Api { if (Dec) { return Dec.socket.connected; } - + return false; } @@ -89,7 +89,7 @@ export class DecisionApi implements Api { if (Dec) { return DecCst.ErrorCode.LACK_DRIVER === errorCode; } - + return false; } @@ -97,6 +97,10 @@ export class DecisionApi implements Api { return BI.Providers.getProvider('dec.provider.cipher').getCipher(password); } + getPlain(cipher: string) { + return BI.Providers.getProvider('dec.provider.cipher').getPlain(cipher); + } + getHyperlink(name: string) { return Dec.system[DecCst.Hyperlink.DECISION_HYPERLINK_CONFIG][name]; } diff --git a/src/modules/crud/design.api.ts b/src/modules/crud/design.api.ts index ee983e8..2402db7 100644 --- a/src/modules/crud/design.api.ts +++ b/src/modules/crud/design.api.ts @@ -4,26 +4,26 @@ import { Connection, TestRequest, ConnectionPoolType, SocketResult } from './cru export class DesignApi implements Api { isDec = false; - - getConnectionlist(): Promise<{data: Connection[]}> { + + getConnectionlist(): Promise<{ data: Connection[] }> { return new Promise(resolve => { resolve({ data: [] }); }); } - deleteConnection(connectionName: string): Promise<{data: string}> { + deleteConnection(connectionName: string): Promise<{ data: string }> { return new Promise(resolve => { resolve({ data: 'success' }); }); } - addConnection(data: Connection): Promise<{data: string}> { + addConnection(data: Connection): Promise<{ data: string }> { return new Promise(resolve => { resolve({ data: 'success' }); }); } - updateConnection(data: Connection): Promise<{data: string}> { + updateConnection(data: Connection): Promise<{ data: string }> { return new Promise(resolve => { resolve({ data: 'success' }); }); @@ -34,14 +34,16 @@ export class DesignApi implements Api { }); } - getConnectionPool(name: string): Promise<{data: ConnectionPoolType}> { + getConnectionPool(name: string): Promise<{ data: ConnectionPoolType }> { return new Promise(resolve => { - resolve({ data: { - maxActive: 1, - maxIdle: 1, - numActive: 1, - numIdle: 1, - } }); + resolve({ + data: { + maxActive: 1, + maxIdle: 1, + numActive: 1, + numIdle: 1, + } + }); }); } @@ -72,6 +74,11 @@ export class DesignApi implements Api { return password; } + getPlain(cipher: string) { + // 设计器解密方法 + return cipher; + } + getHyperlink(name: string) { // 设计器获取超链 return ''; diff --git a/src/modules/pages/maintain/forms/components/form.jdbc.ts b/src/modules/pages/maintain/forms/components/form.jdbc.ts index 700564c..a527cd6 100644 --- a/src/modules/pages/maintain/forms/components/form.jdbc.ts +++ b/src/modules/pages/maintain/forms/components/form.jdbc.ts @@ -64,13 +64,13 @@ export class FormJdbc extends BI.Widget { this.oldPassword = password; const { host, port, databaseName } = resolveUrlInfo(url, database); const { hgap, vgap } = CONNECTION_LAYOUT; - + const valueRangeConfig = { errorText: BI.i18nText('Dec-Dcm_Connection_Value_Out_Range'), checker: (value: string) => this.checkValueRange(value), autoFix: true, }; - + return { type: BI.VerticalLayout.xtype, hgap, @@ -360,7 +360,7 @@ export class FormJdbc extends BI.Widget { vgap: 15, disabled: true, value: schema, - items: schema ? [{ text: schema, value:schema }] : [], + items: schema ? [{ text: schema, value: schema }] : [], ref: (_ref: TextValueCombo) => { this.form.schema = _ref; }, @@ -537,7 +537,7 @@ export class FormJdbc extends BI.Widget { cls: 'bi-border', allowBlank: true, watermark: BI.i18nText('Dec-Dcm_Connection_Form_Place_Input'), - value: validationQuery, + value: api.getPlain(validationQuery || ''), width: 300, height: 100, ref: (_ref: TextAreaEditor) => { @@ -715,7 +715,7 @@ export class FormJdbc extends BI.Widget { ...drivers, ]; } - + return drivers; } @@ -756,12 +756,12 @@ export class FormJdbc extends BI.Widget { } } - public getSubmitValue():Connection { + public getSubmitValue(): Connection { const connectionData = this.options.formData.connectionData as ConnectionJDBC; const connectionPoolAttr = connectionData.connectionPoolAttr; const originalCharsetName = this.form.originalCharsetName.getValue()[0] || ''; // TODO 获取表单数据这里待优化 - + return { connectionType: connectionType.JDBC, connectionId: this.form.connectionName.getValue(), @@ -788,7 +788,7 @@ export class FormJdbc extends BI.Widget { maxIdle: this.form.maxIdle.getValue(), minIdle: this.form.minIdle.getValue(), maxWait: this.form.maxWait.getValue(), - validationQuery: this.form.validationQuery.getValue(), + validationQuery: api.getCipher(this.form.validationQuery.getValue()), testOnBorrow: BI.size(this.form.testOnBorrow.getValue()) > 0 ? this.form.testOnBorrow.getValue()[0] : connectionPoolAttr.testOnBorrow, testOnReturn: BI.size(this.form.testOnReturn.getValue()) > 0 ? this.form.testOnReturn.getValue()[0] : connectionPoolAttr.testOnReturn, testWhileIdle: BI.size(this.form.testWhileIdle.getValue()) > 0 ? this.form.testWhileIdle.getValue()[0] : connectionPoolAttr.testWhileIdle, diff --git a/src/modules/pages/maintain/forms/components/form.plugin.ts b/src/modules/pages/maintain/forms/components/form.plugin.ts index ae9646e..8fd8fc9 100644 --- a/src/modules/pages/maintain/forms/components/form.plugin.ts +++ b/src/modules/pages/maintain/forms/components/form.plugin.ts @@ -1,6 +1,7 @@ -import { shortcut } from '@core/core'; -import { Connection } from 'src/modules/crud/crud.typings'; -import { getPluginWidgetEdit } from '../../../../app.service'; +import {shortcut} from '@core/core'; +import {Connection} from 'src/modules/crud/crud.typings'; +import {getPluginWidgetEdit} from '../../../../app.service'; + @shortcut() export class FormPlugin extends BI.Widget { static xtype = 'dec.dcm.maintain_plugin'; @@ -11,24 +12,28 @@ export class FormPlugin extends BI.Widget { plugin: any; render() { - const { connectionType } = this.options.formData; - + const { connectionType, connectionId, connectionName, connectionData } = this.options.formData; + return { type: getPluginWidgetEdit(connectionType), ref: (_ref: any) => { this.plugin = _ref; }, - value: this.options.formData.connectionData, + value: connectionData, // 兼容 + connectionData, + connectionId, + connectionType, + connectionName, }; } public getSubmitValue(): Connection { const { connectionType, connectionId, connectionName } = this.options.formData; - + return { connectionId, connectionType, - connectionName, + connectionName: this.plugin.getConnectionName ? this.plugin.getConnectionName() : connectionName, connectionData: this.plugin.getValue(), }; } diff --git a/src/modules/pages/maintain/forms/form.server.ts b/src/modules/pages/maintain/forms/form.server.ts index dc52f4c..d378768 100644 --- a/src/modules/pages/maintain/forms/form.server.ts +++ b/src/modules/pages/maintain/forms/form.server.ts @@ -12,7 +12,7 @@ export function testConnection(value: Connection): Promise { BI.Msg.toast(BI.i18nText('Dec-Dcm_Connection_ConnectionName_Cannt_Null'), { level: 'error', }); - + return false; } const id = BI.UUID(); @@ -27,7 +27,7 @@ export function testConnection(value: Connection): Promise { // DEC-14009 1.8以上版本JDK支持ODBC连接 if (driver === JDBC_ODBC_DRIVER) { testStatus.setFail(re.errorMsg, driver, Dec.system[DecCst.Hyperlink.DECISION_HYPERLINK_CONFIG][JDBC_ODBC_DRIVER_HELP_LINK]); - + return; } const databaseType = (formValue.connectionData as ConnectionJDBC).database; @@ -63,7 +63,7 @@ export function testConnection(value: Connection): Promise { loadingCls: 'upload-loading-icon', successText: BI.i18nText('Dec-Dcm_Connection_Test_Success'), successCls: 'upload-success-icon', - failText: BI.i18nText('Dec-Dcm_Connection_Test_Fail', name), + failText: BI.i18nText('Dec-Dcm_Connection_Test_Fail', ''), failCls: 'upload-fail-icon', retryText: BI.i18nText('Dec-Dcm_Connection_ReConnect'), ref: (_ref: any) => {