Skip to content
Closed
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
74 commits
Select commit Hold shift + click to select a range
8462203
Merge pull request #680 from jumpserver/dev
baijiangjie Sep 8, 2022
043258b
Merge pull request #688 from jumpserver/dev
baijiangjie Sep 13, 2022
439ed78
Merge pull request #694 from jumpserver/dev
baijiangjie Sep 15, 2022
b47794a
feat: 修改 Endpoint 获取 Manugs DB listen port 的逻辑
baijiangjie Sep 22, 2022
37f38fd
fix: 修复导航选项鼠标hover后菜单显示稳定问题
huailei000 Sep 23, 2022
98abb04
fix: 修复资产树不是异步状态下点击刷新资产树不折叠问题
huailei000 Sep 22, 2022
8ee4db0
perf: 构建时使用缓存 (#700)
fit2bot Sep 29, 2022
6024898
fix: 修复使用缓存构建
wojiushixiaobai Sep 29, 2022
3181ba6
perf: update jquery
huailei000 Oct 13, 2022
69b889d
Merge pull request #708 from jumpserver/dev
baijiangjie Oct 13, 2022
67422df
Merge pull request #712 from jumpserver/dev
baijiangjie Oct 20, 2022
02260e5
Merge pull request #719 from jumpserver/dev
baijiangjie Nov 10, 2022
6f61ac2
Merge pull request #723 from jumpserver/dev
baijiangjie Nov 16, 2022
d618cf6
Merge pull request #750 from jumpserver/dev
baijiangjie Jan 31, 2023
cae0108
Merge pull request #773 from jumpserver/dev
baijiangjie Feb 22, 2023
10de48c
Merge pull request #776 from jumpserver/dev
baijiangjie Feb 23, 2023
0c2134b
Merge pull request #797 from jumpserver/dev
baijiangjie Mar 15, 2023
9836a39
fix: 修复登录复核问题
baijiangjie Mar 16, 2023
9a206e1
Merge pull request #806 from jumpserver/dev
baijiangjie Apr 13, 2023
82036a3
Merge pull request #808 from jumpserver/dev
baijiangjie Apr 20, 2023
eaf0faf
Merge pull request #825 from jumpserver/dev
baijiangjie May 18, 2023
b8bb9e6
Merge pull request #841 from jumpserver/dev
baijiangjie Jun 15, 2023
dc78eab
Merge pull request #880 from jumpserver/dev
baijiangjie Jul 20, 2023
791c50c
Merge pull request #932 from jumpserver/dev
baijiangjie Aug 17, 2023
aad9fac
Merge pull request #962 from jumpserver/dev
baijiangjie Sep 21, 2023
198fcdc
Merge pull request #987 from jumpserver/dev
baijiangjie Oct 19, 2023
9217d84
Merge pull request #1006 from jumpserver/dev
baijiangjie Nov 16, 2023
c81b226
Merge pull request #1028 from jumpserver/dev
baijiangjie Dec 21, 2023
ff296ec
perf:远程应用不输入密码也能下载RDP文件
huailei000 Dec 22, 2023
f5e0cf1
Revert "perf:远程应用不输入密码也能下载RDP文件"
huailei000 Dec 22, 2023
848e223
Merge pull request #1043 from jumpserver/dev
baijiangjie Dec 29, 2023
d2ffef6
Merge pull request #1044 from jumpserver/master
baijiangjie Dec 29, 2023
14d133a
Merge pull request #1051 from jumpserver/dev
baijiangjie Jan 17, 2024
7483f54
Merge pull request #1052 from jumpserver/master
baijiangjie Jan 17, 2024
93550c7
Merge pull request #1059 from jumpserver/dev
baijiangjie Feb 29, 2024
f6f4eae
Merge pull request #1060 from jumpserver/master
baijiangjie Feb 29, 2024
5fd70be
fix: Lion代理连接远程应用,Luna页面没有浮标
w940853815 Mar 1, 2024
052bdd1
fix: Luna k8s页面没有浮标
w940853815 Mar 5, 2024
879f172
Merge pull request #1084 from jumpserver/dev
baijiangjie Apr 18, 2024
2be976f
Merge pull request #1086 from jumpserver/v3.10
baijiangjie Apr 18, 2024
29c2668
Merge pull request #1089 from jumpserver/dev
baijiangjie Apr 22, 2024
c58b378
Merge pull request #1095 from jumpserver/dev
baijiangjie May 16, 2024
2629748
Merge pull request #1105 from jumpserver/dev
baijiangjie Jun 19, 2024
e3d5415
Merge pull request #1111 from jumpserver/dev
baijiangjie Jul 3, 2024
dfce101
Merge pull request #1146 from jumpserver/dev
baijiangjie Aug 15, 2024
81e3fad
Merge pull request #1167 from jumpserver/dev
baijiangjie Sep 19, 2024
940d592
Merge pull request #1174 from jumpserver/dev
baijiangjie Oct 17, 2024
a4bd420
Merge pull request #1186 from jumpserver/dev
baijiangjie Nov 21, 2024
87b22d0
Merge pull request #1209 from jumpserver/dev
baijiangjie Dec 19, 2024
b2ce9b2
Merge pull request #1224 from jumpserver/dev
baijiangjie Jan 15, 2025
94badcc
Merge pull request #1231 from jumpserver/dev
baijiangjie Feb 20, 2025
38dff21
Merge pull request #1245 from jumpserver/dev
baijiangjie Mar 20, 2025
7feae77
Merge pull request #1280 from jumpserver/dev
baijiangjie Apr 17, 2025
3ff0a7f
Merge pull request #1302 from jumpserver/dev
baijiangjie May 15, 2025
04e3695
Merge pull request #1369 from jumpserver/dev
baijiangjie Jun 19, 2025
d68a8da
Merge pull request #1411 from jumpserver/dev
baijiangjie Jul 17, 2025
9cf43bf
Merge pull request #1445 from jumpserver/dev
baijiangjie Aug 21, 2025
da93e29
Merge pull request #1454 from jumpserver/dev
baijiangjie Sep 18, 2025
42246be
Merge pull request #1460 from jumpserver/dev
baijiangjie Oct 16, 2025
a43fdef
Merge pull request #1474 from jumpserver/dev
baijiangjie Nov 20, 2025
394b7f5
Merge pull request #1489 from jumpserver/dev
baijiangjie Dec 18, 2025
05384e8
Merge pull request #1502 from jumpserver/dev
baijiangjie Jan 22, 2026
08afac5
Merge pull request #1505 from jumpserver/dev
baijiangjie Mar 4, 2026
d39c874
Merge pull request #1544 from jumpserver/dev
baijiangjie Jul 16, 2026
f791b11
fix: chat style; login check; asset auto connect
ZhaoJiSen Jul 21, 2026
95b0653
perf: nav style
ZhaoJiSen Jul 22, 2026
855392e
fix: tree scroll
ZhaoJiSen Jul 22, 2026
56c7f62
Revert "fix: tree scroll"
ZhaoJiSen Jul 23, 2026
b277d6a
Revert "perf: nav style"
ZhaoJiSen Jul 23, 2026
56e0925
Revert "fix: chat style; login check; asset auto connect"
ZhaoJiSen Jul 23, 2026
cc1532b
fix: chat style; login check; asset auto connect
ZhaoJiSen Jul 21, 2026
5599447
perf: nav style
ZhaoJiSen Jul 22, 2026
78ebadd
fix: tree scroll
ZhaoJiSen Jul 22, 2026
1a346f6
fix: tree scroll
ZhaoJiSen Aug 3, 2026
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
1 change: 1 addition & 0 deletions .gitignore
Original file line number Diff line number Diff line change
Expand Up @@ -47,6 +47,7 @@ luna.tar.gz
luna/
package-lock.json
.angular
.yarn

# generated at build time by scripts/generate-build-info.mjs
/src/environments/build-info.ts
1 change: 1 addition & 0 deletions .yarnrc.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
nodeLinker: node-modules
25 changes: 22 additions & 3 deletions src/app/elements/asset-tree/asset-tree.component.scss
Original file line number Diff line number Diff line change
Expand Up @@ -11,19 +11,33 @@
@content;
}

:host {
display: block;
height: 100%;
min-height: 0;
overflow: hidden;
}

.tree-container {
display: flex;
flex-direction: column;
height: 100%;
min-height: 0;
overflow: hidden;
background-color: var(--el-asset-tree-bg-color);

.tree-type {
flex: 0 0 30px;
min-height: 30px;
overflow: hidden;
transition: all 0.3s;

.tree-type-banner {
position: relative;
display: flex;
flex: 0 0 30px;
height: 30px;
min-height: 30px;
line-height: 30px;
padding-right: 11px;
padding-left: 15px;
Expand Down Expand Up @@ -141,9 +155,10 @@

.tree-type-content {
position: relative;
flex: 1 1 0;
padding: 1px;
min-height: 40px;
height: calc(100% - 31px);
min-height: 0;
height: auto;
background-color: var(--el-asset-tree-bg-color);
overflow: hidden;
scrollbar-gutter: stable both-edges;
Expand All @@ -170,7 +185,11 @@
}

&.expand-tree {
height: calc(100% - 31px);
display: flex;
flex: 1 1 0;
flex-direction: column;
min-height: 0;
height: auto;
}
}
}
Expand Down
69 changes: 42 additions & 27 deletions src/app/elements/chat/chat.component.html
Original file line number Diff line number Diff line change
@@ -1,18 +1,46 @@
<div id="chatContainer" class="chat-container">
<nz-float-button-group [hidden]="chatAIShown">
@if(isShowSetting && subViews.length === 1) {
<nz-float-button (click)="handleShowDrawer()" [nzIcon]="setting"></nz-float-button>
}
<nz-float-button (click)="showChatAI()" [hidden]="!chatAiApiEnabled" [nzIcon]="customer"> </nz-float-button>
</nz-float-button-group>
<ng-template #setting>
<nz-icon nzTheme="outline" nzType="setting" />
</ng-template>
<ng-template #customer>
<img alt="" class="chat-img" src="assets/icons/chat-ai.png" />
</ng-template>
<div class="chat-overlay-root">
<div #launcher [hidden]="chatAIShown" [ngStyle]="launcherStyle" class="chat-launcher">
<button
(keydown)="onLauncherKeydown($event)"
(lostpointercapture)="onLauncherLostPointerCapture($event)"
(pointerdown)="onLauncherPointerDown($event)"
[class.dragging]="isDragging"
aria-label="移动浮动工具栏"
class="chat-drag-handle"
type="button"
>
<nz-icon nzTheme="outline" nzType="holder" />
</button>

<div *ngIf="chatAiApiEnabled" [style.display]="chatAIShown ? 'block' : 'none'" class="drawer-panel">
<div class="chat-action-group">
@if (isShowSetting && subViews.length === 1) {
<button
(click)="handleShowDrawer()"
aria-label="打开设置"
class="chat-action-button"
type="button"
>
<nz-icon nzTheme="outline" nzType="setting" />
</button>
}
<button
(click)="showChatAI()"
[hidden]="!chatAiApiEnabled"
aria-label="打开智能问答"
class="chat-action-button"
type="button"
>
<img alt="" class="chat-img" src="assets/icons/chat-ai.png" />
</button>
</div>
</div>

<div
*ngIf="chatAiApiEnabled"
[class.chat-panel-expanded]="chatPanelExpanded"
[style.display]="chatAIShown ? 'block' : 'none'"
class="chat-panel"
>
<div class="content">
<iframe
#contentWindow
Expand All @@ -25,16 +53,3 @@
</div>
</div>
</div>

<!-- <div [hidden]="!showBtn || chatAIShown || !isShowSetting" id="dragBox"> -->
<!-- <div -->
<!-- (click)="onSettingOpenDrawer()" -->
<!-- [hidden]="!isShowSetting || subViews.length > 1" -->
<!-- class="drag-setting" -->
<!-- > -->
<!-- <i class="fa fa-cog"></i> -->
<!-- </div> -->
<!-- <div (click)="showChatAI()" [hidden]="!chatAiEnabled" class="robot-button"> -->
<!-- <img alt="" class="chat-img" src="assets/icons/chat-ai.png"/> -->
<!-- </div> -->
<!-- </div> -->
206 changes: 120 additions & 86 deletions src/app/elements/chat/chat.component.scss
Original file line number Diff line number Diff line change
@@ -1,113 +1,147 @@
nz-float-button-group,
nz-float-button {
position: absolute;
right: 1px;
top: 0;
:host {
pointer-events: none;
}

.chat-container {
.chat-overlay-root {
position: fixed;
bottom: 200px;
right: 9px;
inset: 0;
z-index: 99999;
cursor: move;
user-select: none;
overflow: visible;
padding: 10px 0;
pointer-events: none;
}

.chat-launcher {
position: absolute;
display: flex;
flex-direction: column;
align-items: flex-end;
align-items: center;
gap: 2px;
width: 40px;
padding: 4px;
border-radius: 20px;
color: rgba(255, 255, 255, 0.5);
background: rgba(255, 255, 255, 0.05);

Check warning on line 22 in src/app/elements/chat/chat.component.scss

View check run for this annotation

SonarQubeCloud / SonarCloud Code Analysis

Text does not meet the minimal contrast requirement with its background.

See more on https://sonarcloud.io/project/issues?id=jumpserver_luna&issues=AZ_FsB0IBY93WqASk07d&open=AZ_FsB0IBY93WqASk07d&pullRequest=1558
box-shadow: none;
pointer-events: auto;
user-select: none;
z-index: 1;
}

.content {
height: 100%;
iframe {
border: none;
}
.chat-drag-handle,
.chat-action-button {
display: flex;
align-items: center;
justify-content: center;
width: 32px;
height: 28px;
padding: 0;
border: 0;
border-radius: 12.5px;
color: rgba(255, 255, 255, 0.5);
background: transparent;
cursor: pointer;
transition:
color 0.16s ease,
background 0.16s ease;

&:hover,
&:focus-visible {
color: #fff;
background: rgba(255, 255, 255, 0.08);

Check warning on line 49 in src/app/elements/chat/chat.component.scss

View check run for this annotation

SonarQubeCloud / SonarCloud Code Analysis

Text does not meet the minimal contrast requirement with its background.

See more on https://sonarcloud.io/project/issues?id=jumpserver_luna&issues=AZ_FsB0IBY93WqASk07e&open=AZ_FsB0IBY93WqASk07e&pullRequest=1558
}
}

.drawer-panel {
background-color: transparent;
position: fixed;
top: 0;
right: 440px;
width: 440px;
min-width: 260px;
height: 100vh;
user-select: none;
border-radius: 10px 0 0 10px;
transition: transform 0.25s cubic-bezier(0.7, 0.3, 0.1, 1);
box-shadow: 0 0 8px 4px #00000014;
transform: translate(100%);
z-index: 1000;
opacity: 0.95;
.chat-drag-handle {
cursor: grab;
touch-action: none;

&.dragging {
cursor: grabbing;
}
}

.chat-action-group {
display: flex;
flex-direction: column;
align-items: center;
gap: 2px;
width: 32px;
}

.show {
transition: all 0.3s cubic-bezier(0.7, 0.3, 0.1, 1);
.chat-action-button {
.anticon {
font-size: 16px;
}

.show .modal {
position: fixed;
top: 0;
width: 100%;
height: 100%;
z-index: 100;
opacity: 1;
.chat-img {
width: 16px;
height: 16px;
opacity: 0.5;
transition: opacity 0.16s ease;
}

.show .drawer-panel {
transform: translate(0);
&:hover .chat-img,
&:focus-visible .chat-img {
opacity: 1;
}
}

::ng-deep {
.ant-float-btn-group {
position: absolute;
padding: 10px 0;
opacity: 1;
}
.chat-panel {
position: fixed;
right: 12px;
bottom: 12px;
width: min(440px, calc(100vw - 24px));
min-width: 260px;
height: min(400px, calc(100dvh - 24px));
overflow: hidden;
border-radius: 10px;
background: #fff;
box-shadow: 0 0 8px 4px #00000014;
pointer-events: auto;
transition:
width 0.25s cubic-bezier(0.7, 0.3, 0.1, 1),
height 0.25s cubic-bezier(0.7, 0.3, 0.1, 1),
border-radius 0.25s cubic-bezier(0.7, 0.3, 0.1, 1);
z-index: 2;

.ant-float-btn-group-circle .ant-float-btn-circle:not(:last-child) {
margin-bottom: 5px;
}
&.chat-panel-expanded {
top: 0;
right: 0;
bottom: auto;
width: min(440px, 100vw);
height: 100dvh;
border-radius: 10px 0 0 10px;
}

.ant-float-btn-default,
.ant-float-btn-default .ant-float-btn-body {
position: relative;
background: rgba(30, 30, 30, 0.85);
border-radius: 999px;
box-shadow: 0 6px 16px rgba(0,0,0,.30);
transition: background .2s ease, box-shadow .2s ease;
.content {
width: 100%;
height: 100%;

iframe {
display: block;
width: 100%;
height: 100%;
border: none;
}
.ant-float-btn-default:hover,
.ant-float-btn-default:hover .ant-float-btn-body {
background: rgba(20, 20, 20, 0.92);
box-shadow: 0 8px 22px rgba(0,0,0,.36);
}
}
}

.ant-float-btn-default .ant-float-btn-body::before,
.ant-float-btn-default::before {
content: "";
position: absolute;
inset: 0;
border-radius: 999px;
pointer-events: none;
box-shadow:
inset 0 0 0 1px rgba(255,255,255,.65),
0 0 0 1px rgba(0,0,0,.75);
}
::ng-deep {
.chat-drag-handle .anticon {
font-size: 16px;
}
}

.ant-btn .anticon,
.ant-float-btn .anticon {
color: #fff;
filter: drop-shadow(0 1px 1px rgba(0,0,0,.75));
}
@media (max-width: 480px) {
.chat-panel {
right: 6px;
bottom: 6px;
width: calc(100vw - 12px);
height: min(400px, calc(100dvh - 12px));

img.chat-img {
width: 18px;
height: 18px;
opacity: .95;
filter: drop-shadow(0 1px 1px rgba(0,0,0,.75));
&.chat-panel-expanded {
right: 0;
width: 100vw;
border-radius: 0;
}
}
}
Loading