导航菜单切换
This commit is contained in:
@@ -3,20 +3,37 @@
|
|||||||
<!-- 左侧导航 -->
|
<!-- 左侧导航 -->
|
||||||
<aside class="app-sidebar">
|
<aside class="app-sidebar">
|
||||||
<div class="avatar my-avatar">
|
<div class="avatar my-avatar">
|
||||||
{{ currentUser.username ? currentUser.username.charAt(0) : '' }}
|
{{ currentUser.username ? currentUser.username.charAt(0) : "" }}
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
<nav class="sidebar-nav" aria-label="功能导航">
|
<nav class="sidebar-nav" aria-label="功能导航">
|
||||||
<button class="nav-item active" type="button" title="消息">💬</button>
|
|
||||||
<button
|
<button
|
||||||
class="nav-item"
|
class="nav-item"
|
||||||
|
:class="{ active: activeMenu === 'messages' }"
|
||||||
|
type="button"
|
||||||
|
title="消息"
|
||||||
|
@click="changeMenu('messages')"
|
||||||
|
>
|
||||||
|
💬
|
||||||
|
</button>
|
||||||
|
<button
|
||||||
|
class="nav-item"
|
||||||
|
:class="{ active: activeMenu === 'contacts' }"
|
||||||
type="button"
|
type="button"
|
||||||
title="联系人"
|
title="联系人"
|
||||||
@click="getContactList()"
|
@click="changeMenu('contacts')"
|
||||||
>
|
>
|
||||||
👥
|
👥
|
||||||
</button>
|
</button>
|
||||||
<button class="nav-item" type="button" title="设置">⚙️</button>
|
<button
|
||||||
|
class="nav-item"
|
||||||
|
:class="{ active: activeMenu === 'settings' }"
|
||||||
|
type="button"
|
||||||
|
title="设置"
|
||||||
|
@click="changeMenu('settings')"
|
||||||
|
>
|
||||||
|
⚙️
|
||||||
|
</button>
|
||||||
</nav>
|
</nav>
|
||||||
|
|
||||||
<div class="sidebar-footer">
|
<div class="sidebar-footer">
|
||||||
@@ -41,14 +58,18 @@
|
|||||||
<input v-model="searchText" type="text" placeholder="搜索联系人" />
|
<input v-model="searchText" type="text" placeholder="搜索联系人" />
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
<!-- 最近联系人列表 -->
|
<!-- 最近消息列表 -->
|
||||||
<div class="message-list">
|
<div
|
||||||
|
class="message-list"
|
||||||
|
:class="activeMenu === 'messages' ? 'active' : ''"
|
||||||
|
>
|
||||||
<div
|
<div
|
||||||
v-for="contact in filteredContacts"
|
v-for="contact in filteredContacts"
|
||||||
:key="contact.contactId"
|
:key="contact.contactId"
|
||||||
class="contact-item"
|
class="contact-item"
|
||||||
:class="{
|
:class="{
|
||||||
active: currentContact && currentContact.contactId === contact.contactId,
|
active:
|
||||||
|
currentContact && currentContact.contactId === contact.contactId,
|
||||||
}"
|
}"
|
||||||
@click="selectContact(contact)"
|
@click="selectContact(contact)"
|
||||||
>
|
>
|
||||||
@@ -72,6 +93,28 @@
|
|||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
|
<!-- 联系人列表 -->
|
||||||
|
<div
|
||||||
|
class="message-list"
|
||||||
|
:class="activeMenu === 'contacts' ? 'active' : ''"
|
||||||
|
>
|
||||||
|
<div
|
||||||
|
v-for="contact in contactList"
|
||||||
|
:key="contact.contactId"
|
||||||
|
class="contact-item"
|
||||||
|
@click="selectContact(contact)"
|
||||||
|
>
|
||||||
|
<div class="avatar">
|
||||||
|
{{ contact.contactName.charAt(0) }}
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<div class="contact-info">
|
||||||
|
<div class="contact-name">
|
||||||
|
{{ contact.contactName }}
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
<!-- 右侧聊天区域 -->
|
<!-- 右侧聊天区域 -->
|
||||||
@@ -102,7 +145,11 @@
|
|||||||
</div>
|
</div>
|
||||||
|
|
||||||
<!-- 消息区域 -->
|
<!-- 消息区域 -->
|
||||||
<div ref="messageList" class="message-list">
|
<div
|
||||||
|
ref="messageList"
|
||||||
|
class="message-list"
|
||||||
|
:class="activeMenu === 'messages' ? 'active' : ''"
|
||||||
|
>
|
||||||
<div
|
<div
|
||||||
v-for="message in currentMessages"
|
v-for="message in currentMessages"
|
||||||
:key="message.id"
|
:key="message.id"
|
||||||
@@ -137,6 +184,14 @@
|
|||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
|
<div
|
||||||
|
ref="messageList"
|
||||||
|
class="message-list"
|
||||||
|
:class="activeMenu === 'contacts' ? 'empty' : ''"
|
||||||
|
>
|
||||||
|
<div class="empty-content">💬</div>
|
||||||
|
</div>
|
||||||
|
|
||||||
<!-- 输入区域 -->
|
<!-- 输入区域 -->
|
||||||
<div class="input-panel">
|
<div class="input-panel">
|
||||||
<div class="toolbar">
|
<div class="toolbar">
|
||||||
@@ -175,18 +230,20 @@ export default {
|
|||||||
|
|
||||||
data() {
|
data() {
|
||||||
return {
|
return {
|
||||||
|
// 当前用户
|
||||||
currentUser: {},
|
currentUser: {},
|
||||||
searchText: "",
|
|
||||||
messageText: "",
|
|
||||||
|
|
||||||
// 联系人
|
// 联系人
|
||||||
contactList: [],
|
contactList: [],
|
||||||
|
|
||||||
// 当前聊天联系人
|
// 当前聊天联系人
|
||||||
currentContact: null,
|
currentContact: null,
|
||||||
|
|
||||||
// 聊天消息
|
// 聊天消息
|
||||||
groupedMessages: {},
|
groupedMessages: {},
|
||||||
|
// 搜索联系人
|
||||||
|
searchText: "",
|
||||||
|
// 输入的消息内容
|
||||||
|
messageText: "",
|
||||||
|
// 当前选中的菜单
|
||||||
|
activeMenu: "messages",
|
||||||
};
|
};
|
||||||
},
|
},
|
||||||
|
|
||||||
@@ -265,7 +322,7 @@ export default {
|
|||||||
});
|
});
|
||||||
});
|
});
|
||||||
this.groupedMessages = groupedMessages;
|
this.groupedMessages = groupedMessages;
|
||||||
console.log("groupedMessages", groupedMessages)
|
console.log("groupedMessages", groupedMessages);
|
||||||
})
|
})
|
||||||
.catch((error) => {
|
.catch((error) => {
|
||||||
console.error(error);
|
console.error(error);
|
||||||
@@ -287,7 +344,9 @@ export default {
|
|||||||
this.$message.error("获取联系人信息失败");
|
this.$message.error("获取联系人信息失败");
|
||||||
});
|
});
|
||||||
},
|
},
|
||||||
|
changeMenu(menu) {
|
||||||
|
this.activeMenu = menu;
|
||||||
|
},
|
||||||
// 选择联系人
|
// 选择联系人
|
||||||
selectContact(contact) {
|
selectContact(contact) {
|
||||||
this.currentContact = contact;
|
this.currentContact = contact;
|
||||||
@@ -621,10 +680,30 @@ export default {
|
|||||||
font-size: 50px;
|
font-size: 50px;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
.empty-content {
|
||||||
|
margin-top: 15px;
|
||||||
|
font-size: 50px;
|
||||||
|
color: #999;
|
||||||
|
height: 100%;
|
||||||
|
display: flex;
|
||||||
|
align-items: center;
|
||||||
|
justify-content: center;
|
||||||
|
}
|
||||||
|
|
||||||
.message-list {
|
.message-list {
|
||||||
flex: 1;
|
flex: 1;
|
||||||
padding: 25px 35px;
|
padding: 25px 35px;
|
||||||
overflow-y: auto;
|
overflow-y: auto;
|
||||||
|
display: none;
|
||||||
|
}
|
||||||
|
|
||||||
|
.message-list.active {
|
||||||
|
display: block;
|
||||||
|
}
|
||||||
|
|
||||||
|
.message-list.empty {
|
||||||
|
display: block;
|
||||||
|
height: 100%;
|
||||||
}
|
}
|
||||||
|
|
||||||
.message-row {
|
.message-row {
|
||||||
|
|||||||
Reference in New Issue
Block a user