123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447 |
- import {
- addSomeInArray,
- addTimeMsgInItem,
- decryptoMsg,
- addLinkItem,
- formatPinMsg,
- checkAtMe
- } from '@/util/util.js'
- import _ from 'lodash'
- import Vue from 'vue'
- import Message from '@/store/db/Message.js'
- import { initGroupData } from '@/store/state'
- const objMessage = new Message()
- const mutations = {
- initGroup (state, data) {
- state.userId = data.userId
- state.groupId = data.groupId
- state.useCache = data.useCache
- },
- initState (state, data) {
- state.endHash = ''
- state.startHash = ''
- state.adminList = []
- state.creator = ''
- state.blockList = []
- state.userCounts = ''
- state.groupName = ''
- state.shareName = ''
- state.groupNotice = ''
- state.coverPhoto = ''
- state.url = ''
- state.inviteUrl = ''
- state.sessionInfo = {}
- state.eosInfo = null
- state.pinMsg = {}
- state.groupId = ''
- state.nickName = ''
- state.chatList = []
- state.pinList = []
- state.atList = []
- state.searchList = []
- state.isNewAt = true
- state.isNewAtFound = false
- state.isJoin = true
- state.unreadNums = 0
- state.userId = data.user_id
- state.userInfo = data
- },
- setGroupInfo (state, data) {
- state.groupName = data.groupName
- state.userCounts = data.userCounts
- state.members = data.members
- state.groupNotice = data.groupNotice
- state.url = data.url
- state.inviteUrl = data.inviteUrl
- state.sessionInfo = data.sessionInfo || {}
- state.isJoin = data.isJoin
- state.coverPhoto = data.coverPhoto
- state.adminList = data.adminList
- state.blockList = data.blockList
- state.shareName = data.shareName
- state.creator = data.creator
- state.eosInfo = data.eosInfo
- state.membersArray = data.membersArray
- state.membersNum = data.membersNum
- if (data.pinMsg) {
- formatPinMsg(data.pinMsg, state.userId)
- state.pinList = [ data.pinMsg ]
- // removeItemIfEixt(state.pinList, state.chatList, item => item.hash)
- }
- state.pinMsg = data.pinMsg || {}
- },
- setGroupUserInfo (state, data) {
- state.userInfo = data
- state.userId = data.user_id
- },
- /**
- * @des 添加历史消息到当前chatList队列
- * @param {Object} state
- * @param {Array} data 待添加的消息队列
- */
- addHistoryList (state, data) {
- if (data.length) {
- addSomeInArray(data)
- // removeItemIfEixt(state.pinList, data, item => item.hash)
- // 根据 hash 求data相对于chatList的差集(去重)
- let newList = _.differenceBy(data, state.chatList, 'hash') || []
- state.chatList = newList.concat(state.chatList)
- }
- },
- /**
- * 清空聊天记录
- */
- clearChatList (state) {
- state.chatList = []
- state.pinMsg = {}
- state.groupId = null
- },
- /**
- * @des 消息列表插入置顶消息
- * @param {*} state
- * @param {*} data
- */
- addPinChatItem (state, data) {
- let item = {
- name: data ? data.nick_name : 'unknown',
- content: data.content,
- userId: data.userId,
- timestamp: data.timestamp,
- avatar: data ? data.cover_photo : '',
- hash: data.hash,
- type: data.userId == state.userId ? 'me' : 'you',
- msg_type: data.msg_type,
- loading: false,
- res: data.res,
- joinMsg: '',
- fail: false
- }
- state.chatList.splice(0, 0, item)
- },
- addChatItem (state, data) {
- let newMsg = !!data.newMsg
- let fromdb = !!data.fromdb
- if (data.group_id && data.group_id != state.groupId) return
- if (data.list) data = data.list
- if (data && data.length > 0) {
- addSomeInArray(data)
- // removeItemIfEixt(state.pinList, data, item => item.hash)
- if (fromdb) state.atList = []
- // 检测是否被@
- newMsg && !fromdb && data.forEach(item => {
- if (checkAtMe(item.content, state.userInfo.user_name)) {
- state.atList.push(item)
- }
- })
- // 根据 hash 求data相对于chatList的差集(去重)
- let newList = _.differenceBy(data, state.chatList, 'hash') || []
- state.chatList = state.chatList.concat(newList)
- } else {
- let user = state.members[data.from] || data.user_info
- let item = {
- name: user ? user.nick_name : 'unknown',
- content: data.content,
- userId: data.from,
- timestamp: data.timestamp,
- avatar: user ? user.cover_photo : '',
- hash: data.hash,
- type: data.from == state.userId ? 'me' : 'you',
- msg_type: data.msg_type,
- loading: Boolean(data.loading),
- res: data.res,
- joinMsg: data.joinMsg,
- fail: false
- }
- // 针对自己发送的情况
- if (data.createTime) {
- item.createTime = data.createTime
- }
- addTimeMsgInItem(item, state.chatList)
- addLinkItem(item)
- if (!state.chatList.some(n => { return item.hash && n.hash === item.hash })) {
- state.chatList.push(item)
- }
- }
- },
- addPacketItem (state, data) {
- let item = {
- name: state.members[data.from]
- ? state.members[data.from].nick_name
- : 'unknown',
- timestamp: data.timestamp,
- avatar: state.members[data.from] ? state.members[data.from].cover_photo : '',
- userId: data.from,
- msg_type: data.type === 'new_redpack' ? 4 : 5,
- content: JSON.parse(decryptoMsg(data.content)),
- type: data.from == state.userId ? 'me' : 'you',
- ext: { grabbed: 0, redpack_status: 0 },
- hash: data.hash
- }
- addTimeMsgInItem(item, state.chatList)
- state.chatList.push(item)
- state.endHash = data.hash
- },
- addPacketTip (state, data) {
- let item = {
- content: {
- trxId: data.content.redpack_trx_id,
- title: data.content.title
- },
- ext: {
- grabbed: 1,
- redpack_status: 0
- },
- avatar: state.members[data.from] ? state.members[data.from].cover_photo : '',
- name: state.members[data.from]
- ? state.members[data.from].nick_name
- : 'unknown',
- from: data.from,
- to: data.to,
- redPackTip: true
- }
- state.chatList.push(item)
- },
- unpdatePacketItem (state, { type, trxId, data }) {
- let list = state.chatList
- let ind = list.findIndex(e => {
- return e.msg_type == 4 && e.content.trxId == trxId
- })
- let item = list[ind]
- item.ext[type] = data
- Vue.set(state.chatList, ind, item)
- objMessage.updatePackInfo(item.hash, type, data)
- },
- reSendChatItem (state, data) {
- let chatList = state.chatList
- chatList.forEach(item => {
- if (item.createTime == data.createTime) {
- item.loading = true
- item.fail = false
- }
- })
- },
- removeAtListLast (state) {
- state.atList.pop()
- },
- clearAtList (state) {
- state.atList = []
- },
- /**
- * 撤回消息,设置消息数据为{ repealMsg: true }
- * @param {state} state
- * @param {Object|Number} data
- */
- repealChatItem (state, data) {
- let { chatList } = state
- for (let i = chatList.length - 1; i >= 0; i--) {
- let item = chatList[i]
- if (item.hash === data.hash) {
- Vue.set(item, 'repealMsg', true)
- Vue.set(item, 'from', data.from)
- }
- }
- // if (pinList.length) {
- // removeItemIfEixt(pinList, [data], item => item.hash)
- // }
- objMessage.removeMsg(data['session_id'], data.hash)
- },
- deleteChatItem (state, hash) {
- let index = state.chatList.findIndex(item => item.hash === hash)
- state.chatList.splice(index, index)
- },
- addUnreadNums (state) {
- state.unreadNums++
- },
- resetUnreadNums (state) {
- state.unreadNums = 0
- },
- setHash (state, data) {
- if (data.startHash) {
- state.startHash = data.startHash
- }
- if (data.endHash) {
- state.endHash = data.endHash
- }
- },
- clearHash (state, data) {
- state.endHash = null
- },
- /**
- * @des 更新置顶
- */
- updatePin (state, data) {
- state.sessionInfo.is_pin = data
- },
- /**
- * @des 更新免打扰
- */
- updateMute (state, data) {
- state.sessionInfo.is_mute = data
- },
- /**
- * @des 更新加入信息
- */
- updateJoin (state, data) {
- state.isJoin = data
- },
- /**
- * @des 更新群信息
- */
- updateGroup (state, { key, data }) {
- state[key] = data
- },
- /**
- * @更新群成员
- */
- updateMembers (state, data) {
- state.members = Object.assign({}, data, state.members)
- },
- /**
- * @更新群成员组
- * @param type {add,del}
- * @param userInfo 用户信息
- */
- updateMembersArray (state, { type, userInfo }) {
- if (type == 'add') {
- let isAdd = state.membersArray.some((item) => {
- return userInfo.user_id == item.user_id
- })
- if (!isAdd) {
- ++state.membersNum
- state.membersArray.push(userInfo)
- }
- } else {
- let index = state.membersArray.findIndex((item) => {
- return item.user_id == userInfo.user_id
- })
- if (index > -1) {
- --state.membersNum
- state.membersArray.splice(index, 1)
- }
- }
- },
- /**
- * @des 更新members里自己的头像
- */
- updateMemberAvatar (state, { userId, imageUrl }) {
- let members = state.members
- let chatList = state.chatList
- for (let i = 0; i < chatList.length; i++) {
- let id = chatList[i]['userId']
- if (id == userId) {
- let item = chatList[i]
- item['avatar'] = imageUrl
- Vue.set(state.chatList, i, item)
- }
- }
- for (let k in members) {
- if (k == userId) {
- let item = members[k]
- item['cover_photo'] = imageUrl
- Vue.set(state.members, k, item)
- return
- }
- }
- },
- /**
- * @des 更新members里自己的名字
- */
- updateMemberNickName (state, { userId, nickName }) {
- let members = state.members
- let chatList = state.chatList
- for (let i = 0; i < chatList.length; i++) {
- let id = chatList[i]['userId']
- if (id == userId) {
- let item = chatList[i]
- item['name'] = nickName
- Vue.set(state.chatList, i, item)
- }
- }
- for (let k in members) {
- if (k == userId) {
- let item = members[k]
- item['nick_name'] = nickName
- Vue.set(state.members, k, item)
- return
- }
- }
- },
- /**
- * @des 更新聊天输入框聚焦状态
- */
- updateChatInputFocus (state, focus) {
- state.chatInputFocus = focus
- },
- /**
- * @des 更新群组封禁人员列表
- * @param {String} param.type [delete,add]
- * @param {String} param.id
- */
- updateGroupBlockList (state, param) {
- let { type, id } = param
- if (type === 'delete') {
- let index = state.blockList.findIndex(uid => uid == id)
- index !== -1 && state.blockList.splice(index, 1)
- } else if (type === 'add') {
- state.blockList.push(id)
- }
- },
- /**
- * @param {Object|Null} param
- */
- updateGroupPinMsg (state, param) {
- if (param) {
- param.visible = true
- formatPinMsg(param, state.userId)
- state.pinMsg = param
- } else {
- state.pinMsg = {}
- }
- },
- /**
- * @des 更新是否停止搜索监听
- * @param {Object|Null} param
- */
- updateIsNewAt (state, param) {
- state.isNewAt = param.isNewAt
- state.isNewAtFound = param.isNewAtFound
- },
- /**
- * @des 更新搜索框提示列表
- * @param {Object|Null} param
- */
- updateGroupSearchList (state, param) {
- state.searchList = param
- },
- initGroupData (state) {
- let data = initGroupData()
- for (let i in state) {
- if (data.hasOwnProperty(i)) state[i] = data[i]
- }
- }
- }
- export default mutations
|