Browse Source

优化卡顿现象

htc 2 days ago
parent
commit
a174bce341
1 changed files with 28 additions and 15 deletions
  1. 28 15
      pagesPublish/questionnaireFill.vue

+ 28 - 15
pagesPublish/questionnaireFill.vue

@@ -8,7 +8,7 @@
 				<view class="top-progress-box">
 					<view class="top-progress-box-current" :style="{'width':(answerNum/list.length*100)+'%'}"></view>
 				</view>
-				<view class="top-progress-num"><span>{{answerNum}}</span>/{{list.length}}</view>
+				<view class="top-progress-num"><span>{{answerCount}}</span>/{{list.length}}</view>
 			</view>
 		</view>
 		<view class="memo adfac" v-if="turnType==='questionnaire'" @click="noticeShow=true">
@@ -88,6 +88,7 @@
 				teamInfo:{},
 				teamScaleData:[],
 				teamLevelData:[],
+				answerCount:0,
 			}
 		},
 		onLoad(options) {
@@ -96,26 +97,35 @@
 			this.teamQuestionnaireId = options.teamQuestionnaireId;
 			this.teamId = options.teamId;
 			this.getList();
-		},
-		computed: {
-			answerNum() {
-				return this.list.filter(l => l?.answer.filter(a => a?.value).length == this.userAnswerTemp.length).length || 0;
-			}
 		},
 		methods:{
 			handleAnswerChange(e) {
-				const item = this.list[e.index];
+				const item = this.list[e.index];
 				if (item) {
+					// 检查这道题在更新前是否已经回答完整
+					const wasAnswered = item.answer.filter(a => a?.value).length === this.userAnswerTemp.length;
+		
 					let answer = JSON.parse(JSON.stringify(item.answer));
-					answer.forEach(a=>{
-						a.value = a.assessmentMethod==e.assessmentMethod?e.value:a.value
-					})
-					this.$set(item, 'answer', answer);
-					if (item.warn) {
-						this.$set(item, 'warn', false);
-					}
+					answer.forEach(a => {
+						a.value = a.assessmentMethod == e.assessmentMethod ? e.value : a.value
+					});
+					this.$set(item, 'answer', answer);
+		
+					// 检查这道题在更新后是否回答完整
+					const isAnsweredNow = item.answer.filter(a => a?.value).length === this.userAnswerTemp.length;
+		
+					// 只有当题目从“未答完”变为“已答完”时,才增加计数
+					if (!wasAnswered && isAnsweredNow) {
+						this.answerCount++;
+					}
+		
+					if (item.warn) {
+						this.$set(item, 'warn', false);
+					}
 				}
-				this.setQuestionnaireCache();
+				this.$nextTick(() => {
+					this.setQuestionnaireCache();
+				});
 			},
 			getList() {
 				let questionnaire = null;
@@ -166,6 +176,9 @@
 								u.answer = _a?(_a.find(a=>a.assessmentMethod==u.assessmentMethod)?.value||''):''
 							})
 						})
+						
+						this.answerCount = this.list.filter(l => l?.answer.filter(a => a?.value).length == this.userAnswerTemp.length).length;
+						this.isLoading = false;
 					})
 					.catch(() => {
 						this.isLoading = false;