电话咨询
This commit is contained in:
@@ -20,9 +20,9 @@
|
|||||||
<!-- 顶部品牌区域 -->
|
<!-- 顶部品牌区域 -->
|
||||||
<view class="brand-section">
|
<view class="brand-section">
|
||||||
<view class="logo-box">
|
<view class="logo-box">
|
||||||
<image class="brand-logo" src="/static/shangsong.png" mode="aspectFit" />
|
<text class="logo-letter">E</text>
|
||||||
</view>
|
</view>
|
||||||
<text class="brand-name">赏讼视频会议系统</text>
|
<text class="brand-name">EchoChat</text>
|
||||||
<text class="brand-slogan">连接无限,沟通无界</text>
|
<text class="brand-slogan">连接无限,沟通无界</text>
|
||||||
</view>
|
</view>
|
||||||
|
|
||||||
@@ -81,11 +81,14 @@
|
|||||||
</view>
|
</view>
|
||||||
<view class="oauth-buttons">
|
<view class="oauth-buttons">
|
||||||
<button class="oauth-btn oauth-wechat" :disabled="oauthLoading" @tap="oauthLogin('wechat')">
|
<button class="oauth-btn oauth-wechat" :disabled="oauthLoading" @tap="oauthLogin('wechat')">
|
||||||
<image class="oauth-icon" src="/static/weixin.png" mode="aspectFit" />
|
<view class="oauth-icon oauth-icon-wechat">
|
||||||
|
<view class="wechat-bubble wechat-bubble-large"></view>
|
||||||
|
<view class="wechat-bubble wechat-bubble-small"></view>
|
||||||
|
</view>
|
||||||
<text>微信登录</text>
|
<text>微信登录</text>
|
||||||
</button>
|
</button>
|
||||||
<button class="oauth-btn oauth-qq" :disabled="oauthLoading" @tap="oauthLogin('qq')">
|
<button class="oauth-btn oauth-qq" :disabled="oauthLoading" @tap="oauthLogin('qq')">
|
||||||
<image class="oauth-icon" src="/static/qq.png" mode="aspectFit" />
|
<text class="oauth-icon oauth-icon-qq">Q</text>
|
||||||
<text>QQ登录</text>
|
<text>QQ登录</text>
|
||||||
</button>
|
</button>
|
||||||
</view>
|
</view>
|
||||||
@@ -278,14 +281,17 @@ export default {
|
|||||||
.logo-box {
|
.logo-box {
|
||||||
width: 112rpx;
|
width: 112rpx;
|
||||||
height: 112rpx;
|
height: 112rpx;
|
||||||
|
border-radius: 24rpx;
|
||||||
|
background-color: #2563EB;
|
||||||
display: flex;
|
display: flex;
|
||||||
align-items: center;
|
align-items: center;
|
||||||
justify-content: center;
|
justify-content: center;
|
||||||
}
|
}
|
||||||
|
|
||||||
.brand-logo {
|
.logo-letter {
|
||||||
width: 112rpx;
|
font-size: 52rpx;
|
||||||
height: 112rpx;
|
font-weight: 700;
|
||||||
|
color: #FFFFFF;
|
||||||
}
|
}
|
||||||
|
|
||||||
.brand-name {
|
.brand-name {
|
||||||
@@ -455,8 +461,46 @@ export default {
|
|||||||
}
|
}
|
||||||
|
|
||||||
.oauth-icon {
|
.oauth-icon {
|
||||||
width: 52rpx;
|
width: 36rpx;
|
||||||
height: 52rpx;
|
height: 36rpx;
|
||||||
|
border-radius: 50%;
|
||||||
|
background-color: rgba(255, 255, 255, 0.94);
|
||||||
|
display: flex;
|
||||||
|
align-items: center;
|
||||||
|
justify-content: center;
|
||||||
|
font-size: 22rpx;
|
||||||
|
font-weight: 700;
|
||||||
|
line-height: 36rpx;
|
||||||
|
}
|
||||||
|
|
||||||
|
.oauth-icon-wechat {
|
||||||
|
position: relative;
|
||||||
|
color: #07C160;
|
||||||
|
}
|
||||||
|
|
||||||
|
.oauth-icon-qq {
|
||||||
|
color: #12B7F5;
|
||||||
|
}
|
||||||
|
|
||||||
|
.wechat-bubble {
|
||||||
|
position: absolute;
|
||||||
|
border-radius: 50%;
|
||||||
|
background-color: #07C160;
|
||||||
|
}
|
||||||
|
|
||||||
|
.wechat-bubble-large {
|
||||||
|
width: 18rpx;
|
||||||
|
height: 14rpx;
|
||||||
|
left: 8rpx;
|
||||||
|
top: 10rpx;
|
||||||
|
}
|
||||||
|
|
||||||
|
.wechat-bubble-small {
|
||||||
|
width: 14rpx;
|
||||||
|
height: 11rpx;
|
||||||
|
right: 7rpx;
|
||||||
|
bottom: 9rpx;
|
||||||
|
border: 2rpx solid #FFFFFF;
|
||||||
}
|
}
|
||||||
|
|
||||||
/* ---- 底部链接 ---- */
|
/* ---- 底部链接 ---- */
|
||||||
|
|||||||
@@ -7,6 +7,7 @@
|
|||||||
<text class="entry-title">{{ entryTitle }}</text>
|
<text class="entry-title">{{ entryTitle }}</text>
|
||||||
<text class="entry-desc">{{ joinError || stateText }}</text>
|
<text class="entry-desc">{{ joinError || stateText }}</text>
|
||||||
<button v-if="joinError" class="retry-btn" @click="joinMeeting">重新进入</button>
|
<button v-if="joinError" class="retry-btn" @click="joinMeeting">重新进入</button>
|
||||||
|
<button v-else-if="ended && buildMiniProgramReturnUrl()" class="retry-btn" @click="goToConsultDetail">查看咨询详情</button>
|
||||||
</view>
|
</view>
|
||||||
|
|
||||||
<view v-else class="call-shell" :class="{ 'voice-mode': isVoiceMode }">
|
<view v-else class="call-shell" :class="{ 'voice-mode': isVoiceMode }">
|
||||||
@@ -425,6 +426,8 @@ const buildMiniProgramReturnUrl = () => {
|
|||||||
return `/pages_work/ai_consult/ai_consult?id=${encodeURIComponent(consultId.value)}&mode=detail&from=videoCall`
|
return `/pages_work/ai_consult/ai_consult?id=${encodeURIComponent(consultId.value)}&mode=detail&from=videoCall`
|
||||||
}
|
}
|
||||||
|
|
||||||
|
let endedRedirectTimer = null
|
||||||
|
|
||||||
const notifyMiniProgramCallEnded = () => {
|
const notifyMiniProgramCallEnded = () => {
|
||||||
const payload = {
|
const payload = {
|
||||||
type: 'cloudLawCallEnded',
|
type: 'cloudLawCallEnded',
|
||||||
@@ -446,6 +449,18 @@ const notifyMiniProgramCallEnded = () => {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
const scheduleEndedRedirect = () => {
|
||||||
|
if (endedRedirectTimer) return
|
||||||
|
endedRedirectTimer = setTimeout(() => {
|
||||||
|
endedRedirectTimer = null
|
||||||
|
notifyCloudLawEnd().finally(() => notifyMiniProgramCallEnded())
|
||||||
|
}, 1200)
|
||||||
|
}
|
||||||
|
|
||||||
|
const goToConsultDetail = () => {
|
||||||
|
notifyCloudLawEnd().finally(() => notifyMiniProgramCallEnded())
|
||||||
|
}
|
||||||
|
|
||||||
const pollCommandsOnce = async () => {
|
const pollCommandsOnce = async () => {
|
||||||
if (!callId.value || !meetingStore.isInMeeting || leaving.value || ended.value || commandPolling) return
|
if (!callId.value || !meetingStore.isInMeeting || leaving.value || ended.value || commandPolling) return
|
||||||
commandPolling = true
|
commandPolling = true
|
||||||
@@ -827,6 +842,7 @@ const hangup = async () => {
|
|||||||
ended.value = true
|
ended.value = true
|
||||||
leaving.value = false
|
leaving.value = false
|
||||||
notifyMiniProgramCallEnded()
|
notifyMiniProgramCallEnded()
|
||||||
|
scheduleEndedRedirect()
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -855,11 +871,20 @@ onMounted(() => {
|
|||||||
const label = MEETING_ENDED_REASON_LABEL?.[reason] || '视频咨询已结束'
|
const label = MEETING_ENDED_REASON_LABEL?.[reason] || '视频咨询已结束'
|
||||||
uni.showToast({ title: label, icon: 'none' })
|
uni.showToast({ title: label, icon: 'none' })
|
||||||
ended.value = true
|
ended.value = true
|
||||||
|
// 对方挂断或会议结束时,通知小程序跳转到「我的咨询详情」
|
||||||
|
notifyCloudLawEnd().finally(() => {
|
||||||
|
notifyMiniProgramCallEnded()
|
||||||
|
scheduleEndedRedirect()
|
||||||
|
})
|
||||||
}
|
}
|
||||||
}, { immediate: true })
|
}, { immediate: true })
|
||||||
})
|
})
|
||||||
|
|
||||||
onBeforeUnmount(() => {
|
onBeforeUnmount(() => {
|
||||||
|
if (endedRedirectTimer) {
|
||||||
|
clearTimeout(endedRedirectTimer)
|
||||||
|
endedRedirectTimer = null
|
||||||
|
}
|
||||||
if (timerHandle) {
|
if (timerHandle) {
|
||||||
clearInterval(timerHandle)
|
clearInterval(timerHandle)
|
||||||
timerHandle = null
|
timerHandle = null
|
||||||
|
|||||||
Reference in New Issue
Block a user