Files
crmchat/uniapp/store/index.js
T
2026-08-11 22:22:10 +08:00

365 lines
8.4 KiB
JavaScript

import Vue from 'vue';
import Vuex from 'vuex';
import {
cache
} from 'pages/utils/uniApi.js';
import http from 'pages/api/index';
import api from 'pages/api/api.js';
import Socket from 'pages/api/socket.js';
Vue.use(Vuex)
let kefuInfo = cache.get('kefuInfo')
const store = new Vuex.Store({
state: {
//请求地址
http: cache.get('requestFile') && cache.get('dominName') ?
`${cache.get('requestFile')}://${cache.get('dominName')}` : '',
//登录token
token: cache.get('token') || '',
//聊天事件信息
chatList: {},
//聊天事件人物
chatInfo: {},
//聊天记录
chatLog: cache.get('chatLog-' + kefuInfo.id) || {},
//聊天分页
chatLogPage: cache.get('chatLogPage-' + kefuInfo.id) || {},
//客服信息
kefuInfo: kefuInfo || {},
//在线事件返回信息
chatOnline: {},
//账号记录
accountData: cache.get('accountData') || {},
//网站配置
config: cache.get('config') || {
site_title: '',
},
//用户列表分页
userRecordPage: cache.get('userPage-' + kefuInfo.id) || 1,
//用户列表
userRecord: cache.get('userList-' + kefuInfo.id) || {},
//客户列表
bookList: cache.get('bookList') || {},
//用户信息所有
userAllInfo: cache.get('userAllInfo') || {},
// 用户列表
userLists: [],
//app升级
percent: 0,
download: false,
downloadTask: null,
},
mutations: {
setPercent(state, data) {
state.percent = data;
},
setDownload(state, data) {
state.download = data;
},
setDownloadTask(state, data) {
state.downloadTask = data;
state.download = true;
},
stopDownloadTask(state) {
if (state.downloadTask) {
state.downloadTask.abort();
state.downloadTask = null
state.download = false;
state.percent = 0;
}
},
setHttp(state, data) {
state.http = data.requestFile + '://' + data.dominName
cache.set('dominName', data.dominName);
cache.set('requestFile', data.requestFile);
cache.set('wsFile', data.wsFile);
},
setRefresh(state, data) {
state.refresh = data
},
setChatList(state, data) {
if (state.chatList[data.id] == undefined) {
state.chatList[data.id] = []
}
state.chatList[data.id].push(data.list);
},
delChatList(state, data) {
state.chatList[data.id] && state.chatList[data.id].map((item, index) => {
if (item.guid === data.guid) {
state.chatList[data.id].splice(index, 1)
}
})
if (state.chatList[data.id].length) {
delete state.chatList[data.id]
}
},
clearChat(state, data) {
if (data === undefined) {
state.chatList = {};
} else if (data.id) {
if (state.chatList[data.id] !== undefined) {
state.chatList[data.id] = [];
}
}
},
setChatInfo(state, data) {
state.chatInfo = data
},
setchatLog(state, data) {
if (state.chatLog[data.user_id] == undefined) {
state.chatLog[data.user_id] = {};
}
if (state.chatLog[data.user_id][data.upperId] == undefined) {
state.chatLog[data.user_id][data.upperId] = [];
}
state.chatLog[data.user_id][data.upperId] = data.list
cache.set('chatLog-' + state.kefuInfo.id, state.chatLog);
if (state.chatLogPage[data.user_id] === undefined) {
state.chatLogPage[data.user_id] = 0
}
if (data.list.length) {
data.upperId = data.list[0].id;
state.chatLogPage[data.user_id] = data.upperId
}
cache.set('chatLogPage-' + state.kefuInfo.id, state.chatLogPage);
},
setkefuInfo(state, data) {
if (data.one === true) {
state.kefuInfo.is_backstage = data.is_backstage;
} else {
state.kefuInfo = data;
}
cache.set('kefuInfo', data)
},
setChatOnline(state, data) {
state.chatOnline = data;
},
setToken(state, data) {
state.token = data;
cache.set('token', data);
},
//退出登录
logout(state) {
state.token = '';
state.kefuInfo = {};
cache.remove('userData');
cache.remove('accountData');
cache.remove('token');
},
setConfig(state, data) {
state.config = data;
cache.set('config', data);
},
setUserRecord(state, data) {
if (state.userRecord[data.page] === undefined) {
state.userRecord[data.page] = [];
}
state.userRecord[data.page] = data.list;
state.userRecordPage = data.page
cache.set('userList-' + state.kefuInfo.id, state.userRecord);
if (data.list.length > 0) {
data.page++;
}
cache.set('userPage-' + state.kefuInfo.id, data.page);
},
setBookList(state, data) {
state.bookList = data;
cache.set('bookList', data)
},
setUserInfo(state, data) {
state.userAllInfo[data.userId] = data.userInfo;
cache.set('userAllInfo', state.userAllInfo);
},
setUserList(state, data) {
state.userLists = data;
}
},
actions: {
//获取客服信息
getKeufuInfo({
commit
}) {
return new Promise((resolve, reject) => {
http(api.kefuInfoApi).then(data => {
commit('setkefuInfo', data)
commit('setConfig', {
site_title: data.site_title
})
resolve(data);
}).catch(res => {
reject(res)
});
})
},
//获取聊天用户列表
getUserRecord({
commit
}, data) {
return new Promise((resolve, reject) => {
http(api.userRecord, {
nickname: data.nickname,
...data.pageData,
is_tourist: data.is_tourist
}).then(res => {
commit('setUserRecord', {
page: data.pageData.page,
list: res
});
resolve(res);
}).catch(err => {
console.log(err)
reject(err)
})
})
},
// 获取所有聊天消息id
getUserRecordAll() {
return new Promise((resolve, reject) => {
http(api.userRecordAll).then(res => {
resolve(res);
}).catch(err => {
reject(err);
});
});
},
// 删除聊天列表用户
deleteUserRecord({
commit
}, data) {
return new Promise((resolve, reject) => {
http(api.deleteUserRecord, {
id: data.id
}).then(res => {
resolve(res);
}).catch(err => {
reject(err);
});
});
},
//获取聊天记录
getChatLogList({
commit
}, data) {
return new Promise((resolve, reject) => {
http(api.kefuServiceList, {
user_id: data.user_id,
...data.pageData
}).then(res => {
commit('setchatLog', {
upperId: data.pageData.upperId,
list: res,
user_id: data.user_id
})
resolve(res)
}).catch(err => {
reject(err)
})
})
},
//获取客服列表
getBookList({
commit
}, data) {
return new Promise((resolve, reject) => {
http(api.userList, data).then(res => {
this.bookList = res;
commit('setBookList', res)
resolve(res)
}).catch(res => {
reject(res)
});
})
},
//设置Client id
saveUserClient({
commit
}, data) {
return new Promise((resolve, reject) => {
http(api.userClient, {
client_id: data
}).then(res => {
cache.set('cid', cid);
resolve(res);
}).catch(res => reject(res));
})
},
updataUserCount({
commit
}) {
return new Promise((resolve, reject) => {
http(api.userCount).then(res => {
if (res.count != 0) {
uni.setTabBarBadge({
index: 0,
text: String(res.count) // 设置为数值,右下角则不在显示
});
} else {
uni.removeTabBarBadge({
index: 0
});
}
resolve(res)
}).catch(err => reject(err));
});
},
login({
commit
}, data) {
},
getUserInfo({
commit
}, userId) {
return new Promise((resolve, reject) => {
http(api.userInfo, {
user_id: userId
}).then(res => {
commit('setUserInfo', {
userId: userId,
userInfo: res
});
resolve(res);
}).catch(err => reject(err));
})
}
},
getters: {
chatList: state => state.chatList,
chatInfo: state => state.chatInfo,
chatLog: state => state.chatLog,
token: state => state.token,
http: state => state.http,
userRecord: state => {
let userList = [];
Object.keys(state.userRecord).map(item => {
state.userRecord[item].map(value => {
userList.push(value)
})
})
return {
userList,
page: state.userRecordPage,
}
},
chatLog: (state) => (user_id) => {
let chatLog = [];
if (state.chatLog[user_id] === undefined) {
return [];
}
Object.keys(state.chatLog[user_id]).map(item => {
state.chatLog[user_id][item].map(value => {
chatLog.push(value)
})
})
return chatLog;
},
config: state => state.config,
kefuInfo: state => state.kefuInfo,
bookList: state => state.bookList,
chatLogPage: (state) => (user_id) => state.chatLogPage[user_id],
userInfo: (state) => (user_id) => state.userAllInfo[user_id] || {},
}
});
export default store