import { useHttp } from '@crami/http';
import { getInfo, ICP_CONFIG } from '@/utils/commMethods';
import { notification } from 'ant-design-vue';
import { h, ref } from 'vue';
import { UserOutlined } from '@ant-design/icons-vue';
import bus from '@/utils/bus';
import router from '@/router';
import { message } from '@crami/ui';
import _store from '@/store/index';
let socket = null;
const messageUrl = ref();
const getUrl = async () => {
const data = await useHttp({
url: '/api/msg/serverUrl/getWebsocketServerUrl',
method: 'get',
});
if (data.code === 200) {
return data.data;
} else {
return false;
}
};
//处理消息弹窗内容,返回innerhtml
const handleMessageData = (messageContentParams, messageContentUrlParams) => {
if (!messageContentUrlParams) return;
let messageContent = messageContentParams;
const messageUrl = JSON.parse(messageContentUrlParams);
for (const i in messageUrl) {
const reg = new RegExp(`\%${i}\%`, 'g');
messageContent = messageContent.replace(
reg,
`` +
messageUrl[i].name +
``,
);
}
window.aClic = aClic;
return messageContent;
};
const aClic = e => {
for (const i in messageUrl.value) {
if (messageUrl.value[i].name == e) {
console.log(messageUrl.value[i].params);
if (messageUrl.value[i]?.url.includes('/changeManage/changeManageMainPage')) {
router.push({
name: 'changeNoticeInspectorRouter',
query: {
objectEID: messageUrl.value[i].params,
},
});
return true;
} else {
router.push({
path: messageUrl.value[i].url,
query: {
key: JSON.stringify(messageUrl.value[i].params),
},
});
}
}
}
};
const setSocket = async (opts = {}) => {
if (socket && [socket.CONNECTING, socket.OPEN].includes(socket.readyState)) return;
const router = opts.router;
const userInfo = getInfo(ICP_CONFIG);
const socketUrl = await getUrl();
if (!userInfo || !socketUrl) return;
const URL = `${socketUrl}${userInfo.user_id}`;
socket = new WebSocket(URL);
socket.addEventListener('message', event => {
const { data } = event;
bus.emit('getMessageData');
let result: Record = {};
try {
result = JSON.parse(data);
} catch (e) {
// TODO
}
const key = result.messageId || `open${Date.now()}`;
if (result.messageTitle || result.abstractContent || result.messageContent) {
//0830 处理content数据
const messageContentData = handleMessageData(result.messageContent, result.messageContentUrl);
if (result.messageContentUrl) {
messageUrl.value = JSON.parse(result.messageContentUrl);
}
notification.open({
message: ``,
key,
description: h(
'div',
{
fontSize: '14px',
fontWeight: '900',
onClick: e => {
if (e.target.nodeName !== 'A') {
notification.close(key);
const allowRouters = _store.getters['user/allowRouters'] || [];
// 存在消息中心导航菜单
const messageCenter = allowRouters.find(route => route.name === 'MessageCenter');
// 存在我收到的导航菜单
if (
messageCenter &&
messageCenter?.meta?.frontHidden !== true &&
messageCenter.children && messageCenter.children.length
) {
const receivedMsgPage = messageCenter.children.find(route => route.name === 'ReceivedMsg');
if (receivedMsgPage && receivedMsgPage?.meta?.frontHidden !== true) {
setTimeout(() => {
router.push({
path: `/platform/Message/MessageCenter/ReceivedMsg/Index`,
query: {
activeKey: result.msgType,
eid: result.msgReceivedEid,
},
});
}, 300);
} else {
message.warning(`“消息中心-我收到的”菜单未授权`);
}
} else {
message.warning(`“消息中心-我收到的”菜单未授权`);
}
}
// else {
// e.preventDefault()
// }
},
},
[
h('div', { style: { display: 'flex', width: '100%', marginBottom: '10px' } }, [
h(
'div',
{
style: { width: `50px`, fontSize: '30px' },
},
[h(UserOutlined, { style: 'color: #108ee9' })],
),
h(
'div',
{
style: { width: `calc(100% - 50px)`, lineHeight: '50px' },
},
`[一条新消息]`,
),
]),
h('p', { innerHTML: `标题: ${result?.messageTitle}` }),
h('p', { innerHTML: `摘要: ${result?.abstractContent}` }),
result.messageContent && messageContentData
? h('p', { innerHTML: `内容: ${messageContentData}` })
: null,
// h('div', { style: { display: 'flex', width: '100%', marginTop: '10px' } }, [
// h(
// Button,
// {
// style: { width: `40%` },
// onClick: () => {
// console.log('业务联查1');
// },
// },
// `业务联查1`,
// ),
// h(
// Button,
// {
// style: { width: `40%` },
// onClick: () => {
// console.log('业务联查2');
// },
// },
// `业务联查2`,
// ),
// ]),
],
),
});
}
});
};
const closeSocket = async () => {
socket.close();
};
export { setSocket, closeSocket };