diff --git a/src/views/newMap/display/memberManage/membersManage.vue b/src/views/newMap/display/memberManage/membersManage.vue index 272dd94b2..7caf80b06 100644 --- a/src/views/newMap/display/memberManage/membersManage.vue +++ b/src/views/newMap/display/memberManage/membersManage.vue @@ -94,10 +94,10 @@ export default { doorList: [], memberData: {}, treeData: [{ - labelName: '行调', + labelName: 'NCC调度', children: [] }, { - labelName: 'NCC调度', + labelName: '行调', children: [] }, { labelName: '车站值班员', @@ -197,14 +197,14 @@ export default { val.forEach(item => { const device = this.$store.getters['map/getDeviceByCode'](item.deviceCode); switch (item.type) { - case 'DISPATCHER': - this.memberData[item.id].labelName = '行调' + (item.name || ''); - dispatcherList.push(this.memberData[item.id]); - break; case 'NCC_DISPATCHER': this.memberData[item.id].labelName = 'NCC调度' + (item.name || ''); nccDispatcherList.push(this.memberData[item.id]); break; + case 'DISPATCHER': + this.memberData[item.id].labelName = '行调' + (item.name || ''); + dispatcherList.push(this.memberData[item.id]); + break; case 'ELECTRIC_DISPATCHER': this.memberData[item.id].labelName = '电力调度' + (item.name || ''); electricDispatcherList.push(this.memberData[item.id]); @@ -277,13 +277,13 @@ export default { } }); this.treeData = [{ - labelName: '行调', - id: 'dispatcher', - children: dispatcherList - }, { labelName: 'NCC调度', id: 'nccDispatcher', children: nccDispatcherList + }, { + labelName: '行调', + id: 'dispatcher', + children: dispatcherList }, { labelName: '车站值班员', id: 'stationSupervisor', diff --git a/src/views/newMap/display/newChat/chatDialog.vue b/src/views/newMap/display/newChat/chatDialog.vue index 02b736052..b7a2a4658 100644 --- a/src/views/newMap/display/newChat/chatDialog.vue +++ b/src/views/newMap/display/newChat/chatDialog.vue @@ -39,7 +39,7 @@
-
+
@@ -77,7 +77,8 @@ import ChatContent from './chatContent'; import EditGroup from './editGroup'; import AddressBook from './addressBook'; import PopMenu from '@/components/PopMenu'; -import DialogMember from './dialogMember.vue'; +import DialogMember from './dialogMember'; +import { objectIsEqual } from '@/utils/date'; export default { name: 'ChatDialog', components: { @@ -111,8 +112,7 @@ export default { id: 0, // 当前的群组id privateChatId: '', // 私聊角色id memberTreeData: [], - menu: [], // 右键菜单 - noIdChatList: [] // 临时加的私聊,没有id + menu: [] // 右键菜单 }; }, computed: { @@ -136,13 +136,6 @@ export default { }); return n; }, - chatList() { - const list = JSON.parse(JSON.stringify(this.groupList)); - this.noIdChatList.forEach(item => { - list.splice(item.sortIndex, 0, item); - }); - return list; - }, activeMessageList() { let list = []; const find = this.groupList.find(item => { @@ -174,11 +167,7 @@ export default { watch: { '$store.state.socket.simulationReset': function (val) { // 仿真重置 if (val) { - this.id = 0; - this.privateChatId = ''; - this.$store.dispatch('socket/resetConversationGroup'); - this.groupList = []; - this.noIdChatList = []; + this.initGroupList(); } }, '$store.state.socket.conversationGroup.MESSAGE': function(val) { @@ -200,8 +189,15 @@ export default { this.$message.success(`${val.messageTips}`); } if (val.id) { - this.groupList.push({...val, messageList: [], imageUrl: ''}); - this.removeNoIdItem(); + const findIndex = this.groupList.findIndex(ii => { + return val.id == ii.id || (val.type == 'PRIVATE_CHAT' && ii.type == 'PRIVATE_CHAT' && this.isEqualMember(ii.memberList, val.memberList)); + }); + const obj = {...val, messageList: [], imageUrl: ''}; + if (findIndex > -1) { + this.groupList.splice(findIndex, 1, obj); + } else { + this.groupList.push(obj); + } } }, '$store.state.socket.conversationGroup.UPDATE_NAME': function(val) { @@ -242,8 +238,14 @@ export default { totalUnread() { this.$emit('setTotalUnread', this.totalUnread); }, - myMemberId() { - this.getGroupList(); + myMemberId: { + handler(val) { + this.initGroupList(); + if (val) { + this.getGroupList(); + } + }, + immediate: true }, memberList () { this.getTreeData(); @@ -254,9 +256,9 @@ export default { created() { this.getTreeData(); this.getBaseInfo(); - this.getGroupList(); }, beforeDestroy() { + this.initGroupList(); this.handleClose(); }, methods: { @@ -364,14 +366,13 @@ export default { }, sendPrivateMsg(item) { this.privateChatId = item.id; - const findIndex = this.chatList.findIndex(ii => { + const findIndex = this.groupList.findIndex(ii => { return ii.type == 'PRIVATE_CHAT' && ii.memberList.find(m => { return m.memberId == item.id; }); }); let index = findIndex; if (findIndex < 0) { - const sortIndex = this.chatList.length; const obj = { creatorId: this.myMemberId, leaderId: this.myMemberId, @@ -379,33 +380,22 @@ export default { {memberId: this.myMemberId, connect: false, role: 'Leader'}, {memberId: item.id, connect: false, role: 'Leader'} ], - sortIndex: sortIndex, messageList: [], name: item.labelName, type: 'PRIVATE_CHAT' }; - this.noIdChatList.push(obj); - index = sortIndex; + this.groupList.push(obj); + index = this.groupList.length - 1; } this.scrollTop(index); this.id = 0; this.tabActive = 0; }, - removeNoIdItem() { - const list = []; - this.noIdChatList.forEach(item => { - const find = this.groupList.find(ii => { - return ii.type == 'PRIVATE_CHAT' && ii.memberList[0].memberId == item.memberList[0].memberId && ii.memberList[1].memberId == item.memberList[1].memberId; - }); - if (!find) { - list.push(item); - } else { - if (this.privateChatId && this.privateChatId == this.getPrivateChatId(find)) { - this.groupClick(find); - } - } - }); - this.noIdChatList = list; + initGroupList() { + this.id = 0; + this.privateChatId = ''; + this.$store.dispatch('socket/resetConversationGroup'); + this.groupList = []; }, getTreeData() { const val = this.memberList; @@ -431,14 +421,14 @@ export default { val.forEach(item => { const device = this.$store.getters['map/getDeviceByCode'](item.deviceCode); switch (item.type) { - case 'DISPATCHER': - this.memberData[item.id].labelName = '行调' + (item.name || ''); - dispatcherList.push(this.memberData[item.id]); - break; case 'NCC_DISPATCHER': this.memberData[item.id].labelName = 'NCC调度' + (item.name || ''); nccDispatcherList.push(this.memberData[item.id]); break; + case 'DISPATCHER': + this.memberData[item.id].labelName = '行调' + (item.name || ''); + dispatcherList.push(this.memberData[item.id]); + break; case 'ELECTRIC_DISPATCHER': this.memberData[item.id].labelName = '电力调度' + (item.name || ''); electricDispatcherList.push(this.memberData[item.id]); @@ -509,13 +499,13 @@ export default { } }); this.memberTreeData = [{ - labelName: '行调', - id: 'dispatcher', - children: dispatcherList - }, { labelName: 'NCC调度', id: 'nccDispatcher', children: nccDispatcherList + }, { + labelName: '行调', + id: 'dispatcher', + children: dispatcherList }, { labelName: '车站值班员', id: 'stationSupervisor', @@ -692,11 +682,19 @@ export default { }, getGroupList() { getGroupList(this.groupId).then(res => { - this.groupList = res.data; + res.data.forEach(item => { + const findIndex = this.groupList.findIndex(ii => { + return item.id == ii.id || (item.type == 'PRIVATE_CHAT' && ii.type == 'PRIVATE_CHAT' && this.isEqualMember(ii.memberList, item.memberList)); + }); + if (findIndex > -1) { + this.groupList.splice(findIndex, 1, item); + } else { + this.groupList.push(item); + } + }); if (this.groupList && this.groupList[0] && !this.id && !this.privateChatId) { this.id = this.groupList[0].id; } - this.removeNoIdItem(); }); }, getImgUrl(url) { @@ -711,6 +709,17 @@ export default { filterClick(index) { this.filterActive = index; }, + isEqualMember(list1, list2) { + const m1 = {}; + const m2 = {}; + list1.forEach(item => { + m1[item.memberId] = item.memberId; + }); + list2.forEach(item => { + m2[item.memberId] = item.memberId; + }); + return objectIsEqual(m1, m2); + }, groupClick(item) { this.id = item.id || 0; if (item.type == 'GROUP_CHAT') { @@ -722,7 +731,7 @@ export default { }, getPrivateChatId(item) { let pId = ''; - if (item.type == 'PRIVATE_CHAT' && item.leaderId == this.myMemberId) { + if (item.type == 'PRIVATE_CHAT' && (item.memberList[0].memberId == this.myMemberId || item.memberList[1].memberId == this.myMemberId)) { const find = item.memberList.find(ii => { return ii.memberId != this.myMemberId; });