diff --git a/src/api/customermanagement/customerList/index.ts b/src/api/customermanagement/customerList/index.ts index 928cedc..6621011 100644 --- a/src/api/customermanagement/customerList/index.ts +++ b/src/api/customermanagement/customerList/index.ts @@ -33,3 +33,13 @@ export function updateResource(resourcesDto: resourcesDtoDTO) { // export function deleteUser(userId: number) { // return httpClient.delete>(`/system/user/${userId}`) // } + +/** + * 新消息分页查询 + * @param pageParams 分页参数 + */ +export function messageAccessLogs(pageParams: SysUserPageParam) { + return httpClient.get('/notify/user-announcement/page', { + params: pageParams + }) +} diff --git a/src/api/customermanagement/customerList/types.ts b/src/api/customermanagement/customerList/types.ts index 6e67763..6b4818d 100644 --- a/src/api/customermanagement/customerList/types.ts +++ b/src/api/customermanagement/customerList/types.ts @@ -18,6 +18,7 @@ export type CustomerListQO = { startTime?: string // 结束时间 endTime?: string + clueId?: string } /** * 我的线索record diff --git a/src/assets/iconfont.css b/src/assets/iconfont.css new file mode 100644 index 0000000..1585a12 --- /dev/null +++ b/src/assets/iconfont.css @@ -0,0 +1,38 @@ +@font-face { + font-family: 'iconfont'; /* Project id 4340011 */ + src: url('//at.alicdn.com/t/c/font_4340011_rzfq6m1kbn.woff2?t=1700639506016') format('woff2'), + url('//at.alicdn.com/t/c/font_4340011_rzfq6m1kbn.woff?t=1700639506016') format('woff'), + url('//at.alicdn.com/t/c/font_4340011_rzfq6m1kbn.ttf?t=1700639506016') format('truetype'); +} + +.iconfont { + font-family: 'iconfont' !important; + font-size: 16px; + font-style: normal; + -webkit-font-smoothing: antialiased; + -moz-osx-font-smoothing: grayscale; +} + +.icon-xin2:before { + content: '\e647'; +} + +.icon-xin1:before { + content: '\e600'; +} + +.icon-xin:before { + content: '\e6c9'; +} + +.icon-xiaoxi1:before { + content: '\e611'; +} + +.icon-xiaoxizhongxin:before { + content: '\e7d9'; +} + +.icon-xiaoxi:before { + content: '\e6c5'; +} diff --git a/src/assets/images/zanwu.png b/src/assets/images/zanwu.png new file mode 100644 index 0000000..11806c8 Binary files /dev/null and b/src/assets/images/zanwu.png differ diff --git a/src/components/Message/index.vue b/src/components/Message/index.vue new file mode 100644 index 0000000..348c107 --- /dev/null +++ b/src/components/Message/index.vue @@ -0,0 +1,376 @@ + + + + diff --git a/src/components/Message/messageSearch.vue b/src/components/Message/messageSearch.vue new file mode 100644 index 0000000..1cba931 --- /dev/null +++ b/src/components/Message/messageSearch.vue @@ -0,0 +1,72 @@ + + + diff --git a/src/hooks/websocket.ts b/src/hooks/websocket.ts index aab8883..5f0ae7b 100644 --- a/src/hooks/websocket.ts +++ b/src/hooks/websocket.ts @@ -1,57 +1,72 @@ -// import { useWebSocket, type UseWebSocketReturn } from '@vueuse/core' -// import { useUserStore } from '@/stores/user-store' -// import { emitter } from '@/hooks/mitt' - -// let useWebSocketReturn: UseWebSocketReturn | undefined = undefined -// const useAdminWebSocket = () => { -// if (useWebSocketReturn && useWebSocketReturn.status.value != 'CLOSED') { -// return useWebSocketReturn -// } - -// const { accessToken } = useUserStore() - -// // ws地址 -// const baseUri = import.meta.env.VITE_API_URL -// const host = window.location.host -// const wsUri = `ws://${host}${baseUri}/ws?access_token=${accessToken}` - -// useWebSocketReturn = useWebSocket(wsUri, { -// autoReconnect: { -// retries: 3, -// delay: 1000, -// onFailed() { -// console.error('Failed to connect WebSocket after 3 retries') -// } -// }, -// heartbeat: { -// message: '{"type": "ping"}', -// interval: 30000 -// } -// }) - -// watch( -// () => useWebSocketReturn!.data.value, -// value => { -// let event -// let dataMsg - -// try { -// dataMsg = JSON.parse(value) -// event = dataMsg.type -// // 心跳响应跳过发布 -// if (event === 'pong') { -// return -// } -// } catch (e) { -// // 纯文本消息 -// event = 'plaintext' -// dataMsg = value -// } -// emitter.emit(event, dataMsg) -// } -// ) - -// return useWebSocketReturn -// } - -// export default useAdminWebSocket +import { useWebSocket, type UseWebSocketReturn } from '@vueuse/core' +import { useUserStore } from '@/stores/user-store' +import { emitter } from '@/hooks/mitt' +import { message } from 'ant-design-vue' + +let useWebSocketReturn: UseWebSocketReturn | undefined = undefined +//它是一个自定义的Vue hook,用于管理WebSocket连接 +const useAdminWebSocket = () => { + //检查是否已经存在WebSocket连接,以及连接状态。如果WebSocket连接存在且状态不是已关闭,则直接返回现有的WebSocket连接。 + if (useWebSocketReturn && useWebSocketReturn.status.value != 'CLOSED') { + return useWebSocketReturn + } + + const { accessToken } = useUserStore() + console.log(accessToken, 'accessToken') + + // ws地址 + const baseUri = import.meta.env.VITE_API_URL + const host = window.location.host + console.log(host, 'host') + const wsUri = `ws://${host}${baseUri}/ws?access_token=${accessToken}` + console.log(wsUri, 'wsUri') + + //使用useWebSocket函数创建WebSocket连接,并配置自动重连和心跳机制 + useWebSocketReturn = useWebSocket(wsUri, { + autoReconnect: { + retries: 3, + delay: 1000, + onFailed() { + console.error('Failed to connect WebSocket after 3 retries') + } + }, + heartbeat: { + message: '{"type": "ping"}', + interval: 30000 + } + }) + + //监听WebSocket的数据变化,根据接收到的消息类型进行相应的处理,并通过emitter发布事件或数据。 + watch( + () => useWebSocketReturn!.data.value, + value => { + let event + let dataMsg + + try { + dataMsg = JSON.parse(value) + event = dataMsg.type + // 心跳响应跳过发布 + if (event === 'pong') { + return + } + } catch (e) { + // 纯文本消息 + event = 'plaintext' + dataMsg = value + } + // emitter.emit(event, dataMsg) + // console.log(dataMsg, 'dataMsg') + // Show alert with the received message + // alert(JSON.stringify(dataMsg.title) + JSON.stringify(dataMsg.content)) + message.info( + JSON.stringify(dataMsg.title).slice(1, -1) +':'+ JSON.stringify(dataMsg.content).slice(1, -1) + ) + } + ) + + return useWebSocketReturn +} + +//将创建的WebSocket连接对象返回给调用者 +export default useAdminWebSocket diff --git a/src/layouts/components/RightContent/AvatarDropdown.vue b/src/layouts/components/RightContent/AvatarDropdown.vue index b5f59ae..5e21dd1 100644 --- a/src/layouts/components/RightContent/AvatarDropdown.vue +++ b/src/layouts/components/RightContent/AvatarDropdown.vue @@ -2,46 +2,71 @@ - - - - - - {{ currentUser.nickname }} - - - diff --git a/src/views/basic/iframe/index.vue b/src/views/basic/iframe/index.vue index e6bd386..91930ab 100644 --- a/src/views/basic/iframe/index.vue +++ b/src/views/basic/iframe/index.vue @@ -8,12 +8,15 @@