|
|
@@ -1,204 +1,201 @@
|
|
|
-import define from '@/utils/define'
|
|
|
-import jnpf from '@/utils/jnpf'
|
|
|
+import define from '@/utils/define';
|
|
|
+import jnpf from '@/utils/jnpf';
|
|
|
import {
|
|
|
- useChatStoreWithOut
|
|
|
-} from '@/store/modules/chat'
|
|
|
+ useChatStoreWithOut
|
|
|
+} from '@/store/modules/chat';
|
|
|
import {
|
|
|
- useUserStore
|
|
|
-} from '@/store/modules/user'
|
|
|
+ useUserStore
|
|
|
+} from '@/store/modules/user';
|
|
|
|
|
|
-const chatStore = useChatStoreWithOut()
|
|
|
-const userStore = useUserStore()
|
|
|
-let socketTask = false
|
|
|
-const Socket = {
|
|
|
- conTime: 0,
|
|
|
- initSocket() {
|
|
|
- try {
|
|
|
- const token = uni.getStorageSync('token') || ''
|
|
|
- const sys = uni.getStorageSync('systemInfo') || ''
|
|
|
- const userInfo = uni.getStorageSync('userInfo') || {}
|
|
|
- socketTask = uni.connectSocket({
|
|
|
- url: define.webSocketUrl + '/' + encodeURIComponent(token),
|
|
|
- // #ifdef APP
|
|
|
- header: {
|
|
|
- 'User-Agent': sys
|
|
|
- },
|
|
|
- // #endif
|
|
|
- success() {
|
|
|
- setTimeout(() => chatStore.setSocket(socketTask), 0)
|
|
|
- },
|
|
|
- });
|
|
|
- socketTask.onMessage((res) => {
|
|
|
- let dataStr = res.data;
|
|
|
- const data = JSON.parse(dataStr)
|
|
|
- let options = {
|
|
|
- cover: false,
|
|
|
- sound: 'system',
|
|
|
- title: data.title
|
|
|
- };
|
|
|
- switch (data.method) {
|
|
|
- case "initMessage": //初始化
|
|
|
- const msgInfo = {
|
|
|
- messageText: data.messageDefaultText || '暂无数据',
|
|
|
- messageCount: data.unreadMessageCount + data.unreadSystemMessageCount < 0 ?
|
|
|
- 0 : data.unreadMessageCount + data.unreadSystemMessageCount + data
|
|
|
- .unreadScheduleCount,
|
|
|
- messageDate: data.messageDefaultTime || 0,
|
|
|
- }
|
|
|
- let badgeNum = data.unreadTotalCount
|
|
|
- for (let i = 0; i < data.unreadNums.length; i++) {
|
|
|
- badgeNum = badgeNum + data.unreadNums[i].unreadNum
|
|
|
- }
|
|
|
- chatStore.setBadgeNum(badgeNum)
|
|
|
- chatStore.setMsgInfo(msgInfo)
|
|
|
- break;
|
|
|
- case "Online": //在线用户
|
|
|
-
|
|
|
- break;
|
|
|
- case "Offline": //离线用户
|
|
|
+const chatStore = useChatStoreWithOut();
|
|
|
+const userStore = useUserStore();
|
|
|
+let socketTask = false;
|
|
|
|
|
|
- break;
|
|
|
- case "sendMessage": //发送消息
|
|
|
- chatStore.sendMessage(data)
|
|
|
- break;
|
|
|
- case "receiveMessage": //接收消息
|
|
|
- // #ifdef APP
|
|
|
- plus.push.createMessage('你有一条聊天消息', {
|
|
|
- ...data,
|
|
|
- messageType: 100
|
|
|
- }, options);
|
|
|
- // #endif
|
|
|
- chatStore.receiveMessage(data)
|
|
|
- break;
|
|
|
- case "messageList": //消息列表
|
|
|
- chatStore.getMessageList(data)
|
|
|
- break;
|
|
|
- case "messagePush": //消息推送
|
|
|
- // #ifdef APP
|
|
|
- let content = "公告"
|
|
|
- if (data.messageType == 2) content = '流程'
|
|
|
- if (data.messageType == 3) content = '系统'
|
|
|
- if (data.messageType == 4) content = '日程'
|
|
|
- uni.createPushMessage(res => {})
|
|
|
- uniCloud.callFunction({
|
|
|
- name: 'jnpfPush', // 云函数名称
|
|
|
- data: {
|
|
|
- "push_clientid": uni.getStorageSync('push_clientid'),
|
|
|
- "title": data.title,
|
|
|
- "content": `你有一条${content}消息`,
|
|
|
- "payload": {
|
|
|
- "data": {
|
|
|
- ...data
|
|
|
- },
|
|
|
- "options": {
|
|
|
- ...options
|
|
|
- }
|
|
|
- }
|
|
|
- },
|
|
|
- success: res => {},
|
|
|
- fail: err => {}
|
|
|
- });
|
|
|
- // #endif
|
|
|
- chatStore.messagePush(data)
|
|
|
- break;
|
|
|
- case "closeSocket": //断开websocket连接
|
|
|
- Socket.close()
|
|
|
- break;
|
|
|
- case "logout":
|
|
|
- uni.showToast({
|
|
|
- title: data.msg || '登录已过期',
|
|
|
- icon: 'none',
|
|
|
- complete: () => {
|
|
|
- setTimeout(() => {
|
|
|
- userStore.resetToken()
|
|
|
- setTimeout(() => {
|
|
|
- Socket.close()
|
|
|
- uni.reLaunch({
|
|
|
- url: '/pages/login/index'
|
|
|
- })
|
|
|
- }, 500)
|
|
|
- }, 1000)
|
|
|
- }
|
|
|
- })
|
|
|
- break;
|
|
|
- case "refresh":
|
|
|
- uni.showToast({
|
|
|
- title: '您的权限发生变更,正在刷新界面!',
|
|
|
- icon: 'none',
|
|
|
- complete: () => {
|
|
|
- setTimeout(() => {
|
|
|
- setTimeout(() => {
|
|
|
- uni.reLaunch({
|
|
|
- url: '/pages/index/index'
|
|
|
- })
|
|
|
- }, 500)
|
|
|
- }, 1000)
|
|
|
- }
|
|
|
- })
|
|
|
- break;
|
|
|
- default:
|
|
|
- break;
|
|
|
- }
|
|
|
- })
|
|
|
+const Socket = {
|
|
|
+ conTime: 0,
|
|
|
+ initSocket() {
|
|
|
+ try {
|
|
|
+ const token = uni.getStorageSync('token') || '';
|
|
|
+ const sys = uni.getStorageSync('systemInfo') || '';
|
|
|
+ const userInfo = uni.getStorageSync('userInfo') || {};
|
|
|
+ socketTask = uni.connectSocket({
|
|
|
+ url: define.webSocketUrl + '/' + encodeURIComponent(token),
|
|
|
+ // #ifdef APP
|
|
|
+ header: {
|
|
|
+ 'User-Agent': sys
|
|
|
+ },
|
|
|
+ // #endif
|
|
|
+ success() {
|
|
|
+ setTimeout(() => chatStore.setSocket(socketTask), 0);
|
|
|
+ },
|
|
|
+ });
|
|
|
+ socketTask.onMessage((res) => {
|
|
|
+ let dataStr = res.data;
|
|
|
+ const data = JSON.parse(dataStr);
|
|
|
+ let options = {
|
|
|
+ cover: false,
|
|
|
+ sound: 'system',
|
|
|
+ title: data.title
|
|
|
+ };
|
|
|
+ switch (data.method) {
|
|
|
+ case "initMessage": //初始化
|
|
|
+ const msgInfo = {
|
|
|
+ messageText: data.messageDefaultText || '暂无数据',
|
|
|
+ messageCount: data.unreadMessageCount + data.unreadSystemMessageCount < 0 ? 0 : data.unreadMessageCount + data.unreadSystemMessageCount + data.unreadScheduleCount,
|
|
|
+ messageDate: data.messageDefaultTime || 0,
|
|
|
+ };
|
|
|
+ let badgeNum = data.unreadTotalCount;
|
|
|
+ for (let i = 0; i < data.unreadNums.length; i++) {
|
|
|
+ badgeNum = badgeNum + data.unreadNums[i].unreadNum;
|
|
|
+ }
|
|
|
+ chatStore.setBadgeNum(badgeNum);
|
|
|
+ chatStore.setMsgInfo(msgInfo);
|
|
|
+ break;
|
|
|
+ case "Online": //在线用户
|
|
|
+ break;
|
|
|
+ case "Offline": //离线用户
|
|
|
+ break;
|
|
|
+ case "sendMessage": //发送消息
|
|
|
+ chatStore.sendMessage(data);
|
|
|
+ break;
|
|
|
+ case "receiveMessage": //接收消息
|
|
|
+ // #ifdef APP
|
|
|
+ plus.push.createMessage('你有一条聊天消息', {
|
|
|
+ ...data,
|
|
|
+ messageType: 100
|
|
|
+ }, options);
|
|
|
+ // #endif
|
|
|
+ chatStore.receiveMessage(data);
|
|
|
+ break;
|
|
|
+ case "messageList": //消息列表
|
|
|
+ chatStore.getMessageList(data);
|
|
|
+ break;
|
|
|
+ case "messagePush": //消息推送
|
|
|
+ // #ifdef APP
|
|
|
+ let content = "公告";
|
|
|
+ if (data.messageType == 2) content = '流程';
|
|
|
+ if (data.messageType == 3) content = '系统';
|
|
|
+ if (data.messageType == 4) content = '日程';
|
|
|
+ uni.createPushMessage(res => {});
|
|
|
+ uniCloud.callFunction({
|
|
|
+ name: 'jnpfPush', // 云函数名称
|
|
|
+ data: {
|
|
|
+ "push_clientid": uni.getStorageSync('push_clientid'),
|
|
|
+ "title": data.title,
|
|
|
+ "content": `你有一条${content}消息`,
|
|
|
+ "payload": {
|
|
|
+ "data": {
|
|
|
+ ...data
|
|
|
+ },
|
|
|
+ "options": {
|
|
|
+ ...options
|
|
|
+ }
|
|
|
+ }
|
|
|
+ },
|
|
|
+ success: res => {},
|
|
|
+ fail: err => {}
|
|
|
+ });
|
|
|
+ // #endif
|
|
|
+ chatStore.messagePush(data);
|
|
|
+ break;
|
|
|
+ case "closeSocket": //断开websocket连接
|
|
|
+ Socket.close();
|
|
|
+ break;
|
|
|
+ case "logout":
|
|
|
+ uni.showToast({
|
|
|
+ title: data.msg || '登录已过期',
|
|
|
+ icon: 'none',
|
|
|
+ complete: () => {
|
|
|
+ setTimeout(() => {
|
|
|
+ userStore.resetToken();
|
|
|
+ setTimeout(() => {
|
|
|
+ Socket.close();
|
|
|
+ uni.reLaunch({
|
|
|
+ url: '/pages/login/index'
|
|
|
+ });
|
|
|
+ }, 500);
|
|
|
+ }, 1000);
|
|
|
+ }
|
|
|
+ });
|
|
|
+ break;
|
|
|
+ case "refresh":
|
|
|
+ uni.showToast({
|
|
|
+ title: '您的权限发生变更,正在刷新界面!',
|
|
|
+ icon: 'none',
|
|
|
+ complete: () => {
|
|
|
+ setTimeout(() => {
|
|
|
+ setTimeout(() => {
|
|
|
+ uni.reLaunch({
|
|
|
+ url: '/pages/index/index'
|
|
|
+ });
|
|
|
+ }, 500);
|
|
|
+ }, 1000);
|
|
|
+ }
|
|
|
+ });
|
|
|
+ break;
|
|
|
+ default:
|
|
|
+ break;
|
|
|
+ }
|
|
|
+ });
|
|
|
|
|
|
- socketTask.onOpen((data) => {
|
|
|
- Socket.conTime = 0
|
|
|
- const msg = JSON.stringify({
|
|
|
- method: "OnConnection",
|
|
|
- token,
|
|
|
- mobileDevice: true,
|
|
|
- systemId: userInfo.appSystemId
|
|
|
- });
|
|
|
- Socket.sendMsg(msg)
|
|
|
- })
|
|
|
+ socketTask.onOpen((data) => {
|
|
|
+ Socket.conTime = 0;
|
|
|
+ const msg = JSON.stringify({
|
|
|
+ method: "OnConnection",
|
|
|
+ token,
|
|
|
+ mobileDevice: true,
|
|
|
+ systemId: userInfo.appSystemId
|
|
|
+ });
|
|
|
+ Socket.sendMsg(msg);
|
|
|
+ });
|
|
|
|
|
|
- socketTask.onClose((data) => {
|
|
|
- socketTask = false
|
|
|
- chatStore.setSocket(null)
|
|
|
- })
|
|
|
+ socketTask.onClose((data) => {
|
|
|
+ socketTask = false;
|
|
|
+ chatStore.setSocket(null);
|
|
|
+ });
|
|
|
|
|
|
- socketTask.onError((data) => {
|
|
|
- chatStore.setSocket(null)
|
|
|
- setTimeout(() => {
|
|
|
- Socket.conTime += 1
|
|
|
- if (Socket.conTime <= 10) {
|
|
|
- if (Socket.conTime >= 3) {
|
|
|
- uni.showToast({
|
|
|
- title: 'IM通讯正在连接:' + '连接第' + Socket.conTime + '次!稍后...',
|
|
|
- icon: 'none'
|
|
|
- })
|
|
|
- }
|
|
|
- Socket.reConnect();
|
|
|
- } else {
|
|
|
- uni.showToast({
|
|
|
- title: 'IM通讯连接失败,联系服务器管理员',
|
|
|
- icon: 'none'
|
|
|
- })
|
|
|
- }
|
|
|
- }, 10000)
|
|
|
- })
|
|
|
- } catch (e) {}
|
|
|
- },
|
|
|
- sendMsg(data) {
|
|
|
- if (socketTask === false) return Socket.reConnect()
|
|
|
- let content = data;
|
|
|
- socketTask.send({
|
|
|
- data: content,
|
|
|
- complete(e) {}
|
|
|
- })
|
|
|
- },
|
|
|
- //重连
|
|
|
- reConnect() {
|
|
|
- Socket.initSocket()
|
|
|
- },
|
|
|
- close() {
|
|
|
- socketTask.close({
|
|
|
- complete(e) {
|
|
|
- socketTask = false
|
|
|
- chatStore.setSocket(null)
|
|
|
- }
|
|
|
- })
|
|
|
- }
|
|
|
+ socketTask.onError((data) => {
|
|
|
+ chatStore.setSocket(null);
|
|
|
+ setTimeout(() => {
|
|
|
+ Socket.conTime += 1;
|
|
|
+ if (Socket.conTime <= 10) {
|
|
|
+ if (Socket.conTime >= 3) {
|
|
|
+ uni.showToast({
|
|
|
+ title: 'IM通讯正在连接:' + '连接第' + Socket.conTime + '次!稍后...',
|
|
|
+ icon: 'none'
|
|
|
+ });
|
|
|
+ }
|
|
|
+ Socket.reConnect();
|
|
|
+ } else {
|
|
|
+ uni.showToast({
|
|
|
+ title: 'IM通讯连接失败,联系服务器管理员',
|
|
|
+ icon: 'none'
|
|
|
+ });
|
|
|
+ }
|
|
|
+ }, 10000);
|
|
|
+ });
|
|
|
+ } catch (e) {}
|
|
|
+ },
|
|
|
+ sendMsg(data) {
|
|
|
+ if (socketTask === false) return Socket.reConnect();
|
|
|
+ let content = data;
|
|
|
+ socketTask.send({
|
|
|
+ data: content,
|
|
|
+ complete(e) {}
|
|
|
+ });
|
|
|
+ },
|
|
|
+ //重连
|
|
|
+ reConnect() {
|
|
|
+ Socket.initSocket();
|
|
|
+ },
|
|
|
+ close() {
|
|
|
+ socketTask.close({
|
|
|
+ complete(e) {
|
|
|
+ socketTask = false;
|
|
|
+ chatStore.setSocket(null);
|
|
|
+ }
|
|
|
+ });
|
|
|
+ }
|
|
|
};
|
|
|
|
|
|
-export default Socket
|
|
|
+export default Socket;
|