diff --git a/src/store/modules/chat/chat.js b/src/store/modules/chat/chat.js
index 0b409e2..6fc84d7 100644
--- a/src/store/modules/chat/chat.js
+++ b/src/store/modules/chat/chat.js
@@ -7,25 +7,37 @@ const state = () => ({
queue: [],
task: [],
sessionData: {},
+ currentSession: null,
+ messageList: [],
+ messageType: ['', 'text'],
});
-const getters = {};
+const getters = {
+ parseTime: () => {
+ return (timestamp) => {
+ dayjs(new Date(timestamp)).format('MM-DD HH:mm:ss');
+ };
+ },
+ parseContent: () => {
+ return (payload) => {
+ payload = JSON.parse(payload);
+ if ('text' in payload) {
+ payload = payload.text;
+ } else {
+ payload = '[未知消息]';
+ }
+ return payload;
+ };
+ },
+};
const mutations = {
setSocket: (state, data) => (state.socket = data),
setHeart: (state, data) => (state.heart = data),
setTask: (state, data) => (state.task = data),
addTask: (state, data) => state.task.push(data),
delTask: (state, data) => state.task.splice(data, 1),
- receive: (state, { code, traceType, content }) => {
- if (code === 200) {
- switch (traceType) {
- case 27:
- state.sessionData = content;
- break;
- default:
- break;
- }
- }
- },
+ setCurrentSession: (state, data) => (state.currentSession = data),
+ setSessionData: (state, data) => (state.sessionData = data),
+ setMessageList: (state, data) => (state.messageList = data),
};
const actions = {
/**
@@ -36,17 +48,7 @@ const actions = {
if (window.WebSocket) {
const socket = new WebSocket('ws://192.168.10.93:8090/ws?client=' + token);
socket.onmessage = ({ data }) => {
- data = JSON.parse(data);
- if (data.traceType !== 0) {
- let index = state.task.findIndex((item) => item.traceId === data.traceId);
- if (index !== -1) {
- commit('delTask', index);
- commit('receive', data);
- console.info('[chat] msg', data);
- } else {
- console.info('[chat] deprecated', data);
- }
- }
+ dispatch('receive', data);
};
socket.onopen = () => {
commit(
@@ -110,7 +112,47 @@ const actions = {
}
},
/**
- * 查询回话列表
+ * 接收数据
+ */
+ receive: ({ state, commit, dispatch }, data) => {
+ data = JSON.parse(data);
+ if (data.traceType !== 0) {
+ let index = state.task.findIndex((item) => item.traceId === data.traceId);
+ if (index !== -1) {
+ commit('delTask', index);
+ dispatch('handle', data);
+ console.info('[chat] msg', data);
+ } else {
+ console.info('[chat] deprecated', data);
+ }
+ }
+ },
+ handle: ({ state, commit, dispatch }, { code, traceType, content, session }) => {
+ if (code === 200) {
+ switch (traceType) {
+ // 收到消息
+ case 25:
+ if (session.id === state.currentSession) {
+ commit('setMessageList', [...state.messageList, content.content]);
+ } else {
+ dispatch('querySession');
+ }
+ break;
+ // 会话列表
+ case 27:
+ commit('setSessionData', content);
+ break;
+ // 消息列表
+ case 28:
+ commit('setMessageList', content);
+ break;
+ default:
+ break;
+ }
+ }
+ },
+ /**
+ * 查询会话列表
*/
querySession: ({ dispatch }) => {
dispatch('invoke', {
@@ -118,6 +160,15 @@ const actions = {
content: { storeId: 1 },
});
},
+ /**
+ * 查询会话消息列表
+ */
+ querySessionMessage: ({ state, dispatch }) => {
+ dispatch('invoke', {
+ traceType: 28,
+ content: { sessionId: state.currentSession, size: 100, topMessageId: null },
+ });
+ },
};
export default {
state,
diff --git a/src/views/chat/index.vue b/src/views/chat/index.vue
index 611f942..9c869b3 100644
--- a/src/views/chat/index.vue
+++ b/src/views/chat/index.vue
@@ -1,6 +1,5 @@
当前客服:小爱