2023-11-08 14:09:33 +08:00
|
|
|
|
<template>
|
|
|
|
|
|
<view class="container">
|
|
|
|
|
|
<view class="trtc-demo-container">
|
|
|
|
|
|
<!-- <view class='title' >
|
|
|
|
|
|
<view>多人会议</view>
|
|
|
|
|
|
</view> -->
|
|
|
|
|
|
<view class="input-box">
|
|
|
|
|
|
<input type="number" v-model="roomID" maxlength="10" placeholder="请输入房间号"
|
|
|
|
|
|
placeholder-style="opacity: 0.55;" />
|
|
|
|
|
|
</view>
|
|
|
|
|
|
<view class="choice-content">
|
|
|
|
|
|
<view class="label">
|
|
|
|
|
|
<text>开启摄像头</text>
|
|
|
|
|
|
<u-switch inactiveColor="#999999" activeColor="#00B38A" v-model="localVideo"
|
|
|
|
|
|
@change="switchHandler" />
|
|
|
|
|
|
</view>
|
|
|
|
|
|
<view class="label">
|
|
|
|
|
|
<text>开启麦克风</text>
|
|
|
|
|
|
<u-switch inactiveColor="#999999" activeColor="#00B38A" v-model="localAudio"
|
|
|
|
|
|
@change="switchHandler2" />
|
|
|
|
|
|
</view>
|
|
|
|
|
|
</view>
|
|
|
|
|
|
</view>
|
|
|
|
|
|
|
|
|
|
|
|
<view class='bottom-btn'>
|
|
|
|
|
|
<button class="btn" @click="enterRoom" hover-class="none">进入房间</button>
|
|
|
|
|
|
</view>
|
|
|
|
|
|
</view>
|
|
|
|
|
|
</template>
|
|
|
|
|
|
<script>
|
2023-11-08 15:33:37 +08:00
|
|
|
|
// import {
|
|
|
|
|
|
// genTestUserSig
|
|
|
|
|
|
// } from './debug/GenerateTestUserSig'
|
2023-11-08 14:09:33 +08:00
|
|
|
|
import {
|
|
|
|
|
|
mapState
|
|
|
|
|
|
} from 'vuex';
|
|
|
|
|
|
|
|
|
|
|
|
export default {
|
|
|
|
|
|
data() {
|
|
|
|
|
|
return {
|
|
|
|
|
|
roomID: '',
|
|
|
|
|
|
localVideo: true,
|
|
|
|
|
|
localAudio: true,
|
|
|
|
|
|
}
|
|
|
|
|
|
},
|
|
|
|
|
|
computed: {
|
|
|
|
|
|
...mapState(['userInfo'])
|
|
|
|
|
|
},
|
|
|
|
|
|
onLaunch() {
|
|
|
|
|
|
|
|
|
|
|
|
},
|
|
|
|
|
|
onLoad() {
|
|
|
|
|
|
|
|
|
|
|
|
},
|
|
|
|
|
|
methods: {
|
|
|
|
|
|
enterRoom() {
|
|
|
|
|
|
const nowTime = new Date()
|
|
|
|
|
|
if (nowTime - this.tapTime < 1000) {
|
|
|
|
|
|
return
|
|
|
|
|
|
}
|
|
|
|
|
|
if (!this.roomID) {
|
|
|
|
|
|
uni.showToast({
|
|
|
|
|
|
title: '请输入房间号',
|
|
|
|
|
|
icon: 'none',
|
|
|
|
|
|
duration: 2000,
|
|
|
|
|
|
})
|
|
|
|
|
|
return
|
|
|
|
|
|
}
|
|
|
|
|
|
if (/^\d*$/.test(this.roomID) === false) {
|
|
|
|
|
|
uni.showToast({
|
|
|
|
|
|
title: '房间号只能为数字',
|
|
|
|
|
|
icon: 'none',
|
|
|
|
|
|
duration: 2000,
|
|
|
|
|
|
})
|
|
|
|
|
|
return
|
|
|
|
|
|
}
|
|
|
|
|
|
if (this.roomID > 4294967295 || this.roomID < 1) {
|
|
|
|
|
|
uni.showToast({
|
|
|
|
|
|
title: '房间号取值范围为 1~4294967295',
|
|
|
|
|
|
icon: 'none',
|
|
|
|
|
|
duration: 2000,
|
|
|
|
|
|
})
|
|
|
|
|
|
return
|
|
|
|
|
|
}
|
|
|
|
|
|
const userID = '123'; //userID
|
2023-11-08 15:33:37 +08:00
|
|
|
|
// const Signature = genTestUserSig(userID)
|
|
|
|
|
|
// const url =
|
|
|
|
|
|
// `./room/room?roomID=${this.roomID}&localVideo=${this.localVideo}&localAudio=${this.localAudio}&userID=${userID}&sdkAppID=${Signature.sdkAppID}&userSig=${Signature.userSig}`
|
2023-11-08 14:09:33 +08:00
|
|
|
|
this.tapTime = nowTime
|
|
|
|
|
|
this.checkDeviceAuthorize().then((result) => {
|
|
|
|
|
|
console.log('授权成功', result)
|
|
|
|
|
|
wx.navigateTo({
|
|
|
|
|
|
url
|
|
|
|
|
|
})
|
|
|
|
|
|
})
|
|
|
|
|
|
.catch((error) => {
|
|
|
|
|
|
console.log('没有授权', error)
|
|
|
|
|
|
})
|
|
|
|
|
|
},
|
|
|
|
|
|
checkDeviceAuthorize() {
|
|
|
|
|
|
this.hasOpenDeviceAuthorizeModal = false
|
|
|
|
|
|
return new Promise((resolve, reject) => {
|
|
|
|
|
|
if (!wx.getSetting || !wx.getSetting()) {
|
|
|
|
|
|
// 微信测试版 获取授权API异常,目前只能即使没授权也可以通过
|
|
|
|
|
|
resolve()
|
|
|
|
|
|
}
|
|
|
|
|
|
wx.getSetting().then((result) => {
|
|
|
|
|
|
console.log('getSetting', result)
|
|
|
|
|
|
this.authorizeMic = result.authSetting['scope.record']
|
|
|
|
|
|
this.authorizeCamera = result.authSetting['scope.camera']
|
|
|
|
|
|
if (result.authSetting['scope.camera'] && result.authSetting['scope.record']) {
|
|
|
|
|
|
// 授权成功
|
|
|
|
|
|
resolve()
|
|
|
|
|
|
} else {
|
|
|
|
|
|
// 没有授权,弹出授权窗口
|
|
|
|
|
|
// 注意: wx.authorize 只有首次调用会弹框,之后调用只返回结果,如果没有授权需要自行弹框提示处理
|
|
|
|
|
|
console.log('getSetting 没有授权,弹出授权窗口', result)
|
|
|
|
|
|
wx.authorize({
|
|
|
|
|
|
scope: 'scope.record',
|
|
|
|
|
|
}).then((res) => {
|
|
|
|
|
|
console.log('authorize mic', res)
|
|
|
|
|
|
this.authorizeMic = true
|
|
|
|
|
|
if (this.authorizeCamera) {
|
|
|
|
|
|
resolve()
|
|
|
|
|
|
}
|
|
|
|
|
|
})
|
|
|
|
|
|
.catch((error) => {
|
|
|
|
|
|
console.log('authorize mic error', error)
|
|
|
|
|
|
this.authorizeMic = false
|
|
|
|
|
|
})
|
|
|
|
|
|
wx.authorize({
|
|
|
|
|
|
scope: 'scope.camera',
|
|
|
|
|
|
}).then((res) => {
|
|
|
|
|
|
console.log('authorize camera', res)
|
|
|
|
|
|
this.authorizeCamera = true
|
|
|
|
|
|
if (this.authorizeMic) {
|
|
|
|
|
|
resolve()
|
|
|
|
|
|
} else {
|
|
|
|
|
|
this.openConfirm()
|
|
|
|
|
|
reject(new Error('authorize fail'))
|
|
|
|
|
|
}
|
|
|
|
|
|
})
|
|
|
|
|
|
.catch((error) => {
|
|
|
|
|
|
console.log('authorize camera error', error)
|
|
|
|
|
|
this.authorizeCamera = false
|
|
|
|
|
|
this.openConfirm()
|
|
|
|
|
|
reject(new Error('authorize fail'))
|
|
|
|
|
|
})
|
|
|
|
|
|
}
|
|
|
|
|
|
})
|
|
|
|
|
|
})
|
|
|
|
|
|
},
|
|
|
|
|
|
openConfirm() {
|
|
|
|
|
|
if (this.hasOpenDeviceAuthorizeModal) {
|
|
|
|
|
|
return
|
|
|
|
|
|
}
|
|
|
|
|
|
this.hasOpenDeviceAuthorizeModal = true
|
|
|
|
|
|
return uni.showModal({
|
|
|
|
|
|
content: '您没有打开麦克风和摄像头的权限,是否去设置打开?',
|
|
|
|
|
|
confirmText: '确认',
|
|
|
|
|
|
cancelText: '取消',
|
|
|
|
|
|
success: (res) => {
|
|
|
|
|
|
this.hasOpenDeviceAuthorizeModal = false
|
|
|
|
|
|
console.log(res)
|
|
|
|
|
|
// 点击“确认”时打开设置页面
|
|
|
|
|
|
if (res.confirm) {
|
|
|
|
|
|
console.log('用户点击确认')
|
|
|
|
|
|
wx.openSetting({
|
|
|
|
|
|
success: (res) => {},
|
|
|
|
|
|
})
|
|
|
|
|
|
} else {
|
|
|
|
|
|
console.log('用户点击取消')
|
|
|
|
|
|
}
|
|
|
|
|
|
},
|
|
|
|
|
|
})
|
|
|
|
|
|
},
|
|
|
|
|
|
switchHandler(e) {
|
|
|
|
|
|
this.localVideo = e;
|
|
|
|
|
|
},
|
|
|
|
|
|
switchHandler2(e) {
|
|
|
|
|
|
this.localAudio = e;
|
|
|
|
|
|
},
|
|
|
|
|
|
onBack() {
|
|
|
|
|
|
wx.navigateBack({
|
|
|
|
|
|
delta: 1,
|
|
|
|
|
|
})
|
|
|
|
|
|
},
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
</script>
|
|
|
|
|
|
<style scoped>
|
|
|
|
|
|
.container {
|
|
|
|
|
|
width: 100vw;
|
|
|
|
|
|
height: 100vh;
|
|
|
|
|
|
background-color: #F5F5F5;
|
|
|
|
|
|
position: fixed;
|
|
|
|
|
|
top: 0;
|
|
|
|
|
|
right: 0;
|
|
|
|
|
|
left: 0;
|
|
|
|
|
|
bottom: 0;
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
.trtc-demo-container {
|
|
|
|
|
|
/* background-image: url(https://mc.qcloudimg.com/static/img/7da57e0050d308e2e1b1e31afbc42929/bg.png); */
|
|
|
|
|
|
/* background-color: #333; */
|
|
|
|
|
|
/* background-repeat:no-repeat;
|
|
|
|
|
|
background-size: cover; */
|
|
|
|
|
|
width: 100vw;
|
|
|
|
|
|
height: 100vh;
|
|
|
|
|
|
display: flex;
|
|
|
|
|
|
flex-direction: column;
|
|
|
|
|
|
align-items: center;
|
|
|
|
|
|
box-sizing: border-box;
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
.trtc-demo-container .title {
|
|
|
|
|
|
color: #FFFFFF;
|
|
|
|
|
|
padding-top: 65rpx;
|
|
|
|
|
|
line-height: 60rpx;
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
.trtc-demo-container .input-box {
|
|
|
|
|
|
background-color: transparent;
|
|
|
|
|
|
color: #333;
|
|
|
|
|
|
padding: 2vw 5vw 1vw;
|
|
|
|
|
|
border-bottom: 1px solid #577785;
|
|
|
|
|
|
margin: 100rpx 0 40rpx 0;
|
|
|
|
|
|
text-align: center;
|
|
|
|
|
|
box-sizing: border-box;
|
|
|
|
|
|
width: 80vw;
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
.trtc-demo-container .input-box input {
|
|
|
|
|
|
font-size: 20px;
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
.choice-content {
|
|
|
|
|
|
margin-top: 20rpx;
|
|
|
|
|
|
width: 80vw;
|
|
|
|
|
|
display: flex;
|
|
|
|
|
|
flex-direction: column;
|
|
|
|
|
|
/* justify-content: space-between;
|
|
|
|
|
|
flex-wrap: wrap; */
|
|
|
|
|
|
font-size: 14px;
|
|
|
|
|
|
color: #333;
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
.label {
|
|
|
|
|
|
display: flex;
|
|
|
|
|
|
flex-direction: row;
|
|
|
|
|
|
align-items: center;
|
|
|
|
|
|
justify-content: space-between;
|
|
|
|
|
|
padding: 24rpx 0;
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
.choice-content switch {
|
|
|
|
|
|
color: #00B38A;
|
|
|
|
|
|
transform: scale(0.8);
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
.bottom-btn {
|
|
|
|
|
|
position: fixed;
|
|
|
|
|
|
width: 100vw;
|
|
|
|
|
|
text-align: center;
|
|
|
|
|
|
bottom: 5vh;
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
.bottom-btn .btn {
|
|
|
|
|
|
width: 80%;
|
|
|
|
|
|
background-color: #00B38A;
|
|
|
|
|
|
border-radius: 50px;
|
|
|
|
|
|
color: #ffffff;
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
.close {
|
|
|
|
|
|
position: absolute;
|
|
|
|
|
|
padding-left: 5vw;
|
|
|
|
|
|
padding-right: 5vw;
|
|
|
|
|
|
width: 50rpx;
|
|
|
|
|
|
height: 60rpx;
|
|
|
|
|
|
}
|
2023-11-08 15:33:37 +08:00
|
|
|
|
</style>
|