Browse Source

Merge branch '2025北京诚祥' of https://gogs.mtavip.com/wangguoyu/uniProject into 2025北京诚祥

tanxue 2 months ago
parent
commit
69faa93929

+ 8 - 2
App.vue

@@ -3,6 +3,7 @@
 		onBackPress
 	} from "@dcloudio/uni-app"
 	import cacheManager from "@/utils/cacheManager.js";
+	import {useIsCanBack} from "@/store/isCanBack.js";
 	export default {
 			
 		// creat by wgy 0619  生命周期 钩子  
@@ -31,8 +32,13 @@
 			// #ifdef APP-PLUS
 			const webview = plus.webview.currentWebview();
 			plus.key.addEventListener('backbutton', () => {
-				event.preventDefault();
-				return false
+				const store = useIsCanBack();
+				if (!store.isCanBack) {
+					event.preventDefault();
+					return false
+				} else {
+					return true
+				}
 			});
 			// #endif
 		},

+ 24 - 0
api/jiazheng.js

@@ -179,3 +179,27 @@ export function getJiazhengBanzhengCheckKc(data = {}) {
     timeout: 20000
   })
 }
+
+export function getJiazhengJianli(data = {}) {
+  return request({
+    url: '/app/user/jiazheng/jianli',
+    headers: {
+      isToken: false
+    },
+    method: 'post',
+    data,
+    timeout: 20000
+  })
+}
+
+export function getJiazhengInfo(data = {}) {
+  return request({
+    url: '/app/user/jiazheng/info',
+    headers: {
+      isToken: false
+    },
+    method: 'post',
+    data,
+    timeout: 20000
+  })
+}

+ 5 - 3
components/zhuapaiConfirm/useCamera.js

@@ -453,7 +453,7 @@ export function useH5Camera({
 	}
 
 	function getSnapShotImage(data) {
-		console.log('base64', data)
+		// console.log('base64', data)
 		const imgData = data.split(';base64,');
 		if (!imgData.length) {
 			console.error('【源 :拍照数据异常,未找到图片二进制数据分割节点: `;base64,`】');
@@ -490,7 +490,7 @@ export function useH5Camera({
 		}).catch(err => {
 			uni.showToast({
 				icon: 'none',
-				title: '抓拍图片异常!'
+				title: '当前网络可能存在异常,请稍后重试,如持续异常,请联系管理员。注:若异常未联系管理员,可能会影响考试结果。'
 			})
 			uni.redirectTo({
 				url: "/pages/client/Kaoshi/list"
@@ -507,4 +507,6 @@ export function useH5Camera({
 		errorFunComplete,
 		playVideo
 	}
-}
+}
+
+

+ 121 - 23
components/zhuapaiConfirm/zhuapai.vue

@@ -1,5 +1,6 @@
 <template>
-	<view class="zhuapai-drop-container" id="Drop" ref="DropRef" :style="style" @touchmove="touchmove($event)" @touchstart="touchstart($event)">
+	<view class="zhuapai-drop-container" id="Drop" ref="DropRef" :style="style" @touchmove="touchmove($event)"
+		@touchstart="touchstart($event)">
 		<view class="phone-camera-box-zhuapai">
 			<video ref="videoRef" class="video-view-box" :class="myClass" id="videoZhaPai" :controls="false"></video>
 			<!-- 隐藏抓拍绘制图片 -->
@@ -44,6 +45,9 @@
 	const disX = ref(0); // 移动x
 	const disY = ref(0); // 移动y
 	const showVideo = ref(true);
+	const isBuffer = ref(false);
+
+	const stopTimer = ref(null);
 	const style = ref({
 		top: "10vh",
 		right: "0",
@@ -56,7 +60,7 @@
 		}
 	})
 
-	const emits = defineEmits(['init', 'success', 'error', 'cancel'])
+	const emits = defineEmits(['init', 'success', 'error', 'cancel', 'progress'])
 
 	function noShowVideoBtn() {
 		showVideo.value = false
@@ -71,10 +75,10 @@
 		// 2,获取手指移动的实时位置  需要减去位置差
 		let moveX = event.touches[0].pageX - disX.value;
 		let moveY = event.touches[0].pageY - disY.value;
-		
-		const systemInfo = uni.getSystemInfoSync();  
-		const windowHeight = systemInfo.windowHeight;  // 可视区域高度 ‌:ml-citation{ref="1,3" data="citationList"}  
-		const windowWidth = systemInfo.windowWidth;  // 可视区域高度 ‌:ml-citation{ref="1,3" data="citationList"}  
+
+		const systemInfo = uni.getSystemInfoSync();
+		const windowHeight = systemInfo.windowHeight; // 可视区域高度 ‌:ml-citation{ref="1,3" data="citationList"}  
+		const windowWidth = systemInfo.windowWidth; // 可视区域高度 ‌:ml-citation{ref="1,3" data="citationList"}  
 
 
 		// 3,获取容器的宽高和拖动元素的宽高  每一次移动都会获取一次 ,建议放在外面进行获取
@@ -157,42 +161,136 @@
 			// 首次运行进行抓拍一次
 			handleZhua();
 		}, 3000);
+		addVideoListener();
 	}
 
 	function onVideoError() {
 		emits('error')
+		removeVideoListener()
+	}
+
+	// 针对视频通话的监听处理
+
+	function onTimeupdate() {
+		if (isBuffer.value) {
+			console.log('buffer')
+			return;
+		}
+		if (!stopTimer.value) {
+			return;
+		}
+		console.log('onTimeupdate')
+		clearTimeout(stopTimer.value);
+		stopTimer.value = null;
 	}
 
+	function onProgress() {
+		if (stopTimer.value) {
+			return;
+		}
+		isBuffer.value = true;
+		console.log('onProgress')
+		// buffer时间增大到3秒 过滤掉后续的onTimeupdate
+		setTimeout(() => {isBuffer.value = false}, 3000)
+		// 视频中途暂停被占用
+		stopTimer.value = setTimeout(() => {
+			emits('progress', false);
+			console.log('结束')
+		}, 10 * 1000)
+	}
+   function addVideoListener() {
+		let video = document.querySelector(`#videoZhaPai .uni-video-video`)
+		// 判定有流
+		video.addEventListener('progress', onProgress);
+		video.addEventListener('timeupdate', onTimeupdate);
+	}
+     function removeVideoListener() {
+		let video =document.querySelector(`#videoZhaPai .uni-video-video`)
+		video && video.removeEventListener('progress', onProgress);
+		video && video.removeEventListener('timeupdate', onTimeupdate);
+	}
+
+
 	onUnmounted(() => {
 		// 组件销毁时停止摄像头
 		stopCamera && stopCamera();
+		removeVideoListener();
 	})
 
 	defineExpose({
-		init,showVideoBtn
+		init,
+		showVideoBtn
 	})
 </script>
 
 <style lang="scss">
 	.zhuapai-drop-container {
-    width: 180rpx;height: 400rpx;margin: 0;padding: 0;z-index: 10;position: absolute;overflow: hidden;
-		.phone-camera-box-zhuapai{
-			width: 100%;height: 240rpx;position: absolute;overflow: hidden;
-			.uni-video-container{background-color: transparent; pointer-events: none;}
-			.canvas-view-box,.hidden-video{transform: translateY(10000rpx);}
+		width: 180rpx;
+		height: 400rpx;
+		margin: 0;
+		padding: 0;
+		z-index: 10;
+		position: absolute;
+		overflow: hidden;
+
+		.phone-camera-box-zhuapai {
+			width: 100%;
+			height: 240rpx;
+			position: absolute;
+			overflow: hidden;
+
+			.uni-video-container {
+				background-color: transparent;
+				pointer-events: none;
+			}
+
+			.canvas-view-box,
+			.hidden-video {
+				transform: translateY(10000rpx);
+			}
+		}
+
+		.video-view-box {
+			width: 100%;
+			height: 240rpx;
+			position: absolute;
+		}
+
+		.shiti-video-hidden-btn,
+		.shiti-video-show-btn {
+			position: absolute;
+			top: 0;
+
+			i {
+				width: 32rpx;
+				height: 32rpx;
+				display: block;
+				background-size: cover;
+				background-repeat: no-repeat;
+				background-position: center;
+			}
 		}
-		.video-view-box{width:100%;height: 240rpx;position: absolute;}
-		.shiti-video-hidden-btn,.shiti-video-show-btn{
-			position: absolute;top:0;
-			i{width: 32rpx;height: 32rpx;display: block;background-size: cover;background-repeat: no-repeat;background-position:center;}
+
+		.shiti-video-hidden-btn {
+			width: 60rpx;
+			height: 60rpx;
+			left: 0;
+
+			i {
+				background-image: url("@/static/images/exam/video-close-icon.svg");
+				margin: 6rpx auto 6rpx 6rpx;
+			}
 		}
-		.shiti-video-hidden-btn{
-			width: 60rpx;height: 60rpx;left:0;
-			 i{background-image: url("@/static/images/exam/video-close-icon.svg");margin:6rpx auto 6rpx 6rpx;}
-		 }
-		.shiti-video-show-btn{
-			background-color: #dcfbf1;padding:20rpx;border-radius:8rpx;right:0;
-			i{background-image: url("@/static/images/exam/video-play-icon.svg");}
+
+		.shiti-video-show-btn {
+			background-color: #dcfbf1;
+			padding: 20rpx;
+			border-radius: 8rpx;
+			right: 0;
+
+			i {
+				background-image: url("@/static/images/exam/video-play-icon.svg");
+			}
 		}
 	}
 </style>

+ 7 - 0
pages.json

@@ -140,6 +140,13 @@
 			}
 		},
 		{
+			"path" : "pages/admin/Chengji/ksScoreShijuan",
+			"style" : 
+			{
+				"navigationStyle": "custom"
+			}
+		},
+		{
 			"path" : "pages/client/Chengji/list",
 			"style" : 
 			{

+ 22 - 12
pages/Login/components/loginBox.vue

@@ -32,6 +32,9 @@
 	import passwordLli from "@/components/password-lli/password-lli.vue";
 	import {ref} from "vue"
 	import {toast} from "@/utils/common";
+	import {useIsCanBack} from "@/store/isCanBack.js"
+	
+	
 	const userName = ref('') // 用户名
 	const password = ref('') // 密码
 	const lliPassword = ref('') // 加密后的密码
@@ -40,6 +43,8 @@
 	const clearTelIcon= ref(false)
 	const clearPwIcon= ref(false)
 	
+	const store = useIsCanBack();
+	
 	// 加密
 	function handleUpdateLLiPassword() {
 		console.log('handleUpdateLLiPassword')
@@ -105,27 +110,32 @@
 			password: lliPassword.value,
 		}).then(res => {
 			cacheManager.set('auth', res.data)
+			store.setIsCanBack(false)
 			console.log('登录成功')
 			// 页面跳转
 			gotoPage();
+		}).catch(err => {
+			store.setIsCanBack(true)
 		})
 	}
 	
 	// 跳转
 	function gotoPage(){
-    // 客户端
-    // #ifdef H5
-    uni.navigateTo({
-      url: `/pages/client/ShouYe/shouye`
-    })
-    // #endif
 
-    // 管理端
-    // #ifdef APP-PLUS
-    uni.navigateTo({
-      url: `/pages/admin/ShouYe/shouye`
-    })
-    // #endif
+        // 客户端
+        // #ifdef H5
+        uni.navigateTo({
+          url: `/pages/client/ShouYe/shouye`
+        })
+        // #endif
+    
+        // 管理端
+        // #ifdef APP-PLUS
+        uni.navigateTo({
+          url: `/pages/admin/ShouYe/shouye`
+        })
+        // #endif
+
 	}
 </script>
 

+ 152 - 115
pages/admin/Chengji/ksScoreShijuan.vue

@@ -1,86 +1,97 @@
 <template>
-	<view class="socre-shijuan">
+	<view class="phone-score-page">
 		<!-- 导航区域 -->
 		<view class="icon-title-navBar-box">
 			<view @click="handleBack" class="nav-bar-icon"></view>
 			<text class="nav-bar-title">{{data.ksName}}</text>
 		</view>
 		<!-- 上方区域 -->
-		<topCard @openCard="handleOpenCard" :name="data.ksName" :zyLevelName="data.zyLevelName" :userScore="data.userScore" :Score="data.Score" :count="activeSt && activeSt.onlyNum||0" :total="data.StListForSearch.length"></topCard>
-		
-		<view>
-			<!-- 段落 -->
-			<view class="kaoshi-shiti-content">
-				<!-- 试题区域 -->
-				<view v-if="activeSt">
-					<template v-if="activeSt.stTypeId == 1">
-						<!-- 单选 -->
-						<danxuan :question="activeSt" :key="activeSt.stId"></danxuan>
-					</template>
-					<template v-if="activeSt.stTypeId == 2">
-						<!-- 多选 -->
-						<duoxuan :question="activeSt" :key="activeSt.stId"></duoxuan>
-					</template>
-					<template v-if="activeSt.stTypeId == 3">
-						<!-- 判断 -->
-						<panduan :question="activeSt" :key="activeSt.stId"></panduan>
-					</template>
-					<template v-if="activeSt.stTypeId == 4">
-						<!-- 填空 -->
-						<tiankong :question="activeSt" :key="activeSt.stId"></tiankong>
-					</template>
+		<topCard v-if="data.ksName" @openCard="handleOpenCard" :name="data.ksName" :zyLevelName="data.zyLevelName"
+			:userScore="data.userScore" :Score="data.ksScore"></topCard>
+
+		<!-- 段落 -->
+		<view class="score-shiti-content">
+			<!-- 试题区域 -->
+			<view v-if="activeSt">
+				<template v-if="activeSt.stTypeId == 1">
+					<!-- 单选 -->
+					<danxuan :question="activeSt" :key="activeSt.stId"></danxuan>
+				</template>
+				<template v-if="activeSt.stTypeId == 2">
+					<!-- 多选 -->
+					<duoxuan :question="activeSt" :key="activeSt.stId"></duoxuan>
+				</template>
+				<template v-if="activeSt.stTypeId == 3">
+					<!-- 判断 -->
+					<panduan :question="activeSt" :key="activeSt.stId"></panduan>
+				</template>
+				<template v-if="activeSt.stTypeId == 4">
+					<!-- 填空 -->
+					<tiankong :question="activeSt" :key="activeSt.stId"></tiankong>
+				</template>
+			</view>
+		</view>
+		<!-- 解析 -->
+		<view v-if="activeSt" class="score-answer-box">
+			<view class="phone-question-answer-box" v-if="activeSt.stTypeId != 4">
+				<view class="phone-line-title">答案解析</view>
+				<view class="btdf-row">本题得分:<text>{{answerRes.score}}</text>分</view>
+				<view class="zqda-row">正确答案:<text>{{answerRes.result}}</text></view>
+				<view class="ndda-row">您的答案:<text>{{answerRes.reply}}</text></view>
+				<view class="dajx-row">答案解析:
+					<rich-text :nodes="answerRes.answer"></rich-text>
 				</view>
 			</view>
-			<!-- 解析 -->
-			<view v-if="activeSt">
-				<view class="phone-question-answer-box" v-if="activeSt.stTypeId != 4">
-					<view class="phone-line-title">答案解析</view>
-					<view class="btdf-row">本题得分:<text>{{answerRes.score}}</text>分</view>
-					<view class="zqda-row">正确答案:<text>{{answerRes.result}}</text></view>
-					<view class="ndda-row">您的答案:<text>{{answerRes.reply}}</text></view>
-					<view class="dajx-row">答案解析: 
-						<rich-text :nodes="answerRes.answer"></rich-text>
-					</view>
+			<view class="phone-question-answer-box" v-else>
+				<view class="phone-line-title">答案解析</view>
+				<view class="btdf-row">本题得分:<text>{{answerRes.score}}</text>分</view>
+				<view class="zqda-row">正确答案:
+					<view v-for="(item,index) in answerRes.result">{{`填空${index+1}`}} : {{item}}</view>
 				</view>
-				<view class="phone-question-answer-box" v-else>
-					<view class="phone-line-title">答案解析</view>
-					<view class="btdf-row">本题得分:<text>{{answerRes.score}}</text>分</view>
-					<view class="zqda-row">正确答案:
-						<view v-for="(item,index) in answerRes.result">{{`填空${index+1}`}} : {{item}}</view>
-					</view>
-					<view class="ndda-row">您的答案:
+				<view class="ndda-row">您的答案:
 					<view v-for="(item,index) in answerRes.reply"> {{`填空${index+1}`}}: {{item}}</view>
-					</view>
-					<view class="dajx-row">答案解析: 
-						<rich-text :nodes="answerRes.answer"></rich-text>
-					</view>
 				</view>
-			</view>	
-			<!-- 上下按钮 -->
-			<template v-if="activeSt">
-				<button type="default" size="mini" hover-class="none" class="phone-green-btn ks-btn-prev" @click="handlePrev" v-if="!isFistStId">上一题</button>
-				<button type="default" size="mini" hover-class="none"class="phone-green-btn ks-btn-next" @click="handleNext" v-if="!isLastStId">下一题</button>
-			</template>
-			
-			<!-- 答题卡 -->
-			<uni-popup ref="popupRef" background-color="#fff" :is-mask-click="false" :mask-click="false">
-				<view class="answer-card-popup">
-					<view class="icon-title-bjcolor-navBar-box">
-						<view @click="handlePopupBack" class="nav-bar-icon"> </view>
-						<text class="nav-bar-title">答题卡</text>
+				<view class="dajx-row">答案解析:
+					<rich-text :nodes="answerRes.answer"></rich-text>
+				</view>
+			</view>
+		</view>
+		<!-- 上下按钮 -->
+		<view v-if="activeSt" class="score-bottom-box">
+			<view @click="handleOpenCard" class="score-num-box">
+				<icon class="score-num-icon"></icon>
+				<text
+					class="active-num">{{activeSt && activeSt.onlyNum||0}}</text>/<text>{{data.StListForSearch.length}}</text>
+			</view>
+			<view>
+				<button type="default" size="mini" hover-class="none" class="phone-green-btn score-answer-btn"
+					@click="handlePrev" v-if="!isFistStId">上一题</button>
+				<button type="default" size="mini" hover-class="none" class="phone-green-btn score-answer-btn"
+					@click="handleNext" v-if="!isLastStId">下一题</button>
+				<button type="default" size="mini" hover-class="none" class="phone-green-btn score-answer-btn"
+					@click="handleBack" v-if="isLastStId">完成</button>
+			</view>
+		</view>
+
+		<!-- 答题卡 -->
+		<uni-popup ref="popupRef" background-color="#fff" :is-mask-click="false" :mask-click="false">
+			<view class="answer-card-popup">
+				<view class="icon-title-bjcolor-navBar-box">
+					<view @click="handlePopupBack" class="nav-bar-icon"> </view>
+					<text class="nav-bar-title">答题卡</text>
+				</view>
+				<view class="answer-card-content" v-for="(paragraph,paragraphIndex) in questionData"
+					:key="paragraphIndex">
+					<view class="paragraph-title">
+						{{paragraph.name}}
 					</view>
-					<view class="answer-card-content" v-for="(paragraph,paragraphIndex) in questionData" :key="paragraphIndex">
-						<view class="paragraph-title">
-							{{paragraph.name}}
-						</view>
-						<view class="paragraph-qa" v-for="(qa,qaIndex) in paragraph.qas" :key="qaIndex" 
+					<view class="paragraph-qa" v-for="(qa,qaIndex) in paragraph.qas" :key="qaIndex"
 						:class="getQaClass(qa)" @click="answerCardItemClick(qa)">{{qa.onlyNum}}
-						</view>
 					</view>
 				</view>
-			</uni-popup>
-			
-		</view>
+			</view>
+		</uni-popup>
+
 	</view>
 </template>
 
@@ -90,10 +101,18 @@
 	import duoxuan from "@/components/questions/duoxuan.vue";
 	import tiankong from "@/components/questions/tiankong.vue";
 	import panduan from "@/components/questions/panduan.vue";
-	import {useQuestionTools} from "@/components/questions/useQuestionTools.js";
-	
-	import { onLoad } from "@dcloudio/uni-app";
-	import {ref,reactive,computed} from "vue"
+	import {
+		useQuestionTools
+	} from "@/components/questions/useQuestionTools.js";
+
+	import {
+		onLoad
+	} from "@dcloudio/uni-app";
+	import {
+		ref,
+		reactive,
+		computed
+	} from "vue"
 	import * as ksApi from "@/api/kaoshi.js"
 	const {
 		checkDanxuanReply,
@@ -102,11 +121,11 @@
 		checkTiankongReply,
 		getLetterByIndex
 	} = useQuestionTools();
-	
-	
+
+
 	const hisId = ref(null)
 	const popupRef = ref(null)
-	
+
 	const data = reactive({
 		ksId: null,
 		ksName: '',
@@ -117,13 +136,13 @@
 		StListForSearch: [],
 		duanluo: []
 	})
-	
+
 	const questionData = ref([]);
 	const progress = reactive({
 		dlIndex: 0,
 		dtIndex: 0
 	})
-	
+
 	const dlName = computed(() => {
 		if (data.StListForSearch && activeSt.value) {
 			return data.StListForSearch[activeSt.value.onlyNum].paragraphName
@@ -131,7 +150,7 @@
 			return ''
 		}
 	})
-	
+
 	const activeSt = computed(() => {
 		if (questionData.value.length) {
 			return questionData.value.length && questionData.value[progress.dlIndex].qas[progress.dtIndex];
@@ -139,9 +158,9 @@
 			return null
 		}
 	})
-	
+
 	const answerRes = computed(() => {
-		const qa = activeSt.value ;
+		const qa = activeSt.value;
 		let score = qa.score;
 		let reply = '';
 		let result = '';
@@ -153,7 +172,7 @@
 			} else {
 				reply = '未答'
 			}
-			
+
 			if (qa.result) {
 				result = getLetterByIndex(qa.result)
 			} else {
@@ -162,7 +181,7 @@
 		}
 		if (qa.stTypeId == 2) {
 			// 多选题
-			
+
 			if (qa.reply && qa.reply.length) {
 				reply = qa.reply.map(item => {
 					if (item.trim()) {
@@ -186,29 +205,37 @@
 			// 判断题
 			if (qa.reply === '') {
 				reply = '未答'
-			} else  if (qa.reply == 0) {
+			} else if (qa.reply == 0) {
 				reply = '错误'
-			}else if (qa.reply == 1) {
+			} else if (qa.reply == 1) {
 				reply = '正确'
 			}
 			if (qa.result == 0) {
 				result = '错误'
-			}else if (qa.result == 1) {
+			} else if (qa.result == 1) {
 				result = '正确'
 			}
 		}
 		if (qa.stTypeId == 4) {
 			let reply = qa.reply || [];
-			let result =qa.result || [];
+			let result = qa.result || [];
 			// 填空题
-			return {score,reply,result,answer}
+			return {
+				score,
+				reply,
+				result,
+				answer
+			}
 		} else {
-			return  {
-				score,reply,result,answer
+			return {
+				score,
+				reply,
+				result,
+				answer
 			}
 		}
 	})
-	
+
 	const isFistStId = computed(() => {
 		if (data.StListForSearch.length) {
 			return data.StListForSearch[0].stId == activeSt.value.stId
@@ -223,14 +250,14 @@
 			return false
 		}
 	});
-	
-	
+
+
 	onLoad((options) => {
 		hisId.value = options.hisId;
 		initPage()
 	})
-	
-	
+
+
 	function getQaClass(qa) {
 		if (qa.marked && qa.marked === true) {
 			return 'paragraph-qa-block-mark';
@@ -262,15 +289,15 @@
 			}
 		}
 	}
-	
-	
+
+
 	function handleBack() {
 		uni.redirectTo({
-			url: "/pages/admin/Lianxi/list"
+			url: "/pages/admin/Chengji/list"
 		})
 	}
-	
-	
+
+
 	function formatDuanluoList() {
 		let uIndex = 0; // 试题num
 		let iDuanluo = 0; // 段落num
@@ -280,7 +307,7 @@
 				qas: [],
 			};
 			paragraph.name = duanluo.name;
-	
+
 			let iQa = 0; // 当前试题序号
 			let order = 0; // 当前题型中第几题
 			for (const iDanxuan of duanluo.danxuan) {
@@ -293,7 +320,7 @@
 				uIndex++;
 				order++;
 				iQa++;
-	
+
 				data.StListForSearch.push({
 					stId: iDanxuan.stId,
 					paragraphName: paragraph.name,
@@ -313,7 +340,7 @@
 				uIndex++;
 				order++;
 				iQa++;
-	
+
 				data.StListForSearch.push({
 					stId: iDuoxuan.stId,
 					paragraphName: paragraph.name,
@@ -333,7 +360,7 @@
 				uIndex++;
 				order++;
 				iQa++;
-	
+
 				data.StListForSearch.push({
 					stId: iPanduan.stId,
 					paragraphName: paragraph.name,
@@ -353,7 +380,7 @@
 				uIndex++;
 				order++;
 				iQa++;
-	
+
 				data.StListForSearch.push({
 					stId: iTiankong.stId,
 					paragraphName: paragraph.name,
@@ -364,10 +391,10 @@
 			}
 			iDuanluo++;
 			questionData.value.push(paragraph)
-	
+
 		}
 	}
-	
+
 	function handlePrev() {
 		const qa = data.StListForSearch.find(item => item.stId == activeSt.value.stId);
 		const index = qa.num - 1;
@@ -376,9 +403,9 @@
 			progress.dlIndex = result.dlIndex;
 			progress.dtIndex = result.dtIndex
 		}
-	
+
 	}
-	
+
 	function handleNext() {
 		const qa = data.StListForSearch.find(item => item.stId == activeSt.value.stId);
 		const index = qa.num - 1;
@@ -388,24 +415,34 @@
 			progress.dtIndex = result.dtIndex
 		}
 	}
-	
-	
-	
+
+
+
 	function initPage() {
-		ksApi.getAdminKsChengjiView({hisId: hisId.value}).then(res => {
-			const { duanluoList,ksName, zyLevelName,userScore,ksScore } = res.data;
+		ksApi.getAdminKsChengjiView({
+			hisId: hisId.value
+		}).then(res => {
+			const {
+				duanluoList,
+				ksName,
+				zyLevelName,
+				userScore,
+				ksScore
+			} = res.data;
 			data.ksName = ksName;
 			data.zyLevelName = zyLevelName;
 			data.userScore = userScore;
 			data.ksScore = ksScore;
 			data.duanluo = duanluoList;
-			
+
 			formatDuanluoList();
 		})
 	}
+
 	function handlePopupBack() {
-			popupRef.value.close()
+		popupRef.value.close()
 	}
+
 	function handleOpenCard() {
 		popupRef.value.open('bottom')
 	}
@@ -413,4 +450,4 @@
 
 <style>
 
-</style>
+</style>

+ 2 - 2
pages/admin/Chengji/list.vue

@@ -80,7 +80,7 @@
 
 	function goUpPage() {
 		uni.redirectTo({
-			url: '/pages/client/ShouYe/shouye'
+			url: '/pages/admin/ShouYe/shouye'
 		})
 	}
 
@@ -91,7 +91,7 @@
 
 	function checkKecheng(item) {
 		uni.navigateTo({
-			url: `/pages/client/Chengji/ksScoreShijuan?hisId=${item.hisId}`
+			url: `/pages/admin/Chengji/ksScoreShijuan?hisId=${item.hisId}`
 		})
 	}
 

+ 63 - 16
pages/admin/Jiazheng/banzhengXinxi.vue

@@ -142,7 +142,53 @@
 			this.getJigou()
 		},
 		methods: {
+			editinfo(data) {
+				this.$nextTick(() => {
 
+
+					console.log('datssssa', data);
+					this.formData.baozhengJigouName = data.jgName;
+					this.formData.baozhengJigouId = data.jgId;
+
+					this.formData.baozhengJigouType = data.jgType;
+					this.formData.banzhengInfoFlag = data.jgType == 1;
+					this.formData.zhiyeName = data.zyName;
+					this.formData.zhiyeId = data.zyId;
+					this.formData.zhiyeLevelName = data.zyLevelName;
+					this.formData.zhiyeLevelId = data.zyLevel;
+					if (this.formData.baozhengJigouId) {
+						getJiazhengZhiye({
+							id: this.formData.baozhengJigouId
+						}).then(res => {
+							console.log('res', res);
+							this.zhiyeNameOpt = res.data
+						})
+					}
+					if (this.formData.baozhengJigouId && this.formData.zhiyeId) {
+						let req = {
+							jgId: this.formData.baozhengJigouId,
+							zyId: this.formData.zhiyeId,
+
+						}
+						getJiazhengLevel(req).then(res => {
+							console.log('res', res);
+							this.zhiyelevelsOpt = res.data
+						})
+					}
+					this.formData.canxunShijian = data.canxunShijian;
+					this.formData.shicaochengji = data.shicaochengji;
+					this.formData.needKecheng = data.needKecheng.toString();
+					this.formData.needKecheng = data.needKaoshi.toString();
+
+					if (this.formData.banzhengInfoFlag) {
+						this.formData.needFlag = false
+
+					} else {
+						this.formData.needFlag = true
+
+					}
+				})
+			},
 			getJigou() {
 				getBaozhengJigou({}).then(res => {
 					console.log('res', res);
@@ -166,14 +212,15 @@
 				this.formData.zhiyeLevelId = ''
 				let req = {
 					jgId: this.formData.baozhengJigouId,
-					zyId: this.formData.zhiyeId
+					zyId: this.formData.zhiyeId,
+
 				}
 				getJiazhengLevel(req).then(res => {
 					console.log('res', res);
 					this.zhiyelevelsOpt = res.data
 				})
 			},
-			resetFun(){
+			resetFun() {
 				this.formData.zhiyeName = ''
 				this.formData.zhiyeId = ''
 				this.formData.zhiyeLevelName = ''
@@ -243,7 +290,7 @@
 			// 需要课程选择
 			kechengChange(e) {
 				this.formData.needKecheng = e.detail.value.toString();
-				console.log('this.formData.needKecheng',this.formData.needKecheng);
+				console.log('this.formData.needKecheng', this.formData.needKecheng);
 				if (this.formData.needKecheng == 'true') {
 					if (this.formData.zhiyeId && this.formData.zhiyeLevelId) {
 						this.checkKc()
@@ -279,20 +326,20 @@
 				//       "zyLevel": 0
 				//     }
 				//   ],
-				
-				let req =  {
-					canxunshijian:this.formData.canxunshijian,
-					jgId:this.formData.baozhengJigouId,
-					needKaoshi:this.formData.needKaoshi,
-					needKecheng:this.formData.needKecheng,
-					shicaochengji:this.formData.shicaochengji,
-					zongkeshi:this.formData.zongkeshi,
-					zyId:this.formData.zhiyeId,
-					zyLevel:this.formData.zhiyeLevelId,
+
+				let req = {
+					canxunshijian: this.formData.canxunshijian,
+					jgId: this.formData.baozhengJigouId,
+					needKaoshi: this.formData.needKaoshi,
+					needKecheng: this.formData.needKecheng,
+					shicaochengji: this.formData.shicaochengji,
+					zongkeshi: this.formData.zongkeshi,
+					zyId: this.formData.zhiyeId,
+					zyLevel: this.formData.zhiyeLevelId,
 				}
-				console.log('req',req);
-				
-				this.$emit('addSave',req);
+				console.log('req', req);
+
+				this.$emit('addSave', req);
 				// // 表单验证
 				// if (!this.formData.institution) {
 				// 	uni.showToast({

+ 52 - 0
pages/admin/Jiazheng/banzhengXinxiList.vue

@@ -0,0 +1,52 @@
+<template>
+	<view class="admin-jiazheng-page">
+		<view>添加</view>
+		<view v-for="(item,index) in list" :key="index">
+			<view>
+				报证机构:{{item.jgName}}
+			</view>
+			<view @click="goEdit(item,index)">
+				编辑
+			</view>
+			<view>职业名称:{{item.zyName}}</view>
+			<view>职业等级:{{item.zyLevelName}}</view>
+			<view>申报时间:{{item.createTime}}</view>
+		</view>
+	</view>
+</template>
+
+<script>
+	import {
+		getBaozhengJigou,
+		getJiazhengLevel,
+		getJiazhengZhiye,
+		getJiazhengBanzhengCheckKc
+	} from "@/api/jiazheng.js"
+	export default {
+		data() {
+			return {
+
+			};
+		},
+		props: {
+			list: {
+				type: Array,
+				default: () => []
+			},
+		},
+		computed: {
+
+		},
+		created() {
+
+		},
+		methods: {
+			goUpPage() {
+
+			},
+			goEdit(item,index) {
+					this.$emit('editBanzheng', item,index);
+			}
+		}
+	};
+</script>

+ 43 - 4
pages/admin/Jiazheng/common/dataChecked.vue

@@ -12,11 +12,12 @@
 
 		<!-- 展开/收起按钮 -->
 		<view class="radio-btn-box label-radio-btn-box">
-			<view v-if="showExpandButton" :class="[{ 'radio-btn': true }, showAll ? 'collapsed-btn' : 'expanded-btn']" @click="toggleExpand">
+			<view v-if="showExpandButton" :class="[{ 'radio-btn': true }, showAll ? 'collapsed-btn' : 'expanded-btn']"
+				@click="toggleExpand">
 				{{ showAll ? '收起' : `展开` }}
 			</view>
 		</view>
-		
+
 
 		<!-- 	<view v-if="showExpandButton" class="expand-button" @click="toggleExpand">
 			{{ showAll ? '收起' : `展开剩余${remainingCount}项` }}
@@ -60,6 +61,15 @@
 				type: String,
 				default: 'multiple', // 'single' | 'multiple'
 				validator: (value) => ['single', 'multiple'].includes(value)
+			},
+			// 外部传入的已选id(单选时为单个id,多选时为id数组)
+			selectedIds: {
+				type: [Array, Number],
+				default: () => []
+			},
+			selectedNames: {
+				type: String,
+				default: ''
 			}
 		},
 		data() {
@@ -84,6 +94,36 @@
 				return this.showAll || this.list.length < this.defaultCount;
 			}
 		},
+		watch: {
+			// 监听外部传入的selectedIds变化,更新selectedData
+			selectedIds: {
+
+				handler(newVal) {
+					if (this.mode === 'single') {
+						// 单选模式
+						const selectedItem = this.list.find(item => item.id == newVal);
+						this.selectedData = selectedItem ? [selectedItem] : [];
+					} else {
+						// 多选模式
+						this.selectedData = this.list.filter(item => newVal.includes(item.id));
+					}
+				}
+			},
+			// 监听外部传入的selectedNames变化,更新selectedData
+			selectedNames: {
+				immediate: true,
+				handler(newVal) {
+					if (!newVal) {
+						this.selectedData = [];
+						return;
+					}
+					// 将字符串解析为名称数组
+					const names = newVal.split(',').map(name => name.trim());
+					// 根据名称从list中找到对应的数据
+					this.selectedData = this.list.filter(item => names.includes(item.name));
+				}
+			}
+		},
 		methods: {
 			isSelected(id) {
 				return this.selectedData.some(item => item.id === id);
@@ -147,7 +187,7 @@
 				}
 
 				const newObject = {
-					id: this.list.length, // 使用时间戳作为临时ID
+					id: this.list.length,
 					name: this.newName
 				};
 				console.log('list', this.list);
@@ -167,7 +207,6 @@
 </script>
 
 <style scoped>
-
 	.add-block {
 		background: transparent;
 		border: 1px dashed #007aff;

+ 12 - 0
pages/admin/Jiazheng/common/jiazhengUpload.vue

@@ -34,8 +34,20 @@
 			changjingType:{
 					type: String,
 					default: ''
+			},
+			img:{
+				type: String,
+				default: ''
 			}
 		},
+		watch: {
+			img: {
+				handler(newVal) {
+				this.imageUrl  =newVal
+				}
+			},
+	
+		},
 		methods: {
 			showActionSheet() {
 				uni.showActionSheet({

+ 85 - 16
pages/admin/Jiazheng/gerenZiliao.vue

@@ -38,7 +38,7 @@
 			<picker mode="multiSelector" :range="multiArray" :range-key="'label'" :value="multiIndex"
 				@columnchange="bindMultiPickerColumnChange" @change="onPickerConfirm">
 				<view class="picker">
-					{{ formData.jiguanShengName}}-{{formData.jiguanShiName}} 箭头
+					{{ formData.jiguanShengName}} {{formData.jiguanShiName}} 箭头
 				</view>
 			</picker>
 		</view>
@@ -67,11 +67,13 @@
 		</view>
 		<view class="form-label-radio form-top-margin flex-start-row">
 			<view class="phone-form-label"><text class="form-label-require">*</text>学历</view>
-			<dataChecked :list="xueliList" mode="single" :showAdd="false" @change="selectChangeXueliList" />
+			<dataChecked :list="xueliList" :selectedIds='formData.xueli.id' mode="single" :showAdd="false"
+				@change="selectChangeXueliList" />
 		</view>
 		<view class="form-label-radio flex-start-row">
 			<view class="phone-form-label"><text></text>婚姻 </view>
-			<dataChecked :list="hunyinList" mode="single" :showAdd="false" @change="selectChangeHunyinList" />
+			<dataChecked :list="hunyinList" mode="single" :selectedIds='formData.hunyin.id' :showAdd="false"
+				@change="selectChangeHunyinList" />
 		</view>
 
 		<view class="form-label-input form-top-margin flex-start-row">
@@ -115,7 +117,8 @@
 					<text>已征得本人同意,将其个人资料信息录入平台</text>
 				</label>
 			</checkbox-group>
-			<button type="default" @click="goNext" class="phone-green-btn">下一步</button>
+			<button type="default" v-if="status =='add'" @click="goNext" class="phone-green-btn">下一步</button>
+			<button type="default" v-if="status =='edit'" @click="editSave" class="phone-green-btn">保存</button>
 		</view>
 	</view>
 </template>
@@ -149,16 +152,24 @@
 					idcard: '',
 					icon: '',
 					birthday: '',
-					hometown: [],
 					hujiDizhi: '',
 					idtype: '1',
 					gender: '',
 					juzhuDizhi: '',
 					minzu: {},
-					shuxiang: {},
-					xingzuo: {},
-					hunyin: {},
-					xueli: {},
+					shuxiang: {
+
+					},
+					xingzuo: {
+
+					},
+					hunyin: {
+						name: '',
+
+					},
+					xueli: {
+
+					},
 					jiguanObj: {},
 					jiguanShengId: '',
 					jiguanShiId: '',
@@ -171,6 +182,8 @@
 					xingzuoFlag: false
 
 				},
+				selectedIds: [3],
+				ceshidata: '',
 				xueliList: [],
 				hunyinList: [],
 				shuxiangList: [],
@@ -187,16 +200,56 @@
 			}
 		},
 		created() {
-			this.getXueli()
-			this.getHunyin()
-			this.getMinzu()
-			this.getXingzuo()
-			this.getShuxiang()
-			this.getJiguan()
-			console.log('this.statusstatusstatus', this.status);
+
+			this.initRequests()
+
+
 
 		},
 		methods: {
+
+			async initRequests() {
+				await Promise.all([
+					this.getXueli(),
+					this.getHunyin(),
+					this.getMinzu(),
+					this.getXingzuo(),
+					this.getShuxiang(),
+					this.getJiguan(),
+				]);
+				if (this.status == 'edit') {
+					this.$emit('finishDom','gerenZiliao');
+				}
+
+			},
+			editinfo(data) {
+				this.$nextTick(() => {
+					this.formData.userName = data.userName
+					this.formData.realName = data.realName
+					this.formData.idcard = data.idcard
+					this.formData.idtype = data.idtype
+					this.formData.jiguanObj.jiguanShengId = data.jiguanShengId
+					this.formData.jiguanShengName = data.jiguanShengName
+					this.formData.jiguanObj.jiguanShiId = data.jiguanShiId
+					this.formData.jiguanShiName = data.jiguanShiName
+					this.formData.juzhuDizhi = data.juzhuDizhi
+					this.formData.birthday = data.birthday
+					this.formData.minzu = this.dataForId(this.minzuList, data.minzu)
+					this.formData.gender = data.gender
+					this.formData.xueli = this.dataForId(this.xueliList, data.xueli)
+					this.formData.hunyin = this.dataForId(this.hunyinList, data.hunyin)
+					this.formData.hujiDizhi = data.hujiDizhi
+					this.formData.juzhuDizhi = data.juzhuDizhi
+					this.formData.xingzuo = this.dataForId(this.xingzuoList, data.xingzuo) || ''
+					this.formData.shuxiang = this.dataForId(this.shuxiangList, data.xingzuo) || ''
+					this.formData.xingzuoFlag = data.xingzuoFlag
+
+				})
+			},
+			dataForId(list, id) {
+				return list.find(item => item.id == id);
+			},
+
 			idCardChange(data) {
 				this.formData.idtype = this.formData.idtype == 1 ? 2 : 1;
 			},
@@ -482,6 +535,22 @@
 				}
 				this.$emit('goNext', this.formData, 0);
 			},
+			editSave() {
+				console.log('formData', this.formData);
+
+				if (!this.checkAllFields()) {
+					return false
+				}
+				if (!this.formData.agree) {
+					uni.showToast({
+						title: "请勾选本人同意!",
+						icon: 'none',
+						duration: 2000
+					})
+					return false
+				}
+				this.$emit('editSave', this.formData);
+			},
 
 			handleAgree(e) {
 				this.formData.agree = e.detail.value.length > 0

+ 8 - 3
pages/admin/Jiazheng/index.vue

@@ -42,7 +42,7 @@
 									<view @click="shareInfo">分享</view>
 									<view @click="telephone">打电话</view>
 								</view>
-								<view @click="lookUserInfo">
+								<view @click="lookUserInfo(item)">
 									<image :src="item.icon ||defauleImg" mode=""></image>
 									<view>
 										<p> {{item.age}}岁|{{item.jingyan}}年经验</p>
@@ -207,9 +207,14 @@
 			url:"/pages/admin/Jiazheng/jiazhengUserManager?pageInfo="+JSON.stringify(pageInfo) 
 		})
 	}
-	const lookUserInfo = (data, index) => {
+	const lookUserInfo = (data) => {
+		let pageInfo = {
+			status:'edit',
+			id:data.id,
+			userId:data.userId
+		}
 		uni.redirectTo({
-			url: `/pages/admin/Jiazheng/jiazhengUserInfo`
+			url: `/pages/admin/Jiazheng/jiazhengUserInfo?pageInfo=`+JSON.stringify(pageInfo)
 		})
 	}
 

+ 66 - 31
pages/admin/Jiazheng/jiazhengUserInfo.vue

@@ -5,50 +5,46 @@
 			<text class="nav-bar-title">家政人员信息</text>
 		</view>
 		<view>
-			<img src="" alt="" />
-			<view>上户中</view>
+			<img style="width: 100rpx;height: 100rpx;" :src="jianliInfo.icon" alt="" />
+			<view>{{jianliInfo.zhuangtai}}</view>
 			<view>
-				<p>孙正</p>
-				<p>49岁|大连人</p>
-				<p>完善度:100%</p>
+				<p>{{jianliInfo.realName}}</p>
+				<p>{{jianliInfo.nianling}}岁|{{jianliInfo.jiguan}}人</p>
 			</view>
 		</view>
 
 		<view>
-			类型:家政人员,病人护理
+			类型:{{jianliInfo.leixing}}
 		</view>
 		<view>
 			<view>
 				<h1>基本信息</h1>
 				<view>
-					学历:初中
+					学历:{{jianliInfo.xieli}}
 				</view>
 				<view>
-					民族:汉族
+					民族:{{jianliInfo.minzu}}
 				</view>
 				<view>
-					属相:小鸡
+					属相:{{jianliInfo.shuxiang}}
 				</view>
 				<view>
-					星座:天蝎座
+					星座:{{jianliInfo.xingzuo}}
 				</view>
 				<view>
-					性别:
+					性别:{{jianliInfo.gender}}
 				</view>
 				<view>
-					婚姻状况:未婚
+					婚姻状况:{{jianliInfo.hunyin}}
 				</view>
 				<view>
-					住家情况:居家
+					现住地址:{{jianliInfo.juzhuDizhi}}
 				</view>
 				<view>
-					现住地址:四川省成都市青羊区鼓楼南街117号(世界贸易中心)
+					家政公司:{{jianliInfo.jzName}}
 				</view>
 				<view>
-					所在门店:大连门店
-				</view>
-				<view>
-					2025年01月17日由吉祥母婴的(刘海老师)录入
+				{{jianliInfo.tips}}
 				</view>
 			</view>
 		</view>
@@ -63,25 +59,64 @@
 		</view>
 	</view>
 </template>
-
-<script setup>
+<script>
 	import {
 		ref
 	} from "vue";
-	
-	function goUpPage(){
-		uni.redirectTo({
-			url:"/pages/admin/ShouYe/shouye"
-		})
-	}
-	function goJiazhengManage(){
-		uni.redirectTo({
-			url:"/pages/admin/Jiazheng/jiazhengUserManager"
-		})
+	import {
+		getJiazhengJianli
+	} from "@/api/jiazheng.js";
+	export default {
+		data() {
+			return {
+				pageInfo: {},
+				jianliInfo:{}
+			}
+		},
+		components: {
+
+		},
+		onLoad(options) {
+			let data = JSON.parse(options.pageInfo)
+			this.pageInfo.status = data.status
+			this.pageInfo.id = data.id
+			this.pageInfo.userId = data.userId
+			this.getJianliInfo()
+		},
+		methods: {
+			getJianliInfo() {
+				let req = {
+					id: this.pageInfo.id
+				}
+				getJiazhengJianli(req).then(res => {
+					console.log('res', res);
+					if(res.code ==0){
+						this.jianliInfo = { ...res.data };
+					}
+				})
+			},
+			goJiazhengManage() {
+				let pageInfo = {
+					status: 'edit',
+					id: this.pageInfo.id,
+					userId: this.pageInfo.userId
+				}
+				uni.redirectTo({
+					url: "/pages/admin/Jiazheng/jiazhengUserManager?pageInfo=" + JSON.stringify(pageInfo)
+				})
+			},
+			goUpPage() {
+				uni.redirectTo({
+					url: "/pages/admin/ShouYe/shouye"
+				})
+			},
+
+		}
 	}
-	// 
 </script>
 
+
+
 <style>
 	.jiazheng-uni-list {
 		display: flex;

+ 104 - 18
pages/admin/Jiazheng/jiazhengUserManager.vue

@@ -6,14 +6,17 @@
 		</view>
 		<v-tabs v-model="current" :tabs="tabs" :scroll="false" @change="changeTab" field="name"
 			class="admin-tab-box"></v-tabs>
-		<gerenZiliao ref="gerenZiliao" :status='status' @goNext="gerenziliaoNext" v-show="current ==0"></gerenZiliao>
-		<qiuzhiXinxi ref="qiuzhiXinxi" :status='status' @goUp="goUpQiuzhixinxi" @goNext="goNextQiuzhixinxi"
+		<gerenZiliao ref="gerenZiliao" :status='status' @finishDom='finishDom' @editSave="editSaveGerenziliao"
+			@goNext="gerenziliaoNext" v-show="current ==0"></gerenZiliao>
+		<qiuzhiXinxi ref="qiuzhiXinxi" :status='status' @editSave="editSaveQiuzhixinxi" @goNext="goNextQiuzhixinxi"
 			v-show="current ==1">
 		</qiuzhiXinxi>
-		<zhaopianZiliao ref="zhaopianZiliao" :status='status' @goUp="goUpZhaopianZiliao" @goNext="goNextZhaopianZiliao"
-			v-show="current ==2"></zhaopianZiliao>
+		<zhaopianZiliao ref="zhaopianZiliao" :status='status' @editSave="editSaveZhaopianziliao"
+			@goNext="goNextZhaopianZiliao" v-show="current ==2"></zhaopianZiliao>
 		<banzhengXinxi ref="banzhengXinxi" :status='status' @addSave="addSave" v-show="current ==3">
 		</banzhengXinxi>
+		<banzhengXinxiList :list="editInfo.kaozhengList" v-show="banzhengXinxiFlag" @editBanzheng="editBanzheng"
+			ref="banzhengXinxiList"></banzhengXinxiList>
 	</view>
 </template>
 
@@ -22,13 +25,17 @@
 		ref
 	} from "vue";
 	import banzhengXinxi from './banzhengXinxi.vue';
+	import banzhengXinxiList from './banzhengXinxiList.vue';
 	import qiuzhiXinxi from './qiuzhiXinxi.vue';
 	import zhaopianZiliao from './zhaopianZiliao.vue';
 	import gerenZiliao from './gerenZiliao.vue';
+	import {
+		getJiazhengInfo
+	} from "@/api/jiazheng.js";
 	export default {
 		data() {
 			return {
-				current: 3,
+				current: 0,
 				//	tabs: ['个人资料', '求职信息', '照片资料', '办证信息']
 				tabs: [],
 				allData: {
@@ -66,15 +73,16 @@
 					"zhengshuUrls": "",
 					"zhuangtai": ''
 				},
-				gerenziliaoObj: {},
-				qiuzhixinxiObj: {},
-				zhaopianziliaoObj: {},
-				banzhengxinxiObj: {},
 				status: '',
+				id: '',
+				userId: '',
+				banzhengXinxiFlag: false,
+				editInfo: {}
 			}
 		},
 		components: {
 			banzhengXinxi,
+			banzhengXinxiList,
 			qiuzhiXinxi,
 			gerenZiliao,
 			zhaopianZiliao,
@@ -82,10 +90,10 @@
 		onLoad(options) {
 			let pageInfo = JSON.parse(options.pageInfo)
 			this.status = pageInfo.status
-			this.dataHandle()
+			this.dataHandle(pageInfo)
 		},
 		methods: {
-			dataHandle() {
+			dataHandle(pageInfo) {
 				if (this.status == 'add') {
 					this.tabs = [{
 							id: 1,
@@ -109,6 +117,8 @@
 						},
 					]
 				} else {
+					this.id = pageInfo.id
+					this.userId = pageInfo.userId
 					this.tabs = [{
 							id: 1,
 							name: '个人资料',
@@ -130,12 +140,57 @@
 							disabled: false
 						},
 					]
+
 				}
 			},
+			finishDom() {
+				let req = {
+					id: this.id,
+					userId: this.userId
+				}
+				getJiazhengInfo(req).then(res => {
+					if (res.code == 0) {
+						this.$refs.gerenZiliao.editinfo(res.data)
+						this.editInfo = res.data
+					} else {
+						uni.showToast({
+							icon: 'none',
+							title: '获取详情失败'
+						})
+						return false
+					}
+				})
+			},
 			changeTab(data) {
 				console.log('data', data);
+				if (this.status == 'edit' && data == 3 && this.editInfo.kaozhengList.length > 0) {
+					this.banzhengXinxiFlag = true
+					return false
+				}
+				this.current = data
+				if (this.status != 'edit') {
+					return false
+				}
+				switch (Number(data)) {
+					case 0:
+						this.$refs.gerenZiliao.editinfo(this.editInfo)
+						break;
+					case 1:
+						this.$refs.qiuzhiXinxi.editinfo(this.editInfo)
+						break;
+					case 2:
+						this.$refs.zhaopianZiliao.editinfo(this.editInfo)
+						break;
+					case 3:
+						this.$refs.banzhengXinxi.editinfo(this.editInfo)
+						break;
+					default:
+						break;
+				}
+
+
 			},
-			gerenziliaoNext(data, num) {
+			gerenZiliaoDataHandle(data) {
 				this.allData.userName = data.userName
 				this.allData.realName = data.realName
 				this.allData.idcard = data.idcard
@@ -152,13 +207,19 @@
 				this.allData.xingzuo = data.xingzuo.id
 				this.allData.shuxiang = data.shuxiang.id
 				this.allData.xingzuoFlag = data.xingzuoFlag
+			},
+			gerenziliaoNext(data, num) {
+				this.gerenZiliaoDataHandle(data)
 				this.current = num + 1
 				this.tabs = this.tabs.map((item, i) => {
 					if (i == this.current) item.disabled = false
 					return item
 				})
 			},
-			goNextQiuzhixinxi(data, num) {
+			editSaveGerenziliao(data) {
+				this.gerenZiliaoDataHandle(data)
+			},
+			qiuzhiXinxiDataHandle(data) {
 				this.allData.leixing = data.leixing
 				this.allData.jingyan = data.jingyan
 				this.allData.jineng = data.jineng
@@ -166,13 +227,28 @@
 				this.allData.jibiexinzi = data.jibiexinzi
 				this.allData.qiwangxinzi = data.qiwangxinzi
 				this.allData.jingli = data.jingli
+			},
+			goNextQiuzhixinxi(data, num) {
+				this.qiuzhiXinxiDataHandle(data)
 				this.current = num + 1
 				this.tabs = this.tabs.map((item, i) => {
 					if (i == this.current) item.disabled = false
 					return item
 				})
 			},
+			editSaveQiuzhixinxi(data) {
+				this.qiuzhiXinxiDataHandle(data)
+			},
+
 			goNextZhaopianZiliao(data, num) {
+				this.zhaopianziliaoDataHandle(data)
+				this.current = num + 1
+				this.tabs = this.tabs.map((item, i) => {
+					if (i == this.current) item.disabled = false
+					return item
+				})
+			},
+			zhaopianziliaoDataHandle(data) {
 				this.allData.icon = data.icon
 				this.allData.idcardUrl1 = data.idcardUrl1
 				this.allData.idcardUrl2 = data.idcardUrl2
@@ -181,11 +257,9 @@
 				this.allData.tijianDate = data.tijianDate
 				this.allData.jiankangDate = data.jiankangDate
 				this.allData.tijianUrl = data.tijianUrl
-				this.current = num + 1
-				this.tabs = this.tabs.map((item, i) => {
-					if (i == this.current) item.disabled = false
-					return item
-				})
+			},
+			editSaveZhaopianziliao(data) {
+				this.zhaopianziliaoDataHandle(data)
 			},
 			addSave(data) {
 				this.allData.kaozhengList.push(data)
@@ -193,6 +267,18 @@
 			},
 			submitJiazheng() {
 				console.log('this.allData', this.allData);
+			},
+			editBanzheng(data, index) {
+				this.current = 3
+				this.banzhengXinxiFlag = false
+				this.$refs.banzhengXinxi.editinfo(data, index)
+
+
+			},
+			goUpPage() {
+				uni.navigateTo({
+					url: `/pages/admin/Jiazheng/index`
+				})
 			}
 
 		}

+ 97 - 60
pages/admin/Jiazheng/qiuzhiXinxi.vue

@@ -2,12 +2,13 @@
 	<view class="jz-content-box">
 		<view class="form-label-radio form-top-margin flex-start-row">
 			<view class="phone-form-label"> <text class="form-label-require">*</text>类型</view>
-			<dataChecked :list="typeList" mode="multiple" :defaultCount="9" @change="selectChangeType" @add="addType" />
+			<dataChecked :list="typeList" mode="multiple" :defaultCount="9" :selectedNames="leixing"
+				@change="selectChangeType" @add="addType" />
 		</view>
 		<view class="form-label-select">
 			<view class="phone-form-label"><text class="form-label-require">*</text>经验</view>
-			<picker :range="jingyanList" mode='selector' :value="jingyanIndex" range-key="name"
-				@change="jingyanChange" @cancel="jingyanCancel">
+			<picker :range="jingyanList" mode='selector' :value="jingyanIndex" range-key="name" @change="jingyanChange"
+				@cancel="jingyanCancel">
 				<view class="form-radio-select">
 					<view>{{ jingyan }}</view>
 					<icon></icon>
@@ -16,32 +17,35 @@
 		</view>
 		<view class="form-label-radio flex-start-row">
 			<view class="phone-form-label"><text class="form-label-require">*</text>技能</view>
-			<dataChecked :list="skillList" mode="multiple" :defaultCount="9" @change="selectChangeSkill"
-				@add="addSkill" />
+			<dataChecked :list="skillList" mode="multiple" :defaultCount="9" :selectedNames="jineng"
+				@change="selectChangeSkill" @add="addSkill" />
 		</view>
 		<view class="form-label-radio form-top-margin flex-start-row">
 			<view class="phone-form-label"><text class="form-label-require">*</text>状态</view>
-			<dataChecked :list="zhuangtaiList" mode="single" :showAdd="false" @change="selectChangeZhuangtai" />
+			<dataChecked :list="zhuangtaiList" mode="single" :selectedIds='zhuangtai' :showAdd="false"
+				@change="selectChangeZhuangtai" />
 		</view>
 		<view class="form-label-select">
 			<view class="phone-form-label"><text class="form-label-require"></text>薪资级别</view>
 			<picker :range="xinziJibieList" mode='selector' @change="xinziJibieChange" @cancel="xinziJibieCancel">
 				<view class="form-radio-select">
-					<view>{{jibiexinzi}}</view><icon></icon>
+					<view>{{jibiexinzi}}</view>
+					<icon></icon>
 				</view>
 			</picker>
 		</view>
-		
+
 		<view class="form-label-input">
 			<view class="phone-form-label"><text class="form-label-require"></text>期望薪资</view>
-			<input v-model="qiwangxinzi"  placeholder="请输入期望薪资" />
-		</view>	
+			<input v-model="qiwangxinzi" placeholder="请输入期望薪资" />
+		</view>
 		<view class="form-label-input">
 			<view class="phone-form-label"><text class="form-label-require"></text>工作经历</view>
-			<input v-model="jingli"  placeholder="请填写工作经历" />
+			<input v-model="jingli" placeholder="请填写工作经历" />
 		</view>
 		<view class="page-btn-box">
-			<button type="default"  @click="goNext" class="phone-green-btn">下一步</button>
+			<button type="default" v-if="status =='add'" @click="goNext" class="phone-green-btn">下一步</button>
+			<button type="default" v-if="status =='edit'" @click="editSave" class="phone-green-btn">保存</button>
 		</view>
 	</view>
 </template>
@@ -52,7 +56,7 @@
 		getJiazhengLeixing,
 		getJiazhengJineng,
 		getJiazhengZhuangtai,
-		
+
 	} from "@/api/jiazheng.js";
 
 	export default {
@@ -61,9 +65,8 @@
 		},
 		// onLoad 是 uni-app 的页面生命周期钩子,不需要导入
 		created() {
-			this.getLeixing()
-			this.getJineng()
-			this.getZhuangtai()
+
+			this.initRequests()
 		},
 		props: {
 			status: {
@@ -72,53 +75,76 @@
 		},
 		data() {
 			return {
-				formData:{},
+				formData: {},
 				// 从后端获取的技能列表
 				skillList: [],
 				typeList: [],
-				leixing:"",
-				jineng:"",
+				leixing: "",
+				jineng: "",
 				zhuangtaiList: [],
-				zhuangtai:'',
-				jingyan:"",
-				jingyanIndex:0,
+				zhuangtai: '',
+				jingyan: "",
+				jingyanIndex: 0,
 				qiwangxinzi: '面议',
 				jingli: '',
-				xinziJibieList: ["一级", "二级","三级","四级","五级",],
-				jibiexinzi:"",
-				jingyanList: Array.from({length: 51}, (_, i) => i + '年'),
+				xinziJibieList: ["一级", "二级", "三级", "四级", "五级", ],
+				jibiexinzi: "",
+				jingyanList: Array.from({
+					length: 51
+				}, (_, i) => i + '年'),
 			};
 		},
 		methods: {
+			async initRequests() {
+				await Promise.all([
+					this.getLeixing(),
+					this.getJineng(),
+					this.getZhuangtai()
+				]);
+			},
+			editinfo(data) {
+				this.$nextTick(() => {
+					console.log('data11111', data);
+					this.leixing = data.leixing
+					this.jingyan = data.jingyan
+					this.jineng = data.jineng
+					this.zhuangtai = data.zhuangtai
+					this.jibiexinzi = data.jibiexinzi
+					this.qiwangxinzi = data.qiwangxinzi
+					this.jingli = data.jingli
+
+				})
+			},
+
 			// 点击完成按钮的时候触发,
 			xinziJibieChange(e) {
 				//通过e.detail.value获取值,获取的是自定义数据的下标
 				const index = e.detail.value
 				this.jibiexinzi = this.xinziJibieList[index]
-				console.log('jibiexinzi',this.jibiexinzi);
+				console.log('jibiexinzi', this.jibiexinzi);
 			},
 			xinziJibieCancel(e) {
 				console.log("您已取消选择");
 			},
-			jingyanChange(e){
+			jingyanChange(e) {
 				const index = e.detail.value
 				this.jingyan = this.jingyanList[index]
 			},
-			jingyanCancel(){
+			jingyanCancel() {
 				this.jingyanIndex = 0
 			},
-			getLeixing() {
-				getJiazhengLeixing({}).then(res => {
+			getJineng() {
+				getJiazhengJineng({}).then(res => {
 					this.skillList = this.dataConversionObject(res.data)
-					console.log('this.skillList', this.skillList);
+
 				}).catch(error => {
 					console.error('获取技能类型失败:', error);
 				});
 			},
-			getJineng() {
-				getJiazhengJineng({}).then(res => {
+			getLeixing() {
+				getJiazhengLeixing({}).then(res => {
 					this.typeList = this.dataConversionObject(res.data)
-					console.log('this.typeList', this.typeList);
+
 				}).catch(error => {
 					console.error('获取技能类型失败:', error);
 				});
@@ -149,9 +175,9 @@
 				return newList
 			},
 			selectChangeType(data) {
-			//	console.log('typeData', data);
-				this.leixing =this.dataConversionArray(data).join(',') 
-				console.log('this.leixing',this.leixing);
+				//	console.log('typeData', data);
+				this.leixing = this.dataConversionArray(data).join(',')
+				console.log('this.leixing', this.leixing);
 			},
 			addType(newType) {
 				this.typeList.push({
@@ -159,8 +185,8 @@
 				});
 			},
 			selectChangeSkill(data) {
-				this.jineng =this.dataConversionArray(data).join(',')
-				console.log('this.jineng',this.jineng);
+				this.jineng = this.dataConversionArray(data).join(',')
+				console.log('this.jineng', this.jineng);
 			},
 			addSkill(newSkill) {
 				this.skillList.push({
@@ -169,12 +195,12 @@
 			},
 			selectChangeZhuangtai(data) {
 				console.log('zhuangtaiData', data);
-				this.zhuangtai  =data[0].id
+				this.zhuangtai = data[0].id
 				console.log('zhuangtai', this.zhuangtai);
 				// const index = e.detail.value
 				// this.jingyan = this.jingyanList[index]
 			},
-			showAlert(){
+			showAlert() {
 				uni.showToast({
 					title: "请勾选本人同意!",
 					icon: 'none',
@@ -182,28 +208,26 @@
 				})
 				return false
 			},
-			
-			
-			goNext() {
+			yanzheng() {
 				this.formData = {
-					leixing:this.leixing,
-					jingyan:this.jingyan,
-					jineng:this.jineng,
-					zhuangtai:this.zhuangtai,
-					jibiexinzi:this.jibiexinzi,
-					qiwangxinzi:this.qiwangxinzi,
-					jingli:this.jingli,
-					
+					leixing: this.leixing,
+					jingyan: this.jingyan,
+					jineng: this.jineng,
+					zhuangtai: this.zhuangtai,
+					jibiexinzi: this.jibiexinzi,
+					qiwangxinzi: this.qiwangxinzi,
+					jingli: this.jingli,
+
 				}
-				if(!this.formData.leixing){
+				if (!this.formData.leixing) {
 					uni.showToast({
 						title: "请选择类型!",
 						icon: 'none',
 						duration: 2000
 					})
 					return false
-				}	
-				if(!this.formData.jingyan){
+				}
+				if (!this.formData.jingyan) {
 					uni.showToast({
 						title: "请选择经验年限!",
 						icon: 'none',
@@ -211,15 +235,15 @@
 					})
 					return false
 				}
-				if(!this.formData.jineng){
+				if (!this.formData.jineng) {
 					uni.showToast({
 						title: "请选择相应技能!",
 						icon: 'none',
 						duration: 2000
 					})
 					return false
-				}	
-				if(!this.formData.zhuangtai){
+				}
+				if (!this.formData.zhuangtai) {
 					uni.showToast({
 						title: "请选择相应状态!",
 						icon: 'none',
@@ -227,9 +251,22 @@
 					})
 					return false
 				}
-				
-				this.$emit('goNext',this.formData,1);
+				return true
+			},
+			goNext() {
+				let ispass = this.yanzheng()
+				if (ispass) {
+					this.$emit('goNext', this.formData, 1);
+				}
 			},
+			editSave() {
+
+				let ispass = this.yanzheng()
+				console.log('this.formData', this.formData);
+				if (ispass) {
+					this.$emit('editSave', this.formData);
+				}
+			}
 		}
 	};
 </script>

+ 35 - 4
pages/admin/Jiazheng/zhaopianZiliao.vue

@@ -1,7 +1,7 @@
 <template>
 	<view class="jz-content-box">
 		<view class="upload-img-box">
-			<jiazhengUpload @getFileUrl="getTouxiang" bottomText="上传头像和生活照"></jiazhengUpload>
+			<jiazhengUpload @getFileUrl="getTouxiang" :img='icon' bottomText="上传头像和生活照"></jiazhengUpload>
 		</view>
 		<view class="form-label-switch">
 			<view class="phone-form-label"><text class="form-label-require"></text>身份证照片</view>
@@ -9,10 +9,10 @@
 		</view>
 		<view class="ziliao-upload-box">
 			<view class="upload-item-box">
-				<jiazhengUpload @getFileUrl="getSfzTouxiang" bottomText="上传身份证头像面"></jiazhengUpload>
+				<jiazhengUpload @getFileUrl="getSfzTouxiang" :img='idcardUrl1' bottomText="上传身份证头像面"></jiazhengUpload>
 			</view>
 			<view class="upload-item-box">
-				<jiazhengUpload @getFileUrl="getSfzGuohui" bottomText="上传身份证国徽面"></jiazhengUpload>
+				<jiazhengUpload @getFileUrl="getSfzGuohui" :img='idcardUrl2' bottomText="上传身份证国徽面"></jiazhengUpload>
 			</view>
 		</view>
 		<view class="form-label-switch form-top-margin">
@@ -87,7 +87,8 @@
 		</view>
 
 		<view class="page-btn-box">
-			<button type="default" @click="goNext" class="phone-green-btn">下一步</button>
+			<button type="default" v-if="status =='add'" @click="goNext" class="phone-green-btn">下一步</button>
+			<button type="default" v-if="status =='edit'" @click="editSave" class="phone-green-btn">保存</button>
 		</view>
 	</view>
 </template>
@@ -124,6 +125,20 @@
 			jiazhengUpload
 		},
 		methods: {
+			editinfo(data) {
+				console.log('data',data);
+				this.$nextTick(() => {
+				this.icon = data.icon
+				this.idcardUrl1 = data.idcardUrl1
+				this.idcardUrl2 = data.idcardUrl2
+				this.shenghuizhaoList = data.shenghuoUrls ==''?'': data.shenghuoUrls.split(",")
+				this.zigezhaoList = data.zhengshuUrls ==''?'': data.shenghuoUrls.split(",")
+				this.tijianDate = data.tijianDate
+				this.jiankangDate = data.jiankangDate
+				this.tijianUrl = data.tijianUrl
+			
+				})
+			},
 			getTouxiang(data) {
 				this.icon = data
 				console.log('getTouxiang', data);
@@ -189,6 +204,22 @@
 				console.log('this.formData', this.formData);
 				this.$emit('goNext', this.formData, 2);
 			},
+			editSave() {
+				this.formData = {
+					icon: this.icon,
+					idcardUrl1: this.idcardUrl1,
+					idcardUrl2: this.idcardUrl2,
+					tijianbaogaoFlag: this.tijianbaogaoFlag,
+					shenghuoUrls: this.shenghuizhaoList.join(','),
+					zhengshuUrls: this.zigezhaoList.join(','),
+					tijianDate: this.tijianDate,
+					jiankangDate: this.jiankangDate,
+					tijianUrl: this.tijianUrl,
+
+				}
+				console.log('this.formData', this.formData);
+				this.$emit('editSave', this.formData);
+			},
 
 		},
 		created() {

+ 2 - 2
pages/admin/Kaoshi/list.vue

@@ -1,7 +1,7 @@
 <template>
 	<view class="phone-list-page">
 		<view class="icon-title-navBar-box">
-			<!-- <view @click="goUpPage" class="nav-bar-icon"></view> -->
+			<view @click="goUpPage" class="nav-bar-icon"></view>
 			<text class="nav-bar-title">考试管理</text>
 		</view>
 		<!-- 查询职业 -->
@@ -22,7 +22,7 @@
 							<view class="item-card-row">
 								<!-- 考试名 + 等级 -->
 								<view class="ks-item-top">
-									<view class="ks-name">{{item.ksName}}</view>
+									<view class="ks-name">{{item.zyName}}</view>
 									<view class="ks-zyLevelName">{{item.zyLevelName}}</view>
 								</view>
 								<!-- 时间 -->

+ 2 - 2
pages/admin/Kecheng/list.vue

@@ -1,7 +1,7 @@
 <template>
 	<view class="phone-list-page">
 		<view class="icon-title-navBar-box">
-			<!-- <view @click="goUpPage" class="nav-bar-icon"></view> -->
+			<view @click="goUpPage" class="nav-bar-icon"></view>
 			<text class="nav-bar-title">课程管理</text>
 		</view>
 		<!-- 查询职业 -->
@@ -21,7 +21,7 @@
 							<view class="item-card-row">
 								<!-- 数量 -->
 								<view class="ks-item-top">
-									<view>{{item.name}}</view>
+									<view>{{item.zyName}}</view>
 									<view class="ks-zyLevelName">{{item.zyLevelName}}</view>
 								</view>
 								<view class="ks-totalTm">

+ 20 - 21
pages/admin/Kecheng/study.vue

@@ -5,11 +5,11 @@
 			<text class="nav-bar-title">{{name}}</text>
 		</view>
 		<!-- 播放器 -->
-		<videoPlayVue ref="videoRef" class="phone-video-box" v-if="kechengFlag"></videoPlayVue>
+		<videoPlayVue ref="videoRef" class="phone-video-box" v-if="showVideo"></videoPlayVue>
 		<view v-else class="phone-video-box master-image"></view>
 		<!-- 中间区域 -->
 		<view class="kc-info-box">
-			<view>时长:{{period}}分钟</view>
+			<view>时长:{{period}}</view>
 			<view>{{userCount}}人学习</view>
 		</view>
 		<!-- 大纲 -->
@@ -35,7 +35,7 @@
 		useUserCache
 	} from "@/utils/userCache.js"
 	import {
-		formatDuration
+		formatSecondsToCnhms
 	} from "@/utils/common.js"
 
 	export default {
@@ -45,6 +45,7 @@
 		},
 		data() {
 			return {
+				showVideo: false,
 				items: ['目录', '介绍'],
 				colors: ['#007aff', '#4cd964', '#dd524d'],
 				activeColor: '#3fd2a1',
@@ -56,7 +57,10 @@
 				list: [],
 				intro: '',
 				curPlayData: null,
-				kechengFlag: null
+				kechengFlag: null,
+				zyName: '',
+				zyLevelName: '',
+				operId: '', // 课程
 			}
 		},
 		onLoad(options) {
@@ -91,7 +95,7 @@
 					})
 					return;
 				}
-				
+				this.showVideo = true;
 				if (this.curPlayData && this.curPlayData.videoId == data.videoId) {
 					return;
 				}
@@ -103,7 +107,7 @@
 						videoId: data.url,
 						playAuth: res.data,
 						seekTime: '',
-						isPlay: true
+						isPlay: false
 					})
 				})
 			},
@@ -112,11 +116,7 @@
 					// 设置默认展开项
 					this.list[0].open = true;
 					this.list[0].jieList[0].open = true;
-					
 					const kejian = this.list[0].jieList[0].kejianList[0];
-					if (this.kechengFlag == 1) {
-						this.handlePlay(kejian)
-					}	
 				}
 			},
 			init() {
@@ -129,25 +129,24 @@
 						name,
 						kejianUserVo,
 						intro,
-						kechengFlag
+						kechengFlag,
+						operId,
+						zyName,
+						zyLevelName,
 					} = res.data;
 					this.userCount = userCount;
-					this.period = formatDuration(period);
+					this.period = formatSecondsToCnhms(period,true);
 					this.name = name;
+					this.zyName = zyName;
+					this.zyLevelName = zyLevelName;
 					this.kechengFlag = kechengFlag;
-					let testData = JSON.parse(JSON.stringify([...kejianUserVo.zhangList, ...kejianUserVo.zhangList,
-						...kejianUserVo.zhangList
-					]))
-					this.formatData(testData)
-					this.list = testData;
+					this.formatData(kejianUserVo.zhangList)
+					this.list = kejianUserVo.zhangList;
 					this.intro = intro;
-
+					this.operId = operId;
 					
 					this.initFirstVideo();
 
-					uni.setNavigationBarTitle({
-						title: this.name
-					});
 				})
 			}
 		}

+ 2 - 2
pages/admin/Lianxi/list.vue

@@ -1,7 +1,7 @@
 <template>
 	<view class="phone-list-page">
 		<view class="icon-title-navBar-box">
-			<!-- <view @click="goUpPage" class="nav-bar-icon"></view> -->
+			<view @click="goUpPage" class="nav-bar-icon"></view>
 			<text class="nav-bar-title">练习管理</text>
 		</view>
 		<!-- 查询职业 -->
@@ -22,7 +22,7 @@
 							<view class="item-card-row">
 								<!-- 考试名 + 等级 -->
 								<view class="ks-item-top">
-									<view class="ks-name">{{item.lxName}}</view>
+									<view class="ks-name">{{item.zyName}}</view>
 									<view class="ks-zyLevelName">{{item.zyLevelName}}</view>
 								</view>
 								<!-- 时间 -->

+ 7 - 2
pages/admin/ShouYe/shouye.vue

@@ -103,12 +103,12 @@ function tjBtnClick(data){
 		        break;
 		    case 'ks':
 		        uni.redirectTo({
-		        	url:'/pages/admin/Kaoshi/exam'
+		        	url:'/pages/admin/Kaoshi/list'
 		        })
 		        break;
 			case 'cj':
 			    uni.redirectTo({
-			    	url:'/pages/client/Chengji/lxScoreShijuan'
+			    	url:'/pages/admin/Chengji/list'
 			    })
 			    break;
 			case 'kc':
@@ -121,6 +121,11 @@ function tjBtnClick(data){
 			    	url:'/pages/admin/tongzhi/list'
 			    })
 			    break;
+			case 'lc':
+				uni.redirectTo({
+					url:'/pages/admin/Lianxi/list'
+				})
+				break;
 		}
 	}
 </script>

+ 6 - 1
pages/admin/my/index.vue

@@ -52,7 +52,7 @@
 	import passwordDialog from './passwordDialog.vue';
 	import shexiangDialogVue from "@/components/dialog/shexiangDialog.vue";
 	import zhuapaiConfrimVue from "@/components/zhuapaiConfirm/index.vue";
-	
+	import {useIsCanBack} from "@/store/isCanBack.js"
 	let myInfoData = reactive({
 		userImg: '',
 		realName: '',
@@ -66,6 +66,9 @@
 	const zpRef = ref(null);
 	const exitContent = '你确定要执行这个操作吗?';
 	const exitTitle = '退出登录';
+	
+	const store = useIsCanBack();
+	
 	function getMyInit() {
 		getUserInfo();
 	}
@@ -116,8 +119,10 @@
 			uni.reLaunch({
 				url: '/pages/Login/index'
 			});
+			store.setIsCanBack(true)
 		}).catch(err => {
 			toast('退出登录失败,请稍后重试')
+			store.setIsCanBack(false)
 		})
 	}
 	

+ 1 - 1
pages/client/Chengji/ksScoreShijuan.vue

@@ -6,7 +6,7 @@
 			<text class="nav-bar-title">{{data.ksName}}</text>
 		</view>
 		<!-- 上方区域 -->
-		<topCard @openCard="handleOpenCard" :name="data.ksName" :zyLevelName="data.zyLevelName" :userScore="data.userScore" :Score="data.ksScore"></topCard>
+		<topCard v-if="data.ksName" @openCard="handleOpenCard" :name="data.ksName" :zyLevelName="data.zyLevelName" :userScore="data.userScore" :Score="data.ksScore"></topCard>
 		
 			<!-- 段落 -->
 			<view class="score-shiti-content">

+ 10 - 2
pages/client/Kaoshi/exam.vue

@@ -79,11 +79,11 @@
 			</view>
 		</uni-popup>
 		<!-- 摄像头确认 -->
-		<zhuapaiConfirm ref="zhuapaiConfirmRef" @success="zpConfirmSuccess" @error="zpConfirmError"
+		<zhuapaiConfirm ref="zhuapaiConfirmRef" @success="zpConfirmSuccess" @error="zpConfirmError" 
 			@cancel="zpConfirmCancel" key="1"></zhuapaiConfirm>
 		<template v-if="data.zhuapai && data.zhuapai > 0">
 			<!-- 抓拍 -->
-			<zhuapaiVue ref="zhuapaiRef" @error="zpError" @success="zpSuccess" key="2"></zhuapaiVue>
+			<zhuapaiVue ref="zhuapaiRef" @error="zpError" @success="zpSuccess" key="2" @progress="onProgress"></zhuapaiVue>
 		</template>
 	
 		<!-- 切屏 -->
@@ -419,6 +419,14 @@
 
 	// 摄像头抓拍相关功能 end
 	// 摄像头确认相关功能 start
+	function onProgress() {
+		uni.showToast({
+			icon: 'none',
+			title: '摄像头运行环境异常,请重新进入考试',
+			duration: 8000
+		})
+		handleBack();
+	}
 	function zpConfirmSuccess() {
 		initKaoshi();
 	}

+ 12 - 0
store/isCanBack.js

@@ -0,0 +1,12 @@
+import { defineStore } from 'pinia';
+
+export const useIsCanBack = defineStore('isCanBack', {
+	state: () => {
+		return { isCanBack: true };
+	},
+	actions: {
+		setIsCanBack(val) {
+			this.isCanBack = val;
+		},
+	},
+});