This commit is contained in:
richard-loafle 2020-02-03 13:58:53 +09:00
commit 51dbc01dd6
21 changed files with 239 additions and 76 deletions

View File

@ -10,7 +10,7 @@
</div> </div>
<span <span
class="app-title text-accent-darkest " class="app-title text-primary-color"
[@animate]="{ value: '*', params: { delay: '100ms', y: '25px' } }" [@animate]="{ value: '*', params: { delay: '100ms', y: '25px' } }"
> >
{{ getTitle() }} {{ getTitle() }}

View File

@ -48,9 +48,12 @@
> >
<mat-tab [label]="MessageType.Receive"> <mat-tab [label]="MessageType.Receive">
<ng-template mat-tab-label> <ng-template mat-tab-label>
{{ 'message.messageTypeReceiving' | translate }} {{ 'message.type.messageTypeReceiving' | translate }}
</ng-template> </ng-template>
<perfect-scrollbar fxFlex="1 1 auto"> <perfect-scrollbar
fxFlex="1 1 auto"
*ngIf="!!(messageRetrieveList$ | async)"
>
<ucap-message-list-item <ucap-message-list-item
*ngFor="let message of messageRetrieveList$ | async" *ngFor="let message of messageRetrieveList$ | async"
[message]="message" [message]="message"
@ -58,12 +61,25 @@
class="message-item" class="message-item"
></ucap-message-list-item> ></ucap-message-list-item>
</perfect-scrollbar> </perfect-scrollbar>
<div
class="no-search-result"
fxFlexFill
*ngIf="
!(messageRetrieveList$ | async) ||
0 === (messageRetrieveList$ | async).length
"
>
{{ 'common.noResult' | translate }}
</div>
</mat-tab> </mat-tab>
<mat-tab [label]="MessageType.Send"> <mat-tab [label]="MessageType.Send">
<ng-template mat-tab-label> <ng-template mat-tab-label>
{{ 'message.messageTypeOutgoing' | translate }} {{ 'message.type.messageTypeOutgoing' | translate }}
</ng-template> </ng-template>
<perfect-scrollbar fxFlex="1 1 auto"> <perfect-scrollbar
fxFlex="1 1 auto"
*ngIf="!!(messageSendList$ | async)"
>
<ucap-message-list-item <ucap-message-list-item
*ngFor="let message of messageSendList$ | async" *ngFor="let message of messageSendList$ | async"
[message]="message" [message]="message"
@ -71,12 +87,25 @@
class="message-item" class="message-item"
></ucap-message-list-item> ></ucap-message-list-item>
</perfect-scrollbar> </perfect-scrollbar>
<div
class="no-search-result"
fxFlexFill
*ngIf="
!(messageSendList$ | async) ||
0 === (messageSendList$ | async).length
"
>
{{ 'common.noResult' | translate }}
</div>
</mat-tab> </mat-tab>
<mat-tab [label]="MessageType.Reservation"> <mat-tab [label]="MessageType.Reservation">
<ng-template mat-tab-label> <ng-template mat-tab-label>
{{ 'message.messageTypeReservation' | translate }} {{ 'message.type.messageTypeReservation' | translate }}
</ng-template> </ng-template>
<perfect-scrollbar fxFlex="1 1 auto"> <perfect-scrollbar
fxFlex="1 1 auto"
*ngIf="!!(messageReservationList$ | async)"
>
<ucap-message-list-item <ucap-message-list-item
*ngFor="let message of messageReservationList$ | async" *ngFor="let message of messageReservationList$ | async"
[message]="message" [message]="message"
@ -84,6 +113,16 @@
class="message-item" class="message-item"
></ucap-message-list-item> ></ucap-message-list-item>
</perfect-scrollbar> </perfect-scrollbar>
<div
class="no-search-result"
fxFlexFill
*ngIf="
!(messageReservationList$ | async) ||
0 === (messageReservationList$ | async).length
"
>
{{ 'common.noResult' | translate }}
</div>
</mat-tab> </mat-tab>
</mat-tab-group> </mat-tab-group>
</div> </div>
@ -93,21 +132,16 @@
<form [formGroup]="fgSearchType" class="w-100-p"> <form [formGroup]="fgSearchType" class="w-100-p">
<mat-form-field style="width: 100px;"> <mat-form-field style="width: 100px;">
<mat-select <mat-select
value="A"
formControlName="searchMessageType" formControlName="searchMessageType"
(selectionChange)="onChangeSelection($event)" (selectionChange)="onChangeSelection($event)"
> >
<mat-option [value]="MessageType.All">{{ <mat-option
'message.messageTypeAll' | translate *ngFor="let messageType of messageTypeList"
}}</mat-option> [value]="messageType.name"
<mat-option [value]="MessageType.Receive">{{ >
'message.messageTypeReceiving' | translate {{ messageType.displayName }}
}}</mat-option> </mat-option>
<mat-option [value]="MessageType.Send">{{
'message.messageTypeOutgoing' | translate
}}</mat-option>
<mat-option [value]="MessageType.Reservation">{{
'message.messageTypeReservation' | translate
}}</mat-option>
</mat-select> </mat-select>
</mat-form-field> </mat-form-field>
<mat-radio-group <mat-radio-group
@ -128,7 +162,10 @@
</form> </form>
</div> </div>
<div style="height: calc(100% - 65.5px)"> <div style="height: calc(100% - 65.5px)">
<perfect-scrollbar fxFlex="1 1 auto"> <perfect-scrollbar
fxFlex="1 1 auto"
*ngIf="!!(messageSearchList$ | async)"
>
<ucap-message-list-item <ucap-message-list-item
*ngFor="let message of messageSearchList$ | async" *ngFor="let message of messageSearchList$ | async"
[message]="message" [message]="message"
@ -136,6 +173,16 @@
class="message-item" class="message-item"
></ucap-message-list-item> ></ucap-message-list-item>
</perfect-scrollbar> </perfect-scrollbar>
<div
class="no-search-result"
fxFlexFill
*ngIf="
!(messageSearchList$ | async) ||
0 === (messageSearchList$ | async).length
"
>
{{ 'common.noSearchResult' | translate }}
</div>
</div> </div>
</div> </div>
</div> </div>

View File

@ -30,5 +30,10 @@
position: relative; position: relative;
height: 100%; height: 100%;
} }
.no-search-result {
padding-top: 10px;
padding-left: 10px;
}
} }
} }

View File

@ -8,9 +8,8 @@ import {
Input, Input,
AfterViewChecked AfterViewChecked
} from '@angular/core'; } from '@angular/core';
import { Observable, Subscription } from 'rxjs'; import { Observable, Subscription, merge } from 'rxjs';
import { Store, select } from '@ngrx/store'; import { Store, select } from '@ngrx/store';
import { tap } from 'rxjs/operators';
import { NGXLogger } from 'ngx-logger'; import { NGXLogger } from 'ngx-logger';
import { VersionInfo2Response } from '@ucap-webmessenger/api-public'; import { VersionInfo2Response } from '@ucap-webmessenger/api-public';
@ -53,6 +52,11 @@ import * as AppStore from '@app/store';
import * as MessageStore from '@app/store/messenger/message'; import * as MessageStore from '@app/store/messenger/message';
import { TranslateService } from '@ngx-translate/core'; import { TranslateService } from '@ngx-translate/core';
export interface MessageTypeData {
displayName: string;
name: string;
}
@Component({ @Component({
selector: 'app-layout-chat-left-sidenav-message', selector: 'app-layout-chat-left-sidenav-message',
templateUrl: './message.component.html', templateUrl: './message.component.html',
@ -95,6 +99,9 @@ export class MessageBoxComponent
isSearch = false; isSearch = false;
messageTypeList: MessageTypeData[] = [];
langChangeSubscription: Subscription;
constructor( constructor(
private store: Store<any>, private store: Store<any>,
private formBuilder: FormBuilder, private formBuilder: FormBuilder,
@ -217,6 +224,15 @@ export class MessageBoxComponent
if (!!this.tabs) { if (!!this.tabs) {
this.tabs.realignInkBar(); this.tabs.realignInkBar();
} }
this.setMessageTypeData();
this.langChangeSubscription = merge(
this.translateService.onLangChange,
this.translateService.onDefaultLangChange,
this.translateService.onTranslationChange
).subscribe(() => {
this.setMessageTypeData();
});
} }
ngAfterViewChecked(): void { ngAfterViewChecked(): void {
@ -230,6 +246,9 @@ export class MessageBoxComponent
if (!!this.messageDetailInfo) { if (!!this.messageDetailInfo) {
this.messageDetailInfo.unsubscribe(); this.messageDetailInfo.unsubscribe();
} }
if (!!this.langChangeSubscription) {
this.langChangeSubscription.unsubscribe();
}
} }
onSelectedIndexTab(value: number) { onSelectedIndexTab(value: number) {
@ -275,6 +294,10 @@ export class MessageBoxComponent
event.preventDefault(); event.preventDefault();
event.stopPropagation(); event.stopPropagation();
if (!search || search.trim().length === 0) {
return;
}
this.getSearchMessage( this.getSearchMessage(
MessageType.All, MessageType.All,
MessageSearchType.Name, MessageSearchType.Name,
@ -343,4 +366,32 @@ export class MessageBoxComponent
}) })
); );
} }
private setMessageTypeData() {
const messageTypeData = this.translateService.instant('message.type');
const messageTypeList: MessageTypeData[] = [];
for (const key in messageTypeData) {
if (messageTypeData.hasOwnProperty(key)) {
let name = 'A';
switch (key) {
case 'messageTypeAll':
name = MessageType.All;
break;
case 'messageTypeReceiving':
name = MessageType.Receive;
break;
case 'messageTypeOutgoing':
name = MessageType.Send;
break;
case 'messageTypeReservation':
name = MessageType.Reservation;
break;
}
messageTypeList.push({ displayName: messageTypeData[key], name });
}
}
this.messageTypeList = messageTypeList;
}
} }

View File

@ -265,6 +265,20 @@ export class MessagesComponent implements OnInit, OnDestroy, AfterViewInit {
.subscribe(roomInfo => { .subscribe(roomInfo => {
this.clearView(); this.clearView();
this.roomInfoSubject.next(roomInfo); this.roomInfoSubject.next(roomInfo);
if (!!this.roomInfoSubject.value && !!this.interval) {
clearInterval(this.interval);
this.interval = undefined;
}
if (
!!this.roomInfoSubject.value &&
!!this.roomInfoSubject.value.isTimeRoom
) {
this.interval = setInterval(() => {
this.store.dispatch(EventStore.infoIntervalClear({}));
}, 1000);
}
}); });
this.userInfoListSubscription = this.store this.userInfoListSubscription = this.store
@ -393,15 +407,6 @@ export class MessagesComponent implements OnInit, OnDestroy, AfterViewInit {
} }
} }
}); });
if (
!!this.roomInfoSubject.value &&
!!this.roomInfoSubject.value.isTimeRoom
) {
this.interval = setInterval(() => {
this.store.dispatch(EventStore.infoIntervalClear({}));
}, 1000);
}
} }
ngOnDestroy(): void { ngOnDestroy(): void {

View File

@ -3,13 +3,13 @@
<mat-card-title> <mat-card-title>
<ng-container [ngSwitch]="messageInfo.type"> <ng-container [ngSwitch]="messageInfo.type">
<span *ngSwitchCase="MessageType.Receive">{{ <span *ngSwitchCase="MessageType.Receive">{{
'message.messageTypeReceiving' | translate 'message.type.messageTypeReceiving' | translate
}}</span> }}</span>
<span *ngSwitchCase="MessageType.Send">{{ <span *ngSwitchCase="MessageType.Send">{{
'message.messageTypeOutgoing' | translate 'message.type.messageTypeOutgoing' | translate
}}</span> }}</span>
<span *ngSwitchCase="MessageType.Reservation">{{ <span *ngSwitchCase="MessageType.Reservation">{{
'message.messageTypeReservation' | translate 'message.type.messageTypeReservation' | translate
}}</span> }}</span>
</ng-container> </ng-container>
</mat-card-title> </mat-card-title>

View File

@ -20,7 +20,7 @@
[totalCount]="totalCount" [totalCount]="totalCount"
[pageCurrent]="pageCurrent" [pageCurrent]="pageCurrent"
[pageListCount]="pageListCount" [pageListCount]="pageListCount"
(search)="onSearch($event)" (search)="onReSearch($event)"
(changePage)="onChangePage($event)" (changePage)="onChangePage($event)"
(openProfile)="onClickOpenProfile($event)" (openProfile)="onClickOpenProfile($event)"
> >

View File

@ -92,6 +92,12 @@ export class IntegratedSearchDialogComponent implements OnInit, OnDestroy {
); );
} }
onReSearch(searchWord: string) {
this.pageCurrent = 1;
this.onSearch(searchWord);
}
onSearch(searchWord: string) { onSearch(searchWord: string) {
this.currentSearchWord = this.data.keyword; this.currentSearchWord = this.data.keyword;

View File

@ -10,7 +10,7 @@
</ucap-integrated-search-form> </ucap-integrated-search-form>
<div <div
*ngIf="!!loginRes && !!weblink" *ngIf="!!loginRes && !!weblink"
class="app-layout-native-title-bar-link" class="app-layout-native-title-bar-link weblink"
> >
<ng-container *ngFor="let link of weblink" [ngSwitch]="link.key"> <ng-container *ngFor="let link of weblink" [ngSwitch]="link.key">
<button <button

View File

@ -48,11 +48,13 @@
-webkit-box-align: center; -webkit-box-align: center;
align-items: center; align-items: center;
position: relative; position: relative;
display: inline-block; display: inline-flex;
min-width: 0; min-width: 0;
width: auto; width: auto;
overflow: hidden; overflow: hidden;
white-space: nowrap; white-space: nowrap;
align-items: center;
height:100%;
.button { .button {
-webkit-app-region: no-drag; -webkit-app-region: no-drag;
outline: 0; outline: 0;
@ -69,8 +71,7 @@
text-align: center; text-align: center;
font-size: 10px; font-size: 10px;
vertical-align: middle; vertical-align: middle;
margin-left: 10px; margin-right: 12px;
transform: translateY(-2px);
.weblink { .weblink {
display: inline-flex; display: inline-flex;
line-height: 24px; line-height: 24px;
@ -121,7 +122,7 @@
width: 10px; width: 10px;
height: 20px; height: 20px;
border-right: 1px solid rgba(255, 255, 255, 0.3); border-right: 1px solid rgba(255, 255, 255, 0.3);
margin: 0 10px 0 10px; margin: 0 10px 0 0;
display: inline-block; display: inline-block;
} }
.myprofile-item { .myprofile-item {

View File

@ -562,6 +562,10 @@ export class TopBarComponent implements OnInit, OnDestroy {
} }
onIntegratedSearch(keyword: string) { onIntegratedSearch(keyword: string) {
if (!keyword || keyword.trim().length === 0) {
return;
}
this.dialogService.open< this.dialogService.open<
IntegratedSearchDialogComponent, IntegratedSearchDialogComponent,
IntegratedSearchDialogData, IntegratedSearchDialogData,

View File

@ -120,6 +120,16 @@ export class Effects {
) )
); );
myStatusCheck$ = createEffect(() =>
this.actions$.pipe(
ofType(AuthStore.loginSuccess),
map(action => action.loginRes),
map(loginRes => {
return bulkInfo({ divCd: 'bulk', userSeqs: [loginRes.userSeq] });
})
)
);
constructor( constructor(
private actions$: Actions, private actions$: Actions,
private store: Store<any>, private store: Store<any>,

View File

@ -9,6 +9,7 @@ import {
import * as AuthenticationStore from '@app/store/account/authentication'; import * as AuthenticationStore from '@app/store/account/authentication';
import { StatusBulkInfo } from '@ucap-webmessenger/protocol-status'; import { StatusBulkInfo } from '@ucap-webmessenger/protocol-status';
import { StatusCode } from '@ucap-webmessenger/core';
export const reducer = createReducer( export const reducer = createReducer(
initialState, initialState,
@ -68,6 +69,22 @@ export const reducer = createReducer(
} as State; } as State;
}), }),
on(AuthenticationStore.loginSuccess, (state, action) => {
return {
...state,
myStatus: {
userSeq: action.loginRes.userSeq,
pcStatus: StatusCode.OnLine,
phoneStatus: StatusCode.Offline,
mobileStatus: StatusCode.Offline,
conferenceStatus: StatusCode.Offline,
statusMessage: '',
mobileConferenceStatus: StatusCode.Offline,
imessengerStatus: StatusCode.Offline
}
};
}),
on(changeMyIdleCheckTime, (state, action) => { on(changeMyIdleCheckTime, (state, action) => {
return { return {
...state, ...state,

View File

@ -293,10 +293,6 @@
"sendTo": "Send message", "sendTo": "Send message",
"sendReservation": "Send reservation", "sendReservation": "Send reservation",
"placeholderForSearch": "search for name, title, content", "placeholderForSearch": "search for name, title, content",
"messageTypeAll": "All",
"messageTypeReceiving": "Receiving",
"messageTypeOutgoing": "Outgoing",
"messageTypeReservation": "Reservation",
"searchTypeName": "Name", "searchTypeName": "Name",
"searchTypeTitle": "Title", "searchTypeTitle": "Title",
"searchTypeContent": "Content", "searchTypeContent": "Content",
@ -318,6 +314,12 @@
"andOthers": "and {{count}}others", "andOthers": "and {{count}}others",
"addReceiver": "Add Reciever", "addReceiver": "Add Reciever",
"countOfReceiver": "{{count}} total recipients", "countOfReceiver": "{{count}} total recipients",
"type": {
"messageTypeAll": "All",
"messageTypeReceiving": "Receiving",
"messageTypeOutgoing": "Outgoing",
"messageTypeReservation": "Reservation"
},
"results": { "results": {
"successForSending": "Your message has been sent.", "successForSending": "Your message has been sent.",
"successForReservation": "You have scheduled a message transfer.", "successForReservation": "You have scheduled a message transfer.",
@ -372,7 +374,8 @@
"searchWord": "Search word", "searchWord": "Search word",
"searchResult": "Search result", "searchResult": "Search result",
"noSearchResult": "There is no search result", "noSearchResult": "There is no search result",
"useOnlyForSpecialCharacter": "Can only use Special characters: {{v}}", "noResult": "There is no result",
"useOnlyForSpecialCharacter": "Can only use Special characters: {{specialCharacter}}",
"units": { "units": {
"date": "Date", "date": "Date",
"time": "Time", "time": "Time",

View File

@ -293,10 +293,6 @@
"sendTo": "쪽지 보내기", "sendTo": "쪽지 보내기",
"sendReservation": "쪽지 예약 보내기", "sendReservation": "쪽지 예약 보내기",
"placeholderForSearch": "이름, 제목, 내용 검색", "placeholderForSearch": "이름, 제목, 내용 검색",
"messageTypeAll": "전체",
"messageTypeReceiving": "수신",
"messageTypeOutgoing": "발신",
"messageTypeReservation": "예약",
"searchTypeName": "이름", "searchTypeName": "이름",
"searchTypeTitle": "제목", "searchTypeTitle": "제목",
"searchTypeContent": "내용", "searchTypeContent": "내용",
@ -318,6 +314,12 @@
"andOthers": "외 {{count}}명", "andOthers": "외 {{count}}명",
"addReceiver": "수신자 추가", "addReceiver": "수신자 추가",
"countOfReceiver": "총 수신자 {{count}}명", "countOfReceiver": "총 수신자 {{count}}명",
"type": {
"messageTypeAll": "전체",
"messageTypeReceiving": "수신",
"messageTypeOutgoing": "발신",
"messageTypeReservation": "예약"
},
"results": { "results": {
"successForSending": "쪽지를 전송하였습니다.", "successForSending": "쪽지를 전송하였습니다.",
"successForReservation": "쪽지 전송을 예약 하였습니다.", "successForReservation": "쪽지 전송을 예약 하였습니다.",
@ -372,6 +374,7 @@
"searchWord": "검색어", "searchWord": "검색어",
"searchResult": "검색 결과", "searchResult": "검색 결과",
"noSearchResult": "검색 결과가 없습니다.", "noSearchResult": "검색 결과가 없습니다.",
"noResult": "조회된 내용이 없습니다.",
"useOnlyForSpecialCharacter": "특수문자는 {{specialCharacter}}만 사용할 수 있습니다.", "useOnlyForSpecialCharacter": "특수문자는 {{specialCharacter}}만 사용할 수 있습니다.",
"units": { "units": {
"date": "날짜", "date": "날짜",

View File

@ -52,21 +52,22 @@ ol {
list-style: none; list-style: none;
} }
$lg-red: ( $lg-red: (
50: #fff9fc, 50: #ffffff,
100: #f8bbd0, 100: #fff9fc,
200: #f48fb1, 200: #f1e1e5,
/*300: #f06292,*/ 300: #ef4c73, /*300: #f06292,*/ 300: #ef4c73,
400: #ec407a, 400: #ec407a,
500: #ed097e, 500: #ed097e,
600: #d81b60, 600: #d81b60,
700: #c2185b, 700: #c2185b,
800: #ad1457, 800: #ad1457,
900: #880e4f, /*900: #880e4f,*/ 900: #5f2a41,
A100: #ff80ab, A100: #ff80ab,
A200: #ff4081, A200: #ff4081,
A400: #ff3399, A400: #ff3399,
A700: #c51162, A700: #c51162,
B100: #4f4f4f, B100: #4f4f4f,
B200: #67545b,
G100: #ef4c73, G100: #ef4c73,
G900: #352a37, G900: #352a37,
contrast: ( contrast: (
@ -92,14 +93,12 @@ $lg-red: (
$aquaBlue-daesang: ( $aquaBlue-daesang: (
50: #f9feff, 50: #f9feff,
//#e0f7fa, 100: #ebfdff,
/* 100: #b2ebf2,*/ 100: #ebfdff, 200: #a7f3fd,
/*200: #65e4f5,*/ 200: #a7f3fd, 300: #4dd0e1,
//#80deea,
300: #4dd0e1,
400: #26c6da, 400: #26c6da,
500: #00bcd4, 500: #00bcd4,
/*600: #00acc1,*/ 600: #00b6d5, 600: #00b6d5,
700: #1ea7b9, 700: #1ea7b9,
800: #0367a6, 800: #0367a6,
900: #024873, 900: #024873,
@ -108,6 +107,7 @@ $aquaBlue-daesang: (
A400: #00e5ff, A400: #00e5ff,
A700: #06a6c1, A700: #06a6c1,
B100: #2d3a4a, B100: #2d3a4a,
B200: #00b6d5,
//,#47667fbackgroundcolor //,#47667fbackgroundcolor
G100: #0367a6, G100: #0367a6,
/*G900: #192a2c,*/ G900: #6dd5ed, /*G900: #192a2c,*/ G900: #6dd5ed,
@ -200,11 +200,11 @@ $daesang-grey: (
color: mat-color($primary, default-contrast); color: mat-color($primary, default-contrast);
} }
.bg-accent-dark { .bg-accent-dark {
background: mat-color($accent, 600); background: mat-color($accent, B200);
color: mat-color($primary, default-contrast); color: mat-color($primary, default-contrast);
} }
.bg-accent-light { .bg-accent-light {
background: mat-color($accent, 300) !important; background: mat-color($accent, 300);
color: mat-color($primary, default-contrast); color: mat-color($primary, default-contrast);
} }
.bg-accent-bright { .bg-accent-bright {
@ -278,7 +278,8 @@ $daesang-grey: (
.policy { .policy {
background-color: mat-color($accent, B100); background-color: mat-color($accent, B100);
} }
.mat-badge-accent .mat-badge-content { .mat-badge-accent .mat-badge-content,
.weblink .mat-badge-content {
background-color: mat-color($warn, 400); background-color: mat-color($warn, 400);
} }
@ -430,4 +431,12 @@ $daesang-grey: (
.translation-preview { .translation-preview {
background-color: mat-color($accent, 900, 0.8); background-color: mat-color($accent, 900, 0.8);
} }
.tree-has-child {
li {
.tree-node-body {
background-color: mat-color($accent, 100);
border: 1px solid mat-color($accent, 200);
}
}
}
} }

View File

@ -558,11 +558,15 @@ export class WriteComponent implements OnInit, OnDestroy, AfterViewInit {
const selection: Selection = document.getSelection(); const selection: Selection = document.getSelection();
const range: Range = selection.getRangeAt(0); const range: Range = selection.getRangeAt(0);
let inEditor = false;
if (removeSelected) { if (removeSelected) {
// onPaste
selection.empty(); selection.empty();
inEditor = true;
} else {
inEditor = this.inEditor(selection.anchorNode);
} }
const inEditor = this.inEditor(selection.anchorNode);
if (inEditor) { if (inEditor) {
range.insertNode(node); range.insertNode(node);
} else { } else {

View File

@ -3,8 +3,6 @@
.tree-node-closer-container { .tree-node-closer-container {
position: relative; position: relative;
// border: 1px dotted grey;
// border-width: 0 0 1px 1px;
.tree-node-closer-top { .tree-node-closer-top {
width: 15px; width: 15px;
@ -13,7 +11,6 @@
border: 1px dotted #cccccc; border: 1px dotted #cccccc;
border-width: 0 0 1px 1px; border-width: 0 0 1px 1px;
top: -40px; top: -40px;
// left: 20px;
} }
.tree-node-closer-bottom { .tree-node-closer-bottom {
width: 15px; width: 15px;
@ -22,7 +19,6 @@
border: 1px dotted #cccccc; border: 1px dotted #cccccc;
border-width: 0 0 1px 1px; border-width: 0 0 1px 1px;
top: 0px; top: 0px;
// left: 20px;
} }
.tree-node-closer-top[sub-node] { .tree-node-closer-top[sub-node] {
@ -52,11 +48,6 @@
list-style-type: none; list-style-type: none;
} }
// li:last-child {
// border-left: 1px solid white;
// margin-left: -41px;
// }
.tree-has-child { .tree-has-child {
height: 50px; height: 50px;
min-height: 50px; min-height: 50px;
@ -71,10 +62,7 @@
.tree-node-body { .tree-node-body {
width: 100%; width: 100%;
height: 40px; height: 40px;
background-color: #eef9fd;
border: 1px solid #cee1e8;
border-radius: 4px; border-radius: 4px;
//padding-bottom: 10px;
button { button {
line-height: normal; line-height: normal;
.mat-button-wrapper { .mat-button-wrapper {

View File

@ -1,5 +1,5 @@
<div class="search-container"> <div class="search-container">
<span class="icon-img"> <span class="icon-img" (click)="onKeyDownEnter(searchWordInput.value)">
<i class="mid mdi-magnify"></i> <i class="mid mdi-magnify"></i>
</span> </span>
<!--<mat-form-field appearance="outline">--> <!--<mat-form-field appearance="outline">-->

View File

@ -196,6 +196,13 @@
<tr mat-row *matRowDef="let row; columns: displayedColumns"></tr> <tr mat-row *matRowDef="let row; columns: displayedColumns"></tr>
</table> </table>
</perfect-scrollbar> </perfect-scrollbar>
<div
class="no-search-result"
fxFlexFill
*ngIf="!searchUserInfos || 0 === searchUserInfos.length"
>
{{ 'common.noSearchResult' | translate }}
</div>
</div> </div>
<div class="footer-fix search-result-footer"> <div class="footer-fix search-result-footer">
<mat-paginator <mat-paginator

View File

@ -25,6 +25,9 @@
.search-scrollbar { .search-scrollbar {
height: 550px; height: 550px;
} }
::ng-deep .ps__rail-y {
z-index: 102;
}
::ng-deep .search-area { ::ng-deep .search-area {
.search-container { .search-container {