Merge branch 'master' of https://git.loafle.net/ucap-web/next-ucap-messenger
This commit is contained in:
commit
e5147eea43
|
@ -17,7 +17,7 @@ import {
|
||||||
CreateChatDialogData,
|
CreateChatDialogData,
|
||||||
CreateChatDialogResult
|
CreateChatDialogResult
|
||||||
} from '@app/layouts/messenger/dialogs/chat/create-chat.dialog.component';
|
} from '@app/layouts/messenger/dialogs/chat/create-chat.dialog.component';
|
||||||
import { Subscription, of, Observable } from 'rxjs';
|
import { Subscription, Observable } from 'rxjs';
|
||||||
import { Store, select } from '@ngrx/store';
|
import { Store, select } from '@ngrx/store';
|
||||||
|
|
||||||
import * as AppStore from '@app/store';
|
import * as AppStore from '@app/store';
|
||||||
|
@ -35,9 +35,8 @@ import { LoginResponse } from '@ucap-webmessenger/protocol-authentication';
|
||||||
import { OpenProfileOptions } from '@ucap-webmessenger/protocol-buddy';
|
import { OpenProfileOptions } from '@ucap-webmessenger/protocol-buddy';
|
||||||
import { SessionStorageService } from '@ucap-webmessenger/web-storage';
|
import { SessionStorageService } from '@ucap-webmessenger/web-storage';
|
||||||
import { VersionInfo2Response } from '@ucap-webmessenger/api-public';
|
import { VersionInfo2Response } from '@ucap-webmessenger/api-public';
|
||||||
import { MessageApiService, MessageType } from '@ucap-webmessenger/api-message';
|
import { MessageType } from '@ucap-webmessenger/api-message';
|
||||||
import { DeviceType } from '@ucap-webmessenger/core';
|
import { tap } from 'rxjs/operators';
|
||||||
import { map, catchError, tap } from 'rxjs/operators';
|
|
||||||
import {
|
import {
|
||||||
MessageWriteDialogComponent,
|
MessageWriteDialogComponent,
|
||||||
MessageWriteDialogResult,
|
MessageWriteDialogResult,
|
||||||
|
@ -46,8 +45,7 @@ import {
|
||||||
import {
|
import {
|
||||||
EnvironmentsInfo,
|
EnvironmentsInfo,
|
||||||
KEY_ENVIRONMENTS_INFO,
|
KEY_ENVIRONMENTS_INFO,
|
||||||
KEY_VER_INFO,
|
KEY_VER_INFO
|
||||||
KEY_LOGIN_RES_INFO
|
|
||||||
} from '@app/types';
|
} from '@app/types';
|
||||||
import { MessageBoxComponent } from './left-sidenav/message.component';
|
import { MessageBoxComponent } from './left-sidenav/message.component';
|
||||||
import { environment } from '../../../../environments/environment';
|
import { environment } from '../../../../environments/environment';
|
||||||
|
@ -70,7 +68,7 @@ export enum MainMenu {
|
||||||
export class LeftSideComponent implements OnInit, OnDestroy {
|
export class LeftSideComponent implements OnInit, OnDestroy {
|
||||||
@Output()
|
@Output()
|
||||||
openProfile = new EventEmitter<{
|
openProfile = new EventEmitter<{
|
||||||
userInfo: UserInfo | UserInfoSS | UserInfoF | UserInfoDN;
|
userSeq: number;
|
||||||
openProfileOptions?: OpenProfileOptions;
|
openProfileOptions?: OpenProfileOptions;
|
||||||
}>();
|
}>();
|
||||||
@Output()
|
@Output()
|
||||||
|
@ -264,11 +262,11 @@ export class LeftSideComponent implements OnInit, OnDestroy {
|
||||||
}
|
}
|
||||||
|
|
||||||
onClickOpenProfile(params: {
|
onClickOpenProfile(params: {
|
||||||
userInfo: UserInfo | UserInfoSS | UserInfoF | UserInfoDN;
|
userSeq: number;
|
||||||
openProfileOptions?: OpenProfileOptions;
|
openProfileOptions?: OpenProfileOptions;
|
||||||
}) {
|
}) {
|
||||||
this.openProfile.emit({
|
this.openProfile.emit({
|
||||||
userInfo: params.userInfo,
|
userSeq: params.userSeq,
|
||||||
openProfileOptions: params.openProfileOptions
|
openProfileOptions: params.openProfileOptions
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
|
@ -86,7 +86,7 @@ export class GroupComponent implements OnInit, OnDestroy {
|
||||||
newGroupAndMember = new EventEmitter();
|
newGroupAndMember = new EventEmitter();
|
||||||
@Output()
|
@Output()
|
||||||
openProfile = new EventEmitter<{
|
openProfile = new EventEmitter<{
|
||||||
userInfo: UserInfo | UserInfoSS | UserInfoF | UserInfoDN;
|
userSeq: number;
|
||||||
openProfileOptions?: OpenProfileOptions;
|
openProfileOptions?: OpenProfileOptions;
|
||||||
}>();
|
}>();
|
||||||
|
|
||||||
|
@ -432,7 +432,7 @@ export class GroupComponent implements OnInit, OnDestroy {
|
||||||
switch (menuType) {
|
switch (menuType) {
|
||||||
case 'VIEW_PROFILE':
|
case 'VIEW_PROFILE':
|
||||||
this.openProfile.emit({
|
this.openProfile.emit({
|
||||||
userInfo,
|
userSeq: userInfo.seq,
|
||||||
openProfileOptions: {
|
openProfileOptions: {
|
||||||
useDelBuddybutton:
|
useDelBuddybutton:
|
||||||
!!group &&
|
!!group &&
|
||||||
|
@ -570,11 +570,11 @@ export class GroupComponent implements OnInit, OnDestroy {
|
||||||
}
|
}
|
||||||
|
|
||||||
onClickOpenProfile(
|
onClickOpenProfile(
|
||||||
userInfo: UserInfo | UserInfoSS | UserInfoF | UserInfoDN,
|
userSeq: number,
|
||||||
group: GroupDetailData
|
group: GroupDetailData
|
||||||
) {
|
) {
|
||||||
this.openProfile.emit({
|
this.openProfile.emit({
|
||||||
userInfo,
|
userSeq,
|
||||||
openProfileOptions: {
|
openProfileOptions: {
|
||||||
useDelBuddybutton:
|
useDelBuddybutton:
|
||||||
!!group &&
|
!!group &&
|
||||||
|
|
|
@ -75,7 +75,6 @@ import {
|
||||||
CommonApiService,
|
CommonApiService,
|
||||||
FileTalkSaveRequest,
|
FileTalkSaveRequest,
|
||||||
FileTalkSaveResponse,
|
FileTalkSaveResponse,
|
||||||
TranslationReqRequest,
|
|
||||||
TranslationSaveRequest,
|
TranslationSaveRequest,
|
||||||
TranslationSaveResponse
|
TranslationSaveResponse
|
||||||
} from '@ucap-webmessenger/api-common';
|
} from '@ucap-webmessenger/api-common';
|
||||||
|
@ -117,7 +116,9 @@ import {
|
||||||
})
|
})
|
||||||
export class MessagesComponent implements OnInit, OnDestroy, AfterViewInit {
|
export class MessagesComponent implements OnInit, OnDestroy, AfterViewInit {
|
||||||
@Output()
|
@Output()
|
||||||
openProfile = new EventEmitter<{ userInfo: UserInfo }>();
|
openProfile = new EventEmitter<{
|
||||||
|
userSeq: number;
|
||||||
|
}>();
|
||||||
|
|
||||||
@ViewChild('chatForm', { static: false })
|
@ViewChild('chatForm', { static: false })
|
||||||
private chatForm: UCapUiChatFormComponent;
|
private chatForm: UCapUiChatFormComponent;
|
||||||
|
@ -1322,7 +1323,7 @@ export class MessagesComponent implements OnInit, OnDestroy, AfterViewInit {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
onClickOpenProfile(userInfo: UserInfo) {
|
onClickOpenProfile(userSeq: number) {
|
||||||
if (
|
if (
|
||||||
this.roomInfo.roomType !== RoomType.Allim &&
|
this.roomInfo.roomType !== RoomType.Allim &&
|
||||||
this.roomInfo.roomType !== RoomType.Bot &&
|
this.roomInfo.roomType !== RoomType.Bot &&
|
||||||
|
@ -1330,7 +1331,7 @@ export class MessagesComponent implements OnInit, OnDestroy, AfterViewInit {
|
||||||
this.roomInfo.roomType !== RoomType.Allim_Elephant &&
|
this.roomInfo.roomType !== RoomType.Allim_Elephant &&
|
||||||
this.roomInfo.roomType !== RoomType.Allim_TMS
|
this.roomInfo.roomType !== RoomType.Allim_TMS
|
||||||
) {
|
) {
|
||||||
this.openProfile.emit({ userInfo });
|
this.openProfile.emit({ userSeq });
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -1,11 +1,5 @@
|
||||||
import { Component, OnInit, Input, Output, EventEmitter } from '@angular/core';
|
import { Component, OnInit, Input, Output, EventEmitter } from '@angular/core';
|
||||||
import { RightDrawer } from '@app/types';
|
import { RightDrawer } from '@app/types';
|
||||||
import { UserInfo } from '@ucap-webmessenger/protocol-room';
|
|
||||||
import {
|
|
||||||
UserInfoSS,
|
|
||||||
UserInfoF,
|
|
||||||
UserInfoDN
|
|
||||||
} from '@ucap-webmessenger/protocol-query';
|
|
||||||
|
|
||||||
@Component({
|
@Component({
|
||||||
selector: 'app-layout-messenger-right-drawer',
|
selector: 'app-layout-messenger-right-drawer',
|
||||||
|
@ -18,7 +12,7 @@ export class RightDrawerComponent implements OnInit {
|
||||||
|
|
||||||
@Output()
|
@Output()
|
||||||
openProfile = new EventEmitter<{
|
openProfile = new EventEmitter<{
|
||||||
userInfo: UserInfo | UserInfoSS | UserInfoF | UserInfoDN;
|
userSeq: number;
|
||||||
}>();
|
}>();
|
||||||
@Output()
|
@Output()
|
||||||
closeRightDrawer = new EventEmitter();
|
closeRightDrawer = new EventEmitter();
|
||||||
|
@ -29,8 +23,8 @@ export class RightDrawerComponent implements OnInit {
|
||||||
|
|
||||||
ngOnInit() {}
|
ngOnInit() {}
|
||||||
|
|
||||||
onClickOpenProfile(userInfo: UserInfo | UserInfoSS | UserInfoF | UserInfoDN) {
|
onClickOpenProfile(userSeq: number) {
|
||||||
this.openProfile.emit({ userInfo });
|
this.openProfile.emit({ userSeq });
|
||||||
}
|
}
|
||||||
|
|
||||||
onClickClose() {
|
onClickClose() {
|
||||||
|
|
|
@ -6,7 +6,7 @@
|
||||||
[presence]="getStatusBulkInfo(userInfo) | async"
|
[presence]="getStatusBulkInfo(userInfo) | async"
|
||||||
[sessionVerinfo]="sessionVerinfo"
|
[sessionVerinfo]="sessionVerinfo"
|
||||||
(contextmenu)="onContextMenuRoomUser($event, userInfo)"
|
(contextmenu)="onContextMenuRoomUser($event, userInfo)"
|
||||||
(openProfile)="onClickOpenProfile($event)"
|
(openProfile)="onClickOpenProfile(userInfo.seq)"
|
||||||
>
|
>
|
||||||
</ucap-profile-user-list-item>
|
</ucap-profile-user-list-item>
|
||||||
</div>
|
</div>
|
||||||
|
|
|
@ -49,7 +49,7 @@ import { MatMenuTrigger, MatDialog } from '@angular/material';
|
||||||
})
|
})
|
||||||
export class RoomUserListComponent implements OnInit, OnDestroy {
|
export class RoomUserListComponent implements OnInit, OnDestroy {
|
||||||
@Output()
|
@Output()
|
||||||
openProfile = new EventEmitter<UserInfo>();
|
openProfile = new EventEmitter<number>();
|
||||||
|
|
||||||
@ViewChild('roomUserContextMenuTrigger', { static: true })
|
@ViewChild('roomUserContextMenuTrigger', { static: true })
|
||||||
roomUserContextMenuTrigger: MatMenuTrigger;
|
roomUserContextMenuTrigger: MatMenuTrigger;
|
||||||
|
@ -131,8 +131,8 @@ export class RoomUserListComponent implements OnInit, OnDestroy {
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
onClickOpenProfile(userInfo: UserInfo) {
|
onClickOpenProfile(userSeq: number) {
|
||||||
this.openProfile.emit(userInfo);
|
this.openProfile.emit(userSeq);
|
||||||
}
|
}
|
||||||
|
|
||||||
async onClickAddMember() {
|
async onClickAddMember() {
|
||||||
|
|
|
@ -4,7 +4,120 @@
|
||||||
</div>
|
</div>
|
||||||
<div class="app-layout-native-title-bar-title">DS Talk</div>
|
<div class="app-layout-native-title-bar-title">DS Talk</div>
|
||||||
<div class="app-layout-native-title-bar-spacer"></div>
|
<div class="app-layout-native-title-bar-spacer"></div>
|
||||||
|
<div class="btn-area">
|
||||||
<div *ngIf="!!loginRes" class="app-layout-native-title-bar-link">
|
<div *ngIf="!!loginRes" class="app-layout-native-title-bar-link">
|
||||||
|
<!--s[추가된 전체 웹링크] weblink-->
|
||||||
|
<button
|
||||||
|
mat-icon-button
|
||||||
|
*ngFor="let link of weblink"
|
||||||
|
class="button"
|
||||||
|
[matTooltip]="link.title"
|
||||||
|
matTooltip="웹하드"
|
||||||
|
(click)="onClickWebLink(link)"
|
||||||
|
>
|
||||||
|
<span class="weblink webhard">웹하드</span>
|
||||||
|
</button>
|
||||||
|
<button
|
||||||
|
mat-icon-button
|
||||||
|
*ngFor="let link of weblink"
|
||||||
|
class="button"
|
||||||
|
[matTooltip]="link.title"
|
||||||
|
matTooltip="DSP"
|
||||||
|
(click)="onClickWebLink(link)"
|
||||||
|
>
|
||||||
|
<span class="weblink dsp">DSP</span>
|
||||||
|
</button>
|
||||||
|
<button
|
||||||
|
mat-icon-button
|
||||||
|
*ngFor="let link of weblink"
|
||||||
|
class="button"
|
||||||
|
[matTooltip]="link.title"
|
||||||
|
matTooltip="SMS"
|
||||||
|
(click)="onClickWebLink(link)"
|
||||||
|
>
|
||||||
|
<span class="weblink sms">SMS</span>
|
||||||
|
</button>
|
||||||
|
<button
|
||||||
|
mat-icon-button
|
||||||
|
*ngFor="let link of weblink"
|
||||||
|
class="button"
|
||||||
|
[matTooltip]="link.title"
|
||||||
|
matTooltip="화상회의"
|
||||||
|
(click)="onClickWebLink(link)"
|
||||||
|
>
|
||||||
|
<span class="weblink vc">화상회의</span>
|
||||||
|
</button>
|
||||||
|
<button
|
||||||
|
mat-icon-button
|
||||||
|
*ngFor="let link of weblink"
|
||||||
|
class="button"
|
||||||
|
[matTooltip]="link.title"
|
||||||
|
matTooltip="EP"
|
||||||
|
(click)="onClickWebLink(link)"
|
||||||
|
>
|
||||||
|
<span class="weblink ep">EP</span>
|
||||||
|
</button>
|
||||||
|
<button
|
||||||
|
mat-icon-button
|
||||||
|
*ngFor="let link of weblink"
|
||||||
|
class="button"
|
||||||
|
[matTooltip]="link.title"
|
||||||
|
matTooltip="S&OM"
|
||||||
|
(click)="onClickWebLink(link)"
|
||||||
|
>
|
||||||
|
<span class="weblink S_OM">S&OM</span>
|
||||||
|
</button>
|
||||||
|
<button
|
||||||
|
mat-icon-button
|
||||||
|
*ngFor="let link of weblink"
|
||||||
|
class="button"
|
||||||
|
[matTooltip]="link.title"
|
||||||
|
matTooltip="코끼리"
|
||||||
|
(click)="onClickWebLink(link)"
|
||||||
|
>
|
||||||
|
<span class="weblink elephant">코끼리</span>
|
||||||
|
</button>
|
||||||
|
<button
|
||||||
|
mat-icon-button
|
||||||
|
*ngFor="let link of weblink"
|
||||||
|
class="button"
|
||||||
|
[matTooltip]="link.title"
|
||||||
|
matTooltip="IT서비스"
|
||||||
|
(click)="onClickWebLink(link)"
|
||||||
|
>
|
||||||
|
<span class="weblink it-service">IT</span>
|
||||||
|
</button>
|
||||||
|
<button
|
||||||
|
mat-icon-button
|
||||||
|
*ngFor="let link of weblink"
|
||||||
|
class="button"
|
||||||
|
[matTooltip]="link.title"
|
||||||
|
matTooltip="개인속보"
|
||||||
|
(click)="onClickWebLink(link)"
|
||||||
|
>
|
||||||
|
<span class="weblink Personal-news">NEWS</span>
|
||||||
|
</button>
|
||||||
|
<button
|
||||||
|
mat-icon-button
|
||||||
|
*ngFor="let link of weblink"
|
||||||
|
class="button"
|
||||||
|
[matTooltip]="link.title"
|
||||||
|
matTooltip="메일"
|
||||||
|
(click)="onClickWebLink(link)"
|
||||||
|
>
|
||||||
|
<span class="weblink mail">메일</span>
|
||||||
|
</button>
|
||||||
|
<button
|
||||||
|
mat-icon-button
|
||||||
|
*ngFor="let link of weblink"
|
||||||
|
class="button"
|
||||||
|
[matTooltip]="link.title"
|
||||||
|
matTooltip="결제"
|
||||||
|
(click)="onClickWebLink(link)"
|
||||||
|
>
|
||||||
|
<span class="weblink approved">결제</span>
|
||||||
|
</button>
|
||||||
|
<!--E[추가된 전체 웹링크] weblink-->
|
||||||
<button
|
<button
|
||||||
mat-icon-button
|
mat-icon-button
|
||||||
*ngFor="let link of weblink"
|
*ngFor="let link of weblink"
|
||||||
|
@ -24,7 +137,7 @@
|
||||||
/>
|
/>
|
||||||
</svg>
|
</svg>
|
||||||
</button>
|
</button>
|
||||||
<span class="stroke-bar"></span>
|
|
||||||
<button
|
<button
|
||||||
mat-icon-button
|
mat-icon-button
|
||||||
*ngFor="let link of weblinkBadgeTypes"
|
*ngFor="let link of weblinkBadgeTypes"
|
||||||
|
@ -49,9 +162,6 @@
|
||||||
/>
|
/>
|
||||||
</svg>
|
</svg>
|
||||||
</button>
|
</button>
|
||||||
|
|
||||||
<span class="stroke-bar"></span>
|
|
||||||
|
|
||||||
<button
|
<button
|
||||||
*ngIf="updateInfo$ | async as updateInfo"
|
*ngIf="updateInfo$ | async as updateInfo"
|
||||||
mat-icon-button
|
mat-icon-button
|
||||||
|
@ -77,7 +187,8 @@
|
||||||
></path>
|
></path>
|
||||||
</svg>
|
</svg>
|
||||||
</button>
|
</button>
|
||||||
|
<span class="stroke-bar"></span>
|
||||||
|
<!--S[삭제예정] 마이프로필 설정을 이동
|
||||||
<button
|
<button
|
||||||
mat-icon-button
|
mat-icon-button
|
||||||
class="button app-layout-native-title-bar-setting"
|
class="button app-layout-native-title-bar-setting"
|
||||||
|
@ -113,7 +224,7 @@
|
||||||
stroke-width="1.5"
|
stroke-width="1.5"
|
||||||
stroke-linecap="butt"
|
stroke-linecap="butt"
|
||||||
stroke-linejoin="round"
|
stroke-linejoin="round"
|
||||||
alt="환경설정"
|
matTooltip="환경설정"
|
||||||
>
|
>
|
||||||
<circle cx="12" cy="12" r="3"></circle>
|
<circle cx="12" cy="12" r="3"></circle>
|
||||||
<path
|
<path
|
||||||
|
@ -138,7 +249,7 @@
|
||||||
stroke-width="1.5"
|
stroke-width="1.5"
|
||||||
stroke-linecap="butt"
|
stroke-linecap="butt"
|
||||||
stroke-linejoin="round"
|
stroke-linejoin="round"
|
||||||
alt="로그아웃"
|
matTooltip="로그아웃"
|
||||||
class="stroke-warn-color"
|
class="stroke-warn-color"
|
||||||
>
|
>
|
||||||
<path
|
<path
|
||||||
|
@ -146,14 +257,13 @@
|
||||||
/>
|
/>
|
||||||
</svg>
|
</svg>
|
||||||
</button>
|
</button>
|
||||||
|
E[삭제예정] 마이프로필 설정을 이동-->
|
||||||
<ucap-profile-my-profile-widget
|
<ucap-profile-my-profile-widget
|
||||||
[profileImageRoot]="sessionVerinfo.profileRoot"
|
[profileImageRoot]="sessionVerinfo.profileRoot"
|
||||||
[profileImageFile]="getMyProfileImageWidget()"
|
[profileImageFile]="getMyProfileImageWidget()"
|
||||||
(openProfile)="onClickOpenProfile()"
|
(openProfile)="onClickOpenProfile()"
|
||||||
class="myprofile"
|
class="myprofile"
|
||||||
></ucap-profile-my-profile-widget>
|
></ucap-profile-my-profile-widget>
|
||||||
<span class="stroke-bar"></span>
|
|
||||||
</div>
|
</div>
|
||||||
<div class="app-layout-native-title-bar-actions">
|
<div class="app-layout-native-title-bar-actions">
|
||||||
<button
|
<button
|
||||||
|
@ -248,4 +358,5 @@
|
||||||
</svg>
|
</svg>
|
||||||
</button>
|
</button>
|
||||||
</div>
|
</div>
|
||||||
|
</div>
|
||||||
</mat-toolbar>
|
</mat-toolbar>
|
||||||
|
|
|
@ -27,11 +27,15 @@
|
||||||
.app-layout-native-title-bar-spacer {
|
.app-layout-native-title-bar-spacer {
|
||||||
flex: 1 1 auto;
|
flex: 1 1 auto;
|
||||||
}
|
}
|
||||||
|
.btn-area {
|
||||||
|
display: flex;
|
||||||
|
margin-left: auto;
|
||||||
|
flex-flow: row;
|
||||||
|
justify-items: center;
|
||||||
.app-layout-native-title-bar-link {
|
.app-layout-native-title-bar-link {
|
||||||
align-items: center;
|
align-items: center;
|
||||||
position: relative;
|
position: relative;
|
||||||
|
display: flex;
|
||||||
.stroke-bar {
|
.stroke-bar {
|
||||||
width: 1px;
|
width: 1px;
|
||||||
height: 20px;
|
height: 20px;
|
||||||
|
@ -44,19 +48,49 @@
|
||||||
outline: 0;
|
outline: 0;
|
||||||
cursor: pointer;
|
cursor: pointer;
|
||||||
border: none;
|
border: none;
|
||||||
height: 28px;
|
height: 30px;
|
||||||
min-width: 28px;
|
min-width: 30px;
|
||||||
max-width: 28px;
|
max-width: 30px;
|
||||||
padding: 5px;
|
padding: 3px;
|
||||||
line-height: 10px;
|
line-height: 10px;
|
||||||
border-radius: 0;
|
background-color: #ffffff;
|
||||||
background: transparent;
|
border-radius: 50%;
|
||||||
transition: background 0.2s linear, color 0.2s linear;
|
transition: background 0.2s linear, color 0.2s linear;
|
||||||
text-align: center;
|
text-align: center;
|
||||||
font-size: 10px;
|
font-size: 10px;
|
||||||
vertical-align: middle;
|
vertical-align: middle;
|
||||||
margin-left: 10px;
|
margin-left: 14px;
|
||||||
transform: translateY(-2px);
|
.weblink {
|
||||||
|
display: inline-flex;
|
||||||
|
line-height: 24px;
|
||||||
|
font-size: 12px;
|
||||||
|
font-weight: bold;
|
||||||
|
text-align: center;
|
||||||
|
width: 24px;
|
||||||
|
height: 24px;
|
||||||
|
background-repeat: no-repeat;
|
||||||
|
background-position: 50% 50%;
|
||||||
|
text-indent: -1000000px;
|
||||||
|
justify-content: center;
|
||||||
|
&.dsp {
|
||||||
|
text-indent: 0;
|
||||||
|
}
|
||||||
|
&.sms {
|
||||||
|
text-indent: 0;
|
||||||
|
letter-spacing: -1px;
|
||||||
|
}
|
||||||
|
&.ep,
|
||||||
|
&.it-service {
|
||||||
|
text-indent: 0;
|
||||||
|
font-size: 13px;
|
||||||
|
}
|
||||||
|
&.S_OM,
|
||||||
|
&.Personal-news {
|
||||||
|
text-indent: 0;
|
||||||
|
font-size: 11px;
|
||||||
|
letter-spacing: -1px;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
&.app-layout-native-title-bar-logout,
|
&.app-layout-native-title-bar-logout,
|
||||||
&.app-layout-native-title-bar-setting {
|
&.app-layout-native-title-bar-setting {
|
||||||
|
@ -72,7 +106,6 @@
|
||||||
.app-layout-native-title-bar-actions {
|
.app-layout-native-title-bar-actions {
|
||||||
align-items: center;
|
align-items: center;
|
||||||
position: relative;
|
position: relative;
|
||||||
|
|
||||||
.button {
|
.button {
|
||||||
-webkit-app-region: no-drag;
|
-webkit-app-region: no-drag;
|
||||||
outline: 0;
|
outline: 0;
|
||||||
|
@ -132,3 +165,24 @@
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
}
|
||||||
|
@mixin weblink($color) {
|
||||||
|
$color: rgba($color, 0.999);
|
||||||
|
.webhard {
|
||||||
|
background-image: url("data:image/svg+xml;charset=utf8,%3Csvg xmlns='http://www.w3.org/2000/svg' width='20' height='20' viewBox='0 0 24 24' fill='none' stroke='#{$color}' stroke-width='2' stroke-linecap='round' stroke-linejoin='round' %3E%3Cpath d='M4.5,4.3L1.7,10v5c0,0.9,0.7,1.7,1.7,1.7h13.3c0.9,0,1.7-0.7,1.7-1.7v-5l-2.9-5.7c-0.3-0.6-0.9-0.9-1.5-0.9H6 C5.4,3.3,4.8,3.7,4.5,4.3z'/%3E%3Cline class='st0' x1='5' y1='13.3' x2='5' y2='13.3'/%3E%3Cline class='st0' x1='8.3' y1='13.3' x2='8.3' y2='13.3'/%3E%3C/svg%3E");
|
||||||
|
}
|
||||||
|
.vc {
|
||||||
|
background-image: url("data:image/svg+xml;charset=utf8,%3Csvg xmlns='http://www.w3.org/2000/svg' width='20' height='20' viewBox='0 0 24 24' fill='none' stroke='#{$color}' stroke-width='2' stroke-linecap='round' stroke-linejoin='round' class='feather feather-video'%3E%3Cpolygon points='23 7 16 12 23 17 23 7'%3E%3C/polygon%3E%3Crect x='1' y='5' width='15' height='14' rx='2' ry='2'%3E%3C/rect%3E%3C/svg%3E");
|
||||||
|
}
|
||||||
|
.elephant {
|
||||||
|
background-image: url("data:image/svg+xml;charset=utf8,%3Csvg xmlns='http://www.w3.org/2000/svg' width='20' height='20' viewBox='0 0 24 24' fill='#{$color}' stroke='none' xml:space='preserve'%3E%3Cpath d='M19.1,5c-1,0-2,0.4-2.7,1.1c-1.2-1-2.9-1.5-4.7-1.5c-1.7,0-3.3,0.5-4.5,1.4C6.6,5.3,5.7,5,4.8,5C2.6,5,0.9,6.7,0.9,8.8 c0,1.1,1.1,4.6,2.7,5.7c0.3,0.2,0.7,0.3,1.1,0.3c0.2,0,0.4,0,0.6-0.1c0.5-0.2,0.9-0.4,1.3-0.6c0.6,0.6,1.3,1,2.1,1.4l0.8,1.2 c0.3,0.5,0.5,1.1,0.6,1.7H9.2c-0.7,0-1.2,0.6-1.2,1.2s0.6,1.2,1.2,1.2h0.4c2.5,0,4.6-1.7,5.2-4.1l0.4-1.4c0.7-0.4,1.4-0.8,1.9-1.3 c0.4,0.3,0.9,0.5,1.5,0.8c0.2,0.1,0.4,0.1,0.6,0.1c0.4,0,0.7-0.1,1.1-0.3c1.6-1.1,2.7-4.6,2.7-5.7C22.9,6.7,21.2,5,19.1,5z M5,14.1 c-0.3,0.1-0.7,0.1-1-0.2C2.7,13,1.7,9.8,1.7,8.8c0-1.7,1.4-3.1,3.1-3.1c0.7,0,1.4,0.3,2,0.7C6.4,6.8,6.1,7.1,5.8,7.5 C5.5,7.3,5.1,7.2,4.8,7.2c-1.2,0-2.1,1-2.1,2.1c0,0.6,0.6,2.5,1.5,3.1c0.2,0.1,0.4,0.2,0.6,0.2c0.1,0,0.3,0,0.4-0.1 c0.1,0,0.2-0.1,0.3-0.1c0.2,0.4,0.4,0.8,0.7,1.1C5.8,13.8,5.4,13.9,5,14.1z M5.1,11.8c-0.1,0-0.2,0.1-0.3,0.1 c-0.1,0-0.2,0.1-0.4-0.1c-0.6-0.4-1.2-2-1.2-2.5c0-0.8,0.6-1.4,1.4-1.4C5,7.9,5.2,8,5.4,8.1c-0.3,0.7-0.5,1.4-0.5,2.2 C4.9,10.8,5,11.3,5.1,11.8z M14.7,14.8c-0.1,0-0.2,0.1-0.2,0.2l-0.4,1.6c-0.5,2.1-2.4,3.5-4.5,3.5H9.2c-0.3,0-0.5-0.2-0.5-0.5 c0-0.3,0.2-0.5,0.5-0.5h1.1c0.3,0,0.5-0.2,0.5-0.5c0-0.8-0.2-1.6-0.7-2.3L9.3,15c0-0.1-0.1-0.1-0.2-0.1c-0.8-0.3-1.5-0.8-2.1-1.3 c0,0,0-0.1-0.1-0.1c0,0-0.1-0.1-0.1-0.1c-0.4-0.4-0.7-0.9-0.9-1.4c0,0,0-0.1,0-0.1c-0.2-0.5-0.3-1-0.3-1.5c0-2.8,2.7-5,6.1-5 s6.1,2.3,6.1,5C17.9,12.2,16.7,13.9,14.7,14.8z M18.2,8.3c0.3-0.2,0.6-0.4,0.9-0.4c0.8,0,1.4,0.6,1.4,1.4c0,0.5-0.5,2.1-1.2,2.5 C19.2,12,19.1,12,19,11.9c-0.2-0.1-0.4-0.2-0.6-0.3c0.1-0.4,0.2-0.9,0.2-1.3C18.6,9.6,18.5,8.9,18.2,8.3z M19.8,13.9 c-0.3,0.2-0.7,0.3-1,0.2c-0.5-0.2-0.9-0.4-1.3-0.7c0.3-0.3,0.5-0.7,0.7-1.1c0.2,0.1,0.4,0.2,0.6,0.3c0.1,0.1,0.3,0.1,0.4,0.1 c0.2,0,0.4-0.1,0.6-0.2c0.9-0.6,1.5-2.5,1.5-3.1c0-1.2-1-2.1-2.1-2.1c-0.5,0-0.9,0.2-1.3,0.4c-0.2-0.4-0.5-0.7-0.9-1.1 c0.6-0.6,1.3-0.9,2.1-0.9c1.7,0,3.1,1.4,3.1,3.1C22.2,9.8,21.1,13,19.8,13.9z'/%3E%3Cpath d='M11.5,16.5h1c0.3,0,0.5-0.2,0.5-0.5s-0.2-0.5-0.5-0.5h-1c-0.3,0-0.5,0.2-0.5,0.5S11.2,16.5,11.5,16.5z'/%3E%3Cpath d='M13,17.6H11c-0.3,0-0.5,0.2-0.5,0.5s0.2,0.5,0.5,0.5H13c0.3,0,0.5-0.2,0.5-0.5S13.3,17.6,13,17.6z'/%3E%3Cpath d='M17,12.4c0,0.5-0.4,0.8-0.8,0.8c-0.5,0-0.8-0.4-0.8-0.8s0.4-0.8,0.8-0.8C16.7,11.6,17,12,17,12.4z'/%3E%3Cpath d='M8.5,12.4c0,0.5-0.4,0.8-0.8,0.8c-0.5,0-0.8-0.4-0.8-0.8s0.4-0.8,0.8-0.8C8.1,11.6,8.5,12,8.5,12.4z'/%3E%3C/svg%3E");
|
||||||
|
}
|
||||||
|
.mail {
|
||||||
|
background-image: url("data:image/svg+xml;charset=utf8,%3Csvg xmlns='http://www.w3.org/2000/svg' width='20' height='20' viewBox='0 0 24 24' fill='none' stroke='#{$color}' stroke-width='2' stroke-linecap='round' stroke-linejoin='round' %3E%3Cpath d='M4 4h16c1.1 0 2 .9 2 2v12c0 1.1-.9 2-2 2H4c-1.1 0-2-.9-2-2V6c0-1.1.9-2 2-2z'%3E%3C/path%3E%3Cpolyline points='22,6 12,13 2,6'%3E%3C/polyline%3E%3C/svg%3E");
|
||||||
|
}
|
||||||
|
.approved {
|
||||||
|
background-image: url("data:image/svg+xml;charset=utf8,%3Csvg xmlns='http://www.w3.org/2000/svg' width='20' height='20' viewBox='0 0 24 24' fill='none' stroke='#{$color}' stroke-width='2' stroke-linecap='round' stroke-linejoin='round' %3E%3Cpath d='M20.24 12.24a6 6 0 0 0-8.49-8.49L5 10.5V19h8.5z'%3E%3C/path%3E%3Cline x1='16' y1='8' x2='2' y2='22'%3E%3C/line%3E%3Cline x1='17.5' y1='15' x2='9' y2='15'%3E%3C/line%3E%3C/svg%3E");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
@include weblink(#425888);
|
||||||
|
|
|
@ -16,12 +16,6 @@ import * as MessageStore from '@app/store/messenger/message';
|
||||||
import { Observable, Subscription, of } from 'rxjs';
|
import { Observable, Subscription, of } from 'rxjs';
|
||||||
import { UCAP_NATIVE_SERVICE, NativeService } from '@ucap-webmessenger/native';
|
import { UCAP_NATIVE_SERVICE, NativeService } from '@ucap-webmessenger/native';
|
||||||
|
|
||||||
import { UserInfo } from '@ucap-webmessenger/protocol-sync';
|
|
||||||
import {
|
|
||||||
UserInfoSS,
|
|
||||||
UserInfoF,
|
|
||||||
UserInfoDN
|
|
||||||
} from '@ucap-webmessenger/protocol-query';
|
|
||||||
import { StatusProtocolService } from '@ucap-webmessenger/protocol-status';
|
import { StatusProtocolService } from '@ucap-webmessenger/protocol-status';
|
||||||
import { StatusType, StatusCode } from '@ucap-webmessenger/core';
|
import { StatusType, StatusCode } from '@ucap-webmessenger/core';
|
||||||
import {
|
import {
|
||||||
|
@ -211,14 +205,17 @@ export class MainPageComponent implements OnInit, OnDestroy {
|
||||||
}
|
}
|
||||||
|
|
||||||
onClickOpenProfile(params: {
|
onClickOpenProfile(params: {
|
||||||
userInfo: UserInfo | UserInfoSS | UserInfoF | UserInfoDN;
|
userSeq: number;
|
||||||
openProfileOptions?: OpenProfileOptions;
|
openProfileOptions?: OpenProfileOptions;
|
||||||
}) {
|
}) {
|
||||||
|
if (!params.userSeq || params.userSeq < 0) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
// [GROUP]
|
// [GROUP]
|
||||||
// this.queryProtocolService
|
// this.queryProtocolService
|
||||||
// .dataUser({
|
// .dataUser({
|
||||||
// divCd: 'OPENPROF',
|
// divCd: 'OPENPROF',
|
||||||
// seq: userInfo.seq,
|
// seq: params.userSeq,
|
||||||
// senderCompanyCode: this.loginRes.userInfo.companyCode,
|
// senderCompanyCode: this.loginRes.userInfo.companyCode,
|
||||||
// senderEmployeeType: this.loginRes.userInfo.employeeType
|
// senderEmployeeType: this.loginRes.userInfo.employeeType
|
||||||
// })
|
// })
|
||||||
|
@ -244,7 +241,7 @@ export class MainPageComponent implements OnInit, OnDestroy {
|
||||||
this.daesangProtocolService
|
this.daesangProtocolService
|
||||||
.dataUserDaesang({
|
.dataUserDaesang({
|
||||||
divCd: 'OPENPROF',
|
divCd: 'OPENPROF',
|
||||||
seq: params.userInfo.seq,
|
seq: params.userSeq,
|
||||||
senderCompanyCode: this.loginRes.userInfo.companyCode,
|
senderCompanyCode: this.loginRes.userInfo.companyCode,
|
||||||
senderEmployeeType: this.loginRes.userInfo.employeeType
|
senderEmployeeType: this.loginRes.userInfo.employeeType
|
||||||
})
|
})
|
||||||
|
|
|
@ -17,6 +17,7 @@ import { EventType, Info, EventJson } from '@ucap-webmessenger/protocol-event';
|
||||||
import { VersionInfo2Response } from '@ucap-webmessenger/api-public';
|
import { VersionInfo2Response } from '@ucap-webmessenger/api-public';
|
||||||
import { StatusCode as ApiStatusCode } from '@ucap-webmessenger/api';
|
import { StatusCode as ApiStatusCode } from '@ucap-webmessenger/api';
|
||||||
import { StatusCode } from '@ucap-webmessenger/core';
|
import { StatusCode } from '@ucap-webmessenger/core';
|
||||||
|
import { WorkStatusType } from 'projects/ucap-webmessenger-protocol-status/src/lib/types/work-status.type';
|
||||||
|
|
||||||
@Component({
|
@Component({
|
||||||
selector: 'app-template.page',
|
selector: 'app-template.page',
|
||||||
|
@ -73,7 +74,8 @@ export const status: StatusBulkInfo = {
|
||||||
// 단말상태정보(s)
|
// 단말상태정보(s)
|
||||||
terminalStatus: TerminalStatusInfo.Idle,
|
terminalStatus: TerminalStatusInfo.Idle,
|
||||||
// 단말상태번호(n)
|
// 단말상태번호(n)
|
||||||
terminalStatusNumber: TerminalStatusNumber.Idle
|
terminalStatusNumber: TerminalStatusNumber.Idle,
|
||||||
|
workstatus: WorkStatusType.Work
|
||||||
};
|
};
|
||||||
export const buddyData: UserInfo = {
|
export const buddyData: UserInfo = {
|
||||||
seq: 15,
|
seq: 15,
|
||||||
|
|
|
@ -138,7 +138,7 @@ export class Effects {
|
||||||
map(action => {
|
map(action => {
|
||||||
const roomInfo = action.roomInfo;
|
const roomInfo = action.roomInfo;
|
||||||
let requestCount =
|
let requestCount =
|
||||||
environment.productConfig.CommonSetting.eventRequestDefaultCount;
|
environment.productConfig.CommonSetting.eventRequestInitCount;
|
||||||
|
|
||||||
// 여기까지 읽음 처리..
|
// 여기까지 읽음 처리..
|
||||||
if (!!roomInfo.finalEventSeq && !!roomInfo.lastReadEventSeq) {
|
if (!!roomInfo.finalEventSeq && !!roomInfo.lastReadEventSeq) {
|
||||||
|
@ -146,11 +146,11 @@ export class Effects {
|
||||||
|
|
||||||
// 기존 요청개수보다 요청할 갯수가 적을 경우 기본값.
|
// 기존 요청개수보다 요청할 갯수가 적을 경우 기본값.
|
||||||
if (
|
if (
|
||||||
environment.productConfig.CommonSetting.eventRequestDefaultCount >=
|
environment.productConfig.CommonSetting.eventRequestInitCount >=
|
||||||
requestCount
|
requestCount
|
||||||
) {
|
) {
|
||||||
requestCount =
|
requestCount =
|
||||||
environment.productConfig.CommonSetting.eventRequestDefaultCount;
|
environment.productConfig.CommonSetting.eventRequestInitCount;
|
||||||
} else {
|
} else {
|
||||||
// 여기까지 읽음 처리를 위한 최대 요청 개수 제한.
|
// 여기까지 읽음 처리를 위한 최대 요청 개수 제한.
|
||||||
if (
|
if (
|
||||||
|
|
|
@ -75,6 +75,7 @@ export const environment: Environment = {
|
||||||
maxChatRoomUser: 300,
|
maxChatRoomUser: 300,
|
||||||
masstextLength: 800,
|
masstextLength: 800,
|
||||||
|
|
||||||
|
eventRequestInitCount: 15,
|
||||||
eventRequestDefaultCount: 50,
|
eventRequestDefaultCount: 50,
|
||||||
|
|
||||||
readHereShowMinimumEventCount: 10,
|
readHereShowMinimumEventCount: 10,
|
||||||
|
|
|
@ -75,6 +75,7 @@ export const environment: Environment = {
|
||||||
maxChatRoomUser: 300,
|
maxChatRoomUser: 300,
|
||||||
masstextLength: 800,
|
masstextLength: 800,
|
||||||
|
|
||||||
|
eventRequestInitCount: 30,
|
||||||
eventRequestDefaultCount: 50,
|
eventRequestDefaultCount: 50,
|
||||||
|
|
||||||
readHereShowMinimumEventCount: 10,
|
readHereShowMinimumEventCount: 10,
|
||||||
|
|
|
@ -75,6 +75,7 @@ export const environment: Environment = {
|
||||||
maxChatRoomUser: 300,
|
maxChatRoomUser: 300,
|
||||||
masstextLength: 800,
|
masstextLength: 800,
|
||||||
|
|
||||||
|
eventRequestInitCount: 15,
|
||||||
eventRequestDefaultCount: 50,
|
eventRequestDefaultCount: 50,
|
||||||
|
|
||||||
readHereShowMinimumEventCount: 10,
|
readHereShowMinimumEventCount: 10,
|
||||||
|
|
|
@ -75,6 +75,7 @@ export const environment: Environment = {
|
||||||
maxChatRoomUser: 300,
|
maxChatRoomUser: 300,
|
||||||
masstextLength: 800,
|
masstextLength: 800,
|
||||||
|
|
||||||
|
eventRequestInitCount: 15,
|
||||||
eventRequestDefaultCount: 50,
|
eventRequestDefaultCount: 50,
|
||||||
|
|
||||||
readHereShowMinimumEventCount: 10,
|
readHereShowMinimumEventCount: 10,
|
||||||
|
|
|
@ -82,6 +82,8 @@ export interface Environment {
|
||||||
/** 대용량대화 기준 */
|
/** 대용량대화 기준 */
|
||||||
masstextLength: number;
|
masstextLength: number;
|
||||||
|
|
||||||
|
/** 대화방 초기 로딩 이벤트 갯수 */
|
||||||
|
eventRequestInitCount: number;
|
||||||
/** 대화방 이벤트 조회 개수 */
|
/** 대화방 이벤트 조회 개수 */
|
||||||
eventRequestDefaultCount: number;
|
eventRequestDefaultCount: number;
|
||||||
|
|
||||||
|
|
|
@ -11,6 +11,7 @@ import {
|
||||||
UserInfoSS,
|
UserInfoSS,
|
||||||
DataUserResponse
|
DataUserResponse
|
||||||
} from '@ucap-webmessenger/protocol-query';
|
} from '@ucap-webmessenger/protocol-query';
|
||||||
|
import { WorkStatusType } from 'projects/ucap-webmessenger-protocol-status/src/lib/types/work-status.type';
|
||||||
|
|
||||||
// export interface UserInfoSSForDaesang extends UserInfoSS {
|
// export interface UserInfoSSForDaesang extends UserInfoSS {
|
||||||
// /****** For daesang ******/
|
// /****** For daesang ******/
|
||||||
|
@ -69,7 +70,7 @@ export const decodeDataUser: ProtocolDecoder<DataUserResponse> = (
|
||||||
// [daesang]
|
// [daesang]
|
||||||
companyName: info[29],
|
companyName: info[29],
|
||||||
responsibilities: info[30],
|
responsibilities: info[30],
|
||||||
workstatus: info[31],
|
workstatus: info[31] as WorkStatusType,
|
||||||
job: info[32],
|
job: info[32],
|
||||||
customerInfo: info[33],
|
customerInfo: info[33],
|
||||||
workplace: info[34]
|
workplace: info[34]
|
||||||
|
|
|
@ -1,6 +1,7 @@
|
||||||
import { RoleCode } from '@ucap-webmessenger/protocol-authentication';
|
import { RoleCode } from '@ucap-webmessenger/protocol-authentication';
|
||||||
import { CallMode } from '@ucap-webmessenger/core';
|
import { CallMode } from '@ucap-webmessenger/core';
|
||||||
import { EmployeeType } from '@ucap-webmessenger/protocol-room';
|
import { EmployeeType } from '@ucap-webmessenger/protocol-room';
|
||||||
|
import { WorkStatusType } from 'projects/ucap-webmessenger-protocol-status/src/lib/types/work-status.type';
|
||||||
|
|
||||||
export interface UserInfoSS {
|
export interface UserInfoSS {
|
||||||
/** 사용자SEQ */
|
/** 사용자SEQ */
|
||||||
|
@ -67,7 +68,7 @@ export interface UserInfoSS {
|
||||||
/** 담당업무 */
|
/** 담당업무 */
|
||||||
responsibilities?: string;
|
responsibilities?: string;
|
||||||
/** 업무 상태 */
|
/** 업무 상태 */
|
||||||
workstatus?: string;
|
workstatus?: WorkStatusType;
|
||||||
/** SC직무 */
|
/** SC직무 */
|
||||||
job?: string;
|
job?: string;
|
||||||
/** 거래처정보 */
|
/** 거래처정보 */
|
||||||
|
|
|
@ -3,6 +3,7 @@ import {
|
||||||
TerminalStatusInfo,
|
TerminalStatusInfo,
|
||||||
TerminalStatusNumber
|
TerminalStatusNumber
|
||||||
} from '../types/terminal-status.type';
|
} from '../types/terminal-status.type';
|
||||||
|
import { WorkStatusType } from '../types/work-status.type';
|
||||||
|
|
||||||
export interface StatusBulkInfo extends StatusInfo {
|
export interface StatusBulkInfo extends StatusInfo {
|
||||||
// 사용자SEQ
|
// 사용자SEQ
|
||||||
|
@ -18,4 +19,7 @@ export interface StatusBulkInfo extends StatusInfo {
|
||||||
terminalStatus: TerminalStatusInfo;
|
terminalStatus: TerminalStatusInfo;
|
||||||
/** 단말상태번호(n) */
|
/** 단말상태번호(n) */
|
||||||
terminalStatusNumber: TerminalStatusNumber;
|
terminalStatusNumber: TerminalStatusNumber;
|
||||||
|
|
||||||
|
/** 업무상태정보(s) */
|
||||||
|
workstatus: WorkStatusType;
|
||||||
}
|
}
|
||||||
|
|
|
@ -1,20 +1,24 @@
|
||||||
import { StatusCode } from '@ucap-webmessenger/core';
|
import { StatusCode } from '@ucap-webmessenger/core';
|
||||||
|
import { WorkStatusType } from '../types/work-status.type';
|
||||||
|
|
||||||
export interface StatusInfo {
|
export interface StatusInfo {
|
||||||
// 사용자SEQ
|
/** 사용자SEQ */
|
||||||
userSeq: number;
|
userSeq: number;
|
||||||
// 상태코드(PC)
|
/** 상태코드(PC) */
|
||||||
pcStatus: StatusCode;
|
pcStatus: StatusCode;
|
||||||
// 상태코드(통화)
|
/** 상태코드(통화) */
|
||||||
phoneStatus: StatusCode;
|
phoneStatus: StatusCode;
|
||||||
// 상태코드(모바일)
|
/** 상태코드(모바일) */
|
||||||
mobileStatus: StatusCode;
|
mobileStatus: StatusCode;
|
||||||
// 상태코드(PC화상)
|
/** 상태코드(PC화상) */
|
||||||
conferenceStatus: StatusCode;
|
conferenceStatus: StatusCode;
|
||||||
// 상태메시지
|
/** 상태메시지 */
|
||||||
statusMessage: string;
|
statusMessage: string;
|
||||||
// 상태코드(Mobile화상)
|
/** 상태코드(Mobile화상) */
|
||||||
mobileConferenceStatus: StatusCode;
|
mobileConferenceStatus: StatusCode;
|
||||||
// 상태코드(iMessenger)
|
/** 상태코드(iMessenger) */
|
||||||
imessengerStatus: StatusCode;
|
imessengerStatus: StatusCode;
|
||||||
|
|
||||||
|
/** 업무상태 */
|
||||||
|
workstatus?: WorkStatusType;
|
||||||
}
|
}
|
||||||
|
|
|
@ -17,6 +17,7 @@ import {
|
||||||
} from '../types/terminal-status.type';
|
} from '../types/terminal-status.type';
|
||||||
import { StatusInfo } from '../models/status-info';
|
import { StatusInfo } from '../models/status-info';
|
||||||
import { StatusBulkInfo } from '../models/status-bulk-info';
|
import { StatusBulkInfo } from '../models/status-bulk-info';
|
||||||
|
import { WorkStatusType } from '../types/work-status.type';
|
||||||
|
|
||||||
export interface BulkInfoRequest extends ProtocolRequest {
|
export interface BulkInfoRequest extends ProtocolRequest {
|
||||||
/** DivCD(s) */
|
/** DivCD(s) */
|
||||||
|
@ -72,7 +73,8 @@ export const decodeBulkInfoData: ProtocolDecoder<BulkInfoData> = (
|
||||||
mobileConferenceStatus: info[6] as StatusCode,
|
mobileConferenceStatus: info[6] as StatusCode,
|
||||||
imessengerStatus: info[7] as StatusCode,
|
imessengerStatus: info[7] as StatusCode,
|
||||||
terminalStatus: info[8] as TerminalStatusInfo,
|
terminalStatus: info[8] as TerminalStatusInfo,
|
||||||
terminalStatusNumber: Number(info[9]) as TerminalStatusNumber
|
terminalStatusNumber: Number(info[9]) as TerminalStatusNumber,
|
||||||
|
workstatus: info[10] as WorkStatusType
|
||||||
});
|
});
|
||||||
});
|
});
|
||||||
return decodeProtocolMessage(message, {
|
return decodeProtocolMessage(message, {
|
||||||
|
|
|
@ -12,6 +12,7 @@ import {
|
||||||
} from '@ucap-webmessenger/protocol';
|
} from '@ucap-webmessenger/protocol';
|
||||||
import { StatusType, StatusCode } from '@ucap-webmessenger/core';
|
import { StatusType, StatusCode } from '@ucap-webmessenger/core';
|
||||||
import { StatusInfo } from '../models/status-info';
|
import { StatusInfo } from '../models/status-info';
|
||||||
|
import { WorkStatusType } from '../types/work-status.type';
|
||||||
|
|
||||||
export interface StatusRequest extends ProtocolRequest {
|
export interface StatusRequest extends ProtocolRequest {
|
||||||
// 상태타입(s)
|
// 상태타입(s)
|
||||||
|
@ -74,6 +75,7 @@ export const decodeStatusNotification: ProtocolDecoder<StatusNotification> = (
|
||||||
conferenceStatus: info[4] as StatusCode,
|
conferenceStatus: info[4] as StatusCode,
|
||||||
statusMessage: info[5],
|
statusMessage: info[5],
|
||||||
mobileConferenceStatus: info[6] as StatusCode,
|
mobileConferenceStatus: info[6] as StatusCode,
|
||||||
imessengerStatus: info[7] as StatusCode
|
imessengerStatus: info[7] as StatusCode,
|
||||||
|
workstatus: info[8] as WorkStatusType
|
||||||
} as StatusNotification);
|
} as StatusNotification);
|
||||||
};
|
};
|
||||||
|
|
|
@ -0,0 +1,41 @@
|
||||||
|
export enum WorkStatusType {
|
||||||
|
/** 근무중 */
|
||||||
|
Work = 'W01',
|
||||||
|
|
||||||
|
/** 휴가 */
|
||||||
|
/** 오전 */
|
||||||
|
VacationAM = 'V01',
|
||||||
|
/** 오후 */
|
||||||
|
VacationPM = 'V02',
|
||||||
|
/** 휴가 */
|
||||||
|
VacationAll = 'V03',
|
||||||
|
/** 휴직 */
|
||||||
|
LeaveOfAbsence = 'V04',
|
||||||
|
/** 장기 리프레쉬 */
|
||||||
|
LongtermRefresh = 'V05'
|
||||||
|
// /** 교육 */
|
||||||
|
// /** 오전교육 */
|
||||||
|
// EducationAm = 'E01',
|
||||||
|
// /** 오후교육 */
|
||||||
|
// EducationPm = 'E02',
|
||||||
|
// /** 종일교육 */
|
||||||
|
// EducationAll = 'E03',
|
||||||
|
// /** 장기교육 */
|
||||||
|
// EducationLongterm = 'E04',
|
||||||
|
// /** 휴직 */
|
||||||
|
// /** 일반휴직 */
|
||||||
|
// LTRNormal = 'R01',
|
||||||
|
// /** 육아휴직 */
|
||||||
|
// LTRBaby = 'R02',
|
||||||
|
// /** 기타휴직 */
|
||||||
|
// LTREtc = 'R03',
|
||||||
|
// /** 일반출장 */
|
||||||
|
// /** 출장 */
|
||||||
|
// BusinessTrip = 'T01',
|
||||||
|
// /** 해외출장 */
|
||||||
|
// BusinessTripOverseas = 'T02',
|
||||||
|
// /** 국내출장 */
|
||||||
|
// BusinessTripLocal = 'T03',
|
||||||
|
// /** 장기출장 */
|
||||||
|
// BusinessLongterm = 'T04',
|
||||||
|
}
|
|
@ -120,7 +120,7 @@
|
||||||
[base]="profileImageRoot"
|
[base]="profileImageRoot"
|
||||||
[path]="getUserProfile(message.senderSeq)"
|
[path]="getUserProfile(message.senderSeq)"
|
||||||
[default]="'assets/images/img_nophoto_50.png'"
|
[default]="'assets/images/img_nophoto_50.png'"
|
||||||
(click)="onClickOpenProfile($event, getUerInfo(message.senderSeq))"
|
(click)="onClickOpenProfile($event, message.senderSeq)"
|
||||||
/>
|
/>
|
||||||
<!-- <ucap-ui-imaage
|
<!-- <ucap-ui-imaage
|
||||||
[style]="'width: 50px; height: 50px;'"
|
[style]="'width: 50px; height: 50px;'"
|
||||||
|
|
|
@ -54,7 +54,7 @@ export class MessagesComponent implements OnInit {
|
||||||
translationSimpleview = false;
|
translationSimpleview = false;
|
||||||
|
|
||||||
@Output()
|
@Output()
|
||||||
openProfile = new EventEmitter<UserInfo>();
|
openProfile = new EventEmitter<number>();
|
||||||
@Output()
|
@Output()
|
||||||
moreEvent = new EventEmitter<number>();
|
moreEvent = new EventEmitter<number>();
|
||||||
@Output()
|
@Output()
|
||||||
|
@ -120,18 +120,6 @@ export class MessagesComponent implements OnInit {
|
||||||
}
|
}
|
||||||
return '';
|
return '';
|
||||||
}
|
}
|
||||||
getUerInfo(seq: number): UserInfo {
|
|
||||||
if (!this.userInfos) {
|
|
||||||
return null;
|
|
||||||
}
|
|
||||||
|
|
||||||
const userInfo: UserInfo[] = this.userInfos.filter(
|
|
||||||
user => user.seq === seq
|
|
||||||
);
|
|
||||||
if (!!userInfo && userInfo.length > 0) {
|
|
||||||
return userInfo[0];
|
|
||||||
}
|
|
||||||
}
|
|
||||||
getEventSearched(seq: number): boolean {
|
getEventSearched(seq: number): boolean {
|
||||||
return (
|
return (
|
||||||
!!this.searchedList &&
|
!!this.searchedList &&
|
||||||
|
@ -213,11 +201,11 @@ export class MessagesComponent implements OnInit {
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
onClickOpenProfile(event: MouseEvent, userInfo: UserInfo) {
|
onClickOpenProfile(event: MouseEvent, userSeq: number) {
|
||||||
event.preventDefault();
|
event.preventDefault();
|
||||||
event.stopPropagation();
|
event.stopPropagation();
|
||||||
|
|
||||||
this.openProfile.emit(userInfo);
|
this.openProfile.emit(userSeq);
|
||||||
}
|
}
|
||||||
|
|
||||||
onClickMore(event: any) {
|
onClickMore(event: any) {
|
||||||
|
|
|
@ -10,6 +10,7 @@
|
||||||
</span>
|
</span>
|
||||||
<div class="btn-setting">
|
<div class="btn-setting">
|
||||||
<span class="presence pcOff"></span>
|
<span class="presence pcOff"></span>
|
||||||
|
<button>
|
||||||
<svg
|
<svg
|
||||||
xmlns="http://www.w3.org/2000/svg"
|
xmlns="http://www.w3.org/2000/svg"
|
||||||
width="18"
|
width="18"
|
||||||
|
@ -23,5 +24,6 @@
|
||||||
>
|
>
|
||||||
<path d="M6 9l6 6 6-6" />
|
<path d="M6 9l6 6 6-6" />
|
||||||
</svg>
|
</svg>
|
||||||
|
</button>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
|
|
@ -3,7 +3,6 @@
|
||||||
flex-flow: row;
|
flex-flow: row;
|
||||||
width: 60px;
|
width: 60px;
|
||||||
height: 30px;
|
height: 30px;
|
||||||
bottom: 10px;
|
|
||||||
color: #ffffff;
|
color: #ffffff;
|
||||||
font-size: 11px;
|
font-size: 11px;
|
||||||
justify-items: flex-end;
|
justify-items: flex-end;
|
||||||
|
@ -28,6 +27,7 @@
|
||||||
}
|
}
|
||||||
.btn-setting {
|
.btn-setting {
|
||||||
position: absolute;
|
position: absolute;
|
||||||
|
height: 100%;
|
||||||
bottom: 0;
|
bottom: 0;
|
||||||
display: inline-flex;
|
display: inline-flex;
|
||||||
justify-items: flex-end;
|
justify-items: flex-end;
|
||||||
|
@ -36,14 +36,23 @@
|
||||||
display: inline-block;
|
display: inline-block;
|
||||||
bottom: 0;
|
bottom: 0;
|
||||||
width: 10px;
|
width: 10px;
|
||||||
height: 11px;
|
height: 10px;
|
||||||
border: 1px solid #ffffff;
|
border: 1px solid #ffffff;
|
||||||
align-self: flex-end;
|
align-self: flex-end;
|
||||||
}
|
}
|
||||||
|
button {
|
||||||
|
cursor: pointer;
|
||||||
|
width: 20px;
|
||||||
|
height: 100%;
|
||||||
|
align-items: center;
|
||||||
|
background: none;
|
||||||
|
border: none;
|
||||||
svg {
|
svg {
|
||||||
|
stroke: #ffffff;
|
||||||
&.on {
|
&.on {
|
||||||
transform: rotate(180deg);
|
transform: rotate(180deg);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
}
|
||||||
|
|
|
@ -16,6 +16,7 @@ import { FormControl } from '@angular/forms';
|
||||||
import { SmsUtils } from '@ucap-webmessenger/daesang';
|
import { SmsUtils } from '@ucap-webmessenger/daesang';
|
||||||
import { SessionStorageService } from '@ucap-webmessenger/web-storage';
|
import { SessionStorageService } from '@ucap-webmessenger/web-storage';
|
||||||
import { NativeService, UCAP_NATIVE_SERVICE } from '@ucap-webmessenger/native';
|
import { NativeService, UCAP_NATIVE_SERVICE } from '@ucap-webmessenger/native';
|
||||||
|
import { WorkStatusType } from 'projects/ucap-webmessenger-protocol-status/src/lib/types/work-status.type';
|
||||||
|
|
||||||
@Component({
|
@Component({
|
||||||
selector: 'ucap-profile-profile',
|
selector: 'ucap-profile-profile',
|
||||||
|
@ -138,20 +139,20 @@ export class ProfileComponent implements OnInit {
|
||||||
let workstatus = '';
|
let workstatus = '';
|
||||||
if (!!userInfo && !!userInfo.workstatus) {
|
if (!!userInfo && !!userInfo.workstatus) {
|
||||||
switch (userInfo.workstatus) {
|
switch (userInfo.workstatus) {
|
||||||
case 'V01':
|
case WorkStatusType.VacationAM:
|
||||||
workstatus = '오전휴가';
|
workstatus = '오전';
|
||||||
break;
|
break;
|
||||||
case 'V02':
|
case WorkStatusType.VacationPM:
|
||||||
workstatus = '오후휴가';
|
workstatus = '오후';
|
||||||
break;
|
break;
|
||||||
case 'V03':
|
case WorkStatusType.VacationAll:
|
||||||
workstatus = '종일휴가';
|
workstatus = '휴가';
|
||||||
break;
|
break;
|
||||||
case 'V04':
|
case WorkStatusType.LeaveOfAbsence:
|
||||||
workstatus = '장기휴가';
|
workstatus = '휴직';
|
||||||
break;
|
break;
|
||||||
case 'V05':
|
case WorkStatusType.LongtermRefresh:
|
||||||
workstatus = '장기 리프레쉬';
|
workstatus = '장기';
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -11,7 +11,7 @@
|
||||||
[base]="profileImageRoot"
|
[base]="profileImageRoot"
|
||||||
[path]="userInfo.profileImageFile"
|
[path]="userInfo.profileImageFile"
|
||||||
[default]="'assets/images/img_nophoto_50.png'"
|
[default]="'assets/images/img_nophoto_50.png'"
|
||||||
(click)="onClickOpenProfile($event, userInfo)"
|
(click)="onClickOpenProfile($event, userInfo.seq)"
|
||||||
/>
|
/>
|
||||||
</div>
|
</div>
|
||||||
<span
|
<span
|
||||||
|
|
|
@ -52,9 +52,7 @@ export class UserListItemComponent implements OnInit {
|
||||||
userInfo: UserInfo | UserInfoSS | UserInfoF | UserInfoDN;
|
userInfo: UserInfo | UserInfoSS | UserInfoF | UserInfoDN;
|
||||||
}>();
|
}>();
|
||||||
@Output()
|
@Output()
|
||||||
openProfile = new EventEmitter<
|
openProfile = new EventEmitter<number>();
|
||||||
UserInfo | UserInfoSS | UserInfoF | UserInfoDN
|
|
||||||
>();
|
|
||||||
|
|
||||||
PresenceType = PresenceType;
|
PresenceType = PresenceType;
|
||||||
|
|
||||||
|
@ -108,13 +106,10 @@ export class UserListItemComponent implements OnInit {
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
onClickOpenProfile(
|
onClickOpenProfile(event: MouseEvent, userSeq: number) {
|
||||||
event: MouseEvent,
|
|
||||||
userInfo: UserInfo | UserInfoSS | UserInfoF | UserInfoDN
|
|
||||||
) {
|
|
||||||
event.preventDefault();
|
event.preventDefault();
|
||||||
event.stopPropagation();
|
event.stopPropagation();
|
||||||
|
|
||||||
this.openProfile.emit(userInfo);
|
this.openProfile.emit(userSeq);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in New Issue
Block a user