diff --git a/src/hooks/websocket.ts b/src/hooks/websocket.ts index 405f571..9aa0adb 100644 --- a/src/hooks/websocket.ts +++ b/src/hooks/websocket.ts @@ -6,62 +6,57 @@ import { message } from 'ant-design-vue' let useWebSocketReturn: UseWebSocketReturn | undefined = undefined //它是一个自定义的Vue hook,用于管理WebSocket连接 const useAdminWebSocket = () => { - return new Promise((resolve, _) => { - //检查是否已经存在WebSocket连接,以及连接状态。如果WebSocket连接存在且状态不是已关闭,则直接返回现有的WebSocket连接。 - if (useWebSocketReturn && useWebSocketReturn.status.value != 'CLOSED') { - return useWebSocketReturn - } + //检查是否已经存在WebSocket连接,以及连接状态。如果WebSocket连接存在且状态不是已关闭,则直接返回现有的WebSocket连接。 + if (useWebSocketReturn && useWebSocketReturn.status.value != 'CLOSED') { + return useWebSocketReturn + } - const { accessToken } = useUserStore() - console.log(accessToken, 'accessToken') + const { accessToken } = useUserStore() - // ws地址 - const baseUri = import.meta.env.VITE_API_URL - const host = window.location.host - const wsUri = `wss://${host}${baseUri}/ws?access_token=${accessToken}` - //使用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 + // ws地址 + const baseUri = import.meta.env.VITE_API_URL + const host = window.location.host + const wsUri = `wss://${host}${baseUri}/ws?access_token=${accessToken}` + //使用useWebSocket函数创建WebSocket连接,并配置自动重连和心跳机制 + useWebSocketReturn = useWebSocket(wsUri, { + autoReconnect: { + retries: 3, + delay: 1000, + onFailed() { + console.error('Failed to connect WebSocket after 3 retries') } - }) - //监听WebSocket的数据变化,根据接收到的消息类型进行相应的处理,并通过emitter发布事件或数据。 - watch( - () => useWebSocketReturn!.data.value, - value => { - let event - let dataMsg + }, + 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 + try { + dataMsg = JSON.parse(value) + event = dataMsg.type + // 心跳响应跳过发布 + if (event === 'pong') { + return } - // emitter.emit(event, dataMsg) - // +':'+ JSON.stringify(dataMsg.content).slice(1, -1) - message.info(dataMsg.title + ',手动刷新后获取最新线索数据') - // message.info(JSON.stringify(dataMsg.title).slice(1, -1) + ',手动刷新后获取最新线索数据') - resolve(value) + } catch (e) { + // 纯文本消息 + event = 'plaintext' + dataMsg = value } - ) - - // return useWebSocketReturn - }) + // emitter.emit(event, dataMsg) + // +':'+ JSON.stringify(dataMsg.content).slice(1, -1) + message.info(dataMsg.title + ',手动刷新后获取最新线索数据') + // message.info(JSON.stringify(dataMsg.title).slice(1, -1) + ',手动刷新后获取最新线索数据') + } + ) + return useWebSocketReturn } //将创建的WebSocket连接对象返回给调用者 diff --git a/src/layouts/components/RightContent/AvatarDropdown.vue b/src/layouts/components/RightContent/AvatarDropdown.vue index 3711b67..9756c1b 100644 --- a/src/layouts/components/RightContent/AvatarDropdown.vue +++ b/src/layouts/components/RightContent/AvatarDropdown.vue @@ -111,14 +111,26 @@ onMounted(() => { userInfoCurrent.value === 'ROLE_SALESMAN' || userInfoCurrent.value === 'ROLE_STORE_SALESMAN' ) { - useAdminWebSocket().then((res: any) => { - const newRes = JSON.parse(res) - newRes.show = true - //追加到数组最前面 - newclueList.value.unshift(newRes) - //移除数组最后一项,保证始终显示10条消息 - newclueList.value.pop() - }) + const websocket = useAdminWebSocket() + watch( + () => websocket.data.value, + newVal => { + const newRes = JSON.parse(newVal) + newRes.show = true + //追加到数组最前面 + newclueList.value.unshift(newRes) + //移除数组最后一项,保证始终显示10条消息 + newclueList.value.pop() + } + ) + // useAdminWebSocket().then((res: any) => { + // const newRes = JSON.parse(res) + // newRes.show = true + // //追加到数组最前面 + // newclueList.value.unshift(newRes) + // //移除数组最后一项,保证始终显示10条消息 + // newclueList.value.pop() + // }) } }) diff --git a/src/stores/user-store.ts b/src/stores/user-store.ts index bea0d52..458240d 100644 --- a/src/stores/user-store.ts +++ b/src/stores/user-store.ts @@ -7,7 +7,7 @@ import type { SysMenuRouterVO } from '@/api/system/menu/types' export interface UserInfo extends LoginUserInfo { permissions: string[] - gender: number | undefined + gender?: number | undefined roleCodes: string[] } diff --git a/src/views/basic/iframe/index.vue b/src/views/basic/iframe/index.vue index be2e259..990b7fb 100644 --- a/src/views/basic/iframe/index.vue +++ b/src/views/basic/iframe/index.vue @@ -61,14 +61,16 @@ > - - + + + + @@ -111,14 +113,16 @@ > - - + + + + @@ -149,14 +153,16 @@ > --> - - + + + + @@ -187,14 +193,16 @@ > --> - - + + + + @@ -260,6 +268,8 @@ const searchObj = reactive({ enterIdList: [], assignedIdList: [] }) +const spinning = ref(false) +const spinning2 = ref(false) // 录入员 // const enterIdList = ref() // const assignedIdList = ref() @@ -312,7 +322,6 @@ function iframeResize() { onMounted(() => { window.addEventListener('resize', iframeResize) roleCodes.value = userStore.roleCodes || [] - console.log('🚀 ~ file: index.vue:154 ~ roleCodes:', roleCodes.value) initClueEnter() initSalesman() initGetHomePageBase() @@ -346,7 +355,7 @@ const initGetHomePageBase = () => { // 线索录入明细查询 const searchGetHomePageEnter = () => { - if (searchObj.searchDate1.length == 0) { + if (!searchObj.searchDate1 || searchObj.searchDate1.length == 0) { message.warning('请选择日期') return } @@ -358,6 +367,7 @@ const searchGetHomePageEnter = () => { message.warning('请选择渠道') return } + spinning.value = true doRequest( getHomePageEnter({ createStartTime: dayjs(searchObj.searchDate1[0]).format('YYYY-MM-DD'), @@ -375,7 +385,6 @@ const searchGetHomePageEnter = () => { const obj: any = {} obj.data = Object.values(res.data[i]) obj.type = 'line' - obj.stack = 'Total' obj.name = i arr.push(obj) } @@ -390,6 +399,7 @@ const searchGetHomePageEnter = () => { } else { message.info('未查询到数据') } + spinning.value = false } } ) @@ -408,6 +418,7 @@ const searchGetHomePageAssigned = () => { message.warning('请选择渠道') return } + spinning2.value = true doRequest( getHomePageAssigned({ createStartTime: dayjs(searchObj.searchDate2[0]).format('YYYY-MM-DD'), @@ -425,7 +436,6 @@ const searchGetHomePageAssigned = () => { const obj: any = {} obj.data = Object.values(res.data[i]) obj.type = 'line' - obj.stack = 'Total' obj.name = i arr.push(obj) } @@ -440,13 +450,14 @@ const searchGetHomePageAssigned = () => { } else { message.info('未查询到数据') } + spinning2.value = false } } ) } // 分发数据统计-分发员 const searchGetDistributors = () => { - if (searchObj.searchDate1.length == 0) { + if (!searchObj.searchDate1 || searchObj.searchDate1.length == 0) { message.warning('请选择日期') return } @@ -454,6 +465,7 @@ const searchGetDistributors = () => { message.warning('请选择渠道') return } + spinning.value = true doRequest( getDistributors({ createStartTime: dayjs(searchObj.searchDate1[0]).format('YYYY-MM-DD'), @@ -469,13 +481,11 @@ const searchGetDistributors = () => { let obj: any = {} obj.data = Object.values(res.data).map((item: any) => item.assigned) obj.type = 'line' - obj.stack = 'Total' obj.name = '分发数' arr.push(obj) obj = {} obj.data = Object.values(res.data).map((item: any) => item.enter) obj.type = 'line' - obj.stack = 'Total' obj.name = '进线数' arr.push(obj) const chatData: chartData = { @@ -489,13 +499,14 @@ const searchGetDistributors = () => { } else { message.info('未查询到数据') } + spinning.value = false } } ) } // 线索统计-业务员 const searchgetSalesman = () => { - if (searchObj.searchDate1.length == 0) { + if (!searchObj.searchDate1 || searchObj.searchDate1.length == 0) { message.warning('请选择日期') return } @@ -503,6 +514,7 @@ const searchgetSalesman = () => { message.warning('请选择渠道') return } + spinning.value = true doRequest( getSalesman({ createStartTime: dayjs(searchObj.searchDate1[0]).format('YYYY-MM-DD'), @@ -518,7 +530,6 @@ const searchgetSalesman = () => { const obj: any = {} obj.data = Object.values(res.data) obj.type = 'line' - obj.stack = 'Total' obj.name = '分配数' arr.push(obj) const chatData: chartData = { @@ -532,6 +543,7 @@ const searchgetSalesman = () => { } else { message.info('未查询到数据') } + spinning.value = false } } ) diff --git a/src/views/login/components/LoginContent.vue b/src/views/login/components/LoginContent.vue index edaf63e..376a86a 100644 --- a/src/views/login/components/LoginContent.vue +++ b/src/views/login/components/LoginContent.vue @@ -129,7 +129,7 @@ function store(res: LoginResult) { // 存储用户信息 const info = res.info - console.log(info, 'info') + // console.log(info, 'info') const roleCodes = res.attributes?.roleCodes || [] const permissions = res.attributes?.permissions || [] userStore.userInfo = {