yangg 2 mesiacov pred
rodič
commit
1db07bde36

+ 1 - 1
common/config.js

@@ -1,7 +1,7 @@
 // API base URL configuration
 //线上 https://minlong.raycos.com.cn
 //测试 http://192.168.66.187:8083
-export const apiBaseUrl = 'http://192.168.66.187:8083';
+export const apiBaseUrl = 'https://minlong.raycos.com.cn';
 
 // You can add other global configuration settings here
 export const appVersion = '1.0.0';

+ 133 - 89
pages/camera/camera.vue

@@ -12,90 +12,97 @@
 			</view>
 		</view> -->
 
-		<!-- 主要内容区域 -->
-		<view class="content">
-			<!-- 数字人头像 -->
-			<view class="digital-avatar">
-				<!-- <view class="message-box">
-					<text class="message-text">面试官会根据您的自我介绍内容对您提出以下问题,请您回答相关问题,请知悉答题即可</text>
-				</view> -->
-				<view class="user-avatar">
-					<camera v-if="!digitalHumanUrl" device-position="front" flash="auto" class="camera" 
-							:mode="mode" @error="handleCameraError"></camera>
-					<web-view v-else-if="digitalHumanUrl" :src="digitalHumanUrl" class="digital-human-webview"></web-view>
-					<image v-else src="/static/avatar.png" mode="aspectFill" class="avatar-image"></image>
+		<!-- 主要内容区域 - 添加可滚动区域 -->
+		<scroll-view class="content-scroll" scroll-y="true">
+			<view class="content">
+				<!-- 数字人头像 -->
+				<view class="digital-avatar">
+					<!-- <view class="message-box">
+						<text class="message-text">面试官会根据您的自我介绍内容对您提出以下问题,请您回答相关问题,请知悉答题即可</text>
+					</view> -->
+					<view class="user-avatar">
+						<camera v-if="!digitalHumanUrl" device-position="front" flash="auto" class="camera" 
+								:mode="mode" @error="handleCameraError"></camera>
+						<web-view v-else-if="digitalHumanUrl" :src="digitalHumanUrl" class="digital-human-webview"></web-view>
+						<image v-else src="/static/avatar.png" mode="aspectFill" class="avatar-image"></image>
+					</view>
 				</view>
-			</view>
 
-			<!-- 进度指示器 -->
-			<!-- <view class="progress-container">
-        <view class="progress-step" v-for="(step, index) in 3" :key="index">
-          <view class="step-circle" :class="{'active': currentStep >= index+1}">{{index+1}}</view>
-          <view class="step-text">{{stepTexts[index]}}</view>
-        </view>
-        <view class="progress-bar">
-          <view class="progress-fill" :style="{width: progressWidth + '%'}"></view>
-        </view>
-      </view> -->
-
-			<!-- 测试内容区域 -->
-			<view class="interview-content">
-				<!-- 问题编号和进度 -->
-				<view class="question-number">
-					<text>{{currentQuestionIndex + 1}}/{{questions.length}}</text>
-				</view>
-				
-				<!-- 问题和选项区域 -->
-				<view class="question-area">
-					<view class="question-importance">
-						<!-- <text v-if="currentQuestion.isImportant">重点题</text>  -->
-						<text class="question-type">{{currentQuestion.questionTypeName}}</text> 
-						{{currentQuestion.text}}
+				<!-- 进度指示器 -->
+				<!-- <view class="progress-container">
+	        <view class="progress-step" v-for="(step, index) in 3" :key="index">
+	          <view class="step-circle" :class="{'active': currentStep >= index+1}">{{index+1}}</view>
+	          <view class="step-text">{{stepTexts[index]}}</view>
+	        </view>
+	        <view class="progress-bar">
+	          <view class="progress-fill" :style="{width: progressWidth + '%'}"></view>
+	        </view>
+	      </view> -->
+
+				<!-- 测试内容区域 -->
+				<view class="interview-content">
+					<!-- 问题编号和进度 -->
+					<view class="question-number">
+						<text>{{currentQuestionIndex + 1}}/{{questions.length}}</text>
 					</view>
+					
+					<!-- 问题和选项区域 -->
+					<view class="question-area">
+						<view class="question-importance">
+							<!-- <text v-if="currentQuestion.isImportant">重点题</text>  -->
+							<text class="question-type">{{currentQuestion.questionTypeName}}</text> 
+							{{currentQuestion.text}}
+						</view>
 
-					<view class="options">
-						<!-- 只渲染非开放问题 (questionType: 1 或 2) 'option-wrong': showResult && (
-									currentQuestion.questionType === 1 ? 
-									(selectedOption === index && index !== currentQuestion.correctAnswer) : 
-									(selectedOptions.includes(index) && !currentQuestion.correctAnswers.includes(index))
-								)-->
-						<view 
-							v-if="currentQuestion.questionType !== 0"
-							v-for="(option, index) in currentQuestion.options" 
-							:key="index" 
-							class="option-item"
-							:class="{
-								'option-selected': currentQuestion.questionType === 1 ? selectedOption === index : selectedOptions.includes(index),
-								'option-correct': showResult && (
-									currentQuestion.questionType === 1 ? index === currentQuestion.correctAnswer : currentQuestion.correctAnswers.includes(index)
-								),
-								
-							}" 
-							@click="selectOption(index)">
-							<!-- 使用字母标识 A、B、C、D、E 等 -->
-							<!-- <text class="option-prefix">{{ String.fromCharCode(65 + index) }}.</text> -->
-							<text class="option-text">{{ option.option_text || (typeof option === 'string' ? option : JSON.stringify(option)) }}</text>
+						<!-- 添加图片显示区域,仅在 question_form 为 3 时显示 -->
+						<view class="question-image-container" v-if="currentQuestion.questionType === 3 && currentQuestion.imageUrl">
+							<image :src="currentQuestion.imageUrl" mode="widthFix" class="question-image"></image>
 						</view>
-					</view>
 
-					<!-- 添加计时器显示 -->
-					<!-- <view class="timer-container">
-						<text class="timer-text">本题剩余({{remainingTime}})</text>
-					</view> -->
-					
-					<view class="bottom-button-container">
-						<view class="bottom-button-wrapper">
-							<button class="next-button" @click="nextQuestion(option)" 
-								:disabled="
-									(currentQuestion.questionType === 0 && openQuestionAnswer.trim() === '') || 
-									(currentQuestion.questionType === 1 && selectedOption === null) || 
-									(currentQuestion.questionType === 2 && selectedOptions.length === 0)
-								">
-								本题剩余{{remainingTime}}&nbsp;&nbsp;&nbsp;{{"进入下一题"}}<!-- showResult ? '进入下一题' : '提交答案' -->
-							</button>
+						<view class="options">
+							<!-- 渲染非开放问题 (questionType: 1, 2 或 3) 'option-correct': showResult && (
+										currentQuestion.questionType === 1 || currentQuestion.questionType === 3 ? index === currentQuestion.correctAnswer : currentQuestion.correctAnswers.includes(index)
+									),-->
+							<view 
+								v-if="currentQuestion.questionType !== 0"
+								v-for="(option, index) in currentQuestion.options" 
+								:key="index" 
+								class="option-item"
+								:class="{
+									'option-selected': currentQuestion.questionType === 1 || currentQuestion.questionType === 3 ? selectedOption === index : selectedOptions.includes(index),	
+								}" 
+								@click="selectOption(index)">
+								<!-- 使用字母标识 A、B、C、D、E 等 -->
+								<!-- <text class="option-prefix">{{ String.fromCharCode(65 + index) }}.</text> -->
+								<text class="option-text">{{ option.option_text || (typeof option === 'string' ? option : JSON.stringify(option)) }}</text>
+							</view>
 						</view>
+
+						<!-- 添加计时器显示 -->
+						<!-- <view class="timer-container">
+							<text class="timer-text">本题剩余({{remainingTime}})</text>
+						</view> -->
+						
+						<!-- 移除底部按钮容器,将在滚动区域外显示 -->
 					</view>
 				</view>
+				
+				<!-- 添加底部空白区域,确保内容不被固定按钮遮挡 -->
+				<view class="bottom-space"></view>
+			</view>
+		</scroll-view>
+		
+		<!-- 将底部按钮移到滚动区域外 -->
+		<view class="bottom-button-container">
+			<view class="bottom-button-wrapper">
+				<button class="next-button" @click="nextQuestion(option)" 
+					:disabled="
+						(currentQuestion.questionType === 0 && openQuestionAnswer.trim() === '') || 
+						(currentQuestion.questionType === 1 && selectedOption === null) || 
+						(currentQuestion.questionType === 2 && selectedOptions.length === 0)
+					">
+					本题剩余{{remainingTime}}&nbsp;&nbsp;&nbsp;{{"进入下一题"}}
+				</button>
 			</view>
 		</view>
 
@@ -253,7 +260,8 @@
 								questionTypeName: q.question_form_name || '单选题',
 								correctAnswers: q.correct_answers || [],
 								difficulty: q.difficulty || 1,
-								difficultyName: q.difficulty_name || '初级'
+								difficultyName: q.difficulty_name || '初级',
+								imageUrl: q.question_image_url || '' // 添加图片URL字段
 							}));
 					} else {
 						// 处理单个问题
@@ -290,11 +298,12 @@
 						correctAnswer: data.correctAnswer || 0,
 						isImportant: data.is_system || false,
 						explanation: data.explanation || '',
-						questionType: data.question_form, // 1-单选题,2-多选题
+						questionType: data.question_form, // 1-单选题,2-多选题,3-看图答题
 						questionTypeName: data.question_form_name || '单选题',
 						correctAnswers: data.correct_answers || [],
 						difficulty: data.difficulty || 1,
-						difficultyName: data.difficulty_name || '初级'
+						difficultyName: data.difficulty_name || '初级',
+						imageUrl: data.question_image_url || '' // 添加图片URL字段
 					};
 					
 					// 添加到问题列表
@@ -379,7 +388,7 @@
 						// 否则添加到已选中数组
 						this.selectedOptions.push(index);
 					}
-				} else if (this.currentQuestion.questionType === 1) { // 单选题
+				} else if (this.currentQuestion.questionType === 1 || this.currentQuestion.questionType === 3) { // 单选题或看图答题
 					this.selectedOption = index;
 				}
 				
@@ -411,7 +420,7 @@
 					} else {
 						this.isAnswerCorrect = sortedSelected.every((value, index) => value === sortedCorrect[index]);
 					}
-				} else { // 单选题
+				} else { // 单选题或看图答题 (questionType === 1 或 3)
 					this.isAnswerCorrect = this.selectedOption === this.currentQuestion.correctAnswer;
 				}
 				
@@ -484,12 +493,18 @@
 						answer: this.openQuestionAnswer,
 						answerDuration: this.getAnswerDuration() // 添加答题时长
 					};
-				} else { // 单选或多选
+				} else if (this.currentQuestion.questionType === 1 || this.currentQuestion.questionType === 3) { // 单选题或看图答题
+					answer = {
+						questionId: this.currentQuestion.id,
+						questionType: this.currentQuestion.questionType,
+						answer: this.selectedOption,
+						answerDuration: this.getAnswerDuration() // 添加答题时长
+					};
+				} else { // 多选题
 					answer = {
 						questionId: this.currentQuestion.id,
 						questionType: this.currentQuestion.questionType,
-						answer: this.currentQuestion.questionType === 1 ? 
-							this.selectedOption : this.selectedOptions,
+						answer: this.selectedOptions,
 						answerDuration: this.getAnswerDuration() // 添加答题时长
 					};
 				}
@@ -536,10 +551,11 @@
 					if (this.currentAnswer.questionType === 0) {
 						// 开放题直接使用文本答案
 						answerContent = this.currentAnswer.answer;
-					} else if (this.currentAnswer.questionType === 1) {
-						// 单选题,获取选项ID而不是索引
+					} else if (this.currentAnswer.questionType === 1 || this.currentAnswer.questionType === 3) {
+						// 单选题或看图答题,获取选项ID而不是索引
 						const selectedIndex = this.currentAnswer.answer;
 						const selectedOption = this.currentQuestion.options[selectedIndex];
+						console.log('selectedOption',selectedOption);
 						// 使用选项的ID或其他唯一标识符
 						answerContent = selectedOption.id ? selectedOption.id.toString() : selectedIndex.toString();
 					} else if (this.currentAnswer.questionType === 2) {
@@ -839,6 +855,7 @@
 		background-color: #ffffff;
 		display: flex;
 		flex-direction: column;
+		overflow: hidden; /* 防止内容溢出 */
 	}
 
 	.header {
@@ -1062,14 +1079,13 @@
 
 	.bottom-button-container {
 		position: fixed;
-		bottom: 30px;
-		left:7%;
+		bottom: 50px;
+		left: 5%;
 		right: 0;
-		background-color: #ffffff;
-		/* border-top: 1px solid #e0e0e0; */
 		padding: 20rpx;
 		display: flex;
 		justify-content: center;
+		z-index: 10;
 	}
 
 	.bottom-button-wrapper {
@@ -1374,4 +1390,32 @@
 		color: #333;
 		min-width: 30rpx;
 	}
+
+	/* 新增的图片显示样式 */
+	.question-image-container {
+		width: 100%;
+		margin: 20rpx 0;
+		display: flex;
+		justify-content: center;
+		align-items: center;
+	}
+
+	.question-image {
+		width: 100%;
+		max-width: 600rpx;
+		border-radius: 10rpx;
+		box-shadow: 0 2rpx 8rpx rgba(0, 0, 0, 0.1);
+	}
+
+	/* 添加滚动视图样式 */
+	.content-scroll {
+		flex: 1;
+		height: calc(100vh - 130px); /* 减去底部按钮的高度 */
+		overflow-y: auto;
+	}
+
+	/* 添加底部空白区域,防止内容被固定按钮遮挡 */
+	.bottom-space {
+		height: 130px; /* 与底部按钮高度一致 */
+	}
 </style>

+ 3 - 3
pages/interview-question/interview-question.vue

@@ -20,7 +20,7 @@
         </video>
          <div class="answer-button-container" v-if="showAnswerButton">
           <button class="answer-button" @click="handleAnswerButtonClick">
-            开始回答
+            开始提问
           </button>
         </div>
         <!-- 添加字幕覆盖层 :data-time="formatTime(recordingTimerCount) || '03:30'"-->
@@ -94,7 +94,7 @@
     <!-- 添加停止录制按钮 -->
     <div class="stop-recording-button-container" v-if="showStopRecordingButton">
       <button class="stop-recording-button" @click="stopRecordingAnswer">
-        完成作答
+        完成提问
       </button>
     </div>
 
@@ -108,7 +108,7 @@
     <!-- 添加开始回答按钮 -->
     <div class="start-recording-button-container" v-if="showStartRecordingButton">
       <button class="start-recording-button" @click="handleStartRecordingClick">
-        开始作答
+        开始提问
       </button>
     </div>
 

+ 48 - 0
pages/interview/interview.vue

@@ -50,6 +50,12 @@
 			
 			<!-- 添加手势引导蒙层 -->
 			<cover-view class="gesture-overlay">
+				<!-- 添加右上角引导图标 -->
+				<cover-view class="guide-icon">
+					<cover-image :src="guideIcon[currentStep]" class="guide-image"></cover-image>
+					<!-- <text class="guide-text">引导</text> -->
+				</cover-view>
+				
 				<cover-image 
 					:src="gestureOverlays[currentStep]" 
 					class="gesture-image"
@@ -75,6 +81,12 @@
 			
 			<!-- 添加H5环境的手势引导蒙层 -->
 			<view class="gesture-overlay">
+				<!-- 添加右上角引导图标 -->
+				<view class="guide-icon">
+					<image :src="guideIcon[currentStep]" class="guide-image"></image>
+					<!-- <text class="guide-text">引导</text> -->
+				</view>
+				
 				<image 
 					:src="gestureOverlays[currentStep]" 
 					class="gesture-image"
@@ -138,6 +150,14 @@ import { apiBaseUrl } from '@/common/config.js'; // Import the base URL from a c
 				],
 				photoLinks: [null, null, null, null, null, null], // 存储上传后的图片链接
 				cameraPosition: 'front', // 修改默认为前置摄像头
+				guideIcon: [
+					'http://121.36.251.245:9000/minlong/tenant_1/general_uploads/d9082487afc4499c97407aa3cebd1923.jpeg',
+					'http://121.36.251.245:9000/minlong/tenant_1/general_uploads/27022cfcc05644aabb415b93cac126b1.jpeg',
+					'http://121.36.251.245:9000/minlong/tenant_1/general_uploads/fcfa3bf149cd4edd962d9b8844bed0b0.jpeg',
+					'http://121.36.251.245:9000/minlong/tenant_1/general_uploads/d9082487afc4499c97407aa3cebd1923.jpeg',
+					'http://121.36.251.245:9000/minlong/tenant_1/general_uploads/27022cfcc05644aabb415b93cac126b1.jpeg',
+					'http://121.36.251.245:9000/minlong/tenant_1/general_uploads/fcfa3bf149cd4edd962d9b8844bed0b0.jpeg',
+				]
 			}
 		},
 		computed: {
@@ -841,6 +861,7 @@ import { apiBaseUrl } from '@/common/config.js'; // Import the base URL from a c
 	align-items: center;
 	position: absolute;
 	bottom: 50rpx;
+	z-index: 9999;
 }
 
 /* 添加手势引导蒙层样式 */
@@ -916,5 +937,32 @@ import { apiBaseUrl } from '@/common/config.js'; // Import the base URL from a c
 	border-radius: 40rpx;
 	margin: 0 20rpx;
 }
+
+/* 添加右上角引导图标样式 */
+.guide-icon {
+	position: absolute;
+	top: 30rpx;
+	right: 30rpx;
+	width: 160rpx;
+	height: 200rpx;
+	display: flex;
+	flex-direction: column;
+	align-items: center;
+	justify-content: center;
+	background-color: rgba(0, 0, 0, 0.5);
+	border-radius: 10rpx;
+	z-index: 11;
+}
+
+.guide-image {
+	width: 160rpx;
+	height: 200rpx;
+}
+
+.guide-text {
+	color: white;
+	font-size: 24rpx;
+	margin-top: 5rpx;
+}
 </style>
 

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

@@ -1,3 +1,3 @@
 "use strict";
-const apiBaseUrl = "http://192.168.66.187:8083";
+const apiBaseUrl = "https://minlong.raycos.com.cn";
 exports.apiBaseUrl = apiBaseUrl;

+ 40 - 24
unpackage/dist/dev/mp-weixin/pages/camera/camera.js

@@ -103,7 +103,9 @@ const _sfc_main = {
             questionTypeName: q.question_form_name || "单选题",
             correctAnswers: q.correct_answers || [],
             difficulty: q.difficulty || 1,
-            difficultyName: q.difficulty_name || "初级"
+            difficultyName: q.difficulty_name || "初级",
+            imageUrl: q.question_image_url || ""
+            // 添加图片URL字段
           }));
         } else {
           this.processInterviewData(res);
@@ -132,11 +134,13 @@ const _sfc_main = {
           isImportant: data.is_system || false,
           explanation: data.explanation || "",
           questionType: data.question_form,
-          // 1-单选题,2-多选题
+          // 1-单选题,2-多选题,3-看图答题
           questionTypeName: data.question_form_name || "单选题",
           correctAnswers: data.correct_answers || [],
           difficulty: data.difficulty || 1,
-          difficultyName: data.difficulty_name || "初级"
+          difficultyName: data.difficulty_name || "初级",
+          imageUrl: data.question_image_url || ""
+          // 添加图片URL字段
         };
         this.questions.push(formattedQuestion);
         this.totalQuestions = this.questions.length;
@@ -198,7 +202,7 @@ const _sfc_main = {
         } else {
           this.selectedOptions.push(index);
         }
-      } else if (this.currentQuestion.questionType === 1) {
+      } else if (this.currentQuestion.questionType === 1 || this.currentQuestion.questionType === 3) {
         this.selectedOption = index;
       }
       this.playAiSpeaking();
@@ -274,11 +278,19 @@ const _sfc_main = {
           answerDuration: this.getAnswerDuration()
           // 添加答题时长
         };
+      } else if (this.currentQuestion.questionType === 1 || this.currentQuestion.questionType === 3) {
+        answer = {
+          questionId: this.currentQuestion.id,
+          questionType: this.currentQuestion.questionType,
+          answer: this.selectedOption,
+          answerDuration: this.getAnswerDuration()
+          // 添加答题时长
+        };
       } else {
         answer = {
           questionId: this.currentQuestion.id,
           questionType: this.currentQuestion.questionType,
-          answer: this.currentQuestion.questionType === 1 ? this.selectedOption : this.selectedOptions,
+          answer: this.selectedOptions,
           answerDuration: this.getAnswerDuration()
           // 添加答题时长
         };
@@ -310,9 +322,10 @@ const _sfc_main = {
         let answerContent = "";
         if (this.currentAnswer.questionType === 0) {
           answerContent = this.currentAnswer.answer;
-        } else if (this.currentAnswer.questionType === 1) {
+        } else if (this.currentAnswer.questionType === 1 || this.currentAnswer.questionType === 3) {
           const selectedIndex = this.currentAnswer.answer;
           const selectedOption = this.currentQuestion.options[selectedIndex];
+          console.log("selectedOption", selectedOption);
           answerContent = selectedOption.id ? selectedOption.id.toString() : selectedIndex.toString();
         } else if (this.currentAnswer.questionType === 2) {
           const selectedIndices = this.currentAnswer.answer;
@@ -519,43 +532,46 @@ function _sfc_render(_ctx, _cache, $props, $setup, $data, $options) {
     h: common_vendor.t($data.questions.length),
     i: common_vendor.t($options.currentQuestion.questionTypeName),
     j: common_vendor.t($options.currentQuestion.text),
-    k: $options.currentQuestion.questionType !== 0
+    k: $options.currentQuestion.questionType === 3 && $options.currentQuestion.imageUrl
+  }, $options.currentQuestion.questionType === 3 && $options.currentQuestion.imageUrl ? {
+    l: $options.currentQuestion.imageUrl
+  } : {}, {
+    m: $options.currentQuestion.questionType !== 0
   }, $options.currentQuestion.questionType !== 0 ? {
-    l: common_vendor.f($options.currentQuestion.options, (option, index, i0) => {
+    n: common_vendor.f($options.currentQuestion.options, (option, index, i0) => {
       return {
         a: common_vendor.t(option.option_text || (typeof option === "string" ? option : JSON.stringify(option))),
         b: index,
-        c: ($options.currentQuestion.questionType === 1 ? $data.selectedOption === index : $data.selectedOptions.includes(index)) ? 1 : "",
-        d: $data.showResult && ($options.currentQuestion.questionType === 1 ? index === $options.currentQuestion.correctAnswer : $options.currentQuestion.correctAnswers.includes(index)) ? 1 : "",
-        e: common_vendor.o(($event) => $options.selectOption(index), index)
+        c: ($options.currentQuestion.questionType === 1 || $options.currentQuestion.questionType === 3 ? $data.selectedOption === index : $data.selectedOptions.includes(index)) ? 1 : "",
+        d: common_vendor.o(($event) => $options.selectOption(index), index)
       };
     })
   } : {}, {
-    m: common_vendor.t($data.remainingTime),
-    n: common_vendor.t("进入下一题"),
-    o: common_vendor.o(($event) => $options.nextQuestion(_ctx.option)),
-    p: $options.currentQuestion.questionType === 0 && $data.openQuestionAnswer.trim() === "" || $options.currentQuestion.questionType === 1 && $data.selectedOption === null || $options.currentQuestion.questionType === 2 && $data.selectedOptions.length === 0,
-    q: $data.showEndModal
+    o: common_vendor.t($data.remainingTime),
+    p: common_vendor.t("进入下一题"),
+    q: common_vendor.o(($event) => $options.nextQuestion(_ctx.option)),
+    r: $options.currentQuestion.questionType === 0 && $data.openQuestionAnswer.trim() === "" || $options.currentQuestion.questionType === 1 && $data.selectedOption === null || $options.currentQuestion.questionType === 2 && $data.selectedOptions.length === 0,
+    s: $data.showEndModal
   }, $data.showEndModal ? {
-    r: common_vendor.o((...args) => $options.navigateToInterview && $options.navigateToInterview(...args))
+    t: common_vendor.o((...args) => $options.navigateToInterview && $options.navigateToInterview(...args))
   } : {}, {
-    s: $data.interviewCompleted
+    v: $data.interviewCompleted
   }, $data.interviewCompleted ? {
-    t: common_assets._imports_0$1,
-    v: common_vendor.o((...args) => $options.back && $options.back(...args))
+    w: common_assets._imports_0$1,
+    x: common_vendor.o((...args) => $options.back && $options.back(...args))
   } : {}, {
-    w: $data.loading
+    y: $data.loading
   }, $data.loading ? {
-    x: common_vendor.p({
+    z: common_vendor.p({
       status: "loading",
       contentText: {
         contentdown: "加载中..."
       }
     })
   } : {}, {
-    y: !$data.loading && $data.loadError
+    A: !$data.loading && $data.loadError
   }, !$data.loading && $data.loadError ? {
-    z: common_vendor.o((...args) => $options.fetchInterviewData && $options.fetchInterviewData(...args))
+    B: common_vendor.o((...args) => $options.fetchInterviewData && $options.fetchInterviewData(...args))
   } : {});
 }
 const MiniProgramPage = /* @__PURE__ */ common_vendor._export_sfc(_sfc_main, [["render", _sfc_render]]);

Rozdielové dáta súboru neboli zobrazené, pretože súbor je príliš veľký
+ 0 - 0
unpackage/dist/dev/mp-weixin/pages/camera/camera.wxml


+ 31 - 4
unpackage/dist/dev/mp-weixin/pages/camera/camera.wxss

@@ -6,6 +6,7 @@
 		background-color: #ffffff;
 		display: flex;
 		flex-direction: column;
+		overflow: hidden; /* 防止内容溢出 */
 }
 .header {
 		height: 90rpx;
@@ -196,14 +197,13 @@
 }
 .bottom-button-container {
 		position: fixed;
-		bottom: 30px;
-		left:7%;
+		bottom: 50px;
+		left: 5%;
 		right: 0;
-		background-color: #ffffff;
-		/* border-top: 1px solid #e0e0e0; */
 		padding: 20rpx;
 		display: flex;
 		justify-content: center;
+		z-index: 10;
 }
 .bottom-button-wrapper {
 		display: flex;
@@ -470,3 +470,30 @@
 		color: #333;
 		min-width: 30rpx;
 }
+
+	/* 新增的图片显示样式 */
+.question-image-container {
+		width: 100%;
+		margin: 20rpx 0;
+		display: flex;
+		justify-content: center;
+		align-items: center;
+}
+.question-image {
+		width: 100%;
+		max-width: 600rpx;
+		border-radius: 10rpx;
+		box-shadow: 0 2rpx 8rpx rgba(0, 0, 0, 0.1);
+}
+
+	/* 添加滚动视图样式 */
+.content-scroll {
+		flex: 1;
+		height: calc(100vh - 130px); /* 减去底部按钮的高度 */
+		overflow-y: auto;
+}
+
+	/* 添加底部空白区域,防止内容被固定按钮遮挡 */
+.bottom-space {
+		height: 130px; /* 与底部按钮高度一致 */
+}

Rozdielové dáta súboru neboli zobrazené, pretože súbor je príliš veľký
+ 0 - 0
unpackage/dist/dev/mp-weixin/pages/interview-question/interview-question.wxml


+ 22 - 12
unpackage/dist/dev/mp-weixin/pages/interview/interview.js

@@ -48,8 +48,16 @@ const _sfc_main = {
       ],
       photoLinks: [null, null, null, null, null, null],
       // 存储上传后的图片链接
-      cameraPosition: "front"
+      cameraPosition: "front",
       // 修改默认为前置摄像头
+      guideIcon: [
+        "http://121.36.251.245:9000/minlong/tenant_1/general_uploads/d9082487afc4499c97407aa3cebd1923.jpeg",
+        "http://121.36.251.245:9000/minlong/tenant_1/general_uploads/27022cfcc05644aabb415b93cac126b1.jpeg",
+        "http://121.36.251.245:9000/minlong/tenant_1/general_uploads/fcfa3bf149cd4edd962d9b8844bed0b0.jpeg",
+        "http://121.36.251.245:9000/minlong/tenant_1/general_uploads/d9082487afc4499c97407aa3cebd1923.jpeg",
+        "http://121.36.251.245:9000/minlong/tenant_1/general_uploads/27022cfcc05644aabb415b93cac126b1.jpeg",
+        "http://121.36.251.245:9000/minlong/tenant_1/general_uploads/fcfa3bf149cd4edd962d9b8844bed0b0.jpeg"
+      ]
     };
   },
   computed: {
@@ -483,19 +491,21 @@ function _sfc_render(_ctx, _cache, $props, $setup, $data, $options) {
     n: $data.cameraPosition,
     o: common_vendor.o((...args) => $options.handleCameraError && $options.handleCameraError(...args)),
     p: $data.cameraMode,
-    q: $data.gestureOverlays[$data.currentStep],
-    r: common_vendor.t($data.gestureHints[$data.currentStep]),
-    s: common_vendor.o((...args) => $options.capturePhotoMP && $options.capturePhotoMP(...args)),
-    t: common_vendor.o((...args) => $options.cancelCamera && $options.cancelCamera(...args))
+    q: $data.guideIcon[$data.currentStep],
+    r: $data.gestureOverlays[$data.currentStep],
+    s: common_vendor.t($data.gestureHints[$data.currentStep]),
+    t: common_vendor.o((...args) => $options.capturePhotoMP && $options.capturePhotoMP(...args)),
+    v: common_vendor.o((...args) => $options.cancelCamera && $options.cancelCamera(...args))
   } : {}, {
-    v: $data.isH5
+    w: $data.isH5
   }, $data.isH5 ? {
-    w: $data.gestureOverlays[$data.currentStep],
-    x: common_vendor.t($data.gestureHints[$data.currentStep]),
-    y: common_vendor.o((...args) => $options.capturePhoto && $options.capturePhoto(...args)),
-    z: common_vendor.o((...args) => $options.switchCamera && $options.switchCamera(...args)),
-    A: common_vendor.o((...args) => $options.cancelCamera && $options.cancelCamera(...args)),
-    B: $data.showCamera
+    x: $data.guideIcon[$data.currentStep],
+    y: $data.gestureOverlays[$data.currentStep],
+    z: common_vendor.t($data.gestureHints[$data.currentStep]),
+    A: common_vendor.o((...args) => $options.capturePhoto && $options.capturePhoto(...args)),
+    B: common_vendor.o((...args) => $options.switchCamera && $options.switchCamera(...args)),
+    C: common_vendor.o((...args) => $options.cancelCamera && $options.cancelCamera(...args)),
+    D: $data.showCamera
   } : {});
 }
 const MiniProgramPage = /* @__PURE__ */ common_vendor._export_sfc(_sfc_main, [["render", _sfc_render]]);

Rozdielové dáta súboru neboli zobrazené, pretože súbor je príliš veľký
+ 0 - 0
unpackage/dist/dev/mp-weixin/pages/interview/interview.wxml


+ 26 - 0
unpackage/dist/dev/mp-weixin/pages/interview/interview.wxss

@@ -170,6 +170,7 @@
 	align-items: center;
 	position: absolute;
 	bottom: 50rpx;
+	z-index: 9999;
 }
 
 /* 添加手势引导蒙层样式 */
@@ -239,3 +240,28 @@
 	border-radius: 40rpx;
 	margin: 0 20rpx;
 }
+
+/* 添加右上角引导图标样式 */
+.guide-icon {
+	position: absolute;
+	top: 30rpx;
+	right: 30rpx;
+	width: 160rpx;
+	height: 200rpx;
+	display: flex;
+	flex-direction: column;
+	align-items: center;
+	justify-content: center;
+	background-color: rgba(0, 0, 0, 0.5);
+	border-radius: 10rpx;
+	z-index: 11;
+}
+.guide-image {
+	width: 160rpx;
+	height: 200rpx;
+}
+.guide-text {
+	color: white;
+	font-size: 24rpx;
+	margin-top: 5rpx;
+}

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

@@ -8,7 +8,7 @@
     "urlCheck": false,
     "es6": true,
     "postcss": false,
-    "minified": false,
+    "minified": true,
     "newFeature": true,
     "bigPackageSizeSupport": true,
     "babelSetting": {

Niektoré súbory nie sú zobrazené, pretože je v týchto rozdielových dátach zmenené mnoho súborov