feat: 学员端调整页面, 接入部分接口
This commit is contained in:
parent
a5bb4de1fe
commit
a55bf916c2
BIN
public/images/profile/default-avatar.png
Normal file
BIN
public/images/profile/default-avatar.png
Normal file
Binary file not shown.
After Width: | Height: | Size: 4.5 KiB |
@ -451,6 +451,60 @@ class MessageApi {
|
|||||||
}
|
}
|
||||||
})
|
})
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 获取我的会话列表
|
||||||
|
* @returns Promise<ApiResponse<any>>
|
||||||
|
*/
|
||||||
|
async getMyChats(): Promise<ApiResponse<any>> {
|
||||||
|
return request({
|
||||||
|
url: '/aiol/aiolChat/my_chats',
|
||||||
|
method: 'GET'
|
||||||
|
})
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 查询会话消息
|
||||||
|
* @param chatId 会话ID
|
||||||
|
* @returns Promise<ApiResponse<any>>
|
||||||
|
*/
|
||||||
|
async getChatMessages(chatId: string): Promise<ApiResponse<any>> {
|
||||||
|
return request({
|
||||||
|
url: `/aiol/aiolChat/${chatId}/messages`,
|
||||||
|
method: 'GET'
|
||||||
|
})
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 发送消息
|
||||||
|
* @param data 消息数据
|
||||||
|
* @returns Promise<ApiResponse<any>>
|
||||||
|
*/
|
||||||
|
async sendMessage(data: {
|
||||||
|
chat_id: string
|
||||||
|
content: string
|
||||||
|
message_type: string
|
||||||
|
file_url?: string
|
||||||
|
}): Promise<ApiResponse<any>> {
|
||||||
|
return request({
|
||||||
|
url: '/aiol/aiolChatMessage/send',
|
||||||
|
method: 'POST',
|
||||||
|
data
|
||||||
|
})
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 更新最后读取消息ID
|
||||||
|
* @param chatId 会话ID
|
||||||
|
* @param messageId 消息ID
|
||||||
|
* @returns Promise<ApiResponse<any>>
|
||||||
|
*/
|
||||||
|
async updateLastReadMessage(chatId: string, messageId: string): Promise<ApiResponse<any>> {
|
||||||
|
return request({
|
||||||
|
url: `/aiol/aiolChat/${chatId}/update_last_read/${messageId}`,
|
||||||
|
method: 'POST'
|
||||||
|
})
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
export default new MessageApi()
|
export default new MessageApi()
|
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
@ -416,10 +416,10 @@
|
|||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
<div class="modal-actions">
|
<div class="modal-actions">
|
||||||
<button v-if="!selectedMember?.isTeacher" @click="handleMuteMember" class="modal-btn mute-btn"
|
<!-- <button v-if="!selectedMember?.isTeacher" @click="handleMuteMember" class="modal-btn mute-btn"
|
||||||
:disabled="isMuteLoading">
|
:disabled="isMuteLoading">
|
||||||
{{ selectedMember?.izMuted === 1 ? '解除禁言' : '禁言' }}
|
{{ selectedMember?.izMuted === 1 ? '解除禁言' : '禁言' }}
|
||||||
</button>
|
</button> -->
|
||||||
<!-- <button v-if="!selectedMember?.isTeacher" @click="handleRemoveMember" class="modal-btn remove-btn"
|
<!-- <button v-if="!selectedMember?.isTeacher" @click="handleRemoveMember" class="modal-btn remove-btn"
|
||||||
:disabled="isMuteLoading">
|
:disabled="isMuteLoading">
|
||||||
移除群聊
|
移除群聊
|
||||||
@ -1035,43 +1035,43 @@ const closeMemberModal = () => {
|
|||||||
}
|
}
|
||||||
|
|
||||||
// 处理禁言/解除禁言成员
|
// 处理禁言/解除禁言成员
|
||||||
const handleMuteMember = async () => {
|
// const handleMuteMember = async () => {
|
||||||
if (!activeContactId.value || !selectedMember.value) return
|
// if (!activeContactId.value || !selectedMember.value) return
|
||||||
|
|
||||||
isMuteLoading.value = true
|
// isMuteLoading.value = true
|
||||||
|
|
||||||
try {
|
// try {
|
||||||
const member = selectedMember.value
|
// const member = selectedMember.value
|
||||||
const isCurrentlyMuted = member.izMuted === 1
|
// const isCurrentlyMuted = member.izMuted === 1
|
||||||
|
|
||||||
if (isCurrentlyMuted) {
|
// if (isCurrentlyMuted) {
|
||||||
// 解除禁言
|
// // 解除禁言
|
||||||
console.log('🔓 解除禁言:', { chatId: activeContactId.value, userId: member.id, memberName: member.realname })
|
// console.log('🔓 解除禁言:', { chatId: activeContactId.value, userId: member.id, memberName: member.realname })
|
||||||
await ChatApi.unmuteMember(activeContactId.value, member.id)
|
// await ChatApi.unmuteMember(activeContactId.value, member.id)
|
||||||
message.success(`已解除 ${member.realname} 的禁言`)
|
// message.success(`已解除 ${member.realname} 的禁言`)
|
||||||
|
|
||||||
// 更新本地状态
|
// // 更新本地状态
|
||||||
member.izMuted = 0
|
// member.izMuted = 0
|
||||||
} else {
|
// } else {
|
||||||
// 禁言
|
// // 禁言
|
||||||
console.log('🔒 禁言用户:', { chatId: activeContactId.value, userId: member.id, memberName: member.realname })
|
// console.log('🔒 禁言用户:', { chatId: activeContactId.value, userId: member.id, memberName: member.realname })
|
||||||
await ChatApi.muteMember(activeContactId.value, member.id)
|
// await ChatApi.muteMember(activeContactId.value, member.id)
|
||||||
message.success(`已禁言 ${member.realname}`)
|
// message.success(`已禁言 ${member.realname}`)
|
||||||
|
|
||||||
// 更新本地状态
|
// // 更新本地状态
|
||||||
member.izMuted = 1
|
// member.izMuted = 1
|
||||||
}
|
// }
|
||||||
|
|
||||||
// 关闭弹框
|
// // 关闭弹框
|
||||||
closeMemberModal()
|
// closeMemberModal()
|
||||||
|
|
||||||
} catch (error) {
|
// } catch (error) {
|
||||||
console.error('❌ 禁言操作失败:', error)
|
// console.error('❌ 禁言操作失败:', error)
|
||||||
message.error('操作失败,请重试')
|
// message.error('操作失败,请重试')
|
||||||
} finally {
|
// } finally {
|
||||||
isMuteLoading.value = false
|
// isMuteLoading.value = false
|
||||||
}
|
// }
|
||||||
}
|
// }
|
||||||
|
|
||||||
|
|
||||||
// 处理当前用户对群聊的免打扰设置
|
// 处理当前用户对群聊的免打扰设置
|
||||||
@ -1240,7 +1240,6 @@ const loadMessages = async (chatId: string) => {
|
|||||||
// 转换消息并添加时间分组信息
|
// 转换消息并添加时间分组信息
|
||||||
const processedMessages: Message[] = []
|
const processedMessages: Message[] = []
|
||||||
let lastMessageTime: Date | null = null
|
let lastMessageTime: Date | null = null
|
||||||
let lastSenderId: string | null = null
|
|
||||||
|
|
||||||
sortedMessages.forEach((msg: any) => {
|
sortedMessages.forEach((msg: any) => {
|
||||||
// 根据messageType数字判断消息类型:0=文本,1=图片,2=文件
|
// 根据messageType数字判断消息类型:0=文本,1=图片,2=文件
|
||||||
@ -1261,9 +1260,6 @@ const loadMessages = async (chatId: string) => {
|
|||||||
const timeDiff = lastMessageTime ? currentMessageTime.getTime() - lastMessageTime.getTime() : Infinity
|
const timeDiff = lastMessageTime ? currentMessageTime.getTime() - lastMessageTime.getTime() : Infinity
|
||||||
const shouldShowTime = !lastMessageTime || timeDiff > 5 * 60 * 1000 // 5分钟间隔
|
const shouldShowTime = !lastMessageTime || timeDiff > 5 * 60 * 1000 // 5分钟间隔
|
||||||
|
|
||||||
// 判断是否与上一条消息是同一人发送
|
|
||||||
const isSameSender = lastSenderId === messageSenderId
|
|
||||||
|
|
||||||
// 对于文件消息,从URL中提取文件名
|
// 对于文件消息,从URL中提取文件名
|
||||||
let fileName = msg.fileName
|
let fileName = msg.fileName
|
||||||
let fileUrl = msg.fileUrl
|
let fileUrl = msg.fileUrl
|
||||||
@ -1302,14 +1298,13 @@ const loadMessages = async (chatId: string) => {
|
|||||||
fileType: fileType,
|
fileType: fileType,
|
||||||
// 添加时间分组相关字段
|
// 添加时间分组相关字段
|
||||||
showTime: shouldShowTime,
|
showTime: shouldShowTime,
|
||||||
showSender: !isSameSender || shouldShowTime // 不同发送者或需要显示时间时显示发送者
|
showSender: !isOwnMessage // 所有别人的消息都显示发送者姓名
|
||||||
}
|
}
|
||||||
|
|
||||||
processedMessages.push(message)
|
processedMessages.push(message)
|
||||||
|
|
||||||
// 更新状态
|
// 更新状态
|
||||||
lastMessageTime = currentMessageTime
|
lastMessageTime = currentMessageTime
|
||||||
lastSenderId = messageSenderId
|
|
||||||
})
|
})
|
||||||
|
|
||||||
messages.value = processedMessages
|
messages.value = processedMessages
|
||||||
|
Loading…
x
Reference in New Issue
Block a user