Browse Source

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

* commit 'c77db613e9348db5327eeb528bfbe57126986b82':
  refactor: 避免使用页面上的text做判断
  style: 冒号后面加空格
  refactor: 将验证方法提取出来
  refactor: 去除自己绑定的按钮事件
  refactor: 将常量单独出来
  refactor: 将标识符配置为常量
  refactor: 修改国际化的引用方式
  refactor: 根据规范修改国际化的key
  feat: 国际化
  docs: update readme
  docs: update readme
  docs: update readme
qufenxi
alan 6 years ago
parent
commit
6905c8a6a3
  1. 1
      .eslintrc.js
  2. 8
      README.md
  3. 55
      i18n/zh_cn.properties
  4. 1
      package.json
  5. 8
      private/constants.ts
  6. 57
      private/i18n.ts
  7. 3
      readme.md
  8. 6
      src/app/app.component.scss
  9. 2
      src/app/app.model.ts
  10. 2
      src/app/link_set/left/left.service.ts
  11. 27
      src/app/link_set/left/left_item/left.item.component.ts
  12. 31
      src/app/link_set/left/left_item/left.item.icon.component.ts
  13. 3
      src/app/link_set/link-set.component.ts
  14. 16
      src/app/link_set/link-set.model.ts
  15. 13
      src/app/link_set/more/more.link.component.ts
  16. 8
      src/app/link_set/more/more.link.item.component.ts
  17. 6
      src/app/link_set/more/more.link.service.ts
  18. 9
      src/app/link_set/right/nothing.component.ts
  19. 66
      src/app/link_set/right/right_edit/right.edit.component.ts
  20. 5
      src/app/link_set/right/right_edit/right.edit.constant.ts
  21. 60
      src/app/link_set/right/right_edit/right.edit.mysql.component.ts
  22. 4
      src/app/link_set/right/right_edit/right.edit.service.ts
  23. 24
      src/app/link_set/right/right_show/right.show.component.ts
  24. 13
      src/app/link_set/right/right_title/right.title.component.ts
  25. 12
      src/app/link_set/select/select.component.ts
  26. 5
      src/app/link_set/select/select.service.ts
  27. 15
      src/app/link_status/left/left.item.component.ts
  28. 2
      src/app/link_status/left/left.service.ts
  29. 5
      src/app/link_status/link_status.component.ts
  30. 4
      src/app/link_status/right/right.card.component.ts
  31. 4
      src/app/link_status/right/right.component.ts
  32. 29
      src/app/title/title.component.ts
  33. 17
      src/app/title/title_item/title_item.component.ts
  34. 18
      src/demo/plugin.redis.edit.ts
  35. 6
      src/demo/plugin.redis.preview.ts
  36. 3
      src/demo/plugin.tedis.pool.ts
  37. 2
      src/index.html
  38. 3
      src/index.ts
  39. 20
      src/shared/service/dialog.service.ts
  40. 2
      tsconfig.json
  41. 1
      types/globals.d.ts
  42. 1
      webpack.config.js

1
.eslintrc.js

@ -25,6 +25,7 @@ module.exports = {
'for-direction': 2, 'for-direction': 2,
// 关键字前后必须有空格 // 关键字前后必须有空格
'keyword-spacing': 2, 'keyword-spacing': 2,
'key-spacing':2,
// 最大块嵌套深度为 5 层 // 最大块嵌套深度为 5 层
'max-depth': [2, 5], 'max-depth': [2, 5],
// 最大回调深度为 3 层 // 最大回调深度为 3 层

8
README.md

@ -1,7 +1,9 @@
# database-connection 数据连接设置页面 # Database Connection Manager
![start](https://img.shields.io/badge/start-2019%2F04%2F26-blue.svg) ![finui](https://img.shields.io/badge/lib-FinUi-blue.svg)
用于决策平台和设计器中管理数据连接的通用管理器
![finui](https://img.shields.io/badge/lib-FinUi-blue.svg)
[KERNEL-493](http://www.finedevelop.com:2016/browse/KERNEL-493)
## 开始 ## 开始
下载代码 下载代码

55
i18n/zh_cn.properties

@ -0,0 +1,55 @@
Dec-Dcm_Connection_Management= 数据连接管理
Dec-Dcm_Pool_Connection_Management= 连接池管理
Dec-Dcm_Data_Connections= 数据连接
Dec-Dcm_Active_Connections_Number= 活动连接数
Dec-Dcm_Leisure_Connections_Number= 空闲连接数
Dec-Dcm_Connections= 连接
Dec-Dcm_Default= 默认
Dec-Dcm_Delete= 删除
Dec-Dcm_Test_Connection= 测试连接
Dec-Dcm_Copy= 复制
Dec-Dcm_Edit= 编辑
Dec-Dcm_Save= 保存
Dec-Dcm_Yes= 是
Dec-Dcm_No= 否
Dec-Dcm_Search= 搜索
Dec-Dcm_Type= 类型
Dec-Dcm_Other= 其他
Dec-Dcm_Tips= 提示
Dec-Dcm_Back= 返回
Dec-Dcm_Creator= 创建者
Dec-Dcm_First_Step= 第一步
Dec-Dcm_Second_Step= 第二步
Dec-Dcm_Third_Step= 第三步
Dec-Dcm_Connection_Detailed_Information= 详细信息
Dec-Dcm_Connection_Handup_Information= 收起信息
Dec-Dcm_Connection_Testing= 正在测试连接,请稍候...
Dec-Dcm_Connection_Test_Fail= 测试连接失败
Dec-Dcm_Connection_Test_Success= 连接成功
Dec-Dcm_Connection_Option_Cannot_Find= 找不到该连接的配置信息
Dec-Dcm_Connection_Config_No_Save= 当前设置尚未保存,是否保存?
Dec-Dcm_Connection_New= 新建数据连接
Dec-Dcm_Connection_More= 更多数据连接...
Dec-Dcm_Connection_More-Title= 更多数据连接
Dec-Dcm_Connection_Other= 其他
Dec-Dcm_Connection_Plase_Add_One= 请选择左侧数据连接或点击新建数据连接
Dec-Dcm_Connection_Is_Existence= 数据连接名已存在
Dec-Dcm_Connection_Form_ConnectionName= 数据连接名
Dec-Dcm_Connection_Form_ConnectionName-Change-Confirm= *修改数据连接名会影响相关数据表和仪表板
Dec-Dcm_Connection_Form_Driver= 驱动器
Dec-Dcm_Connection_Form_URL= URL
Dec-Dcm_Connection_Form_Place_Input= 请输入
Dec-Dcm_Connection_Form_OriginalCharsetName= 编码
Dec-Dcm_Connection_Form_Auto= 自动
Dec-Dcm_Connection_Form_UserName= 用户名
Dec-Dcm_Connection_Form_Password= 密码
Dec-Dcm_Connection_Form_Pool_Properties= 连接池属性
Dec-Dcm_Connection_Form_SQL_Validation_Query= SQL验证查询
Dec-Dcm_Connection_Form_Connection-Check= 获取连接前校验
Dec-Dcm_Connection_Form_Connection_Max_Number= 最大活动连接数
Dec-Dcm_Connection_Form_Place_Input-Number= 请输入有效的正整数
Dec-Dcm_Connection_Form_Pattern= 模式
Dec-Dcm_Connection_Form_Database_Addr= 数据库地址
Dec-Dcm_Connection_Form_Database_Port= 端口号
Dec-Dcm_Connection_Make_Sure_Delete= 确定删除该数据连接?
Dec-Dcm_Connection_ReConnect= 重新连接

1
package.json

@ -10,6 +10,7 @@
"author": "alan <alan@fanrun.com>", "author": "alan <alan@fanrun.com>",
"license": "ISC", "license": "ISC",
"devDependencies": { "devDependencies": {
"@types/node": "^12.0.2",
"@typescript-eslint/eslint-plugin": "^1.6.0", "@typescript-eslint/eslint-plugin": "^1.6.0",
"@typescript-eslint/parser": "^1.6.0", "@typescript-eslint/parser": "^1.6.0",
"copy-webpack-plugin": "^5.0.2", "copy-webpack-plugin": "^5.0.2",

8
private/constants.ts

@ -0,0 +1,8 @@
export const OTHER_CONNECT = 'other';
export const DEFAULT_INFO = 'DESIGNER';
export const ACTION_DELETE = 'ACTION_DELETE';
export const ACTION_COPY = 'ACTION_COPY';
export const ACTION_TEST = 'ACTION_TEST';
export const TAB_LINK_SET = 'TAB_LINK_SET';
export const TAB_LINK_POOL = 'TAB_LINK_POOL';

57
private/i18n.ts

@ -0,0 +1,57 @@
export default {
'Dec-Dcm_Connection_Management': '数据连接管理',
'Dec-Dcm_Pool_Connection_Management': '连接池管理',
'Dec-Dcm_Data_Connections': '数据连接',
'Dec-Dcm_Active_Connections_Number': '活动连接数',
'Dec-Dcm_Leisure_Connections_Number': '空闲连接数',
'Dec-Dcm_Connections': '连接',
'Dec-Dcm_Default': '默认',
'Dec-Dcm_Delete': '删除',
'Dec-Dcm_Test_Connection': '测试连接',
'Dec-Dcm_Copy': '复制',
'Dec-Dcm_Edit': '编辑',
'Dec-Dcm_Save': '保存',
'Dec-Dcm_Yes': '是',
'Dec-Dcm_No': '否',
'Dec-Dcm_Search': '搜索',
'Dec-Dcm_Type': '类型',
'Dec-Dcm_Other': '其他',
'Dec-Dcm_Tips': '提示',
'Dec-Dcm_Back': '返回',
'Dec-Dcm_Creator': '创建者',
'Dec-Dcm_First_Step': '第一步',
'Dec-Dcm_Second_Step': '第二步',
'Dec-Dcm_Third_Step': '第三步',
'Dec-Dcm_Connection_Detailed_Information': '详细信息',
'Dec-Dcm_Connection_Handup_Information': '收起信息',
'Dec-Dcm_Connection_Testing': '正在测试连接,请稍候...',
'Dec-Dcm_Connection_Test_Fail': '测试连接失败',
'Dec-Dcm_Connection_Test_Success': '连接成功',
'Dec-Dcm_Connection_Option_Cannot_Find': '找不到该连接的配置信息',
'Dec-Dcm_Connection_Config_No_Save': '当前设置尚未保存,是否保存?',
'Dec-Dcm_Connection_New': '新建数据连接',
'Dec-Dcm_Connection_More': '更多数据连接...',
'Dec-Dcm_Connection_More-Title': '更多数据连接',
'Dec-Dcm_Connection_Other': '其他',
'Dec-Dcm_Connection_Plase_Add_One': '请选择左侧数据连接或点击新建数据连接',
'Dec-Dcm_Connection_Is_Existence': '数据连接名已存在',
'Dec-Dcm_Connection_Form_ConnectionName': '数据连接名',
'Dec-Dcm_Connection_Form_ConnectionName-Change-Confirm': '*修改数据连接名会影响相关数据表和仪表板',
'Dec-Dcm_Connection_Form_Driver': '驱动器',
'Dec-Dcm_Connection_Form_URL': 'URL',
'Dec-Dcm_Connection_Form_Place_Input': '请输入',
'Dec-Dcm_Connection_Form_OriginalCharsetName': '编码',
'Dec-Dcm_Connection_Form_Auto': '自动',
'Dec-Dcm_Connection_Form_UserName': '用户名',
'Dec-Dcm_Connection_Form_Password': '密码',
'Dec-Dcm_Connection_Form_Pool_Properties': '连接池属性',
'Dec-Dcm_Connection_Form_SQL_Validation_Query': 'SQL验证查询',
'Dec-Dcm_Connection_Form_Connection-Check': '获取连接前校验',
'Dec-Dcm_Connection_Form_Connection_Max_Number': '最大活动连接数',
'Dec-Dcm_Connection_Form_Place_Input-Number': '请输入有效的正整数',
'Dec-Dcm_Connection_Form_Pattern': '模式',
'Dec-Dcm_Connection_Form_Database_Addr': '数据库地址',
'Dec-Dcm_Connection_Form_Database_Port': '端口号',
'Dec-Dcm_Connection_Make_Sure_Delete': '确定删除该数据连接?',
'Dec-Dcm_Connection_ReConnect': '重新连接',
};

3
readme.md

@ -1,3 +0,0 @@
# Database Connection Manager
用于决策平台和设计器中管理数据连接的通用管理器

6
src/app/app.component.scss

@ -5,7 +5,7 @@
.title{ .title{
background-color: #fff; background-color: #fff;
border-bottom: 1px solid #e8eaed; border-bottom: 1px solid #e8eaed;
.title-item{ .dec-title-item{
height: 39px; height: 39px;
line-height: 39px; line-height: 39px;
padding-left: 15px; padding-left: 15px;
@ -19,6 +19,10 @@
font-weight: 700; font-weight: 700;
cursor: pointer; cursor: pointer;
} }
.dec-title-item-selected{
color: #3685f2;
border-bottom: solid 2px #3685f2;
}
.close-button { .close-button {
position: absolute !important; position: absolute !important;
right: 5px; right: 5px;

2
src/app/app.model.ts

@ -7,7 +7,7 @@ const Model: ModelType = {
childContext: ['tab', 'linkList', 'linkSelected', 'linkUpdate', 'moreLinkSelected', 'statusSelected', 'connectionNameErr'], childContext: ['tab', 'linkList', 'linkSelected', 'linkUpdate', 'moreLinkSelected', 'statusSelected', 'connectionNameErr'],
state () { state () {
return { return {
tab: '数据连接管理', tab: BI.i18nText('Dec-Dcm_Connection_Management'),
linkList, linkList,
linkSelected: {}, linkSelected: {},
linkUpdate: {}, linkUpdate: {},

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

@ -10,7 +10,7 @@ export const getLinks = (linkList: LinkType[]): any => {
title: item.connectionName, title: item.connectionName,
id: item.connectionId, id: item.connectionId,
creator: item.creator, creator: item.creator,
text: item.text ? item.text : '默认', text: item.text ? item.text : BI.i18nText('Dec-Dcm_Default'),
}); });
}); });

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

@ -1,6 +1,7 @@
import {WidgetType, Left, Label, Icon} from '@ui'; import {WidgetType, Left, Label, Icon, TextButton} from '@ui';
import ItemIcon from './left.item.icon.component'; import ItemIcon from './left.item.icon.component';
import Model from '../../link-set.model'; 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 className = 'fr.component.linkSet.left.item';
const Widget: WidgetType = { const Widget: WidgetType = {
props: { props: {
@ -24,15 +25,18 @@ const Widget: WidgetType = {
cls: 'link-font', cls: 'link-font',
height: 24, height: 24,
width: 26, width: 26,
text: '连接', text: BI.i18nText('Dec-Dcm_Connections'),
title, title,
}, },
{ {
type: Label, type: TextButton,
cls: 'link-title', cls: 'link-title',
textAlign: 'left', textAlign: 'left',
text: title, text: title,
title, title,
handler: () => {
this.store.setLinkSelected(title);
},
}, },
{ {
type: Left, type: Left,
@ -41,25 +45,28 @@ const Widget: WidgetType = {
{ {
type: ItemIcon, type: ItemIcon,
cls: 'link-text-font', cls: 'link-text-font',
title: '测试连接', title: BI.i18nText('Dec-Dcm_Test_Connection'),
value: ACTION_TEST,
id, id,
}, },
{ {
type: ItemIcon, type: ItemIcon,
cls: 'copy-font', cls: 'copy-font',
title: '复制', title: BI.i18nText('Dec-Dcm_Copy'),
value: ACTION_COPY,
id, id,
}, },
{ {
type: ItemIcon, type: ItemIcon,
cls: 'info-font', cls: 'info-font',
title: `类型${text === 'DESIGNER' ? '其他' : text} \r\n创建者${creator}`, title: `${BI.i18nText('Dec-Dcm_Type')}${text === DEFAULT_INFO ? BI.i18nText('Dec-Dcm_Other') : text} \r\n${BI.i18nText('Dec-Dcm_Creator')}${creator}`,
id, id,
}, },
{ {
type: ItemIcon, type: ItemIcon,
cls: 'delete-font', cls: 'delete-font',
title: '删除', title: BI.i18nText('Dec-Dcm_Delete'),
value: ACTION_DELETE,
id, id,
}, },
], ],
@ -68,12 +75,6 @@ const Widget: WidgetType = {
], ],
}; };
}, },
mounted() {
const {title} = this.options;
this.element.on('click', () => {
this.store.setLinkSelected(title);
});
},
}; };
BI.shortcut(className, BI.inherit(BI.Widget, Widget)); BI.shortcut(className, BI.inherit(BI.Widget, Widget));
export default className; export default className;

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

@ -1,16 +1,18 @@
import {WidgetType, Icon, BubbleCombo, TextBubblePopupBarView} from '@ui/index'; import {WidgetType, Icon, BubbleCombo, TextBubblePopupBarView, IconButton} from '@ui/index';
import Model from '../../link-set.model'; import Model from '../../link-set.model';
import {ACTION_DELETE} from '@private/constants';
const className = 'fr.component.linkSet.left.item.icon'; const className = 'fr.component.linkSet.left.item.icon';
const Widget: WidgetType = { const Widget: WidgetType = {
_store() { _store() {
return BI.Models.getModel(Model); return BI.Models.getModel(Model);
}, },
render() { render() {
const {cls, title, id} = this.options; const {cls, title, id, value} = this.options;
const that = this; const that = this;
let iconContent: any = null; let iconContent: any = null;
let combo: any = null; let combo: any = null;
if (title === '删除') { if (value === ACTION_DELETE) {
return { return {
type: BubbleCombo, type: BubbleCombo,
direction: 'bottom', direction: 'bottom',
@ -20,7 +22,7 @@ const Widget: WidgetType = {
el: { el: {
type: Icon, type: Icon,
cls, cls,
extraCls: 'action-icon', baseCls: 'action-icon',
height: 24, height: 24,
width: 26, width: 26,
title, title,
@ -30,7 +32,7 @@ const Widget: WidgetType = {
}, },
popup: { popup: {
type: TextBubblePopupBarView, type: TextBubblePopupBarView,
text: '确定删除该数据连接?', text: BI.i18nText('Dec-Dcm_Connection_Make_Sure_Delete'),
listeners: [{ listeners: [{
eventName: BI.BubblePopupBarView.EVENT_CLICK_TOOLBAR_BUTTON, eventName: BI.BubblePopupBarView.EVENT_CLICK_TOOLBAR_BUTTON,
action (type: boolean) { action (type: boolean) {
@ -60,27 +62,20 @@ const Widget: WidgetType = {
} }
return { return {
type: Icon, type: IconButton,
cls, cls,
extraCls: 'action-icon', extraCls: 'action-icon',
height: 24, height: 24,
width: 26, width: 26,
title, title,
}; handler: () => {
}, const {value, id, title} = this.options;
mounted() { if (value !== ACTION_DELETE) {
const {title, id} = this.options;
if (title !== '删除') {
this.element.on('click', (event: any) => {
event.stopPropagation();
this.store.onIconClick(title, id); this.store.onIconClick(title, id);
});
} else {
this.element.on('click', (event: any) => {
event.stopPropagation();
});
} }
}, },
}; };
},
};
BI.shortcut(className, BI.inherit(BI.Widget, Widget)); BI.shortcut(className, BI.inherit(BI.Widget, Widget));
export default className; export default className;

3
src/app/link_set/link-set.component.ts

@ -3,6 +3,7 @@ import LeftList from './left/left.component';
import linkSetModel from './link-set.model'; import linkSetModel from './link-set.model';
import Select from './select/select.component'; import Select from './select/select.component';
import Right from './right/right.component'; import Right from './right/right.component';
import {TAB_LINK_SET} from '@private/constants';
const className = 'fr.linkset'; const className = 'fr.linkset';
const Widget: WidgetType = { const Widget: WidgetType = {
_store() { _store() {
@ -10,7 +11,7 @@ const Widget: WidgetType = {
}, },
watch: { watch: {
tab(tab: string) { tab(tab: string) {
this.setVisible(tab === '数据连接管理'); this.setVisible(tab === TAB_LINK_SET);
}, },
}, },
render() { render() {

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

@ -33,17 +33,17 @@ const Model: ModelType = {
}, },
onIconClick(title: string, id: string) { onIconClick(title: string, id: string) {
switch (title) { switch (title) {
case '删除': case BI.i18nText('Dec-Dcm_Delete'):
deleteConnection(id, () => { deleteConnection(id, () => {
this.model.linkList = [...this.model.linkList.filter((item: LinkType) => item.connectionId !== id)]; this.model.linkList = [...this.model.linkList.filter((item: LinkType) => item.connectionId !== id)];
this.model.linkSelected = {}; this.model.linkSelected = {};
this.model.linkUpdate = {}; this.model.linkUpdate = {};
}); });
break; break;
case '测试连接': case BI.i18nText('Dec-Dcm_Test_Connection'):
this._textLink(id); this._textLink(id);
break; break;
case '复制': case BI.i18nText('Dec-Dcm_Copy'):
this.noSaveConfirm(() => { this.noSaveConfirm(() => {
this.copyLink(id); this.copyLink(id);
}); });
@ -53,16 +53,16 @@ const Model: ModelType = {
} }
}, },
_textLink(id: string) { _textLink(id: string) {
const loadingId = dialog.loading('正在测试连接,请稍候...'); const loadingId = dialog.loading(BI.i18nText('Dec-Dcm_Connection_Testing'));
const link = this.model.linkList.find((item: LinkType) => item.connectionId === id); const link = this.model.linkList.find((item: LinkType) => item.connectionId === id);
testConnection(link, (res: any) => { testConnection(link, (res: any) => {
dialog.close(loadingId); dialog.close(loadingId);
if (res && res.errorCode) { if (res && res.errorCode) {
dialog.linkFail(`${link.connectionName}测试连接失败`, res.errorMsg, () => { dialog.linkFail(`${link.connectionName}${BI.i18nText('Dec-Dcm_Connection_Test_Fail')}`, res.errorMsg, () => {
this._textLink(id); this._textLink(id);
}); });
} else { } else {
dialog.success('连接成功'); dialog.success(BI.i18nText('Dec-Dcm_Connection_Test_Success'));
} }
}); });
}, },
@ -125,7 +125,7 @@ const Model: ModelType = {
}, },
setNewLink(value: string) { setNewLink(value: string) {
if (!databaseTyle.some(item => item.text === value) && !BI.Constants.getConstant(`dec.constant.database.conf.connect.form.${value.toLowerCase()}.edit`)) { if (!databaseTyle.some(item => item.text === value) && !BI.Constants.getConstant(`dec.constant.database.conf.connect.form.${value.toLowerCase()}.edit`)) {
dialog.error('找不到该连接的配置信息'); dialog.error(BI.i18nText('Dec-Dcm_Connection_Option_Cannot_Find'));
return; return;
} }
@ -167,7 +167,7 @@ const Model: ModelType = {
}, },
noSaveConfirm(cb: Function) { noSaveConfirm(cb: Function) {
if (this.model.linkSelected && this.model.linkSelected.isSelected) { if (this.model.linkSelected && this.model.linkSelected.isSelected) {
dialog.confirm('当前设置尚未保存,是否保存?', (isConfirm: boolean) => { dialog.confirm(BI.i18nText('Dec-Dcm_Connection_Config_No_Save'), (isConfirm: boolean) => {
if (isConfirm) { if (isConfirm) {
this.saveLink(); this.saveLink();
} else { } else {

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

@ -15,7 +15,7 @@ const Widget: WidgetType = {
items: [{ items: [{
type: SearchEditor, type: SearchEditor,
width: 300, width: 300,
watermark: '搜索', watermark: BI.i18nText('Dec-Dcm_Search'),
}], }],
}, },
height: 30, height: 30,
@ -43,15 +43,10 @@ const Widget: WidgetType = {
text: item.text, text: item.text,
name: item.databaseType, name: item.databaseType,
selected: text === item.text, selected: text === item.text,
listeners: [ handler: () => {
{ that._renderItems(item.text);
eventName: 'EVENT_SELECT', that.fireEvent('EVENT_SELECT', item.text);
action (text: string) {
that._renderItems(text);
that.fireEvent('EVENT_SELECT', text);
},
}, },
],
}); });
}); });
morkLinkItem.populate(BI.createItems(items)); morkLinkItem.populate(BI.createItems(items));

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

@ -29,12 +29,6 @@ const Widget: WidgetType = {
], ],
}; };
}, },
mounted() {
const {text} = this.options;
this.element.on('click', () => {
this.fireEvent('EVENT_SELECT', text);
});
},
}; };
BI.shortcut(className, BI.inherit(BI.Widget, Widget)); BI.shortcut(className, BI.inherit(BI.BasicButton, Widget));
export default className; export default className;

6
src/app/link_set/more/more.link.service.ts

@ -7,7 +7,7 @@ export const moreLink = (onConfirm?: Function): void => {
BI.Popovers.create(id, { BI.Popovers.create(id, {
type: 'bi.bar_popover', type: 'bi.bar_popover',
size: 'normal', size: 'normal',
header: '更多数据连接', header: BI.i18nText('Dec-Dcm_Connection_More-Title'),
width: 550, width: 550,
height: 500, height: 500,
body: { body: {
@ -27,7 +27,7 @@ export const moreLink = (onConfirm?: Function): void => {
lgap: 10, lgap: 10,
items: [{ items: [{
type: 'bi.button', type: 'bi.button',
text: '取消', text: BI.i18nText('BI-Basic_Cancel'),
value: 1, value: 1,
level: 'ignore', level: 'ignore',
handler (v: any) { handler (v: any) {
@ -35,7 +35,7 @@ export const moreLink = (onConfirm?: Function): void => {
}, },
}, { }, {
type: 'bi.button', type: 'bi.button',
text: '确定', text: BI.i18nText('BI-Basic_Sure'),
disabled: true, disabled: true,
value: 0, value: 0,
ref(ref: any) { ref(ref: any) {

9
src/app/link_set/right/nothing.component.ts

@ -17,15 +17,8 @@ const Widget: WidgetType = {
}, },
{ {
type:Label, type:Label,
cls: 'bi-tips',
height: 20, height: 20,
text:'请选择左侧数据连接或点击新建数据连接', text: BI.i18nText('Dec-Dcm_Connection_Plase_Add_One'),
},
{
type:Label,
cls: 'bi-tips',
height: 20,
text:'平台仅支持使用JDBC的数据连接的管理',
}, },
], ],

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

@ -4,7 +4,7 @@ import charset from './right.edit.constant';
import Model from '../../link-set.model'; import Model from '../../link-set.model';
import FormItem from '@shared/components/form.item.component'; import FormItem from '@shared/components/form.item.component';
import Title from '@shared/components/title.component'; import Title from '@shared/components/title.component';
import {getDrivers} from './right.edit.service'; import {getDrivers, connectNameChecker} from './right.edit.service';
let ConnectionName: any = null; let ConnectionName: any = null;
const className = 'fr.component.right.edit'; const className = 'fr.component.right.edit';
const Widget: WidgetType = { const Widget: WidgetType = {
@ -32,8 +32,8 @@ const Widget: WidgetType = {
items: [ items: [
{ {
type: FormItem, type: FormItem,
text: '数据连接名', text: BI.i18nText('Dec-Dcm_Connection_Form_ConnectionName'),
hint: '*修改数据连接名会影响相关数据表和仪表板', hint: BI.i18nText('Dec-Dcm_Connection_Form_ConnectionName-Change-Confirm'),
form: { form: {
type: Editor, type: Editor,
cls: 'bi-border', cls: 'bi-border',
@ -60,7 +60,7 @@ const Widget: WidgetType = {
}, },
{ {
type: FormItem, type: FormItem,
text: '第一步', text: BI.i18nText('Dec-Dcm_First_Step'),
height: 400, height: 400,
form: { form: {
type: Vertical, type: Vertical,
@ -68,7 +68,7 @@ const Widget: WidgetType = {
items: [ items: [
{ {
type: FormItem, type: FormItem,
text: '驱动器', text: BI.i18nText('Dec-Dcm_Connection_Form_Driver'),
form: { form: {
type: TextValueCombo, type: TextValueCombo,
cls: 'bi-border', cls: 'bi-border',
@ -88,11 +88,11 @@ const Widget: WidgetType = {
}, },
{ {
type: FormItem, type: FormItem,
text: 'URL', text: BI.i18nText('Dec-Dcm_Connection_Form_URL'),
form: { form: {
type: Editor, type: Editor,
cls: 'bi-border', cls: 'bi-border',
watermark:'请输入', watermark: BI.i18nText('Dec-Dcm_Connection_Form_Place_Input'),
width: 300, width: 300,
value: linkSelected.url, value: linkSelected.url,
listeners: [{ listeners: [{
@ -108,13 +108,19 @@ const Widget: WidgetType = {
}, },
{ {
type: FormItem, type: FormItem,
text: '编码', text: BI.i18nText('Dec-Dcm_Connection_Form_OriginalCharsetName'),
form: { form: {
type: TextValueCombo, type: TextValueCombo,
cls: 'bi-border', cls: 'bi-border',
width: 300, width: 300,
text: linkSelected.originalCharsetName === '' ? '自动' : linkSelected.originalCharsetName, text: linkSelected.originalCharsetName === '' ? BI.i18nText('Dec-Dcm_Connection_Form_Auto') : linkSelected.originalCharsetName,
items: BI.Constants.getConstant(charset), items: [
{
text: BI.i18nText('Dec-Dcm_Connection_Form_Auto'),
value: '',
},
...BI.Constants.getConstant(charset),
],
listeners: [{ listeners: [{
eventName: BI.TextValueCombo.EVENT_CHANGE, eventName: BI.TextValueCombo.EVENT_CHANGE,
action() { action() {
@ -128,12 +134,12 @@ const Widget: WidgetType = {
}, },
{ {
type: FormItem, type: FormItem,
text: '用户名', text: BI.i18nText('Dec-Dcm_Connection_Form_UserName'),
form: { form: {
type: Editor, type: Editor,
cls: 'bi-border', cls: 'bi-border',
allowBlank: true, allowBlank: true,
watermark:'请输入', watermark: BI.i18nText('Dec-Dcm_Connection_Form_Place_Input'),
width: 300, width: 300,
value: linkSelected.user, value: linkSelected.user,
listeners: [{ listeners: [{
@ -149,13 +155,13 @@ const Widget: WidgetType = {
}, },
{ {
type: FormItem, type: FormItem,
text: '密码', text: BI.i18nText('Dec-Dcm_Connection_Form_Password'),
form: { form: {
type: Editor, type: Editor,
cls: 'bi-border', cls: 'bi-border',
inputType: 'password', inputType: 'password',
allowBlank: true, allowBlank: true,
watermark:'请输入', watermark: BI.i18nText('Dec-Dcm_Connection_Form_Place_Input'),
width: 300, width: 300,
value: linkSelected.password, value: linkSelected.password,
listeners: [{ listeners: [{
@ -171,17 +177,17 @@ const Widget: WidgetType = {
}, },
{ {
type: Title, type: Title,
text: '连接池属性', text: BI.i18nText('Dec-Dcm_Connection_Form_Pool_Properties'),
}, },
{ {
type: FormItem, type: FormItem,
text: 'SQL验证查询', text: BI.i18nText('Dec-Dcm_Connection_Form_SQL_Validation_Query'),
height: 100, height: 100,
form: { form: {
type: TextAreaEditor, type: TextAreaEditor,
cls: 'bi-border', cls: 'bi-border',
allowBlank: true, allowBlank: true,
watermark:'请输入', watermark: BI.i18nText('Dec-Dcm_Connection_Form_Place_Input'),
width: 300, width: 300,
height: 100, height: 100,
value: linkSelected.validationQuery, value: linkSelected.validationQuery,
@ -198,10 +204,10 @@ const Widget: WidgetType = {
}, },
{ {
type: FormItem, type: FormItem,
text: '获取连接前校验', text: BI.i18nText('Dec-Dcm_Connection_Form_Connection-Check'),
form: { form: {
type: MultiSelectItem, type: MultiSelectItem,
text: '是', text: BI.i18nText('Dec-Dcm_Yes'),
selected: linkSelected.testOnBorrow, selected: linkSelected.testOnBorrow,
width: 60, width: 60,
listeners: [{ listeners: [{
@ -217,22 +223,16 @@ const Widget: WidgetType = {
}, },
{ {
type: FormItem, type: FormItem,
text: '最大活动连接数', text: BI.i18nText('Dec-Dcm_Connection_Form_Connection_Max_Number'),
form: { form: {
type: Editor, type: Editor,
cls: 'bi-border', cls: 'bi-border',
allowBlank: true, allowBlank: true,
watermark:'请输入', watermark: BI.i18nText('Dec-Dcm_Connection_Form_Place_Input'),
width: 60, width: 60,
value: linkSelected.maxActive, value: linkSelected.maxActive,
errorText: '请输入有效的正整数', errorText: BI.i18nText('Dec-Dcm_Connection_Form_Place_Input-Number'),
validationChecker (v: string) { validationChecker: connectNameChecker,
if (/^\+?[1-9][0-9]*$/.test(v)) {
return true;
}
return false;
},
listeners: [{ listeners: [{
eventName: BI.Editor.EVENT_CHANGE, eventName: BI.Editor.EVENT_CHANGE,
action() { action() {
@ -249,19 +249,19 @@ const Widget: WidgetType = {
}, },
{ {
type: FormItem, type: FormItem,
text: '第二步', text: BI.i18nText('Dec-Dcm_Second_Step'),
form: { form: {
type: Button, type: Button,
text: '测试连接', text: BI.i18nText('Dec-Dcm_Test_Connection'),
level: 'ignore', level: 'ignore',
}, },
}, },
{ {
type: FormItem, type: FormItem,
text: '第三步', text: BI.i18nText('Dec-Dcm_Third_Step'),
form: { form: {
type: FormItem, type: FormItem,
text: '模式', text: BI.i18nText('Dec-Dcm_Connection_Form_Pattern'),
form: { form: {
type: Editor, type: Editor,
cls: 'bi-border', cls: 'bi-border',

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

@ -1,9 +1,6 @@
export const ConstantName = 'bi.constant.database.conf.charset.list'; export const ConstantName = 'bi.constant.database.conf.charset.list';
export const Constant = BI.constant(ConstantName, [ export const Constant = BI.constant(ConstantName, [
{
text: '自动',
value: '',
},
{ {
text: 'GBK', text: 'GBK',
value: 'GBK', value: 'GBK',

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

@ -4,7 +4,7 @@ import charset from './right.edit.constant';
import Model from '../../link-set.model'; import Model from '../../link-set.model';
import FormItem from '@shared/components/form.item.component'; import FormItem from '@shared/components/form.item.component';
import Title from '@shared/components/title.component'; import Title from '@shared/components/title.component';
import {getDrivers} from './right.edit.service'; import {getDrivers, connectNameChecker} from './right.edit.service';
const className = 'fr.component.right.edit.mysql'; const className = 'fr.component.right.edit.mysql';
const Widget: WidgetType = { const Widget: WidgetType = {
_store() { _store() {
@ -20,8 +20,8 @@ const Widget: WidgetType = {
items: [ items: [
{ {
type: FormItem, type: FormItem,
text: '数据连接名', text: BI.i18nText('Dec-Dcm_Connection_Form_ConnectionName'),
hint: '*修改数据连接名会影响相关数据表和仪表板', hint: BI.i18nText('Dec-Dcm_Connection_Form_ConnectionName-Change-Confirm'),
form: { form: {
type: Editor, type: Editor,
cls: 'bi-border', cls: 'bi-border',
@ -40,7 +40,7 @@ const Widget: WidgetType = {
}, },
{ {
type: FormItem, type: FormItem,
text: '驱动器', text: BI.i18nText('Dec-Dcm_Connection_Form_Driver'),
form: { form: {
type: TextValueCombo, type: TextValueCombo,
cls: 'bi-border', cls: 'bi-border',
@ -60,11 +60,11 @@ const Widget: WidgetType = {
}, },
{ {
type: FormItem, type: FormItem,
text: 'URL', text: BI.i18nText('Dec-Dcm_Connection_Form_URL'),
form: { form: {
type: Editor, type: Editor,
cls: 'bi-border', cls: 'bi-border',
watermark:'请输入', watermark: BI.i18nText('Dec-Dcm_Connection_Form_Place_Input'),
width: 300, width: 300,
value: linkSelected.url, value: linkSelected.url,
listeners: [{ listeners: [{
@ -80,13 +80,19 @@ const Widget: WidgetType = {
}, },
{ {
type: FormItem, type: FormItem,
text: '编码', text: BI.i18nText('Dec-Dcm_Connection_Form_OriginalCharsetName'),
form: { form: {
type: TextValueCombo, type: TextValueCombo,
cls: 'bi-border', cls: 'bi-border',
width: 300, width: 300,
text: linkSelected.originalCharsetName === '' ? '自动' : linkSelected.originalCharsetName, text: linkSelected.originalCharsetName === '' ? BI.i18nText('Dec-Dcm_Connection_Form_Auto') : linkSelected.originalCharsetName,
items: BI.Constants.getConstant(charset), items: [
{
text: BI.i18nText('Dec-Dcm_Connection_Form_Auto'),
value: '',
},
...BI.Constants.getConstant(charset),
],
listeners: [{ listeners: [{
eventName: BI.TextValueCombo.EVENT_CHANGE, eventName: BI.TextValueCombo.EVENT_CHANGE,
action() { action() {
@ -100,12 +106,12 @@ const Widget: WidgetType = {
}, },
{ {
type: FormItem, type: FormItem,
text: '用户名', text: BI.i18nText('Dec-Dcm_Connection_Form_UserName'),
form: { form: {
type: Editor, type: Editor,
cls: 'bi-border', cls: 'bi-border',
allowBlank: true, allowBlank: true,
watermark:'请输入', watermark: BI.i18nText('Dec-Dcm_Connection_Form_Place_Input'),
width: 300, width: 300,
value: linkSelected.user, value: linkSelected.user,
listeners: [{ listeners: [{
@ -121,13 +127,13 @@ const Widget: WidgetType = {
}, },
{ {
type: FormItem, type: FormItem,
text: '密码', text: BI.i18nText('Dec-Dcm_Connection_Form_Password'),
form: { form: {
type: Editor, type: Editor,
cls: 'bi-border', cls: 'bi-border',
inputType: 'password', inputType: 'password',
allowBlank: true, allowBlank: true,
watermark:'请输入', watermark: BI.i18nText('Dec-Dcm_Connection_Form_Place_Input'),
width: 300, width: 300,
value: linkSelected.password, value: linkSelected.password,
listeners: [{ listeners: [{
@ -143,17 +149,17 @@ const Widget: WidgetType = {
}, },
{ {
type: Title, type: Title,
text: '连接池属性', text: BI.i18nText('Dec-Dcm_Connection_Form_Pool_Properties'),
}, },
{ {
type: FormItem, type: FormItem,
text: 'SQL验证查询', text: BI.i18nText('Dec-Dcm_Connection_Form_SQL_Validation_Query'),
height: 100, height: 100,
form: { form: {
type: TextAreaEditor, type: TextAreaEditor,
cls: 'bi-border', cls: 'bi-border',
allowBlank: true, allowBlank: true,
watermark:'请输入', watermark: BI.i18nText('Dec-Dcm_Connection_Form_Place_Input'),
width: 300, width: 300,
height: 100, height: 100,
value: linkSelected.validationQuery, value: linkSelected.validationQuery,
@ -170,10 +176,10 @@ const Widget: WidgetType = {
}, },
{ {
type: FormItem, type: FormItem,
text: '获取连接前校验', text: BI.i18nText('Dec-Dcm_Connection_Form_Connection-Check'),
form: { form: {
type: MultiSelectItem, type: MultiSelectItem,
text: '是', text: BI.i18nText('Dec-Dcm_Yes'),
selected: linkSelected.testOnBorrow, selected: linkSelected.testOnBorrow,
width: 60, width: 60,
listeners: [{ listeners: [{
@ -189,22 +195,16 @@ const Widget: WidgetType = {
}, },
{ {
type: FormItem, type: FormItem,
text: '最大活动连接数', text: BI.i18nText('Dec-Dcm_Connection_Form_Connection_Max_Number'),
form: { form: {
type: Editor, type: Editor,
cls: 'bi-border', cls: 'bi-border',
allowBlank: true, allowBlank: true,
watermark:'请输入', watermark: BI.i18nText('Dec-Dcm_Connection_Form_Place_Input'),
width: 60, width: 60,
value: linkSelected.maxActive, value: linkSelected.maxActive,
errorText: '请输入有效的正整数', errorText: BI.i18nText('Dec-Dcm_Connection_Form_Place_Input-Number'),
validationChecker (v: string) { validationChecker: connectNameChecker,
if (/^\+?[1-9][0-9]*$/.test(v)) {
return true;
}
return false;
},
listeners: [{ listeners: [{
eventName: BI.Editor.EVENT_CHANGE, eventName: BI.Editor.EVENT_CHANGE,
action() { action() {
@ -218,10 +218,10 @@ const Widget: WidgetType = {
}, },
{ {
type: FormItem, type: FormItem,
text: '测试连接', text: BI.i18nText('Dec-Dcm_Test_Connection'),
form: { form: {
type: Button, type: Button,
text: '测试连接', text: BI.i18nText('Dec-Dcm_Test_Connection'),
level: 'ignore', level: 'ignore',
}, },
}, },

4
src/app/link_set/right/right_edit/right.edit.service.ts

@ -18,3 +18,7 @@ export function getDrivers(linkSelected: LinkType): {text: string; value: string
return drivers; return drivers;
} }
export function connectNameChecker(name: string): boolean {
return /^\+?[1-9][0-9]*$/.test(name);
}

24
src/app/link_set/right/right_show/right.show.component.ts

@ -17,51 +17,51 @@ const Widget: WidgetType = {
items: [ items: [
{ {
type: BothSide, type: BothSide,
leftText: '数据连接名', leftText: BI.i18nText('Dec-Dcm_Connection_Form_ConnectionName'),
rightText: linkSelected.connectionName, rightText: linkSelected.connectionName,
}, },
{ {
type: BothSide, type: BothSide,
leftText: '驱动器', leftText: BI.i18nText('Dec-Dcm_Connection_Form_Driver'),
rightText: linkSelected.driver, rightText: linkSelected.driver,
}, },
{ {
type: BothSide, type: BothSide,
leftText: 'URL', leftText: BI.i18nText('Dec-Dcm_Connection_Form_URL'),
rightText: linkSelected.url, rightText: linkSelected.url,
}, },
{ {
type: BothSide, type: BothSide,
leftText: '编码', leftText: BI.i18nText('Dec-Dcm_Connection_Form_OriginalCharsetName'),
rightText: linkSelected.originalCharsetName === '' ? '自动' : linkSelected.originalCharsetName, rightText: linkSelected.originalCharsetName === '' ? BI.i18nText('Dec-Dcm_Connection_Form_Auto') : linkSelected.originalCharsetName,
}, },
{ {
type: BothSide, type: BothSide,
leftText: '用户名', leftText: BI.i18nText('Dec-Dcm_Connection_Form_UserName'),
rightText: linkSelected.user, rightText: linkSelected.user,
}, },
{ {
type: BothSide, type: BothSide,
leftText: '密码', leftText: BI.i18nText('Dec-Dcm_Connection_Form_Password'),
rightText: linkSelected.password, rightText: linkSelected.password,
}, },
{ {
type: Title, type: Title,
text: '连接池属性', text: BI.i18nText('Dec-Dcm_Connection_Form_Pool_Properties'),
}, },
{ {
type: BothSide, type: BothSide,
leftText: 'SQL验证查询', leftText: BI.i18nText('Dec-Dcm_Connection_Form_SQL_Validation_Query'),
rightText: linkSelected.validationQuery, rightText: linkSelected.validationQuery,
}, },
{ {
type: BothSide, type: BothSide,
leftText: '获取连接前校验', leftText: BI.i18nText('Dec-Dcm_Connection_Form_Connection-Check'),
rightText: linkSelected.testOnBorrow ? '是' : '否', rightText: linkSelected.testOnBorrow ? BI.i18nText('Dec-Dcm_Yes') : BI.i18nText('Dec-Dcm_No'),
}, },
{ {
type: BothSide, type: BothSide,
leftText: '最大连接数量', leftText: BI.i18nText('Dec-Dcm_Connection_Form_Connection_Max_Number'),
rightText: linkSelected.maxActive, rightText: linkSelected.maxActive,
}, },
], ],

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

@ -1,7 +1,7 @@
import {WidgetType, Left, Label, Button} from '@ui/index'; import {WidgetType, Left, Label, Button} from '@ui/index';
import RightTitleModel from '../../link-set.model'; import RightTitleModel from '../../link-set.model';
import {LinkType} from '@ui/type'; import {LinkType} from '@ui/type';
import {saveConnection} from '../../link-set.service'; import {OTHER_CONNECT} from '@private/constants';
const className = 'fr.component.right.title'; const className = 'fr.component.right.title';
const Widget: WidgetType = { const Widget: WidgetType = {
_store() { _store() {
@ -12,6 +12,7 @@ const Widget: WidgetType = {
const linkList: LinkType[] = this.model.linkList; const linkList: LinkType[] = this.model.linkList;
const that = this; const that = this;
const {isEdit} = this.options; const {isEdit} = this.options;
const title = linkSelected.text === OTHER_CONNECT ? BI.i18nText('Dec-Dcm_Connection_Other') : linkSelected.text;
return { return {
type: Left, type: Left,
@ -21,13 +22,13 @@ const Widget: WidgetType = {
{ {
type: Label, type: Label,
cls: 'right-title-text', cls: 'right-title-text',
text: `数据连接(${linkSelected.text ? linkSelected.text : '默认'})`, text: `${BI.i18nText('Dec-Dcm_Data_Connections')}(${title ? title : BI.i18nText('Dec-Dcm_Default')})`,
}, },
{ {
type: Button, type: Button,
cls:'right-title-button', cls:'right-title-button',
invisible: isEdit, invisible: isEdit,
text: '编辑', text: BI.i18nText('Dec-Dcm_Edit'),
handler() { handler() {
that.store.setEdit(true); that.store.setEdit(true);
}, },
@ -36,11 +37,11 @@ const Widget: WidgetType = {
type: Button, type: Button,
cls:'right-title-button', cls:'right-title-button',
invisible: !isEdit, invisible: !isEdit,
text: '保存', text: BI.i18nText('Dec-Dcm_Save'),
handler() { handler() {
const result = BI.find(linkList, (idx: number, value: LinkType) => that.model.linkUpdate.connectionName === value.connectionName && value.connectionId !== that.model.linkUpdate.connectionId); const result = BI.find(linkList, (idx: number, value: LinkType) => that.model.linkUpdate.connectionName === value.connectionName && value.connectionId !== that.model.linkUpdate.connectionId);
if (result) { if (result) {
that.store.setConnectionNameErr('数据连接名已存在'); that.store.setConnectionNameErr(BI.i18nText('Dec-Dcm_Connection_Is_Existence'));
} else { } else {
that.store.saveLink(); that.store.saveLink();
} }
@ -51,7 +52,7 @@ const Widget: WidgetType = {
cls:'right-title-button', cls:'right-title-button',
invisible: !isEdit, invisible: !isEdit,
level: 'ignore', level: 'ignore',
text: '取消', text: BI.i18nText('BI-Basic_Cancel'),
handler() { handler() {
that.store.setCancel(); that.store.setCancel();
}, },

12
src/app/link_set/select/select.component.ts

@ -17,7 +17,7 @@ const Widget: WidgetType = {
adjustYOffset: 4, adjustYOffset: 4,
el: { el: {
type: 'bi.button', type: 'bi.button',
text: '新建数据连接', text: BI.i18nText('Dec-Dcm_Connection_New'),
height: 24, height: 24,
}, },
popup: { popup: {
@ -38,17 +38,17 @@ const Widget: WidgetType = {
cls: 'link-item', cls: 'link-item',
height: 24, height: 24,
width: 152, width: 152,
text: '更多数据连接...', text: BI.i18nText('Dec-Dcm_Connection_More'),
title:'更多数据连接...', title: BI.i18nText('Dec-Dcm_Connection_More'),
value: 'more', value: 'more',
}, { }, {
type: TextItem, type: TextItem,
cls: 'link-item', cls: 'link-item',
height: 24, height: 24,
width: 152, width: 152,
text: '其他', text: BI.i18nText('Dec-Dcm_Connection_Other'),
title:'其他', title: BI.i18nText('Dec-Dcm_Connection_Other'),
value: '其他', value: 'other',
}], }],
layouts: [{ layouts: [{
type: Vertical, type: Vertical,

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

@ -1,5 +1,6 @@
import {LinkType} from '@ui/type'; import {LinkType} from '@ui/type';
import pluginListConstant from '../../app.constant'; import pluginListConstant from '../../app.constant';
import {OTHER_CONNECT} from '@private/constants';
export const databaseTyle = [ export const databaseTyle = [
{ {
@ -70,7 +71,7 @@ export const databaseTyle = [
url: 'jdbc:mysql://localhost/dbname', url: 'jdbc:mysql://localhost/dbname',
}, },
{ {
text:'其他', text: OTHER_CONNECT,
databaseType: 'other', databaseType: 'other',
driver: 'org.h2.Driver', driver: 'org.h2.Driver',
drivers:['org.h2.Driver', 'com.fr.third.org.hsqldb.jdbcDriver', 'org.sqlite.JDBC'], drivers:['org.h2.Driver', 'com.fr.third.org.hsqldb.jdbcDriver', 'org.sqlite.JDBC'],
@ -266,7 +267,7 @@ export const getCnnectionName = (links: LinkType[], name: string): string => {
let nameIndex = 0; let nameIndex = 0;
const title = name.replace(/[0-9]/g, ''); const title = name.replace(/[0-9]/g, '');
const isPlugin = BI.some(plugins, (index: number, item: string) => item === title); const isPlugin = BI.some(plugins, (index: number, item: string) => item === title);
const startWith = isPlugin ? title : '数据连接'; const startWith = isPlugin ? title : BI.i18nText('Dec-Dcm_Data_Connections');
links.forEach(link => { links.forEach(link => {
link.isSelected = false; link.isSelected = false;

15
src/app/link_status/left/left.item.component.ts

@ -1,4 +1,4 @@
import {WidgetType, Left, Label} from '@ui'; import {WidgetType, Left, Label, TextButton} from '@ui';
import Model from './left.model'; import Model from './left.model';
const className = 'fr.component.linkStatus.left.item'; const className = 'fr.component.linkStatus.left.item';
const Widget: WidgetType = { const Widget: WidgetType = {
@ -19,21 +19,18 @@ const Widget: WidgetType = {
extraCls, extraCls,
items: [ items: [
{ {
type: Label, type: TextButton,
cls: 'link-title', cls: 'link-title',
textAlign: 'left', textAlign: 'left',
text: title, text: title,
title, title,
handler: () => {
this.store.setStatusSelected(title);
},
}, },
], ],
}; };
}, },
mounted() {
const {title} = this.options;
this.element.on('click', () => {
this.store.setStatusSelected(title);
});
},
}; };
BI.shortcut(className, BI.inherit(BI.Widget, Widget)); BI.shortcut(className, BI.inherit(BI.BasicButton, Widget));
export default className; export default className;

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

@ -10,7 +10,7 @@ export const getLinks = (linkList: LinkType[], selectTitle = ''): any => {
title: item.connectionName, title: item.connectionName,
id: item.connectionId, id: item.connectionId,
creator: item.creator, creator: item.creator,
text: item.text ? item.text : '默认', text: item.text ? item.text : BI.i18nText('Dec-Dcm_Default'),
}); });
}); });

5
src/app/link_status/link_status.component.ts

@ -2,6 +2,7 @@ import {WidgetType, Htape, Vtape, Left, Label} 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.component';
import Right from './right/right.component'; import Right from './right/right.component';
import {TAB_LINK_POOL} from '@private/constants';
const className = 'fr.linkstatus'; const className = 'fr.linkstatus';
const Widget: WidgetType = { const Widget: WidgetType = {
@ -10,7 +11,7 @@ const Widget: WidgetType = {
}, },
watch: { watch: {
tab(tab: string) { tab(tab: string) {
this.setVisible(tab === '连接池状态'); this.setVisible(tab === TAB_LINK_POOL);
}, },
}, },
render() { render() {
@ -30,7 +31,7 @@ const Widget: WidgetType = {
{ {
type: Label, type: Label,
cls: 'status-title', cls: 'status-title',
text: '数据连接', text: BI.i18nText('Dec-Dcm_Data_Connections'),
}, },
], ],
}, },

4
src/app/link_status/right/right.card.component.ts

@ -40,7 +40,7 @@ const Widget: WidgetType = {
{ {
type: Label, type: Label,
height: 20, height: 20,
text: '活动连接数', text: BI.i18nText('Dec-Dcm_Active_Connections_Number'),
}, },
], ],
}, },
@ -79,7 +79,7 @@ const Widget: WidgetType = {
{ {
type: Label, type: Label,
height: 20, height: 20,
text: '空闲连接数', text: BI.i18nText('Dec-Dcm_Leisure_Connections_Number'),
}, },
], ],
}, },

4
src/app/link_status/right/right.component.ts

@ -26,7 +26,7 @@ const Widget: WidgetType = {
...res, ...res,
}])); }]));
}); });
Title.setText(`数据连接(${title})`); Title.setText(`${BI.i18nText('Dec-Dcm_Data_Connections')}(${title})`);
}, },
}, },
render() { render() {
@ -41,7 +41,7 @@ const Widget: WidgetType = {
items:[ items:[
{ {
type: Label, type: Label,
text:'数据连接', text:BI.i18nText('Dec-Dcm_Data_Connections'),
}, },
], ],
ref(ref: any) { ref(ref: any) {

29
src/app/title/title.component.ts

@ -1,7 +1,7 @@
import {Left, WidgetType, IconButton} from '@ui/index'; import {Left, WidgetType, IconButton} from '@ui/index';
import TitleItem from './title_item/title_item.component'; import TitleItem from './title_item/title_item.component';
import {isDesigner, closeWindow} from '@shared/crud/crud.request'; import {isDesigner, closeWindow} from '@shared/crud/crud.request';
const tabs = ['数据连接管理', '连接池状态']; import {TAB_LINK_SET, TAB_LINK_POOL} from '@private/constants';
const className = 'fr.title'; const className = 'fr.title';
const Widget: WidgetType = { const Widget: WidgetType = {
render() { render() {
@ -9,12 +9,29 @@ const Widget: WidgetType = {
type: Left, type: Left,
cls: 'title', cls: 'title',
items: [ items: [
...BI.map(tabs, (index: number, text: string) => { {
return {
type: TitleItem, type: TitleItem,
text, 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, type: IconButton,
cls: 'close-button', cls: 'close-button',

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

@ -2,7 +2,7 @@ import {Label} from '@ui';
import tableItemModel from './title_item.model'; import tableItemModel from './title_item.model';
import {getSelectStyle} from './title_item.service'; import {getSelectStyle} from './title_item.service';
const className = 'fr.title.item'; const className = 'fr.title.item';
const Widget = BI.inherit(BI.Widget, { const Widget = BI.inherit(BI.BasicButton, {
props: { props: {
text: '', text: '',
}, },
@ -11,8 +11,8 @@ const Widget = BI.inherit(BI.Widget, {
}, },
watch: { watch: {
tab(tab: string) { tab(tab: string) {
const {text} = this.options; const {value} = this.options;
this.element.css(getSelectStyle(text, tab)); this.element.css(getSelectStyle(value, tab));
}, },
}, },
render() { render() {
@ -20,16 +20,13 @@ const Widget = BI.inherit(BI.Widget, {
return { return {
type: Label, type: Label,
cls: 'title-item', cls: 'dec-title-item',
text, text,
}; };
}, },
mounted() { select() {
const {text} = this.options; const {value} = this.options;
this.element.css(getSelectStyle('数据连接管理', text)); this.store.setTab(value);
this.element.on('click', () => {
this.store.setTab(text);
});
}, },
}); });
BI.shortcut(className, Widget); BI.shortcut(className, Widget);

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

@ -20,7 +20,7 @@ const Widget = BI.inherit(BI.Widget, {
items: [ items: [
{ {
type: 'bi.label', type: 'bi.label',
text: '数据库地址:', text: BI.i18nText('Dec-Dcm_Connection_Form_Database_Addr'),
height: 24, height: 24,
width: 115, width: 115,
textAlign: 'left', textAlign: 'left',
@ -28,7 +28,7 @@ const Widget = BI.inherit(BI.Widget, {
{ {
type: 'bi.editor', type: 'bi.editor',
cls: 'bi-border', cls: 'bi-border',
watermark: '数据库地址', watermark: BI.i18nText('Dec-Dcm_Connection_Form_Database_Addr'),
value: form.url, value: form.url,
allowBlank: true, allowBlank: true,
width: 300, width: 300,
@ -41,7 +41,7 @@ const Widget = BI.inherit(BI.Widget, {
items: [ items: [
{ {
type: 'bi.label', type: 'bi.label',
text: '端口:', text: BI.i18nText('Dec-Dcm_Connection_Form_Database_Port'),
height: 24, height: 24,
width: 115, width: 115,
textAlign: 'left', textAlign: 'left',
@ -49,18 +49,14 @@ const Widget = BI.inherit(BI.Widget, {
{ {
type: 'bi.editor', type: 'bi.editor',
cls: 'bi-border', cls: 'bi-border',
watermark: '端口', watermark: BI.i18nText('Dec-Dcm_Connection_Form_Database_Port'),
allowBlank: true, allowBlank: true,
width: 300, width: 300,
height: 24, height: 24,
value: form.port, value: form.port,
errorText: '请输入有效的正整数', errorText: BI.i18nText('Dec-Dcm_Connection_Form_Place_Input-Number'),
validationChecker (v: string) { validationChecker (v: string) {
if (/^\+?[1-9][0-9]*$/.test(v)) { return /^\+?[1-9][0-9]*$/.test(v);
return true;
}
return false;
}, },
}], }],
}, },
@ -70,7 +66,7 @@ const Widget = BI.inherit(BI.Widget, {
items: [ items: [
{ {
type: 'bi.label', type: 'bi.label',
text: '密码:', text: BI.i18nText('Dec-Dcm_Connection_Form_Password'),
height: 24, height: 24,
width: 115, width: 115,
textAlign: 'left', textAlign: 'left',

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

@ -15,7 +15,7 @@ const Widget = BI.inherit(BI.Widget, {
items: [ items: [
{ {
type: 'bi.label', type: 'bi.label',
text: '数据库地址:', text: BI.i18nText('Dec-Dcm_Connection_Form_Database_Addr'),
height: 24, height: 24,
width: 115, width: 115,
textAlign: 'left', textAlign: 'left',
@ -32,7 +32,7 @@ const Widget = BI.inherit(BI.Widget, {
items: [ items: [
{ {
type: 'bi.label', type: 'bi.label',
text: '端口:', text: BI.i18nText('Dec-Dcm_Connection_Form_Database_Port'),
height: 24, height: 24,
width: 115, width: 115,
textAlign: 'left', textAlign: 'left',
@ -49,7 +49,7 @@ const Widget = BI.inherit(BI.Widget, {
items: [ items: [
{ {
type: 'bi.label', type: 'bi.label',
text: '密码:', text: BI.i18nText('Dec-Dcm_Connection_Form_Password'),
height: 24, height: 24,
width: 115, width: 115,
textAlign: 'left', textAlign: 'left',

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

@ -39,7 +39,8 @@ const WidgetPool = BI.inherit(BI.Widget, {
}, },
{ {
type: 'bi.label', type: 'bi.label',
text: 'Redis连接数', height: 20,
text: BI.i18nText('Dec-Dcm_Active_Connections_Number'),
}, },
], ],
}, },

2
src/index.html

@ -5,6 +5,8 @@
<meta http-equiv="X-UA-Compatible" content="IE=edge"> <meta http-equiv="X-UA-Compatible" content="IE=edge">
<title>数据库连接设置</title> <title>数据库连接设置</title>
<meta name="viewport" content="width=device-width, initial-scale=1"> <meta name="viewport" content="width=device-width, initial-scale=1">
<!-- 先这样引用方便前端调试 -->
<link rel="stylesheet" type="text/css" href="./lib/fineui.min.css" /> <link rel="stylesheet" type="text/css" href="./lib/fineui.min.css" />
<script type="text/javascript" charset="UTF-8" src="./lib/fineui.min.js"></script> <script type="text/javascript" charset="UTF-8" src="./lib/fineui.min.js"></script>
</head> </head>

3
src/index.ts

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

20
src/shared/service/dialog.service.ts

@ -10,7 +10,7 @@ class Dialog {
BI.Popovers.create(id, { BI.Popovers.create(id, {
type: 'bi.bar_popover', type: 'bi.bar_popover',
size: 'normal', size: 'normal',
header: '提示', header: BI.i18nText('Dec-Dcm_Tips'),
width: 450, width: 450,
height: 220, height: 220,
body: { body: {
@ -156,20 +156,20 @@ class Dialog {
items: [ items: [
{ {
type: Button, type: Button,
text:'详细信息', text: BI.i18nText('Dec-Dcm_Connection_Detailed_Information'),
level: 'ignore', level: 'ignore',
handler() { handler() {
const isHide = this.getText() === '详细信息'; const isHide = !More.isVisible();
Popover.element.css({ Popover.element.css({
height: isHide ? '290' : '220', height: isHide ? '290' : '220',
}); });
More.setVisible(isHide); More.setVisible(isHide);
this.setText(isHide ? '收起信息' : '详细信息'); this.setText(isHide ? BI.i18nText('Dec-Dcm_Connection_Handup_Information') : BI.i18nText('Dec-Dcm_Connection_Detailed_Information'));
}, },
}, },
{ {
type: Button, type: Button,
text:'返回', text: BI.i18nText('Dec-Dcm_Back'),
level: 'ignore', level: 'ignore',
handler() { handler() {
that.close(id); that.close(id);
@ -177,7 +177,7 @@ class Dialog {
}, },
{ {
type: Button, type: Button,
text:'重新连接', text: BI.i18nText('Dec-Dcm_Connection_ReConnect'),
handler() { handler() {
that.close(id); that.close(id);
cb ? cb() : null; cb ? cb() : null;
@ -194,6 +194,8 @@ class Dialog {
cls: 'show-more', cls: 'show-more',
text: more, text: more,
invisible: true, invisible: true,
height: 73,
value: false,
ref(ref: any) { ref(ref: any) {
More = ref; More = ref;
}, },
@ -202,8 +204,7 @@ class Dialog {
}; };
BI.Popovers.create(id, { BI.Popovers.create(id, {
type: 'bi.popover', type: 'bi.popover',
cls:'popover-notitle', cls: 'popover-notitle bi-custom-show',
extraCls:'bi-custom-show',
size: 'normal', size: 'normal',
width: 450, width: 450,
height: 220, height: 220,
@ -223,8 +224,7 @@ class Dialog {
const id = BI.UUID(); const id = BI.UUID();
BI.Popovers.create(id, { BI.Popovers.create(id, {
type: 'bi.popover', type: 'bi.popover',
cls:'popover-notitle', cls: 'popover-notitle bi-custom-show',
extraCls:'bi-custom-show',
size: 'normal', size: 'normal',
width: 450, width: 450,
height: 220, height: 220,

2
tsconfig.json

@ -17,6 +17,8 @@
"@types": ["src/ui/index"], "@types": ["src/ui/index"],
"@shared/*": ["src/shared/*"], "@shared/*": ["src/shared/*"],
"@shared": ["src/shared"], "@shared": ["src/shared"],
"@private/*": ["private/*"],
"@private": ["private"],
} }
}, },
"include": [ "include": [

1
types/globals.d.ts vendored

@ -6,3 +6,4 @@ declare let BI: Obj;
declare const Fix: Obj; declare const Fix: Obj;
declare const Dec: Obj; declare const Dec: Obj;
declare const PluginHelper: Obj; declare const PluginHelper: Obj;
declare const Store: Obj;

1
webpack.config.js

@ -24,6 +24,7 @@ module.exports = env => {
"@ui": path.resolve("src/ui"), "@ui": path.resolve("src/ui"),
"@types": path.resolve("types"), "@types": path.resolve("types"),
"@shared": path.resolve("src/shared"), "@shared": path.resolve("src/shared"),
"@private": path.resolve("private"),
} }
}, },
plugins: [htmlWebpackPlugin, new MiniCssExtractPlugin({filename: `style.css`}), new CopyPlugin([ plugins: [htmlWebpackPlugin, new MiniCssExtractPlugin({filename: `style.css`}), new CopyPlugin([

Loading…
Cancel
Save