perf: 优化聊天窗口显示头像

This commit is contained in:
kuaifan 2022-03-31 22:26:47 +08:00
parent 3c8642f30f
commit 8eca06fd5f
5 changed files with 156 additions and 104 deletions

View File

@ -6,23 +6,34 @@
@dragover.prevent="chatDragOver(true, $event)" @dragover.prevent="chatDragOver(true, $event)"
@dragleave.prevent="chatDragOver(false, $event)"> @dragleave.prevent="chatDragOver(false, $event)">
<slot name="head"> <slot name="head">
<div class="dialog-title" :class="{completed:$A.dialogCompleted(dialogData)}"> <div class="dialog-nav">
<div class="main-title"> <div class="dialog-avatar">
<template v-for="tag in $A.dialogTags(dialogData)" v-if="tag.color != 'success'"> <template v-if="dialogData.type=='group'">
<Tag :color="tag.color" :fade="false">{{$L(tag.text)}}</Tag> <i v-if="dialogData.group_type=='project'" class="taskfont icon-avatar project">&#xe6f9;</i>
<i v-else-if="dialogData.group_type=='task'" class="taskfont icon-avatar task" :class="{completed:$A.dialogCompleted(dialogData)}">&#xe6f4;</i>
<Icon v-else class="icon-avatar" type="ios-people" />
</template> </template>
<h2>{{dialogData.name}}</h2> <div v-else-if="dialogData.dialog_user" class="user-avatar"><UserAvatar :userid="dialogData.dialog_user.userid" :size="42"/></div>
<em v-if="peopleNum > 0">({{peopleNum}})</em> <Icon v-else class="icon-avatar" type="md-person" />
<label v-if="dialogData.top_at" class="top-text">{{$L('置顶')}}</label>
</div> </div>
<template v-if="dialogData.type === 'group'"> <div class="dialog-title">
<div v-if="dialogData.group_type === 'project'" class="sub-title pointer" @click="openProject"> <div class="main-title">
{{$L('项目聊天室')}} {{$L('打开项目管理')}} <template v-for="tag in $A.dialogTags(dialogData)" v-if="tag.color != 'success'">
<Tag :color="tag.color" :fade="false">{{$L(tag.text)}}</Tag>
</template>
<h2>{{dialogData.name}}</h2>
<em v-if="peopleNum > 0">({{peopleNum}})</em>
<label v-if="dialogData.top_at" class="top-text">{{$L('置顶')}}</label>
</div> </div>
<div v-else-if="dialogData.group_type === 'task'" class="sub-title pointer" @click="openTask"> <template v-if="dialogData.type === 'group'">
{{$L('任务聊天室')}} {{$L('查看任务详情')}} <div v-if="dialogData.group_type === 'project'" class="sub-title pointer" @click="openProject">
</div> {{$L('项目聊天室')}} {{$L('打开项目管理')}}
</template> </div>
<div v-else-if="dialogData.group_type === 'task'" class="sub-title pointer" @click="openTask">
{{$L('任务聊天室')}} {{$L('查看任务详情')}}
</div>
</template>
</div>
</div> </div>
</slot> </slot>
<ScrollerY <ScrollerY

View File

@ -15,8 +15,10 @@
</li> </li>
</ul> </ul>
</div> </div>
<div class="dialog-title"> <div class="dialog-nav">
<h2>{{$L('群聊')}}</h2> <div class="dialog-title">
<h2>{{$L('群聊')}}</h2>
</div>
</div> </div>
</div> </div>
<div slot="inputBefore" class="dialog-back" @click="onInputBack"> <div slot="inputBefore" class="dialog-back" @click="onInputBack">

View File

@ -9,11 +9,10 @@
background-color: #ffffff; background-color: #ffffff;
z-index: 1; z-index: 1;
.dialog-title { .dialog-nav {
display: flex; display: flex;
flex-direction: column; align-items: center;
justify-content: center; padding: 0 22px;
padding: 0 30px;
height: 68px; height: 68px;
position: relative; position: relative;
@ -27,88 +26,124 @@
background-color: #f4f5f5; background-color: #f4f5f5;
} }
&.completed { .dialog-avatar {
&:after {
content: "\f373";
font-family: Ionicons, serif;
pointer-events: none;
position: absolute;
top: 50%;
right: 24px;
transform: translateY(-50%);
font-size: 52px;
color: #19be6b;
opacity: .2;
z-index: 1;
}
}
.main-title {
display: flex;
align-items: center;
line-height: 22px;
max-width: 100%;
.ivu-tag {
flex-shrink: 0;
margin: 0 6px 0 0;
padding: 0 5px;
&.ivu-tag-success {
padding: 0 6px;
}
}
.ivu-icon {
font-size: 18px;
margin-right: 6px;
&.completed {
color: $primary-color;
}
}
> h2 {
font-size: 17px;
font-weight: 600;
overflow: hidden;
text-overflow: ellipsis;
white-space: nowrap;
}
> em {
flex-shrink: 0;
font-style: normal;
font-size: 17px;
font-weight: 500;
padding-left: 6px;
}
.top-text {
flex-shrink: 0;
width: 40px;
height: 24px;
border-radius: 4px;
margin-left: 10px;
background-color: #8BCF70;
color: #FFFFFF;
text-align: center;
padding-top: 1px
}
}
.sub-title {
flex-shrink: 0; flex-shrink: 0;
font-size: 12px; margin-right: 12px;
line-height: 20px; .user-avatar,
padding-top: 2px; .icon-avatar {
color: #aaaaaa; width: 42px;
height: 42px;
margin: 2px;
flex-grow: 0;
flex-shrink: 0;
}
.icon-avatar {
display: flex;
align-items: center;
justify-content: center;
border-radius: 50%;
font-size: 26px;
background-color: #61B2F9;
color: #ffffff;
&.project {
background-color: #6E99EB;
}
&.task {
background-color: #9B96DF;
font-size: 24px;
}
&.completed {
&:after {
content: "\f373";
font-family: Ionicons, serif;
pointer-events: none;
position: absolute;
top: 50%;
right: 22px;
transform: translateY(-50%);
font-size: 40px;
color: #19be6b;
opacity: .2;
z-index: 1;
}
}
}
}
&.pointer { .dialog-title {
cursor: pointer; flex: 1;
width: 0;
display: flex;
flex-direction: column;
justify-content: center;
&:hover { .main-title {
color: #888888; display: flex;
align-items: center;
line-height: 22px;
max-width: 100%;
.ivu-tag {
flex-shrink: 0;
margin: 0 6px 0 0;
padding: 0 5px;
&.ivu-tag-success {
padding: 0 6px;
}
}
.ivu-icon {
font-size: 18px;
margin-right: 6px;
&.completed {
color: $primary-color;
}
}
> h2 {
font-size: 17px;
font-weight: 600;
overflow: hidden;
text-overflow: ellipsis;
white-space: nowrap;
}
> em {
flex-shrink: 0;
font-style: normal;
font-size: 17px;
font-weight: 500;
padding-left: 6px;
}
.top-text {
flex-shrink: 0;
width: 40px;
height: 24px;
border-radius: 4px;
margin-left: 10px;
background-color: #8BCF70;
color: #FFFFFF;
text-align: center;
padding-top: 1px
}
}
.sub-title {
flex-shrink: 0;
font-size: 12px;
line-height: 20px;
padding-top: 2px;
color: #aaaaaa;
&.pointer {
cursor: pointer;
&:hover {
color: #888888;
}
} }
} }
} }

View File

@ -64,7 +64,7 @@
} }
} }
} }
.dialog-title { .dialog-nav {
padding: 0 20px; padding: 0 20px;
} }
.dialog-footer { .dialog-footer {
@ -82,7 +82,7 @@
margin-top: 16px; margin-top: 16px;
padding: 0 12px; padding: 0 12px;
} }
.dialog-title { .dialog-nav {
padding: 0 12px; padding: 0 12px;
height: 58px; height: 58px;
} }

View File

@ -121,7 +121,7 @@
position: absolute; position: absolute;
bottom: 0; bottom: 0;
right: 12px; right: 12px;
font-size: 32px; font-size: 28px;
color: #19be6b; color: #19be6b;
opacity: .2; opacity: .2;
z-index: 1; z-index: 1;
@ -376,9 +376,13 @@
} }
.messenger-msg { .messenger-msg {
.dialog-wrapper { .dialog-wrapper {
.dialog-title { .dialog-nav {
height: 54px; height: 54px;
align-items: center; justify-content: center;
.dialog-title {
flex: 0;
width: auto;
}
} }
.dialog-footer { .dialog-footer {
position: relative; position: relative;