|
|
@@ -1,5 +1,5 @@
|
|
|
<template>
|
|
|
- <div class="teacher-messages">
|
|
|
+ <div class="teacher-messages admin-page">
|
|
|
<!-- 页面标题区 -->
|
|
|
<div class="page-header">
|
|
|
<div class="header-left">
|
|
|
@@ -7,6 +7,7 @@
|
|
|
<span class="page-desc">与家长的沟通渠道</span>
|
|
|
</div>
|
|
|
<div class="header-actions">
|
|
|
+ <el-input v-model="keyword" placeholder="搜索消息..." prefix-icon="el-icon-search" style="width:200px; margin-right:12px" clearable @keyup.enter.native="handleSearch" @clear="handleSearch" />
|
|
|
<el-button class="mark-read-btn" @click="markAllRead">
|
|
|
<i class="el-icon-check"></i> 全部已读
|
|
|
</el-button>
|
|
|
@@ -26,7 +27,7 @@
|
|
|
<div
|
|
|
class="conversation-item"
|
|
|
:class="{ active: activeConversation === msg.conversationId, unread: msg.unreadCount > 0 }"
|
|
|
- v-for="msg in messages"
|
|
|
+ v-for="msg in filteredMessages"
|
|
|
:key="msg.id"
|
|
|
@click="selectConversation(msg)"
|
|
|
>
|
|
|
@@ -42,7 +43,7 @@
|
|
|
<div class="conversation-preview">{{ msg.preview }}</div>
|
|
|
</div>
|
|
|
</div>
|
|
|
- <div v-if="messages.length === 0" class="empty-conversations">
|
|
|
+ <div v-if="filteredMessages.length === 0" class="empty-conversations">
|
|
|
<i class="el-icon-chat-dot-round"></i>
|
|
|
<p>暂无消息</p>
|
|
|
</div>
|
|
|
@@ -209,6 +210,7 @@ export default {
|
|
|
currentChatName: '',
|
|
|
chatMessages: [],
|
|
|
newMessage: '',
|
|
|
+ keyword: '',
|
|
|
// 家庭信息弹窗
|
|
|
familyInfoVisible: false,
|
|
|
familyInfo: null,
|
|
|
@@ -220,12 +222,21 @@ export default {
|
|
|
computed: {
|
|
|
totalUnread() {
|
|
|
return this.messages.reduce((sum, msg) => sum + (msg.unreadCount || 0), 0)
|
|
|
+ },
|
|
|
+ filteredMessages() {
|
|
|
+ if (!this.keyword) return this.messages
|
|
|
+ var kw = this.keyword.toLowerCase()
|
|
|
+ return this.messages.filter(function(msg) {
|
|
|
+ return (msg.senderName && msg.senderName.toLowerCase().indexOf(kw) !== -1) ||
|
|
|
+ (msg.preview && msg.preview.toLowerCase().indexOf(kw) !== -1)
|
|
|
+ })
|
|
|
}
|
|
|
},
|
|
|
created() {
|
|
|
this.loadMessages()
|
|
|
},
|
|
|
methods: {
|
|
|
+ handleSearch() {},
|
|
|
async loadMessages() {
|
|
|
try {
|
|
|
const res = await getGuideMessages({})
|