| New file |
| | |
| | | import { getSort, getMutipSort } from '@/utils/functions' |
| | | import { ServeGetTalkList } from '@/api/chat' |
| | | import { formateTalkItem } from '@/utils/talk' |
| | | |
| | | const Talk = { |
| | | state: { |
| | | loadStatus: 0, // 加载状态[1:未加载;2:加载中;3:加载完成;4:加载失败;] |
| | | |
| | | // 会话列表 |
| | | items: [], |
| | | |
| | | // 最后一条消息 |
| | | unreadMessage: { |
| | | num: 0, |
| | | nickname: '未知', |
| | | content: '...', |
| | | }, |
| | | |
| | | imageViewer: { |
| | | isShow: false, |
| | | file: null, |
| | | }, |
| | | |
| | | |
| | | status: 0, //0:加载,1:加载中 |
| | | clinkStatus:0, //0:加载,1:加载中 |
| | | sendStatus:0, //0:加载,1:加载中 |
| | | }, |
| | | getters: { |
| | | // 过滤所有置顶对话列表 |
| | | topItems: state => { |
| | | return state.items.filter(item => item.is_top == 1) |
| | | }, |
| | | talkItems: state => { |
| | | return state.items.sort( |
| | | getMutipSort([getSort((a, b) => a.updated_at > b.updated_at)]) |
| | | ) |
| | | }, |
| | | // 消息未读数总计 |
| | | unreadNum: state => { |
| | | return state.items.reduce((total, item) => { |
| | | return total + parseInt(item.unread_num) |
| | | }, 0) |
| | | }, |
| | | talkNum: state => state.items.length, |
| | | imageViewer: state => state.imageViewer, |
| | | }, |
| | | mutations: { |
| | | SET_STATUS(state, resource) { |
| | | state.status = resource |
| | | }, |
| | | SET_CLINK_STATUS(state, resource) { |
| | | state.clinkStatus = resource |
| | | }, |
| | | SET_SEND_STATUS(state, resource) { |
| | | state.sendStatus = resource |
| | | }, |
| | | // |
| | | SET_LOAD_STATUS(state, resource) { |
| | | state.loadStatus = resource |
| | | }, |
| | | |
| | | // 设置对话列表 |
| | | SET_TALK_ITEMS(state, resource) { |
| | | state.items = resource.items |
| | | }, |
| | | |
| | | // 更新对话节点 |
| | | UPDATE_TALK_ITEM(state, resource) { |
| | | for (const iterator of state.items) { |
| | | if (iterator.index_name === resource.index_name) { |
| | | Object.assign(iterator, resource) |
| | | break |
| | | } |
| | | } |
| | | }, |
| | | |
| | | // 新增对话节点 |
| | | PUSH_TALK_ITEM(state, resource) { |
| | | state.items.push(resource) |
| | | }, |
| | | |
| | | // 移除对话节点 |
| | | REMOVE_TALK_ITEM(state, index_name) { |
| | | for (let i in state.items) { |
| | | if (state.items[i].index_name === index_name) { |
| | | state.items.splice(i, 1) |
| | | break |
| | | } |
| | | } |
| | | }, |
| | | |
| | | // 更新对话消息 |
| | | UPDATE_TALK_MESSAGE(state, resource) { |
| | | for (const iterator of state.items) { |
| | | if (iterator.index_name !== resource.index_name) { |
| | | continue |
| | | } |
| | | |
| | | iterator.unread_num++ |
| | | iterator.msg_text = resource.msg_text |
| | | iterator.updated_at = resource.updated_at |
| | | break |
| | | } |
| | | }, |
| | | |
| | | SET_TLAK_UNREAD_MESSAGE(state, resource) { |
| | | state.unreadMessage.num++ |
| | | state.unreadMessage.nickname = resource.nickname |
| | | state.unreadMessage.content = resource.content |
| | | }, |
| | | |
| | | // 清除最后一条未读消息 |
| | | CLEAR_TLAK_UNREAD_MESSAGE(state) { |
| | | state.unreadMessage = { |
| | | num: 0, |
| | | nickname: '未知', |
| | | content: '...', |
| | | } |
| | | }, |
| | | |
| | | SET_IMAGE_VIEWER(state, resource){ |
| | | state.imageViewer.isShow = resource.isShow; |
| | | state.imageViewer.file = resource.file; |
| | | } |
| | | |
| | | }, |
| | | actions: { |
| | | // 加载会话列表 |
| | | LOAD_TALK_ITEMS(context) { |
| | | context.commit('SET_LOAD_STATUS', 2) |
| | | |
| | | ServeGetTalkList() |
| | | .then(({ code, data }) => { |
| | | if (code !== 200) return |
| | | |
| | | context.commit('SET_TALK_ITEMS', { |
| | | items: data.map(item => formateTalkItem(item)), |
| | | }) |
| | | |
| | | context.commit('SET_LOAD_STATUS', 3) |
| | | }) |
| | | .catch(() => { |
| | | context.commit('SET_LOAD_STATUS', 4) |
| | | }) |
| | | }, |
| | | }, |
| | | } |
| | | |
| | | export default Talk |