Browse Source

添加及修改功能

yangg 3 tuần trước cách đây
mục cha
commit
a7973b7247

+ 1 - 1
common/config.js

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

+ 16 - 14
pages/Personal/Personal.vue

@@ -69,10 +69,11 @@
 					</view>
 					<!-- 当性别为女时显示三期选择 -->
 					<view class="form-item" v-if="formData.gender === '女'">
-						<text class="label">是否为三期</text>
-						<picker @change="bindThreePeriodChange" :value="threePeriodIndex" :range="threePeriodOptions">
+						<text class="label required">是否为三期</text>
+						<picker @change="bindThreePeriodChange" :value="threePeriodIndex" :range="threePeriodOptions" :class="{'input-error': formErrors.threePeriod}">
 							<view class="picker-text">{{ threePeriodOptions[threePeriodIndex] || '请选择' }}</view>
 						</picker>
+						<text v-if="formErrors.threePeriod" class="error-message">{{formErrors.threePeriod}}</text>
 					</view>
 					<view class="form-row">
 					<view class="form-item">
@@ -222,14 +223,14 @@
 					
 					<view class="form-row">
 						<view class="form-item">
-							<text class="label required">工作单位/家庭地址</text>
+							<text class="label ">工作单位/家庭地址</text>
 							<input type="text" v-model="familyMemberForm.workplaceOrAddress" placeholder="请输入工作单位或家庭地址" />
-							<text v-if="familyMemberErrors.workplaceOrAddress" class="error-message">{{familyMemberErrors.workplaceOrAddress}}</text>
+							<!-- <text v-if="familyMemberErrors.workplaceOrAddress" class="error-message">{{familyMemberErrors.workplaceOrAddress}}</text> -->
 						</view>
 						<view class="form-item ">
-							<text class="label required">职务</text>
+							<text class="label ">职务</text>
 							<input type="text" v-model="familyMemberForm.position" placeholder="请输入职务" />
-							<text v-if="familyMemberErrors.position" class="error-message">{{familyMemberErrors.position}}</text>
+							<!-- <text v-if="familyMemberErrors.position" class="error-message">{{familyMemberErrors.position}}</text> -->
 						</view>
 					</view>
 					
@@ -701,7 +702,8 @@ import { apiBaseUrl } from '@/common/config.js';
 					weight: '',
 					expectedSalary: '',
 					skills: '',
-					training: ''
+					training: '',
+					threePeriod: '' // 添加这一行
 				},
 				// Add loading state
 				isLoading: true,
@@ -864,7 +866,7 @@ import { apiBaseUrl } from '@/common/config.js';
 					isValid = false;
 				}
 				
-				if (!this.familyMemberForm.workplaceOrAddress) {
+				/* if (!this.familyMemberForm.workplaceOrAddress) {
 					this.familyMemberErrors.workplaceOrAddress = '请输入工作单位/家庭地址';
 					isValid = false;
 				}
@@ -872,7 +874,7 @@ import { apiBaseUrl } from '@/common/config.js';
 				if (!this.familyMemberForm.position) {
 					this.familyMemberErrors.position = '请输入职务';
 					isValid = false;
-				}
+				} */
 				
 				if (!this.familyMemberForm.phone) {
 					this.familyMemberErrors.phone = '请输入联系电话';
@@ -1561,7 +1563,7 @@ import { apiBaseUrl } from '@/common/config.js';
 					data: {
 						openid: JSON.parse(uni.getStorageSync('userInfo')).openid,
 						name: data.name,
-						id_number: data.idCard,
+						id_card: data.idCard,
 						purePhoneNumber: data.phone,
 						tenant_id: 1,
 						examine:0
@@ -1669,12 +1671,12 @@ import { apiBaseUrl } from '@/common/config.js';
 						break;
 				}
 
-				if (!isValid) {
+				/* if (!isValid) {
 					uni.showToast({
 						title: '请完善所有必填信息',
 						icon: 'none'
 					});
-				}
+				} */
 
 				return isValid;
 			},
@@ -1967,12 +1969,12 @@ import { apiBaseUrl } from '@/common/config.js';
 			'familyMemberForm.phone': function(newVal) {
 				if (newVal) this.familyMemberErrors.phone = '';
 			},
-			'familyMemberForm.workplaceOrAddress': function(newVal) {
+			/* 'familyMemberForm.workplaceOrAddress': function(newVal) {
 				if (newVal) this.familyMemberErrors.workplaceOrAddress = '';
 			},
 			'familyMemberForm.position': function(newVal) {
 				if (newVal) this.familyMemberErrors.position = '';
-			},
+			}, */
 			'workForm.companyName': function(newVal) {
 				if (newVal && this.workErrors.companyName) {
 					this.workErrors.companyName = '';

+ 42 - 5
pages/identity-verify/identity-verify.vue

@@ -917,6 +917,11 @@ export default {
           
           // 显示重新录制按钮
           this.showRerecordButton = true;
+          
+          // 如果是追问问题,保持显示追问问题的字幕
+          if (this.isFollowUpQuestion && this.currentFollowUpQuestion) {
+            this.currentSubtitle = this.currentFollowUpQuestion.digital_human_video_subtitle || this.currentFollowUpQuestion.question;
+          }
         } else {
           console.log('已达到最大重试次数,继续下一题');
           
@@ -927,9 +932,8 @@ export default {
           this.proceedToNextQuestion();
         }
         
-        // 重置标记和清除字幕
+        // 重置标记
         this.isPlayingLowScoreVideo = false;
-        this.currentSubtitle = '';
         
         return;
       }
@@ -3047,7 +3051,8 @@ export default {
       this.videoUrl = this.lowScoreVideoUrl;
       this.videoPlaying = true;
       
-      // 清除现有字幕
+      // 清除现有字幕前先保存
+      const originalSubtitle = this.currentSubtitle;
       this.currentSubtitle = '';
       
       // 使用 nextTick 确保 DOM 更新后再播放视频
@@ -3065,11 +3070,21 @@ export default {
             this.lowScoreVideoSubtitles = [
               {
                 startTime: 0,
-                endTime: 30, // 假设视频长度为10秒,可根据实际情况调整
+                endTime: 30,
                 text: '我未听清楚您在说什么,请您再说一遍!',
                 translation: 'I didn\'t quite catch what you said, could you please repeat it?'
               }
             ];
+
+            // 在提示播放完成后恢复原来的字幕
+            setTimeout(() => {
+              // 如果是追问问题,保持显示追问问题的字幕
+              if (this.isFollowUpQuestion && this.currentFollowUpQuestion) {
+                this.currentSubtitle = this.currentFollowUpQuestion.digital_human_video_subtitle || this.currentFollowUpQuestion.question;
+              } else {
+                this.currentSubtitle = originalSubtitle;
+              }
+            }, 3000); // 3秒后恢复原问题
           }, 500);
         }
       });
@@ -3193,7 +3208,7 @@ export default {
       this.hasPlayedFollowUp = {};
     },
 
-    // 添加新方法:检查并播放追问问题
+    // 修改检查并播放追问问题的方法
     checkAndPlayFollowUpQuestion(parentQuestionId) {
       console.log('检查是否有追问问题,父问题ID:', parentQuestionId);
       
@@ -3221,6 +3236,28 @@ export default {
       if (followUpQuestion) {
         console.log('找到追问问题:', followUpQuestion);
         
+        // 检查录制时长
+        const recordingDuration = this.getRecordingDuration();
+        const lowScoreDuration = 7; // 低分阈值时长(秒),少于7秒视为低分
+        
+        // 如果录制时间少于7秒,播放"未听清楚"提示视频
+        if (recordingDuration < lowScoreDuration) {
+          console.log(`录制时间 ${recordingDuration} 秒,少于 ${lowScoreDuration} 秒,将播放低分提示视频`);
+          
+          // 增加重试次数
+          this.retryCount++;
+          
+          // 设置需要播放低分提示视频
+          this.needPlayLowScoreVideo = true;
+          
+          // 播放低分提示视频
+          this.playLowScoreVideo();
+          return;
+        }
+        
+        // 如果录制时长足够,重置重试次数
+        this.retryCount = 0;
+        
         // 标记此追问已播放
         this.hasPlayedFollowUp[parentQuestionId] = true;
         

+ 61 - 1
pages/interview_retake/interview_retake.vue

@@ -22,7 +22,15 @@
 							loop
 							muted
 							object-fit="contain"
+							@error="handleVideoError"
+							@loadedmetadata="handleVideoLoaded"
 						></video>
+						<view class="video-loading" v-if="isVideoLoading">
+							<text>加载中...</text>
+						</view>
+						<view class="video-error" v-if="videoError">
+							<text>{{videoErrorMsg}}</text>
+						</view>
 					</view>
 				</view>
 			</camera>
@@ -79,7 +87,11 @@ export default {
 				right_palm: 'http://data.qicai321.com/minlong/ebf6e43f-ffdf-49bb-8b00-adeff9ce1b56.mp4',
 				right_back: 'http://data.qicai321.com/minlong/e0ca45e2-af3e-42a0-9dd1-4de545e9c720.mp4',
 				right_fist: 'http://data.qicai321.com/minlong/77028dd6-22bb-41b4-8879-19699e8b1dbb.mp4'
-			}
+			},
+			isVideoLoading: true,
+			videoError: false,
+			videoErrorMsg: '',
+			videoContext: null
 		}
 	},
 	computed: {
@@ -246,6 +258,33 @@ export default {
 				title: '拍照失败,请重试',
 				icon: 'none'
 			});
+		},
+		handleVideoError(e) {
+			console.error('视频加载错误:', e);
+			this.videoError = true;
+			this.videoErrorMsg = '视频加载失败,请检查网络';
+			this.isVideoLoading = false;
+			
+			// 尝试重新加载视频
+			if (this.videoContext) {
+				setTimeout(() => {
+					this.videoContext.play();
+				}, 1000);
+			}
+		},
+		handleVideoLoaded() {
+			this.isVideoLoading = false;
+			this.videoError = false;
+			this.videoErrorMsg = '';
+		},
+		initVideoContext() {
+			// 初始化视频上下文
+			if (!this.videoContext) {
+				this.videoContext = uni.createVideoContext('mpVideo', this);
+			}
+		},
+		onShow() {
+			this.initVideoContext();
 		}
 	}
 }
@@ -420,4 +459,25 @@ export default {
 .step-item.completed {
 	color: #67c23a;
 }
+
+.video-loading, .video-error {
+	position: absolute;
+	top: 0;
+	left: 0;
+	width: 100%;
+	height: 100%;
+	display: flex;
+	justify-content: center;
+	align-items: center;
+	background: rgba(0, 0, 0, 0.5);
+}
+
+.video-loading text, .video-error text {
+	color: #fff;
+	font-size: 24rpx;
+}
+
+.video-error text {
+	color: #ff4d4f;
+}
 </style> 

+ 4 - 0
pages/my/my.vue

@@ -69,6 +69,7 @@ export default {
 			},
 			menuItems: [
 				{ title: '个人资料', icon: 'icon-user', action: 'profile' },
+				{ title:'上传简历',icon:'',action:'uploadResume'},
 				// { title: '我的订单', icon: 'icon-order', action: 'orders' },
 				// { title: '我的收藏', icon: 'icon-star', action: 'favorites' },
 				{ title: '设置', icon: 'icon-settings', action: 'settings' },
@@ -662,6 +663,9 @@ export default {
 				case 'help':
 					uni.navigateTo({ url: '/pages/help/help' });
 					break;
+				case 'uploadResume':
+					uni.navigateTo({url:'/pages/uploadResume/uploadResume'})
+					break;
 				default:
 					uni.showToast({
 						title: `点击了${item.title}`,

+ 278 - 39
pages/uploadResume/uploadResume.vue

@@ -9,9 +9,24 @@
 		</view>
 		
 		<!-- 上传按钮 -->
-		<button class="upload-btn" @click="chooseFile">
-			选择并上传文件
+		<button class="upload-btn" @click="chooseFile" :disabled="!!uploadedFile">
+			{{uploadedFile ? '已上传文件' : '选择并上传文件'}}
 		</button>
+
+		<!-- 文件信息显示区域 -->
+		<view class="file-info" v-if="uploadedFile">
+			<view class="file-info-header">
+				<view class="file-info-title">已上传文件</view>
+				<view class="file-delete" @click="clearFile">
+					<image class="delete-icon" src="https://data.qicai321.com/minlong/delete.png" mode="aspectFit"></image>
+				</view>
+			</view>
+			<view class="file-info-content">
+				<view class="file-name">{{uploadedFile.name}}</view>
+				<view class="file-size">{{formatFileSize(uploadedFile.size)}}</view>
+				<view class="file-time">上传时间:{{uploadedFile.uploadTime}}</view>
+			</view>
+		</view>
 		
 		<!-- 使用说明区域 -->
 		<view class="instructions">
@@ -31,15 +46,98 @@
 </template>
 
 <script>
+	import { apiBaseUrl } from '@/common/config.js';
+	
 	export default {
 		data() {
 			return {
 				fileType: ['pdf', 'doc', 'docx'],
-				maxSize: 30 * 1024 * 1024 // 30MB in bytes
+				maxSize: 30 * 1024 * 1024, // 30MB in bytes
+				uploadedFile: null
 			}
 		},
 		methods: {
+			// 调用简历解析接口
+			/* async parseResume(fileUrl) {
+				try {
+					const userInfo = JSON.parse(uni.getStorageSync('userInfo') || '{}');
+					const userId = userInfo.id;
+					const openid = userInfo.openid;
+					const tenant_id = userInfo.tenant_id;
+					
+					if (!userId) {
+						uni.showToast({
+							title: '用户信息不完整,请重新登录',
+							icon: 'none'
+						});
+						return false;
+					}
+					
+					const response = await uni.request({
+						url: `${apiBaseUrl}/api/system/resume-parsing-tasks/upload_resume/`,
+						method: 'POST',
+						data: {
+							openid: openid,
+							tenant_id: tenant_id,
+							user_id: userId,
+							file: fileUrl,
+							description: '候选人简历'
+						},
+						header: {
+							'content-type': 'application/json'
+						}
+					});
+					
+					if (response.statusCode === 200 && response.data.code === 2000) {
+						return true;
+					} else {
+						throw new Error(response.data.msg || '简历解析失败');
+					}
+				} catch (error) {
+					console.error('简历解析失败:', error);
+					uni.showToast({
+						title: error.message || '简历解析失败',
+						icon: 'none'
+					});
+					return false;
+				}
+			}, */
+			
+			clearFile() {
+				uni.showModal({
+					title: '提示',
+					content: '确定要删除已上传的文件吗?',
+					success: (res) => {
+						if (res.confirm) {
+							this.uploadedFile = null;
+							uni.showToast({
+								title: '文件已删除',
+								icon: 'success'
+							});
+						}
+					}
+				});
+			},
+			
+			formatFileSize(size) {
+				if (size < 1024) {
+					return size + 'B';
+				} else if (size < 1024 * 1024) {
+					return (size / 1024).toFixed(2) + 'KB';
+				} else {
+					return (size / (1024 * 1024)).toFixed(2) + 'MB';
+				}
+			},
+			
 			chooseFile() {
+				if (this.uploadedFile) {
+					uni.showToast({
+						title: '请先删除已上传的文件',
+						icon: 'none'
+					});
+					return;
+				}
+				
 				// #ifdef H5
 				uni.chooseFile({
 					count: 1,
@@ -77,32 +175,118 @@
 				// #endif
 			},
 			
-			uploadFile(file) {
-				uni.showLoading({
-					title: '上传中...'
-				})
-				
-				// 这里替换为实际的上传接口
-				uni.uploadFile({
-					url: 'YOUR_UPLOAD_API_URL',
-					filePath: file.path,
-					name: 'file',
-					success: (res) => {
+			async uploadFile(file) {
+				try {
+					uni.showLoading({
+						title: '上传中...'
+					});
+					
+					// 获取用户信息
+					const userInfo = JSON.parse(uni.getStorageSync('userInfo') || '{}');
+					console.log(userInfo);
+					const openid = userInfo.openid || '';
+					const tenant_id = userInfo.tenant_id || 1;
+					const userId = userInfo.id;
+					
+					console.log(openid, tenant_id);
+					if (!openid || !tenant_id || !userId) {
+						uni.hideLoading();
 						uni.showToast({
-							title: '上传成功',
-							icon: 'success'
-						})
-					},
-					fail: (err) => {
-						uni.showToast({
-							title: '上传失败',
+							title: '用户信息不完整,请重新登录',
 							icon: 'none'
-						})
-					},
-					complete: () => {
-						uni.hideLoading()
+						});
+						return;
 					}
-				})
+					
+					// 直接上传到简历解析接口
+					uni.uploadFile({
+						url: `${apiBaseUrl}/api/system/resume-parsing-tasks/upload_resume/`,
+						filePath: file.path,
+						name: 'file',
+						formData: {
+							openid: openid,
+							tenant_id: tenant_id,
+							user_id: userId,
+							description: '候选人简历'
+						},
+						success: (uploadRes) => {
+							try {
+								const res = JSON.parse(uploadRes.data);
+								console.log(res);
+								if (res.code === 2000) {
+									// 保存上传文件信息
+									this.uploadedFile = {
+										name: file.name || '未命名文件',
+										size: file.size,
+										uploadTime: new Date().toLocaleString(),
+										url: res.data.url || ''
+									};
+									
+									// 显示上传成功提示
+									uni.showToast({
+										title: '上传成功',
+										icon: 'success',
+										duration: 2000
+									});
+									
+									// 显示30秒的loading
+									let seconds = 30;
+									uni.showLoading({
+										title: `正在处理中,请稍候...(${seconds}秒)`,
+										mask: true
+									});
+									
+									const timer = setInterval(() => {
+										seconds--;
+										if (seconds > 0) {
+											uni.showLoading({
+												title: `正在处理中,请稍候...(${seconds}秒)`,
+												mask: true
+											});
+										} else {
+											clearInterval(timer);
+											uni.hideLoading();
+											uni.showToast({
+												title: '处理完成',
+												icon: 'success'
+											});
+										}
+									}, 1000);
+									
+								} else {
+									uni.showToast({
+										title: res.msg || '上传失败',
+										icon: 'none'
+									});
+								}
+							} catch (error) {
+								uni.showToast({
+									title: '上传失败',
+									icon: 'none'
+								});
+							}
+						},
+						fail: (err) => {
+							console.error('上传失败:', err);
+							uni.showToast({
+								title: '网络错误,请重试',
+								icon: 'none'
+							});
+						},
+						complete: () => {
+							// 注意:这里不隐藏loading,因为成功后会显示30秒的loading
+							if (!this.uploadedFile) {
+								uni.hideLoading();
+							}
+						}
+					});
+				} catch (error) {
+					uni.hideLoading();
+					uni.showToast({
+						title: '系统错误,请重试',
+						icon: 'none'
+					});
+				}
 			}
 		}
 	}
@@ -113,6 +297,7 @@
 	padding: 30rpx;
 	background-color: #f5f6fa;
 	min-height: 100vh;
+	
 	.header-notice{
 		display: flex;
 		align-items: center;
@@ -127,7 +312,6 @@
 		text-align: center;
 		margin: 40rpx auto;
 		padding: 20rpx;
-		
 		border-radius: 12rpx;
 		
 		image {
@@ -136,19 +320,53 @@
 		}
 	}
 	
-	.upload-btn {
+	.file-info {
+		background-color: #ffffff;
+		border-radius: 12rpx;
+		padding: 30rpx;
+		margin: 30rpx auto;
 		width: 90%;
-		height: 88rpx;
-		line-height: 88rpx;
-		background-color: #2b4acb;
-		color: #ffffff;
-		border-radius: 8rpx;
-		font-size: 32rpx;
-		margin: 60rpx auto;
-		text-align: center;
-		
-		&::after {
-			border: none;
+		box-shadow: 0 2rpx 12rpx rgba(0, 0, 0, 0.05);
+
+		.file-info-header {
+			display: flex;
+			justify-content: space-between;
+			align-items: center;
+			margin-bottom: 20rpx;
+		}
+
+		.file-info-title {
+			font-size: 28rpx;
+			color: #333;
+			font-weight: bold;
+		}
+
+		.file-delete {
+			padding: 10rpx;
+			.delete-icon {
+				width: 32rpx;
+				height: 32rpx;
+			}
+		}
+
+		.file-info-content {
+			.file-name {
+				font-size: 26rpx;
+				color: #666;
+				margin-bottom: 10rpx;
+				word-break: break-all;
+			}
+
+			.file-size {
+				font-size: 24rpx;
+				color: #999;
+				margin-bottom: 10rpx;
+			}
+
+			.file-time {
+				font-size: 24rpx;
+				color: #999;
+			}
 		}
 	}
 	
@@ -177,5 +395,26 @@
 			line-height: 1.5;
 		}
 	}
+	
+	.upload-btn {
+		width: 90%;
+		height: 88rpx;
+		line-height: 88rpx;
+		background-color: #2b4acb;
+		color: #ffffff;
+		border-radius: 8rpx;
+		font-size: 32rpx;
+		margin: 60rpx auto;
+		text-align: center;
+		
+		&::after {
+			border: none;
+		}
+
+		&[disabled] {
+			background-color: #cccccc;
+			color: #ffffff;
+		}
+	}
 }
 </style>

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

@@ -1,3 +1,3 @@
 "use strict";
-const apiBaseUrl = "https://backend.qicai321.com";
+const apiBaseUrl = "http://192.168.100.101:8083";
 exports.apiBaseUrl = apiBaseUrl;

+ 190 - 208
unpackage/dist/dev/mp-weixin/pages/Personal/Personal.js

@@ -111,7 +111,9 @@ const _sfc_main = {
         weight: "",
         expectedSalary: "",
         skills: "",
-        training: ""
+        training: "",
+        threePeriod: ""
+        // 添加这一行
       },
       // Add loading state
       isLoading: true,
@@ -262,14 +264,6 @@ const _sfc_main = {
         this.familyMemberErrors.name = "请输入姓名";
         isValid = false;
       }
-      if (!this.familyMemberForm.workplaceOrAddress) {
-        this.familyMemberErrors.workplaceOrAddress = "请输入工作单位/家庭地址";
-        isValid = false;
-      }
-      if (!this.familyMemberForm.position) {
-        this.familyMemberErrors.position = "请输入职务";
-        isValid = false;
-      }
       if (!this.familyMemberForm.phone) {
         this.familyMemberErrors.phone = "请输入联系电话";
         isValid = false;
@@ -868,7 +862,7 @@ const _sfc_main = {
         data: {
           openid: JSON.parse(common_vendor.index.getStorageSync("userInfo")).openid,
           name: data.name,
-          id_number: data.idCard,
+          id_card: data.idCard,
           purePhoneNumber: data.phone,
           tenant_id: 1,
           examine: 0
@@ -966,12 +960,6 @@ const _sfc_main = {
           }
           break;
       }
-      if (!isValid) {
-        common_vendor.index.showToast({
-          title: "请完善所有必填信息",
-          icon: "none"
-        });
-      }
       return isValid;
     },
     // Add method to fetch user data
@@ -1197,14 +1185,12 @@ const _sfc_main = {
       if (newVal)
         this.familyMemberErrors.phone = "";
     },
-    "familyMemberForm.workplaceOrAddress": function(newVal) {
-      if (newVal)
-        this.familyMemberErrors.workplaceOrAddress = "";
-    },
-    "familyMemberForm.position": function(newVal) {
-      if (newVal)
-        this.familyMemberErrors.position = "";
+    /* 'familyMemberForm.workplaceOrAddress': function(newVal) {
+    	if (newVal) this.familyMemberErrors.workplaceOrAddress = '';
     },
+    'familyMemberForm.position': function(newVal) {
+    	if (newVal) this.familyMemberErrors.position = '';
+    }, */
     "workForm.companyName": function(newVal) {
       if (newVal && this.workErrors.companyName) {
         this.workErrors.companyName = "";
@@ -1314,60 +1300,64 @@ function _sfc_render(_ctx, _cache, $props, $setup, $data, $options) {
     s: common_vendor.t($data.formErrors.gender)
   } : {}, {
     t: $data.formData.gender === "女"
-  }, $data.formData.gender === "女" ? {
+  }, $data.formData.gender === "女" ? common_vendor.e({
     v: common_vendor.t($data.threePeriodOptions[$data.threePeriodIndex] || "请选择"),
     w: common_vendor.o((...args) => $options.bindThreePeriodChange && $options.bindThreePeriodChange(...args)),
     x: $data.threePeriodIndex,
-    y: $data.threePeriodOptions
-  } : {}, {
-    z: $data.formErrors.phone ? 1 : "",
-    A: $data.formData.phone,
-    B: common_vendor.o(($event) => $data.formData.phone = $event.detail.value),
-    C: $data.formErrors.phone
+    y: $data.threePeriodOptions,
+    z: $data.formErrors.threePeriod ? 1 : "",
+    A: $data.formErrors.threePeriod
+  }, $data.formErrors.threePeriod ? {
+    B: common_vendor.t($data.formErrors.threePeriod)
+  } : {}) : {}, {
+    C: $data.formErrors.phone ? 1 : "",
+    D: $data.formData.phone,
+    E: common_vendor.o(($event) => $data.formData.phone = $event.detail.value),
+    F: $data.formErrors.phone
   }, $data.formErrors.phone ? {
-    D: common_vendor.t($data.formErrors.phone)
+    G: common_vendor.t($data.formErrors.phone)
   } : {}, {
-    E: $data.formErrors.idCard ? 1 : "",
-    F: $data.formData.idCard,
-    G: common_vendor.o(($event) => $data.formData.idCard = $event.detail.value),
-    H: $data.formErrors.idCard
+    H: $data.formErrors.idCard ? 1 : "",
+    I: $data.formData.idCard,
+    J: common_vendor.o(($event) => $data.formData.idCard = $event.detail.value),
+    K: $data.formErrors.idCard
   }, $data.formErrors.idCard ? {
-    I: common_vendor.t($data.formErrors.idCard)
+    L: common_vendor.t($data.formErrors.idCard)
   } : {}, {
-    J: common_vendor.t($data.ethnicOptions[$data.ethnicIndex] || "请选择民族"),
-    K: $data.formErrors.ethnic ? 1 : "",
-    L: common_vendor.o((...args) => $options.bindEthnicChange && $options.bindEthnicChange(...args)),
-    M: $data.ethnicIndex,
-    N: $data.ethnicOptions,
-    O: $data.formErrors.ethnic
+    M: common_vendor.t($data.ethnicOptions[$data.ethnicIndex] || "请选择民族"),
+    N: $data.formErrors.ethnic ? 1 : "",
+    O: common_vendor.o((...args) => $options.bindEthnicChange && $options.bindEthnicChange(...args)),
+    P: $data.ethnicIndex,
+    Q: $data.ethnicOptions,
+    R: $data.formErrors.ethnic
   }, $data.formErrors.ethnic ? {
-    P: common_vendor.t($data.formErrors.ethnic)
+    S: common_vendor.t($data.formErrors.ethnic)
   } : {}, {
-    Q: $data.formData.height,
-    R: common_vendor.o(($event) => $data.formData.height = $event.detail.value),
-    S: $data.formData.weight,
-    T: common_vendor.o(($event) => $data.formData.weight = $event.detail.value),
-    U: $data.formErrors.currentAddress ? 1 : "",
-    V: $data.formData.currentAddress,
-    W: common_vendor.o(($event) => $data.formData.currentAddress = $event.detail.value),
-    X: $data.formErrors.currentAddress
+    T: $data.formData.height,
+    U: common_vendor.o(($event) => $data.formData.height = $event.detail.value),
+    V: $data.formData.weight,
+    W: common_vendor.o(($event) => $data.formData.weight = $event.detail.value),
+    X: $data.formErrors.currentAddress ? 1 : "",
+    Y: $data.formData.currentAddress,
+    Z: common_vendor.o(($event) => $data.formData.currentAddress = $event.detail.value),
+    aa: $data.formErrors.currentAddress
   }, $data.formErrors.currentAddress ? {
-    Y: common_vendor.t($data.formErrors.currentAddress)
+    ab: common_vendor.t($data.formErrors.currentAddress)
   } : {}, {
-    Z: $data.formData.residence,
-    aa: common_vendor.o(($event) => $data.formData.residence = $event.detail.value),
-    ab: common_vendor.t($data.marriageOptions[$data.marriageIndex] || "请选择婚育状况"),
-    ac: common_vendor.o((...args) => $options.bindMarriageChange && $options.bindMarriageChange(...args)),
-    ad: $data.marriageIndex,
-    ae: $data.marriageOptions,
-    af: $data.formData.expectedSalary,
-    ag: common_vendor.o(($event) => $data.formData.expectedSalary = $event.detail.value)
+    ac: $data.formData.residence,
+    ad: common_vendor.o(($event) => $data.formData.residence = $event.detail.value),
+    ae: common_vendor.t($data.marriageOptions[$data.marriageIndex] || "请选择婚育状况"),
+    af: common_vendor.o((...args) => $options.bindMarriageChange && $options.bindMarriageChange(...args)),
+    ag: $data.marriageIndex,
+    ah: $data.marriageOptions,
+    ai: $data.formData.expectedSalary,
+    aj: common_vendor.o(($event) => $data.formData.expectedSalary = $event.detail.value)
   }) : {}, {
-    ah: $data.currentStep === 3
+    ak: $data.currentStep === 3
   }, $data.currentStep === 3 ? common_vendor.e({
-    ai: $data.familyMembers.length > 0
+    al: $data.familyMembers.length > 0
   }, $data.familyMembers.length > 0 ? {
-    aj: common_vendor.f($data.familyMembers, (member, index, i0) => {
+    am: common_vendor.f($data.familyMembers, (member, index, i0) => {
       return {
         a: common_vendor.t(index + 1),
         b: common_vendor.o(($event) => $options.editFamilyMember(index), index),
@@ -1382,55 +1372,47 @@ function _sfc_render(_ctx, _cache, $props, $setup, $data, $options) {
       };
     })
   } : {}, {
-    ak: common_vendor.t($data.isEditing ? "编辑家庭成员" : "添加家庭成员"),
-    al: $data.isEditing
+    an: common_vendor.t($data.isEditing ? "编辑家庭成员" : "添加家庭成员"),
+    ao: $data.isEditing
   }, $data.isEditing ? {
-    am: common_vendor.o((...args) => $options.cancelEdit && $options.cancelEdit(...args))
+    ap: common_vendor.o((...args) => $options.cancelEdit && $options.cancelEdit(...args))
   } : {}, {
-    an: $data.familyMemberErrors.relation ? 1 : "",
-    ao: $data.familyMemberForm.relation,
-    ap: common_vendor.o(($event) => $data.familyMemberForm.relation = $event.detail.value),
-    aq: $data.familyMemberErrors.relation
+    aq: $data.familyMemberErrors.relation ? 1 : "",
+    ar: $data.familyMemberForm.relation,
+    as: common_vendor.o(($event) => $data.familyMemberForm.relation = $event.detail.value),
+    at: $data.familyMemberErrors.relation
   }, $data.familyMemberErrors.relation ? {
-    ar: common_vendor.t($data.familyMemberErrors.relation)
+    av: common_vendor.t($data.familyMemberErrors.relation)
   } : {}, {
-    as: $data.familyMemberErrors.name ? 1 : "",
-    at: $data.familyMemberForm.name,
-    av: common_vendor.o(($event) => $data.familyMemberForm.name = $event.detail.value),
-    aw: $data.familyMemberErrors.name
+    aw: $data.familyMemberErrors.name ? 1 : "",
+    ax: $data.familyMemberForm.name,
+    ay: common_vendor.o(($event) => $data.familyMemberForm.name = $event.detail.value),
+    az: $data.familyMemberErrors.name
   }, $data.familyMemberErrors.name ? {
-    ax: common_vendor.t($data.familyMemberErrors.name)
-  } : {}, {
-    ay: $data.familyMemberForm.workplaceOrAddress,
-    az: common_vendor.o(($event) => $data.familyMemberForm.workplaceOrAddress = $event.detail.value),
-    aA: $data.familyMemberErrors.workplaceOrAddress
-  }, $data.familyMemberErrors.workplaceOrAddress ? {
-    aB: common_vendor.t($data.familyMemberErrors.workplaceOrAddress)
-  } : {}, {
-    aC: $data.familyMemberForm.position,
-    aD: common_vendor.o(($event) => $data.familyMemberForm.position = $event.detail.value),
-    aE: $data.familyMemberErrors.position
-  }, $data.familyMemberErrors.position ? {
-    aF: common_vendor.t($data.familyMemberErrors.position)
+    aA: common_vendor.t($data.familyMemberErrors.name)
   } : {}, {
-    aG: $data.familyMemberErrors.phone ? 1 : "",
-    aH: $data.familyMemberForm.phone,
-    aI: common_vendor.o(($event) => $data.familyMemberForm.phone = $event.detail.value),
-    aJ: $data.familyMemberErrors.phone
+    aB: $data.familyMemberForm.workplaceOrAddress,
+    aC: common_vendor.o(($event) => $data.familyMemberForm.workplaceOrAddress = $event.detail.value),
+    aD: $data.familyMemberForm.position,
+    aE: common_vendor.o(($event) => $data.familyMemberForm.position = $event.detail.value),
+    aF: $data.familyMemberErrors.phone ? 1 : "",
+    aG: $data.familyMemberForm.phone,
+    aH: common_vendor.o(($event) => $data.familyMemberForm.phone = $event.detail.value),
+    aI: $data.familyMemberErrors.phone
   }, $data.familyMemberErrors.phone ? {
-    aK: common_vendor.t($data.familyMemberErrors.phone)
+    aJ: common_vendor.t($data.familyMemberErrors.phone)
   } : {}, {
-    aL: $data.familyMemberForm.isEmergencyContact,
-    aM: common_vendor.o((...args) => $options.handleEmergencyContactChange && $options.handleEmergencyContactChange(...args)),
-    aN: common_vendor.t($data.isEditing ? "✓" : "+"),
-    aO: common_vendor.o((...args) => $options.saveFamilyMember && $options.saveFamilyMember(...args)),
-    aP: common_vendor.t($data.isEditing ? "保存修改" : "添加成员")
+    aK: $data.familyMemberForm.isEmergencyContact,
+    aL: common_vendor.o((...args) => $options.handleEmergencyContactChange && $options.handleEmergencyContactChange(...args)),
+    aM: common_vendor.t($data.isEditing ? "✓" : "+"),
+    aN: common_vendor.o((...args) => $options.saveFamilyMember && $options.saveFamilyMember(...args)),
+    aO: common_vendor.t($data.isEditing ? "保存修改" : "添加成员")
   }) : {}, {
-    aQ: $data.currentStep === 5
+    aP: $data.currentStep === 5
   }, $data.currentStep === 5 ? common_vendor.e({
-    aR: $data.educationList.length > 0
+    aQ: $data.educationList.length > 0
   }, $data.educationList.length > 0 ? {
-    aS: common_vendor.f($data.educationList, (edu, index, i0) => {
+    aR: common_vendor.f($data.educationList, (edu, index, i0) => {
       return {
         a: common_vendor.t(index === 0 ? "第一学历" : "最高学历"),
         b: common_vendor.o(($event) => $options.editEducation(index), index),
@@ -1444,77 +1426,77 @@ function _sfc_render(_ctx, _cache, $props, $setup, $data, $options) {
       };
     })
   } : {}, {
-    aT: $data.educationList.length < 2 || $data.isEditingEducation
+    aS: $data.educationList.length < 2 || $data.isEditingEducation
   }, $data.educationList.length < 2 || $data.isEditingEducation ? common_vendor.e({
-    aU: common_vendor.t($data.isEditingEducation ? "编辑教育经历" : $data.educationList.length === 0 ? "添加第一学历" : "添加最高学历"),
-    aV: $data.isEditingEducation
+    aT: common_vendor.t($data.isEditingEducation ? "编辑教育经历" : $data.educationList.length === 0 ? "添加第一学历" : "添加最高学历"),
+    aU: $data.isEditingEducation
   }, $data.isEditingEducation ? {
-    aW: common_vendor.o((...args) => $options.cancelEditEducation && $options.cancelEditEducation(...args))
+    aV: common_vendor.o((...args) => $options.cancelEditEducation && $options.cancelEditEducation(...args))
   } : {}, {
-    aX: common_vendor.t($data.educationForm.startTime || "开始时间"),
-    aY: $data.educationForm.startTime,
-    aZ: common_vendor.o((...args) => $options.bindStartTimeChange && $options.bindStartTimeChange(...args)),
-    ba: $data.educationErrors.startTime ? 1 : "",
-    bb: common_vendor.t($data.educationForm.endTime || "结束时间"),
-    bc: $data.educationForm.endTime,
-    bd: common_vendor.o((...args) => $options.bindEndTimeChange && $options.bindEndTimeChange(...args)),
-    be: $data.educationErrors.endTime ? 1 : "",
-    bf: $data.educationErrors.startTime
+    aW: common_vendor.t($data.educationForm.startTime || "开始时间"),
+    aX: $data.educationForm.startTime,
+    aY: common_vendor.o((...args) => $options.bindStartTimeChange && $options.bindStartTimeChange(...args)),
+    aZ: $data.educationErrors.startTime ? 1 : "",
+    ba: common_vendor.t($data.educationForm.endTime || "结束时间"),
+    bb: $data.educationForm.endTime,
+    bc: common_vendor.o((...args) => $options.bindEndTimeChange && $options.bindEndTimeChange(...args)),
+    bd: $data.educationErrors.endTime ? 1 : "",
+    be: $data.educationErrors.startTime
   }, $data.educationErrors.startTime ? {
-    bg: common_vendor.t($data.educationErrors.startTime)
+    bf: common_vendor.t($data.educationErrors.startTime)
   } : {}, {
-    bh: $data.educationErrors.endTime
+    bg: $data.educationErrors.endTime
   }, $data.educationErrors.endTime ? {
-    bi: common_vendor.t($data.educationErrors.endTime)
+    bh: common_vendor.t($data.educationErrors.endTime)
   } : {}, {
-    bj: $data.educationErrors.schoolName ? 1 : "",
-    bk: $data.educationForm.schoolName,
-    bl: common_vendor.o(($event) => $data.educationForm.schoolName = $event.detail.value),
-    bm: $data.educationErrors.schoolName
+    bi: $data.educationErrors.schoolName ? 1 : "",
+    bj: $data.educationForm.schoolName,
+    bk: common_vendor.o(($event) => $data.educationForm.schoolName = $event.detail.value),
+    bl: $data.educationErrors.schoolName
   }, $data.educationErrors.schoolName ? {
-    bn: common_vendor.t($data.educationErrors.schoolName)
+    bm: common_vendor.t($data.educationErrors.schoolName)
   } : {}, {
-    bo: $data.educationErrors.major ? 1 : "",
-    bp: $data.educationForm.major,
-    bq: common_vendor.o(($event) => $data.educationForm.major = $event.detail.value),
-    br: $data.educationErrors.major
+    bn: $data.educationErrors.major ? 1 : "",
+    bo: $data.educationForm.major,
+    bp: common_vendor.o(($event) => $data.educationForm.major = $event.detail.value),
+    bq: $data.educationErrors.major
   }, $data.educationErrors.major ? {
-    bs: common_vendor.t($data.educationErrors.major)
+    br: common_vendor.t($data.educationErrors.major)
   } : {}, {
-    bt: common_vendor.t($data.degreeOptions[$data.degreeIndex] || "请选择学历"),
-    bv: common_vendor.o((...args) => $options.bindDegreeChange && $options.bindDegreeChange(...args)),
-    bw: $data.degreeIndex,
-    bx: $data.degreeOptions,
-    by: $data.educationErrors.degree ? 1 : "",
-    bz: $data.educationErrors.degree
+    bs: common_vendor.t($data.degreeOptions[$data.degreeIndex] || "请选择学历"),
+    bt: common_vendor.o((...args) => $options.bindDegreeChange && $options.bindDegreeChange(...args)),
+    bv: $data.degreeIndex,
+    bw: $data.degreeOptions,
+    bx: $data.educationErrors.degree ? 1 : "",
+    by: $data.educationErrors.degree
   }, $data.educationErrors.degree ? {
-    bA: common_vendor.t($data.educationErrors.degree)
+    bz: common_vendor.t($data.educationErrors.degree)
   } : {}, {
-    bB: common_vendor.t($data.isEditingEducation ? "✓" : "+"),
-    bC: common_vendor.o((...args) => $options.saveEducation && $options.saveEducation(...args)),
-    bD: common_vendor.t($data.isEditingEducation ? "保存修改" : "添加学历")
+    bA: common_vendor.t($data.isEditingEducation ? "✓" : "+"),
+    bB: common_vendor.o((...args) => $options.saveEducation && $options.saveEducation(...args)),
+    bC: common_vendor.t($data.isEditingEducation ? "保存修改" : "添加学历")
   }) : {}) : {}, {
-    bE: $data.currentStep === 6
+    bD: $data.currentStep === 6
   }, $data.currentStep === 6 ? common_vendor.e({
-    bF: $data.formErrors.skills ? 1 : "",
-    bG: $data.formData.skills,
-    bH: common_vendor.o(($event) => $data.formData.skills = $event.detail.value),
-    bI: $data.formErrors.skills
+    bE: $data.formErrors.skills ? 1 : "",
+    bF: $data.formData.skills,
+    bG: common_vendor.o(($event) => $data.formData.skills = $event.detail.value),
+    bH: $data.formErrors.skills
   }, $data.formErrors.skills ? {
-    bJ: common_vendor.t($data.formErrors.skills)
+    bI: common_vendor.t($data.formErrors.skills)
   } : {}, {
-    bK: $data.formErrors.training ? 1 : "",
-    bL: $data.formData.training,
-    bM: common_vendor.o(($event) => $data.formData.training = $event.detail.value),
-    bN: $data.formErrors.training
+    bJ: $data.formErrors.training ? 1 : "",
+    bK: $data.formData.training,
+    bL: common_vendor.o(($event) => $data.formData.training = $event.detail.value),
+    bM: $data.formErrors.training
   }, $data.formErrors.training ? {
-    bO: common_vendor.t($data.formErrors.training)
+    bN: common_vendor.t($data.formErrors.training)
   } : {}) : {}, {
-    bP: $data.currentStep === 8
+    bO: $data.currentStep === 8
   }, $data.currentStep === 8 ? common_vendor.e({
-    bQ: $data.workList.length > 0
+    bP: $data.workList.length > 0
   }, $data.workList.length > 0 ? {
-    bR: common_vendor.f($data.workList, (work, index, i0) => {
+    bQ: common_vendor.f($data.workList, (work, index, i0) => {
       return {
         a: common_vendor.t(index + 1),
         b: common_vendor.o(($event) => $options.editWork(index), index),
@@ -1532,90 +1514,90 @@ function _sfc_render(_ctx, _cache, $props, $setup, $data, $options) {
       };
     })
   } : {}, {
-    bS: $data.workList.length < 2 || $data.isEditingWork
+    bR: $data.workList.length < 2 || $data.isEditingWork
   }, $data.workList.length < 2 || $data.isEditingWork ? common_vendor.e({
-    bT: common_vendor.t($data.isEditingWork ? "编辑工作经历" : "添加工作经历"),
-    bU: $data.isEditingWork
+    bS: common_vendor.t($data.isEditingWork ? "编辑工作经历" : "添加工作经历"),
+    bT: $data.isEditingWork
   }, $data.isEditingWork ? {
-    bV: common_vendor.o((...args) => $options.cancelEditWork && $options.cancelEditWork(...args))
+    bU: common_vendor.o((...args) => $options.cancelEditWork && $options.cancelEditWork(...args))
   } : {}, {
-    bW: common_vendor.t($data.workForm.startTime || "开始时间"),
-    bX: $data.workForm.startTime,
-    bY: common_vendor.o((...args) => $options.bindWorkStartTimeChange && $options.bindWorkStartTimeChange(...args)),
-    bZ: $data.workErrors.startTime ? 1 : "",
-    ca: common_vendor.t($data.workForm.endTime || "结束时间"),
-    cb: $data.workForm.endTime,
-    cc: common_vendor.o((...args) => $options.bindWorkEndTimeChange && $options.bindWorkEndTimeChange(...args)),
-    cd: $data.workErrors.endTime ? 1 : "",
-    ce: $data.workErrors.startTime
+    bV: common_vendor.t($data.workForm.startTime || "开始时间"),
+    bW: $data.workForm.startTime,
+    bX: common_vendor.o((...args) => $options.bindWorkStartTimeChange && $options.bindWorkStartTimeChange(...args)),
+    bY: $data.workErrors.startTime ? 1 : "",
+    bZ: common_vendor.t($data.workForm.endTime || "结束时间"),
+    ca: $data.workForm.endTime,
+    cb: common_vendor.o((...args) => $options.bindWorkEndTimeChange && $options.bindWorkEndTimeChange(...args)),
+    cc: $data.workErrors.endTime ? 1 : "",
+    cd: $data.workErrors.startTime
   }, $data.workErrors.startTime ? {
-    cf: common_vendor.t($data.workErrors.startTime)
+    ce: common_vendor.t($data.workErrors.startTime)
   } : {}, {
-    cg: $data.workErrors.endTime
+    cf: $data.workErrors.endTime
   }, $data.workErrors.endTime ? {
-    ch: common_vendor.t($data.workErrors.endTime)
+    cg: common_vendor.t($data.workErrors.endTime)
   } : {}, {
-    ci: $data.workErrors.companyName ? 1 : "",
-    cj: $data.workForm.companyName,
-    ck: common_vendor.o(($event) => $data.workForm.companyName = $event.detail.value),
-    cl: $data.workErrors.companyName
+    ch: $data.workErrors.companyName ? 1 : "",
+    ci: $data.workForm.companyName,
+    cj: common_vendor.o(($event) => $data.workForm.companyName = $event.detail.value),
+    ck: $data.workErrors.companyName
   }, $data.workErrors.companyName ? {
-    cm: common_vendor.t($data.workErrors.companyName)
+    cl: common_vendor.t($data.workErrors.companyName)
   } : {}, {
-    cn: $data.workErrors.employeeCount ? 1 : "",
-    co: $data.workForm.employeeCount,
-    cp: common_vendor.o(($event) => $data.workForm.employeeCount = $event.detail.value),
-    cq: $data.workErrors.employeeCount
+    cm: $data.workErrors.employeeCount ? 1 : "",
+    cn: $data.workForm.employeeCount,
+    co: common_vendor.o(($event) => $data.workForm.employeeCount = $event.detail.value),
+    cp: $data.workErrors.employeeCount
   }, $data.workErrors.employeeCount ? {
-    cr: common_vendor.t($data.workErrors.employeeCount)
+    cq: common_vendor.t($data.workErrors.employeeCount)
   } : {}, {
-    cs: $data.workErrors.department ? 1 : "",
-    ct: $data.workForm.department,
-    cv: common_vendor.o(($event) => $data.workForm.department = $event.detail.value),
-    cw: $data.workErrors.department
+    cr: $data.workErrors.department ? 1 : "",
+    cs: $data.workForm.department,
+    ct: common_vendor.o(($event) => $data.workForm.department = $event.detail.value),
+    cv: $data.workErrors.department
   }, $data.workErrors.department ? {
-    cx: common_vendor.t($data.workErrors.department)
+    cw: common_vendor.t($data.workErrors.department)
   } : {}, {
-    cy: $data.workErrors.position ? 1 : "",
-    cz: $data.workForm.position,
-    cA: common_vendor.o(($event) => $data.workForm.position = $event.detail.value),
-    cB: $data.workErrors.position
+    cx: $data.workErrors.position ? 1 : "",
+    cy: $data.workForm.position,
+    cz: common_vendor.o(($event) => $data.workForm.position = $event.detail.value),
+    cA: $data.workErrors.position
   }, $data.workErrors.position ? {
-    cC: common_vendor.t($data.workErrors.position)
+    cB: common_vendor.t($data.workErrors.position)
   } : {}, {
-    cD: $data.workForm.monthlySalary,
-    cE: common_vendor.o(($event) => $data.workForm.monthlySalary = $event.detail.value),
-    cF: $data.workErrors.monthlySalary
+    cC: $data.workForm.monthlySalary,
+    cD: common_vendor.o(($event) => $data.workForm.monthlySalary = $event.detail.value),
+    cE: $data.workErrors.monthlySalary
   }, $data.workErrors.monthlySalary ? {
-    cG: common_vendor.t($data.workErrors.monthlySalary)
+    cF: common_vendor.t($data.workErrors.monthlySalary)
   } : {}, {
-    cH: $data.workForm.supervisor,
-    cI: common_vendor.o(($event) => $data.workForm.supervisor = $event.detail.value),
-    cJ: $data.workErrors.supervisor
+    cG: $data.workForm.supervisor,
+    cH: common_vendor.o(($event) => $data.workForm.supervisor = $event.detail.value),
+    cI: $data.workErrors.supervisor
   }, $data.workErrors.supervisor ? {
-    cK: common_vendor.t($data.workErrors.supervisor)
+    cJ: common_vendor.t($data.workErrors.supervisor)
   } : {}, {
-    cL: $data.workForm.supervisorPhone,
-    cM: common_vendor.o(($event) => $data.workForm.supervisorPhone = $event.detail.value),
-    cN: $data.workErrors.supervisorPhone
+    cK: $data.workForm.supervisorPhone,
+    cL: common_vendor.o(($event) => $data.workForm.supervisorPhone = $event.detail.value),
+    cM: $data.workErrors.supervisorPhone
   }, $data.workErrors.supervisorPhone ? {
-    cO: common_vendor.t($data.workErrors.supervisorPhone)
+    cN: common_vendor.t($data.workErrors.supervisorPhone)
   } : {}, {
-    cP: common_vendor.t($data.isEditingWork ? "✓" : "+"),
-    cQ: common_vendor.o((...args) => $options.saveWork && $options.saveWork(...args)),
-    cR: common_vendor.t($data.isEditingWork ? "保存修改" : "添加工作经历")
+    cO: common_vendor.t($data.isEditingWork ? "✓" : "+"),
+    cP: common_vendor.o((...args) => $options.saveWork && $options.saveWork(...args)),
+    cQ: common_vendor.t($data.isEditingWork ? "保存修改" : "添加工作经历")
   }) : {}) : {}, {
-    cS: $options.showPrevButton
+    cR: $options.showPrevButton
   }, $options.showPrevButton ? {
-    cT: common_vendor.o((...args) => $options.prevStep && $options.prevStep(...args))
+    cS: common_vendor.o((...args) => $options.prevStep && $options.prevStep(...args))
   } : {}, {
-    cU: $options.showNextButton
+    cT: $options.showNextButton
   }, $options.showNextButton ? {
-    cV: common_vendor.o((...args) => $options.nextStep && $options.nextStep(...args))
+    cU: common_vendor.o((...args) => $options.nextStep && $options.nextStep(...args))
   } : {}, {
-    cW: $options.showSubmitButton
+    cV: $options.showSubmitButton
   }, $options.showSubmitButton ? {
-    cX: common_vendor.o((...args) => $options.submitForm && $options.submitForm(...args))
+    cW: common_vendor.o((...args) => $options.submitForm && $options.submitForm(...args))
   } : {});
 }
 const MiniProgramPage = /* @__PURE__ */ common_vendor._export_sfc(_sfc_main, [["render", _sfc_render]]);

Những thai đổi đã bị hủy bỏ vì nó quá lớn
+ 0 - 0
unpackage/dist/dev/mp-weixin/pages/Personal/Personal.wxml


+ 22 - 3
unpackage/dist/dev/mp-weixin/pages/identity-verify/identity-verify.js

@@ -593,13 +593,15 @@ const _sfc_main = {
         if (this.retryCount < this.maxRetryAttempts) {
           console.log(`显示重新录制按钮 (重试次数: ${this.retryCount + 1}/${this.maxRetryAttempts})`);
           this.showRerecordButton = true;
+          if (this.isFollowUpQuestion && this.currentFollowUpQuestion) {
+            this.currentSubtitle = this.currentFollowUpQuestion.digital_human_video_subtitle || this.currentFollowUpQuestion.question;
+          }
         } else {
           console.log("已达到最大重试次数,继续下一题");
           this.retryCount = 0;
           this.proceedToNextQuestion();
         }
         this.isPlayingLowScoreVideo = false;
-        this.currentSubtitle = "";
         return;
       }
       if (this.isFollowUpQuestion) {
@@ -2106,6 +2108,7 @@ const _sfc_main = {
       this.showRerecordButton = false;
       this.videoUrl = this.lowScoreVideoUrl;
       this.videoPlaying = true;
+      const originalSubtitle = this.currentSubtitle;
       this.currentSubtitle = "";
       this.$nextTick(() => {
         const videoContext = common_vendor.index.createVideoContext("myVideo", this);
@@ -2117,11 +2120,17 @@ const _sfc_main = {
               {
                 startTime: 0,
                 endTime: 30,
-                // 假设视频长度为10秒,可根据实际情况调整
                 text: "我未听清楚您在说什么,请您再说一遍!",
                 translation: "I didn't quite catch what you said, could you please repeat it?"
               }
             ];
+            setTimeout(() => {
+              if (this.isFollowUpQuestion && this.currentFollowUpQuestion) {
+                this.currentSubtitle = this.currentFollowUpQuestion.digital_human_video_subtitle || this.currentFollowUpQuestion.question;
+              } else {
+                this.currentSubtitle = originalSubtitle;
+              }
+            }, 3e3);
           }, 500);
         }
       });
@@ -2208,7 +2217,7 @@ const _sfc_main = {
       console.log("有追问的父问题ID:", Array.from(parentQuestionIds));
       this.hasPlayedFollowUp = {};
     },
-    // 添加新方法:检查并播放追问问题
+    // 修改检查并播放追问问题的方法
     checkAndPlayFollowUpQuestion(parentQuestionId) {
       console.log("检查是否有追问问题,父问题ID:", parentQuestionId);
       if (!parentQuestionId) {
@@ -2227,6 +2236,16 @@ const _sfc_main = {
       );
       if (followUpQuestion) {
         console.log("找到追问问题:", followUpQuestion);
+        const recordingDuration = this.getRecordingDuration();
+        const lowScoreDuration = 7;
+        if (recordingDuration < lowScoreDuration) {
+          console.log(`录制时间 ${recordingDuration} 秒,少于 ${lowScoreDuration} 秒,将播放低分提示视频`);
+          this.retryCount++;
+          this.needPlayLowScoreVideo = true;
+          this.playLowScoreVideo();
+          return;
+        }
+        this.retryCount = 0;
         this.hasPlayedFollowUp[parentQuestionId] = true;
         this.isFollowUpQuestion = true;
         this.currentParentQuestionId = parentQuestionId;

+ 46 - 10
unpackage/dist/dev/mp-weixin/pages/interview_retake/interview_retake.js

@@ -31,7 +31,11 @@ const _sfc_main = {
         right_palm: "http://data.qicai321.com/minlong/ebf6e43f-ffdf-49bb-8b00-adeff9ce1b56.mp4",
         right_back: "http://data.qicai321.com/minlong/e0ca45e2-af3e-42a0-9dd1-4de545e9c720.mp4",
         right_fist: "http://data.qicai321.com/minlong/77028dd6-22bb-41b4-8879-19699e8b1dbb.mp4"
-      }
+      },
+      isVideoLoading: true,
+      videoError: false,
+      videoErrorMsg: "",
+      videoContext: null
     };
   },
   computed: {
@@ -189,25 +193,57 @@ const _sfc_main = {
         title: "拍照失败,请重试",
         icon: "none"
       });
+    },
+    handleVideoError(e) {
+      console.error("视频加载错误:", e);
+      this.videoError = true;
+      this.videoErrorMsg = "视频加载失败,请检查网络";
+      this.isVideoLoading = false;
+      if (this.videoContext) {
+        setTimeout(() => {
+          this.videoContext.play();
+        }, 1e3);
+      }
+    },
+    handleVideoLoaded() {
+      this.isVideoLoading = false;
+      this.videoError = false;
+      this.videoErrorMsg = "";
+    },
+    initVideoContext() {
+      if (!this.videoContext) {
+        this.videoContext = common_vendor.index.createVideoContext("mpVideo", this);
+      }
+    },
+    onShow() {
+      this.initVideoContext();
     }
   }
 };
 function _sfc_render(_ctx, _cache, $props, $setup, $data, $options) {
   return common_vendor.e({
     a: $data.showCamera
-  }, $data.showCamera ? {
+  }, $data.showCamera ? common_vendor.e({
     b: $options.currentStep.tipImage,
     c: common_vendor.t($options.currentStep.tipText),
     d: $options.currentStep.guideVideo,
-    e: common_vendor.s($options.currentStep.type.includes("right_") ? "left:30rpx" : "right:30rpx"),
-    f: common_vendor.o((...args) => $options.handleError && $options.handleError(...args)),
-    g: common_vendor.o((...args) => $options.takePhoto && $options.takePhoto(...args))
-  } : {
-    h: $data.tempImagePath,
-    i: common_vendor.o((...args) => $options.retakePhoto && $options.retakePhoto(...args)),
-    j: common_vendor.o((...args) => $options.confirmPhoto && $options.confirmPhoto(...args))
+    e: common_vendor.o((...args) => $options.handleVideoError && $options.handleVideoError(...args)),
+    f: common_vendor.o((...args) => $options.handleVideoLoaded && $options.handleVideoLoaded(...args)),
+    g: $data.isVideoLoading
+  }, $data.isVideoLoading ? {} : {}, {
+    h: $data.videoError
+  }, $data.videoError ? {
+    i: common_vendor.t($data.videoErrorMsg)
+  } : {}, {
+    j: common_vendor.s($options.currentStep.type.includes("right_") ? "left:30rpx" : "right:30rpx"),
+    k: common_vendor.o((...args) => $options.handleError && $options.handleError(...args)),
+    l: common_vendor.o((...args) => $options.takePhoto && $options.takePhoto(...args))
+  }) : {
+    m: $data.tempImagePath,
+    n: common_vendor.o((...args) => $options.retakePhoto && $options.retakePhoto(...args)),
+    o: common_vendor.o((...args) => $options.confirmPhoto && $options.confirmPhoto(...args))
   }, {
-    k: common_vendor.f($data.failedItems, (item, index, i0) => {
+    p: common_vendor.f($data.failedItems, (item, index, i0) => {
       return {
         a: common_vendor.t(item.name),
         b: index,

+ 1 - 1
unpackage/dist/dev/mp-weixin/pages/interview_retake/interview_retake.wxml

@@ -1 +1 @@
-<view class="interview-container"><view class="header"><view class="title">补拍检测</view><view class="subtitle">请按提示重新拍摄失败项</view></view><view wx:if="{{a}}" class="camera-container"><camera class="camera" device-position="front" flash="off" binderror="{{f}}"><view class="gesture-overlay"><image class="gesture-image" src="{{b}}"></image><cover-view class="tip-text">{{c}}</cover-view></view><view class="camera-tip" style="{{e}}"><view class="guide-icon"><video src="{{d}}" id="mpVideo" autoplay class="mp-video-player" controls="{{false}}" loop muted object-fit="contain"></video></view></view></camera><view class="capture-btn" bindtap="{{g}}"></view></view><view wx:else class="preview-container"><image src="{{h}}" mode="aspectFit"></image><view class="preview-buttons"><button class="btn-retake" bindtap="{{i}}">重拍</button><button class="btn-confirm" bindtap="{{j}}">确认</button></view></view><view class="progress-bar"><view wx:for="{{k}}" wx:for-item="item" wx:key="b" class="{{['step-item', item.c && 'active', item.d && 'completed']}}">{{item.a}}</view></view></view>
+<view class="interview-container"><view class="header"><view class="title">补拍检测</view><view class="subtitle">请按提示重新拍摄失败项</view></view><view wx:if="{{a}}" class="camera-container"><camera class="camera" device-position="front" flash="off" binderror="{{k}}"><view class="gesture-overlay"><image class="gesture-image" src="{{b}}"></image><cover-view class="tip-text">{{c}}</cover-view></view><view class="camera-tip" style="{{j}}"><view class="guide-icon"><video src="{{d}}" id="mpVideo" autoplay class="mp-video-player" controls="{{false}}" loop muted object-fit="contain" binderror="{{e}}" bindloadedmetadata="{{f}}"></video><view wx:if="{{g}}" class="video-loading"><text>加载中...</text></view><view wx:if="{{h}}" class="video-error"><text>{{i}}</text></view></view></view></camera><view class="capture-btn" bindtap="{{l}}"></view></view><view wx:else class="preview-container"><image src="{{m}}" mode="aspectFit"></image><view class="preview-buttons"><button class="btn-retake" bindtap="{{n}}">重拍</button><button class="btn-confirm" bindtap="{{o}}">确认</button></view></view><view class="progress-bar"><view wx:for="{{p}}" wx:for-item="item" wx:key="b" class="{{['step-item', item.c && 'active', item.d && 'completed']}}">{{item.a}}</view></view></view>

+ 18 - 0
unpackage/dist/dev/mp-weixin/pages/interview_retake/interview_retake.wxss

@@ -145,3 +145,21 @@
 .step-item.completed {
 	color: #67c23a;
 }
+.video-loading, .video-error {
+	position: absolute;
+	top: 0;
+	left: 0;
+	width: 100%;
+	height: 100%;
+	display: flex;
+	justify-content: center;
+	align-items: center;
+	background: rgba(0, 0, 0, 0.5);
+}
+.video-loading text, .video-error text {
+	color: #fff;
+	font-size: 24rpx;
+}
+.video-error text {
+	color: #ff4d4f;
+}

+ 4 - 0
unpackage/dist/dev/mp-weixin/pages/my/my.js

@@ -18,6 +18,7 @@ const _sfc_main = {
       },
       menuItems: [
         { title: "个人资料", icon: "icon-user", action: "profile" },
+        { title: "上传简历", icon: "", action: "uploadResume" },
         // { title: '我的订单', icon: 'icon-order', action: 'orders' },
         // { title: '我的收藏', icon: 'icon-star', action: 'favorites' },
         { title: "设置", icon: "icon-settings", action: "settings" },
@@ -481,6 +482,9 @@ const _sfc_main = {
         case "help":
           common_vendor.index.navigateTo({ url: "/pages/help/help" });
           break;
+        case "uploadResume":
+          common_vendor.index.navigateTo({ url: "/pages/uploadResume/uploadResume" });
+          break;
         default:
           common_vendor.index.showToast({
             title: `点击了${item.title}`,

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

@@ -1,15 +1,93 @@
 "use strict";
 const common_vendor = require("../../common/vendor.js");
+const common_config = require("../../common/config.js");
 const _sfc_main = {
   data() {
     return {
       fileType: ["pdf", "doc", "docx"],
-      maxSize: 30 * 1024 * 1024
+      maxSize: 30 * 1024 * 1024,
       // 30MB in bytes
+      uploadedFile: null
     };
   },
   methods: {
+    // 调用简历解析接口
+    /* async parseResume(fileUrl) {
+    	try {
+    		const userInfo = JSON.parse(uni.getStorageSync('userInfo') || '{}');
+    		const userId = userInfo.id;
+    		const openid = userInfo.openid;
+    		const tenant_id = userInfo.tenant_id;
+    		
+    		if (!userId) {
+    			uni.showToast({
+    				title: '用户信息不完整,请重新登录',
+    				icon: 'none'
+    			});
+    			return false;
+    		}
+    		
+    		const response = await uni.request({
+    			url: `${apiBaseUrl}/api/system/resume-parsing-tasks/upload_resume/`,
+    			method: 'POST',
+    			data: {
+    				openid: openid,
+    				tenant_id: tenant_id,
+    				user_id: userId,
+    				file: fileUrl,
+    				description: '候选人简历'
+    			},
+    			header: {
+    				'content-type': 'application/json'
+    			}
+    		});
+    		
+    		if (response.statusCode === 200 && response.data.code === 2000) {
+    			return true;
+    		} else {
+    			throw new Error(response.data.msg || '简历解析失败');
+    		}
+    	} catch (error) {
+    		console.error('简历解析失败:', error);
+    		uni.showToast({
+    			title: error.message || '简历解析失败',
+    			icon: 'none'
+    		});
+    		return false;
+    	}
+    }, */
+    clearFile() {
+      common_vendor.index.showModal({
+        title: "提示",
+        content: "确定要删除已上传的文件吗?",
+        success: (res) => {
+          if (res.confirm) {
+            this.uploadedFile = null;
+            common_vendor.index.showToast({
+              title: "文件已删除",
+              icon: "success"
+            });
+          }
+        }
+      });
+    },
+    formatFileSize(size) {
+      if (size < 1024) {
+        return size + "B";
+      } else if (size < 1024 * 1024) {
+        return (size / 1024).toFixed(2) + "KB";
+      } else {
+        return (size / (1024 * 1024)).toFixed(2) + "MB";
+      }
+    },
     chooseFile() {
+      if (this.uploadedFile) {
+        common_vendor.index.showToast({
+          title: "请先删除已上传的文件",
+          icon: "none"
+        });
+        return;
+      }
       common_vendor.index.chooseMessageFile({
         count: 1,
         type: "file",
@@ -26,37 +104,120 @@ const _sfc_main = {
         }
       });
     },
-    uploadFile(file) {
-      common_vendor.index.showLoading({
-        title: "上传中..."
-      });
-      common_vendor.index.uploadFile({
-        url: "YOUR_UPLOAD_API_URL",
-        filePath: file.path,
-        name: "file",
-        success: (res) => {
-          common_vendor.index.showToast({
-            title: "上传成功",
-            icon: "success"
-          });
-        },
-        fail: (err) => {
+    async uploadFile(file) {
+      try {
+        common_vendor.index.showLoading({
+          title: "上传中..."
+        });
+        const userInfo = JSON.parse(common_vendor.index.getStorageSync("userInfo") || "{}");
+        console.log(userInfo);
+        const openid = userInfo.openid || "";
+        const tenant_id = userInfo.tenant_id || 1;
+        const userId = userInfo.id;
+        console.log(openid, tenant_id);
+        if (!openid || !tenant_id || !userId) {
+          common_vendor.index.hideLoading();
           common_vendor.index.showToast({
-            title: "上传失败",
+            title: "用户信息不完整,请重新登录",
             icon: "none"
           });
-        },
-        complete: () => {
-          common_vendor.index.hideLoading();
+          return;
         }
-      });
+        common_vendor.index.uploadFile({
+          url: `${common_config.apiBaseUrl}/api/system/resume-parsing-tasks/upload_resume/`,
+          filePath: file.path,
+          name: "file",
+          formData: {
+            openid,
+            tenant_id,
+            user_id: userId,
+            description: "候选人简历"
+          },
+          success: (uploadRes) => {
+            try {
+              const res = JSON.parse(uploadRes.data);
+              console.log(res);
+              if (res.code === 2e3) {
+                this.uploadedFile = {
+                  name: file.name || "未命名文件",
+                  size: file.size,
+                  uploadTime: (/* @__PURE__ */ new Date()).toLocaleString(),
+                  url: res.data.url || ""
+                };
+                common_vendor.index.showToast({
+                  title: "上传成功",
+                  icon: "success",
+                  duration: 2e3
+                });
+                let seconds = 30;
+                common_vendor.index.showLoading({
+                  title: `正在处理中,请稍候...(${seconds}秒)`,
+                  mask: true
+                });
+                const timer = setInterval(() => {
+                  seconds--;
+                  if (seconds > 0) {
+                    common_vendor.index.showLoading({
+                      title: `正在处理中,请稍候...(${seconds}秒)`,
+                      mask: true
+                    });
+                  } else {
+                    clearInterval(timer);
+                    common_vendor.index.hideLoading();
+                    common_vendor.index.showToast({
+                      title: "处理完成",
+                      icon: "success"
+                    });
+                  }
+                }, 1e3);
+              } else {
+                common_vendor.index.showToast({
+                  title: res.msg || "上传失败",
+                  icon: "none"
+                });
+              }
+            } catch (error) {
+              common_vendor.index.showToast({
+                title: "上传失败",
+                icon: "none"
+              });
+            }
+          },
+          fail: (err) => {
+            console.error("上传失败:", err);
+            common_vendor.index.showToast({
+              title: "网络错误,请重试",
+              icon: "none"
+            });
+          },
+          complete: () => {
+            if (!this.uploadedFile) {
+              common_vendor.index.hideLoading();
+            }
+          }
+        });
+      } catch (error) {
+        common_vendor.index.hideLoading();
+        common_vendor.index.showToast({
+          title: "系统错误,请重试",
+          icon: "none"
+        });
+      }
     }
   }
 };
 function _sfc_render(_ctx, _cache, $props, $setup, $data, $options) {
-  return {
-    a: common_vendor.o((...args) => $options.chooseFile && $options.chooseFile(...args))
-  };
+  return common_vendor.e({
+    a: common_vendor.t($data.uploadedFile ? "已上传文件" : "选择并上传文件"),
+    b: common_vendor.o((...args) => $options.chooseFile && $options.chooseFile(...args)),
+    c: !!$data.uploadedFile,
+    d: $data.uploadedFile
+  }, $data.uploadedFile ? {
+    e: common_vendor.o((...args) => $options.clearFile && $options.clearFile(...args)),
+    f: common_vendor.t($data.uploadedFile.name),
+    g: common_vendor.t($options.formatFileSize($data.uploadedFile.size)),
+    h: common_vendor.t($data.uploadedFile.uploadTime)
+  } : {});
 }
 const MiniProgramPage = /* @__PURE__ */ common_vendor._export_sfc(_sfc_main, [["render", _sfc_render]]);
 wx.createPage(MiniProgramPage);

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

@@ -1 +1 @@
-<view class="upload-container"><view class="header-notice"><image style="width:30rpx;height:30rpx" src="https://data.qicai321.com/minlong/57d03f34-47de-43fe-8730-b764ed8bdda2.png" mode="aspectFit"></image>请上传简历文件,格式支持pdf及doc格式 </view><view class="illustration"><image class="img" src="https://data.qicai321.com/minlong/09d4daa6-6507-4133-81ff-68e47b0259e5.png" mode="aspectFit"></image></view><button class="upload-btn" bindtap="{{a}}"> 选择并上传文件 </button><view class="instructions"><view class="title">使用说明及注意事项</view><view class="instruction-list"><view class="instruction-item">1. 点击【选择并上传文件】按钮,上传简历;</view><view class="instruction-item">2. 请在本地选择简历文件,文件小于30mb;</view><view class="instruction-item">3. 支持pdf及doc格式。</view></view><view class="privacy-notice"> * 我们将对您的隐私保护,所内容仅用于评估岗位的匹配度。 </view></view></view>
+<view class="upload-container"><view class="header-notice"><image style="width:30rpx;height:30rpx" src="https://data.qicai321.com/minlong/57d03f34-47de-43fe-8730-b764ed8bdda2.png" mode="aspectFit"></image>请上传简历文件,格式支持pdf及doc格式 </view><view class="illustration"><image class="img" src="https://data.qicai321.com/minlong/09d4daa6-6507-4133-81ff-68e47b0259e5.png" mode="aspectFit"></image></view><button class="upload-btn" bindtap="{{b}}" disabled="{{c}}">{{a}}</button><view wx:if="{{d}}" class="file-info"><view class="file-info-header"><view class="file-info-title">已上传文件</view><view class="file-delete" bindtap="{{e}}"><image class="delete-icon" src="https://data.qicai321.com/minlong/delete.png" mode="aspectFit"></image></view></view><view class="file-info-content"><view class="file-name">{{f}}</view><view class="file-size">{{g}}</view><view class="file-time">上传时间:{{h}}</view></view></view><view class="instructions"><view class="title">使用说明及注意事项</view><view class="instruction-list"><view class="instruction-item">1. 点击【选择并上传文件】按钮,上传简历;</view><view class="instruction-item">2. 请在本地选择简历文件,文件小于30mb;</view><view class="instruction-item">3. 支持pdf及doc格式。</view></view><view class="privacy-notice"> * 我们将对您的隐私保护,所内容仅用于评估岗位的匹配度。 </view></view></view>

+ 56 - 11
unpackage/dist/dev/mp-weixin/pages/uploadResume/uploadResume.wxss

@@ -47,19 +47,46 @@
   width: 650rpx;
   height: 550rpx;
 }
-.upload-container .upload-btn {
+.upload-container .file-info {
+  background-color: #ffffff;
+  border-radius: 12rpx;
+  padding: 30rpx;
+  margin: 30rpx auto;
   width: 90%;
-  height: 88rpx;
-  line-height: 88rpx;
-  background-color: #2b4acb;
-  color: #ffffff;
-  border-radius: 8rpx;
-  font-size: 32rpx;
-  margin: 60rpx auto;
-  text-align: center;
+  box-shadow: 0 2rpx 12rpx rgba(0, 0, 0, 0.05);
 }
-.upload-container .upload-btn::after {
-  border: none;
+.upload-container .file-info .file-info-header {
+  display: flex;
+  justify-content: space-between;
+  align-items: center;
+  margin-bottom: 20rpx;
+}
+.upload-container .file-info .file-info-title {
+  font-size: 28rpx;
+  color: #333;
+  font-weight: bold;
+}
+.upload-container .file-info .file-delete {
+  padding: 10rpx;
+}
+.upload-container .file-info .file-delete .delete-icon {
+  width: 32rpx;
+  height: 32rpx;
+}
+.upload-container .file-info .file-info-content .file-name {
+  font-size: 26rpx;
+  color: #666;
+  margin-bottom: 10rpx;
+  word-break: break-all;
+}
+.upload-container .file-info .file-info-content .file-size {
+  font-size: 24rpx;
+  color: #999;
+  margin-bottom: 10rpx;
+}
+.upload-container .file-info .file-info-content .file-time {
+  font-size: 24rpx;
+  color: #999;
 }
 .upload-container .instructions {
   padding: 0 30rpx;
@@ -80,4 +107,22 @@
   font-size: 24rpx;
   color: #999;
   line-height: 1.5;
+}
+.upload-container .upload-btn {
+  width: 90%;
+  height: 88rpx;
+  line-height: 88rpx;
+  background-color: #2b4acb;
+  color: #ffffff;
+  border-radius: 8rpx;
+  font-size: 32rpx;
+  margin: 60rpx auto;
+  text-align: center;
+}
+.upload-container .upload-btn::after {
+  border: none;
+}
+.upload-container .upload-btn[disabled] {
+  background-color: #cccccc;
+  color: #ffffff;
 }

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

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

+ 14 - 0
unpackage/dist/dev/mp-weixin/project.private.config.json

@@ -7,6 +7,20 @@
   "condition": {
     "miniprogram": {
       "list": [
+        {
+          "name": "pages/uploadResume/uploadResume",
+          "pathName": "pages/uploadResume/uploadResume",
+          "query": "",
+          "launchMode": "default",
+          "scene": null
+        },
+        {
+          "name": "pages/interview_retake/interview_retake",
+          "pathName": "pages/interview_retake/interview_retake",
+          "query": "",
+          "launchMode": "default",
+          "scene": null
+        },
         {
           "name": "pages/interview_success/interview_success",
           "pathName": "pages/interview_success/interview_success",

Một số tệp đã không được hiển thị bởi vì quá nhiều tập tin thay đổi trong này khác