|
@@ -64,16 +64,15 @@
|
|
|
import V3Emoji from '../../../../components/V3Emoji.vue'
|
|
|
import {computed, defineComponent, reactive, ref, toRefs, watch, nextTick, onUnmounted} from "vue";
|
|
|
import Client from "../../../../utils/client";
|
|
|
-import GroupClient from "../../../../utils/groupClient";
|
|
|
import {
|
|
|
messageList,
|
|
|
sendMessageToUser,
|
|
|
sendMessageToGroup,
|
|
|
deleteFriend,
|
|
|
- deleteExitGroup, creatZoom
|
|
|
+ deleteExitGroup, creatZoom, deleteMessage
|
|
|
} from "../../../../api";
|
|
|
import {useStore} from "vuex";
|
|
|
-import {Obj, StrObj, StrNumObj} from "../../../../interface";
|
|
|
+import {Obj, StrObj} from "../../../../interface";
|
|
|
import {formatDateTime} from "../../../../utils"
|
|
|
import EmojiData from '../../../../assets/emojidata/emoji-data.json';
|
|
|
import RE from '../../../../utils/regExp'
|
|
@@ -99,6 +98,7 @@ interface MessageObj {
|
|
|
createdAt: string,
|
|
|
fromUserId: number,
|
|
|
fromUsername: number,
|
|
|
+ id: number,
|
|
|
messageType: number,
|
|
|
to: number
|
|
|
}
|
|
@@ -128,10 +128,18 @@ export default defineComponent({
|
|
|
client: null,
|
|
|
showPopover: false,
|
|
|
actions: {
|
|
|
- 1: [{value: 'createLink', text: '创建会议链接'}, {value: 'deleteFriend', text: '删除好友'}],
|
|
|
- 2: [{value: 'createLink', text: '创建会议链接'}, {value: 'exitGroup', text: '离开群'}],
|
|
|
+ 1: [
|
|
|
+ {value: 'createLink', text: '创建会议链接'},
|
|
|
+ {value: 'deleteMessage', text: '删除聊天记录'},
|
|
|
+ {value: 'deleteFriend', text: '删除好友'},
|
|
|
+ ],
|
|
|
+ 2: [
|
|
|
+ {value: 'createLink', text: '创建会议链接'},
|
|
|
+ {value: 'deleteMessage', text: '删除聊天记录'},
|
|
|
+ {value: 'exitGroup', text: '离开群'},
|
|
|
+ ],
|
|
|
},
|
|
|
- currentAction: {},
|
|
|
+ currentAction: {}
|
|
|
})
|
|
|
|
|
|
const optionsName = {
|
|
@@ -174,9 +182,7 @@ export default defineComponent({
|
|
|
ToUsername: store.state.chatUserInfo.friendName,
|
|
|
page: state.page
|
|
|
}).then(({data}) => {
|
|
|
- if (data === null) {
|
|
|
- data = []
|
|
|
- }
|
|
|
+ data = data || []
|
|
|
if (data.length < 20) {
|
|
|
state.isFinished = true;
|
|
|
}
|
|
@@ -226,7 +232,8 @@ export default defineComponent({
|
|
|
})
|
|
|
|
|
|
// @ts-ignore
|
|
|
- state.client = new Client({ //这里是私聊
|
|
|
+ new Client({ //这里是私聊
|
|
|
+ userId: store.state.userInfo.id,
|
|
|
notify: function (data: string) {
|
|
|
const msg = JSON.parse(data)
|
|
|
if (store.state.chatUserInfo.friendId === msg.fromUserId) {
|
|
@@ -241,27 +248,31 @@ export default defineComponent({
|
|
|
}
|
|
|
})
|
|
|
|
|
|
- watch(() => store.state.userList, val => {
|
|
|
- val.forEach((item: StrNumObj) => {
|
|
|
- if (item.isGroup === 2) {
|
|
|
- // @ts-ignore
|
|
|
- new GroupClient({ //这里是群聊
|
|
|
- friendId: item.friendId,
|
|
|
- notify: function (data: string) {
|
|
|
- const msg = JSON.parse(data)
|
|
|
- if (store.state.userInfo.id !== msg.fromUserId) {
|
|
|
- if (store.state.chatUserInfo.friendId === msg.to) {
|
|
|
- state.messageList.push(msg)
|
|
|
- nextTick(() => {
|
|
|
- scrollToBottom()
|
|
|
- })
|
|
|
- } else {
|
|
|
- store.commit('setNotReadMessage', msg.to)
|
|
|
- store.commit('hasNotReadMsgUserSort')
|
|
|
- }
|
|
|
- }
|
|
|
+ const groupClient: Obj = {}
|
|
|
+ watch(() => store.state.chatUserInfo, val => {
|
|
|
+ // isGroup:1是私聊,2是群聊
|
|
|
+ if (val.isGroup !== 2) {
|
|
|
+ return;
|
|
|
+ }
|
|
|
+ if (groupClient[val.friendId]) {
|
|
|
+ return
|
|
|
+ }
|
|
|
+ // @ts-ignore
|
|
|
+ groupClient[val.friendId] = new Client({ // 这里是群聊
|
|
|
+ friendId: val.friendId,
|
|
|
+ notify: function (data: string) {
|
|
|
+ const msg = JSON.parse(data)
|
|
|
+ if (store.state.userInfo.id !== msg.fromUserId) {
|
|
|
+ if (store.state.chatUserInfo.friendId === msg.to) {
|
|
|
+ state.messageList.push(msg)
|
|
|
+ nextTick(() => {
|
|
|
+ scrollToBottom()
|
|
|
+ })
|
|
|
+ } else {
|
|
|
+ store.commit('setNotReadMessage', msg.to)
|
|
|
+ store.commit('hasNotReadMsgUserSort')
|
|
|
}
|
|
|
- })
|
|
|
+ }
|
|
|
}
|
|
|
})
|
|
|
})
|
|
@@ -277,7 +288,8 @@ export default defineComponent({
|
|
|
messageType: store.state.chatUserInfo.isGroup,
|
|
|
content,
|
|
|
contentType: 1,
|
|
|
- createdAt: new Date().toJSON()
|
|
|
+ createdAt: new Date().toJSON(),
|
|
|
+ id: 0
|
|
|
}
|
|
|
state.message = ''
|
|
|
state.messageList.push(data)
|
|
@@ -303,6 +315,43 @@ export default defineComponent({
|
|
|
const selectAction = async (action: StrObj) => {
|
|
|
let chatUserInfo = store.state.chatUserInfo
|
|
|
let userInfo = store.state.userInfo
|
|
|
+ if (action.value === 'createLink') {
|
|
|
+ let {data} = await creatZoom({zoomName: store.state.userInfo.username})
|
|
|
+ let message = window.location.origin + '/#/zoomLoading?uuid=' + data.uuid
|
|
|
+ Dialog.confirm({
|
|
|
+ title: '会议链接创建成功',
|
|
|
+ message,
|
|
|
+ cancelButtonText: '复制链接',
|
|
|
+ confirmButtonText: '发送链接'
|
|
|
+ }).then(() => {
|
|
|
+ state.message = message
|
|
|
+ sendMsg()
|
|
|
+ Toast(store.state.chatUserInfo.isGroup === 1 ? '会议链接已发送给好友' : '会议链接已发送到群里')
|
|
|
+ }).catch(() => {
|
|
|
+ toClipboard(message).then(() => {
|
|
|
+ Toast.success('复制成功')
|
|
|
+ })
|
|
|
+ })
|
|
|
+ }
|
|
|
+ if (action.value === 'deleteMessage') {
|
|
|
+ Dialog.confirm({
|
|
|
+ title: '温馨提示',
|
|
|
+ message: '确定要删除聊天记录吗?',
|
|
|
+ }).then(async () => {
|
|
|
+ Toast('删除中...')
|
|
|
+ let {data} = await messageList({
|
|
|
+ fromId: store.state.userInfo.id,
|
|
|
+ toId: store.state.chatUserInfo.friendId,
|
|
|
+ messageType: store.state.chatUserInfo.isGroup,
|
|
|
+ ToUsername: store.state.chatUserInfo.friendName,
|
|
|
+ page: 1,
|
|
|
+ pageSize: state.messageList.length
|
|
|
+ })
|
|
|
+ await deleteMessage({msgId: data.map((item: Obj) => item.id)})
|
|
|
+ state.messageList = []
|
|
|
+ Toast.success('删除成功')
|
|
|
+ })
|
|
|
+ }
|
|
|
if (action.value === 'deleteFriend') {
|
|
|
Dialog.confirm({
|
|
|
title: '温馨提示',
|
|
@@ -316,7 +365,8 @@ export default defineComponent({
|
|
|
Toast.success('删除成功')
|
|
|
})
|
|
|
}
|
|
|
- if (action.value === 'exitGroup') { //如果自己是群主的话,那就解散群
|
|
|
+ //如果自己是群主的话,那就解散群
|
|
|
+ if (action.value === 'exitGroup') {
|
|
|
Dialog.confirm({
|
|
|
title: '温馨提示',
|
|
|
message: `确定离开${store.state.chatUserInfo.friendName}群吗?`
|
|
@@ -331,23 +381,6 @@ export default defineComponent({
|
|
|
store.commit('setIsShowRight', false)
|
|
|
})
|
|
|
}
|
|
|
- if (action.value === 'createLink') {
|
|
|
- let {data} = await creatZoom({zoomName: store.state.userInfo.username})
|
|
|
- let message = window.location.origin + '/#/zoomLoading?uuid=' + data.uuid
|
|
|
- Dialog.confirm({
|
|
|
- title: '会议链接创建成功',
|
|
|
- message,
|
|
|
- cancelButtonText: '复制链接',
|
|
|
- confirmButtonText: '发送链接'
|
|
|
- }).then(() => {
|
|
|
- state.message = message
|
|
|
- sendMsg()
|
|
|
- }).catch(() => {
|
|
|
- toClipboard(message).then(() => {
|
|
|
- Toast.success('复制成功')
|
|
|
- })
|
|
|
- })
|
|
|
- }
|
|
|
}
|
|
|
|
|
|
const handleKeydown = (e: KeyboardEvent) => {
|