From 0d79e6cd995831c265a9856c66b39353f7ae8174 Mon Sep 17 00:00:00 2001 From: ibuler Date: Mon, 25 Sep 2023 10:08:57 +0800 Subject: [PATCH 01/15] =?UTF-8?q?perf:=20=E7=A4=BE=E5=8C=BA=E7=89=88=20app?= =?UTF-8?q?let=20=E6=8B=89=E8=B5=B7?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/app/elements/connect/connect.component.ts | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/src/app/elements/connect/connect.component.ts b/src/app/elements/connect/connect.component.ts index 3726c573..5fa4f12d 100644 --- a/src/app/elements/connect/connect.component.ts +++ b/src/app/elements/connect/connect.component.ts @@ -207,11 +207,16 @@ export class ElementConnectComponent implements OnInit, OnDestroy { return this.createWebView(asset, connectInfo, connToken); } + let appletConnectMethod = connectOption['appletConnectMethod']; + if (!this._settingSvc.hasXPack()) { + appletConnectMethod = 'web'; + } + if (connectInfo.downloadRDP) { return this._http.downloadRDPFile(connToken, this._settingSvc.setting); } else if (connectMethod.type === 'native') { this.callLocalClient(connToken).then(); - } else if (connectMethod.type === 'applet' && connectOption['appletConnectMethod'] !== 'web') { + } else if (connectMethod.type === 'applet' && appletConnectMethod === 'client') { this.callLocalClient(connToken).then(); } else { this.createWebView(asset, connectInfo, connToken); From 939d985ae4e56d6982bee4321b7703a2d61581bf Mon Sep 17 00:00:00 2001 From: ibuler Date: Wed, 27 Sep 2023 11:28:23 +0800 Subject: [PATCH 02/15] =?UTF-8?q?fix:=20=E4=BF=AE=E5=A4=8D=20appletConnect?= =?UTF-8?q?Option?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../connect-dialog/connect-method/connect-method.component.ts | 2 +- src/app/elements/connect/connect.component.ts | 3 +-- 2 files changed, 2 insertions(+), 3 deletions(-) diff --git a/src/app/elements/connect/connect-dialog/connect-method/connect-method.component.ts b/src/app/elements/connect/connect-dialog/connect-method/connect-method.component.ts index ba57021b..e1363683 100644 --- a/src/app/elements/connect/connect-dialog/connect-method/connect-method.component.ts +++ b/src/app/elements/connect/connect-dialog/connect-method/connect-method.component.ts @@ -22,7 +22,7 @@ export class ElementConnectMethodComponent implements OnInit { } get isAppletClientMethod() { - return this.connectOption['appletConnectMethod'] === 'client'; + return this.connectOption && this.connectOption['appletConnectMethod'] === 'client'; } private _protocol: Protocol; diff --git a/src/app/elements/connect/connect.component.ts b/src/app/elements/connect/connect.component.ts index 5fa4f12d..c6267661 100644 --- a/src/app/elements/connect/connect.component.ts +++ b/src/app/elements/connect/connect.component.ts @@ -206,8 +206,7 @@ export class ElementConnectComponent implements OnInit, OnDestroy { if (connectMethod.value.endsWith('_guide')) { return this.createWebView(asset, connectInfo, connToken); } - - let appletConnectMethod = connectOption['appletConnectMethod']; + let appletConnectMethod = connectOption ? connectOption['appletConnectMethod'] : 'web'; if (!this._settingSvc.hasXPack()) { appletConnectMethod = 'web'; } From 5ce0b18103389cb806e54f291a3b12bd184336dc Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E2=80=9Chuailei000=E2=80=9D?= <2280131253@qq.com> Date: Tue, 26 Sep 2023 17:45:24 +0800 Subject: [PATCH 03/15] =?UTF-8?q?perf:=20=E4=BC=98=E5=8C=96=E5=88=86?= =?UTF-8?q?=E5=B1=8F=E8=BF=9E=E6=8E=A5=E7=AA=97=E5=8F=A3=E6=98=BE=E7=A4=BA?= =?UTF-8?q?=E9=A1=BA=E5=BA=8F?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../elements/asset-tree/asset-tree.component.ts | 2 +- .../content-window/content-window.component.css | 3 +++ .../content-window/content-window.component.html | 16 +++------------- .../content-window/content-window.component.ts | 10 ++-------- 4 files changed, 9 insertions(+), 22 deletions(-) diff --git a/src/app/elements/asset-tree/asset-tree.component.ts b/src/app/elements/asset-tree/asset-tree.component.ts index 48643a74..39fb7f9a 100644 --- a/src/app/elements/asset-tree/asset-tree.component.ts +++ b/src/app/elements/asset-tree/asset-tree.component.ts @@ -530,7 +530,7 @@ export class ElementAssetTreeComponent implements OnInit { * @param splitConnect 是否分屏连接 */ async onMenuConnect(splitConnect = false) { - if (splitConnect && this._viewSrv.currentView.subViews.length >= 3) { + if (splitConnect && this._viewSrv.currentView.subViews.length >= 4) { const msg = await this._i18n.instant('Split connect number'); this.snackBar.open(msg, '', { verticalPosition: 'top', diff --git a/src/app/elements/content/content-window/content-window.component.css b/src/app/elements/content/content-window/content-window.component.css index 8c7f5eb3..85c46d47 100644 --- a/src/app/elements/content/content-window/content-window.component.css +++ b/src/app/elements/content/content-window/content-window.component.css @@ -28,6 +28,9 @@ div, elements-term, elements-guacamole { .many-view { flex: 0 0 50%; +} + +.height-view { height: 50%; } diff --git a/src/app/elements/content/content-window/content-window.component.html b/src/app/elements/content/content-window/content-window.component.html index eacb67c3..99458437 100644 --- a/src/app/elements/content/content-window/content-window.component.html +++ b/src/app/elements/content/content-window/content-window.component.html @@ -6,25 +6,15 @@ >
- -
-
diff --git a/src/app/elements/content/content-window/content-window.component.ts b/src/app/elements/content/content-window/content-window.component.ts index ecad9821..3ec7acec 100644 --- a/src/app/elements/content/content-window/content-window.component.ts +++ b/src/app/elements/content/content-window/content-window.component.ts @@ -12,7 +12,6 @@ import {ActivatedRoute} from '@angular/router'; export class ElementContentWindowComponent implements OnInit, DoCheck { @Input() view: View; @ViewChild('contentWindow', {static: true}) windowRef: ElementRef; - loading = true; public id: string; private iterableDiffer: any; @@ -33,24 +32,19 @@ export class ElementContentWindowComponent implements OnInit, DoCheck { this.id = 'window-' + Math.random().toString(36).substr(2); this.createWaterMark(); this.view.smartEndpoint = await this._appSvc.getSmartEndpoint(this.view); - setTimeout(() => { - this.loading = false; - }, 1000); + this.subViews.push(this.view); } async ngDoCheck() { const iterableChanges = this.iterableDiffer.diff(this.view.subViews); - if (iterableChanges) { + if (iterableChanges && iterableChanges.collection.length > 1) { // subViews 数组发生变化 iterableChanges.forEachAddedItem(async (item) => { const smartEndpoint = await this._appSvc.getSmartEndpoint(item.item).then(); const index = this.view.subViews.findIndex(i => i.connectToken.id === item.item.connectToken.id); this.view.subViews[index].smartEndpoint = smartEndpoint; }); - iterableChanges.forEachRemovedItem((item) => { - console.log('Removed item:', item); - }); } } From 78d6531b75ce0b28f77efe14e122c92359c692a1 Mon Sep 17 00:00:00 2001 From: halo Date: Sun, 8 Oct 2023 18:19:59 +0800 Subject: [PATCH 04/15] =?UTF-8?q?feat:=20=E6=96=B0=E5=A2=9Edb2=E5=9B=BE?= =?UTF-8?q?=E6=A0=87?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/sass/icons/db2.png | Bin 0 -> 199 bytes src/sass/ztree_icon.scss | 4 ++++ 2 files changed, 4 insertions(+) create mode 100644 src/sass/icons/db2.png diff --git a/src/sass/icons/db2.png b/src/sass/icons/db2.png new file mode 100644 index 0000000000000000000000000000000000000000..216dc5659ef3d4af857aa83563be651b890bedce GIT binary patch literal 199 zcmeAS@N?(olHy`uVBq!ia0vp^JRr=$1|-8uW1a&k&H|6fVg?3oVGw3ym^DWNC|K#~ z;uumfXX`~nu4V_3mc;W91dFEKs9;$ysHo{G&?2(ag)d>Iot)NP@wgj@+^!$u;n}S7 z+5X-p*N^23UAnW6O@F~waJa|tvE?qtl83UhOZMLrIw0L&^8JY9Wif&0)u+V$UTkk* u44rjniA;Fo-ux9GCx(~2Vy-h Date: Wed, 11 Oct 2023 19:58:18 +0800 Subject: [PATCH 05/15] =?UTF-8?q?perf:=20=E4=BC=98=E5=8C=96=E7=99=BB?= =?UTF-8?q?=E5=BD=95=E6=A3=80=E6=B5=8B?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/app/services/app.ts | 20 ++++++++++++++++++++ 1 file changed, 20 insertions(+) diff --git a/src/app/services/app.ts b/src/app/services/app.ts index 8b855482..50f26244 100644 --- a/src/app/services/app.ts +++ b/src/app/services/app.ts @@ -10,6 +10,7 @@ import {Account, Asset, AuthInfo, ConnectData, Endpoint, Organization, View} fro import * as CryptoJS from 'crypto-js'; import {getCookie, setCookie} from '@app/utils/common'; import {OrganizationService} from './organization'; +import {I18nService} from '@app/services/i18n'; declare function unescape(s: string): string; @@ -34,6 +35,7 @@ export class AppService { constructor(private _http: HttpService, private _router: Router, private _cookie: CookieService, + private _i18n: I18nService, private _logger: LogService, private _settingSvc: SettingService, private _localStorage: LocalStorageService, @@ -63,6 +65,23 @@ export class AppService { } } + intervalCheckLogin(ttl: number = 1000 * 60, clear: boolean = false) { + const interval = setInterval(() => { + this._http.getUserProfile().subscribe( + (res) => { + if (clear) { + clearInterval(interval); + this.intervalCheckLogin(); + } + }, + (err) => { + clearInterval(interval); + alert(this._i18n.instant('LoginExpireMsg')); + this.intervalCheckLogin(1000 * 2, true); + }); + }, ttl); + } + checkLogin() { this._logger.debug('Check user auth'); if (!DataStore.Path) { @@ -98,6 +117,7 @@ export class AppService { Object.assign(User, user); User.logined = true; this._localStorage.set('user', user.id); + this.intervalCheckLogin(); }, err => { // this._logger.error(err); From 6ef93ce5c336ff5f902e80581078b12cafe86c11 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E2=80=9Chuailei000=E2=80=9D?= <2280131253@qq.com> Date: Tue, 10 Oct 2023 16:55:09 +0800 Subject: [PATCH 06/15] =?UTF-8?q?perf:=20=E5=BF=AB=E6=8D=B7=E5=91=BD?= =?UTF-8?q?=E4=BB=A4=E5=A2=9E=E5=8A=A0=E5=9B=BE=E6=A0=87=E6=98=BE=E7=A4=BA?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../command-dialog.component.html | 6 ++++++ .../command-dialog/command-dialog.component.ts | 10 ++++++++-- src/app/elements/content/content.component.html | 3 ++- src/app/elements/content/content.component.scss | 16 +++++++++++++++- src/assets/i18n/en.json | 1 + src/assets/i18n/ja.json | 1 + src/assets/i18n/zh.json | 1 + src/sass/icons/shell.png | Bin 0 -> 219 bytes src/sass/ztree_icon.scss | 4 ++++ 9 files changed, 38 insertions(+), 4 deletions(-) create mode 100644 src/sass/icons/shell.png diff --git a/src/app/elements/content/command-dialog/command-dialog.component.html b/src/app/elements/content/command-dialog/command-dialog.component.html index 2f6a4165..ffbcdcef 100644 --- a/src/app/elements/content/command-dialog/command-dialog.component.html +++ b/src/app/elements/content/command-dialog/command-dialog.component.html @@ -6,6 +6,12 @@

+ + + {{type.label}} + +

diff --git a/src/app/elements/content/command-dialog/command-dialog.component.ts b/src/app/elements/content/command-dialog/command-dialog.component.ts index a8d28ee0..2f2ecfc7 100644 --- a/src/app/elements/content/command-dialog/command-dialog.component.ts +++ b/src/app/elements/content/command-dialog/command-dialog.component.ts @@ -9,6 +9,13 @@ import {MAT_DIALOG_DATA} from '@angular/material/dialog'; }) export class ElementCommandDialogComponent implements OnInit { public name = ''; + public module = 'shell'; + public commandModules = [ + { + label: 'Shell', + value: 'shell' + } + ]; constructor(public dialogRef: MatDialogRef, @Inject(MAT_DIALOG_DATA) public data: any, @@ -20,12 +27,11 @@ export class ElementCommandDialogComponent implements OnInit { ngOnInit() {} async onSubmit() { - console.log('this.name: ', this.name); if (!this.name) { return; } const data = { name: this.name, args: this.data.command, - module: 'shell', + module: this.module, }; this._http.addQuickCommand(data).subscribe( async () => { diff --git a/src/app/elements/content/content.component.html b/src/app/elements/content/content.component.html index 1ac0eff0..e66e3e6d 100644 --- a/src/app/elements/content/content.component.html +++ b/src/app/elements/content/content.component.html @@ -77,7 +77,8 @@ >
  • - {{ command.name }} + + {{ command.name }}
a$Z*#2H$Gr`;rmUmdgHR%{YfVnm^LSVQ`a~B zpL*$x%7W~*bCnrlnb%x9-+5k|*6Ppq%oY9j^e*c$)^6#$R<8bsckAB`R@r;4M13dF OVGN$GelF{r5}E*>zD*AR literal 0 HcmV?d00001 diff --git a/src/sass/ztree_icon.scss b/src/sass/ztree_icon.scss index e3eac7ed..5961fd31 100644 --- a/src/sass/ztree_icon.scss +++ b/src/sass/ztree_icon.scss @@ -115,6 +115,10 @@ &.ico_loading { background: url(./icons/loading.gif) no-repeat scroll 0 0 transparent; } + + &.shell_ico_docu { + background: url('./icons/shell.png') no-repeat center left transparent; + } &.oracle_ico_docu::before { content: "\f1c0"; From 9b02544c821a1001892c941701f69c6041fa4577 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E2=80=9Chuailei000=E2=80=9D?= <2280131253@qq.com> Date: Thu, 12 Oct 2023 17:12:54 +0800 Subject: [PATCH 07/15] =?UTF-8?q?perf:=20=E4=BC=98=E5=8C=96=E5=B8=83?= =?UTF-8?q?=E5=B1=80=E6=8B=96=E6=8B=BD=E5=9B=BE=E6=A0=87=E9=81=AE=E8=B5=84?= =?UTF-8?q?=E4=BA=A7=E6=A0=91=E6=BB=9A=E5=8A=A8=E6=9D=A1=EF=BC=8C=E6=BB=9A?= =?UTF-8?q?=E5=8A=A8=E6=9D=A1=E4=B8=8D=E8=83=BD=E9=BC=A0=E6=A0=87=E6=8B=96?= =?UTF-8?q?=E6=8B=BD=E6=BB=9A=E5=8A=A8=E9=97=AE=E9=A2=98?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/app/pages/main/main.component.css | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/src/app/pages/main/main.component.css b/src/app/pages/main/main.component.css index 6e40fe42..aad4cc19 100644 --- a/src/app/pages/main/main.component.css +++ b/src/app/pages/main/main.component.css @@ -64,8 +64,9 @@ as-split ::ng-deep .as-split-gutter.as-dragged .as-split-gutter-icon, .ex-b as-s } as-split.as-horizontal ::ng-deep .as-split-gutter-icon { - width: 8px !important; - left: -6px; + width: 5px !important; + left: -1px; + z-index: 1; } as-split.as-vertical ::ng-deep .as-split-gutter-icon { From 5254f1a061d08cbcf4675aca8ed10eb8ce097ef8 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E2=80=9Chuailei000=E2=80=9D?= <2280131253@qq.com> Date: Fri, 13 Oct 2023 14:27:40 +0800 Subject: [PATCH 08/15] =?UTF-8?q?perf:=20=E5=BF=AB=E6=8D=B7=E5=91=BD?= =?UTF-8?q?=E4=BB=A4=E8=BF=87=E6=BB=A4?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/app/elements/content/content.component.ts | 10 ++++++++-- 1 file changed, 8 insertions(+), 2 deletions(-) diff --git a/src/app/elements/content/content.component.ts b/src/app/elements/content/content.component.ts index 849e953b..e841fde3 100644 --- a/src/app/elements/content/content.component.ts +++ b/src/app/elements/content/content.component.ts @@ -64,7 +64,7 @@ export class ElementContentComponent implements OnInit { async ngOnInit() { this.viewList = this.viewSrv.viewList; this.viewIds = this.viewSrv.viewIds; - this.quickCommands = await this._http.getQuickCommand(); + this.quickCommands = await this.quickCommandsFilter(); document.addEventListener('click', this.hideRMenu.bind(this), false); } @@ -277,11 +277,17 @@ export class ElementContentComponent implements OnInit { moveItemInArray(this.viewIds, event.previousIndex, event.currentIndex); } + async quickCommandsFilter() { + let list = await this._http.getQuickCommand(); + list = list.filter(i => i.module.value === 'shell'); + return list; + } + async switchCommand() { this.batchCommand = ''; this.isShowInputCommand = !this.isShowInputCommand; if (!this.isShowInputCommand) { - this.quickCommands = await this._http.getQuickCommand(); + this.quickCommands = await this.quickCommandsFilter(); } } From b1dc0d44b034229a2860bbb244c8378d119add8b Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E2=80=9Chuailei000=E2=80=9D?= <2280131253@qq.com> Date: Fri, 13 Oct 2023 14:47:41 +0800 Subject: [PATCH 09/15] =?UTF-8?q?perf:=20=E4=BC=98=E5=8C=96=E9=87=8D?= =?UTF-8?q?=E5=A4=8D=E5=8F=91=E9=80=81=E5=BF=AB=E6=8D=B7=E5=91=BD=E4=BB=A4?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/app/elements/content/content.component.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/app/elements/content/content.component.ts b/src/app/elements/content/content.component.ts index e841fde3..b1bb1087 100644 --- a/src/app/elements/content/content.component.ts +++ b/src/app/elements/content/content.component.ts @@ -141,7 +141,7 @@ export class ElementContentComponent implements OnInit { const d = {'data': cmd}; this.viewList[i].termComp.sendCommand(d); const subViews = this.viewList[i].subViews; - if (subViews.length > 0) { + if (subViews.length > 1) { for (let j = 0; j < subViews.length; j++) { if (subViews[j].protocol !== 'ssh' || subViews[j].connected !== true) { continue; From 76f3ee8adc41eb84adca7127c74d46354ca47d06 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E2=80=9Chuailei000=E2=80=9D?= <2280131253@qq.com> Date: Fri, 13 Oct 2023 16:54:28 +0800 Subject: [PATCH 10/15] =?UTF-8?q?perf:=20=E4=BC=98=E5=8C=96=E8=B5=84?= =?UTF-8?q?=E4=BA=A7=E8=BF=9E=E6=8E=A5=E6=97=B6=E5=8F=AA=E6=9C=89=E4=B8=80?= =?UTF-8?q?=E4=B8=AA=E4=BC=9A=E8=AF=9D=E4=B8=8D=E6=98=BE=E7=A4=BAsub=20hea?= =?UTF-8?q?d?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../content/content-window/content-window.component.html | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/app/elements/content/content-window/content-window.component.html b/src/app/elements/content/content-window/content-window.component.html index 99458437..a73eee2a 100644 --- a/src/app/elements/content/content-window/content-window.component.html +++ b/src/app/elements/content/content-window/content-window.component.html @@ -13,7 +13,7 @@
From 14a1bd3751384eff438e2b1623f48abd0155871f Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E2=80=9Chuailei000=E2=80=9D?= <2280131253@qq.com> Date: Fri, 13 Oct 2023 10:19:59 +0800 Subject: [PATCH 11/15] =?UTF-8?q?perf:=20=E4=BC=98=E5=8C=96tab=E6=8B=96?= =?UTF-8?q?=E4=BD=8F=E5=AF=BC=E8=87=B4=E4=BC=9A=E8=AF=9D=E9=87=8D=E6=96=B0?= =?UTF-8?q?=E5=8A=A0=E8=BD=BD=E9=97=AE=E9=A2=98?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/app/elements/nav/nav.component.ts | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-) diff --git a/src/app/elements/nav/nav.component.ts b/src/app/elements/nav/nav.component.ts index 6d4a1d6e..5d64def3 100644 --- a/src/app/elements/nav/nav.component.ts +++ b/src/app/elements/nav/nav.component.ts @@ -32,9 +32,12 @@ export class ElementNavComponent implements OnInit { } get viewListSorted() { - return this.viewList.sort((a, b) => { - return this.viewIds.indexOf(a.id) - this.viewIds.indexOf(b.id); + const viewList = []; + this.viewIds.forEach((id, index) => { + const view = this.viewList.find(i => i.id === id); + viewList[index] = view; }); + return viewList; } ngOnInit() { From dbe3310eae0d0e8cffbf25d7e434282d054a12e8 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E2=80=9Chuailei000=E2=80=9D?= <2280131253@qq.com> Date: Mon, 16 Oct 2023 18:13:10 +0800 Subject: [PATCH 12/15] =?UTF-8?q?perf:=20=E5=90=8C=E5=90=8D=E8=B4=A6?= =?UTF-8?q?=E5=8F=B7=E3=80=81=E6=89=8B=E5=8A=A8=E8=BE=93=E5=85=A5=E5=8F=AF?= =?UTF-8?q?=E4=BB=A5=E4=B8=8B=E8=BD=BDRDP=E6=96=87=E4=BB=B6?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../connect/connect-dialog/connect-dialog.component.html | 1 + .../connect-method/connect-method.component.ts | 9 +++++++-- 2 files changed, 8 insertions(+), 2 deletions(-) diff --git a/src/app/elements/connect/connect-dialog/connect-dialog.component.html b/src/app/elements/connect/connect-dialog/connect-dialog.component.html index 72e9ce42..8a681018 100644 --- a/src/app/elements/connect/connect-dialog/connect-dialog.component.html +++ b/src/app/elements/connect/connect-dialog/connect-dialog.component.html @@ -32,6 +32,7 @@

{{"Connect" | translate}} - {{ asset.name | truncatechars:30 }}

(); @Output() onDownloadRDPFile = new EventEmitter(); + @Input() manualAuthInfo: AuthInfo; @Input() connectOption: Object; @Input() account: Account; public connectMethods = []; @@ -95,7 +96,11 @@ export class ElementConnectMethodComponent implements OnInit { return false; } if (!this.account.has_secret) { - return false; + const aliases = ['@USER', '@INPUT']; + // 同名账号、手动输入可以下载RDP文件 + if (!aliases.includes(this.account.alias) || (!this.manualAuthInfo.secret || !this.manualAuthInfo.username)) { + return false; + } } if (method.component === 'razor') { return true; From 4bc256181a649152b3fb966d4d8f6dc3c43d4d27 Mon Sep 17 00:00:00 2001 From: ibuler Date: Mon, 16 Oct 2023 11:27:42 +0800 Subject: [PATCH 13/15] =?UTF-8?q?perf:=20=E4=BC=98=E5=8C=96=20token=20?= =?UTF-8?q?=E7=9A=84=E5=A4=8D=E7=94=A8=E6=97=B6=EF=BC=8C=E5=B7=B2=E8=BF=87?= =?UTF-8?q?=E6=9C=9F=E7=9A=84=E6=8F=90=E7=A4=BA?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/app/app.module.ts | 5 +++-- .../elements/content/content-window/guide/guide.component.ts | 5 +++++ src/assets/i18n/en.json | 3 ++- src/assets/i18n/ja.json | 3 ++- src/assets/i18n/zh.json | 3 ++- 5 files changed, 14 insertions(+), 5 deletions(-) diff --git a/src/app/app.module.ts b/src/app/app.module.ts index 3d228056..5bdef8c3 100644 --- a/src/app/app.module.ts +++ b/src/app/app.module.ts @@ -10,7 +10,7 @@ import {MAT_LABEL_GLOBAL_OPTIONS} from '@angular/material'; import {HttpClient, HttpClientModule} from '@angular/common/http'; import {TranslateLoader, TranslateModule} from '@ngx-translate/core'; import {TranslateHttpLoader} from '@ngx-translate/http-loader'; -import { DragDropModule } from '@angular/cdk/drag-drop'; +import {DragDropModule} from '@angular/cdk/drag-drop'; // service import {AllServices} from '@app/services'; @@ -35,9 +35,10 @@ import {ElementDialogAlertComponent} from '@app/services/dialog/dialog.service'; import {ClipboardService} from 'ngx-clipboard'; import {ElementsReplayMp4Component} from './elements/replay/mp4/mp4.component'; import {ElementCommandDialogComponent} from '@app/elements/content/command-dialog/command-dialog.component'; +import {version} from '../environments/environment'; export function HttpLoaderFactory(http: HttpClient) { - return new TranslateHttpLoader(http, '/luna/assets/i18n/'); + return new TranslateHttpLoader(http, '/luna/assets/i18n/', '.json?v=' + version); } @NgModule({ diff --git a/src/app/elements/content/content-window/guide/guide.component.ts b/src/app/elements/content/content-window/guide/guide.component.ts index 178c0208..877ef0f8 100644 --- a/src/app/elements/content/content-window/guide/guide.component.ts +++ b/src/app/elements/content/content-window/guide/guide.component.ts @@ -44,6 +44,11 @@ export class ElementConnectorGuideComponent implements OnInit { }, error => { this.token.is_reusable = false; + if (error.status === 404) { + this._toastr.error(this._i18n.instant('Token expired')); + return; + } + this._toastr.error(error.error.msg || error.error.is_reusable || error.message); } ); diff --git a/src/assets/i18n/en.json b/src/assets/i18n/en.json index 5c41a08a..427303d9 100644 --- a/src/assets/i18n/en.json +++ b/src/assets/i18n/en.json @@ -187,5 +187,6 @@ "Expand all": "Expand all", "Collapse": "Collapse", "Password is token password on the table": "Password is token password on the table", - "Password is your password login to system": "Password is your password login to system" + "Password is your password login to system": "Password is your password login to system", + "Token expired": "Token has expired" } diff --git a/src/assets/i18n/ja.json b/src/assets/i18n/ja.json index 7d051196..74fc342c 100644 --- a/src/assets/i18n/ja.json +++ b/src/assets/i18n/ja.json @@ -191,5 +191,6 @@ "Fold all": "すべて折りたたみ", "Password is token password on the table": "パスワードは、テーブルのトークンパスワードです", "Password is your password login to system": "パスワードは、システムにログインするためのパスワードです", - "Current online": "現在オンライン" + "Current online": "現在オンライン", + "Token expired": "トークンの有効期限が切れました" } diff --git a/src/assets/i18n/zh.json b/src/assets/i18n/zh.json index d5cd1af2..fef2f21c 100644 --- a/src/assets/i18n/zh.json +++ b/src/assets/i18n/zh.json @@ -193,6 +193,7 @@ "Fold all": "折叠全部", "Password is token password on the table": "密码是表格中的 Token 密码", "Password is your password login to system": "密码是你登录系统的密码", - "Current online": "当前在线" + "Current online": "当前在线", + "Token expired": "Token 已过期, 请重新连接" } From fe9e876c37bf1a3fe81cc77b463a8117d77240a1 Mon Sep 17 00:00:00 2001 From: ibuler Date: Wed, 18 Oct 2023 15:16:11 +0800 Subject: [PATCH 14/15] =?UTF-8?q?perf:=20=E4=BC=98=E5=8C=96=E7=99=BB?= =?UTF-8?q?=E5=BD=95=E6=A3=80=E6=9F=A5?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/app/services/app.ts | 9 +++++++-- 1 file changed, 7 insertions(+), 2 deletions(-) diff --git a/src/app/services/app.ts b/src/app/services/app.ts index 50f26244..4d7c9d92 100644 --- a/src/app/services/app.ts +++ b/src/app/services/app.ts @@ -67,8 +67,10 @@ export class AppService { intervalCheckLogin(ttl: number = 1000 * 60, clear: boolean = false) { const interval = setInterval(() => { + User.logined = false; this._http.getUserProfile().subscribe( (res) => { + User.logined = true; if (clear) { clearInterval(interval); this.intervalCheckLogin(); @@ -76,8 +78,11 @@ export class AppService { }, (err) => { clearInterval(interval); - alert(this._i18n.instant('LoginExpireMsg')); - this.intervalCheckLogin(1000 * 2, true); + const login = confirm(this._i18n.instant('LoginExpireMsg')); + if (login) { + window.open('/core/auth/login/?next=/luna/'); + } + this.intervalCheckLogin(1000, true); }); }, ttl); } From 601e4551755f1a7750388a846952f255d6595632 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E2=80=9Chuailei000=E2=80=9D?= <2280131253@qq.com> Date: Tue, 17 Oct 2023 11:35:06 +0800 Subject: [PATCH 15/15] =?UTF-8?q?perf:=20=E6=B2=A1=E6=9C=89=E5=8F=AF?= =?UTF-8?q?=E7=94=A8=E8=B4=A6=E5=8F=B7=E6=97=B6=E7=BB=99=E5=87=BA=E6=8F=90?= =?UTF-8?q?=E7=A4=BA?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../connect-method/connect-method.component.ts | 2 +- .../select-account/select-account.component.html | 6 +++++- .../select-account/select-account.component.scss | 4 ++++ 3 files changed, 10 insertions(+), 2 deletions(-) diff --git a/src/app/elements/connect/connect-dialog/connect-method/connect-method.component.ts b/src/app/elements/connect/connect-dialog/connect-method/connect-method.component.ts index 382320c2..89531e16 100644 --- a/src/app/elements/connect/connect-dialog/connect-method/connect-method.component.ts +++ b/src/app/elements/connect/connect-dialog/connect-method/connect-method.component.ts @@ -95,7 +95,7 @@ export class ElementConnectMethodComponent implements OnInit { if (!this._settingSvc.hasXPack()) { return false; } - if (!this.account.has_secret) { + if (this.account && !this.account.has_secret) { const aliases = ['@USER', '@INPUT']; // 同名账号、手动输入可以下载RDP文件 if (!aliases.includes(this.account.alias) || (!this.manualAuthInfo.secret || !this.manualAuthInfo.username)) { diff --git a/src/app/elements/connect/connect-dialog/select-account/select-account.component.html b/src/app/elements/connect/connect-dialog/select-account/select-account.component.html index 04ab398b..2d3f94e5 100644 --- a/src/app/elements/connect/connect-dialog/select-account/select-account.component.html +++ b/src/app/elements/connect/connect-dialog/select-account/select-account.component.html @@ -1,4 +1,4 @@ -
+
+ + + +
diff --git a/src/app/elements/connect/connect-dialog/select-account/select-account.component.scss b/src/app/elements/connect/connect-dialog/select-account/select-account.component.scss index 966fa71c..e15ec42d 100644 --- a/src/app/elements/connect/connect-dialog/select-account/select-account.component.scss +++ b/src/app/elements/connect/connect-dialog/select-account/select-account.component.scss @@ -45,3 +45,7 @@ font-size: 15px; padding-left: 10px; } + +.not-account { + margin-bottom: 10px; +}