Jelajahi Sumber

修改内容及问题

yangg 2 minggu lalu
induk
melakukan
6188b572ad

+ 1 - 1
common/config.js

@@ -17,4 +17,4 @@ export const appVersion = '1.0.0';
 // };
 
 // WebSocket URL for person detection (do not hardcode elsewhere)
-export const personDetectionWsUrl = `ws://backend.qicai321.com`; 
+export const personDetectionWsUrl = `wss://backend.qicai321.com`;// `ws://192.168.100.109:8083`;//

+ 7 - 0
pages.json

@@ -149,6 +149,13 @@
 				"navigationBarTitleText": "",
 				"navigationStyle": "custom"
 			}
+		},
+		{
+			"path": "pages/video-briefing/video-briefing",
+			"style": {
+				"navigationBarTitleText": "宣讲视频",
+				"navigationStyle": "default"
+			}
 		}
 	],
 	

+ 32 - 13
pages/identity-verify/identity-verify.vue

@@ -343,6 +343,7 @@ export default {
       personDetectionInterval: null, // 定时器对象
       showCameraWarning: false, // 添加新的数据属性
       showPageWarning: false, // 添加新的数据属性
+	  showPageDRWarning:false,//多人提示
       followUpQuestion: '', // 追问问题
       followUpAudioUrl: '', // 追问音频URL
       audioContext: null, // 音频上下文
@@ -368,6 +369,12 @@ export default {
    onLoad() {
       // 获取状态栏高度
       this.statusBarHeight = uni.getSystemInfoSync().statusBarHeight || 0
+      const systemInfo = uni.getSystemInfoSync();
+      const isMiniProgram = systemInfo.uniPlatform && systemInfo.uniPlatform.startsWith('mp-');
+      if (isMiniProgram) {
+        this.initPersonDetectionWebSocket();
+        
+      }
     },
   mounted() {
     this.fetchQuestions();
@@ -410,13 +417,6 @@ export default {
         });
       }
     });
-
-    const systemInfo = uni.getSystemInfoSync();
-    const isMiniProgram = systemInfo.uniPlatform && systemInfo.uniPlatform.startsWith('mp-');
-    console.log('isMiniProgram', isMiniProgram);
-    if (isMiniProgram) {
-      this.initPersonDetectionWebSocket();
-    }
   },
   beforeDestroy() {
     // 移除截屏监听
@@ -4717,7 +4717,7 @@ export default {
       if (this.personDetectionSocket) {
         this.cleanupPersonDetectionWebSocket();
       }
-
+      console.log('YOLO分析开始');
       try {
         this.personDetectionSocket = uni.connectSocket({
           url: `${personDetectionWsUrl}/ws/interview-room/room_${uni.getStorageSync('appId')}/${uni.getStorageSync('appId')}/`,
@@ -4752,7 +4752,7 @@ export default {
               this.handlePersonDetectionResult(data);
             }
           } catch (error) {
-            console.error('Error parsing WebSocket message:', error);
+            // console.error('Error parsing WebSocket message:', error);
           }
         });
       } catch (error) {
@@ -4837,8 +4837,8 @@ export default {
     },
 
     handlePersonDetectionResult(data) {
-      /* console.log(data.data.detection.has_person);
-      console.log(data.data.identity.status);//identity_verified */
+     /*console.log(data.data.detection);
+        console.log(data.data.identity.status);//identity_verified */
       
       /* // 首先检查是否有人
       if (!data.data.detection.has_person) {
@@ -4862,7 +4862,8 @@ export default {
         }, 3000);
       }
       // 然后检查身份验证状态
-      else */ if (data.data.identity.status == "no_face") {
+      else */ 
+	  if (data.data.identity.status == "no_face") {
          this.showPageWarning = true;
         uni.showToast({/* data.data.identity.message */
           title: '请保持面部完整出现在镜头内',
@@ -4880,7 +4881,25 @@ export default {
         setTimeout(() => {
           this.showPageWarning = false;
         }, 3000);
-      }
+      }else if(data.data.identity.status == "multiple_faces"){
+		  this.showPageDRWarning = true;
+		  uni.showToast({/* data.data.identity.message */
+		    title: '请保持独立面试环境',
+		    icon: 'none',
+		    duration: 3000
+		  });
+		  uni.vibrateLong({
+		    success: function () {
+		      console.log('Vibration successful');
+		    },
+		    fail: function (err) {
+		      console.error('Vibration failed:', err);
+		    }
+		  });
+		  setTimeout(() => {
+		    this.showPageDRWarning = false;
+		  }, 3000);
+	  }
     },
 
     // 进入追问模式

+ 118 - 73
pages/index/index.vue

@@ -121,19 +121,28 @@ import { apiBaseUrl } from '@/common/config.js';
 				// 对scene进行解码
 				const scene = decodeURIComponent(options.scene);
 				console.log('解码后的scene:', scene);
-				this.setTenantId(scene);
-				// 如果scene是key1=val1&key2=val2格式
-				const sceneParams = {};
-				scene.split('&').forEach(pair => {
-					const [key, value] = pair.split('=');
-					sceneParams[key] = value;
-				});
-				console.log('解析后的参数:', sceneParams);
-				
-				// 提取tenant_id并保存到本地存储
-				/* if (sceneParams.tenant_id) {
-					this.setTenantId(sceneParams.tenant_id);
-				} */
+				let parsedTenantId = null;
+				if (scene.includes('=')) {
+					// 如果scene是key1=val1&key2=val2格式
+					const sceneParams = {};
+					scene.split('&').forEach(pair => {
+						const [key, value] = pair.split('=');
+						sceneParams[key] = value;
+					});
+					console.log('解析后的参数:', sceneParams);
+					parsedTenantId = sceneParams.tenant_id || null;
+				} else {
+					// 兼容场景:scene 直接就是租户ID
+					parsedTenantId = scene;
+				}
+				if (parsedTenantId) {
+					const storedTenantId = uni.getStorageSync('tenant_id');
+					if (storedTenantId && storedTenantId !== parsedTenantId) {
+						// 租户发生变化时,静默清除登录态以避免越租户数据串联
+						this.silentLogout();
+					}
+					this.setTenantId(parsedTenantId);
+				}
 			}
 			
 			// 尝试从本地存储获取tenant_id
@@ -166,6 +175,15 @@ import { apiBaseUrl } from '@/common/config.js';
 			}
 		},
 		methods: {
+			// 静默清理登录态(不提示不跳转)
+			silentLogout() {
+				try {
+					uni.removeStorageSync('token');
+					uni.removeStorageSync('userInfo');
+				} catch (e) {
+					console.error('静默登出失败:', e);
+				}
+			},
 			// 获取本地存储的tenant_id
 			getTenantId() {
 				const tenantId = uni.getStorageSync('tenant_id');
@@ -344,6 +362,72 @@ import { apiBaseUrl } from '@/common/config.js';
 				
 				console.log('已选择职位:', job.id, job.title);
 			},
+			
+			// 处理用户信息获取和页面跳转逻辑
+			handleUserInfoAndNavigation() {
+				// 调用获取用户完整信息的接口
+				const openid = JSON.parse(uni.getStorageSync('userInfo')).openid;
+				uni.request({
+					url: `${apiBaseUrl}/api/wechat/user/get_full_info?tenant_id=${this.tenant_id||JSON.parse(uni.getStorageSync('userInfo')).tenant_id ||1}&openid=${openid}`,
+					method: 'GET',
+					success: (infoRes) => {
+						if (infoRes.statusCode === 200 && infoRes.data && infoRes.data.data && infoRes.data.data.profile) {
+							const resumeUrl = infoRes.data.data.profile.resume_url || '';
+							if (!resumeUrl) {
+								// resume_url 为空,跳转到其他页面
+								uni.navigateTo({
+									url: '/pages/uploadResume/uploadResume', // 假设跳转到上传简历页面
+									fail: (err) => {
+										console.error('页面跳转失败:', err);
+										uni.showToast({
+											title: '页面跳转失败',
+											icon: 'none'
+										});
+									}
+								});
+							} else {
+								// resume_url 不为空,跳转到 Personal 页面
+								uni.navigateTo({
+									url: '/pages/Personal/Personal',
+									fail: (err) => {
+										console.error('页面跳转失败:', err);
+										uni.showToast({
+											title: '页面跳转失败',
+											icon: 'none'
+										});
+									}
+								});
+							}
+						} else {
+							// 获取用户信息失败,直接跳转到 Personal 页面
+							uni.navigateTo({
+								url: '/pages/Personal/Personal',
+								fail: (err) => {
+									console.error('页面跳转失败:', err);
+									uni.showToast({
+										title: '页面跳转失败',
+										icon: 'none'
+									});
+								}
+							});
+						}
+					},
+					fail: (err) => {
+						console.error('获取用户信息失败:', err);
+						uni.navigateTo({
+							url: '/pages/Personal/Personal',
+							fail: (err) => {
+								console.error('页面跳转失败:', err);
+								uni.showToast({
+									title: '页面跳转失败',
+									icon: 'none'
+								});
+							}
+						});
+					}
+				});
+			},
+			
 			// 获取当前职位配置
 			getConfig(){
 				uni.request({
@@ -361,67 +445,28 @@ import { apiBaseUrl } from '@/common/config.js';
 						if (res.statusCode === 200) {
 							if (res.data.code === 2000) {
 								uni.setStorageSync('configData', JSON.stringify(res.data.data))
-								// 调用获取用户完整信息的接口
-								const openid = JSON.parse(uni.getStorageSync('userInfo')).openid;
-								uni.request({
-									url: `${apiBaseUrl}/api/wechat/user/get_full_info?tenant_id=${this.tenant_id||JSON.parse(uni.getStorageSync('userInfo')).tenant_id ||1}&openid=${openid}`,
-									method: 'GET',
-									success: (infoRes) => {
-										if (infoRes.statusCode === 200 && infoRes.data && infoRes.data.data && infoRes.data.data.profile) {
-											const resumeUrl = infoRes.data.data.profile.resume_url || '';
-											if (!resumeUrl) {
-												// resume_url 为空,跳转到其他页面
-												uni.navigateTo({
-													url: '/pages/uploadResume/uploadResume', // 假设跳转到上传简历页面
-													fail: (err) => {
-														console.error('页面跳转失败:', err);
-														uni.showToast({
-															title: '页面跳转失败',
-															icon: 'none'
-														});
-													}
-												});
-											} else {
-												// resume_url 不为空,跳转到 Personal 页面
-												uni.navigateTo({
-													url: '/pages/Personal/Personal',
-													fail: (err) => {
-														console.error('页面跳转失败:', err);
-														uni.showToast({
-															title: '页面跳转失败',
-															icon: 'none'
-														});
-													}
-												});
-											}
-										} else {
-											// 获取用户信息失败,直接跳转到 Personal 页面
-											uni.navigateTo({
-												url: '/pages/Personal/Personal',
-												fail: (err) => {
-													console.error('页面跳转失败:', err);
-													uni.showToast({
-														title: '页面跳转失败',
-														icon: 'none'
-													});
-												}
-											});
+								
+								// 检查是否启用了视频宣讲功能
+								const configData = res.data.data;
+								const enableVideoPresentation = configData?.enable_video_presentation || false;
+								
+								if (enableVideoPresentation) {
+									// 如果启用了视频宣讲,跳转到video-briefing页面
+									const videoUrl = configData?.video_presentation_url || 'https://data.qicai321.com/minlong/latentsync/9791ad45-dd30-4f84-a1c6-0c07c4d08707_result.mp4';
+									const nextPage = '/pages/Personal/Personal'; // 视频播放完成后的跳转页面
+									
+									uni.navigateTo({
+										url: `/pages/video-briefing/video-briefing?src=${encodeURIComponent(videoUrl)}&next=${encodeURIComponent(nextPage)}`,
+										fail: (err) => {
+											console.error('跳转到视频宣讲页面失败:', err);
+											// 如果跳转失败,执行原有的逻辑
+											this.handleUserInfoAndNavigation();
 										}
-									},
-									fail: (err) => {
-										console.error('获取用户信息失败:', err);
-										uni.navigateTo({
-											url: '/pages/Personal/Personal',
-											fail: (err) => {
-												console.error('页面跳转失败:', err);
-												uni.showToast({
-													title: '页面跳转失败',
-													icon: 'none'
-												});
-											}
-										});
-									}
-								});
+									});
+								} else {
+									// 如果未启用视频宣讲,执行原有的逻辑
+									this.handleUserInfoAndNavigation();
+								}
 							} else {
 								// 其他逻辑
 							}

+ 124 - 3
pages/job-detail/job-detail.vue

@@ -103,7 +103,7 @@ export default {
   onLoad(options) {
     this.jobId = options.id;
     this.getJobDetail(options.id);
-
+    this.getTenantId();
     // 尝试从本地存储获取职位详情
     try {
       const jobDetailStr = uni.getStorageSync('currentJobDetail');
@@ -216,7 +216,7 @@ export default {
       return true;
     },
 	// 获取当前职位配置
-	getConfig(selectedJobId){
+	/* getConfig(selectedJobId){
 		uni.request({
 			url: `${apiBaseUrl}/api/job/config/position/${this.jobId}`,
 			method: 'GET',
@@ -258,7 +258,128 @@ export default {
 				});
 			}
 		});
-	},
+	}, */
+  // 处理用户信息获取和页面跳转逻辑
+  handleUserInfoAndNavigation() {
+				// 调用获取用户完整信息的接口
+				const openid = JSON.parse(uni.getStorageSync('userInfo')).openid;
+				uni.request({
+					url: `${apiBaseUrl}/api/wechat/user/get_full_info?tenant_id=${this.tenant_id||JSON.parse(uni.getStorageSync('userInfo')).tenant_id ||1}&openid=${openid}`,
+					method: 'GET',
+					success: (infoRes) => {
+						if (infoRes.statusCode === 200 && infoRes.data && infoRes.data.data && infoRes.data.data.profile) {
+							const resumeUrl = infoRes.data.data.profile.resume_url || '';
+							if (!resumeUrl) {
+								// resume_url 为空,跳转到其他页面
+								uni.navigateTo({
+									url: '/pages/uploadResume/uploadResume', // 假设跳转到上传简历页面
+									fail: (err) => {
+										console.error('页面跳转失败:', err);
+										uni.showToast({
+											title: '页面跳转失败',
+											icon: 'none'
+										});
+									}
+								});
+							} else {
+								// resume_url 不为空,跳转到 Personal 页面
+								uni.navigateTo({
+									url: '/pages/Personal/Personal',
+									fail: (err) => {
+										console.error('页面跳转失败:', err);
+										uni.showToast({
+											title: '页面跳转失败',
+											icon: 'none'
+										});
+									}
+								});
+							}
+						} else {
+							// 获取用户信息失败,直接跳转到 Personal 页面
+							uni.navigateTo({
+								url: '/pages/Personal/Personal',
+								fail: (err) => {
+									console.error('页面跳转失败:', err);
+									uni.showToast({
+										title: '页面跳转失败',
+										icon: 'none'
+									});
+								}
+							});
+						}
+					},
+					fail: (err) => {
+						console.error('获取用户信息失败:', err);
+						uni.navigateTo({
+							url: '/pages/Personal/Personal',
+							fail: (err) => {
+								console.error('页面跳转失败:', err);
+								uni.showToast({
+									title: '页面跳转失败',
+									icon: 'none'
+								});
+							}
+						});
+					}
+				});
+			},
+			
+			// 获取当前职位配置
+			getConfig(selectedJobId){
+				uni.request({
+					url: `${apiBaseUrl}/api/job/config/position/${this.jobId}`,
+					method: 'GET',
+					data: {
+						openid: JSON.parse(uni.getStorageSync('userInfo')).openid
+					},
+					header: {
+						'content-type': 'application/x-www-form-urlencoded'
+					},
+					success: (res) => {
+						// 身份验证成功后,继续提交用户信息
+						console.log(res);
+						if (res.statusCode === 200) {
+							if (res.data.code === 2000) {
+								uni.setStorageSync('configData', JSON.stringify(res.data.data))
+								
+								// 检查是否启用了视频宣讲功能
+								const configData = res.data.data;
+								const enableVideoPresentation = configData?.enable_video_presentation || false;
+								
+								if (enableVideoPresentation) {
+									// 如果启用了视频宣讲,跳转到video-briefing页面
+									const videoUrl = configData?.video_presentation_url || '';
+									const nextPage = '/pages/Personal/Personal'; // 视频播放完成后的跳转页面
+									
+									uni.navigateTo({
+										url: `/pages/video-briefing/video-briefing?src=${encodeURIComponent(videoUrl)}&next=${encodeURIComponent(nextPage)}`,
+										fail: (err) => {
+											console.error('跳转到视频宣讲页面失败:', err);
+											// 如果跳转失败,执行原有的逻辑
+											this.handleUserInfoAndNavigation();
+										}
+									});
+								} else {
+									// 如果未启用视频宣讲,执行原有的逻辑
+									this.handleUserInfoAndNavigation();
+								}
+							} else {
+								// 其他逻辑
+							}
+						} else {
+							uni.hideLoading();
+						}
+					},
+					fail: (err) => {
+						uni.hideLoading();
+						uni.showToast({
+							title: '网络错误,请稍后重试',
+							icon: 'none'
+						});
+					}
+				});
+			},
+
     async startInterview() {
       if (!this.checkLogin()) {
         return;

+ 1 - 1
pages/uploadResume/uploadResume.vue

@@ -63,7 +63,7 @@
 			// 判断是否从index页面跳转来
 			const pages = getCurrentPages();
 			const prevPage = pages[pages.length - 2]; // 获取上一个页面
-			if (prevPage && prevPage.route === 'pages/index/index') {
+			if (prevPage && (prevPage.route === 'pages/index/index' || prevPage.route === 'pages/job-detail/job-detail' || prevPage.route === 'pages/video-briefing/video-briefing')) {
 				this.showSkipButton = true;
 			}
 		},

+ 253 - 0
pages/video-briefing/video-briefing.vue

@@ -0,0 +1,253 @@
+<template>
+	<view class="page">
+		<!-- 自定义导航栏(可留空避免遮挡) -->
+		<!-- <view class="nav-bar"></view> -->
+
+		<!-- 右上角固定关闭/跳过按钮 -->
+		<view class="skip-fixed" :style="{ top: 20 + 'px' }" @click="handleSkip">
+			<text class="skip-text">关闭</text>
+		</view>
+		<!-- 视频区域 -->
+		<view class="video-wrap" :style="{ height: videoHeight + 'px' }">
+			<video
+				:id="'briefingVideo'"
+				:src="videoSrc"
+				autoplay
+				:controls="false"
+				:enable-progress-gesture="false"
+				:show-center-play-btn="false"
+				:show-fullscreen-btn="false"
+				:show-play-btn="false"
+				:enable-play-gesture="false"
+				object-fit="contain"
+				@ended="handleEnded"
+				@error="handleError"
+				class="video"
+			/>
+		</view>
+		<!-- 说明文案(可选) -->
+		<view class="tips">请完整观看宣讲视频。如需跳过,可点击右上角“跳过”。</view>
+	</view>
+</template>
+
+<script>
+import { apiBaseUrl } from '@/common/config.js';
+export default {
+	data() {
+		return {
+			videoSrc: 'https://data.qicai321.com/minlong/latentsync/9791ad45-dd30-4f84-a1c6-0c07c4d08707_result.mp4',
+			nextPath: '/pages/index/index',
+			statusBarHeight: 0,
+			navBarHeight: 44,
+			videoHeight: 0,
+			tenant_id: '', // 租户ID
+		}
+	},
+	onLoad(options) {
+		// 从参数获取视频地址与下一个页面路径,避免硬编码- this.navBarHeight
+		this.videoSrc = (options && options.src) ? decodeURIComponent(options.src) : '';
+		this.nextPath = (options && options.next) ? decodeURIComponent(options.next) : '/pages/index/index';
+		const sysInfo = uni.getSystemInfoSync();
+		this.statusBarHeight = sysInfo.statusBarHeight || 0;
+		// 计算视频高度(去掉自定义导航)
+		this.videoHeight = (sysInfo.windowHeight || 0) - this.statusBarHeight;
+		// 获取本地存储的tenant_id
+		this.getTenantId();
+	},
+	methods: {
+		// 获取本地存储的tenant_id
+		getTenantId() {
+			const tenantId = uni.getStorageSync('tenant_id');
+			if (tenantId) {
+				this.tenant_id = tenantId;
+				return tenantId;
+			}
+			return null;
+		},
+		handleSkip() {
+			this.navigateToNext();
+		},
+		handleEnded() {
+			this.navigateToNext();
+		},
+		handleError(e) {
+			uni.showToast({ title: '视频加载失败', icon: 'none' });
+		},
+		/* navigateToNext() {
+			console.log(uni.getStorageSync('configData'));
+			// 若 nextPath 是 tabBar 页面,需要使用 switchTab;否则使用 navigateTo
+			try {
+				const tabBarPages = [
+					'/pages/index/index',
+					'/pages/my/my'
+				];
+				if (tabBarPages.includes(this.nextPath)) {
+					uni.switchTab({ url: this.nextPath });
+				} else {
+					uni.navigateTo({ url: this.nextPath });
+				}
+			} catch (err) {
+				// 兜底跳首页
+				uni.switchTab({ url: '/pages/index/index' });
+			}
+		}, */
+		navigateToNext() {
+		try {
+			// 获取配置数据
+			const configStr = uni.getStorageSync('configData');
+			let configData = null;
+			
+			if (configStr) {
+				try {
+					configData = JSON.parse(configStr);
+					console.log('解析到的配置数据:', configData);
+				} catch (parseError) {
+					console.error('解析configData失败:', parseError);
+				}
+			}
+			
+			this.handleUserInfoAndNavigation(configData.require_resume_upload);
+			
+		} catch (error) {
+			console.error('跳转处理失败:', error);
+		}
+	},
+	// 处理用户信息获取和页面跳转逻辑
+	handleUserInfoAndNavigation(require_resume_upload) {
+				// 调用获取用户完整信息的接口
+				const openid = JSON.parse(uni.getStorageSync('userInfo')).openid;
+				uni.request({
+					url: `${apiBaseUrl}/api/wechat/user/get_full_info?tenant_id=${this.tenant_id||JSON.parse(uni.getStorageSync('userInfo')).tenant_id ||1}&openid=${openid}`,
+					method: 'GET',
+					success: (infoRes) => {
+						if (infoRes.statusCode === 200 && infoRes.data && infoRes.data.data && infoRes.data.data.profile) {
+							const resumeUrl = infoRes.data.data.profile.resume_url || '';
+							if (!resumeUrl && require_resume_upload) {
+								// resume_url 为空,跳转到其他页面
+								uni.navigateTo({
+									url: '/pages/uploadResume/uploadResume', // 假设跳转到上传简历页面
+									fail: (err) => {
+										console.error('页面跳转失败:', err);
+										uni.showToast({
+											title: '页面跳转失败',
+											icon: 'none'
+										});
+									}
+								});
+							} else {
+								// resume_url 不为空,跳转到 Personal 页面
+								uni.navigateTo({
+									url: '/pages/Personal/Personal',
+									fail: (err) => {
+										console.error('页面跳转失败:', err);
+										uni.showToast({
+											title: '页面跳转失败',
+											icon: 'none'
+										});
+									}
+								});
+							}
+						} else {
+							// 获取用户信息失败,直接跳转到 Personal 页面
+							uni.navigateTo({
+								url: '/pages/Personal/Personal',
+								fail: (err) => {
+									console.error('页面跳转失败:', err);
+									uni.showToast({
+										title: '页面跳转失败',
+										icon: 'none'
+									});
+								}
+							});
+						}
+					},
+					fail: (err) => {
+						console.error('获取用户信息失败:', err);
+						uni.navigateTo({
+							url: '/pages/Personal/Personal',
+							fail: (err) => {
+								console.error('页面跳转失败:', err);
+								uni.showToast({
+									title: '页面跳转失败',
+									icon: 'none'
+								});
+							}
+						});
+					}
+				});
+			},
+
+	}
+}
+</script>
+
+<style>
+.page {
+	background: #000;
+	min-height: 100vh;
+}
+
+.nav-bar {
+	position: relative;
+	display: flex;
+	align-items: center;
+	justify-content: space-between;
+	/* height: 44px; */
+	padding: 0 16px;
+	background: #000;
+	color: #fff;
+	box-sizing: border-box;
+	z-index: 1;
+}
+
+.nav-title {
+	font-size: 16px;
+	font-weight: 600;
+}
+
+.skip-btn {
+	font-size: 14px;
+	color: #ffffff;
+	opacity: 0.9;
+}
+
+.video-wrap {
+	width: 100%;
+	background: #000;
+}
+
+.video {
+	width: 100%;
+	height: 100%;
+}
+
+.tips {
+	padding: 5px 16px;
+    text-align: center;
+	font-size: 12px;
+	color: #bbb;
+	background: #000;
+}
+
+/* 右上角固定关闭按钮样式 */
+.skip-fixed {
+	position: fixed;
+	right: 12px;
+	/* top 动态由内联样式结合状态栏高度控制 */
+	background: rgba(0, 0, 0, 0.35);
+	color: #fff;
+	border-radius: 18px;
+	padding: 6px 12px;
+	border: 0.5px solid rgba(255, 255, 255, 0.35);
+	backdrop-filter: blur(6px);
+	-webkit-backdrop-filter: blur(6px);
+    line-height: 12px;
+	z-index: 999;
+}
+
+.skip-text {
+	font-size: 12px;
+	
+}
+</style>
+

+ 1 - 0
unpackage/dist/dev/mp-weixin/app.js

@@ -25,6 +25,7 @@ if (!Math) {
   "./pages/posture-guide/posture-guide.js";
   "./pages/interview_retake/interview_retake.js";
   "./pages/demo/demo.js";
+  "./pages/video-briefing/video-briefing.js";
 }
 const _sfc_main = {
   onLaunch: function() {

+ 2 - 1
unpackage/dist/dev/mp-weixin/app.json

@@ -21,7 +21,8 @@
     "pages/uploadResume/uploadResume",
     "pages/posture-guide/posture-guide",
     "pages/interview_retake/interview_retake",
-    "pages/demo/demo"
+    "pages/demo/demo",
+    "pages/video-briefing/video-briefing"
   ],
   "window": {
     "navigationBarTextStyle": "black",

+ 1 - 1
unpackage/dist/dev/mp-weixin/common/config.js

@@ -1,5 +1,5 @@
 "use strict";
 const apiBaseUrl = "https://backend.qicai321.com";
-const personDetectionWsUrl = `ws://backend.qicai321.com`;
+const personDetectionWsUrl = `wss://backend.qicai321.com`;
 exports.apiBaseUrl = apiBaseUrl;
 exports.personDetectionWsUrl = personDetectionWsUrl;

+ 27 - 7
unpackage/dist/dev/mp-weixin/pages/identity-verify/identity-verify.js

@@ -207,6 +207,8 @@ const _sfc_main = {
       // 添加新的数据属性
       showPageWarning: false,
       // 添加新的数据属性
+      showPageDRWarning: false,
+      //多人提示
       followUpQuestion: "",
       // 追问问题
       followUpAudioUrl: "",
@@ -249,6 +251,11 @@ const _sfc_main = {
   },
   onLoad() {
     this.statusBarHeight = common_vendor.index.getSystemInfoSync().statusBarHeight || 0;
+    const systemInfo = common_vendor.index.getSystemInfoSync();
+    const isMiniProgram = systemInfo.uniPlatform && systemInfo.uniPlatform.startsWith("mp-");
+    if (isMiniProgram) {
+      this.initPersonDetectionWebSocket();
+    }
   },
   mounted() {
     this.fetchQuestions();
@@ -287,12 +294,6 @@ const _sfc_main = {
         });
       }
     });
-    const systemInfo = common_vendor.index.getSystemInfoSync();
-    const isMiniProgram = systemInfo.uniPlatform && systemInfo.uniPlatform.startsWith("mp-");
-    console.log("isMiniProgram", isMiniProgram);
-    if (isMiniProgram) {
-      this.initPersonDetectionWebSocket();
-    }
   },
   beforeDestroy() {
     common_vendor.index.offUserCaptureScreen();
@@ -3333,6 +3334,7 @@ const _sfc_main = {
       if (this.personDetectionSocket) {
         this.cleanupPersonDetectionWebSocket();
       }
+      console.log("YOLO分析开始");
       try {
         this.personDetectionSocket = common_vendor.index.connectSocket({
           url: `${common_config.personDetectionWsUrl}/ws/interview-room/room_${common_vendor.index.getStorageSync("appId")}/${common_vendor.index.getStorageSync("appId")}/`,
@@ -3362,7 +3364,6 @@ const _sfc_main = {
               this.handlePersonDetectionResult(data);
             }
           } catch (error) {
-            console.error("Error parsing WebSocket message:", error);
           }
         });
       } catch (error) {
@@ -3459,6 +3460,25 @@ const _sfc_main = {
         setTimeout(() => {
           this.showPageWarning = false;
         }, 3e3);
+      } else if (data.data.identity.status == "multiple_faces") {
+        this.showPageDRWarning = true;
+        common_vendor.index.showToast({
+          /* data.data.identity.message */
+          title: "请保持独立面试环境",
+          icon: "none",
+          duration: 3e3
+        });
+        common_vendor.index.vibrateLong({
+          success: function() {
+            console.log("Vibration successful");
+          },
+          fail: function(err) {
+            console.error("Vibration failed:", err);
+          }
+        });
+        setTimeout(() => {
+          this.showPageDRWarning = false;
+        }, 3e3);
       }
     },
     // 进入追问模式

+ 103 - 64
unpackage/dist/dev/mp-weixin/pages/index/index.js

@@ -42,13 +42,25 @@ const _sfc_main = {
     if (options.scene) {
       const scene = decodeURIComponent(options.scene);
       console.log("解码后的scene:", scene);
-      this.setTenantId(scene);
-      const sceneParams = {};
-      scene.split("&").forEach((pair) => {
-        const [key, value] = pair.split("=");
-        sceneParams[key] = value;
-      });
-      console.log("解析后的参数:", sceneParams);
+      let parsedTenantId = null;
+      if (scene.includes("=")) {
+        const sceneParams = {};
+        scene.split("&").forEach((pair) => {
+          const [key, value] = pair.split("=");
+          sceneParams[key] = value;
+        });
+        console.log("解析后的参数:", sceneParams);
+        parsedTenantId = sceneParams.tenant_id || null;
+      } else {
+        parsedTenantId = scene;
+      }
+      if (parsedTenantId) {
+        const storedTenantId = common_vendor.index.getStorageSync("tenant_id");
+        if (storedTenantId && storedTenantId !== parsedTenantId) {
+          this.silentLogout();
+        }
+        this.setTenantId(parsedTenantId);
+      }
     }
     this.getTenantId();
     this.checkUserInfo();
@@ -63,6 +75,15 @@ const _sfc_main = {
     }
   },
   methods: {
+    // 静默清理登录态(不提示不跳转)
+    silentLogout() {
+      try {
+        common_vendor.index.removeStorageSync("token");
+        common_vendor.index.removeStorageSync("userInfo");
+      } catch (e) {
+        console.error("静默登出失败:", e);
+      }
+    },
     // 获取本地存储的tenant_id
     getTenantId() {
       const tenantId = common_vendor.index.getStorageSync("tenant_id");
@@ -213,6 +234,67 @@ const _sfc_main = {
       common_vendor.index.setStorageSync("selectedJob", JSON.stringify(job));
       console.log("已选择职位:", job.id, job.title);
     },
+    // 处理用户信息获取和页面跳转逻辑
+    handleUserInfoAndNavigation() {
+      const openid = JSON.parse(common_vendor.index.getStorageSync("userInfo")).openid;
+      common_vendor.index.request({
+        url: `${common_config.apiBaseUrl}/api/wechat/user/get_full_info?tenant_id=${this.tenant_id || JSON.parse(common_vendor.index.getStorageSync("userInfo")).tenant_id || 1}&openid=${openid}`,
+        method: "GET",
+        success: (infoRes) => {
+          if (infoRes.statusCode === 200 && infoRes.data && infoRes.data.data && infoRes.data.data.profile) {
+            const resumeUrl = infoRes.data.data.profile.resume_url || "";
+            if (!resumeUrl) {
+              common_vendor.index.navigateTo({
+                url: "/pages/uploadResume/uploadResume",
+                // 假设跳转到上传简历页面
+                fail: (err) => {
+                  console.error("页面跳转失败:", err);
+                  common_vendor.index.showToast({
+                    title: "页面跳转失败",
+                    icon: "none"
+                  });
+                }
+              });
+            } else {
+              common_vendor.index.navigateTo({
+                url: "/pages/Personal/Personal",
+                fail: (err) => {
+                  console.error("页面跳转失败:", err);
+                  common_vendor.index.showToast({
+                    title: "页面跳转失败",
+                    icon: "none"
+                  });
+                }
+              });
+            }
+          } else {
+            common_vendor.index.navigateTo({
+              url: "/pages/Personal/Personal",
+              fail: (err) => {
+                console.error("页面跳转失败:", err);
+                common_vendor.index.showToast({
+                  title: "页面跳转失败",
+                  icon: "none"
+                });
+              }
+            });
+          }
+        },
+        fail: (err) => {
+          console.error("获取用户信息失败:", err);
+          common_vendor.index.navigateTo({
+            url: "/pages/Personal/Personal",
+            fail: (err2) => {
+              console.error("页面跳转失败:", err2);
+              common_vendor.index.showToast({
+                title: "页面跳转失败",
+                icon: "none"
+              });
+            }
+          });
+        }
+      });
+    },
     // 获取当前职位配置
     getConfig() {
       common_vendor.index.request({
@@ -229,64 +311,21 @@ const _sfc_main = {
           if (res.statusCode === 200) {
             if (res.data.code === 2e3) {
               common_vendor.index.setStorageSync("configData", JSON.stringify(res.data.data));
-              const openid = JSON.parse(common_vendor.index.getStorageSync("userInfo")).openid;
-              common_vendor.index.request({
-                url: `${common_config.apiBaseUrl}/api/wechat/user/get_full_info?tenant_id=${this.tenant_id || JSON.parse(common_vendor.index.getStorageSync("userInfo")).tenant_id || 1}&openid=${openid}`,
-                method: "GET",
-                success: (infoRes) => {
-                  if (infoRes.statusCode === 200 && infoRes.data && infoRes.data.data && infoRes.data.data.profile) {
-                    const resumeUrl = infoRes.data.data.profile.resume_url || "";
-                    if (!resumeUrl) {
-                      common_vendor.index.navigateTo({
-                        url: "/pages/uploadResume/uploadResume",
-                        // 假设跳转到上传简历页面
-                        fail: (err) => {
-                          console.error("页面跳转失败:", err);
-                          common_vendor.index.showToast({
-                            title: "页面跳转失败",
-                            icon: "none"
-                          });
-                        }
-                      });
-                    } else {
-                      common_vendor.index.navigateTo({
-                        url: "/pages/Personal/Personal",
-                        fail: (err) => {
-                          console.error("页面跳转失败:", err);
-                          common_vendor.index.showToast({
-                            title: "页面跳转失败",
-                            icon: "none"
-                          });
-                        }
-                      });
-                    }
-                  } else {
-                    common_vendor.index.navigateTo({
-                      url: "/pages/Personal/Personal",
-                      fail: (err) => {
-                        console.error("页面跳转失败:", err);
-                        common_vendor.index.showToast({
-                          title: "页面跳转失败",
-                          icon: "none"
-                        });
-                      }
-                    });
+              const configData = res.data.data;
+              const enableVideoPresentation = (configData == null ? void 0 : configData.enable_video_presentation) || false;
+              if (enableVideoPresentation) {
+                const videoUrl = (configData == null ? void 0 : configData.video_presentation_url) || "https://data.qicai321.com/minlong/latentsync/9791ad45-dd30-4f84-a1c6-0c07c4d08707_result.mp4";
+                const nextPage = "/pages/Personal/Personal";
+                common_vendor.index.navigateTo({
+                  url: `/pages/video-briefing/video-briefing?src=${encodeURIComponent(videoUrl)}&next=${encodeURIComponent(nextPage)}`,
+                  fail: (err) => {
+                    console.error("跳转到视频宣讲页面失败:", err);
+                    this.handleUserInfoAndNavigation();
                   }
-                },
-                fail: (err) => {
-                  console.error("获取用户信息失败:", err);
-                  common_vendor.index.navigateTo({
-                    url: "/pages/Personal/Personal",
-                    fail: (err2) => {
-                      console.error("页面跳转失败:", err2);
-                      common_vendor.index.showToast({
-                        title: "页面跳转失败",
-                        icon: "none"
-                      });
-                    }
-                  });
-                }
-              });
+                });
+              } else {
+                this.handleUserInfoAndNavigation();
+              }
             }
           } else {
             common_vendor.index.hideLoading();

+ 121 - 10
unpackage/dist/dev/mp-weixin/pages/job-detail/job-detail.js

@@ -34,6 +34,7 @@ const _sfc_main = {
   onLoad(options) {
     this.jobId = options.id;
     this.getJobDetail(options.id);
+    this.getTenantId();
     try {
       const jobDetailStr = common_vendor.index.getStorageSync("currentJobDetail");
       if (jobDetailStr) {
@@ -130,6 +131,111 @@ const _sfc_main = {
       return true;
     },
     // 获取当前职位配置
+    /* getConfig(selectedJobId){
+    	uni.request({
+    		url: `${apiBaseUrl}/api/job/config/position/${this.jobId}`,
+    		method: 'GET',
+    		data: {
+    			openid: JSON.parse(uni.getStorageSync('userInfo')).openid
+    		},
+    		header: {
+    			'content-type': 'application/x-www-form-urlencoded'
+    		},
+    		success: (res) => {
+    			// 身份验证成功后,继续提交用户信息
+    			console.log(res);
+    			if (res.statusCode === 200) {
+    				if (res.data.code === 2000) {
+    					uni.setStorageSync('configData', JSON.stringify(res.data.data))
+    					uni.navigateTo({
+    						url: '/pages/Personal/Personal',
+    						fail: (err) => {
+    							console.error('页面跳转失败:', err);
+    							uni.showToast({
+    								title: '页面跳转失败',
+    								icon: 'none'
+    							});
+    						}
+    					});
+    				} else {
+    					
+    				}
+    			} else {
+    				uni.hideLoading();
+    				
+    			}
+    		},
+    		fail: (err) => {
+    			uni.hideLoading();
+    			uni.showToast({
+    				title: '网络错误,请稍后重试',
+    				icon: 'none'
+    			});
+    		}
+    	});
+    }, */
+    // 处理用户信息获取和页面跳转逻辑
+    handleUserInfoAndNavigation() {
+      const openid = JSON.parse(common_vendor.index.getStorageSync("userInfo")).openid;
+      common_vendor.index.request({
+        url: `${common_config.apiBaseUrl}/api/wechat/user/get_full_info?tenant_id=${this.tenant_id || JSON.parse(common_vendor.index.getStorageSync("userInfo")).tenant_id || 1}&openid=${openid}`,
+        method: "GET",
+        success: (infoRes) => {
+          if (infoRes.statusCode === 200 && infoRes.data && infoRes.data.data && infoRes.data.data.profile) {
+            const resumeUrl = infoRes.data.data.profile.resume_url || "";
+            if (!resumeUrl) {
+              common_vendor.index.navigateTo({
+                url: "/pages/uploadResume/uploadResume",
+                // 假设跳转到上传简历页面
+                fail: (err) => {
+                  console.error("页面跳转失败:", err);
+                  common_vendor.index.showToast({
+                    title: "页面跳转失败",
+                    icon: "none"
+                  });
+                }
+              });
+            } else {
+              common_vendor.index.navigateTo({
+                url: "/pages/Personal/Personal",
+                fail: (err) => {
+                  console.error("页面跳转失败:", err);
+                  common_vendor.index.showToast({
+                    title: "页面跳转失败",
+                    icon: "none"
+                  });
+                }
+              });
+            }
+          } else {
+            common_vendor.index.navigateTo({
+              url: "/pages/Personal/Personal",
+              fail: (err) => {
+                console.error("页面跳转失败:", err);
+                common_vendor.index.showToast({
+                  title: "页面跳转失败",
+                  icon: "none"
+                });
+              }
+            });
+          }
+        },
+        fail: (err) => {
+          console.error("获取用户信息失败:", err);
+          common_vendor.index.navigateTo({
+            url: "/pages/Personal/Personal",
+            fail: (err2) => {
+              console.error("页面跳转失败:", err2);
+              common_vendor.index.showToast({
+                title: "页面跳转失败",
+                icon: "none"
+              });
+            }
+          });
+        }
+      });
+    },
+    // 获取当前职位配置
     getConfig(selectedJobId) {
       common_vendor.index.request({
         url: `${common_config.apiBaseUrl}/api/job/config/position/${this.jobId}`,
@@ -145,16 +251,21 @@ const _sfc_main = {
           if (res.statusCode === 200) {
             if (res.data.code === 2e3) {
               common_vendor.index.setStorageSync("configData", JSON.stringify(res.data.data));
-              common_vendor.index.navigateTo({
-                url: "/pages/Personal/Personal",
-                fail: (err) => {
-                  console.error("页面跳转失败:", err);
-                  common_vendor.index.showToast({
-                    title: "页面跳转失败",
-                    icon: "none"
-                  });
-                }
-              });
+              const configData = res.data.data;
+              const enableVideoPresentation = (configData == null ? void 0 : configData.enable_video_presentation) || false;
+              if (enableVideoPresentation) {
+                const videoUrl = (configData == null ? void 0 : configData.video_presentation_url) || "";
+                const nextPage = "/pages/Personal/Personal";
+                common_vendor.index.navigateTo({
+                  url: `/pages/video-briefing/video-briefing?src=${encodeURIComponent(videoUrl)}&next=${encodeURIComponent(nextPage)}`,
+                  fail: (err) => {
+                    console.error("跳转到视频宣讲页面失败:", err);
+                    this.handleUserInfoAndNavigation();
+                  }
+                });
+              } else {
+                this.handleUserInfoAndNavigation();
+              }
             }
           } else {
             common_vendor.index.hideLoading();

+ 1 - 1
unpackage/dist/dev/mp-weixin/pages/uploadResume/uploadResume.js

@@ -15,7 +15,7 @@ const _sfc_main = {
   onLoad(options) {
     const pages = getCurrentPages();
     const prevPage = pages[pages.length - 2];
-    if (prevPage && prevPage.route === "pages/index/index") {
+    if (prevPage && (prevPage.route === "pages/index/index" || prevPage.route === "pages/job-detail/job-detail" || prevPage.route === "pages/video-briefing/video-briefing")) {
       this.showSkipButton = true;
     }
   },

+ 152 - 0
unpackage/dist/dev/mp-weixin/pages/video-briefing/video-briefing.js

@@ -0,0 +1,152 @@
+"use strict";
+const common_vendor = require("../../common/vendor.js");
+const common_config = require("../../common/config.js");
+const _sfc_main = {
+  data() {
+    return {
+      videoSrc: "https://data.qicai321.com/minlong/latentsync/9791ad45-dd30-4f84-a1c6-0c07c4d08707_result.mp4",
+      nextPath: "/pages/index/index",
+      statusBarHeight: 0,
+      navBarHeight: 44,
+      videoHeight: 0,
+      tenant_id: ""
+      // 租户ID
+    };
+  },
+  onLoad(options) {
+    this.videoSrc = options && options.src ? decodeURIComponent(options.src) : "";
+    this.nextPath = options && options.next ? decodeURIComponent(options.next) : "/pages/index/index";
+    const sysInfo = common_vendor.index.getSystemInfoSync();
+    this.statusBarHeight = sysInfo.statusBarHeight || 0;
+    this.videoHeight = (sysInfo.windowHeight || 0) - this.statusBarHeight;
+    this.getTenantId();
+  },
+  methods: {
+    // 获取本地存储的tenant_id
+    getTenantId() {
+      const tenantId = common_vendor.index.getStorageSync("tenant_id");
+      if (tenantId) {
+        this.tenant_id = tenantId;
+        return tenantId;
+      }
+      return null;
+    },
+    handleSkip() {
+      this.navigateToNext();
+    },
+    handleEnded() {
+      this.navigateToNext();
+    },
+    handleError(e) {
+      common_vendor.index.showToast({ title: "视频加载失败", icon: "none" });
+    },
+    /* navigateToNext() {
+    	console.log(uni.getStorageSync('configData'));
+    	// 若 nextPath 是 tabBar 页面,需要使用 switchTab;否则使用 navigateTo
+    	try {
+    		const tabBarPages = [
+    			'/pages/index/index',
+    			'/pages/my/my'
+    		];
+    		if (tabBarPages.includes(this.nextPath)) {
+    			uni.switchTab({ url: this.nextPath });
+    		} else {
+    			uni.navigateTo({ url: this.nextPath });
+    		}
+    	} catch (err) {
+    		// 兜底跳首页
+    		uni.switchTab({ url: '/pages/index/index' });
+    	}
+    }, */
+    navigateToNext() {
+      try {
+        const configStr = common_vendor.index.getStorageSync("configData");
+        let configData = null;
+        if (configStr) {
+          try {
+            configData = JSON.parse(configStr);
+            console.log("解析到的配置数据:", configData);
+          } catch (parseError) {
+            console.error("解析configData失败:", parseError);
+          }
+        }
+        this.handleUserInfoAndNavigation(configData.require_resume_upload);
+      } catch (error) {
+        console.error("跳转处理失败:", error);
+      }
+    },
+    // 处理用户信息获取和页面跳转逻辑
+    handleUserInfoAndNavigation(require_resume_upload) {
+      const openid = JSON.parse(common_vendor.index.getStorageSync("userInfo")).openid;
+      common_vendor.index.request({
+        url: `${common_config.apiBaseUrl}/api/wechat/user/get_full_info?tenant_id=${this.tenant_id || JSON.parse(common_vendor.index.getStorageSync("userInfo")).tenant_id || 1}&openid=${openid}`,
+        method: "GET",
+        success: (infoRes) => {
+          if (infoRes.statusCode === 200 && infoRes.data && infoRes.data.data && infoRes.data.data.profile) {
+            const resumeUrl = infoRes.data.data.profile.resume_url || "";
+            if (!resumeUrl && require_resume_upload) {
+              common_vendor.index.navigateTo({
+                url: "/pages/uploadResume/uploadResume",
+                // 假设跳转到上传简历页面
+                fail: (err) => {
+                  console.error("页面跳转失败:", err);
+                  common_vendor.index.showToast({
+                    title: "页面跳转失败",
+                    icon: "none"
+                  });
+                }
+              });
+            } else {
+              common_vendor.index.navigateTo({
+                url: "/pages/Personal/Personal",
+                fail: (err) => {
+                  console.error("页面跳转失败:", err);
+                  common_vendor.index.showToast({
+                    title: "页面跳转失败",
+                    icon: "none"
+                  });
+                }
+              });
+            }
+          } else {
+            common_vendor.index.navigateTo({
+              url: "/pages/Personal/Personal",
+              fail: (err) => {
+                console.error("页面跳转失败:", err);
+                common_vendor.index.showToast({
+                  title: "页面跳转失败",
+                  icon: "none"
+                });
+              }
+            });
+          }
+        },
+        fail: (err) => {
+          console.error("获取用户信息失败:", err);
+          common_vendor.index.navigateTo({
+            url: "/pages/Personal/Personal",
+            fail: (err2) => {
+              console.error("页面跳转失败:", err2);
+              common_vendor.index.showToast({
+                title: "页面跳转失败",
+                icon: "none"
+              });
+            }
+          });
+        }
+      });
+    }
+  }
+};
+function _sfc_render(_ctx, _cache, $props, $setup, $data, $options) {
+  return {
+    a: "20px",
+    b: common_vendor.o((...args) => $options.handleSkip && $options.handleSkip(...args)),
+    c: $data.videoSrc,
+    d: common_vendor.o((...args) => $options.handleEnded && $options.handleEnded(...args)),
+    e: common_vendor.o((...args) => $options.handleError && $options.handleError(...args)),
+    f: $data.videoHeight + "px"
+  };
+}
+const MiniProgramPage = /* @__PURE__ */ common_vendor._export_sfc(_sfc_main, [["render", _sfc_render]]);
+wx.createPage(MiniProgramPage);

+ 5 - 0
unpackage/dist/dev/mp-weixin/pages/video-briefing/video-briefing.json

@@ -0,0 +1,5 @@
+{
+  "navigationBarTitleText": "宣讲视频",
+  "navigationStyle": "default",
+  "usingComponents": {}
+}

+ 1 - 0
unpackage/dist/dev/mp-weixin/pages/video-briefing/video-briefing.wxml

@@ -0,0 +1 @@
+<view class="page"><view class="skip-fixed" style="{{'top:' + a}}" bindtap="{{b}}"><text class="skip-text">关闭</text></view><view class="video-wrap" style="{{'height:' + f}}"><video id="{{'briefingVideo'}}" src="{{c}}" autoplay controls="{{false}}" enable-progress-gesture="{{false}}" show-center-play-btn="{{false}}" show-fullscreen-btn="{{false}}" show-play-btn="{{false}}" enable-play-gesture="{{false}}" object-fit="contain" bindended="{{d}}" binderror="{{e}}" class="video"/></view><view class="tips">请完整观看宣讲视频。如需跳过,可点击右上角“跳过”。</view></view>

+ 60 - 0
unpackage/dist/dev/mp-weixin/pages/video-briefing/video-briefing.wxss

@@ -0,0 +1,60 @@
+
+.page {
+	background: #000;
+	min-height: 100vh;
+}
+.nav-bar {
+	position: relative;
+	display: flex;
+	align-items: center;
+	justify-content: space-between;
+	/* height: 44px; */
+	padding: 0 16px;
+	background: #000;
+	color: #fff;
+	box-sizing: border-box;
+	z-index: 1;
+}
+.nav-title {
+	font-size: 16px;
+	font-weight: 600;
+}
+.skip-btn {
+	font-size: 14px;
+	color: #ffffff;
+	opacity: 0.9;
+}
+.video-wrap {
+	width: 100%;
+	background: #000;
+}
+.video {
+	width: 100%;
+	height: 100%;
+}
+.tips {
+	padding: 5px 16px;
+    text-align: center;
+	font-size: 12px;
+	color: #bbb;
+	background: #000;
+}
+
+/* 右上角固定关闭按钮样式 */
+.skip-fixed {
+	position: fixed;
+	right: 12px;
+	/* top 动态由内联样式结合状态栏高度控制 */
+	background: rgba(0, 0, 0, 0.35);
+	color: #fff;
+	border-radius: 18px;
+	padding: 6px 12px;
+	border: 0.5px solid rgba(255, 255, 255, 0.35);
+	backdrop-filter: blur(6px);
+	-webkit-backdrop-filter: blur(6px);
+    line-height: 12px;
+	z-index: 999;
+}
+.skip-text {
+	font-size: 12px;
+}

+ 8 - 1
unpackage/dist/dev/mp-weixin/project.private.config.json

@@ -10,10 +10,17 @@
         {
           "name": "pages/index/index",
           "pathName": "pages/index/index",
-          "query": "scene=13",
+          "query": "scene=1",
           "launchMode": "default",
           "scene": 1047
         },
+        {
+          "name": "pages/video-briefing/video-briefing",
+          "pathName": "pages/video-briefing/video-briefing",
+          "query": "",
+          "launchMode": "default",
+          "scene": null
+        },
         {
           "name": "pages/demo/demo",
           "pathName": "pages/demo/demo",