diff --git a/src/modules/app.ts b/src/modules/app.ts index 5155f5b..d909040 100644 --- a/src/modules/app.ts +++ b/src/modules/app.ts @@ -38,7 +38,6 @@ export class App extends BI.Widget { { el: { type: Title.xtype, - cls: 'bi-border-bottom', listeners: [{ eventName: 'EVENT_CLICK_SETTING', action:() => { @@ -82,10 +81,10 @@ export class App extends BI.Widget { } }, }, - left: 10, - top: 10, - right: 10, - bottom: 10, + left: 0, + top: 0, + right: 0, + bottom: 0, }], }, ], diff --git a/src/modules/components/file_chooser/file_chooser.ts b/src/modules/components/file_chooser/file_chooser.ts index 634cfdb..dc430d1 100644 --- a/src/modules/components/file_chooser/file_chooser.ts +++ b/src/modules/components/file_chooser/file_chooser.ts @@ -41,7 +41,7 @@ export class FileChooser extends BI.Widget { items: [ { type: BI.SignEditor.xtype, - cls: 'bi-border bi-focus-shadow', + cls: 'bi-border-bottom bi-focus-shadow', width, height: 22, watermark, diff --git a/src/modules/components/file_upload/file_upload.ts b/src/modules/components/file_upload/file_upload.ts index 01892c0..9a4f62f 100644 --- a/src/modules/components/file_upload/file_upload.ts +++ b/src/modules/components/file_upload/file_upload.ts @@ -59,7 +59,7 @@ export class FileUpload extends BI.Widget { items: [ { type: BI.SignEditor.xtype, - cls: 'bi-border bi-focus-shadow', + cls: 'bi-border-bottom bi-focus-shadow', width: 300, height: 22, watermark, @@ -144,9 +144,9 @@ export class FileUpload extends BI.Widget { this.fileModified = _ref; }, }] - + }], - + }, tgap: 14, lgap: 4, @@ -155,7 +155,7 @@ export class FileUpload extends BI.Widget { type: BI.IconButton.xtype, cls: "default-delete-font", handler: function () { - NProgress.set(0.0); + NProgress.set(0.0); self.xhr.abort(); self.store.setFileName(''); self.clearInfo(); diff --git a/src/modules/components/test_status/tip_icon/tip_fail.ts b/src/modules/components/test_status/tip_icon/tip_fail.ts index f8a77f3..a12f157 100644 --- a/src/modules/components/test_status/tip_icon/tip_fail.ts +++ b/src/modules/components/test_status/tip_icon/tip_fail.ts @@ -54,8 +54,7 @@ export class TipFail extends BI.Widget { }], }, { type: BI.Label.xtype, - height: 14, - bgap: 10, + _bgap: 10, text: tipText, ref:(_ref:Label)=>{ this.failText=_ref; @@ -63,12 +62,12 @@ export class TipFail extends BI.Widget { }, { type: BI.VerticalAdaptLayout.xtype, - hgap: 5, + hgap: 12, items: [ { type: BI.Button.xtype, text: BI.i18nText('Dec-Dcm_Connection_Detailed_Information'), - level: 'ignore', + clear: true, ref: (_ref: Button) => { this.detailButton = _ref; }, @@ -79,8 +78,8 @@ export class TipFail extends BI.Widget { }, { type: BI.Button.xtype, + light: true, text: BI.i18nText('Dec-Dcm_Back'), - level: 'ignore', handler: () => { this.fireEvent(TipFail.EVENT_CLOSE); }, @@ -89,6 +88,7 @@ export class TipFail extends BI.Widget { type: BI.Button.xtype, text: retryText, handler: () => { + this.store.setIsCollapse(false); this.fireEvent(TipFail.EVENT_RELOAD); }, }, diff --git a/src/modules/constants/constant.ts b/src/modules/constants/constant.ts index fa34f1f..7b698a0 100644 --- a/src/modules/constants/constant.ts +++ b/src/modules/constants/constant.ts @@ -703,7 +703,7 @@ export const DATA_BASE_TYPES = [ type: 'jdbc', hasSchema: true, kerberos: false, - }, + }, { text: 'TDSQL', databaseType: 'tdsql', @@ -837,7 +837,7 @@ export const DEFAULT_JDBC_POOL = { }; export const CONNECTION_LAYOUT = { - hgap: 5, + hgap: 10, vgap: 15, labelHeight: 24, }; @@ -878,4 +878,4 @@ export const YES_OR_NO = [ text: BI.i18nText('Dec-Basic_No'), value: 0, } -] \ No newline at end of file +] diff --git a/src/modules/core/checkIllegalStrings/checkIllegalStrings.ts b/src/modules/core/checkIllegalStrings/checkIllegalStrings.ts new file mode 100644 index 0000000..ddc4f99 --- /dev/null +++ b/src/modules/core/checkIllegalStrings/checkIllegalStrings.ts @@ -0,0 +1,52 @@ +/* + https://work.fineres.com/browse/REPORT-91724 用于参数统一校验 + */ +import { ILLEGAL_STRINGS } from "./constant"; +export type CheckResult = { + legal: boolean, + errorMsg: string, +} +export const CHECK_CORRECT: CheckResult = { + legal: true, + errorMsg: "", +}; + +/** + * 检测非法字符,返回错误提示 + * @param value 要校验的字符串 + */ +export function checkIllegalStrings(value: string): CheckResult { + // 后端传入的校验开关,如果没传,那也默认开启 + const enabled = Dec.system.enableParameterVerify ?? true; + let result = CHECK_CORRECT; + if (enabled) { + // 关键字不区分大小写 + ILLEGAL_STRINGS.every(s => { + const sIndex = value.toLowerCase().indexOf(s); + if (sIndex !== -1) { + result = { + legal: false, + errorMsg: `${BI.i18nText("Dec-Basic_Check_Illegal_Strings")}${value.substr(sIndex, s.length)}`, + }; + + return false; + } + + return true; + }); + + return result; + } + + return result; +} + +export function checkIllegalStringsInWidgetAndShowError(widget: any) { + const value = widget.getValue(); + const result = checkIllegalStrings(value); + if (!result.legal) { + widget.showError(result.errorMsg); + } + + return result.legal; +} diff --git a/src/modules/core/checkIllegalStrings/constant.ts b/src/modules/core/checkIllegalStrings/constant.ts new file mode 100644 index 0000000..351c185 --- /dev/null +++ b/src/modules/core/checkIllegalStrings/constant.ts @@ -0,0 +1,15 @@ +/** + * 参数检验的非法字符数组,由于不区分大小写,统一用小写 + */ +export const ILLEGAL_STRINGS = [ + "\"", + "<", + ">", + "&", + "/script", + "javascript:", + "onblur", + "getruntime", + "processbuilder", + "java.lang.processimpl", +]; diff --git a/src/modules/core/index.ts b/src/modules/core/index.ts new file mode 100644 index 0000000..efe056c --- /dev/null +++ b/src/modules/core/index.ts @@ -0,0 +1 @@ +export { checkIllegalStringsInWidgetAndShowError, checkIllegalStrings } from "./checkIllegalStrings/checkIllegalStrings" diff --git a/src/modules/pages/connection/connection.ts b/src/modules/pages/connection/connection.ts index 90f5ba1..881759d 100644 --- a/src/modules/pages/connection/connection.ts +++ b/src/modules/pages/connection/connection.ts @@ -143,7 +143,6 @@ export class Connection extends BI.Widget { }, }], }, - width: 90, }, ], }, diff --git a/src/modules/pages/connection/list/list_item/list_item.ts b/src/modules/pages/connection/list/list_item/list_item.ts index 60736d3..6723947 100644 --- a/src/modules/pages/connection/list/list_item/list_item.ts +++ b/src/modules/pages/connection/list/list_item/list_item.ts @@ -7,6 +7,7 @@ import { connectionCanEdit, getTextByDatabaseType, getChartLength } from '../../ import { testConnection } from '../../../maintain/forms/form.server'; import { DownListCombo, Label, SignEditor } from '@fui/core'; import { ApiFactory } from '../../../../crud/apiFactory'; +import { checkIllegalStrings } from "@core/index"; const api = new ApiFactory().create(); @@ -89,6 +90,17 @@ export class ListItem extends BI.BasicButton { return; } + const result = checkIllegalStrings(newName); + if (!result.legal) { + BI.Msg.toast(result.errorMsg, { + level: 'error', + }); + this.store.setIsEdit(false, name); + this.nameLabel.setText(name); + this.nameEditor.setValue(name); + + return; + } this.store.changeName(name, newName).then(re => { this.store.setIsEdit(false, name); if (re.errorCode) { @@ -210,8 +222,8 @@ export class ListItem extends BI.BasicButton { private testConnectionAction() { // 接口返回的内容是对称加密的,前端要先解密再用新加密传回去 - const connection = this.model.connections - .find(item => item.connectionName === this.options.name); + const connection = BI.cloneDeep(this.model.connections + .find(item => item.connectionName === this.options.name)); if (BI.isNull(connection)) return; diff --git a/src/modules/pages/database/database.ts b/src/modules/pages/database/database.ts index b955b64..f905765 100644 --- a/src/modules/pages/database/database.ts +++ b/src/modules/pages/database/database.ts @@ -147,20 +147,18 @@ export class Datebase extends BI.Widget { items: [ { el: { - type: BI.HTapeLayout.xtype, + type: BI.VerticalAdaptLayout.xtype, hgap: 20, invisible: true, items: [ { type: BI.Label.xtype, - width: 70, textAlign: 'left', text: BI.i18nText('Dec-Dcm_Connection_Type_Filter'), title: BI.i18nText('Dec-Dcm_Connection_Type_Filter'), }, { type: BI.MultiSelectItem.xtype, - width: 80, selected: this.model.isInternal, text: BI.i18nText('Dec-Dcm_Connection_Support_Inner'), title: BI.i18nText('Dec-Dcm_Connection_Support_Inner'), @@ -173,7 +171,6 @@ export class Datebase extends BI.Widget { }, { type: BI.MultiSelectItem.xtype, - width: 80, selected: this.model.isPlugin, text: BI.i18nText('Dec-Dcm_Connection_Support_Plugin'), title: BI.i18nText('Dec-Dcm_Connection_Support_Plugin'), diff --git a/src/modules/pages/maintain/forms/components/form.jdbc.ts b/src/modules/pages/maintain/forms/components/form.jdbc.ts index 7db6718..28aa75f 100644 --- a/src/modules/pages/maintain/forms/components/form.jdbc.ts +++ b/src/modules/pages/maintain/forms/components/form.jdbc.ts @@ -423,7 +423,7 @@ export class FormJdbc extends BI.Widget { { type: BI.Editor.xtype, $value: 'password', - cls: 'bi-border bi-border-radius', + cls: 'bi-border-bottom', width: EDITOR_WIDTH, height: EDITOR_HEIGHT, allowBlank: true, @@ -573,6 +573,7 @@ export class FormJdbc extends BI.Widget { forms: [ { type: BI.VerticalLayout.xtype, + height: 55, items: [ { type: BI.FloatLeftLayout.xtype, @@ -595,9 +596,9 @@ export class FormJdbc extends BI.Widget { }, { type: BI.TextValueCombo.xtype, + _tgap: 15, $value: 'schema', width: EDITOR_WIDTH, - tgap: 15, disabled: true, value: schema, items: schema ? [{ text: schema, value: schema }] : [], @@ -715,7 +716,7 @@ export class FormJdbc extends BI.Widget { { type: BI.Editor.xtype, $value: 'temporary-file-pieces-limit', - cls: 'bi-border bi-border-radius', + cls: 'bi-border-bottom', width: EDITOR_WIDTH, height: EDITOR_HEIGHT, allowBlank: true, @@ -735,7 +736,7 @@ export class FormJdbc extends BI.Widget { { type: BI.Editor.xtype, $value: 'temporary-file-size-limit', - cls: 'bi-border bi-border-radius', + cls: 'bi-border-bottom', width: EDITOR_WIDTH, height: EDITOR_HEIGHT, allowBlank: true, @@ -801,7 +802,7 @@ export class FormJdbc extends BI.Widget { { type: BI.Editor.xtype, $value: 'hdfs-connection-address', - cls: 'bi-border bi-border-radius', + cls: 'bi-border-bottom', width: EDITOR_WIDTH, height: EDITOR_HEIGHT, allowBlank: true, diff --git a/src/modules/pages/maintain/forms/form.ts b/src/modules/pages/maintain/forms/form.ts index 609b880..4039f81 100644 --- a/src/modules/pages/maintain/forms/form.ts +++ b/src/modules/pages/maintain/forms/form.ts @@ -8,6 +8,7 @@ import { ConnectionJDBC, Connection, ResultType } from 'src/modules/crud/crud.ty import { DEFAULT_JNDI_DATA, DEFAULT_JDBC_POOL, DATEBASE_FILTER_TYPE } from '@constants/constant'; import { getJdbcDatabaseType, getChartLength } from '../../../app.service'; import { NAME_MAX_LENGTH } from '../../../app.constant'; +import { checkIllegalStrings } from "@core/index"; @shortcut() @store(MaintainFormModel) @@ -209,6 +210,12 @@ export class MaintainForm extends BI.Widget { if (this.form.validation && !this.form.validation()) { return false; } + const result = checkIllegalStrings(value.connectionName); + if (!result.legal) { + this.setFromError(result.errorMsg); + + return false; + } return true; } diff --git a/src/modules/pages/maintain/maintain.ts b/src/modules/pages/maintain/maintain.ts index 28b47b9..1f6f221 100644 --- a/src/modules/pages/maintain/maintain.ts +++ b/src/modules/pages/maintain/maintain.ts @@ -28,7 +28,7 @@ export class Maintain extends BI.Widget { return { type: BI.VTapeLayout.xtype, - hgap: 5, + hgap: 16, items: [ { type: BI.VerticalAdaptLayout.xtype, diff --git a/src/modules/pages/setting/setting.ts b/src/modules/pages/setting/setting.ts index eaddc96..29d3166 100644 --- a/src/modules/pages/setting/setting.ts +++ b/src/modules/pages/setting/setting.ts @@ -44,11 +44,11 @@ export class TimeOutSetting extends BI.Widget { }, { type: 'bi.vertical', cls: 'bi-card', - hgap: 10, vgap: 10, items: [ { type: 'bi.vertical_adapt', + hgap: 16, cls: 'bi-border-bottom', height: 32, items: [{ @@ -61,6 +61,7 @@ export class TimeOutSetting extends BI.Widget { }, { type: 'bi.vertical_adapt', + hgap: 16, items: [{ type: 'dec.label.editor.item', text: BI.i18nText('Dec-Over_Time'), diff --git a/src/modules/title/title.ts b/src/modules/title/title.ts index 687e2e8..28858fb 100644 --- a/src/modules/title/title.ts +++ b/src/modules/title/title.ts @@ -11,7 +11,7 @@ export class Title extends BI.Widget { static xtype = 'dec.dcm.title'; props = { - baseCls: 'bi-card', + baseCls: '', } tab: Tab; linearSegment: LinearSegment; diff --git a/src/modules/title/title_database/title_datebase.ts b/src/modules/title/title_database/title_datebase.ts index 1441d75..6541237 100644 --- a/src/modules/title/title_database/title_datebase.ts +++ b/src/modules/title/title_database/title_datebase.ts @@ -25,13 +25,13 @@ export class TitleDatabase extends BI.Widget { items: [{ type: BI.VerticalAdaptLayout.xtype, height: 40, - rgap: 5, + rgap: 16, items: [ { type: BI.Button.xtype, $value: 'title-database-cancel', text: BI.i18nText('BI-Basic_Cancel'), - level: 'ignore', + light: true, handler: () => { this.store.setPageIndex(PAGE_INDEX.CONNECTION); }, @@ -49,6 +49,7 @@ export class TitleDatabase extends BI.Widget { }, }, ], + _rgap: -16, }], }; } diff --git a/src/modules/title/title_maintain/title_maintain.ts b/src/modules/title/title_maintain/title_maintain.ts index 18fdc2c..b121cf1 100644 --- a/src/modules/title/title_maintain/title_maintain.ts +++ b/src/modules/title/title_maintain/title_maintain.ts @@ -15,13 +15,13 @@ export class TitleMaintain extends BI.Widget { items: [{ type: BI.VerticalAdaptLayout.xtype, height: 40, - rgap: 5, items: [ { type: BI.Button.xtype, $value: 'title-maintain-cancel', text: BI.i18nText('BI-Basic_Cancel'), - level: 'ignore', + clear: true, + _rgap: 16, handler: () => { this.store.setIsCopy(false); this.store.setPageIndex(PAGE_INDEX.CONNECTION); @@ -30,15 +30,17 @@ export class TitleMaintain extends BI.Widget { }, { type: BI.Button.xtype, + _rgap: 16, $value: 'title-maintain-connection-test', text: BI.i18nText('Dec-Dcm_Connection_Test'), - level: 'ignore', + light: true, handler: () => { this.store.setTestEvent(); }, }, { type: BI.Button.xtype, + _rgap: 16, $value: 'title-maintain-save', text: BI.i18nText('BI-Basic_Save'), handler: () => {