zbH5/src/store/index.js

372 lines
15 KiB
JavaScript
Raw Normal View History

2025-01-28 15:25:35 +08:00
import { createStore } from "vuex";
import router from "@/router/index";
import dayjs from "dayjs";
import { terminalType } from "@/utils/index";
console.log("process.env.NODE_ENV", process.env.NODE_ENV);
export default createStore({
state: {
2025-02-11 21:47:01 +08:00
// token:
// process.env.NODE_ENV !== "development"
// ? terminalType === "Browser" && localStorage.getItem("token")
// : "",
token: terminalType === "Browser" && localStorage.getItem("token"),
// userInfo:
// process.env.NODE_ENV !== "development"
// ? terminalType === "Browser" && localStorage.getItem("userInfo")
// ? JSON.parse(localStorage.getItem("userInfo"))
// : {}
// : {
// account: "csht003",
// userName: "csht003",
// imgUrl:
// "https://thirdwx.qlogo.cn/mmopen/vi_32/t5O6btVlibCehoxtZWXc4AYefp92pxGWorCNskBo6hLsj3MJclkPpyoI0d5OW5QDsqfanS5IdicfPfEvYvQ6S7uQ/132",
// },
2025-01-28 15:25:35 +08:00
userInfo:
2025-02-11 21:47:01 +08:00
terminalType === "Browser" && localStorage.getItem("userInfo")
? JSON.parse(localStorage.getItem("userInfo"))
: {},
2025-01-28 15:25:35 +08:00
authorityList:
process.env.NODE_ENV !== "development"
? terminalType === "Browser" && localStorage.getItem("authorityList")
? JSON.parse(localStorage.getItem("authorityList"))
: []
: // : [{ starttime: 0, endtime: Number.MAX_SAFE_INTEGER, mid: 2 }] // mockData
[1212],
// endtime 权限结束时间 integer(int64) mid 权限id string starttime 权限开始时间 integer(int64)
interactMsgObj: {
retainMsgNum: 100, // 保留消息条数
// 直播间互动消息
msgListIds: [], // 所有互动消息的id集合
msgListIdObj: {}, // 所有互动消息key为互动消息idvalue为消息对象
replyBasicInformMsgObj: {}, // 所有回复消息的集合
isScrollToBottom: true, // 用户互动区滚动条是否滚动到底部
temUserInteractMsgList: [], // 用户互动区滚动条没有滚动到底部,将其他用户新发的互动消息暂时存起来
temUserInteractShowNum: 0, // 用户互动区需要展示还未展示的消息数
userInteractMsgList: [], // 用户互动消息
isTgScrollToBottom: true, // 讲师互动区滚动条是否滚动到底部
temTgInteractMsgList: [], // 讲师区滚动条没有滚动到底部,将其他用户新发的互动消息暂时存起来
temTgInteractShowNum: 0, // 讲师需要展示还未展示的消息数
tgInteractMsgList: [], // 讲师互动消息
newTreeMsg: [], // 最新的三条互动消息
msgTimeList: [], // 互动区时间汇总
tgMsgTimeList: [], // 投顾互动区时间汇总
msgTimeObj: {}, // 用户互动区区消息以发言时间为keyvalue为消息对象
tgMsgTimeObj: {}, // 讲师互动区消息以发言时间为keyvalue为消息对象
hasHisMsg: true, // 用户是否有历史消息
tgHasHisMsg: true, // 讲师互动区否有历史消息
},
forbidLogin: false, // 是否禁止用户登录
},
getters: {
authorityIdList: (state) => {
const now = Date.now();
return state.authorityList
.filter((item) => {
return item.starttime < now && item.endtime > now;
})
.map((item) => item.mid);
},
},
mutations: {
setIsScrollToBottom(state, payload) {
let key = payload.isTg ? "isTgScrollToBottom" : "isScrollToBottom";
state.interactMsgObj[key] = payload.data;
},
setReplyMsgObj(state, payload) {
state.interactMsgObj.replyBasicInformMsgObj[payload.id] = payload;
},
setInteractMsg(state, payload) {
let isST = state.interactMsgObj.isScrollToBottom; // 讲师互动区是否滚动到底部了
let isTgST = state.interactMsgObj.isTgScrollToBottom; // 用户互动区是否滚动到底部了
let msgArr = Array.isArray(payload.data) ? payload.data : [payload.data];
let tgMsgArr = [];
msgArr.forEach((item) => {
let chatTime = dayjs(item.createTime).format("MM-DD HH:mm");
item.show =
(!item.replyBasic && item.isOpen !== 2) ||
2025-02-15 17:49:35 +08:00
state.userInfo.userId === item.phone ||
2025-01-28 15:25:35 +08:00
(item.replyBasic &&
(item.replyBasic.isOpen === 1 ||
2025-02-15 17:49:35 +08:00
state.userInfo.userId === item.replyBasic.userId));
2025-01-28 15:25:35 +08:00
if (payload.type === 1) {
// 新消息
// 公开的或者是本人发的文本消息
if (
((item.userId && item.isOpen === 1) ||
2025-02-15 17:49:35 +08:00
item.phone === state.userInfo.userId) &&
2025-01-28 15:25:35 +08:00
item.type === 1
) {
state.interactMsgObj.newTreeMsg.push(item);
}
// 用户互动区最新消息数量提醒
if (item.show && !isST) state.interactMsgObj.temUserInteractShowNum++;
// 讲师互动区新消息数量提醒
if (item.show && !isTgST) state.interactMsgObj.temTgInteractShowNum++;
// 将全部评论按1s为维度进行汇总
if (
!state.interactMsgObj.msgTimeList.includes(chatTime) &&
item.show
) {
state.interactMsgObj.msgTimeList.push(chatTime);
item.chatTime = chatTime;
state.interactMsgObj.msgTimeObj[chatTime] = item;
} else {
delete item.chatTime;
}
// 将讲师评论按1s为维度进行汇总
if (
!state.interactMsgObj.tgMsgTimeList.includes(chatTime) &&
item.show
) {
state.interactMsgObj.tgMsgTimeList.push(chatTime);
item.tgChatTime = chatTime;
state.interactMsgObj.tgMsgTimeObj[chatTime] = item;
} else {
delete item.tgChatTime;
}
} else {
// 历史
if (payload.isTg) {
// 将讲师评论按1s为维度进行汇总
if (
!state.interactMsgObj.tgMsgTimeList.includes(chatTime) &&
item.show
) {
state.interactMsgObj.tgMsgTimeList.push(chatTime);
item.tgChatTime = chatTime;
state.interactMsgObj.tgMsgTimeObj[chatTime] = item;
} else if (
state.interactMsgObj.tgMsgTimeList.includes(chatTime) &&
item.show
) {
item.tgChatTime = chatTime;
delete state.interactMsgObj.tgMsgTimeObj[chatTime].tgChatTime;
state.interactMsgObj.tgMsgTimeObj[chatTime] = item;
}
} else {
// 将全部评论按1s为维度进行汇总
if (
!state.interactMsgObj.msgTimeList.includes(chatTime) &&
item.show
) {
state.interactMsgObj.msgTimeList.push(chatTime);
item.chatTime = chatTime;
state.interactMsgObj.msgTimeObj[chatTime] = item;
} else if (
state.interactMsgObj.msgTimeList.includes(chatTime) &&
item.show
) {
item.chatTime = chatTime;
delete state.interactMsgObj.msgTimeObj[chatTime].chatTime;
state.interactMsgObj.msgTimeObj[chatTime] = item;
}
}
}
state.interactMsgObj.msgListIds.push(item.id);
state.interactMsgObj.msgListIdObj[item.id] = item;
// 筛选出讲师的发言
if (item.advisorId) {
tgMsgArr.push(item);
}
});
if (payload.type === 1) {
// 新消息
if (isST) {
// 用户互动区新消息处理
state.interactMsgObj.userInteractMsgList =
state.interactMsgObj.userInteractMsgList.concat(msgArr);
if (
state.interactMsgObj.userInteractMsgList.length >
state.interactMsgObj.retainMsgNum
) {
state.interactMsgObj.userInteractMsgList =
state.interactMsgObj.userInteractMsgList.slice(
state.interactMsgObj.userInteractMsgList.length -
state.interactMsgObj.retainMsgNum
);
state.interactMsgObj.msgListIds =
state.interactMsgObj.msgListIds.slice(
state.interactMsgObj.msgListIds.length -
state.interactMsgObj.retainMsgNum
);
state.interactMsgObj.hasHisMsg = true;
state.interactMsgObj.msgTimeList = [];
state.interactMsgObj.msgTimeObj = {};
state.interactMsgObj.userInteractMsgList.forEach((item) => {
// 互动消息按秒重新归类
const chatTime = dayjs(item.createTime).format("MM-DD HH:mm");
if (
!state.interactMsgObj.msgTimeList.includes(chatTime) &&
item.show
) {
state.interactMsgObj.msgTimeList.push(chatTime);
item.chatTime = chatTime;
state.interactMsgObj.msgTimeObj[chatTime] = item;
} else {
delete item.chatTime;
}
});
}
} else {
state.interactMsgObj.temUserInteractMsgList =
state.interactMsgObj.temUserInteractMsgList.concat(msgArr);
}
if (isTgST) {
// 讲师互动区新消息处理
state.interactMsgObj.tgInteractMsgList =
state.interactMsgObj.tgInteractMsgList.concat(tgMsgArr);
if (
state.interactMsgObj.tgInteractMsgList.length >
state.interactMsgObj.retainMsgNum
) {
state.interactMsgObj.tgInteractMsgList =
state.interactMsgObj.tgInteractMsgList.slice(
state.interactMsgObj.tgInteractMsgList.length -
state.interactMsgObj.retainMsgNum
);
state.interactMsgObj.tgHasHisMsg = true;
state.interactMsgObj.tgMsgTimeList = [];
state.interactMsgObj.tgMsgTimeObj = {};
state.interactMsgObj.tgInteractMsgList.forEach((item) => {
// 互动消息按秒重新归类
const chatTime = dayjs(item.createTime).format("MM-DD HH:mm");
if (
!state.interactMsgObj.tgMsgTimeList.includes(chatTime) &&
item.show
) {
state.interactMsgObj.tgMsgTimeList.push(chatTime);
item.tgChatTime = chatTime;
state.interactMsgObj.tgMsgTimeObj[chatTime] = item;
} else {
delete item.tgChatTime;
}
});
}
} else {
state.interactMsgObj.temTgInteractMsgList =
state.interactMsgObj.temTgInteractMsgList.concat(tgMsgArr);
}
} else {
// 历史消息
if (payload.isTg) {
state.interactMsgObj.tgHasHisMsg = payload.hasNext;
state.interactMsgObj.tgInteractMsgList = tgMsgArr
.reverse()
.concat(state.interactMsgObj.tgInteractMsgList);
} else {
state.interactMsgObj.hasHisMsg = payload.hasNext;
state.interactMsgObj.userInteractMsgList = msgArr
.reverse()
.concat(state.interactMsgObj.userInteractMsgList);
}
}
},
interactMsgMerge(state, payload) {
let key1, key2, key3, numKey, timeKey, childTimeKey, msgTimeObjKey;
if (payload.isTg) {
key1 = "tgInteractMsgList";
key2 = "temTgInteractMsgList";
key3 = "tgHasHisMsg";
numKey = "temTgInteractShowNum";
timeKey = "tgMsgTimeList";
childTimeKey = "tgChatTime";
msgTimeObjKey = "tgMsgTimeObj";
} else {
key1 = "userInteractMsgList";
key2 = "temUserInteractMsgList";
key3 = "hasHisMsg";
numKey = "temUserInteractShowNum";
timeKey = "msgTimeList";
childTimeKey = "chatTime";
msgTimeObjKey = "msgTimeObj";
}
state.interactMsgObj[key1] = state.interactMsgObj[key1].concat(
state.interactMsgObj[key2]
);
if (
state.interactMsgObj[key1].length > state.interactMsgObj.retainMsgNum
) {
state.interactMsgObj[key1] = state.interactMsgObj[key1].slice(
state.interactMsgObj[key1].length - state.interactMsgObj.retainMsgNum
);
state.interactMsgObj.msgListIds = state.interactMsgObj.msgListIds.slice(
state.interactMsgObj.msgListIds.length -
state.interactMsgObj.retainMsgNum
);
state.interactMsgObj[key3] = true;
state.interactMsgObj[timeKey] = [];
state.interactMsgObj[msgTimeObjKey] = {};
state.interactMsgObj[key1].forEach((item) => {
let chatTime = dayjs(item.createTime).format("MM-DD HH:mm");
if (!state.interactMsgObj[timeKey].includes(chatTime) && item.show) {
state.interactMsgObj[timeKey].push(chatTime);
item[childTimeKey] = chatTime;
state.interactMsgObj[msgTimeObjKey][chatTime] = item;
} else {
delete item[childTimeKey];
}
});
}
state.interactMsgObj[key2] = [];
state.interactMsgObj[numKey] = 0;
},
resetInteractMsgObj(state) {
state.interactMsgObj = {
retainMsgNum: 100, // 保留消息条数
// 直播间互动消息
msgListIds: [], // 所有互动消息的id集合
msgListIdObj: {}, // 所有互动消息key为互动消息idvalue为消息对象
replyBasicInformMsgObj: {}, // 所有回复消息的集合
isScrollToBottom: true, // 用户互动区滚动条是否滚动到底部
temUserInteractMsgList: [], // 用户互动区滚动条没有滚动到底部,将其他用户新发的互动消息暂时存起来
temUserInteractShowNum: 0, // 用户互动区需要展示还未展示的消息数
userInteractMsgList: [], // 用户互动消息
isTgScrollToBottom: true, // 讲师互动区滚动条是否滚动到底部
temTgInteractMsgList: [], // 讲师区滚动条没有滚动到底部,将其他用户新发的互动消息暂时存起来
temTgInteractShowNum: 0, // 讲师需要展示还未展示的消息数
tgInteractMsgList: [], // 讲师互动消息
newTreeMsg: [], // 最新的三条互动消息
msgTimeList: [], // 互动区时间汇总
tgMsgTimeList: [], // 投顾互动区时间汇总
msgTimeObj: {}, // 用户互动区区消息以发言时间为keyvalue为消息对象
tgMsgTimeObj: {}, // 讲师互动区消息以发言时间为keyvalue为消息对象
hasHisMsg: true, // 用户是否有历史消息
tgHasHisMsg: true, // 讲师互动区否有历史消息
};
},
setToken(state, payload) {
localStorage.setItem("token", payload);
state.token = payload;
},
setUserInfo(state, payload) {
localStorage.setItem("userInfo", JSON.stringify(payload));
state.userInfo = payload;
},
setAuthorityList(state, payload) {
localStorage.setItem("authorityList", JSON.stringify(payload));
state.authorityList = payload;
},
outLogin(state) {
state.token = "";
state.userInfo = {};
localStorage.clear();
router.push("/");
},
setForbidLogin(state) {
state.forbidLogin = true;
},
},
actions: {},
modules: {},
});