mirror of
https://github.com/kuaifan/dootask.git
synced 2026-03-17 19:23:26 +00:00
perf: 群组支持修改头像
This commit is contained in:
parent
61aa50f366
commit
10a2120fb8
@ -1417,8 +1417,9 @@ class DialogController extends AbstractController
|
|||||||
* @apiGroup dialog
|
* @apiGroup dialog
|
||||||
* @apiName group__add
|
* @apiName group__add
|
||||||
*
|
*
|
||||||
|
* @apiParam {String} [avatar] 群头像
|
||||||
|
* @apiParam {String} [chat_name] 群名称
|
||||||
* @apiParam {Array} userids 群成员,格式: [userid1, userid2, userid3]
|
* @apiParam {Array} userids 群成员,格式: [userid1, userid2, userid3]
|
||||||
* @apiParam {String} chat_name 群名称
|
|
||||||
*
|
*
|
||||||
* @apiSuccess {Number} ret 返回状态码(1正确、0错误)
|
* @apiSuccess {Number} ret 返回状态码(1正确、0错误)
|
||||||
* @apiSuccess {String} msg 返回信息(错误描述)
|
* @apiSuccess {String} msg 返回信息(错误描述)
|
||||||
@ -1428,8 +1429,10 @@ class DialogController extends AbstractController
|
|||||||
{
|
{
|
||||||
$user = User::auth();
|
$user = User::auth();
|
||||||
//
|
//
|
||||||
$userids = Request::input('userids');
|
$avatar = Request::input('avatar');
|
||||||
|
$avatar = $avatar ? Base::unFillUrl(is_array($avatar) ? $avatar[0]['path'] : $avatar) : '';
|
||||||
$chatName = trim(Request::input('chat_name'));
|
$chatName = trim(Request::input('chat_name'));
|
||||||
|
$userids = Request::input('userids');
|
||||||
//
|
//
|
||||||
if (!is_array($userids)) {
|
if (!is_array($userids)) {
|
||||||
return Base::retError('请选择群成员');
|
return Base::retError('请选择群成员');
|
||||||
@ -1458,6 +1461,10 @@ class DialogController extends AbstractController
|
|||||||
if (empty($dialog)) {
|
if (empty($dialog)) {
|
||||||
return Base::retError('创建群组失败');
|
return Base::retError('创建群组失败');
|
||||||
}
|
}
|
||||||
|
if ($avatar) {
|
||||||
|
$dialog->avatar = $avatar;
|
||||||
|
$dialog->save();
|
||||||
|
}
|
||||||
$data = WebSocketDialog::find($dialog->id)?->formatData($user->userid);
|
$data = WebSocketDialog::find($dialog->id)?->formatData($user->userid);
|
||||||
$userids = array_values(array_diff($userids, [$user->userid]));
|
$userids = array_values(array_diff($userids, [$user->userid]));
|
||||||
$dialog->pushMsg("groupAdd", null, $userids);
|
$dialog->pushMsg("groupAdd", null, $userids);
|
||||||
@ -1473,7 +1480,9 @@ class DialogController extends AbstractController
|
|||||||
* @apiName group__edit
|
* @apiName group__edit
|
||||||
*
|
*
|
||||||
* @apiParam {Number} dialog_id 会话ID
|
* @apiParam {Number} dialog_id 会话ID
|
||||||
* @apiParam {String} chat_name 群名称
|
* @apiParam {String} [avatar] 群头像
|
||||||
|
* @apiParam {String} [chat_name] 群名称
|
||||||
|
* @apiParam {Number} [admin] 系统管理员操作(1:只判断是不是系统管理员,否则判断是否群管理员)
|
||||||
*
|
*
|
||||||
* @apiSuccess {Number} ret 返回状态码(1正确、0错误)
|
* @apiSuccess {Number} ret 返回状态码(1正确、0错误)
|
||||||
* @apiSuccess {String} msg 返回信息(错误描述)
|
* @apiSuccess {String} msg 返回信息(错误描述)
|
||||||
@ -1484,23 +1493,43 @@ class DialogController extends AbstractController
|
|||||||
$user = User::auth();
|
$user = User::auth();
|
||||||
//
|
//
|
||||||
$dialog_id = intval(Request::input('dialog_id'));
|
$dialog_id = intval(Request::input('dialog_id'));
|
||||||
$chatName = trim(Request::input('chat_name'));
|
$admin = intval(Request::input('admin'));
|
||||||
//
|
//
|
||||||
|
if ($admin === 1) {
|
||||||
|
$user->checkAdmin();
|
||||||
|
$dialog = WebSocketDialog::find($dialog_id);
|
||||||
|
if (empty($dialog)) {
|
||||||
|
return Base::retError('对话不存在或已被删除', ['dialog_id' => $dialog_id], -4003);
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
$dialog = WebSocketDialog::checkDialog($dialog_id, true);
|
||||||
|
}
|
||||||
|
//
|
||||||
|
$data = ['id' => $dialog->id];
|
||||||
|
$array = [];
|
||||||
|
if (Request::exists('avatar')) {
|
||||||
|
$avatar = Request::input('avatar');
|
||||||
|
$avatar = $avatar ? Base::unFillUrl(is_array($avatar) ? $avatar[0]['path'] : $avatar) : '';
|
||||||
|
$data['avatar'] = Base::fillUrl($array['avatar'] = $avatar);
|
||||||
|
}
|
||||||
|
if (Request::exists('chat_name') && $dialog->group_type === 'user') {
|
||||||
|
$chatName = trim(Request::input('chat_name'));
|
||||||
if (mb_strlen($chatName) < 2) {
|
if (mb_strlen($chatName) < 2) {
|
||||||
return Base::retError('群名称至少2个字');
|
return Base::retError('群名称至少2个字');
|
||||||
}
|
}
|
||||||
if (mb_strlen($chatName) > 100) {
|
if (mb_strlen($chatName) > 100) {
|
||||||
return Base::retError('群名称最长限制100个字');
|
return Base::retError('群名称最长限制100个字');
|
||||||
}
|
}
|
||||||
|
$data['name'] = $array['name'] = $chatName;
|
||||||
|
}
|
||||||
//
|
//
|
||||||
$dialog = WebSocketDialog::checkDialog($dialog_id, true);
|
if ($array) {
|
||||||
//
|
$dialog->updateInstance($array);
|
||||||
$dialog->name = $chatName;
|
|
||||||
$dialog->save();
|
$dialog->save();
|
||||||
return Base::retSuccess('修改成功', [
|
WebSocketDialogUser::whereDialogId($dialog->id)->update(['updated_at' => Carbon::now()]);
|
||||||
'id' => $dialog->id,
|
}
|
||||||
'name' => $dialog->name,
|
//
|
||||||
]);
|
return Base::retSuccess('修改成功', $data);
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
|||||||
@ -17,6 +17,7 @@ use Illuminate\Database\Eloquent\SoftDeletes;
|
|||||||
* @property string|null $type 对话类型
|
* @property string|null $type 对话类型
|
||||||
* @property string|null $group_type 聊天室类型
|
* @property string|null $group_type 聊天室类型
|
||||||
* @property string|null $name 对话名称
|
* @property string|null $name 对话名称
|
||||||
|
* @property string|null $avatar 头像(群)
|
||||||
* @property string|null $last_at 最后消息时间
|
* @property string|null $last_at 最后消息时间
|
||||||
* @property int|null $owner_id 群主用户ID
|
* @property int|null $owner_id 群主用户ID
|
||||||
* @property \Illuminate\Support\Carbon|null $created_at
|
* @property \Illuminate\Support\Carbon|null $created_at
|
||||||
@ -28,6 +29,7 @@ use Illuminate\Database\Eloquent\SoftDeletes;
|
|||||||
* @method static \Illuminate\Database\Eloquent\Builder|WebSocketDialog newQuery()
|
* @method static \Illuminate\Database\Eloquent\Builder|WebSocketDialog newQuery()
|
||||||
* @method static \Illuminate\Database\Query\Builder|WebSocketDialog onlyTrashed()
|
* @method static \Illuminate\Database\Query\Builder|WebSocketDialog onlyTrashed()
|
||||||
* @method static \Illuminate\Database\Eloquent\Builder|WebSocketDialog query()
|
* @method static \Illuminate\Database\Eloquent\Builder|WebSocketDialog query()
|
||||||
|
* @method static \Illuminate\Database\Eloquent\Builder|WebSocketDialog whereAvatar($value)
|
||||||
* @method static \Illuminate\Database\Eloquent\Builder|WebSocketDialog whereCreatedAt($value)
|
* @method static \Illuminate\Database\Eloquent\Builder|WebSocketDialog whereCreatedAt($value)
|
||||||
* @method static \Illuminate\Database\Eloquent\Builder|WebSocketDialog whereDeletedAt($value)
|
* @method static \Illuminate\Database\Eloquent\Builder|WebSocketDialog whereDeletedAt($value)
|
||||||
* @method static \Illuminate\Database\Eloquent\Builder|WebSocketDialog whereGroupType($value)
|
* @method static \Illuminate\Database\Eloquent\Builder|WebSocketDialog whereGroupType($value)
|
||||||
@ -45,6 +47,16 @@ class WebSocketDialog extends AbstractModel
|
|||||||
{
|
{
|
||||||
use SoftDeletes;
|
use SoftDeletes;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 头像地址
|
||||||
|
* @param $value
|
||||||
|
* @return string
|
||||||
|
*/
|
||||||
|
public function getAvatarAttribute($value)
|
||||||
|
{
|
||||||
|
return $value ? Base::fillUrl($value) : $value;
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @return \Illuminate\Database\Eloquent\Relations\HasMany
|
* @return \Illuminate\Database\Eloquent\Relations\HasMany
|
||||||
*/
|
*/
|
||||||
|
|||||||
@ -0,0 +1,34 @@
|
|||||||
|
<?php
|
||||||
|
|
||||||
|
use Illuminate\Database\Migrations\Migration;
|
||||||
|
use Illuminate\Database\Schema\Blueprint;
|
||||||
|
use Illuminate\Support\Facades\Schema;
|
||||||
|
|
||||||
|
class AddWebSocketDialogsAvatar extends Migration
|
||||||
|
{
|
||||||
|
/**
|
||||||
|
* Run the migrations.
|
||||||
|
*
|
||||||
|
* @return void
|
||||||
|
*/
|
||||||
|
public function up()
|
||||||
|
{
|
||||||
|
Schema::table('web_socket_dialogs', function (Blueprint $table) {
|
||||||
|
if (!Schema::hasColumn('web_socket_dialogs', 'avatar')) {
|
||||||
|
$table->string('avatar', 255)->nullable()->default('')->after('name')->comment('头像(群)');
|
||||||
|
}
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Reverse the migrations.
|
||||||
|
*
|
||||||
|
* @return void
|
||||||
|
*/
|
||||||
|
public function down()
|
||||||
|
{
|
||||||
|
Schema::table('web_socket_dialogs', function (Blueprint $table) {
|
||||||
|
$table->dropColumn("avatar");
|
||||||
|
});
|
||||||
|
}
|
||||||
|
}
|
||||||
@ -20,7 +20,8 @@
|
|||||||
<div class="dialog-block">
|
<div class="dialog-block">
|
||||||
<div class="dialog-avatar">
|
<div class="dialog-avatar">
|
||||||
<template v-if="dialogData.type=='group'">
|
<template v-if="dialogData.type=='group'">
|
||||||
<i v-if="dialogData.group_type=='department'" class="taskfont icon-avatar department"></i>
|
<EAvatar v-if="dialogData.avatar" class="img-avatar" :src="dialogData.avatar" :size="42"></EAvatar>
|
||||||
|
<i v-else-if="dialogData.group_type=='department'" class="taskfont icon-avatar department"></i>
|
||||||
<i v-else-if="dialogData.group_type=='project'" class="taskfont icon-avatar project"></i>
|
<i v-else-if="dialogData.group_type=='project'" class="taskfont icon-avatar project"></i>
|
||||||
<i v-else-if="dialogData.group_type=='task'" class="taskfont icon-avatar task"></i>
|
<i v-else-if="dialogData.group_type=='task'" class="taskfont icon-avatar task"></i>
|
||||||
<Icon v-else class="icon-avatar" type="ios-people" />
|
<Icon v-else class="icon-avatar" type="ios-people" />
|
||||||
@ -72,7 +73,7 @@
|
|||||||
class="dialog-menu"
|
class="dialog-menu"
|
||||||
@command="onDialogMenu">
|
@command="onDialogMenu">
|
||||||
<i class="taskfont dialog-menu-icon"></i>
|
<i class="taskfont dialog-menu-icon"></i>
|
||||||
<EDropdownMenu slot="dropdown">
|
<EDropdownMenu v-slot="dropdown">
|
||||||
<EDropdownItem v-if="dialogData.type === 'user'" command="openCreate">
|
<EDropdownItem v-if="dialogData.type === 'user'" command="openCreate">
|
||||||
<div>{{$L('创建群组')}}</div>
|
<div>{{$L('创建群组')}}</div>
|
||||||
</EDropdownItem>
|
</EDropdownItem>
|
||||||
@ -80,10 +81,18 @@
|
|||||||
<EDropdownItem command="groupInfo">
|
<EDropdownItem command="groupInfo">
|
||||||
<div>{{$L('群组设置')}}</div>
|
<div>{{$L('群组设置')}}</div>
|
||||||
</EDropdownItem>
|
</EDropdownItem>
|
||||||
<EDropdownItem v-if="dialogData.owner_id != userId" command="exit">
|
<template v-if="dialogData.owner_id != userId">
|
||||||
|
<EDropdownItem v-if="dialogData.group_type === 'all' && userIsAdmin" command="avatarAdmin">
|
||||||
|
<div>{{$L('修改头像')}}</div>
|
||||||
|
</EDropdownItem>
|
||||||
|
<EDropdownItem command="exit">
|
||||||
<div style="color:#f00">{{$L('退出群组')}}</div>
|
<div style="color:#f00">{{$L('退出群组')}}</div>
|
||||||
</EDropdownItem>
|
</EDropdownItem>
|
||||||
|
</template>
|
||||||
<template v-else-if="dialogData.group_type === 'user'">
|
<template v-else-if="dialogData.group_type === 'user'">
|
||||||
|
<EDropdownItem command="avatar">
|
||||||
|
<div>{{$L('修改头像')}}</div>
|
||||||
|
</EDropdownItem>
|
||||||
<EDropdownItem command="transfer">
|
<EDropdownItem command="transfer">
|
||||||
<div>{{$L('转让群主')}}</div>
|
<div>{{$L('转让群主')}}</div>
|
||||||
</EDropdownItem>
|
</EDropdownItem>
|
||||||
@ -287,12 +296,15 @@
|
|||||||
:title="$L('创建群组')"
|
:title="$L('创建群组')"
|
||||||
:mask-closable="false">
|
:mask-closable="false">
|
||||||
<Form :model="createGroupData" label-width="auto" @submit.native.prevent>
|
<Form :model="createGroupData" label-width="auto" @submit.native.prevent>
|
||||||
<FormItem prop="userids" :label="$L('群成员')">
|
<FormItem prop="avatar" :label="$L('群头像')">
|
||||||
<UserInput v-model="createGroupData.userids" :uncancelable="createGroupData.uncancelable" :multiple-max="100" show-bot :placeholder="$L('选择项目成员')"/>
|
<ImgUpload v-model="createGroupData.avatar" :num="1" :width="512" :height="512" :whcut="1"/>
|
||||||
</FormItem>
|
</FormItem>
|
||||||
<FormItem prop="chat_name" :label="$L('群名称')">
|
<FormItem prop="chat_name" :label="$L('群名称')">
|
||||||
<Input v-model="createGroupData.chat_name" :placeholder="$L('输入群名称(选填)')"/>
|
<Input v-model="createGroupData.chat_name" :placeholder="$L('输入群名称(选填)')"/>
|
||||||
</FormItem>
|
</FormItem>
|
||||||
|
<FormItem prop="userids" :label="$L('群成员')">
|
||||||
|
<UserInput v-model="createGroupData.userids" :uncancelable="createGroupData.uncancelable" :multiple-max="100" show-bot :placeholder="$L('选择项目成员')"/>
|
||||||
|
</FormItem>
|
||||||
</Form>
|
</Form>
|
||||||
<div slot="footer" class="adaption">
|
<div slot="footer" class="adaption">
|
||||||
<Button type="default" @click="createGroupShow=false">{{$L('取消')}}</Button>
|
<Button type="default" @click="createGroupShow=false">{{$L('取消')}}</Button>
|
||||||
@ -300,6 +312,22 @@
|
|||||||
</div>
|
</div>
|
||||||
</Modal>
|
</Modal>
|
||||||
|
|
||||||
|
<!--修改头像-->
|
||||||
|
<Modal
|
||||||
|
v-model="avatarModifyShow"
|
||||||
|
:title="$L('修改头像')"
|
||||||
|
:mask-closable="false">
|
||||||
|
<Form :model="avatarModifyData" label-width="auto" @submit.native.prevent>
|
||||||
|
<FormItem prop="avatar" :label="$L('群头像')">
|
||||||
|
<ImgUpload v-model="avatarModifyData.avatar" :num="1" :width="512" :height="512" :whcut="1"/>
|
||||||
|
</FormItem>
|
||||||
|
</Form>
|
||||||
|
<div slot="footer" class="adaption">
|
||||||
|
<Button type="default" @click="avatarModifyShow=false">{{$L('取消')}}</Button>
|
||||||
|
<Button type="primary" :loading="avatarModifyLoad > 0" @click="onAvatarModify">{{$L('保存')}}</Button>
|
||||||
|
</div>
|
||||||
|
</Modal>
|
||||||
|
|
||||||
<!-- 转发 -->
|
<!-- 转发 -->
|
||||||
<Modal
|
<Modal
|
||||||
v-model="forwardShow"
|
v-model="forwardShow"
|
||||||
@ -438,10 +466,12 @@ import ChatInput from "./ChatInput";
|
|||||||
import VirtualList from 'vue-virtual-scroll-list-hi'
|
import VirtualList from 'vue-virtual-scroll-list-hi'
|
||||||
import {Store} from "le5le-store";
|
import {Store} from "le5le-store";
|
||||||
import DialogSelect from "./DialogSelect";
|
import DialogSelect from "./DialogSelect";
|
||||||
|
import ImgUpload from "../../../components/ImgUpload.vue";
|
||||||
|
|
||||||
export default {
|
export default {
|
||||||
name: "DialogWrapper",
|
name: "DialogWrapper",
|
||||||
components: {
|
components: {
|
||||||
|
ImgUpload,
|
||||||
DialogSelect,
|
DialogSelect,
|
||||||
DialogRespond,
|
DialogRespond,
|
||||||
DialogItem,
|
DialogItem,
|
||||||
@ -488,6 +518,10 @@ export default {
|
|||||||
createGroupData: {},
|
createGroupData: {},
|
||||||
createGroupLoad: 0,
|
createGroupLoad: 0,
|
||||||
|
|
||||||
|
avatarModifyShow: false,
|
||||||
|
avatarModifyData: {},
|
||||||
|
avatarModifyLoad: 0,
|
||||||
|
|
||||||
forwardShow: false,
|
forwardShow: false,
|
||||||
forwardLoad: false,
|
forwardLoad: false,
|
||||||
forwardData: {
|
forwardData: {
|
||||||
@ -1553,6 +1587,16 @@ export default {
|
|||||||
this.createGroupShow = true
|
this.createGroupShow = true
|
||||||
break;
|
break;
|
||||||
|
|
||||||
|
case "avatar":
|
||||||
|
this.avatarModifyData = {dialog_id: this.dialogData.id, avatar: this.dialogData.avatar}
|
||||||
|
this.avatarModifyShow = true
|
||||||
|
break;
|
||||||
|
|
||||||
|
case "avatarAdmin":
|
||||||
|
this.avatarModifyData = {dialog_id: this.dialogData.id, avatar: this.dialogData.avatar, admin: 1}
|
||||||
|
this.avatarModifyShow = true
|
||||||
|
break;
|
||||||
|
|
||||||
case "groupInfo":
|
case "groupInfo":
|
||||||
this.groupInfoShow = true
|
this.groupInfoShow = true
|
||||||
break;
|
break;
|
||||||
@ -1668,6 +1712,23 @@ export default {
|
|||||||
});
|
});
|
||||||
},
|
},
|
||||||
|
|
||||||
|
onAvatarModify() {
|
||||||
|
this.avatarModifyLoad++;
|
||||||
|
this.$store.dispatch("call", {
|
||||||
|
url: 'dialog/group/edit',
|
||||||
|
data: this.avatarModifyData
|
||||||
|
}).then(({data, msg}) => {
|
||||||
|
$A.messageSuccess(msg);
|
||||||
|
this.avatarModifyShow = false;
|
||||||
|
this.avatarModifyData = {};
|
||||||
|
this.$store.dispatch("saveDialog", data);
|
||||||
|
}).catch(({msg}) => {
|
||||||
|
$A.modalError(msg);
|
||||||
|
}).finally(_ => {
|
||||||
|
this.avatarModifyLoad--;
|
||||||
|
});
|
||||||
|
},
|
||||||
|
|
||||||
onForward(type) {
|
onForward(type) {
|
||||||
if (type === 'open') {
|
if (type === 'open') {
|
||||||
this.forwardData = {
|
this.forwardData = {
|
||||||
|
|||||||
@ -55,7 +55,8 @@
|
|||||||
})"
|
})"
|
||||||
v-longpress="handleLongpress">
|
v-longpress="handleLongpress">
|
||||||
<template v-if="dialog.type=='group'">
|
<template v-if="dialog.type=='group'">
|
||||||
<i v-if="dialog.group_type=='department'" class="taskfont icon-avatar department"></i>
|
<EAvatar v-if="dialog.avatar" class="img-avatar" :src="dialog.avatar" :size="42"></EAvatar>
|
||||||
|
<i v-else-if="dialog.group_type=='department'" class="taskfont icon-avatar department"></i>
|
||||||
<i v-else-if="dialog.group_type=='project'" class="taskfont icon-avatar project"></i>
|
<i v-else-if="dialog.group_type=='project'" class="taskfont icon-avatar project"></i>
|
||||||
<i v-else-if="dialog.group_type=='task'" class="taskfont icon-avatar task"></i>
|
<i v-else-if="dialog.group_type=='task'" class="taskfont icon-avatar task"></i>
|
||||||
<Icon v-else class="icon-avatar" type="ios-people" />
|
<Icon v-else class="icon-avatar" type="ios-people" />
|
||||||
|
|||||||
@ -110,6 +110,7 @@
|
|||||||
flex-shrink: 0;
|
flex-shrink: 0;
|
||||||
margin-right: 12px;
|
margin-right: 12px;
|
||||||
|
|
||||||
|
.img-avatar,
|
||||||
.user-avatar,
|
.user-avatar,
|
||||||
.icon-avatar {
|
.icon-avatar {
|
||||||
width: 42px;
|
width: 42px;
|
||||||
@ -119,6 +120,16 @@
|
|||||||
flex-shrink: 0;
|
flex-shrink: 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
.img-avatar {
|
||||||
|
display: flex;
|
||||||
|
align-items: center;
|
||||||
|
justify-content: center;
|
||||||
|
> img {
|
||||||
|
width: 100%;
|
||||||
|
height: 100%;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
.icon-avatar {
|
.icon-avatar {
|
||||||
display: flex;
|
display: flex;
|
||||||
align-items: center;
|
align-items: center;
|
||||||
@ -160,6 +171,8 @@
|
|||||||
flex-shrink: 0;
|
flex-shrink: 0;
|
||||||
margin: 0 6px 0 0;
|
margin: 0 6px 0 0;
|
||||||
padding: 0 5px;
|
padding: 0 5px;
|
||||||
|
display: flex;
|
||||||
|
align-items: center;
|
||||||
|
|
||||||
&.ivu-tag-success {
|
&.ivu-tag-success {
|
||||||
padding: 0 6px;
|
padding: 0 6px;
|
||||||
@ -168,6 +181,10 @@
|
|||||||
&.after {
|
&.after {
|
||||||
margin: 0 0 0 6px;
|
margin: 0 0 0 6px;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
&.pointer {
|
||||||
|
cursor: pointer;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
.ivu-icon {
|
.ivu-icon {
|
||||||
@ -188,11 +205,13 @@
|
|||||||
}
|
}
|
||||||
|
|
||||||
> em {
|
> em {
|
||||||
|
display: inline-block;
|
||||||
flex-shrink: 0;
|
flex-shrink: 0;
|
||||||
font-style: normal;
|
font-style: normal;
|
||||||
font-size: 17px;
|
font-size: 17px;
|
||||||
font-weight: 500;
|
font-weight: 500;
|
||||||
padding-left: 6px;
|
margin-left: 6px;
|
||||||
|
cursor: pointer;
|
||||||
}
|
}
|
||||||
|
|
||||||
.load {
|
.load {
|
||||||
|
|||||||
10
resources/assets/sass/pages/page-messenger.scss
vendored
10
resources/assets/sass/pages/page-messenger.scss
vendored
@ -117,6 +117,7 @@
|
|||||||
position: relative;
|
position: relative;
|
||||||
cursor: pointer;
|
cursor: pointer;
|
||||||
list-style: none;
|
list-style: none;
|
||||||
|
.img-avatar,
|
||||||
.user-avatar,
|
.user-avatar,
|
||||||
.icon-avatar {
|
.icon-avatar {
|
||||||
width: 42px;
|
width: 42px;
|
||||||
@ -125,6 +126,15 @@
|
|||||||
flex-grow: 0;
|
flex-grow: 0;
|
||||||
flex-shrink: 0;
|
flex-shrink: 0;
|
||||||
}
|
}
|
||||||
|
.img-avatar {
|
||||||
|
display: flex;
|
||||||
|
align-items: center;
|
||||||
|
justify-content: center;
|
||||||
|
> img {
|
||||||
|
width: 100%;
|
||||||
|
height: 100%;
|
||||||
|
}
|
||||||
|
}
|
||||||
.icon-avatar {
|
.icon-avatar {
|
||||||
display: flex;
|
display: flex;
|
||||||
align-items: center;
|
align-items: center;
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user