| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142 |
- import { reactive, ref, computed, watch } from 'vue';
- import { storeToRefs } from 'pinia';
- import { useSocketStore, useMessageStore } from "@/store";
- import { RONGIMCALL_OPEN, RONGIMCALL_HISTORY, RONGIMCALL_SEND } from '@/api';
- import { Toast, format } from '@/utils';
- function useMessageData() {
- const useScoket = useSocketStore();
- const useMessage = useMessageStore();
- const { messageMap } = storeToRefs(useMessage);
- const lowerThreshold = ref(80)
- const distanceFromBottom = ref(0)
- const newMessageCount = ref(0)
- const dataList = ref([]);
- const loadedAll = ref(false);
- const isLoading = ref(false);
- const historyMessageQuery = reactive({
- page: 1,
- pagesize: 20,
- type: 'service'
- })
- const isOpenning = ref(false)
- const channel = ref('')
- const channelData = ref(null)
- watch(
- () => (messageMap.value),
- (newVal, oldVal) => {
- if (channel.value) {
- const info = newVal[channel.value]
- channelData.value = info
- console.log("messageMap.value[channel.value]", info)
- dataList.value = info.messageList
- newMessageCount.value =
- distanceFromBottom.value > lowerThreshold.value ?
- info.unreadCount : 0;
- console.log('newMessageCount.value', newMessageCount.value)
- }
- },
- {
- deep: true
- }
- )
- function resetHistoryQuery() {
- historyMessageQuery.page = 1
- historyMessageQuery.pagesize = 20
- historyMessageQuery.type = 'service'
- loadedAll.value = false
- isLoading.value = false
- }
- // 获取历史消息列表
- function fetchHistoryMessageList() {
- return new Promise(async (resolve, reject) => {
- if (loadedAll.value) return;
- if (isLoading.value) return;
- isLoading.value = true;
- try {
- const result = await RONGIMCALL_HISTORY(historyMessageQuery, { isLoading: true });
- const { lists, total } = result.data;
- for (let i = 0; i < lists.length; i++) {
- const msgInfo = {
- ...lists[i],
- msg: JSON.parse(lists[i].msg)
- }
- useMessage.updateMessageList(channel.value, msgInfo, 'unshift')
- }
- loadedAll.value = lists.length < historyMessageQuery.pagesize;
- historyMessageQuery.page = historyMessageQuery.page + 1;
- isLoading.value = false;
- resolve(result.data);
- }
- catch (err) {
- isLoading.value = false;
- reject(err);
- }
- })
- }
- function openService() {
- if (isOpenning.value) return;
- isOpenning.value = true;
- resetHistoryQuery();
- useMessage.openChannel({
- type: 'service',
- socket_id: useScoket.socketId
- }).then(async (res) => {
- channel.value = res.data.auth.channel
- try {
- const data = await fetchHistoryMessageList();
- if (data.total < 1) {
- const val = { ...res.data }
- delete val.auth
- dataList.push(val)
- useMessage.updateMessageList(channel.value, val, 'unshift')
- }
- if (data.lists.length > 0) {
- let result = data.lists[0]
- let lastTime = result ? result.indate : (Date.now() / 1000).toFixed(0) - 0
- useMessage.updateGlobalMapLasttime(`serviceChannel`, lastTime)
- }
- }
- catch (err) { }
- finally {
- isOpenning.value = false;
- }
- })
- .catch(() => {
- isOpenning.value = false;
- })
- }
- openService()
- return {
- useMessage,
- channel,
- channelData,
- dataList,
- newMessageCount,
- lowerThreshold,
- distanceFromBottom,
- isLoading,
- fetchHistoryMessageList,
- openService
- }
- }
- export default useMessageData
|