This commit is contained in:
2025-09-25 18:40:05 +08:00
parent 30b3f72b99
commit 3b8a5bc716
4 changed files with 77 additions and 105 deletions
@@ -79,6 +79,7 @@ public class H5QsvQuizController {
Integer maxAttempts = activity.getMaxAttempts();
//题目显示模式
String displayMode = activity.getDisplayMode();
// 重复答题,显示提示
Boolean repeatTips = false;
@@ -7,18 +7,20 @@ layout("/layouts/platform.html"){
<search @search="doSearch">
<search-item label="年度">
<el-date-picker
:clearable="false"
@change="listActivity"
placeholder="选择年"
style="width: 100%"
type="year"
v-model="pageForm.year"
value-format="yyyy"
:clearable="false"
@change="listActivity"
placeholder="选择年"
style="width: 100%"
type="year"
v-model="pageForm.year"
value-format="yyyy"
></el-date-picker>
</search-item>
<search-item label="问卷">
<el-select filterable placeholder="所属问卷" style="width: 100%" @change="doSearch" v-model="pageForm.activityId">
<el-option :label="item.title" :value="item.id" :key="item.id" v-for="item in activityOptions"></el-option>
<el-select filterable placeholder="所属问卷" style="width: 100%" @change="doSearch"
v-model="pageForm.activityId">
<el-option :label="item.title" :value="item.id" :key="item.id"
v-for="item in activityOptions"></el-option>
</el-select>
</search-item>
<search-item label="姓名/工号">
@@ -36,12 +38,12 @@ layout("/layouts/platform.html"){
</search-item>
<search-item label="答题日期">
<el-date-picker
@change="doSearch"
style="width: 100%"
v-model="pageForm.attemptDate"
type="date"
value-format="yyyy-MM-dd"
placeholder="选择答题日期"
@change="doSearch"
style="width: 100%"
v-model="pageForm.attemptDate"
type="date"
value-format="yyyy-MM-dd"
placeholder="选择答题日期"
></el-date-picker>
</search-item>
</search>
@@ -49,7 +51,8 @@ layout("/layouts/platform.html"){
<el-card shadow="never">
<table-tool>
<el-button @click="exportXlsx" icon="el-icon-download" size="small" type="primary" class="mr5">导出xlsx</el-button>
<el-button @click="exportXlsx" icon="el-icon-download" size="small" type="primary" class="mr5">导出xlsx
</el-button>
</table-tool>
<el-table :data="tableData" ref="tableRef" @sort-change="pageOrder">
<el-table-column label="序号" width="50" type="index" :index="indexMethod"></el-table-column>
@@ -59,7 +62,11 @@ layout("/layouts/platform.html"){
<el-table-column label="单位" prop="unitName" sortable></el-table-column>
<el-table-column label="分工会" prop="unionName" sortable></el-table-column>
<el-table-column label="联系方式" prop="mobile" sortable></el-table-column>
<el-table-column label="答题日期" prop="attemptDate" sortable></el-table-column>
<el-table-column label="答题日期" prop="attemptDate" sortable>
<template slot-scope="{row}">
{{$moment(row.attemptDate).format("YYYY-MM-DD")}}
</template>
</el-table-column>
<el-table-column label="得分" prop="totalScore" sortable></el-table-column>
</el-table>
<!--#include("/layouts/pagination.html"){}#-->
@@ -79,7 +86,7 @@ layout("/layouts/platform.html"){
},
methods: {
listActivity() {
this.$axios.post("/platform/qsv/quizRank/listQuiz", { year: this.pageForm.year }).then((res) => {
this.$axios.post("/platform/qsv/quizRank/listQuiz", {year: this.pageForm.year}).then((res) => {
if (res.code === 0) {
this.activityOptions = res.data
if (this.activityOptions.length > 0) {
@@ -76,7 +76,8 @@ layout("/layouts/platform_h5.html"){
<div class="container" :style="{'padding-bottom': answerRecord.isFinish ? 0 : '84px'}">
<van-sticky offset-top="46px">
<!--开启计时 未完成 活动未结束-->
<div class="timer" v-if="activity.timeLimit > 0 && !answerRecord.isFinish && !isEnd">⏰{{ remainingTime }}s</div>
<div class="timer" v-if="activity.timeLimit > 0 && !answerRecord.isFinish && !isEnd">⏰{{ remainingTime }}s
</div>
<h2 class="title">{{ activity.title }}</h2>
</van-sticky>
@@ -92,19 +93,19 @@ layout("/layouts/platform_h5.html"){
<van-checkbox-group v-model="subject.userSelectOptionIds" :ref="'subject'+subject.id">
<van-cell-group>
<van-cell
v-for="(option,index) in subject.options"
clickable
:key="option.id"
:title="option.text"
@click="cellToggle(subject,option.id)"
v-for="(option,index) in subject.options"
clickable
:key="option.id"
:title="option.text"
@click="cellToggle(subject,option.id)"
>
<template #icon>
<van-checkbox
:name="option.id"
:ref="'option'+option.id"
:disabled="answerRecord.isFinish"
:shape="subject.type==='checkbox' ? 'square' : 'round'"
style="margin-right: 10px"
:name="option.id"
:ref="'option'+option.id"
:disabled="answerRecord.isFinish"
:shape="subject.type==='checkbox' ? 'square' : 'round'"
style="margin-right: 10px"
></van-checkbox>
</template>
</van-cell>
@@ -112,7 +113,8 @@ layout("/layouts/platform_h5.html"){
</van-checkbox-group>
</div>
<div class="button-control" v-if="!answerRecord.isFinish">
<van-button type="primary" @click="onSubmit" block :disabled="isEnd">{{isEnd ? '已结束' : '提交'}}</van-button>
<van-button type="primary" @click="onSubmit" block :disabled="isEnd">{{isEnd ? '已结束' : '提交'}}
</van-button>
</div>
</div>
</div>
@@ -157,13 +159,12 @@ layout("/layouts/platform_h5.html"){
methods: {
//获取活动、题目
listSubjects() {
this.$axios.post("/platform/h5/qsv/quiz/subjects", { activityId: this.id }).then((res) => {
this.$axios.post("/platform/h5/qsv/quiz/subjects", {activityId: this.id}).then((res) => {
if (res.code === 0) {
this.activity = res.data.activity
this.subjects = res.data.subjects
this.answerRecordId = res.data.answerRecordId
debugger
if (!this.H5JumpTo && this.activity.repeatable && res.data.repeatTips){
if (!this.H5JumpTo && this.activity.repeatable && res.data.repeatTips) {
// 如果是可重复答题,第二次答题进来弹出提示
vant.Dialog.confirm({
title: '温馨提示',
@@ -185,14 +186,13 @@ layout("/layouts/platform_h5.html"){
//获取回答记录
getAnswerRecord() {
this.$axios.post("/platform/h5/qsv/quiz/answerRecord", { answerRecordId: this.answerRecordId }).then((res) => {
this.$axios.post("/platform/h5/qsv/quiz/answerRecord", {answerRecordId: this.answerRecordId}).then((res) => {
if (res.code === 0) {
this.answerRecord = res.data
if (this.answerRecord.isFinish || this.$moment().unix() > this.$moment(this.activity.endTime)) {
this.$pjaxReplace("/platform/h5/qsv/quiz/result?answerRecordId=" + this.answerRecordId)
}
this.initAnswer()
this.checkTimer()
}
@@ -250,35 +250,10 @@ layout("/layouts/platform_h5.html"){
startInterval()
}
}
// if (this.activity.timeLimit > 0 && !this.isEnd) {
// if (!this.answerRecord.isFinish) {
// this.$dialog
// .alert({
// title: "提示",
// message: "本次答题时间" + this.activity.timeLimit + "分钟,点击确认开始答题"
// })
// .then(() => {
// this.remainingTime = this.activity.timeLimit * 60
// this.timerInterval = setInterval(() => {
// if (this.remainingTime > 0) {
// this.remainingTime--
// } else {
// clearInterval(this.timerInterval)
// const loading = this.$toast.loading({
// message: "答题时间到,自动提交中",
// forbidClick: true
// })
// this.autoSubmit(loading)
// }
// }, 1000)
// })
// }
// }
},
historyScore() {
this.$axios.post("/platform/h5/qsv/quiz/historyScore", { activityId: this.activityId }).then((res) => {
this.$axios.post("/platform/h5/qsv/quiz/historyScore", {activityId: this.activityId}).then((res) => {
if (res.code === 0) {
this.historyScores = res.data
}
@@ -323,52 +298,42 @@ layout("/layouts/platform_h5.html"){
//自动提交
autoSubmit(loading = null) {
this.$axios
.post("/platform/h5/qsv/quiz/submitAnswer", {
answer: JSON.stringify({
activityId: this.id,
answerRecordId: this.answerRecordId,
subjects: this.subjects.map((subject) => {
return {
id: subject.id,
userSelectOptionIds: ["checkbox", "radio"].includes(subject.type) ? subject.userSelectOptionIds : []
}
}),
answerTime: this.answerTime
vant.Dialog.confirm({
title: '温馨提示',
message: '您确定要提交当前题目吗?',
}).then(() => {
this.$axios
.post("/platform/h5/qsv/quiz/submitAnswer", {
answer: JSON.stringify({
activityId: this.id,
answerRecordId: this.answerRecordId,
subjects: this.subjects.map((subject) => {
return {
id: subject.id,
userSelectOptionIds: ["checkbox", "radio"].includes(subject.type) ? subject.userSelectOptionIds : []
}
}),
answerTime: this.answerTime
})
})
})
.then((res) => {
if (res.code === 0) {
this.$toast.success(res.msg)
this.$pjaxReplace("/platform/h5/qsv/quiz/result?answerRecordId=" + this.answerRecordId)
// this.getAnswerRecord()
}
})
.finally(() => {
if (loading) {
loading.clear()
}
})
.then((res) => {
if (res.code === 0) {
this.$toast.success(res.msg)
this.$pjaxReplace("/platform/h5/qsv/quiz/result?answerRecordId=" + this.answerRecordId)
// this.getAnswerRecord()
}
})
.finally(() => {
if (loading) {
loading.clear()
}
})
}).catch(() => {
});
},
async checkGroupPermission() {
const groupId = this.activity.groupId
if (groupId) {
const { code, data } = await this.$axios.post("/open/common/checkGroupPermission", { groupId })
if (code === 0) {
if (!data) {
this.$dialog
.alert({
title: "提示",
message: "您没有权限参与"
})
.then(() => {
location.back()
})
}
}
}
}
},
created() {
if (this.timerInterval) {
@@ -281,7 +281,6 @@ layout("/layouts/platform_h5.html"){
}).then(() => {
pjaxReplace('/platform/h5/qsv/quiz?id=' + this.activity.id + "&H5JumpTo=true")
}).catch(() => {
// on cancel
});
},
getAnswerResult() {