| src/App.vue | ●●●●● patch | view | raw | blame | history | |
| src/api/user/index.js | ●●●●● patch | view | raw | blame | history | |
| src/config/env.js | ●●●●● patch | view | raw | blame | history | |
| src/hooks/useGlobalWS.js | ●●●●● patch | view | raw | blame | history | |
| src/utils/voiceCallByTX/index.js | ●●●●● patch | view | raw | blame | history |
src/App.vue
@@ -1,116 +1,76 @@ <script setup> import {onHide, onLaunch, onShow} from "@dcloudio/uni-app"; import {useAppStore, useUserStore} from "@/store"; import {genTestUserSig} from '@/utils/voiceCallByTX/GenerateTestUserSig.js'; import {onHide, onLaunch, onShow} from "@dcloudio/uni-app"; import {useAppStore, useUserStore} from "@/store"; import {useGlobalWS} from "@/hooks/useGlobalWS.js"; const appStore = useAppStore(); const userStore = useUserStore(); useGlobalWS() const appStore = useAppStore(); const userStore = useUserStore(); const userId = computed(() => userStore?.userInfo?.user_id) onShow(() => { console.log("App Show"); }); onHide(() => { console.log("App Hide"); }); onLaunch(() => { // 初始化系统信息 appStore.initSystemInfo(); if (!userStore.userInfo) { //不存在则跳转至登录页 uni.reLaunch({ url: "/pages/login/index", }) } }); // #ifdef APP-PLUS import TrtcCloud from '@/utils/voiceCallByTX/TrtcCloud/lib/index'; import { TRTCAppScene } from '@/utils/voiceCallByTX/TrtcCloud/lib/TrtcDefines'; const trtcCloud = TrtcCloud.createInstance(); function enterRoomFun() { const {userSig, SDKAppID} = genTestUserSig(userId.value); const params = {sdkAppId: SDKAppID, userId: userId.value, roomId: 789456, userSig: userSig}; trtcCloud.enterRoom(params, TRTCAppScene.TRTCAppSceneVideoCall) trtcCloud.startLocalAudio(); onLaunch(() => { // 初始化系统信息 appStore.initSystemInfo(); if (!userStore.userInfo) { //不存在则跳转至登录页 uni.reLaunch({ url: "/pages/login/index", }) } // #endif // #ifdef H5 import TRTC from 'trtc-sdk-v5'; const trtc = TRTC.create(); function enterRoomFunByH5() { const {userSig, SDKAppID} = genTestUserSig(userId.value); trtc.enterRoom({ sdkAppId:SDKAppID, userId:userId.value, userSig, roomId: 789456 }) trtc.startLocalAudio() } // #endif // 初始化登陆腾讯音频平台 watch(userId, () => { if (!userId.value) return // #ifdef APP-PLUS // enterRoomFun() // #endif // #ifdef H5 // enterRoomFunByH5() // #endif }, { immediate: true }) onShow(() => { console.log("App Show"); }); onHide(() => { console.log("App Hide"); }); }); </script> <style lang="scss"> /* 每个页面公共css */ @import "uview-plus/index.scss"; @import "@/static/styles/common.scss"; /* 每个页面公共css */ @import "uview-plus/index.scss"; @import "@/static/styles/common.scss"; .TUICallKit-mobile { position: fixed; left: 0; top: 0; z-index: 9999; } .TUICallKit-mobile { position: fixed; left: 0; top: 0; z-index: 9999; } page { background-image: url('~@/static/images/user/bg.png'); background-size: cover; background-position: center; background-repeat: no-repeat; background-attachment: fixed; // min-height: 10vh; } page { background-image: url('~@/static/images/user/bg.png'); background-size: cover; background-position: center; background-repeat: no-repeat; background-attachment: fixed; // min-height: 10vh; } .uni-tabbar__item:nth-child(4) { .uni-tabbar__bd { .uni-tabbar__icon { width: 60px !important; height: 60px !important; margin-top: -20px; } .uni-tabbar__item:nth-child(4) { .uni-tabbar__bd { .uni-tabbar__icon { width: 60px !important; height: 60px !important; margin-top: -20px; } } } .uni-tabbar-border { background-color: #f6f6f6 !important; } .uni-tabbar-border { background-color: #f6f6f6 !important; } .uni-page-head__title { font-family: Source Han Sans CN, Source Han Sans CN !important; font-weight: 400 !important; font-size: 17px !important; color: #222324 !important; } .uni-page-head__title { font-family: Source Han Sans CN, Source Han Sans CN !important; font-weight: 400 !important; font-size: 17px !important; color: #222324 !important; } .uni-page-head { background: transparent !important; } .uni-page-head { background: transparent !important; } </style> src/api/user/index.js
@@ -68,4 +68,13 @@ newPassword1, }, }); }; }; // 发送通话信息 export const sendVoiceCallApi = (data) => { return request({ url: `/drone-device-core/dp/call/sendVoiceCall`, method: 'post', data }) } src/config/env.js
@@ -6,18 +6,21 @@ VITE_APP_WEBVIEW_URL: 'http://localhost:5173/drone-app-web-view/#/webViewWrapper', VITE_API_BASE_URL: 'https://wrj.shuixiongit.com/api', // VITE_API_BASE_URL: 'https://aisky.org.cn/api', VITE_APP_WS_API_URL:'wss://wrj.shuixiongit.com/drone-wss/api/v1/ws' } const test = { VITE_APP_ENV:'test', VITE_APP_WEBVIEW_URL: 'https://wrj.shuixiongit.com/drone-app-web-view/#/webViewWrapper', VITE_API_BASE_URL: 'https://wrj.shuixiongit.com/api', VITE_APP_WS_API_URL:'wss://wrj.shuixiongit.com/drone-wss/api/v1/ws' } const production = { VITE_APP_ENV:'production', VITE_APP_WEBVIEW_URL: 'https://aisky.org.cn/drone-app-web-view/#/webViewWrapper', VITE_API_BASE_URL: 'https://aisky.org.cn/api', VITE_APP_WS_API_URL:'wss://wrj.shuixiongit.com/drone-wss/api/v1/ws' } export default { src/hooks/useGlobalWS.js
New file @@ -0,0 +1,70 @@ import {useUserStore} from "@/store/index.js"; import {getEnvObj} from "@/utils/index.js"; import {enterRoom} from "@/utils/voiceCallByTX/index.js"; let socketTask = null export function useGlobalWS() { const userStore = useUserStore(); const userId = computed(() => userStore?.userInfo?.user_id) const access_token = computed(() => userStore?.userInfo?.access_token) const {VITE_APP_WS_API_URL} = getEnvObj() // 消息处理 function messageHandler(payload) { switch (payload.biz_code) { case 'JOB_ISREFRESH': break case 'DEVICE_ISREFRESH': break case 'DOWNLOAD_PROGRESS': break case 'LOGOUT_USER': userStore.setUserInfo(null) uni.reLaunch({ url: '/pages/login/index' }) break case 'VoiceCall': enterRoom(payload, userId.value) break default: break; } } // 关闭ws function closeWS() { socketTask?.close({ success: () => { console.log('ws关闭连接'); }, }) } // 初始化ws function initWS() { // 关闭,再连接ws closeWS() if (!access_token.value) return const url = VITE_APP_WS_API_URL + `?x-auth-token=${encodeURI(access_token?.value)}` + `&model_type=3&workspace-id=${userId.value}` // 创建连接 socketTask = uni.connectSocket({ url: url, success: () => { console.log('ws连接成功'); }, fail: (err) => { console.error('ws连接失败:', err); } }); // 消息监听 socketTask.onMessage((result) => { messageHandler(JSON.parse(result.data)) }) } watch(access_token, initWS, {immediate: true}) } src/utils/voiceCallByTX/index.js
New file @@ -0,0 +1,36 @@ // #ifdef APP-PLUS import TrtcCloud from '@/utils/voiceCallByTX/TrtcCloud/lib/index'; import {TRTCAppScene} from '@/utils/voiceCallByTX/TrtcCloud/lib/TrtcDefines'; const trtcCloud = TrtcCloud.createInstance(); // #endif // #ifdef H5 import TRTC from 'trtc-sdk-v5'; const trtc = TRTC.create(); // #endif import {genTestUserSig} from "@/utils/voiceCallByTX/GenerateTestUserSig.js"; import {sendVoiceCallApi} from "@/api/user/index.js"; export function enterRoom(payload, userId) { const data = JSON.parse(payload.data.data) const theOtherPartyId = payload.data.caller_id const {userSig, SDKAppID: sdkAppId} = genTestUserSig(userId); const params = {sdkAppId, userId, roomId: data.roomId, userSig}; // #ifdef APP-PLUS trtcCloud.enterRoom(params, TRTCAppScene.TRTCAppSceneVideoCall) trtcCloud.startLocalAudio(); // #endif // #ifdef H5 trtc.enterRoom(params) trtc.startLocalAudio() // #endif // demo原因,直接接通来进行验证测试 sendVoiceCallApi({ caller_id: userId, receiver_id: theOtherPartyId, data: JSON.stringify({state: '接通', roomId: data.roomId}), }) }