wangzhibo
4 天以前 10595d8632f959d0954d1939243196f4eed02372
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
import { defineStore } from "pinia";
import { computed, ref } from "vue";
import type { Cs } from "../types";
import dayjs from "dayjs";
import { service, useStore } from "/@/cool";
import { last } from "lodash-es";
import { useSession } from "./session";
import { uuid } from "/@/cool/utils";
import { useScroller } from "./tools";
import { dateFormatter } from "../utils";
 
export const useMessage = defineStore("cs.message", () => {
    const session = useSession();
    const scroller = useScroller();
    const { user } = useStore();
 
    // 加载中
    const loading = ref(false);
 
    // 所有页
    const data = ref<{ id: string; data: Cs.Msg[] }[]>([]);
 
    // 列表
    const list = computed(() => {
        data.value.forEach((e) => {
            if (e.data[0]) {
                let date = e.data[0].createTime;
 
                if (date) {
                    e.data.forEach((a, i) => {
                        const d = dateFormatter(a.createTime);
 
                        if (i == 0) {
                            a.date = d;
                        }
 
                        if (dayjs(a.createTime).subtract(10, "minute").isAfter(dayjs(date))) {
                            a.date = d;
                            date = a.createTime;
                        }
                    });
                }
            }
        });
 
        return data.value;
    });
 
    // 追加消息
    function append(item: Cs.Msg) {
        const list = last(data.value)?.data;
 
        if (list) {
            list.push({
                sessionId: session.info?.id,
                type: 0,
                nickName: user.info?.nickName,
                avatarUrl: user.info?.avatarUrl,
                ...item,
                isAnimation: true,
            });
 
            scroller.scrollToBottom();
        }
    }
 
    // 清除消息
    function clear() {
        data.value = [];
    }
 
    // 读消息
    function read(id: number) {
        service.cs.msg.read({
            msgIds: [id],
        });
    }
 
    // 获取消息
    async function refresh(params?: any) {
        loading.value = true;
 
        if (params.page == 1) {
            data.value = [];
        }
 
        await service.cs.msg
            .page({
                sessionId: session.info?.id,
                order: "createTime",
                sort: "desc",
                ...params,
            })
            .then((res) => {
                res.list.forEach((e) => {
                    if (e.type == 1) {
                        e.avatarUrl = e.adminUserHeadImg;
                        e.nickName = e.adminUserName;
                    }
                });
 
                data.value.unshift({
                    id: uuid(),
                    data: res.list.reverse() as any[],
                });
            });
 
        loading.value = false;
    }
 
    return {
        data,
        list,
        loading,
        append,
        clear,
        read,
        refresh,
    };
});