zxl
12 小时以前 172933f098017bc4c4f57dcda0d490ea12bb13bb
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
import { getSort, getMutipSort } from "@/utils/functions";
import { formatTalkItem } from "@/utils/talk";
import { ServeGetTalkList } from "@/api/chat";
import store from '@/store/index.js'
import Vue from 'vue'
const Talk = {
  state: {
    // 用户对话列表
    items: [],
 
    // 最后一条消息
    unreadMessage: {
      num: 0,
      nickname: "未知",
      content: "...",
    },
 
    // 对话列表重载状态
    heavyLoad: false,
  },
  getters: {
    // 过滤所有置顶对话列表
    topItems: (state) => {
      return state.items.filter((item) => item.is_top == 1);
    },
    talkItems: (state) => {
      return state.items.sort(
        getMutipSort([getSort((a, b) => a.lastTalkTime > b.lastTalkTime)])
      );
    },
    // 消息未读数总计
    unreadNum: (state) => {
      return state.items.reduce((total, item) => {
        return total + parseInt(item.unread);
      }, 0);
    },
    talkNum: (state) => state.items.length,
  },
  mutations: {
   
    // 设置对话列表
    SET_TALK_ITEMS (state, resource) {
      Vue.set(state, 'items', resource.items)
    },
 
    // 更新对话节点
    UPDATE_TALK_ITEM (state, resource) {
      // console.log("%c 更新对话节点", "color:#32c");
      // console.log("state", state);
      // console.log("resource", resource);
 
      // console.log("%c 更新对话节点结束", "color:#32c",state.items);
      let index = state.items.findIndex(
        (item) => item.userId === resource.index_name.split("_")[1]
      );
      if (index >= 0) {
        Object.assign(state.items[index], resource);
      }
    },
 
    // 新增对话节点
    PUSH_TALK_ITEM (state, resource) {
      // console.log(state)
      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;
        }
      }
    },
 
    // async getTalkList() {
    //   let { code, result } = ServeGetTalkList();
    //   if (code !== 200) return false;
 
    //   store.commit("SET_TALK_ITEMS", {
    //     items: result.map((item) => formatTalkItem(item)),
    //   });
    // },
 
    // 更新对话消息
    UPDATE_TALK_MESSAGE (state, resource) {
      // console.log("%c 更新对话消息", "color:green");
      // console.log("state", state);
      // console.log("resource", resource);
      // console.log("%c 更新对话结束", "color:green",state.items);
 
      let enableGetTalkList = true
      state.items.forEach(item => {
        if (item.userId == resource.index_name.split("_")[1]) {
          item.unread++;
          item.msg_text = resource.msg_text;
          item.lastTalkTime = resource.updated_at;
          item.lastTalkMessage = resource.msg_text;
          item.updated_at = resource.updated_at;
          enableGetTalkList = false
        }
      })
      // 循环如果当前用户不在对话记录列表中 就重新请求对话列表接口
      enableGetTalkList ? this.commit('getTalkList') : ''
    },
 
    // 触发对话列表重新加载
    TRIGGER_TALK_ITEMS_LOAD (state, status = false) {
      state.heavyLoad = status;
    },
 
    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: "...",
      };
    },
  },
};
 
export default Talk;