Browse Source

Merge pull request #4 in DEC/decision-webui-dcm from ~ALAN/decision-webui-dcm:feature/10.0 to feature/10.0

* commit '5824afdda940d046682b51af9f77b16aed3b73ad': (32 commits)
  refactor: 使用bi.linear_segment替换掉自己实现的tab
  refactor: 修正不规范的写法
  refactor: 修正不规范的写法
  refactor: 修正不规范的写法
  refactor: 优化代码结构
  refactor: 逻辑代码放到model中
  refactor: 修正不规范的写法
  refactor: 优化布局的使用
  refactor: 使用TextEditor替代Editor
  refactor: 修正不规范的写法
  refactor: 清理不必要的 cursor-pointer, 使用 hover-visible
  refactor: 将样式放到组件同级
  refactor: 把内部方法移出actions
  refactor: 应该是阻止冒泡
  refactor: 优化BI.BasicButton的用法
  refactor: 尽量使用通用样式
  refactor: 去掉text_value_combo的boder样式,因为已经自带了
  refactor: update
  refactor: 使用BI.Popovers.close(id)方式关闭Popovers
  refactor: 去掉 extraCls
  ...
qufenxi
alan 6 years ago
parent
commit
c55fe27149
  1. 7
      i18n/zh_cn.properties
  2. 5
      package.json
  3. 365
      private/constants.ts
  4. 8
      private/i18n.ts
  5. 329
      src/app/app.component.scss
  6. 48
      src/app/app.component.ts
  7. 1
      src/app/app.constant.ts
  8. 15
      src/app/app.model.ts
  9. 55
      src/app/app.ts
  10. 4
      src/app/connection/left/item/left_item.less
  11. 77
      src/app/connection/left/item/left_item.ts
  12. 43
      src/app/connection/left/item/left_item_delete.ts
  13. 26
      src/app/connection/left/item/left_item_icon.ts
  14. 39
      src/app/connection/left/left.ts
  15. 50
      src/app/connection/link_set.mixin.ts
  16. 154
      src/app/connection/link_set.model.ts
  17. 0
      src/app/connection/link_set.service.ts
  18. 26
      src/app/connection/link_set.ts
  19. 6
      src/app/connection/more/item/more_link_item.less
  20. 68
      src/app/connection/more/item/more_link_item.ts
  21. 6
      src/app/connection/more/item/more_link_litem.model.ts
  22. 16
      src/app/connection/more/more_link.model.ts
  23. 28
      src/app/connection/more/more_link.service.ts
  24. 52
      src/app/connection/more/more_link.ts
  25. 20
      src/app/connection/right/nothing.ts
  26. 33
      src/app/connection/right/right.ts
  27. 25
      src/app/connection/right/right.typing.d.ts
  28. 6
      src/app/connection/right/right_detail/right_detail.model.ts
  29. 74
      src/app/connection/right/right_detail/right_detail.ts
  30. 20
      src/app/connection/right/right_edit/right_edit.model.ts
  31. 0
      src/app/connection/right/right_edit/right_edit.service.ts
  32. 373
      src/app/connection/right/right_edit/right_edit.ts
  33. 226
      src/app/connection/right/right_edit/right_edit_jndi.ts
  34. 325
      src/app/connection/right/right_edit/right_edit_mysql.ts
  35. 20
      src/app/connection/right/right_show/right_show.model.ts
  36. 10
      src/app/connection/right/right_show/right_show.ts
  37. 203
      src/app/connection/right/right_show/right_show_jndi.ts
  38. 20
      src/app/connection/right/right_title/right_title.model.ts
  39. 66
      src/app/connection/right/right_title/right_title.ts
  40. 23
      src/app/connection/select/select.service.ts
  41. 30
      src/app/connection/select/select.ts
  42. 26
      src/app/link_set/left/left.component.ts
  43. 18
      src/app/link_set/left/left.service.ts
  44. 80
      src/app/link_set/left/left_item/left.item.component.ts
  45. 81
      src/app/link_set/left/left_item/left.item.icon.component.ts
  46. 195
      src/app/link_set/link-set.model.ts
  47. 56
      src/app/link_set/more/more.link.component.ts
  48. 34
      src/app/link_set/more/more.link.item.component.ts
  49. 39
      src/app/link_set/right/right.component.ts
  50. 54
      src/app/link_set/right/right_detail/right.detail.component.ts
  51. 278
      src/app/link_set/right/right_edit/right.edit.component.ts
  52. 38
      src/app/link_set/right/right_edit/right.edit.constant.ts
  53. 233
      src/app/link_set/right/right_edit/right.edit.mysql.component.ts
  54. 65
      src/app/link_set/right/right_title/right.title.component.ts
  55. 284
      src/app/link_set/select/select.service.ts
  56. 31
      src/app/link_status/left/left.component.ts
  57. 18
      src/app/link_status/left/left.service.ts
  58. 2
      src/app/status/left/left.model.ts
  59. 44
      src/app/status/left/left.ts
  60. 21
      src/app/status/left/left_item.ts
  61. 2
      src/app/status/link_status.model.ts
  62. 32
      src/app/status/link_status.ts
  63. 4
      src/app/status/right/right.model.ts
  64. 51
      src/app/status/right/right.ts
  65. 0
      src/app/status/right/right.typings.d.ts
  66. 9
      src/app/status/right/right_card.less
  67. 56
      src/app/status/right/right_card.ts
  68. 57
      src/app/title/title.component.ts
  69. 8
      src/app/title/title.less
  70. 2
      src/app/title/title.model.ts
  71. 61
      src/app/title/title.ts
  72. 34
      src/app/title/title_item/title_item.component.ts
  73. 13
      src/app/title/title_item/title_item.service.ts
  74. 26
      src/demo/plugin.redis.edit.ts
  75. 2
      src/demo/plugin.redis.preview.ts
  76. 3
      src/demo/plugin.tedis.pool.ts
  77. 4
      src/index.ts
  78. 4
      src/less/index.less
  79. 6
      src/less/lib/background.less
  80. 2
      src/less/lib/color.less
  81. 4
      src/less/lib/font.less
  82. 23
      src/less/resource/background.less
  83. 7
      src/less/resource/font.less
  84. 4
      src/less/var.less
  85. 9
      src/shared/components/both_side.ts
  86. 29
      src/shared/components/form.item.component.ts
  87. 8
      src/shared/components/title.ts
  88. 4
      src/shared/crud/crud.request.ts
  89. 108
      src/shared/service/dialog.service.ts
  90. 8
      src/ui/fineui.ts
  91. 13
      webpack.config.js

7
i18n/zh_cn.properties

@ -30,7 +30,7 @@ Dec-Dcm_Connection_Option_Cannot_Find= 找不到该连接的配置信息
Dec-Dcm_Connection_Config_No_Save= 当前设置尚未保存,是否保存? Dec-Dcm_Connection_Config_No_Save= 当前设置尚未保存,是否保存?
Dec-Dcm_Connection_New= 新建数据连接 Dec-Dcm_Connection_New= 新建数据连接
Dec-Dcm_Connection_More= 更多数据连接... Dec-Dcm_Connection_More= 更多数据连接...
Dec-Dcm_Connection_More-Title= 更多数据连接 Dec-Dcm_Connection_More_Title= 更多数据连接
Dec-Dcm_Connection_Other= 其他 Dec-Dcm_Connection_Other= 其他
Dec-Dcm_Connection_Plase_Add_One= 请选择左侧数据连接或点击新建数据连接 Dec-Dcm_Connection_Plase_Add_One= 请选择左侧数据连接或点击新建数据连接
Dec-Dcm_Connection_Is_Existence= 数据连接名已存在 Dec-Dcm_Connection_Is_Existence= 数据连接名已存在
@ -53,3 +53,8 @@ Dec-Dcm_Connection_Form_Database_Addr= 数据库地址
Dec-Dcm_Connection_Form_Database_Port= 端口号 Dec-Dcm_Connection_Form_Database_Port= 端口号
Dec-Dcm_Connection_Make_Sure_Delete= 确定删除该数据连接? Dec-Dcm_Connection_Make_Sure_Delete= 确定删除该数据连接?
Dec-Dcm_Connection_ReConnect= 重新连接 Dec-Dcm_Connection_ReConnect= 重新连接
Dec-Dcm_Connection_JNDI_Form_ConnectionName= JNDI的名字
Dec-Dcm_Connection_Form_JNDI_Context= 上下文
Dec-Dcm_Connection_Form_JNDI_Advanced= 高级
Dec-Dcm_Connection_Form_JNDI_Other_Attributes= 其他属性
Dec-Dcm_Connection_Form_JNDI_Collapse-Attributes= 收起

5
package.json

@ -18,6 +18,8 @@
"eslint": "^5.16.0", "eslint": "^5.16.0",
"file-loader": "^3.0.1", "file-loader": "^3.0.1",
"html-webpack-plugin": "^3.2.0", "html-webpack-plugin": "^3.2.0",
"less": "^3.9.0",
"less-loader": "^5.0.0",
"mini-css-extract-plugin": "^0.6.0", "mini-css-extract-plugin": "^0.6.0",
"node-sass": "^4.11.0", "node-sass": "^4.11.0",
"path": "^0.12.7", "path": "^0.12.7",
@ -29,5 +31,8 @@
"webpack-cli": "^3.3.0", "webpack-cli": "^3.3.0",
"webpack-dev-server": "^3.2.1", "webpack-dev-server": "^3.2.1",
"webpack-stream": "^5.2.1" "webpack-stream": "^5.2.1"
},
"optionalDependencies": {
"fineui": "git+ssh://git@cloud.finedevelop.com:7999/visual/fineui.git"
} }
} }

365
private/constants.ts

@ -1,4 +1,6 @@
export const OTHER_CONNECT = 'other'; export const OTHER_CONNECT = 'other';
export const JNDI_CONNECT = 'JNDI';
export const MYSQL_CONNECT = 'MySQL';
export const DEFAULT_INFO = 'DESIGNER'; export const DEFAULT_INFO = 'DESIGNER';
export const ACTION_DELETE = 'ACTION_DELETE'; export const ACTION_DELETE = 'ACTION_DELETE';
export const ACTION_COPY = 'ACTION_COPY'; export const ACTION_COPY = 'ACTION_COPY';
@ -6,3 +8,366 @@ export const ACTION_TEST = 'ACTION_TEST';
export const TAB_LINK_SET = 'TAB_LINK_SET'; export const TAB_LINK_SET = 'TAB_LINK_SET';
export const TAB_LINK_POOL = 'TAB_LINK_POOL'; export const TAB_LINK_POOL = 'TAB_LINK_POOL';
export const DATA_LINKS = ['APACHE KYLIN', 'DERBY', 'HP Vertica', 'IBM DB2', 'INFORMIX', 'Microsoft SQL Server', 'MySQL', 'Oracle', 'Privotal Greenplum Database', 'Postgresql', 'GaussDB 200', 'JNDI'];
export const DATA_BASE_TYPE_OTHER = [
{
text: 'ADS',
databaseType: 'ads',
driver: 'com.mysql.jdbc.Driver',
url: 'jdbc:mysql://hostname:port/my_ads_db',
},
{
text: 'Amazon Redshift',
databaseType: 'amazon-redshift',
driver: 'com.amazon.redshift.jdbc4.Driver',
drivers: ['com.amazon.redshift.jdbc4.Driver', 'com.amazon.redshift.jdbc41.Driver'],
url: 'jdbc:redshift://endpoint:port/database',
},
{
text: 'APACHE IMPALA',
databaseType: 'apache-impala',
driver: 'com.cloudera.impala.jdbc41.Driver',
url: 'jdbc:impala://hostname:port/_impala_builtins',
},
{
text: 'APACHE KYLIN',
databaseType: 'apache-kylin',
driver: 'org.apache.kylin.jdbc.Driver',
url: 'jdbc:kylin://<hostname>:<port>/<kylin_project_name>',
},
{
text: 'APACHE Phoenix',
databaseType: 'apache-phoenix',
driver: 'org.apache.phoenix.jdbc.PhoenixDriver',
url: 'jdbc:phoenix:hostname:port/dbname',
},
{
text: 'DERBY',
databaseType: 'derby',
driver: 'org.apache.derby.jdbc.ClientDriver',
url: 'jdbc:derby://localhost:1527/',
},
{
text: 'Gbase 8A',
databaseType: 'gbase-8a',
driver: 'com.gbase.jdbc.Driver',
url: 'jdbc:gbase://hostname:port/dbname',
},
{
text: 'Gbase 8S',
databaseType: 'gbase-8s',
driver: 'com.gbasedbt.jdbc.IfxDriver',
url: 'jdbc:gbasedbt-sqli://{host}:{port}/{database}',
},
{
text: 'Gbase 8T',
databaseType: 'gbase-8t',
driver: 'com.informix.jdbc.IfxDriver',
url: 'jdbc:informix-sqli://{host}:{port}/{database}:INFORMIXSERVER={server}',
},
{
text: 'H2',
databaseType: 'h2',
driver: 'org.h2.Driver',
url: 'jdbc:h2://${ENV_HOME}/../databaseName',
},
{
text: '华为云DWS',
databaseType: 'hw-dws',
driver: 'org.postgresql.Driver',
url: 'jdbc:postgresql://hostname:port/dbname',
},
{
text: 'FusionInsight elk',
databaseType: 'hw-elk',
driver: 'org.postgresql.Driver',
url: 'jdbc:postgresql://hostname:port/dbname',
},
{
text: 'FusionInsight HD',
databaseType: 'hw-fusioninsight-hd',
driver: 'org.apache.hive.jdbc.HiveDriver',
url: 'jdbc:hive2://10.135.0.110:24002,10.135.0.67:24002,10.135.0.66:24002/;serviceDiscoveryMode=zooKeeper;zooKeeperNamespace=hiveserver2;sasl.qop=auth-conf;auth=KERBEROS;zk.principal=zookeeper/hadoop;principal=hive/hadoop.hadoop.com@HADOOP.COM;',
},
{
text: 'GaussDB 200',
databaseType: 'hw-libr-a',
driver: 'org.postgresql.Driver',
url: 'jdbc:postgresql://hostname:port/dbname',
}, {
text: 'Hadoop Hive',
databaseType: 'hadoop-hive',
driver: 'org.apache.hive.jdbc.HiveDriver',
url: 'jdbc:hive2://hostname:port/databasename',
}, {
text: 'Hbase',
databaseType: 'hbase',
driver: 'org.apache.phoenix.jdbc.PhoenixDriver',
url: 'jdbc:phoenix:hostname:port/dbname',
}, {
text: 'HP Vertica',
databaseType: 'hp-vertica',
driver: 'com.vertica.jdbc.Driver',
url: 'jdbc:vertica://ip:port/databaseName',
}, {
text: 'Hsql',
databaseType: 'hsql',
driver: 'com.fr.third.org.hsqldb.jdbcDriver',
url: 'jdbc:hsqldb:file:[PATH_TO_DB_FILES]',
}, {
text: 'IBM DB2',
databaseType: 'ibm-db2',
driver: 'com.ibm.db2.jcc.DB2Driver',
url: 'jdbc:db2://hostname:port/dbname',
}, {
text: 'INFORMIX',
databaseType: 'informix',
driver: 'com.informix.jdbc.IfxDriver',
url: 'jdbc:informix-sqli://{host}:{port}/{database}:INFORMIXSERVER={server}',
}, {
text: 'KINGBASE',
databaseType: 'kingbase',
driver: 'com.kingbase.Driver',
url: 'jdbc:kingbase://hostname:port',
}, {
text: 'Microsoft SQL Server',
databaseType: 'sql-server',
driver: 'com.microsoft.sqlserver.jdbc.SQLServerDriver',
url: 'jdbc:sqlserver://localhost:1433;databaseName=',
}, {
text: 'MySQL',
databaseType: 'mysql',
driver: 'com.mysql.jdbc.Driver',
drivers: ['com.mysql.jdbc.Driver', 'org.gjt.mm.mysql.Driver'],
url: 'jdbc:mysql://localhost/dbname',
},
{
text: 'Oracle',
databaseType: 'oracle',
driver: 'oracle.jdbc.driver.OracleDriver',
url: 'jdbc:oracle:thin:@localhost:1521:databaseName',
},
{
text: 'Pivotal Greenplum Database',
databaseType: 'pivotal-greenplum-database',
driver: 'org.postgresql.Driver',
url: 'jdbc:postgresql://hostname:port/dbname',
}, {
text: 'Postgresql',
databaseType: 'postgresql',
driver: 'org.postgresql.Driver',
url: 'jdbc:postgresql://hostname:port/dbname',
}, {
text: 'Presto',
databaseType: 'presto',
driver: 'com.facebook.presto.jdbc.PrestoDriver',
url: 'jdbc:presto://host:port/catalog',
}, {
text: 'SAP HANA',
databaseType: 'sap-hana',
driver: 'com.sap.db.jdbc.Driver',
url: 'jdbc:sap://hostname:port?reconnect=true',
}, {
text: 'SAP Sybase',
databaseType: 'sap-sybase',
driver: 'com.sybase.jdbc4.jdbc.SybDriver',
url: 'jdbc:sybase:Tds:hostname:2638/databasename',
}, {
text: 'SPARK',
databaseType: 'spark',
driver: 'org.apache.hive.jdbc.HiveDriver',
url: 'jdbc:hive2://hostname:port/databasename',
}, {
text: 'Sqlite',
databaseType: 'sqlite',
driver: 'org.sqlite.JDBC',
url: 'jdbc:sqlite:[PATH_TO_DB_FILES]',
}, {
text: 'TeraData',
databaseType: 'teradata',
driver: 'com.ncr.teradata.TeraDriver',
url: 'jdbc:teradata://localhost/CLIENT_CHARSET=EUC_CN,TMODE=TERA,CHARSET=ASCII,LOB_SUPPORT',
}, {
text: 'TRANSWARP INCEPTOR',
databaseType: 'transwarp-inceptor',
driver: 'org.apache.hive.jdbc.HiveDriver',
url: 'jdbc:hive2://hostname:port/databasename',
},
];
export const DATA_BASE_TYPE = [
{
text: 'APACHE KYLIN',
databaseType: 'apache-kylin',
driver: 'org.apache.kylin.jdbc.Driver',
url: 'jdbc:kylin://<hostname>:<port>/<kylin_project_name>',
},
{
text: 'DERBY',
databaseType: 'derby',
driver: 'org.apache.derby.jdbc.ClientDriver',
url: 'jdbc:derby://localhost:1527/',
},
{
text: 'HP Vertica',
databaseType: 'hp-vertica',
driver: 'com.vertica.jdbc.Driver',
url: 'jdbc:vertica://ip:port/databaseName',
},
{
text: 'IBM DB2',
databaseType: 'ibm-db2',
driver: 'com.ibm.db2.jcc.DB2Driver',
url: 'jdbc:db2://hostname:port/dbname',
},
{
text: 'INFORMIX',
databaseType: 'informix',
driver: 'com.informix.jdbc.IfxDriver',
url: 'jdbc:informix-sqli://{host}:{port}/{database}:INFORMIXSERVER={server}',
},
{
text: 'Microsoft SQL Server',
databaseType: 'sql-server',
driver: 'com.microsoft.sqlserver.jdbc.SQLServerDriver',
url: 'jdbc:sqlserver://localhost:1433;databaseName=',
},
{
text: 'Oracle',
databaseType: 'oracle',
driver: 'oracle.jdbc.driver.OracleDriver',
url: 'jdbc:oracle:thin:@localhost:1521:databaseName',
},
{
text: 'Privotal Greenplum Database',
databaseType: 'pivotal-greenplum-database',
driver: 'org.postgresql.Driver',
url: 'jdbc:postgresql://hostname:port/dbname',
},
{
text: 'Postgresql',
databaseType: 'postgresql',
driver: 'org.postgresql.Driver',
url: 'jdbc:postgresql://hostname:port/dbname',
},
{
text: 'GaussDB 200',
databaseType: 'hw-libr-a',
driver: 'org.postgresql.Driver',
url: 'jdbc:postgresql://hostname:port/dbname',
},
{
text: 'MySQL',
databaseType: 'mysql',
driver: 'com.mysql.jdbc.Driver',
drivers: ['com.mysql.jdbc.Driver', 'org.gjt.mm.mysql.Driver'],
url: 'jdbc:mysql://localhost/dbname',
},
{
text: OTHER_CONNECT,
databaseType: 'other',
driver: 'org.h2.Driver',
drivers: ['org.h2.Driver', 'com.fr.third.org.hsqldb.jdbcDriver', 'org.sqlite.JDBC'],
url: 'jdbc:h2://${ENV_HOME}/../databaseName',
},
...DATA_BASE_TYPE_OTHER,
{
text: JNDI_CONNECT,
},
];
export const JNDI_FACTORYS = ['', 'weblogic.jndi.WLInitialContextFactory', 'com.ibm.websphere.naming.WsnInitialContextFactory', 'org.jboss.naming.HttpNamingContextFactory', 'org.jnp.interfaces.NamingContextFactory', 'com.caucho.burlap.BurlapContextFactory'];
export const OTHER_ATTRIBUTES = [
{
text: 'OBJECT_FACTORIES',
name: 'objectFactories',
},
{
text: 'STATE_FACTORIES',
name: 'stateFactories',
},
{
text: 'URL_PKG_PREFIXES',
name: 'urlPkgPrefixes',
},
{
text: 'DNS_URL',
name: 'dnsUrl',
},
{
text: 'AUTHORITATIVE',
name: 'authoritative',
},
{
text: 'BATCHSIZE',
name: 'batchSize',
},
{
text: 'REFERRAL',
name: 'referral',
},
{
text: 'SECURITY_PROTOCOL',
name: 'securityProtocol',
},
{
text: 'SECURITY_AUTHENTICATION',
name: 'securityAuthentication',
},
{
text: 'LANGUAGE',
name: 'language',
},
{
text: 'APPLET',
name: 'applet',
},
];
export const CONNECT_CHARSET = [
{
text: 'GBK',
value: 'GBK',
},
{
text: 'BIG5',
value: 'BIG5',
},
{
text: 'ISO-8859-1',
value: 'ISO-8859-1',
},
{
text: 'UTF-8',
value: 'UTF-8',
},
{
text: 'UTF-16',
value: 'UTF-16',
},
{
text: 'EUC_JP',
value: 'EUC_JP',
},
{
text: 'EUC_KR',
value: 'EUC_KR',
},
{
text: 'CP850',
value: 'CP850',
},
];
const DecDcm = {
TEST_STATUS_WAITING: 1,
TEST_STATUS_SUCCESS: 2,
TEST_STATUS_FAIL: 3,
};
export default DecDcm;

8
private/i18n.ts

@ -31,7 +31,7 @@ export default {
'Dec-Dcm_Connection_Config_No_Save': '当前设置尚未保存,是否保存?', 'Dec-Dcm_Connection_Config_No_Save': '当前设置尚未保存,是否保存?',
'Dec-Dcm_Connection_New': '新建数据连接', 'Dec-Dcm_Connection_New': '新建数据连接',
'Dec-Dcm_Connection_More': '更多数据连接...', 'Dec-Dcm_Connection_More': '更多数据连接...',
'Dec-Dcm_Connection_More-Title': '更多数据连接', 'Dec-Dcm_Connection_More_Title': '更多数据连接',
'Dec-Dcm_Connection_Other': '其他', 'Dec-Dcm_Connection_Other': '其他',
'Dec-Dcm_Connection_Plase_Add_One': '请选择左侧数据连接或点击新建数据连接', 'Dec-Dcm_Connection_Plase_Add_One': '请选择左侧数据连接或点击新建数据连接',
'Dec-Dcm_Connection_Is_Existence': '数据连接名已存在', 'Dec-Dcm_Connection_Is_Existence': '数据连接名已存在',
@ -54,4 +54,10 @@ export default {
'Dec-Dcm_Connection_Form_Database_Port': '端口号', 'Dec-Dcm_Connection_Form_Database_Port': '端口号',
'Dec-Dcm_Connection_Make_Sure_Delete': '确定删除该数据连接?', 'Dec-Dcm_Connection_Make_Sure_Delete': '确定删除该数据连接?',
'Dec-Dcm_Connection_ReConnect': '重新连接', 'Dec-Dcm_Connection_ReConnect': '重新连接',
'Dec-Dcm_Connection_JNDI_Form_ConnectionName': 'JNDI的名字',
'Dec-Dcm_Connection_Form_JNDI_Context': '上下文',
'Dec-Dcm_Connection_Form_JNDI_Advanced': '高级',
'Dec-Dcm_Connection_Form_JNDI_Other_Attributes': '其他属性',
'Dec-Dcm_Connection_Form_JNDI_Collapse-Attributes': '收起',
'Dec-Dcm_Connection_Form_JNDI_Notice': '注意:需要把包含INITIAL_CONTEXT_FACTORY类的.jar文件复制到软件安装目录下的/lib目录下.',
}; };

329
src/app/app.component.scss

@ -1,329 +0,0 @@
.database-connection-layout{
width: 100%;
height: 100%;
background-color: #f7f8fa;
.title{
background-color: #fff;
border-bottom: 1px solid #e8eaed;
.dec-title-item{
height: 39px;
line-height: 39px;
padding-left: 15px;
padding-right: 15px;
text-align: center;
white-space: nowrap;
text-overflow: ellipsis;
overflow: hidden;
position: relative;
flex-shrink: 0;
font-weight: 700;
cursor: pointer;
}
.dec-title-item-selected{
color: #3685f2;
border-bottom: solid 2px #3685f2;
}
.close-button {
position: absolute !important;
right: 5px;
top: 5px;
width: 30px;
height: 30px;
cursor: pointer;
background-image: url("../img/icon_close9x9_normal.png");
background-repeat: no-repeat;
background-position: center;
}
}
.linkset{
margin: 10px;
bottom: 0px;
background-color: #ffffff;
}
.linkStatus{
margin: 10px;
top: 40px;
background-color: #ffffff;
}
}
.database-left{
border-right: 1px solid #e8eaed;
.select-group{
border-bottom: 1px solid #e8eaed;
.select{
margin: 10px;
.database-link-items{
padding-left:10px;
.link-item{
border-top: 1px solid #e8eaed;
}
}
}
.status-title{
font-weight: 700;
margin-left: 12px;
margin-top: 12px;
}
}
.left-list{
margin: 10px;
.left-item{
height: 24px;
line-height: 24px;
cursor: pointer;
&:hover{
background-color: rgba(54,133,242,.05);
.icons{
.action-icon{
visibility: visible !important;
}
}
}
.icons{
float: right !important;
.action-icon{
visibility: hidden;
}
.b-font{
font-size: 16px;
}
}
}
.left-item-selected{
background-color: rgba(54,133,242,.05);
.link-title{
color: #3685f2;
}
}
}
}
.database-right{
min-width: 400px;
overflow: auto;
.bi-flex-center-adapt-layout{
height: 100%;
.data-connection-background{
background: url(../img/resources.png) center center no-repeat;
background-size: contain;
}
}
.right-status-title{
border-bottom: 1px solid #e8eaed;
color: #3d4d66;
line-height: 40px;
padding-left: 10px;
font-weight: 700;
}
.right-status-body{
margin: 10px 30px 0px 30px;
height: 50%;
.right-status-item{
height: 150px;
width: 50%;
top: 0; left: 0;
position: absolute !important;
.right-status-board { margin-left: 25px; position: relative !important; left: -25px;}
}
.right-status-right{
height: 150px;
width: 50%;
top: 0; right:0;
position: absolute !important;
.right-status-board { margin-right: 25px; position: relative !important; left: 25px; }
}
.right-status-board{
background-color: #f7f8fa;
color: #3d4d66;
width: 100%;
height: 100%;
.right-status-board-item{
text-align: center;
margin-top: 38px;
.right-status-text{
display: inline-block;
}
.card-font1{
color: #13CD66;
font-size: 32px;
}
.card-font2{
color: #3685F2;
font-size: 32px;
}
}
}
}
.right-content{
height: 100%;
.right-title{
border-bottom: 1px solid #e8eaed;
color: #3d4d66;
line-height: 40px;
padding-left: 10px;
.right-title-text{
font-weight: 700;
}
.right-title-button{
float: right !important;
margin-right: 10px;
margin-top: 8px;
}
}
.right-show{
margin: 10px;
.right-form{
width: 100%;
}
}
}
}
.both-side{
line-height: 24px;
margin-bottom: 10px;
.left{
white-space: nowrap;
text-overflow: ellipsis;
position: relative;
flex-shrink: 0;
font-weight: 700;
}
.hint{
padding-left: 5px;
white-space: nowrap;
text-overflow: ellipsis;
overflow: hidden;
position: relative;
flex-shrink: 0;
margin-left: 5px;
color: #9ea6b2;
}
}
.shared-component-title{
height: 24px;
line-height: 24px;
margin-bottom: 10px;
color: #9ea6b2;
border-bottom: 1px solid #e8eaed;
}
.comfirm-content{
margin-top: 40px;
margin-left: 20px;
.comfirm-icon{
background-image: url("../img/warning.png");
background-size: contain;
margin-right: 12px;
}
.bi-text{
height: 50px;
line-height: 50px;
margin-left: 12px;
}
}
.more-link{
.more-link-item{
width: 538px;
overflow: hidden auto;
left: -10px !important;
right: 0px;
top: 10px;
bottom: 0px;
position: absolute;
height: 380px;
.link-item{
margin-left: 10px;
margin-bottom: 10px;
cursor: pointer;
border: solid 1px #fff;
&:hover{
border: solid 1px #3480f2;
}
.selected{
position: absolute !important;
right: -1px;
top: -1px;
height: 30px;
width: 30px;
background: url(../img/database-selected.png) center center no-repeat;
background-size: contain;
}
.text{
height: 27px;
line-height: 27px;
padding-left: 2px;
padding-right: 2px;
text-align: center;
white-space: nowrap;
background: #F0F3F7;
}
}
}
}
.popover-notitle{
.bi-header-background{
display: none;
}
.bi-absolute-layout{
top:0px !important;
}
}
.bi-custom-show{
.show-content{
text-align: center;
.loading-icon{
display: block;
background: url(../img/loading.gif) center center no-repeat;
background-size: contain;
margin: 0 auto;
margin-bottom: 18px;
}
.success-icon{
display: block;
background: url(../img/success.png) center center no-repeat;
background-size: contain;
margin: 0 auto;
margin-bottom: 18px;
}
.error-icon{
display: block;
background: url(../img/error.png) center center no-repeat;
background-size: contain;
margin: 0 auto;
margin-bottom: 18px;
}
.buttons{
margin-top: 18px;
div{
margin: 0 4px;
}
}
}
.show-more{
text-align: left !important;
height: 73px;
background: #F2F4F7;
margin-bottom: 10px;
padding: 5px;
margin-top: 10px;
}
}
.link-font .b-font:before {
content: "\e759";
color: inherit;
}
.link-text-font .b-font:before {
content: "\e763";
color: inherit;
}
.info-font .b-font:before {
content: "\e63c";
color: inherit;
}
.delete-font .b-font:before {
content: "\e6c4";
color: inherit;
}

48
src/app/app.component.ts

@ -1,48 +0,0 @@
import {Vtape} from '../ui/index';
import {LinkType} from '@ui/type';
import appModel from './app.model';
import title from './title/title.component';
import linkSet from './link_set/link-set.component';
import linkStatus from './link_status/link_status.component';
import '../demo/plugin.redis.edit';
import '../demo/plugin.redis.preview';
import '../demo/plugin.tedis.pool';
import {fetchLinkList} from '../shared/crud/crud.request';
import './app.component.scss';
const className = 'fr.main';
const Widget = BI.inherit(BI.Widget, {
_store() {
return BI.Models.getModel(appModel);
},
render() {
return {
type: Vtape,
cls: 'database-connection-layout',
items: [{
el: {
type: title,
},
height: 40,
},
{
type: linkSet,
},
{
type: linkStatus,
},
],
};
},
mounted() {
/**
*
*/
fetchLinkList((linkList: LinkType[]) => {
this.store.setLinkList(linkList);
});
},
});
BI.shortcut(className, Widget);
export default className;

1
src/app/app.constant.ts

@ -1,5 +1,4 @@
export const ConstantName = 'dec.constant.database.conf.connect.list'; export const ConstantName = 'dec.constant.database.conf.connect.list';
export const links = ['APACHE KYLIN', 'DERBY', 'HP Vertica', 'IBM DB2', 'INFORMIX', 'Microsoft SQL Server', 'MySQL', 'Oracle', 'Privotal Greenplum Database', 'Postgresql', 'GaussDB 200'];
BI.constant(ConstantName, [ BI.constant(ConstantName, [
]); ]);
export default ConstantName; export default ConstantName;

15
src/app/app.model.ts

@ -1,13 +1,16 @@
const className = 'fr.model.main'; const className = 'dec.dcm.model.main';
import {ModelType} from '@ui'; import {ModelType} from '@ui';
import {LinkType} from '@ui/type'; import {LinkType} from '@ui/type';
import {fetchLinkList} from '../shared/crud/crud.request';
import {TAB_LINK_SET} from '@private/constants';
const linkList: LinkType[] = []; const linkList: LinkType[] = [];
const Model: ModelType = { const Model: ModelType = {
childContext: ['tab', 'linkList', 'linkSelected', 'linkUpdate', 'moreLinkSelected', 'statusSelected', 'connectionNameErr'], childContext: ['tab', 'linkList', 'linkSelected', 'linkUpdate', 'moreLinkSelected', 'statusSelected', 'connectionNameErr'],
state () { state () {
return { return {
tab: BI.i18nText('Dec-Dcm_Connection_Management'), tab: '',
linkList, linkList,
linkSelected: {}, linkSelected: {},
linkUpdate: {}, linkUpdate: {},
@ -21,8 +24,12 @@ const Model: ModelType = {
}, },
actions: { actions: {
setLinkList(value: LinkType[]) { initData(callback: Function) {
this.model.linkList = value; fetchLinkList((linkList: LinkType[]) => {
this.model.linkList = linkList;
this.model.tab = TAB_LINK_SET;
callback();
});
}, },
}, },
}; };

55
src/app/app.ts

@ -0,0 +1,55 @@
import {Vtape, Absolute, LinearSegment} from '../ui/index';
import appModel from './app.model';
import title from './title/title';
import linkSet from './connection/link_set';
import linkStatus from './status/link_status';
import '../less/index.less';
const className = 'dec.dcm.main';
const Widget = BI.inherit(BI.Widget, {
props: {
baseCls: 'dec-webui-dcm-layout bi-background',
},
_store() {
return BI.Models.getModel(appModel);
},
beforeInit (callback) {
this.store.initData(callback);
},
render() {
return {
type: Vtape,
items: [
{
el: {
type: title,
},
height: 40,
},
{
type: Absolute,
items: [{
el: {
type: linkSet,
},
left: 10,
top: 10,
right: 10,
bottom: 10,
}, {
el: {
type: linkStatus,
},
left: 10,
top: 10,
right: 10,
bottom: 10,
}],
},
],
};
},
});
BI.shortcut(className, Widget);
export default className;

4
src/app/connection/left/item/left_item.less

@ -0,0 +1,4 @@
@import '../../../../less/index.less';
.dec-webui-dcm-connection-left-item{
.hover-visible(link-item-icon);
}

77
src/app/connection/left/item/left_item.ts

@ -0,0 +1,77 @@
import './left_item.less';
import {WidgetType, Icon, TextButton, LeftRightVerticalAdapt} from '@ui';
import ItemIcon from './left_item_icon';
import ItemDelete from './left_item_delete';
import Model from '../../link_set.model';
import {ACTION_COPY, ACTION_TEST, ACTION_DELETE, DEFAULT_INFO} from '@private/constants';
const className = 'dec.dcm.component.linkSet.left.item';
const Widget: WidgetType = {
props: {
title: '',
id: '',
creator: '',
baseCls: 'dec-webui-dcm-connection-left-item bi-list-item-active',
},
_store() {
return BI.Models.getModel(Model);
},
render() {
const {title, creator, text, id} = this.options;
return {
type: LeftRightVerticalAdapt,
items: {
left: [
{
type: Icon,
cls: 'dcm-link-font',
height: 25,
width: 25,
text: BI.i18nText('Dec-Dcm_Connections'),
title,
},
{
type: TextButton,
text: title,
title,
},
],
right: [
{
type: ItemIcon,
cls: 'link-item-icon dcm-test-font',
title: BI.i18nText('Dec-Dcm_Test_Connection'),
value: ACTION_TEST,
id,
},
{
type: ItemIcon,
cls: 'link-item-icon copy-font',
title: BI.i18nText('Dec-Dcm_Copy'),
value: ACTION_COPY,
id,
},
{
type: ItemIcon,
cls: 'link-item-icon dcm-info-font',
title: `${BI.i18nText('Dec-Dcm_Type')}${text === DEFAULT_INFO ? BI.i18nText('Dec-Dcm_Other') : text} \r\n${BI.i18nText('Dec-Dcm_Creator')}${creator}`,
id,
},
{
type: ItemDelete,
cls: 'link-item-icon dcm-delete-font',
title: BI.i18nText('Dec-Dcm_Delete'),
value: ACTION_DELETE,
id,
},
],
},
};
},
doClick() {
const {title} = this.options;
this.store.setLinkSelected(title);
},
};
BI.shortcut(className, BI.inherit(BI.BasicButton, Widget));
export default className;

43
src/app/connection/left/item/left_item_delete.ts

@ -0,0 +1,43 @@
import {WidgetType, Icon, BubbleCombo, TextBubblePopupBarView} from '@ui';
import Model from '../../link_set.model';
const className = 'dec.dcm.component.linkSet.left.item.icon.delete';
const Widget: WidgetType = {
_store() {
return BI.Models.getModel(Model);
},
render() {
const {title, id} = this.options;
const that = this;
return {
type: BubbleCombo,
stopPropagation: true,
direction: 'bottom',
ref: _ref => {
this.combo = _ref;
},
el: {
type: Icon,
height: 25,
width: 25,
title,
},
popup: {
type: TextBubblePopupBarView,
text: BI.i18nText('Dec-Dcm_Connection_Make_Sure_Delete'),
listeners: [{
eventName: BI.BubblePopupBarView.EVENT_CLICK_TOOLBAR_BUTTON,
action (type: boolean) {
that.combo.hideView();
if (type) {
that.store.onIconClick(title, id);
}
},
}],
},
};
},
};
BI.shortcut(className, BI.inherit(BI.Widget, Widget));
export default className;

26
src/app/connection/left/item/left_item_icon.ts

@ -0,0 +1,26 @@
import {WidgetType, IconButton} from '@ui';
import Model from '../../link_set.model';
const className = 'dec.dcm.component.linkSet.left.item.icon';
const Widget: WidgetType = {
_store() {
return BI.Models.getModel(Model);
},
render() {
const {title} = this.options;
return {
type: IconButton,
height: 25,
width: 25,
stopPropagation: true,
title,
handler: () => {
const {id, title} = this.options;
this.store.onIconClick(title, id);
},
};
},
};
BI.shortcut(className, BI.inherit(BI.Widget, Widget));
export default className;

39
src/app/connection/left/left.ts

@ -0,0 +1,39 @@
import {WidgetType, ListView} from '@ui';
import Model from '../link_set.model';
import {LinkType} from '@ui/type';
import LeftItem from './item/left_item';
const className = 'dec.dcm.component.linkset.left';
const Widget: WidgetType = {
_store() {
return BI.Models.getModel(Model);
},
watch: {
linkList(linkList: LinkType[]) {
this.leftContent.populate(BI.createItems(this._renderItems(linkList)));
},
},
render() {
return {
type: ListView,
ref: _ref => {
this.leftContent = _ref;
},
items: this._renderItems(this.model.linkList),
};
},
_renderItems(linkList: LinkType[]) {
return BI.map(linkList, (index: number, item: LinkType) => {
return {
type: LeftItem,
selected: item.isSelected,
title: item.connectionName,
id: item.connectionId,
creator: item.creator,
text: item.text ? item.text : BI.i18nText('Dec-Dcm_Default'),
};
});
},
};
BI.shortcut(className, BI.inherit(BI.Widget, Widget));
export default className;

50
src/app/connection/link_set.mixin.ts

@ -0,0 +1,50 @@
import {LinkType} from '@ui/type';
import {saveConnection} from './link_set.service';
const mixinName = 'dec.dcm.minxin.linkset';
const Mixin = {
setConnectionNameErr(err: string) {
this.model.connectionNameErr = err;
},
setEdit(type: boolean) {
this.model.linkSelected = {
...this.model.linkSelected,
isSelected: type,
};
this.model.linkUpdate = this.model.linkSelected;
},
setCancel() {
const linkSelected: LinkType = this.model.linkSelected;
const linkList: LinkType[] = this.model.linkList;
if (linkSelected.connectionId) {
this.setEdit(false);
} else {
this.model.linkList = [
...linkList.filter(item => !!item.connectionId),
];
if (this.model.linkList.length > 0) {
this.model.linkList[0].isSelected = true;
this.model.linkSelected = {
...this.model.linkList[0],
isSelected: false,
};
} else {
this.model.linkSelected = {};
}
this.model.linkUpdate = this.model.linkSelected;
}
},
saveLink() {
const pluginData = this.model.linkUpdate.text ? BI.Constants.getConstant(`dec.constant.database.conf.connect.form.${this.model.linkUpdate.text.toLowerCase()}.value`) : {};
const update = {
...this.model.linkUpdate,
...pluginData,
};
saveConnection(update).then(() => {
this.setEdit(false);
});
},
};
Fix.mixin(mixinName, Mixin);
export default mixinName;

154
src/app/connection/link_set.model.ts

@ -0,0 +1,154 @@
import {LinkType} from '@ui/type';
import {deleteConnection, testConnection} from '@shared/crud/crud.request';
import {getCnnectionName} from './select/select.service';
import {DATA_BASE_TYPE} from '@private/constants';
import dialog from '@shared/service/dialog.service';
import Mixin from './link_set.mixin';
const className = 'dec.dcm.model.linkset';
const Model = {
context: ['tab', 'linkList', 'linkSelected', 'linkUpdate', 'connectionNameErr'],
mixins: [Mixin],
actions: {
/**
*
* @param name
*/
setLinkSelected(name: string) {
this._noSaveConfirm(() => {
this._setLinkSelected(name);
});
},
onIconClick(title: string, id: string) {
switch (title) {
case BI.i18nText('Dec-Dcm_Delete'):
deleteConnection(id, () => {
this.model.linkList = [...this.model.linkList.filter((item: LinkType) => item.connectionId !== id)];
this.model.linkSelected = {};
this.model.linkUpdate = {};
});
break;
case BI.i18nText('Dec-Dcm_Test_Connection'):
this._textLink(id);
break;
case BI.i18nText('Dec-Dcm_Copy'):
this._noSaveConfirm(() => {
this.copyLink(id);
});
break;
default:
break;
}
},
copyLink(id: string) {
const connectionName = BI.find(this.model.linkList, (index: number, item: LinkType) => item.connectionId === id).connectionName;
const name = getCnnectionName(this.model.linkList, connectionName);
let data = {};
this.model.linkList.forEach((item: LinkType) => {
if (item.connectionId === id) {
data = item;
}
});
const newCopy = {
...data,
isSelected: true,
connectionName: name,
connectionId: '',
};
this.model.linkList = [
newCopy,
...this.model.linkList,
];
this.model.linkSelected = {
...newCopy,
};
this.model.linkUpdate = {
...newCopy,
};
},
setLinkUpdate(value: any) {
this.model.linkUpdate = value;
},
setNewLink(value: string) {
if (!DATA_BASE_TYPE.some(item => item.text === value) && !BI.Constants.getConstant(`dec.constant.database.conf.connect.form.${value.toLowerCase()}.edit`)) {
dialog.error(BI.i18nText('Dec-Dcm_Connection_Option_Cannot_Find'));
return;
}
this._noSaveConfirm(() => {
this._setNewLink(value);
});
},
},
_setLinkSelected(name: string) {
this.model.linkList.forEach((item: LinkType) => {
item.isSelected = item.connectionName === name;
if (item.connectionName === name) {
this.model.linkSelected = {
...item,
isSelected: false,
};
}
});
this.model.linkList = [...this.model.linkList];
this.model.linkUpdate = this.model.linkSelected;
},
_textLink(id: string) {
const link = this.model.linkList.find((item: LinkType) => item.connectionId === id);
const loadingId = dialog.loading(BI.i18nText('Dec-Dcm_Connection_Testing'));
testConnection(link, (res: any) => {
dialog.remove(loadingId);
if (res && res.errorCode) {
dialog.linkFail(`${link.connectionName}${BI.i18nText('Dec-Dcm_Connection_Test_Fail')}`, res.errorMsg, () => {
this._textLink(id);
});
} else {
dialog.success(BI.i18nText('Dec-Dcm_Connection_Test_Success'));
}
});
},
_setNewLink(value: string) {
const name = getCnnectionName(this.model.linkList, value);
let data = {};
DATA_BASE_TYPE.forEach(item => {
if (item.text === value) {
data = item;
}
});
this.model.linkList = [
{
connectionName: name,
isSelected: true,
...data,
text: value,
},
...this.model.linkList,
];
this.model.linkSelected = {
...data,
connectionName: name,
isSelected: true,
text: value,
};
this.model.linkUpdate = {
...data,
connectionName: name,
text: value,
};
},
_noSaveConfirm(cb: Function) {
if (this.model.linkSelected && this.model.linkSelected.isSelected) {
dialog.confirm(BI.i18nText('Dec-Dcm_Connection_Config_No_Save'), (isConfirm: boolean) => {
if (isConfirm) {
this.saveLink();
} else {
this.setCancel();
}
cb();
});
} else {
cb();
}
},
};
BI.model(className, BI.inherit(Fix.Model, Model));
export default className;

0
src/app/link_set/link-set.service.ts → src/app/connection/link_set.service.ts

26
src/app/link_set/link-set.component.ts → src/app/connection/link_set.ts

@ -1,11 +1,14 @@
import {Htape, WidgetType, Vtape, Left} from '@ui'; import {Htape, WidgetType, Vtape, VerticalAdapt} from '@ui';
import LeftList from './left/left.component'; import LeftList from './left/left';
import linkSetModel from './link-set.model'; import linkSetModel from './link_set.model';
import Select from './select/select.component'; import Select from './select/select';
import Right from './right/right.component'; import Right from './right/right';
import {TAB_LINK_SET} from '@private/constants'; import {TAB_LINK_SET} from '@private/constants';
const className = 'fr.linkset'; const className = 'dec.dcm.linkset';
const Widget: WidgetType = { const Widget: WidgetType = {
props: {
baseCls: 'bi-card',
},
_store() { _store() {
return BI.Models.getModel(linkSetModel); return BI.Models.getModel(linkSetModel);
}, },
@ -17,19 +20,20 @@ const Widget: WidgetType = {
render() { render() {
return { return {
type: Htape, type: Htape,
cls: 'linkset',
items: [{ items: [{
el: { el: {
type: Vtape, type: Vtape,
cls: 'database-left', cls: 'dcm-link-left bi-border-right',
items: [ items: [
{ {
el: { el: {
type: Left, type: VerticalAdapt,
cls: 'select-group', cls: 'bi-border-bottom',
items: [ items: [
{ {
type: Select, type: Select,
hgap: 10,
vgap: 10,
}, },
], ],
}, },
@ -37,6 +41,8 @@ const Widget: WidgetType = {
}, { }, {
type: LeftList, type: LeftList,
cls: 'left-list', cls: 'left-list',
vgap: 10,
hgap: 10,
}, },
], ],
}, },

6
src/app/connection/more/item/more_link_item.less

@ -0,0 +1,6 @@
@import '../../../../less/index.less';
.dec-webui-dcm-connection-more-link-item{
&:hover{
border-color :@border-color-highlight;
}
}

68
src/app/connection/more/item/more_link_item.ts

@ -0,0 +1,68 @@
import './more_link_item.less';
import {WidgetType, Img, Label, Layout, Absolute, Vtape} from '@ui/index';
import ModelName from './more_link_litem.model';
const className = 'dec.dcm.component.linkSet.morelink.item';
const Widget: WidgetType = {
props: {
baseCls: 'dec-webui-dcm-connection-more-link-item bi-border',
height: 120,
width: 120,
},
_store() {
return BI.Models.getModel(ModelName);
},
watch: {
otherSelected(otherSelected: string) {
const {text} = this.options;
this.selected.setVisible(text === otherSelected);
},
},
render() {
const {text, name} = this.options;
return {
type: Vtape,
items: [
{
type: Absolute,
items: [
{
el: {
type: Img,
src: this._buildResourceUrl(name),
},
},
{
el: {
type: Layout,
cls: 'dcm-link-more-selected',
invisible: true,
width: 30,
height: 30,
ref: _ref => {
this.selected = _ref;
},
},
right: 0,
},
],
},
{
el: {
type: Label,
cls: 'bi-header-background',
text,
},
height: 30,
},
],
};
},
_buildResourceUrl(name: string) {
// TODO: 目前不知道生产环境下的图片的绝对地址,先这样写用于测试。
return `img/${name}.jpg`;
},
};
BI.shortcut(className, BI.inherit(BI.BasicButton, Widget));
export default className;

6
src/app/connection/more/item/more_link_litem.model.ts

@ -0,0 +1,6 @@
const className = 'dec.dcm.model.link_set.more_link_item';
export const Model = BI.inherit(Fix.Model, {
context: ['otherSelected'],
});
BI.model(className, Model);
export default className;

16
src/app/connection/more/more_link.model.ts

@ -0,0 +1,16 @@
const className = 'dec.dcm.model.link_set.more_link';
export const Model = BI.inherit(Fix.Model, {
childContext: ['otherSelected'],
state() {
return {
otherSelected: '',
};
},
actions: {
setOtherSelected(name: string) {
this.model.otherSelected = name;
},
},
});
BI.model(className, Model);
export default className;

28
src/app/link_set/more/more.link.service.ts → src/app/connection/more/more_link.service.ts

@ -1,14 +1,13 @@
import MoreLink from './more.link.component'; import MoreLink from './more_link';
let SubbitButton: any = null; let subbitButton = null;
let selectKey = ''; let selectKey = '';
export const moreLink = (onConfirm?: Function): void => { export const moreLink = (onConfirm?: Function): void => {
const id = BI.UUID(); const id = BI.UUID();
let Popovers: any = null;
BI.Popovers.create(id, { BI.Popovers.create(id, {
type: 'bi.bar_popover', type: 'bi.bar_popover',
size: 'normal', size: 'normal',
header: BI.i18nText('Dec-Dcm_Connection_More-Title'), header: BI.i18nText('Dec-Dcm_Connection_More_Title'),
width: 550, width: 560,
height: 500, height: 500,
body: { body: {
type: MoreLink, type: MoreLink,
@ -17,12 +16,12 @@ export const moreLink = (onConfirm?: Function): void => {
eventName: 'EVENT_SELECT', eventName: 'EVENT_SELECT',
action (text: string) { action (text: string) {
selectKey = text; selectKey = text;
SubbitButton.setEnable(true); subbitButton.setEnable(true);
}, },
}, },
], ],
}, },
footer:{ footer: {
type: 'bi.right_vertical_adapt', type: 'bi.right_vertical_adapt',
lgap: 10, lgap: 10,
items: [{ items: [{
@ -30,25 +29,22 @@ export const moreLink = (onConfirm?: Function): void => {
text: BI.i18nText('BI-Basic_Cancel'), text: BI.i18nText('BI-Basic_Cancel'),
value: 1, value: 1,
level: 'ignore', level: 'ignore',
handler (v: any) { handler () {
Popovers.close(v); BI.Popovers.close(id);
}, },
}, { }, {
type: 'bi.button', type: 'bi.button',
text: BI.i18nText('BI-Basic_Sure'), text: BI.i18nText('BI-Basic_Sure'),
disabled: true, disabled: true,
value: 0, value: 0,
ref(ref: any) { ref: _ref => {
SubbitButton = ref; subbitButton = _ref;
}, },
handler (v: any) { handler () {
Popovers.close(v); BI.Popovers.close(id);
onConfirm ? onConfirm(selectKey) : null; onConfirm ? onConfirm(selectKey) : null;
}, },
}], }],
}, },
ref(ref: any) {
Popovers = ref;
},
}).open(id); }).open(id);
}; };

52
src/app/connection/more/more_link.ts

@ -0,0 +1,52 @@
import {WidgetType, SearchEditor, Left, Vtape, VerticalAdapt} from '@ui/index';
import {DATA_BASE_TYPE_OTHER} from '@private/constants';
import MoreLinkItem from './item/more_link_item';
import ModelName from './more_link.model';
const className = 'dec.dcm.component.linkSet.morelink';
const Widget: WidgetType = {
_store() {
return BI.Models.getModel(ModelName);
},
render() {
return {
type: Vtape,
items: [
{
el: {
type: VerticalAdapt,
items: [{
type: SearchEditor,
width: 300,
watermark: BI.i18nText('Dec-Dcm_Search'),
}],
},
height: 30,
},
{
type: Left,
scrolly: true,
tgap: 2,
rgap: 2,
bgap: 2,
lgap: 2,
items: this._createItems(),
},
],
};
},
_createItems() {
return BI.map(DATA_BASE_TYPE_OTHER, (index: number, item) => {
return {
type: MoreLinkItem,
text: item.text,
name: item.databaseType,
handler: () => {
this.store.setOtherSelected(item.text);
this.fireEvent('EVENT_SELECT', item.text);
},
};
});
},
};
BI.shortcut(className, BI.inherit(BI.Widget, Widget));
export default className;

20
src/app/link_set/right/nothing.component.ts → src/app/connection/right/nothing.ts

@ -1,27 +1,27 @@
import {WidgetType, CenterAdapt, Vertical, Layout, Label} from '@ui/index'; import {WidgetType, Layout, Label, HorizotalAdapt, Vtape} from '@ui/index';
const className = 'fr.component.right.nothing'; const className = 'dec.dcm.component.right.nothing';
const Widget: WidgetType = { const Widget: WidgetType = {
render() { render() {
return { return {
type: CenterAdapt, type: HorizotalAdapt,
top: 200,
items: [{ items: [{
type: Vertical, type: Vtape,
width: 260, width: 260,
height: 180, height: 150,
items:[ items: [
{ {
el: {
type: Layout, type: Layout,
cls: 'data-connection-background', cls: 'data-connection-background',
width: 260, },
height: 130, height: 130,
}, },
{ {
type:Label, type: Label,
height: 20,
text: BI.i18nText('Dec-Dcm_Connection_Plase_Add_One'), text: BI.i18nText('Dec-Dcm_Connection_Plase_Add_One'),
}, },
], ],
}], }],
}; };
}, },

33
src/app/connection/right/right.ts

@ -0,0 +1,33 @@
import {WidgetType, ListView} from '@ui';
import {LinkType} from '@ui/type';
import Nothing from './nothing';
import RightDetail from './right_detail/right_detail';
import Model from '../link_set.model';
const className = 'dec.dcm.component.right';
const Widget: WidgetType = {
_store() {
return BI.Models.getModel(Model);
},
watch: {
linkSelected(linkSelected: LinkType) {
this.rightContent.populate(BI.createItems([
{
type: (linkSelected && linkSelected.connectionName) ? RightDetail : Nothing,
},
]));
},
},
render() {
return {
type: ListView,
ref: _ref => {
this.rightContent = _ref;
},
items: [{
type: Nothing,
}],
};
},
};
BI.shortcut(className, BI.inherit(BI.Widget, Widget));
export default className;

25
src/app/connection/right/right.typing.d.ts vendored

@ -0,0 +1,25 @@
export interface AttributeType {
text: string;
name: string;
}
export interface FormType {
connectionName?: string;
factory?: string;
url?: string;
principal?: string;
credentials?: string;
originalCharsetName?: string;
objectFactories?: string;
stateFactories?: string;
urlPkgPrefixes?: string;
dnsUrl?: string;
authoritative?: string;
batchSize?: string;
referral?: string;
securityProtocol?: string;
securityAuthentication?: string;
language?: string;
applet?: string;
}

6
src/app/connection/right/right_detail/right_detail.model.ts

@ -0,0 +1,6 @@
const className = 'dec.dcm.model.link.set.right.detail';
export const Model = BI.inherit(Fix.Model, {
context: ['linkSelected'],
});
BI.model(className, Model);
export default className;

74
src/app/connection/right/right_detail/right_detail.ts

@ -0,0 +1,74 @@
import {WidgetType, ListView} from '@ui/index';
import Model from './right_detail.model';
import {LinkType} from '@ui/type';
import Title from '../right_title/right_title';
import RightShow from '../right_show/right_show';
import RightShowJndi from '../right_show/right_show_jndi';
import RightEdit from '../right_edit/right_edit';
import RightEditMysql from '../right_edit/right_edit_mysql';
import RightEditJndi from '../right_edit/right_edit_jndi';
import pluginListConstant from '../../../app.constant';
import {MYSQL_CONNECT, JNDI_CONNECT} from '@private/constants';
const className = 'dec.dcm.component.right.detail';
const Widget: WidgetType = {
_store() {
return BI.Models.getModel(Model);
},
watch: {
linkSelected(linkSelected: LinkType) {
const showPage = this._createItems(linkSelected);
this.rightDetail.populate(BI.createItems(showPage));
},
},
render() {
const linkSelected = this.model.linkSelected;
return {
type: ListView,
ref: _ref => {
this.rightDetail = _ref;
},
items: this._createItems(linkSelected),
};
},
_createItems(linkSelected: LinkType) {
const plugins: string[] = BI.Constants.getConstant(pluginListConstant);
const isPlugin = BI.some(plugins, (index: number, item: string) => item === linkSelected.text);
let editPage = null;
let showPage = null;
switch (linkSelected.text) {
case (MYSQL_CONNECT):
editPage = RightEditMysql;
showPage = RightShow;
break;
case (JNDI_CONNECT):
editPage = RightEditJndi;
showPage = RightShowJndi;
break;
default:
editPage = RightEdit;
showPage = RightShow;
}
if (isPlugin) {
editPage = BI.Constants.getConstant(`dec.constant.database.conf.connect.form.${linkSelected.text.toLowerCase()}.edit`);
showPage = BI.Constants.getConstant(`dec.constant.database.conf.connect.form.${linkSelected.text.toLowerCase()}.preview`);
}
return [
{
type: Title,
isEdit: linkSelected.isSelected,
linkSelected,
}, {
type: linkSelected.isSelected ? editPage : showPage,
vgap: 10,
hgap: 10,
linkSelected,
},
];
},
};
BI.shortcut(className, BI.inherit(BI.Widget, Widget));
export default className;

20
src/app/connection/right/right_edit/right_edit.model.ts

@ -0,0 +1,20 @@
export const className = 'dec.dcm.model.components.right.edit';
export const Model = BI.inherit(Fix.Model, {
state() {
return {
isCollapse: false,
};
},
computed: {
},
actions: {
setIsCollapse(status: boolean) {
this.model.isCollapse = status;
},
},
});
BI.model(className, Model);
export default className;

0
src/app/link_set/right/right_edit/right.edit.service.ts → src/app/connection/right/right_edit/right_edit.service.ts

373
src/app/connection/right/right_edit/right_edit.ts

@ -0,0 +1,373 @@
import {WidgetType, Vertical, MultiSelectItem, TextAreaEditor, Button, TextValueCombo, TextEditor, VerticalAdapt, Label} from '@ui/index';
import {LinkType} from '@ui/type';
import {CONNECT_CHARSET} from '@private/constants';
import Model from '../../link_set.model';
import Title from '@shared/components/title';
import {getDrivers, connectNameChecker} from './right_edit.service';
let connectionName: any = null;
const className = 'dec.dcm.component.right.edit';
const Widget: WidgetType = {
_store() {
return BI.Models.getModel(Model);
},
watch: {
connectionNameErr(msg: string) {
if (msg) {
BI.Bubbles.show('singleBubble', msg, connectionName, {
level: 'error',
});
} else {
BI.Bubbles.hide('singleBubble');
}
},
},
render() {
const linkSelected: LinkType = this.model.linkSelected;
const that = this;
return {
type: Vertical,
vgap: 10,
items: [
{
type: VerticalAdapt,
items: [
{
type: Label,
cls: 'bi-font-bold',
width: 115,
textAlign: 'left',
text: BI.i18nText('Dec-Dcm_Connection_Form_ConnectionName'),
},
{
type: TextEditor,
width: 300,
value: linkSelected.connectionName,
ref(ref: any) {
connectionName = ref;
},
listeners: [{
eventName: BI.Editor.EVENT_CHANGE,
action() {
that.store.setLinkUpdate({
...that.model.linkUpdate,
connectionName: this.getValue(),
});
},
}, {
eventName: BI.Editor.EVENT_FOCUS,
action() {
that.store.setConnectionNameErr('');
},
}],
},
{
type: Label,
cls: 'bi-water-mark',
lgap: 5,
textAlign: 'left',
text: BI.i18nText('Dec-Dcm_Connection_Form_ConnectionName-Change-Confirm'),
},
],
},
{
type: VerticalAdapt,
items: [
{
type: Label,
cls: 'bi-font-bold',
width: 115,
textAlign: 'left',
text: BI.i18nText('Dec-Dcm_First_Step'),
},
{
type: Vertical,
vgap: 10,
items: [
{
type: VerticalAdapt,
items: [
{
type: Label,
cls: 'bi-font-bold',
width: 115,
textAlign: 'left',
text: BI.i18nText('Dec-Dcm_Connection_Form_Driver'),
},
{
type: TextValueCombo,
width: 300,
text: linkSelected.driver,
items: getDrivers(linkSelected),
listeners: [{
eventName: BI.TextValueCombo.EVENT_CHANGE,
action() {
that.store.setLinkUpdate({
...that.model.linkUpdate,
driver: this.getValue()[0],
});
},
}],
},
],
},
{
type: VerticalAdapt,
items: [
{
type: Label,
cls: 'bi-font-bold',
width: 115,
textAlign: 'left',
text: BI.i18nText('Dec-Dcm_Connection_Form_URL'),
},
{
type: TextEditor,
watermark: BI.i18nText('Dec-Dcm_Connection_Form_Place_Input'),
width: 300,
value: linkSelected.url,
listeners: [{
eventName: BI.Editor.EVENT_CHANGE,
action() {
that.store.setLinkUpdate({
...that.model.linkUpdate,
url: this.getValue(),
});
},
}],
},
],
},
{
type: VerticalAdapt,
items: [
{
type: Label,
cls: 'bi-font-bold',
width: 115,
textAlign: 'left',
text: BI.i18nText('Dec-Dcm_Connection_Form_OriginalCharsetName'),
},
{
type: TextValueCombo,
width: 300,
text: linkSelected.originalCharsetName === '' ? BI.i18nText('Dec-Dcm_Connection_Form_Auto') : linkSelected.originalCharsetName,
items: [
{
text: BI.i18nText('Dec-Dcm_Connection_Form_Auto'),
value: '',
},
...CONNECT_CHARSET,
],
listeners: [{
eventName: BI.TextValueCombo.EVENT_CHANGE,
action() {
that.store.setLinkUpdate({
...that.model.linkUpdate,
originalCharsetName: this.getValue()[0],
});
},
}],
},
],
},
{
type: VerticalAdapt,
items: [
{
type: Label,
cls: 'bi-font-bold',
width: 115,
textAlign: 'left',
text: BI.i18nText('Dec-Dcm_Connection_Form_UserName'),
},
{
type: TextEditor,
allowBlank: true,
watermark: BI.i18nText('Dec-Dcm_Connection_Form_Place_Input'),
width: 300,
value: linkSelected.user,
listeners: [{
eventName: BI.Editor.EVENT_CHANGE,
action() {
that.store.setLinkUpdate({
...that.model.linkUpdate,
user: this.getValue(),
});
},
}],
},
],
},
{
type: VerticalAdapt,
items: [
{
type: Label,
cls: 'bi-font-bold',
width: 115,
textAlign: 'left',
text: BI.i18nText('Dec-Dcm_Connection_Form_Password'),
},
{
type: TextEditor,
inputType: 'password',
allowBlank: true,
watermark: BI.i18nText('Dec-Dcm_Connection_Form_Place_Input'),
width: 300,
value: linkSelected.password,
listeners: [{
eventName: BI.Editor.EVENT_CHANGE,
action() {
that.store.setLinkUpdate({
...that.model.linkUpdate,
password: this.getValue(),
});
},
}],
},
],
},
{
type: Title,
text: BI.i18nText('Dec-Dcm_Connection_Form_Pool_Properties'),
},
{
type: VerticalAdapt,
items: [
{
type: Label,
cls: 'bi-font-bold',
width: 115,
textAlign: 'left',
text: BI.i18nText('Dec-Dcm_Connection_Form_SQL_Validation_Query'),
},
{
type: TextAreaEditor,
cls: 'bi-border',
allowBlank: true,
watermark: BI.i18nText('Dec-Dcm_Connection_Form_Place_Input'),
width: 300,
height: 100,
value: linkSelected.validationQuery,
listeners: [{
eventName: BI.Editor.EVENT_CHANGE,
action() {
that.store.setLinkUpdate({
...that.model.linkUpdate,
validationQuery: this.getValue(),
});
},
}],
},
],
},
{
type: VerticalAdapt,
items: [
{
type: Label,
cls: 'bi-font-bold',
width: 115,
textAlign: 'left',
text: BI.i18nText('Dec-Dcm_Connection_Form_Connection-Check'),
},
{
type: MultiSelectItem,
text: BI.i18nText('Dec-Dcm_Yes'),
selected: linkSelected.testOnBorrow,
width: 60,
listeners: [{
eventName: BI.Editor.EVENT_CHANGE,
action() {
that.store.setLinkUpdate({
...that.model.linkUpdate,
testOnBorrow: this.isSelected(),
});
},
}],
},
],
},
{
type: VerticalAdapt,
items: [
{
type: Label,
cls: 'bi-font-bold',
width: 115,
textAlign: 'left',
text: BI.i18nText('Dec-Dcm_Connection_Form_Connection_Max_Number'),
},
{
type: TextEditor,
allowBlank: true,
watermark: BI.i18nText('Dec-Dcm_Connection_Form_Place_Input'),
width: 60,
value: linkSelected.maxActive,
errorText: BI.i18nText('Dec-Dcm_Connection_Form_Place_Input-Number'),
validationChecker: connectNameChecker,
listeners: [{
eventName: BI.Editor.EVENT_CHANGE,
action() {
that.store.setLinkUpdate({
...that.model.linkUpdate,
maxActive: this.getValue(),
});
},
}],
},
],
},
],
},
],
},
{
type: VerticalAdapt,
items: [
{
type: Label,
cls: 'bi-font-bold',
width: 115,
textAlign: 'left',
text: BI.i18nText('Dec-Dcm_Second_Step'),
},
{
type: Button,
width: 80,
text: BI.i18nText('Dec-Dcm_Test_Connection'),
level: 'ignore',
},
],
},
{
type: VerticalAdapt,
items: [
{
type: Label,
cls: 'bi-font-bold',
width: 115,
textAlign: 'left',
text: BI.i18nText('Dec-Dcm_Third_Step'),
},
{
type: Label,
cls: 'bi-font-bold',
width: 115,
textAlign: 'left',
text: BI.i18nText('Dec-Dcm_Connection_Form_Pattern'),
},
{
type: TextEditor,
width: 300,
disabled: true,
},
],
},
],
};
},
};
BI.shortcut(className, BI.inherit(BI.Widget, Widget));
export default className;

226
src/app/connection/right/right_edit/right_edit_jndi.ts

@ -0,0 +1,226 @@
import {Vertical, TextValueCombo, TextButton, Label, TextEditor, VerticalAdapt} from '@ui';
import {JNDI_FACTORYS, OTHER_ATTRIBUTES, CONNECT_CHARSET} from '@private/constants';
import {AttributeType} from '../right.typing';
import ModelName from './right_edit.model';
const classNameEdit = 'dec.dcm.component.right.edit.jndi';
const Widget = BI.inherit(BI.Widget, {
_store() {
return BI.Models.getModel(ModelName);
},
watch: {
isCollapse(isCollapse) {
const text = isCollapse ? BI.i18nText('Dec-Dcm_Connection_Form_JNDI_Collapse-Attributes') : BI.i18nText('Dec-Dcm_Connection_Form_JNDI_Other_Attributes');
this.collapseRef.setText(text);
this.otherAttributesRef.setVisible(isCollapse);
},
},
render() {
const {connectionName, url, factory, principal, credentials, originalCharsetName} = this.options;
return {
type: Vertical,
vgap: 10,
items: [
{
type: VerticalAdapt,
items: [
{
type: Label,
cls: 'bi-font-bold',
width: 115,
textAlign: 'left',
text: BI.i18nText('Dec-Dcm_Connection_JNDI_Form_ConnectionName'),
},
{
type: TextEditor,
width: 300,
allowBlank: true,
value: connectionName,
},
],
},
{
type: VerticalAdapt,
items: [
{
type: Label,
cls: 'bi-font-bold',
width: 115,
textAlign: 'left',
text: BI.i18nText('Dec-Dcm_Connection_Form_JNDI_Context'),
},
{
type: Vertical,
vgap: 10,
items: [
{
type: VerticalAdapt,
items: [
{
type: Label,
cls: 'bi-font-bold',
width: 180,
textAlign: 'left',
text: 'INTIAL_CONTEXT_FACTORY',
},
{
type: TextValueCombo,
width: 300,
value: factory,
items: BI.map(JNDI_FACTORYS, (index: number, item: string) => {
return {
text: item,
value: item,
};
}),
},
],
},
{
type: VerticalAdapt,
items: [
{
type: Label,
cls: 'bi-font-bold',
width: 180,
textAlign: 'left',
text: 'PROVIDER_URL',
},
{
type: TextEditor,
width: 300,
allowBlank: true,
value: url,
},
],
},
{
type: VerticalAdapt,
items: [
{
type: Label,
cls: 'bi-font-bold',
width: 180,
textAlign: 'left',
text: 'SECURITY_PRINCIPAL',
},
{
type: TextEditor,
width: 300,
allowBlank: true,
value: principal,
},
],
},
{
type: VerticalAdapt,
items: [
{
type: Label,
cls: 'bi-font-bold',
width: 180,
textAlign: 'left',
text: 'SECURITY_CREDENTIALS',
},
{
type: TextEditor,
width: 300,
allowBlank: true,
value: credentials,
},
],
},
{
type: VerticalAdapt,
items: [
{
type: TextButton,
text: BI.i18nText('Dec-Dcm_Connection_Form_JNDI_Other_Attributes'),
width: 480,
textAlign: 'right',
ref: _ref => {
this.collapseRef = _ref;
},
handler: () => {
this.store.setIsCollapse(!this.model.isCollapse);
},
},
],
},
{
type: Vertical,
invisible: true,
ref: _ref => {
this.otherAttributesRef = _ref;
},
items: this._getOtherItems(),
},
],
},
],
},
{
type: Label,
cls: 'bi-error',
lgap: 10,
textAlign: 'left',
text: BI.i18nText('Dec-Dcm_Connection_Form_JNDI_Notice'),
},
{
type: VerticalAdapt,
items: [
{
type: Label,
cls: 'bi-font-bold',
width: 115,
textAlign: 'left',
text: BI.i18nText('Dec-Dcm_Connection_Form_JNDI_Advanced'),
},
{
type: Label,
cls: 'bi-font-bold',
width: 180,
textAlign: 'left',
text: BI.i18nText('Dec-Dcm_Connection_Form_OriginalCharsetName'),
},
{
type: TextValueCombo,
width: 300,
items: [{
text: BI.i18nText('Dec-Dcm_Connection_Form_Auto'),
value: originalCharsetName,
},
...CONNECT_CHARSET,
],
},
],
},
],
};
},
_getOtherItems() {
return BI.map(OTHER_ATTRIBUTES, (index: number, item: AttributeType) => {
return {
type: VerticalAdapt,
items: [
{
type: Label,
cls: 'bi-font-bold',
width: 180,
textAlign: 'left',
text: item.text,
},
{
type: TextEditor,
width: 300,
allowBlank: true,
value: this.options[item.name],
},
],
};
});
},
});
BI.shortcut(classNameEdit, Widget);
export default classNameEdit;

325
src/app/connection/right/right_edit/right_edit_mysql.ts

@ -0,0 +1,325 @@
import {WidgetType, Vertical, MultiSelectItem, TextAreaEditor, Button, TextValueCombo, TextEditor, VerticalAdapt, Label} from '@ui/index';
import {LinkType} from '@ui/type';
import {CONNECT_CHARSET} from '@private/constants';
import Model from '../../link_set.model';
import Title from '@shared/components/title';
import {getDrivers, connectNameChecker} from './right_edit.service';
let connectionName: any = null;
const className = 'dec.dcm.component.right.edit.mysql';
const Widget: WidgetType = {
_store() {
return BI.Models.getModel(Model);
},
watch: {
connectionNameErr(msg: string) {
if (msg) {
BI.Bubbles.show('singleBubble', msg, connectionName, {
level: 'error',
});
} else {
BI.Bubbles.hide('singleBubble');
}
},
},
render() {
const linkSelected: LinkType = this.model.linkSelected;
const that = this;
return {
type: Vertical,
vgap: 10,
items: [
{
type: VerticalAdapt,
items: [
{
type: Label,
cls: 'bi-font-bold',
width: 115,
textAlign: 'left',
text: BI.i18nText('Dec-Dcm_Connection_Form_ConnectionName'),
},
{
type: TextEditor,
width: 300,
value: linkSelected.connectionName,
ref(ref: any) {
connectionName = ref;
},
listeners: [{
eventName: BI.Editor.EVENT_CHANGE,
action() {
that.store.setLinkUpdate({
...that.model.linkUpdate,
connectionName: this.getValue(),
});
},
}, {
eventName: BI.Editor.EVENT_FOCUS,
action() {
that.store.setConnectionNameErr('');
},
}],
},
{
type: Label,
cls: 'bi-water-mark',
lgap: 5,
textAlign: 'left',
text: BI.i18nText('Dec-Dcm_Connection_Form_ConnectionName-Change-Confirm'),
},
],
},
{
type: VerticalAdapt,
items: [
{
type: Label,
cls: 'bi-font-bold',
width: 115,
textAlign: 'left',
text: BI.i18nText('Dec-Dcm_Connection_Form_Driver'),
},
{
type: TextValueCombo,
width: 300,
text: linkSelected.driver,
items: getDrivers(linkSelected),
listeners: [{
eventName: BI.TextValueCombo.EVENT_CHANGE,
action() {
that.store.setLinkUpdate({
...that.model.linkUpdate,
driver: this.getValue()[0],
});
},
}],
},
],
},
{
type: VerticalAdapt,
items: [
{
type: Label,
cls: 'bi-font-bold',
width: 115,
textAlign: 'left',
text: BI.i18nText('Dec-Dcm_Connection_Form_URL'),
},
{
type: TextEditor,
watermark: BI.i18nText('Dec-Dcm_Connection_Form_Place_Input'),
width: 300,
value: linkSelected.url,
listeners: [{
eventName: BI.Editor.EVENT_CHANGE,
action() {
that.store.setLinkUpdate({
...that.model.linkUpdate,
url: this.getValue(),
});
},
}],
},
],
},
{
type: VerticalAdapt,
items: [
{
type: Label,
cls: 'bi-font-bold',
width: 115,
textAlign: 'left',
text: BI.i18nText('Dec-Dcm_Connection_Form_OriginalCharsetName'),
},
{
type: TextValueCombo,
width: 300,
text: linkSelected.originalCharsetName === '' ? BI.i18nText('Dec-Dcm_Connection_Form_Auto') : linkSelected.originalCharsetName,
items: [
{
text: BI.i18nText('Dec-Dcm_Connection_Form_Auto'),
value: '',
},
...CONNECT_CHARSET,
],
listeners: [{
eventName: BI.TextValueCombo.EVENT_CHANGE,
action() {
that.store.setLinkUpdate({
...that.model.linkUpdate,
originalCharsetName: this.getValue()[0],
});
},
}],
},
],
},
{
type: VerticalAdapt,
items: [
{
type: Label,
cls: 'bi-font-bold',
width: 115,
textAlign: 'left',
text: BI.i18nText('Dec-Dcm_Connection_Form_UserName'),
},
{
type: TextEditor,
allowBlank: true,
watermark: BI.i18nText('Dec-Dcm_Connection_Form_Place_Input'),
width: 300,
value: linkSelected.user,
listeners: [{
eventName: BI.Editor.EVENT_CHANGE,
action() {
that.store.setLinkUpdate({
...that.model.linkUpdate,
user: this.getValue(),
});
},
}],
},
],
},
{
type: VerticalAdapt,
items: [
{
type: Label,
cls: 'bi-font-bold',
width: 115,
textAlign: 'left',
text: BI.i18nText('Dec-Dcm_Connection_Form_Password'),
},
{
type: TextEditor,
inputType: 'password',
allowBlank: true,
watermark: BI.i18nText('Dec-Dcm_Connection_Form_Place_Input'),
width: 300,
value: linkSelected.password,
listeners: [{
eventName: BI.Editor.EVENT_CHANGE,
action() {
that.store.setLinkUpdate({
...that.model.linkUpdate,
password: this.getValue(),
});
},
}],
},
],
},
{
type: Title,
text: BI.i18nText('Dec-Dcm_Connection_Form_Pool_Properties'),
},
{
type: VerticalAdapt,
items: [
{
type: Label,
cls: 'bi-font-bold',
width: 115,
textAlign: 'left',
text: BI.i18nText('Dec-Dcm_Connection_Form_SQL_Validation_Query'),
},
{
type: TextAreaEditor,
cls: 'bi-border',
allowBlank: true,
watermark: BI.i18nText('Dec-Dcm_Connection_Form_Place_Input'),
width: 300,
height: 100,
value: linkSelected.validationQuery,
listeners: [{
eventName: BI.Editor.EVENT_CHANGE,
action() {
that.store.setLinkUpdate({
...that.model.linkUpdate,
validationQuery: this.getValue(),
});
},
}],
},
],
},
{
type: VerticalAdapt,
items: [
{
type: Label,
cls: 'bi-font-bold',
width: 115,
textAlign: 'left',
text: BI.i18nText('Dec-Dcm_Connection_Form_Connection-Check'),
},
{
type: MultiSelectItem,
text: BI.i18nText('Dec-Dcm_Yes'),
selected: linkSelected.testOnBorrow,
width: 60,
listeners: [{
eventName: BI.Editor.EVENT_CHANGE,
action() {
that.store.setLinkUpdate({
...that.model.linkUpdate,
testOnBorrow: this.isSelected(),
});
},
}],
},
],
},
{
type: VerticalAdapt,
items: [
{
type: Label,
cls: 'bi-font-bold',
width: 115,
textAlign: 'left',
text: BI.i18nText('Dec-Dcm_Connection_Form_Connection_Max_Number'),
},
{
type: TextEditor,
allowBlank: true,
watermark: BI.i18nText('Dec-Dcm_Connection_Form_Place_Input'),
width: 60,
value: linkSelected.maxActive,
errorText: BI.i18nText('Dec-Dcm_Connection_Form_Place_Input-Number'),
validationChecker: connectNameChecker,
listeners: [{
eventName: BI.Editor.EVENT_CHANGE,
action() {
that.store.setLinkUpdate({
...that.model.linkUpdate,
maxActive: this.getValue(),
});
},
}],
},
],
},
{
type: VerticalAdapt,
items: [
{
type: Button,
width: 80,
text: BI.i18nText('Dec-Dcm_Test_Connection'),
level: 'ignore',
},
],
},
],
};
},
};
BI.shortcut(className, BI.inherit(BI.Widget, Widget));
export default className;

20
src/app/connection/right/right_show/right_show.model.ts

@ -0,0 +1,20 @@
export const className = 'dec.dcm.model.components.right.show';
export const Model = BI.inherit(Fix.Model, {
state() {
return {
isCollapse: false,
};
},
computed: {
},
actions: {
setIsCollapse(status: boolean) {
this.model.isCollapse = status;
},
},
});
BI.model(className, Model);
export default className;

10
src/app/link_set/right/right_show/right.show.component.ts → src/app/connection/right/right_show/right_show.ts

@ -1,9 +1,9 @@
import {WidgetType, Vertical} from '@ui/index'; import {WidgetType, Vertical} from '@ui/index';
import RightShowModel from '../../link-set.model'; import RightShowModel from '../../link_set.model';
import BothSide from '@shared/components/both.side.component'; import BothSide from '@shared/components/both_side';
import Title from '@shared/components/title.component'; import Title from '@shared/components/title';
import {LinkType} from '@ui/type'; import {LinkType} from '@ui/type';
const className = 'fr.component.right.show'; const className = 'dec.dcm.component.right.show';
const Widget: WidgetType = { const Widget: WidgetType = {
_store() { _store() {
return BI.Models.getModel(RightShowModel); return BI.Models.getModel(RightShowModel);
@ -13,7 +13,7 @@ const Widget: WidgetType = {
return { return {
type: Vertical, type: Vertical,
cls: 'right-show', vgap: 10,
items: [ items: [
{ {
type: BothSide, type: BothSide,

203
src/app/connection/right/right_show/right_show_jndi.ts

@ -0,0 +1,203 @@
import {Vertical, TextButton, Label, VerticalAdapt} from '@ui';
import {OTHER_ATTRIBUTES} from '@private/constants';
import {AttributeType} from '../right.typing';
import ModelName from './right_show.model';
const className = 'dec.dcm.component.right.show.jndi';
const Widget = BI.inherit(BI.Widget, {
_store() {
return BI.Models.getModel(ModelName);
},
watch: {
isCollapse(isCollapse) {
const text = isCollapse ? BI.i18nText('Dec-Dcm_Connection_Form_JNDI_Collapse-Attributes') : BI.i18nText('Dec-Dcm_Connection_Form_JNDI_Other_Attributes');
this.collapseRef.setText(text);
this.otherAttributesRef.setVisible(isCollapse);
},
},
render() {
const {connectionName, url, factory, principal, credentials, originalCharsetName} = this.options;
return {
type: Vertical,
vgap: 10,
items: [
{
type: VerticalAdapt,
items: [
{
type: Label,
cls: 'bi-font-bold',
width: 115,
textAlign: 'left',
text: BI.i18nText('Dec-Dcm_Connection_JNDI_Form_ConnectionName'),
},
{
type: Label,
text: connectionName,
},
],
},
{
type: VerticalAdapt,
items: [
{
type: Label,
cls: 'bi-font-bold',
width: 115,
textAlign: 'left',
text: BI.i18nText('Dec-Dcm_Connection_Form_JNDI_Context'),
},
{
type: Vertical,
vgap: 10,
items: [
{
type: VerticalAdapt,
items: [
{
type: Label,
cls: 'bi-font-bold',
width: 180,
textAlign: 'left',
text: 'INTIAL_CONTEXT_FACTORY',
},
{
type: Label,
text: factory,
},
],
},
{
type: VerticalAdapt,
items: [
{
type: Label,
cls: 'bi-font-bold',
width: 180,
textAlign: 'left',
text: 'PROVIDER_URL',
},
{
type: Label,
text: url,
},
],
},
{
type: VerticalAdapt,
items: [
{
type: Label,
cls: 'bi-font-bold',
width: 180,
textAlign: 'left',
text: 'SECURITY_PRINCIPAL',
},
{
type: Label,
value: principal,
},
],
},
{
type: VerticalAdapt,
items: [
{
type: Label,
cls: 'bi-font-bold',
width: 180,
textAlign: 'left',
text: 'SECURITY_CREDENTIALS',
},
{
type: Label,
value: credentials,
},
],
},
{
type: VerticalAdapt,
items: [
{
type: TextButton,
text: BI.i18nText('Dec-Dcm_Connection_Form_JNDI_Other_Attributes'),
width: 480,
textAlign: 'right',
ref: _ref => {
this.collapseRef = _ref;
},
handler: () => {
this.store.setIsCollapse(!this.model.isCollapse);
},
},
],
},
{
type: Vertical,
invisible: true,
ref: _ref => {
this.otherAttributesRef = _ref;
},
items: this._getOtherItems(),
},
],
},
],
},
{
type: Label,
cls: 'bi-error',
lgap: 10,
textAlign: 'left',
text: BI.i18nText('Dec-Dcm_Connection_Form_JNDI_Notice'),
},
{
type: VerticalAdapt,
items: [
{
type: Label,
cls: 'bi-font-bold',
width: 115,
textAlign: 'left',
text: BI.i18nText('Dec-Dcm_Connection_Form_JNDI_Advanced'),
},
{
type: Label,
cls: 'bi-font-bold',
width: 180,
textAlign: 'left',
text: BI.i18nText('Dec-Dcm_Connection_Form_OriginalCharsetName'),
},
{
type: Label,
text: originalCharsetName ? originalCharsetName : BI.i18nText('Dec-Dcm_Connection_Form_Auto'),
},
],
},
],
};
},
_getOtherItems() {
return BI.map(OTHER_ATTRIBUTES, (index: number, item: AttributeType) => {
return {
type: VerticalAdapt,
items: [
{
type: Label,
cls: 'bi-font-bold',
width: 180,
textAlign: 'left',
text: item.text,
},
{
type: Label,
value: this.options[item.name],
},
],
};
});
},
});
BI.shortcut(className, Widget);
export default className;

20
src/app/connection/right/right_title/right_title.model.ts

@ -0,0 +1,20 @@
import LinksetMixin from '../../link_set.mixin';
import {LinkType} from '@ui/type';
const modelName = 'dec.dcm.model.component.right.title';
export const Model = BI.inherit(Fix.Model, {
context: ['linkSelected', 'linkList', 'linkUpdate'],
mixins: [LinksetMixin],
actions: {
onSave() {
const linkList: LinkType[] = this.model.linkList;
const result = BI.find(linkList, (idx: number, value: LinkType) => this.model.linkUpdate.connectionName === value.connectionName && value.connectionId !== this.model.linkUpdate.connectionId);
if (result) {
this.setConnectionNameErr(BI.i18nText('Dec-Dcm_Connection_Is_Existence'));
} else {
this.saveLink();
}
},
},
});
BI.model(modelName, Model);
export default modelName;

66
src/app/connection/right/right_title/right_title.ts

@ -0,0 +1,66 @@
import {WidgetType, Label, Button, LeftRightVerticalAdapt} from '@ui/index';
import RightTitleModel from './right_title.model';
import {LinkType} from '@ui/type';
import {OTHER_CONNECT} from '@private/constants';
const className = 'dec.dcm.component.right.title';
const Widget: WidgetType = {
props: {
baseCls: 'bi-border-bottom',
},
_store() {
return BI.Models.getModel(RightTitleModel);
},
render() {
const linkSelected: LinkType = this.model.linkSelected;
const that = this;
const {isEdit} = this.options;
const title = linkSelected.text === OTHER_CONNECT ? BI.i18nText('Dec-Dcm_Connection_Other') : linkSelected.text;
return {
type: LeftRightVerticalAdapt,
height: 40,
items: {
left: [
{
type: Label,
cls: 'bi-font-bold',
hgap: 10,
text: `${BI.i18nText('Dec-Dcm_Data_Connections')}(${title ? title : BI.i18nText('Dec-Dcm_Default')})`,
},
],
right: [
{
type: Button,
hgap: 10,
invisible: isEdit,
text: BI.i18nText('Dec-Dcm_Edit'),
handler() {
that.store.setEdit(true);
},
},
{
type: Button,
hgap: 10,
invisible: !isEdit,
level: 'ignore',
text: BI.i18nText('BI-Basic_Cancel'),
handler() {
that.store.setCancel();
},
},
{
type: Button,
hgap: 10,
invisible: !isEdit,
text: BI.i18nText('Dec-Dcm_Save'),
handler() {
that.store.onSave();
},
},
],
},
};
},
};
BI.shortcut(className, BI.inherit(BI.Widget, Widget));
export default className;

23
src/app/connection/select/select.service.ts

@ -0,0 +1,23 @@
import {LinkType} from '@ui/type';
import pluginListConstant from '../../app.constant';
export const getCnnectionName = (links: LinkType[], name: string): string => {
const plugins: string[] = BI.Constants.getConstant(pluginListConstant);
let nameIndex = 0;
const title = name.replace(/[0-9]/g, '');
const isPlugin = BI.some(plugins, (index: number, item: string) => item === title);
const startWith = isPlugin ? title : BI.i18nText('Dec-Dcm_Data_Connections');
links.forEach(link => {
link.isSelected = false;
if (link.connectionName.startsWith(startWith)) {
const name = link.connectionName.replace(startWith, '0');
const index = parseInt(name, 10) + 1;
if (index > nameIndex) {
nameIndex = index;
}
}
});
return `${startWith}${nameIndex > 0 ? nameIndex : ''}`;
};

30
src/app/link_set/select/select.component.ts → src/app/connection/select/select.ts

@ -1,51 +1,49 @@
import {WidgetType, Combo, ButtonGroup, TextItem, Vertical} from '@ui'; import {WidgetType, Combo, ButtonGroup, TextItem, Vertical} from '@ui';
import selectModel from '../link-set.model'; import selectModel from '../link_set.model';
import {moreLink} from '../more/more.link.service'; import {moreLink} from '../more/more_link.service';
import connectList, {links} from '../../app.constant'; import connectList from '../../app.constant';
const className = 'fr.linkset.select'; import {DATA_LINKS} from '@private/constants';
const className = 'dec.dcm.linkset.select';
const Widget: WidgetType = { const Widget: WidgetType = {
_store() { _store() {
return BI.Models.getModel(selectModel); return BI.Models.getModel(selectModel);
}, },
render() { render() {
let combo: any = null;
return { return {
type: Combo, type: Combo,
cls:'select',
trigger: 'click', trigger: 'click',
adjustYOffset: 4, adjustYOffset: 4,
el: { el: {
type: 'bi.button', type: 'bi.button',
text: BI.i18nText('Dec-Dcm_Connection_New'), text: BI.i18nText('Dec-Dcm_Connection_New'),
height: 24,
}, },
popup: { popup: {
el: { el: {
type: ButtonGroup, type: ButtonGroup,
cls:'database-link-items', items: [...BI.map([...DATA_LINKS, ...BI.Constants.getConstant(connectList)], (index: number, item: string) => {
items: [...BI.map([...links, ...BI.Constants.getConstant(connectList)], (index: number, item: string) => {
return { return {
type: TextItem, type: TextItem,
height: 24, height: 24,
width: 152, width: 152,
textLgap: 10,
text: item, text: item,
title: item, title: item,
value: item, value: item,
}; };
}), { }), {
type: TextItem, type: TextItem,
cls: 'link-item',
height: 24, height: 24,
width: 152, width: 152,
textLgap: 10,
text: BI.i18nText('Dec-Dcm_Connection_More'), text: BI.i18nText('Dec-Dcm_Connection_More'),
title: BI.i18nText('Dec-Dcm_Connection_More'), title: BI.i18nText('Dec-Dcm_Connection_More'),
value: 'more', value: 'more',
}, { }, {
type: TextItem, type: TextItem,
cls: 'link-item', cls: 'bi-border-top',
height: 24, height: 24,
width: 152, width: 152,
textLgap: 10,
text: BI.i18nText('Dec-Dcm_Connection_Other'), text: BI.i18nText('Dec-Dcm_Connection_Other'),
title: BI.i18nText('Dec-Dcm_Connection_Other'), title: BI.i18nText('Dec-Dcm_Connection_Other'),
value: 'other', value: 'other',
@ -56,7 +54,7 @@ const Widget: WidgetType = {
}, },
maxHeight: 400, maxHeight: 400,
}, },
listeners:[{ listeners: [{
eventName: 'EVENT_CHANGE', eventName: 'EVENT_CHANGE',
action: (v: string) => { action: (v: string) => {
if (v === 'more') { if (v === 'more') {
@ -66,11 +64,11 @@ const Widget: WidgetType = {
} else { } else {
this.store.setNewLink(v); this.store.setNewLink(v);
} }
combo.hideView(); this.combo.hideView();
}, },
}], }],
ref () { ref: _ref => {
combo = this; this.combo = _ref;
}, },
}; };
}, },

26
src/app/link_set/left/left.component.ts

@ -1,26 +0,0 @@
import {WidgetType, Vertical} from '@ui';
import Model from '../link-set.model';
import {LinkType} from '@ui/type';
import {getLinks} from './left.service';
const className = 'fr.component.linkset.left';
let leftContent: any = null;
const Widget: WidgetType = {
_store() {
return BI.Models.getModel(Model);
},
watch:{
linkList(linkList: LinkType[]) {
leftContent.populate(BI.createItems(getLinks(linkList)));
},
},
render() {
return {
type: Vertical,
ref(_ref: any) {
leftContent = _ref;
},
};
},
};
BI.shortcut(className, BI.inherit(BI.Widget, Widget));
export default className;

18
src/app/link_set/left/left.service.ts

@ -1,18 +0,0 @@
import {LinkType} from '@ui/type';
import LeftItem from './left_item/left.item.component';
export const getLinks = (linkList: LinkType[]): any => {
const links: any[] = [];
linkList.forEach((item: LinkType) => {
links.push({
type: LeftItem,
extraCls: item.isSelected ? 'left-item-selected' : '',
title: item.connectionName,
id: item.connectionId,
creator: item.creator,
text: item.text ? item.text : BI.i18nText('Dec-Dcm_Default'),
});
});
return links;
};

80
src/app/link_set/left/left_item/left.item.component.ts

@ -1,80 +0,0 @@
import {WidgetType, Left, Label, Icon, TextButton} from '@ui';
import ItemIcon from './left.item.icon.component';
import Model from '../../link-set.model';
import {ACTION_COPY, ACTION_TEST, ACTION_DELETE, DEFAULT_INFO} from '@private/constants';
const className = 'fr.component.linkSet.left.item';
const Widget: WidgetType = {
props: {
title: '',
id: '',
creator: '',
},
_store() {
return BI.Models.getModel(Model);
},
render() {
const {title, extraCls, creator, text, id} = this.options;
return {
type: Left,
cls: 'left-item',
extraCls,
items: [
{
type: Icon,
cls: 'link-font',
height: 24,
width: 26,
text: BI.i18nText('Dec-Dcm_Connections'),
title,
},
{
type: TextButton,
cls: 'link-title',
textAlign: 'left',
text: title,
title,
handler: () => {
this.store.setLinkSelected(title);
},
},
{
type: Left,
cls: 'icons',
items: [
{
type: ItemIcon,
cls: 'link-text-font',
title: BI.i18nText('Dec-Dcm_Test_Connection'),
value: ACTION_TEST,
id,
},
{
type: ItemIcon,
cls: 'copy-font',
title: BI.i18nText('Dec-Dcm_Copy'),
value: ACTION_COPY,
id,
},
{
type: ItemIcon,
cls: 'info-font',
title: `${BI.i18nText('Dec-Dcm_Type')}${text === DEFAULT_INFO ? BI.i18nText('Dec-Dcm_Other') : text} \r\n${BI.i18nText('Dec-Dcm_Creator')}${creator}`,
id,
},
{
type: ItemIcon,
cls: 'delete-font',
title: BI.i18nText('Dec-Dcm_Delete'),
value: ACTION_DELETE,
id,
},
],
},
],
};
},
};
BI.shortcut(className, BI.inherit(BI.Widget, Widget));
export default className;

81
src/app/link_set/left/left_item/left.item.icon.component.ts

@ -1,81 +0,0 @@
import {WidgetType, Icon, BubbleCombo, TextBubblePopupBarView, IconButton} from '@ui/index';
import Model from '../../link-set.model';
import {ACTION_DELETE} from '@private/constants';
const className = 'fr.component.linkSet.left.item.icon';
const Widget: WidgetType = {
_store() {
return BI.Models.getModel(Model);
},
render() {
const {cls, title, id, value} = this.options;
const that = this;
let iconContent: any = null;
let combo: any = null;
if (value === ACTION_DELETE) {
return {
type: BubbleCombo,
direction: 'bottom',
ref () {
combo = this;
},
el: {
type: Icon,
cls,
baseCls: 'action-icon',
height: 24,
width: 26,
title,
ref (ref: any) {
iconContent = ref;
},
},
popup: {
type: TextBubblePopupBarView,
text: BI.i18nText('Dec-Dcm_Connection_Make_Sure_Delete'),
listeners: [{
eventName: BI.BubblePopupBarView.EVENT_CLICK_TOOLBAR_BUTTON,
action (type: boolean) {
combo.hideView();
if (type) {
that.store.onIconClick(title, id);
}
},
}],
},
listeners: [{
eventName: BI.BubbleCombo.EVENT_EXPAND,
action () {
iconContent.element.css({
visibility: 'visible',
});
},
}, {
eventName: BI.BubbleCombo.EVENT_AFTER_HIDEVIEW,
action () {
iconContent.element.css({
visibility: 'hidden',
});
},
}],
};
}
return {
type: IconButton,
cls,
extraCls: 'action-icon',
height: 24,
width: 26,
title,
handler: () => {
const {value, id, title} = this.options;
if (value !== ACTION_DELETE) {
this.store.onIconClick(title, id);
}
},
};
},
};
BI.shortcut(className, BI.inherit(BI.Widget, Widget));
export default className;

195
src/app/link_set/link-set.model.ts

@ -1,195 +0,0 @@
import {ModelType} from '@ui/index';
import {LinkType} from '@ui/type';
import {deleteConnection, testConnection} from '@shared/crud/crud.request';
import {databaseTyle, getCnnectionName} from './select/select.service';
import dialog from '@shared/service/dialog.service';
import {saveConnection} from './link-set.service';
const className = 'fr.model.linkset';
const Model: ModelType = {
context: ['tab', 'linkList', 'linkSelected', 'linkUpdate', 'connectionNameErr'],
actions: {
/**
*
* @param name
*/
setLinkSelected(name: string) {
this.noSaveConfirm(() => {
this._setLinkSelected(name);
});
},
_setLinkSelected(name: string) {
this.model.linkList.forEach((item: LinkType) => {
item.isSelected = item.connectionName === name;
if (item.connectionName === name) {
this.model.linkSelected = {
...item,
isSelected: false,
};
}
});
this.model.linkList = [...this.model.linkList];
this.model.linkUpdate = this.model.linkSelected;
},
onIconClick(title: string, id: string) {
switch (title) {
case BI.i18nText('Dec-Dcm_Delete'):
deleteConnection(id, () => {
this.model.linkList = [...this.model.linkList.filter((item: LinkType) => item.connectionId !== id)];
this.model.linkSelected = {};
this.model.linkUpdate = {};
});
break;
case BI.i18nText('Dec-Dcm_Test_Connection'):
this._textLink(id);
break;
case BI.i18nText('Dec-Dcm_Copy'):
this.noSaveConfirm(() => {
this.copyLink(id);
});
break;
default:
break;
}
},
_textLink(id: string) {
const loadingId = dialog.loading(BI.i18nText('Dec-Dcm_Connection_Testing'));
const link = this.model.linkList.find((item: LinkType) => item.connectionId === id);
testConnection(link, (res: any) => {
dialog.close(loadingId);
if (res && res.errorCode) {
dialog.linkFail(`${link.connectionName}${BI.i18nText('Dec-Dcm_Connection_Test_Fail')}`, res.errorMsg, () => {
this._textLink(id);
});
} else {
dialog.success(BI.i18nText('Dec-Dcm_Connection_Test_Success'));
}
});
},
copyLink(id: string) {
const connectionName = BI.find(this.model.linkList, (index: number, item: LinkType) => item.connectionId === id).connectionName;
const name = getCnnectionName(this.model.linkList, connectionName);
let data = {};
this.model.linkList.forEach((item: LinkType) => {
if (item.connectionId === id) {
data = item;
}
});
const newCopy = {
...data,
isSelected: true,
connectionName:name,
connectionId: '',
};
this.model.linkList = [
newCopy,
...this.model.linkList,
];
this.model.linkSelected = {
...newCopy,
};
this.model.linkUpdate = {
...newCopy,
};
},
setLinkUpdate(value: any) {
this.model.linkUpdate = value;
},
setEdit(type: boolean) {
this.model.linkSelected = {
...this.model.linkSelected,
isSelected: type,
};
this.model.linkUpdate = this.model.linkSelected;
},
setCancel() {
const linkSelected: LinkType = this.model.linkSelected;
const linkList: LinkType[] = this.model.linkList;
if (linkSelected.connectionId) {
this.setEdit(false);
} else {
this.model.linkList = [
...linkList.filter(item => !!item.connectionId),
];
if (this.model.linkList.length > 0) {
this.model.linkList[0].isSelected = true;
this.model.linkSelected = {
...this.model.linkList[0],
isSelected: false,
};
} else {
this.model.linkSelected = {};
}
this.model.linkUpdate = this.model.linkSelected;
}
},
setNewLink(value: string) {
if (!databaseTyle.some(item => item.text === value) && !BI.Constants.getConstant(`dec.constant.database.conf.connect.form.${value.toLowerCase()}.edit`)) {
dialog.error(BI.i18nText('Dec-Dcm_Connection_Option_Cannot_Find'));
return;
}
this.noSaveConfirm(() => {
this._setNewLink(value);
});
},
_setNewLink(value: string) {
const name = getCnnectionName(this.model.linkList, value);
let data = {};
databaseTyle.forEach(item => {
if (item.text === value) {
data = item;
}
});
this.model.linkList = [
{
connectionName:name,
isSelected: true,
...data,
text: value,
},
...this.model.linkList,
];
this.model.linkSelected = {
...data,
connectionName:name,
isSelected: true,
text: value,
};
this.model.linkUpdate = {
...data,
connectionName:name,
text: value,
};
},
setConnectionNameErr(err: string) {
this.model.connectionNameErr = err;
},
noSaveConfirm(cb: Function) {
if (this.model.linkSelected && this.model.linkSelected.isSelected) {
dialog.confirm(BI.i18nText('Dec-Dcm_Connection_Config_No_Save'), (isConfirm: boolean) => {
if (isConfirm) {
this.saveLink();
} else {
this.setCancel();
}
cb();
});
} else {
cb();
}
},
saveLink() {
const pluginData = this.model.linkUpdate.text ? BI.Constants.getConstant(`dec.constant.database.conf.connect.form.${this.model.linkUpdate.text.toLowerCase()}.value`) : {};
const update = {
...this.model.linkUpdate,
...pluginData,
};
saveConnection(update).then(() => {
this.setEdit(false);
});
},
},
};
BI.model(className, BI.inherit(Fix.Model, Model));
export default className;

56
src/app/link_set/more/more.link.component.ts

@ -1,56 +0,0 @@
import {WidgetType, Vertical, SearchEditor, Left, Vtape} from '@ui/index';
import {databaseTyle} from '../select/select.service';
import MoreLinkItem from './more.link.item.component';
const className = 'fr.component.linkSet.morelink';
let morkLinkItem: any = null;
const Widget: WidgetType = {
render() {
return {
type: Vtape,
cls: 'more-link',
items: [
{
el: {
type: Vertical,
items: [{
type: SearchEditor,
width: 300,
watermark: BI.i18nText('Dec-Dcm_Search'),
}],
},
height: 30,
},
{
type: Left,
cls: 'more-link-item',
ref(ref: any) {
morkLinkItem = ref;
},
},
],
};
},
mounted() {
this._renderItems();
},
_renderItems(text = '') {
const databaseLink = databaseTyle.slice(12, 12 + 33);
const items: any[] = [];
const that = this;
databaseLink.forEach(item => {
items.push({
type: MoreLinkItem,
text: item.text,
name: item.databaseType,
selected: text === item.text,
handler: () => {
that._renderItems(item.text);
that.fireEvent('EVENT_SELECT', item.text);
},
});
});
morkLinkItem.populate(BI.createItems(items));
},
};
BI.shortcut(className, BI.inherit(BI.Widget, Widget));
export default className;

34
src/app/link_set/more/more.link.item.component.ts

@ -1,34 +0,0 @@
import {WidgetType, Vertical, Img, Label, Layout} from '@ui/index';
const className = 'fr.component.linkSet.morelink.item';
const Widget: WidgetType = {
render() {
const {text, name, selected} = this.options;
return {
type: Vertical,
cls:'link-item',
width: 120,
height: 117,
items:[
{
type: Img,
width: 120,
height: 90,
src:`./img/${name}.jpg`,
}, {
type: Layout,
cls: 'selected',
invisible: !selected,
width:30,
height: 30,
}, {
type: Label,
cls:'text',
text,
},
],
};
},
};
BI.shortcut(className, BI.inherit(BI.BasicButton, Widget));
export default className;

39
src/app/link_set/right/right.component.ts

@ -1,39 +0,0 @@
import {WidgetType, Vertical} from '@ui';
import {LinkType} from '@ui/type';
import Nothing from './nothing.component';
import RightDetail from './right_detail/right.detail.component';
import Model from '../link-set.model';
let rightContent: any = null;
const className = 'fr.component.right';
const Widget: WidgetType = {
_store() {
return BI.Models.getModel(Model);
},
watch:{
linkSelected(linkSelected: LinkType) {
rightContent.populate(BI.createItems([
{
type: (linkSelected && linkSelected.connectionName) ? RightDetail : Nothing,
},
]));
},
},
render() {
return {
type:Vertical,
cls:'database-right',
ref(_ref: any) {
rightContent = _ref;
},
};
},
mounted() {
rightContent.populate(BI.createItems([
{
type: Nothing,
},
]));
},
};
BI.shortcut(className, BI.inherit(BI.Widget, Widget));
export default className;

54
src/app/link_set/right/right_detail/right.detail.component.ts

@ -1,54 +0,0 @@
import {WidgetType, Vertical} from '@ui/index';
import Model from '../../link-set.model';
import Title from '../right_title/right.title.component';
import RightShow from '../right_show/right.show.component';
import RightEdit from '../right_edit/right.edit.component';
import RightEditMysql from '../right_edit/right.edit.mysql.component';
import {LinkType} from '@ui/type';
import pluginListConstant from '../../../app.constant';
const className = 'fr.component.right.detail';
let rightDetail: any = null;
const renderEdit = (linkSelected: LinkType): void => {
const plugins: string[] = BI.Constants.getConstant(pluginListConstant);
const isPlugin = BI.some(plugins, (index: number, item: string) => item === linkSelected.text);
let typeEdit = linkSelected.databaseType === 'mysql' ? RightEditMysql : RightEdit;
if (isPlugin) {
typeEdit = BI.Constants.getConstant(`dec.constant.database.conf.connect.form.${linkSelected.text.toLowerCase()}.edit`);
}
const showPage = !isPlugin ? RightShow : BI.Constants.getConstant(`dec.constant.database.conf.connect.form.${linkSelected.text.toLowerCase()}.preview`);
rightDetail.populate(BI.createItems([
{
type: Title,
isEdit: linkSelected.isSelected,
linkSelected,
}, {
type: linkSelected.isSelected ? typeEdit : showPage,
linkSelected,
},
]));
};
const Widget: WidgetType = {
_store() {
return BI.Models.getModel(Model);
},
watch:{
linkSelected(linkSelected: LinkType) {
renderEdit(linkSelected);
},
},
render() {
return {
type: Vertical,
cls:'right-content',
ref(_ref: any) {
rightDetail = _ref;
},
};
},
mounted() {
const linkSelected: LinkType = this.model.linkSelected;
renderEdit(linkSelected);
},
};
BI.shortcut(className, BI.inherit(BI.Widget, Widget));
export default className;

278
src/app/link_set/right/right_edit/right.edit.component.ts

@ -1,278 +0,0 @@
import {WidgetType, Vertical, MultiSelectItem, TextAreaEditor, Editor, Button, TextValueCombo} from '@ui/index';
import {LinkType} from '@ui/type';
import charset from './right.edit.constant';
import Model from '../../link-set.model';
import FormItem from '@shared/components/form.item.component';
import Title from '@shared/components/title.component';
import {getDrivers, connectNameChecker} from './right.edit.service';
let ConnectionName: any = null;
const className = 'fr.component.right.edit';
const Widget: WidgetType = {
_store() {
return BI.Models.getModel(Model);
},
watch: {
connectionNameErr(msg: string) {
if (msg) {
BI.Bubbles.show('singleBubble', msg, ConnectionName, {
level: 'error',
});
} else {
BI.Bubbles.hide('singleBubble');
}
},
},
render() {
const linkSelected: LinkType = this.model.linkSelected;
const that = this;
return {
type: Vertical,
cls: 'right-show',
items: [
{
type: FormItem,
text: BI.i18nText('Dec-Dcm_Connection_Form_ConnectionName'),
hint: BI.i18nText('Dec-Dcm_Connection_Form_ConnectionName-Change-Confirm'),
form: {
type: Editor,
cls: 'bi-border',
width: 300,
value: linkSelected.connectionName,
ref(ref: any) {
ConnectionName = ref;
},
listeners: [{
eventName: BI.Editor.EVENT_CHANGE,
action() {
that.store.setLinkUpdate({
...that.model.linkUpdate,
connectionName: this.getValue(),
});
},
}, {
eventName: BI.Editor.EVENT_FOCUS,
action() {
that.store.setConnectionNameErr('');
},
}],
},
},
{
type: FormItem,
text: BI.i18nText('Dec-Dcm_First_Step'),
height: 400,
form: {
type: Vertical,
cls: 'right-form',
items: [
{
type: FormItem,
text: BI.i18nText('Dec-Dcm_Connection_Form_Driver'),
form: {
type: TextValueCombo,
cls: 'bi-border',
width: 300,
text: linkSelected.driver,
items: getDrivers(linkSelected),
listeners: [{
eventName: BI.TextValueCombo.EVENT_CHANGE,
action() {
that.store.setLinkUpdate({
...that.model.linkUpdate,
driver: this.getValue()[0],
});
},
}],
},
},
{
type: FormItem,
text: BI.i18nText('Dec-Dcm_Connection_Form_URL'),
form: {
type: Editor,
cls: 'bi-border',
watermark: BI.i18nText('Dec-Dcm_Connection_Form_Place_Input'),
width: 300,
value: linkSelected.url,
listeners: [{
eventName: BI.Editor.EVENT_CHANGE,
action() {
that.store.setLinkUpdate({
...that.model.linkUpdate,
url: this.getValue(),
});
},
}],
},
},
{
type: FormItem,
text: BI.i18nText('Dec-Dcm_Connection_Form_OriginalCharsetName'),
form: {
type: TextValueCombo,
cls: 'bi-border',
width: 300,
text: linkSelected.originalCharsetName === '' ? BI.i18nText('Dec-Dcm_Connection_Form_Auto') : linkSelected.originalCharsetName,
items: [
{
text: BI.i18nText('Dec-Dcm_Connection_Form_Auto'),
value: '',
},
...BI.Constants.getConstant(charset),
],
listeners: [{
eventName: BI.TextValueCombo.EVENT_CHANGE,
action() {
that.store.setLinkUpdate({
...that.model.linkUpdate,
originalCharsetName: this.getValue()[0],
});
},
}],
},
},
{
type: FormItem,
text: BI.i18nText('Dec-Dcm_Connection_Form_UserName'),
form: {
type: Editor,
cls: 'bi-border',
allowBlank: true,
watermark: BI.i18nText('Dec-Dcm_Connection_Form_Place_Input'),
width: 300,
value: linkSelected.user,
listeners: [{
eventName: BI.Editor.EVENT_CHANGE,
action() {
that.store.setLinkUpdate({
...that.model.linkUpdate,
user: this.getValue(),
});
},
}],
},
},
{
type: FormItem,
text: BI.i18nText('Dec-Dcm_Connection_Form_Password'),
form: {
type: Editor,
cls: 'bi-border',
inputType: 'password',
allowBlank: true,
watermark: BI.i18nText('Dec-Dcm_Connection_Form_Place_Input'),
width: 300,
value: linkSelected.password,
listeners: [{
eventName: BI.Editor.EVENT_CHANGE,
action() {
that.store.setLinkUpdate({
...that.model.linkUpdate,
password: this.getValue(),
});
},
}],
},
},
{
type: Title,
text: BI.i18nText('Dec-Dcm_Connection_Form_Pool_Properties'),
},
{
type: FormItem,
text: BI.i18nText('Dec-Dcm_Connection_Form_SQL_Validation_Query'),
height: 100,
form: {
type: TextAreaEditor,
cls: 'bi-border',
allowBlank: true,
watermark: BI.i18nText('Dec-Dcm_Connection_Form_Place_Input'),
width: 300,
height: 100,
value: linkSelected.validationQuery,
listeners: [{
eventName: BI.Editor.EVENT_CHANGE,
action() {
that.store.setLinkUpdate({
...that.model.linkUpdate,
validationQuery: this.getValue(),
});
},
}],
},
},
{
type: FormItem,
text: BI.i18nText('Dec-Dcm_Connection_Form_Connection-Check'),
form: {
type: MultiSelectItem,
text: BI.i18nText('Dec-Dcm_Yes'),
selected: linkSelected.testOnBorrow,
width: 60,
listeners: [{
eventName: BI.Editor.EVENT_CHANGE,
action() {
that.store.setLinkUpdate({
...that.model.linkUpdate,
testOnBorrow: this.isSelected(),
});
},
}],
},
},
{
type: FormItem,
text: BI.i18nText('Dec-Dcm_Connection_Form_Connection_Max_Number'),
form: {
type: Editor,
cls: 'bi-border',
allowBlank: true,
watermark: BI.i18nText('Dec-Dcm_Connection_Form_Place_Input'),
width: 60,
value: linkSelected.maxActive,
errorText: BI.i18nText('Dec-Dcm_Connection_Form_Place_Input-Number'),
validationChecker: connectNameChecker,
listeners: [{
eventName: BI.Editor.EVENT_CHANGE,
action() {
that.store.setLinkUpdate({
...that.model.linkUpdate,
maxActive: this.getValue(),
});
},
}],
},
},
],
},
},
{
type: FormItem,
text: BI.i18nText('Dec-Dcm_Second_Step'),
form: {
type: Button,
text: BI.i18nText('Dec-Dcm_Test_Connection'),
level: 'ignore',
},
},
{
type: FormItem,
text: BI.i18nText('Dec-Dcm_Third_Step'),
form: {
type: FormItem,
text: BI.i18nText('Dec-Dcm_Connection_Form_Pattern'),
form: {
type: Editor,
cls: 'bi-border',
width: 300,
disabled: true,
},
},
},
],
};
},
};
BI.shortcut(className, BI.inherit(BI.Widget, Widget));
export default className;

38
src/app/link_set/right/right_edit/right.edit.constant.ts

@ -1,38 +0,0 @@
export const ConstantName = 'bi.constant.database.conf.charset.list';
export const Constant = BI.constant(ConstantName, [
{
text: 'GBK',
value: 'GBK',
},
{
text: 'BIG5',
value: 'BIG5',
},
{
text: 'ISO-8859-1',
value: 'ISO-8859-1',
},
{
text: 'UTF-8',
value: 'UTF-8',
},
{
text: 'UTF-16',
value: 'UTF-16',
},
{
text: 'EUC_JP',
value: 'EUC_JP',
},
{
text: 'EUC_KR',
value: 'EUC_KR',
},
{
text: 'CP850',
value: 'CP850',
},
]);
export default ConstantName;

233
src/app/link_set/right/right_edit/right.edit.mysql.component.ts

@ -1,233 +0,0 @@
import {WidgetType, Vertical, MultiSelectItem, TextAreaEditor, Editor, Button, TextValueCombo} from '@ui/index';
import {LinkType} from '@ui/type';
import charset from './right.edit.constant';
import Model from '../../link-set.model';
import FormItem from '@shared/components/form.item.component';
import Title from '@shared/components/title.component';
import {getDrivers, connectNameChecker} from './right.edit.service';
const className = 'fr.component.right.edit.mysql';
const Widget: WidgetType = {
_store() {
return BI.Models.getModel(Model);
},
render() {
const linkSelected: LinkType = this.model.linkSelected;
const that = this;
return {
type: Vertical,
cls: 'right-show',
items: [
{
type: FormItem,
text: BI.i18nText('Dec-Dcm_Connection_Form_ConnectionName'),
hint: BI.i18nText('Dec-Dcm_Connection_Form_ConnectionName-Change-Confirm'),
form: {
type: Editor,
cls: 'bi-border',
width: 300,
value: linkSelected.connectionName,
listeners: [{
eventName: BI.Editor.EVENT_CHANGE,
action() {
that.store.setLinkUpdate({
...that.model.linkUpdate,
connectionName: this.getValue(),
});
},
}],
},
},
{
type: FormItem,
text: BI.i18nText('Dec-Dcm_Connection_Form_Driver'),
form: {
type: TextValueCombo,
cls: 'bi-border',
width: 300,
text: linkSelected.driver,
items: getDrivers(linkSelected),
listeners: [{
eventName: BI.TextValueCombo.EVENT_CHANGE,
action() {
that.store.setLinkUpdate({
...that.model.linkUpdate,
driver: this.getValue()[0],
});
},
}],
},
},
{
type: FormItem,
text: BI.i18nText('Dec-Dcm_Connection_Form_URL'),
form: {
type: Editor,
cls: 'bi-border',
watermark: BI.i18nText('Dec-Dcm_Connection_Form_Place_Input'),
width: 300,
value: linkSelected.url,
listeners: [{
eventName: BI.Editor.EVENT_CHANGE,
action() {
that.store.setLinkUpdate({
...that.model.linkUpdate,
url: this.getValue(),
});
},
}],
},
},
{
type: FormItem,
text: BI.i18nText('Dec-Dcm_Connection_Form_OriginalCharsetName'),
form: {
type: TextValueCombo,
cls: 'bi-border',
width: 300,
text: linkSelected.originalCharsetName === '' ? BI.i18nText('Dec-Dcm_Connection_Form_Auto') : linkSelected.originalCharsetName,
items: [
{
text: BI.i18nText('Dec-Dcm_Connection_Form_Auto'),
value: '',
},
...BI.Constants.getConstant(charset),
],
listeners: [{
eventName: BI.TextValueCombo.EVENT_CHANGE,
action() {
that.store.setLinkUpdate({
...that.model.linkUpdate,
originalCharsetName: this.getValue()[0],
});
},
}],
},
},
{
type: FormItem,
text: BI.i18nText('Dec-Dcm_Connection_Form_UserName'),
form: {
type: Editor,
cls: 'bi-border',
allowBlank: true,
watermark: BI.i18nText('Dec-Dcm_Connection_Form_Place_Input'),
width: 300,
value: linkSelected.user,
listeners: [{
eventName: BI.Editor.EVENT_CHANGE,
action() {
that.store.setLinkUpdate({
...that.model.linkUpdate,
user: this.getValue(),
});
},
}],
},
},
{
type: FormItem,
text: BI.i18nText('Dec-Dcm_Connection_Form_Password'),
form: {
type: Editor,
cls: 'bi-border',
inputType: 'password',
allowBlank: true,
watermark: BI.i18nText('Dec-Dcm_Connection_Form_Place_Input'),
width: 300,
value: linkSelected.password,
listeners: [{
eventName: BI.Editor.EVENT_CHANGE,
action() {
that.store.setLinkUpdate({
...that.model.linkUpdate,
password: this.getValue(),
});
},
}],
},
},
{
type: Title,
text: BI.i18nText('Dec-Dcm_Connection_Form_Pool_Properties'),
},
{
type: FormItem,
text: BI.i18nText('Dec-Dcm_Connection_Form_SQL_Validation_Query'),
height: 100,
form: {
type: TextAreaEditor,
cls: 'bi-border',
allowBlank: true,
watermark: BI.i18nText('Dec-Dcm_Connection_Form_Place_Input'),
width: 300,
height: 100,
value: linkSelected.validationQuery,
listeners: [{
eventName: BI.Editor.EVENT_CHANGE,
action() {
that.store.setLinkUpdate({
...that.model.linkUpdate,
validationQuery: this.getValue(),
});
},
}],
},
},
{
type: FormItem,
text: BI.i18nText('Dec-Dcm_Connection_Form_Connection-Check'),
form: {
type: MultiSelectItem,
text: BI.i18nText('Dec-Dcm_Yes'),
selected: linkSelected.testOnBorrow,
width: 60,
listeners: [{
eventName: BI.Editor.EVENT_CHANGE,
action() {
that.store.setLinkUpdate({
...that.model.linkUpdate,
testOnBorrow: this.isSelected(),
});
},
}],
},
},
{
type: FormItem,
text: BI.i18nText('Dec-Dcm_Connection_Form_Connection_Max_Number'),
form: {
type: Editor,
cls: 'bi-border',
allowBlank: true,
watermark: BI.i18nText('Dec-Dcm_Connection_Form_Place_Input'),
width: 60,
value: linkSelected.maxActive,
errorText: BI.i18nText('Dec-Dcm_Connection_Form_Place_Input-Number'),
validationChecker: connectNameChecker,
listeners: [{
eventName: BI.Editor.EVENT_CHANGE,
action() {
that.store.setLinkUpdate({
...that.model.linkUpdate,
maxActive: this.getValue(),
});
},
}],
},
},
{
type: FormItem,
text: BI.i18nText('Dec-Dcm_Test_Connection'),
form: {
type: Button,
text: BI.i18nText('Dec-Dcm_Test_Connection'),
level: 'ignore',
},
},
],
};
},
};
BI.shortcut(className, BI.inherit(BI.Widget, Widget));
export default className;

65
src/app/link_set/right/right_title/right.title.component.ts

@ -1,65 +0,0 @@
import {WidgetType, Left, Label, Button} from '@ui/index';
import RightTitleModel from '../../link-set.model';
import {LinkType} from '@ui/type';
import {OTHER_CONNECT} from '@private/constants';
const className = 'fr.component.right.title';
const Widget: WidgetType = {
_store() {
return BI.Models.getModel(RightTitleModel);
},
render() {
const linkSelected: LinkType = this.model.linkSelected;
const linkList: LinkType[] = this.model.linkList;
const that = this;
const {isEdit} = this.options;
const title = linkSelected.text === OTHER_CONNECT ? BI.i18nText('Dec-Dcm_Connection_Other') : linkSelected.text;
return {
type: Left,
height: 40,
cls: 'right-title',
items: [
{
type: Label,
cls: 'right-title-text',
text: `${BI.i18nText('Dec-Dcm_Data_Connections')}(${title ? title : BI.i18nText('Dec-Dcm_Default')})`,
},
{
type: Button,
cls:'right-title-button',
invisible: isEdit,
text: BI.i18nText('Dec-Dcm_Edit'),
handler() {
that.store.setEdit(true);
},
},
{
type: Button,
cls:'right-title-button',
invisible: !isEdit,
text: BI.i18nText('Dec-Dcm_Save'),
handler() {
const result = BI.find(linkList, (idx: number, value: LinkType) => that.model.linkUpdate.connectionName === value.connectionName && value.connectionId !== that.model.linkUpdate.connectionId);
if (result) {
that.store.setConnectionNameErr(BI.i18nText('Dec-Dcm_Connection_Is_Existence'));
} else {
that.store.saveLink();
}
},
},
{
type: Button,
cls:'right-title-button',
invisible: !isEdit,
level: 'ignore',
text: BI.i18nText('BI-Basic_Cancel'),
handler() {
that.store.setCancel();
},
},
],
};
},
};
BI.shortcut(className, BI.inherit(BI.Widget, Widget));
export default className;

284
src/app/link_set/select/select.service.ts

@ -1,284 +0,0 @@
import {LinkType} from '@ui/type';
import pluginListConstant from '../../app.constant';
import {OTHER_CONNECT} from '@private/constants';
export const databaseTyle = [
{
text:'APACHE KYLIN',
databaseType: 'apache-kylin',
driver: 'org.apache.kylin.jdbc.Driver',
url: 'jdbc:kylin://<hostname>:<port>/<kylin_project_name>',
},
{
text:'DERBY',
databaseType: 'derby',
driver: 'org.apache.derby.jdbc.ClientDriver',
url: 'jdbc:derby://localhost:1527/',
},
{
text:'HP Vertica',
databaseType: 'hp-vertica',
driver: 'com.vertica.jdbc.Driver',
url: 'jdbc:vertica://ip:port/databaseName',
},
{
text:'IBM DB2',
databaseType: 'ibm-db2',
driver: 'com.ibm.db2.jcc.DB2Driver',
url: 'jdbc:db2://hostname:port/dbname',
},
{
text:'INFORMIX',
databaseType: 'informix',
driver: 'com.informix.jdbc.IfxDriver',
url: 'jdbc:informix-sqli://{host}:{port}/{database}:INFORMIXSERVER={server}',
},
{
text:'Microsoft SQL Server',
databaseType: 'sql-server',
driver: 'com.microsoft.sqlserver.jdbc.SQLServerDriver',
url: 'jdbc:sqlserver://localhost:1433;databaseName=',
},
{
text:'Oracle',
databaseType: 'oracle',
driver: 'oracle.jdbc.driver.OracleDriver',
url: 'jdbc:oracle:thin:@localhost:1521:databaseName',
},
{
text:'Privotal Greenplum Database',
databaseType: 'pivotal-greenplum-database',
driver: 'org.postgresql.Driver',
url: 'jdbc:postgresql://hostname:port/dbname',
},
{
text:'Postgresql',
databaseType: 'postgresql',
driver: 'org.postgresql.Driver',
url: 'jdbc:postgresql://hostname:port/dbname',
},
{
text:'GaussDB 200',
databaseType: 'hw-libr-a',
driver: 'org.postgresql.Driver',
url: 'jdbc:postgresql://hostname:port/dbname',
},
{
text:'MySQL',
databaseType: 'mysql',
driver: 'com.mysql.jdbc.Driver',
drivers:['com.mysql.jdbc.Driver', 'org.gjt.mm.mysql.Driver'],
url: 'jdbc:mysql://localhost/dbname',
},
{
text: OTHER_CONNECT,
databaseType: 'other',
driver: 'org.h2.Driver',
drivers:['org.h2.Driver', 'com.fr.third.org.hsqldb.jdbcDriver', 'org.sqlite.JDBC'],
url: 'jdbc:h2://${ENV_HOME}/../databaseName',
},
{
text:'ADS',
databaseType:'ads',
driver:'com.mysql.jdbc.Driver',
url:'jdbc:mysql://hostname:port/my_ads_db',
},
{
text:'Amazon Redshift',
databaseType:'amazon-redshift',
driver: 'com.amazon.redshift.jdbc4.Driver',
drivers:['com.amazon.redshift.jdbc4.Driver', 'com.amazon.redshift.jdbc41.Driver'],
url:'jdbc:redshift://endpoint:port/database',
},
{
text:'APACHE IMPALA',
databaseType:'apache-impala',
driver:'com.cloudera.impala.jdbc41.Driver',
url:'jdbc:impala://hostname:port/_impala_builtins',
},
{
text:'APACHE KYLIN',
databaseType:'apache-kylin',
driver:'org.apache.kylin.jdbc.Driver',
url:'jdbc:kylin://<hostname>:<port>/<kylin_project_name>',
},
{
text:'APACHE Phoenix',
databaseType: 'apache-phoenix',
driver: 'org.apache.phoenix.jdbc.PhoenixDriver',
url: 'jdbc:phoenix:hostname:port/dbname',
},
{
text:'DERBY',
databaseType: 'derby',
driver: 'org.apache.derby.jdbc.ClientDriver',
url: 'jdbc:derby://localhost:1527/',
},
{
text:'Gbase 8A',
databaseType: 'gbase-8a',
driver: 'com.gbase.jdbc.Driver',
url: 'jdbc:gbase://hostname:port/dbname',
},
{
text:'Gbase 8S',
databaseType: 'gbase-8s',
driver: 'com.gbasedbt.jdbc.IfxDriver',
url: 'jdbc:gbasedbt-sqli://{host}:{port}/{database}',
},
{
text:'Gbase 8T',
databaseType: 'gbase-8t',
driver: 'com.informix.jdbc.IfxDriver',
url: 'jdbc:informix-sqli://{host}:{port}/{database}:INFORMIXSERVER={server}',
},
{
text:'H2',
databaseType: 'h2',
driver: 'org.h2.Driver',
url: 'jdbc:h2://${ENV_HOME}/../databaseName',
},
{
text:'华为云DWS',
databaseType: 'hw-dws',
driver: 'org.postgresql.Driver',
url: 'jdbc:postgresql://hostname:port/dbname',
},
{
text:'FusionInsight elk',
databaseType: 'hw-elk',
driver: 'org.postgresql.Driver',
url: 'jdbc:postgresql://hostname:port/dbname',
},
{
text:'FusionInsight HD',
databaseType: 'hw-fusioninsight-hd',
driver: 'org.apache.hive.jdbc.HiveDriver',
url: 'jdbc:hive2://10.135.0.110:24002,10.135.0.67:24002,10.135.0.66:24002/;serviceDiscoveryMode=zooKeeper;zooKeeperNamespace=hiveserver2;sasl.qop=auth-conf;auth=KERBEROS;zk.principal=zookeeper/hadoop;principal=hive/hadoop.hadoop.com@HADOOP.COM;',
},
{
text:'GaussDB 200',
databaseType: 'hw-libr-a',
driver: 'org.postgresql.Driver',
url: 'jdbc:postgresql://hostname:port/dbname',
}, {
text:'Hadoop Hive',
databaseType: 'hadoop-hive',
driver: 'org.apache.hive.jdbc.HiveDriver',
url: 'jdbc:hive2://hostname:port/databasename',
}, {
text:'Hbase',
databaseType: 'hbase',
driver: 'org.apache.phoenix.jdbc.PhoenixDriver',
url: 'jdbc:phoenix:hostname:port/dbname',
}, {
text:'HP Vertica',
databaseType: 'hp-vertica',
driver: 'com.vertica.jdbc.Driver',
url: 'jdbc:vertica://ip:port/databaseName',
}, {
text:'Hsql',
databaseType: 'hsql',
driver: 'com.fr.third.org.hsqldb.jdbcDriver',
url: 'jdbc:hsqldb:file:[PATH_TO_DB_FILES]',
}, {
text:'IBM DB2',
databaseType: 'ibm-db2',
driver: 'com.ibm.db2.jcc.DB2Driver',
url: 'jdbc:db2://hostname:port/dbname',
}, {
text:'INFORMIX',
databaseType: 'informix',
driver: 'com.informix.jdbc.IfxDriver',
url: 'jdbc:informix-sqli://{host}:{port}/{database}:INFORMIXSERVER={server}',
}, {
text:'KINGBASE',
databaseType: 'kingbase',
driver: 'com.kingbase.Driver',
url: 'jdbc:kingbase://hostname:port',
}, {
text:'Microsoft SQL Server',
databaseType: 'sql-server',
driver: 'com.microsoft.sqlserver.jdbc.SQLServerDriver',
url: 'jdbc:sqlserver://localhost:1433;databaseName=',
}, {
text:'MySQL',
databaseType: 'mysql',
driver: 'com.mysql.jdbc.Driver',
drivers:['com.mysql.jdbc.Driver', 'org.gjt.mm.mysql.Driver'],
url: 'jdbc:mysql://localhost/dbname',
},
{
text:'Oracle',
databaseType: 'oracle',
driver: 'oracle.jdbc.driver.OracleDriver',
url: 'jdbc:oracle:thin:@localhost:1521:databaseName',
},
{
text:'Pivotal Greenplum Database',
databaseType: 'pivotal-greenplum-database',
driver: 'org.postgresql.Driver',
url: 'jdbc:postgresql://hostname:port/dbname',
}, {
text:'Postgresql',
databaseType: 'postgresql',
driver: 'org.postgresql.Driver',
url: 'jdbc:postgresql://hostname:port/dbname',
}, {
text:'Presto',
databaseType: 'presto',
driver: 'com.facebook.presto.jdbc.PrestoDriver',
url: 'jdbc:presto://host:port/catalog',
}, {
text:'SAP HANA',
databaseType: 'sap-hana',
driver: 'com.sap.db.jdbc.Driver',
url: 'jdbc:sap://hostname:port?reconnect=true',
}, {
text:'SAP Sybase',
databaseType: 'sap-sybase',
driver: 'com.sybase.jdbc4.jdbc.SybDriver',
url: 'jdbc:sybase:Tds:hostname:2638/databasename',
}, {
text:'SPARK',
databaseType: 'spark',
driver: 'org.apache.hive.jdbc.HiveDriver',
url: 'jdbc:hive2://hostname:port/databasename',
}, {
text:'Sqlite',
databaseType: 'sqlite',
driver: 'org.sqlite.JDBC',
url: 'jdbc:sqlite:[PATH_TO_DB_FILES]',
}, {
text:'TeraData',
databaseType: 'teradata',
driver: 'com.ncr.teradata.TeraDriver',
url: 'jdbc:teradata://localhost/CLIENT_CHARSET=EUC_CN,TMODE=TERA,CHARSET=ASCII,LOB_SUPPORT',
}, {
text:'TRANSWARP INCEPTOR',
databaseType: 'transwarp-inceptor',
driver: 'org.apache.hive.jdbc.HiveDriver',
url: 'jdbc:hive2://hostname:port/databasename',
},
];
export const getCnnectionName = (links: LinkType[], name: string): string => {
const plugins: string[] = BI.Constants.getConstant(pluginListConstant);
let nameIndex = 0;
const title = name.replace(/[0-9]/g, '');
const isPlugin = BI.some(plugins, (index: number, item: string) => item === title);
const startWith = isPlugin ? title : BI.i18nText('Dec-Dcm_Data_Connections');
links.forEach(link => {
link.isSelected = false;
if (link.connectionName.startsWith(startWith)) {
const name = link.connectionName.replace(startWith, '0');
const index = parseInt(name, 10) + 1;
if (index > nameIndex) {
nameIndex = index;
}
}
});
return `${startWith}${nameIndex > 0 ? nameIndex : ''}`;
};

31
src/app/link_status/left/left.component.ts

@ -1,31 +0,0 @@
import {WidgetType, Vertical} from '@ui';
import Model from './left.model';
import {LinkType} from '@ui/type';
import {getLinks} from './left.service';
const className = 'fr.component.linkStatus.left';
let leftContent: any = null;
const Widget: WidgetType = {
_store() {
return BI.Models.getModel(Model);
},
watch: {
linkList(linkList: LinkType[]) {
const title = linkList.length > 0 ? linkList[0].connectionName : '';
this.store.setStatusSelected(title);
},
statusSelected(title: string) {
const linkList = this.model.linkList;
leftContent.populate(BI.createItems(getLinks(linkList, title)));
},
},
render() {
return {
type: Vertical,
ref(_ref: any) {
leftContent = _ref;
},
};
},
};
BI.shortcut(className, BI.inherit(BI.Widget, Widget));
export default className;

18
src/app/link_status/left/left.service.ts

@ -1,18 +0,0 @@
import {LinkType} from '@ui/type';
import LeftItem from './left.item.component';
export const getLinks = (linkList: LinkType[], selectTitle = ''): any => {
const links: any[] = [];
linkList.forEach((item: LinkType) => {
links.push({
type: LeftItem,
extraCls: item.connectionName === selectTitle ? 'left-item-selected' : '',
title: item.connectionName,
id: item.connectionId,
creator: item.creator,
text: item.text ? item.text : BI.i18nText('Dec-Dcm_Default'),
});
});
return links;
};

2
src/app/link_status/left/left.model.ts → src/app/status/left/left.model.ts

@ -1,5 +1,5 @@
import {ModelType} from '@ui'; import {ModelType} from '@ui';
const className = 'fr.model.linkstatus.left'; const className = 'dec.dcm.model.linkstatus.left';
const Model: ModelType = { const Model: ModelType = {
context: ['tab', 'linkList', 'statusSelected'], context: ['tab', 'linkList', 'statusSelected'],
state () { state () {

44
src/app/status/left/left.ts

@ -0,0 +1,44 @@
import {WidgetType, ListView} from '@ui';
import Model from './left.model';
import {LinkType} from '@ui/type';
import LeftItem from './left_item';
const className = 'dec.dcm.component.linkStatus.left';
const Widget: WidgetType = {
_store() {
return BI.Models.getModel(Model);
},
watch: {
linkList(linkList: LinkType[]) {
const title = linkList.length > 0 ? linkList[0].connectionName : '';
this.store.setStatusSelected(title);
},
statusSelected(title: string) {
const linkList = this.model.linkList;
this.leftContent.populate(BI.createItems(this._renderItems(linkList, title)));
},
},
render() {
return {
type: ListView,
ref: _ref => {
this.leftContent = _ref;
},
items: this._renderItems(this.model.linkList, this.model.statusSelected),
};
},
_renderItems(linkList: LinkType[], selectTitle = '') {
return BI.map(linkList, (index: number, item: LinkType) => {
return {
type: LeftItem,
selected: item.connectionName === selectTitle,
title: item.connectionName,
id: item.connectionId,
creator: item.creator,
text: item.text ? item.text : BI.i18nText('Dec-Dcm_Default'),
};
});
},
};
BI.shortcut(className, BI.inherit(BI.Widget, Widget));
export default className;

21
src/app/link_status/left/left.item.component.ts → src/app/status/left/left_item.ts

@ -1,36 +1,39 @@
import {WidgetType, Left, Label, TextButton} from '@ui'; import {WidgetType, TextButton, VerticalAdapt} from '@ui';
import Model from './left.model'; import Model from './left.model';
const className = 'fr.component.linkStatus.left.item'; const className = 'dec.dcm.component.linkStatus.left.item';
const Widget: WidgetType = { const Widget: WidgetType = {
props: { props: {
title: '', title: '',
id: '', id: '',
creator: '', creator: '',
baseCls: 'bi-list-item-active',
}, },
_store() { _store() {
return BI.Models.getModel(Model); return BI.Models.getModel(Model);
}, },
render() { render() {
const {title, extraCls, creator, text, id} = this.options; const {title} = this.options;
return { return {
type: Left, type: VerticalAdapt,
cls: 'left-item', cls: 'bi-list-item-active',
extraCls, height: 30,
items: [ items: [
{ {
type: TextButton, type: TextButton,
cls: 'link-title', cls: 'link-title',
lgap: 10,
textAlign: 'left', textAlign: 'left',
text: title, text: title,
title, title,
handler: () => {
this.store.setStatusSelected(title);
},
}, },
], ],
}; };
}, },
doClick() {
const {title} = this.options;
this.store.setStatusSelected(title);
},
}; };
BI.shortcut(className, BI.inherit(BI.BasicButton, Widget)); BI.shortcut(className, BI.inherit(BI.BasicButton, Widget));
export default className; export default className;

2
src/app/link_status/link_status.model.ts → src/app/status/link_status.model.ts

@ -1,5 +1,5 @@
import {ModelType} from '@ui'; import {ModelType} from '@ui';
const className = 'fr.model.linkstatus'; const className = 'dec.dcm.model.linkstatus';
const Model: ModelType = { const Model: ModelType = {
context: ['tab', 'linkList'], context: ['tab', 'linkList'],
actions: { actions: {

32
src/app/link_status/link_status.component.ts → src/app/status/link_status.ts

@ -1,36 +1,44 @@
import {WidgetType, Htape, Vtape, Left, Label} from '@ui'; import {WidgetType, Htape, Vtape, Label, VerticalAdapt} from '@ui';
import linkStatusModel from './link_status.model'; import linkStatusModel from './link_status.model';
import LeftList from './left/left.component'; import LeftList from './left/left';
import Right from './right/right.component'; import Right from './right/right';
import {TAB_LINK_POOL} from '@private/constants'; import {TAB_LINK_POOL} from '@private/constants';
const className = 'fr.linkstatus'; const className = 'dec.dcm.linkstatus';
const Widget: WidgetType = { const Widget: WidgetType = {
props: {
baseCls: 'bi-card',
},
_store() { _store() {
return BI.Models.getModel(linkStatusModel); return BI.Models.getModel(linkStatusModel);
}, },
watch: { watch: {
tab(tab: string) { tab(tab: string) {
this.setVisible(tab === TAB_LINK_POOL); this.linkStatus.setVisible(tab === TAB_LINK_POOL);
}, },
}, },
render() { render() {
return { return {
type: Htape, type: Htape,
cls: 'linkStatus', invisible: true,
ref: _ref => {
this.linkStatus = _ref;
},
items: [{ items: [{
el: { el: {
type: Vtape, type: Vtape,
cls: 'database-left', cls: 'dcm-link-left',
items: [ items: [
{ {
el: { el: {
type: Left, type: VerticalAdapt,
cls: 'select-group', cls: 'bi-border-bottom',
items: [ items: [
{ {
type: Label, type: Label,
cls: 'status-title', cls: 'bi-font-bold',
hgap: 6,
vgap: 6,
text: BI.i18nText('Dec-Dcm_Data_Connections'), text: BI.i18nText('Dec-Dcm_Data_Connections'),
}, },
], ],
@ -45,12 +53,10 @@ const Widget: WidgetType = {
width: 280, width: 280,
}, { }, {
type: Right, type: Right,
cls: 'bi-border-left',
}], }],
}; };
}, },
mounted() {
this.setVisible(false);
},
}; };
BI.shortcut(className, BI.inherit(BI.Widget, Widget)); BI.shortcut(className, BI.inherit(BI.Widget, Widget));

4
src/app/link_status/right/right.model.ts → src/app/status/right/right.model.ts

@ -1,10 +1,10 @@
import {ModelType} from '@ui'; import {ModelType} from '@ui';
const className = 'fr.model.linkstatus.right'; const className = 'dec.dcm.model.linkstatus.right';
const Model: ModelType = { const Model: ModelType = {
context: ['linkList', 'statusSelected'], context: ['linkList', 'statusSelected'],
state () { state () {
return { return {
selected:'', selected: '',
}; };
}, },
actions: { actions: {

51
src/app/link_status/right/right.component.ts → src/app/status/right/right.ts

@ -1,65 +1,68 @@
import {WidgetType, Vertical, Left, Label} from '@ui/index'; import {WidgetType, Label, ListView, VerticalAdapt, Vtape} from '@ui/index';
import Model from './right.model'; import Model from './right.model';
import {info} from '@shared/crud/crud.request'; import {info} from '@shared/crud/crud.request';
import RightCard from './right.card.component'; import RightCard from './right_card';
import {InfoType} from './right.typings'; import {InfoType} from './right.typings';
import {LinkType} from '@ui/type'; import {LinkType} from '@ui/type';
import pluginListConstant from '../../app.constant'; import pluginListConstant from '../../app.constant';
const className = 'fr.component.linkStatus.right'; const className = 'dcm-link-form';
let Title: any = null;
let Group: any = null;
const Widget: WidgetType = { const Widget: WidgetType = {
props: {
baseCls: 'dec-webui-dcm-title bi-card bi-border-bottom',
},
_store() { _store() {
return BI.Models.getModel(Model); return BI.Models.getModel(Model);
}, },
watch:{ watch: {
statusSelected(title: string) { statusSelected(title: string) {
const link = BI.find(this.model.linkList, (index: number, item: LinkType) => item.connectionName === title); const link = BI.find(this.model.linkList, (index: number, item: LinkType) => item.connectionName === title);
const plugins: string[] = BI.Constants.getConstant(pluginListConstant); const plugins: string[] = BI.Constants.getConstant(pluginListConstant);
const isPlugin = link.text && BI.some(plugins, (index: number, item: string) => item === link.text); const isPlugin = link.text && BI.some(plugins, (index: number, item: string) => item === link.text);
const Pool = isPlugin ? BI.Constants.getConstant(`dec.constant.database.conf.connect.form.${link.text.toLowerCase()}.pool`) : RightCard; const Pool = isPlugin ? BI.Constants.getConstant(`dec.constant.database.conf.connect.form.${link.text.toLowerCase()}.pool`) : RightCard;
info(name, (res: InfoType) => { info(name, (res: InfoType) => {
Group.populate(BI.createItems([{ this.statusGroup.populate(BI.createItems([{
type: Pool, type: Pool,
...res, ...res,
}])); }]));
}); });
Title.setText(`${BI.i18nText('Dec-Dcm_Data_Connections')}(${title})`); this.statusTitle.setText(`${BI.i18nText('Dec-Dcm_Data_Connections')}(${title})`);
}, },
}, },
render() { render() {
return { return {
type:Vertical, type: Vtape,
cls:'database-right', items: [
items:[
{ {
type: Left, el: {
height: 40, type: VerticalAdapt,
cls: 'right-status-title', cls: 'bi-border-bottom',
items:[ items: [
{ {
type: Label, type: Label,
text:BI.i18nText('Dec-Dcm_Data_Connections'), cls: 'bi-font-bold',
lgap: 10,
text: BI.i18nText('Dec-Dcm_Data_Connections'),
}, },
], ],
ref(ref: any) { ref: _ref => {
Title = ref; this.statusTitle = _ref;
},
}, },
height: 40,
}, { }, {
type: Vertical, type: ListView,
cls: 'right-status-body', cls: 'right-status-body',
ref(ref: any) { vgap: 10,
Group = ref; hgap: 10,
ref: _ref => {
this.statusGroup = _ref;
}, },
}, },
], ],
}; };
}, },
mounted() {
},
}; };
BI.shortcut(className, BI.inherit(BI.Widget, Widget)); BI.shortcut(className, BI.inherit(BI.Widget, Widget));
export default className; export default className;

0
src/app/link_status/right/right.typings.d.ts → src/app/status/right/right.typings.d.ts vendored

9
src/app/status/right/right_card.less

@ -0,0 +1,9 @@
@import '../../../less/index.less';
.dec-webui-dcm-status-right-card{
.card-font-success{
font-size: @font-size-30;
}
.card-font-heighlight{
font-size: @font-size-30;
}
}

56
src/app/link_status/right/right.card.component.ts → src/app/status/right/right_card.ts

@ -1,91 +1,89 @@
import {WidgetType, Left, Label, Vertical} from '@ui/index'; import './right_card.less';
const className = 'fr.component.linkStatus.right.card'; import {WidgetType, Left, Label, Vertical, FloatCenter, CenterAdapt, VerticalAdapt} from '@ui/index';
const className = 'dec.dcm.component.linkStatus.right.card';
const Widget: WidgetType = { const Widget: WidgetType = {
props: {
baseCls: 'dec-webui-dcm-status-right-card',
},
render() { render() {
const {maxActive, maxIdle, numActive, numIdle} = this.options; const {maxActive, maxIdle, numActive, numIdle} = this.options;
return { return {
type: Left, type: FloatCenter,
height: 150,
hgap: 20,
items: [ items: [
{ {
type: Left, type: Vertical,
cls: 'right-status-item', cls: 'bi-background',
items: [ items: [
{ {
type: Vertical, type: CenterAdapt,
cls:'right-status-board', cls: 'right-status-board-item',
tgap: 40,
items: [ items: [
{ {
type: Vertical, type: VerticalAdapt,
cls:'right-status-board-item',
items: [ items: [
{ {
type: Label, type: Label,
cls: 'right-status-text', cls: 'bi-high-light card-font-success',
extraCls: 'card-font1',
text: numActive, text: numActive,
}, },
{ {
type: Label, type: Label,
cls: 'right-status-text',
text: '/', text: '/',
}, },
{ {
type: Label, type: Label,
cls: 'right-status-text',
text: maxActive, text: maxActive,
}, },
], ],
}, },
],
},
{ {
type: Label, type: Label,
height: 20,
text: BI.i18nText('Dec-Dcm_Active_Connections_Number'), text: BI.i18nText('Dec-Dcm_Active_Connections_Number'),
}, },
], ],
}, },
],
},
{ {
type: Left, type: Vertical,
cls: 'right-status-right', cls: 'bi-background',
items: [ items: [
{ {
type: Vertical, type: CenterAdapt,
cls:'right-status-board', tgap: 40,
cls: 'right-status-board-item',
items: [ items: [
{ {
type: Vertical, type: VerticalAdapt,
cls:'right-status-board-item',
items: [ items: [
{ {
type: Label, type: Label,
cls: 'right-status-text', cls: 'bi-high-light card-font-heighlight',
extraCls: 'card-font2',
text: numIdle, text: numIdle,
}, },
{ {
type: Label, type: Label,
cls: 'right-status-text',
text: '/', text: '/',
}, },
{ {
type: Label, type: Label,
cls: 'right-status-text',
text: maxIdle, text: maxIdle,
}, },
], ],
}, },
],
},
{ {
type: Label, type: Label,
height: 20,
text: BI.i18nText('Dec-Dcm_Leisure_Connections_Number'), text: BI.i18nText('Dec-Dcm_Leisure_Connections_Number'),
}, },
], ],
}, },
], ],
},
],
}; };
}, },
}; };

57
src/app/title/title.component.ts

@ -1,57 +0,0 @@
import {Left, WidgetType, IconButton} from '@ui/index';
import TitleItem from './title_item/title_item.component';
import {isDesigner, closeWindow} from '@shared/crud/crud.request';
import {TAB_LINK_SET, TAB_LINK_POOL} from '@private/constants';
const className = 'fr.title';
const Widget: WidgetType = {
render() {
return {
type: Left,
cls: 'title',
items: [
{
type: TitleItem,
cls: 'dec-title-item-selected',
text: BI.i18nText('Dec-Dcm_Connection_Management'),
value: TAB_LINK_SET,
ref: _ref => {
this.ConnectSet = _ref;
},
handler: () => {
this.ConnectSet.select();
},
},
{
type: TitleItem,
text: BI.i18nText('Dec-Dcm_Pool_Connection_Management'),
value: TAB_LINK_POOL,
ref: _ref => {
this.ConnectPool = _ref;
},
handler: () => {
this.ConnectPool.select();
},
},
{
type: IconButton,
cls: 'close-button',
handler() {
closeWindow();
},
invisible: true,
ref: _ref => {
this.CloseButton = _ref;
},
},
],
};
},
mounted() {
if (isDesigner()) {
this.CloseButton.setVisible(true);
}
},
};
BI.shortcut(className, BI.inherit(BI.Widget, Widget));
export default className;

8
src/app/title/title.less

@ -0,0 +1,8 @@
@import '../../less/index.less';
.dec-webui-dcm-title{
.title-item-selected{
color: @background-color-highlight;
border-bottom-color:@border-color-highlight;
border-bottom-width: 2px;
}
}

2
src/app/title/title_item/title_item.model.ts → src/app/title/title.model.ts

@ -1,4 +1,4 @@
const className = 'fr.model.title.item'; const className = 'dec.dcm.model.title.item';
const Model = BI.inherit(Fix.Model, { const Model = BI.inherit(Fix.Model, {
context: ['tab'], context: ['tab'],
actions: { actions: {

61
src/app/title/title.ts

@ -0,0 +1,61 @@
import './title.less';
import {WidgetType, IconButton, LeftRightVerticalAdapt, LinearSegment} from '@ui/index';
import Model from './title.model';
import {isDesigner, closeWindow} from '@shared/crud/crud.request';
import {TAB_LINK_SET, TAB_LINK_POOL} from '@private/constants';
const className = 'dec.dcm.title';
const Widget: WidgetType = {
props: {
baseCls: 'dec-webui-dcm-title bi-card bi-border-bottom',
},
_store() {
return BI.Models.getModel(Model);
},
render() {
const showCloseButton = isDesigner();
const that = this;
return {
type: LeftRightVerticalAdapt,
items: {
left: [
{
type: LinearSegment,
cls: 'bi-card',
height: 40,
width: 200,
items: [{
text: BI.i18nText('Dec-Dcm_Connection_Management'),
value: TAB_LINK_SET,
selected: true,
}, {
text: BI.i18nText('Dec-Dcm_Pool_Connection_Management'),
value: TAB_LINK_POOL,
}],
listeners: [{
eventName: 'EVENT_CHANGE',
action () {
that.store.setTab(this.getValue()[0]);
},
}],
},
],
right: [
showCloseButton ? {
type: IconButton,
cls: 'close-ha-font',
width: 30,
height: 30,
rgap: 10,
handler() {
closeWindow();
},
} : null,
],
},
};
},
};
BI.shortcut(className, BI.inherit(BI.Widget, Widget));
export default className;

34
src/app/title/title_item/title_item.component.ts

@ -1,34 +0,0 @@
import {Label} from '@ui';
import tableItemModel from './title_item.model';
import {getSelectStyle} from './title_item.service';
const className = 'fr.title.item';
const Widget = BI.inherit(BI.BasicButton, {
props: {
text: '',
},
_store() {
return BI.Models.getModel(tableItemModel);
},
watch: {
tab(tab: string) {
const {value} = this.options;
this.element.css(getSelectStyle(value, tab));
},
},
render() {
const {text} = this.options;
return {
type: Label,
cls: 'dec-title-item',
text,
};
},
select() {
const {value} = this.options;
this.store.setTab(value);
},
});
BI.shortcut(className, Widget);
export default className;

13
src/app/title/title_item/title_item.service.ts

@ -1,13 +0,0 @@
export function getSelectStyle(status: string, nowStatus: string): any {
if (status === nowStatus) {
return {
color: '#3685f2',
'border-bottom': 'solid 2px #3685f2',
};
}
return {
color: '#3d4d66',
'border-bottom': 'none',
};
}

26
src/demo/plugin.redis.edit.ts

@ -1,4 +1,5 @@
import './style.scss'; import './style.scss';
import {TextEditor, Vertical, Left, Label} from '@ui/index';
const RedisConstantName = 'dec.constant.database.conf.connect.form.redis.value'; const RedisConstantName = 'dec.constant.database.conf.connect.form.redis.value';
const form = { const form = {
url: '192.168.1.22', url: '192.168.1.22',
@ -6,28 +7,27 @@ const form = {
password: '123456', password: '123456',
}; };
const classNameEdit = 'fr.plugin.redis.edit'; const classNameEdit = 'dec.dcm.plugin.redis.edit';
const Widget = BI.inherit(BI.Widget, { const Widget = BI.inherit(BI.Widget, {
render() { render() {
return { return {
type: 'bi.vertical', type: Vertical,
cls: 'bi-plugin-redis', cls: 'bi-plugin-redis',
bgap: 10, bgap: 10,
items: [ items: [
{ {
type: 'bi.left', type: Left,
height: 30, height: 30,
items: [ items: [
{ {
type: 'bi.label', type: Label,
text: BI.i18nText('Dec-Dcm_Connection_Form_Database_Addr'), text: BI.i18nText('Dec-Dcm_Connection_Form_Database_Addr'),
height: 24, height: 24,
width: 115, width: 115,
textAlign: 'left', textAlign: 'left',
}, },
{ {
type: 'bi.editor', type: TextEditor,
cls: 'bi-border',
watermark: BI.i18nText('Dec-Dcm_Connection_Form_Database_Addr'), watermark: BI.i18nText('Dec-Dcm_Connection_Form_Database_Addr'),
value: form.url, value: form.url,
allowBlank: true, allowBlank: true,
@ -36,19 +36,18 @@ const Widget = BI.inherit(BI.Widget, {
}], }],
}, },
{ {
type: 'bi.left', type: Left,
height: 30, height: 30,
items: [ items: [
{ {
type: 'bi.label', type: Label,
text: BI.i18nText('Dec-Dcm_Connection_Form_Database_Port'), text: BI.i18nText('Dec-Dcm_Connection_Form_Database_Port'),
height: 24, height: 24,
width: 115, width: 115,
textAlign: 'left', textAlign: 'left',
}, },
{ {
type: 'bi.editor', type: TextEditor,
cls: 'bi-border',
watermark: BI.i18nText('Dec-Dcm_Connection_Form_Database_Port'), watermark: BI.i18nText('Dec-Dcm_Connection_Form_Database_Port'),
allowBlank: true, allowBlank: true,
width: 300, width: 300,
@ -61,19 +60,18 @@ const Widget = BI.inherit(BI.Widget, {
}], }],
}, },
{ {
type: 'bi.left', type: Left,
height: 30, height: 30,
items: [ items: [
{ {
type: 'bi.label', type: Label,
text: BI.i18nText('Dec-Dcm_Connection_Form_Password'), text: BI.i18nText('Dec-Dcm_Connection_Form_Password'),
height: 24, height: 24,
width: 115, width: 115,
textAlign: 'left', textAlign: 'left',
}, },
{ {
type: 'bi.editor', type: TextEditor,
cls: 'bi-border',
inputType: 'password', inputType: 'password',
value: form.password, value: form.password,
allowBlank: true, allowBlank: true,

2
src/demo/plugin.redis.preview.ts

@ -1,4 +1,4 @@
const classNamePreview = 'fr.plugin.redis.preview'; const classNamePreview = 'dec.dcm.plugin.redis.preview';
const RedisConstantName = 'dec.constant.database.conf.connect.form.redis.value'; const RedisConstantName = 'dec.constant.database.conf.connect.form.redis.value';
const form = BI.Constants.getConstant(RedisConstantName); const form = BI.Constants.getConstant(RedisConstantName);

3
src/demo/plugin.tedis.pool.ts

@ -1,4 +1,4 @@
const classNamePool = 'fr.plugin.redis.pool'; const classNamePool = 'dec.dcm.plugin.redis.pool';
const WidgetPool = BI.inherit(BI.Widget, { const WidgetPool = BI.inherit(BI.Widget, {
render() { render() {
@ -22,7 +22,6 @@ const WidgetPool = BI.inherit(BI.Widget, {
{ {
type: 'bi.label', type: 'bi.label',
cls: 'right-status-text', cls: 'right-status-text',
extraCls: 'card-font1',
text: numActive, text: numActive,
}, },
{ {

4
src/index.ts

@ -1,10 +1,10 @@
import i18n from '../private/i18n'; import i18n from '../private/i18n';
BI.DOM.ready(() => { BI.DOM.ready(() => {
const app = require('./app/app.component').default; const app = require('./app/app').default;
// TODO: 先采用这种方式方便前端调试 // TODO: 先采用这种方式方便前端调试
BI.addI18n(i18n); BI.addI18n(i18n);
BI.createWidget({ BI.createWidget({
type:app, type: app,
element: 'body', element: 'body',
}); });
}); });

4
src/less/index.less

@ -0,0 +1,4 @@
@import "lib/background";
@import "lib/color";
@import "resource/background";
@import "resource/font";

6
src/less/lib/background.less

@ -0,0 +1,6 @@
@background-resources: "resources.png";
@background-warning: "warning.png";
@background-database-selected: "database-selected.png";
@background-loading-gif: "loading.gif";
@background-success: "success.png";
@background-error: "error.png";

2
src/less/lib/color.less

@ -0,0 +1,2 @@
@import "../../../node_modules/fineui/src/less/lib/colors";
@background-color-blue-transparent: @color-bi-blue-5;

4
src/less/lib/font.less

@ -0,0 +1,4 @@
@font-link: "e759";
@font-link-test: "e763";
@font-link-info: "e63c";
@font-link-delete: "e6c4";

23
src/less/resource/background.less

@ -0,0 +1,23 @@
@import "../lib/background";
@import "../var";
.data-connection-background {
.image2xPath(@background-resources)
}
.dcm-comfirm-icon{
.image2xPath(@background-warning)
}
.dcm-link-more-selected{
.image2xPath(@background-database-selected)
}
.dcm-loading-icon{
.image2xPath(@background-loading-gif)
}
.dcm-success-icon{
.image2xPath(@background-success)
}
.dcm-error-icon{
.image2xPath(@background-error)
}

7
src/less/resource/font.less

@ -0,0 +1,7 @@
@import "../../../node_modules/fineui/src/less/image.less";
@import "../lib/font.less";
.font(dcm-link-font, @font-link);
.font(dcm-info-font, @font-link-info);
.font(dcm-test-font, @font-link-test);
.font(dcm-delete-font, @font-link-delete);

4
src/less/var.less

@ -0,0 +1,4 @@
@import "../../node_modules/fineui/src/less/var";
@import '../../node_modules/fineui/src/less/visual.less';
@imageUrl: '/img/';
@image2xUrl: '/img/';

9
src/shared/components/both.side.component.ts → src/shared/components/both_side.ts

@ -1,17 +1,18 @@
import {WidgetType, Htape, Label} from '@ui/index'; import {WidgetType, Htape, Label} from '@ui/index';
const BothSide = 'fr.shared.component.both.side'; const BothSide = 'dec.dcm.shared.component.both.side';
const Widget: WidgetType = { const Widget: WidgetType = {
props: {
height: 24,
},
render() { render() {
const {leftText, rightText} = this.options; const {leftText, rightText} = this.options;
return { return {
type: Htape, type: Htape,
cls: 'both-side',
height:24,
items: [{ items: [{
el: { el: {
type: Label, type: Label,
cls: 'left', cls: 'bi-font-bold',
textAlign: 'left', textAlign: 'left',
text: leftText, text: leftText,
}, },

29
src/shared/components/form.item.component.ts

@ -1,29 +0,0 @@
import {WidgetType, Htape, Label} from '@ui/index';
const className = 'fr.shared.component.form.item';
const Widget: WidgetType = {
render() {
const {text, form, hint, height} = this.options;
return {
type: Htape,
cls: 'both-side',
height:height ? height : 24,
items: [{
el: {
type: Label,
cls: 'left',
textAlign: 'left',
text,
},
width: 115,
}, form, {
type: Label,
cls: 'hint',
textAlign: 'left',
text: hint,
}],
};
},
};
BI.shortcut(className, BI.inherit(BI.Widget, Widget));
export default className;

8
src/shared/components/title.component.ts → src/shared/components/title.ts

@ -1,12 +1,16 @@
import {WidgetType, Label} from '@ui/index'; import {WidgetType, Label} from '@ui/index';
const className = 'fr.shared.component.title'; const className = 'dec.dcm.shared.component.title';
const Widget: WidgetType = { const Widget: WidgetType = {
props: {
baseCls: 'bi-tips bi-border-bottom',
},
render() { render() {
const {text} = this.options; const {text} = this.options;
return { return {
type: Label, type: Label,
cls: 'shared-component-title', height: 24,
bgap: 10,
textAlign: 'left', textAlign: 'left',
text, text,
}; };

4
src/shared/crud/crud.request.ts

@ -82,7 +82,7 @@ export function testConnection(data: LinkType, cb: Function): void{
}); });
} else { } else {
setTimeout(() => { setTimeout(() => {
cb({errorCode:'500', errorMsg:'createConnectionThread not start!'}); cb({errorCode: '500', errorMsg: 'createConnectionThread not start!'});
}, 2000); }, 2000);
} }
} }
@ -125,6 +125,6 @@ export function info(name: string, cb: Function): void{
cb(res.data); cb(res.data);
}); });
} else { } else {
cb({maxActive:50, maxIdle:10, numActive:0, numIdle:0}); cb({maxActive: 50, maxIdle: 10, numActive: 0, numIdle: 0});
} }
} }

108
src/shared/service/dialog.service.ts

@ -1,4 +1,4 @@
import {Label, Vertical, Left, Button, Layout} from '@ui/index'; import {Label, Vertical, Button, Layout, CenterAdapt, VerticalAdapt} from '@ui/index';
class Dialog { class Dialog {
/** /**
* *
@ -16,15 +16,19 @@ class Dialog {
body: { body: {
type: 'bi.left', type: 'bi.left',
cls: 'comfirm-content', cls: 'comfirm-content',
vgap: 40,
hgap: 20,
items: [ items: [
{ {
type: 'bi.layout', type: 'bi.layout',
cls: 'comfirm-icon', cls: 'dcm-comfirm-icon',
width: 50, width: 50,
height: 50, height: 50,
}, },
{ {
type: 'bi.label', type: 'bi.label',
textHeight: 50,
lgap: 10,
text: message, text: message,
}, },
], ],
@ -50,14 +54,16 @@ class Dialog {
public loading(message: string): string { public loading(message: string): string {
const body = { const body = {
type: 'bi.center_adapt', type: 'bi.center_adapt',
cls: 'show-content', cls: 'bi-card',
width: 450,
height: 220,
items: [ items: [
{ {
type: Vertical, type: Vertical,
items: [ items: [
{ {
type: 'bi.layout', type: 'bi.layout',
cls: 'loading-icon', cls: 'dcm-loading-icon',
width: 100, width: 100,
height: 100, height: 100,
}, },
@ -76,14 +82,14 @@ class Dialog {
public success(message: string): string { public success(message: string): string {
const body = { const body = {
type: 'bi.center_adapt', type: 'bi.center_adapt',
cls: 'show-content', cls: 'bi-card',
items: [ items: [
{ {
type: Vertical, type: Vertical,
items: [ items: [
{ {
type: 'bi.layout', type: 'bi.layout',
cls: 'success-icon', cls: 'dcm-success-icon',
width: 100, width: 100,
height: 100, height: 100,
}, },
@ -101,14 +107,14 @@ class Dialog {
public error(message: string): string { public error(message: string): string {
const body = { const body = {
type: 'bi.center_adapt', type: 'bi.center_adapt',
cls: 'show-content', cls: 'bi-card',
items: [ items: [
{ {
type: Vertical, type: Vertical,
items: [ items: [
{ {
type: 'bi.layout', type: 'bi.layout',
cls: 'error-icon', cls: 'dcm-error-icon',
width: 100, width: 100,
height: 100, height: 100,
}, },
@ -125,8 +131,8 @@ class Dialog {
} }
public linkFail(text: string, more: string, cb?: Function): string { public linkFail(text: string, more: string, cb?: Function): string {
let Popover: any = null; let dialogPopover = null;
let More: any = null; let dialogMore = null;
const id = BI.UUID(); const id = BI.UUID();
const that = this; const that = this;
const body = { const body = {
@ -134,36 +140,39 @@ class Dialog {
items: [ items: [
{ {
type: 'bi.center_adapt', type: 'bi.center_adapt',
cls: 'show-content', cls: 'bi-card',
tgap: 10, tgap: 10,
items: [ items: [
{ {
type: Vertical, type: Vertical,
vgap: 10,
items: [ items: [
{ {
type: Layout, type: Layout,
cls: 'error-icon', cls: 'dcm-error-icon',
width: 100, width: 270,
height: 100, height: 100,
textAlign: 'center',
}, },
{ {
type: Label, type: Label,
text, text,
}, },
{ {
type: Left, type: VerticalAdapt,
cls: 'buttons', cls: 'buttons',
hgap: 5,
items: [ items: [
{ {
type: Button, type: Button,
text: BI.i18nText('Dec-Dcm_Connection_Detailed_Information'), text: BI.i18nText('Dec-Dcm_Connection_Detailed_Information'),
level: 'ignore', level: 'ignore',
handler() { handler() {
const isHide = !More.isVisible(); const isHide = !dialogMore.isVisible();
Popover.element.css({ dialogPopover.element.css({
height: isHide ? '290' : '220', height: isHide ? '290' : '220',
}); });
More.setVisible(isHide); dialogMore.setVisible(isHide);
this.setText(isHide ? BI.i18nText('Dec-Dcm_Connection_Handup_Information') : BI.i18nText('Dec-Dcm_Connection_Detailed_Information')); this.setText(isHide ? BI.i18nText('Dec-Dcm_Connection_Handup_Information') : BI.i18nText('Dec-Dcm_Connection_Detailed_Information'));
}, },
}, },
@ -172,7 +181,7 @@ class Dialog {
text: BI.i18nText('Dec-Dcm_Back'), text: BI.i18nText('Dec-Dcm_Back'),
level: 'ignore', level: 'ignore',
handler() { handler() {
that.close(id); that.remove(id);
}, },
}, },
{ {
@ -191,28 +200,38 @@ class Dialog {
], ],
}, { }, {
type: Label, type: Label,
cls: 'show-more', cls: 'bi-header-background',
text: more, text: more,
invisible: true, invisible: true,
height: 73, height: 73,
width: 400,
value: false, value: false,
ref(ref: any) { ref: _ref => {
More = ref; dialogMore = _ref;
}, },
}, },
], ],
}; };
BI.Popovers.create(id, {
type: 'bi.popover', BI.Maskers.create(id, null, {
cls: 'popover-notitle bi-custom-show', render: {
size: 'normal', type: CenterAdapt,
cls: 'bi-z-index-mask',
items: [{
el: {
type: 'bi.center_adapt',
cls: 'bi-card',
width: 450, width: 450,
height: 220, height: 220,
body, items: [body],
ref(ref: any) { ref: _ref => {
Popover = ref; dialogPopover = _ref;
}, },
}).open(id); },
}],
},
});
BI.Maskers.show(id);
return id; return id;
} }
@ -220,23 +239,32 @@ class Dialog {
public close(id: string): void{ public close(id: string): void{
BI.Popovers.close(id); BI.Popovers.close(id);
} }
public remove(id: string): void{
BI.Maskers.remove(id);
}
public show(body: any, autoClose = 0): string { public show(body: any, autoClose = 0): string {
const id = BI.UUID(); const name = BI.UUID();
BI.Popovers.create(id, { BI.Maskers.create(name, null, {
type: 'bi.popover', render: {
cls: 'popover-notitle bi-custom-show', type: CenterAdapt,
size: 'normal', cls: 'bi-z-index-mask',
width: 450, items: [{
height: 220, el: {
body, ...body,
}).open(id); },
}],
},
});
BI.Maskers.show(name);
if (autoClose > 0) { if (autoClose > 0) {
setTimeout(() => { setTimeout(() => {
this.close(id); BI.Maskers.remove(name);
}, autoClose); }, autoClose);
} }
return id; return name;
} }
} }

8
src/ui/fineui.ts

@ -34,7 +34,7 @@ export const TextBubblePopupBarView = 'bi.text_bubble_bar_popup_view';
export const BubbleCombo = 'bi.bubble_combo'; export const BubbleCombo = 'bi.bubble_combo';
export const SearchEditor = 'bi.search_editor'; export const SearchEditor = 'bi.search_editor';
export const Img = 'bi.img'; export const Img = 'bi.img';
export const LeftRightVerticalAdapt = 'bi.left_right_vertical_adapt'; export const LinearSegment = 'bi.linear_segment';
// 布局 // 布局
export const VerticalAdapt = 'bi.vertical_adapt'; export const VerticalAdapt = 'bi.vertical_adapt';
@ -45,3 +45,9 @@ export const Layout = 'bi.layout';
export const Absolute = 'bi.absolute'; export const Absolute = 'bi.absolute';
export const Vertical = 'bi.vertical'; export const Vertical = 'bi.vertical';
export const Left = 'bi.left'; export const Left = 'bi.left';
export const Right = 'bi.right';
export const LeftRightVerticalAdapt = 'bi.left_right_vertical_adapt';
export const VertualGroup = 'bi.virtual_group';
export const ListView = 'bi.list_view';
export const FloatCenter = 'bi.float_center';
export const HorizotalAdapt = 'bi.horizontal_adapt';

13
webpack.config.js

@ -51,6 +51,19 @@ module.exports = env => {
}, },
'css-loader','sass-loader' 'css-loader','sass-loader'
] ]
},{
test:/\.less$/,
exclude: /node_modules/,
use: [
{
loader: MiniCssExtractPlugin.loader,
options: {
publicPath: './',
hmr: process.env.NODE_ENV === 'development',
},
},
'css-loader','less-loader'
]
},{ },{
test:/(\.jpg|\.png|\.gif|\.svg)$/, test:/(\.jpg|\.png|\.gif|\.svg)$/,
exclude: /node_modules/, exclude: /node_modules/,

Loading…
Cancel
Save