dev_202412
yujialong 7 months ago
parent 5f20a498af
commit 50339c1779
  1. 44
      src/pages/match/details/index.vue
  2. 90
      src/pages/match/theoryExam/index.vue

@ -403,23 +403,26 @@
查找不到团队点击 <el-link :underline="false" type="primary" @click="toTeam">创建团队</el-link> 查找不到团队点击 <el-link :underline="false" type="primary" @click="toTeam">创建团队</el-link>
</p> </p>
</el-form> </el-form>
<div class="agreement"> <div class="agree">
<h6>指导老师承诺书</h6> <div class="agreement">
<div class="text"> <h6>指导老师承诺书</h6>
<p class="line">本人自愿参加2024年安徽省大学生金融投资创新大赛工作为进一步提高廉洁自律意识客观公正的履行职责我以参赛团队领队/指导教师的身份和荣誉郑重作出如下承诺</p> <div class="text">
<p class="line">1.尊重大赛组委会及秘书处尊重专家和仲裁尊重其他参赛单位和选手认真指导学生参加安徽省大学生金融投资创新大赛客观公正地履行职责</p> <p class="line">本人自愿参加2024年安徽省大学生金融投资创新大赛工作为进一步提高廉洁自律意识客观公正的履行职责我以参赛团队领队/指导教师的身份和荣誉郑重作出如下承诺</p>
<p class="line">2.遵守道德遵守大赛纪律在确定大赛指导教师身份后至大赛结束前不私下接触其他参赛单位和团队成员专家裁判员仲裁员不参与以大赛名义举办的收费培训不收受他人的财物或其他好处 <p class="line">1.尊重大赛组委会及秘书处尊重专家和仲裁尊重其他参赛单位和选手认真指导学生参加安徽省大学生金融投资创新大赛客观公正地履行职责</p>
</p> <p class="line">
<p class="line">3.遵守公正公平原则不干预裁判员仲裁员等工作影响比赛成绩</p> 2.遵守道德遵守大赛纪律在确定大赛指导教师身份后至大赛结束前不私下接触其他参赛单位和团队成员专家裁判员仲裁员不参与以大赛名义举办的收费培训不收受他人的财物或其他好处
<p class="line">4.不为所带队学生的违纪行为说情解脱</p> </p>
<p class="line">5.不发表不传播没有根据并对大赛产生不利影响的言论</p> <p class="line">3.遵守公正公平原则不干预裁判员仲裁员等工作影响比赛成绩</p>
<p class="line">6.不隐瞒按规定应该回避的事项</p> <p class="line">4.不为所带队学生的违纪行为说情解脱</p>
<p class="line">7.对于涉嫌泄密事宜愿接受协助配合相关部门的监督检查并履行举证义务</p> <p class="line">5.不发表不传播没有根据并对大赛产生不利影响的言论</p>
<p class="line">8.如若发生上述问题自愿承担相关责任</p> <p class="line">6.不隐瞒按规定应该回避的事项</p>
<p class="line">特此承诺</p> <p class="line">7.对于涉嫌泄密事宜愿接受协助配合相关部门的监督检查并履行举证义务</p>
<p class="line">勾选后才可登录和注册</p> <p class="line">8.如若发生上述问题自愿承担相关责任</p>
<el-checkbox class="m-t-10" v-model="agreeCheck">同意我已阅读</el-checkbox> <p class="line">特此承诺</p>
<p class="line">勾选后才可登录和注册</p>
</div>
</div> </div>
<el-checkbox class="m-t-15 m-l-20" v-model="agreeCheck">同意我已阅读</el-checkbox>
</div> </div>
</div> </div>
<span slot="footer" class="dialog-footer"> <span slot="footer" class="dialog-footer">
@ -2201,11 +2204,16 @@ export default {
} }
/deep/.enter-dia { /deep/.enter-dia {
.agree {
width: 500px;
margin-left: 20px;
}
.agreement { .agreement {
width: 600px; max-height: 300px;
padding: 10px 20px; padding: 10px 20px;
margin-left: 20px;
box-shadow: 0 0 7px rgba(235, 235, 235, .8); box-shadow: 0 0 7px rgba(235, 235, 235, .8);
overflow: auto;
h6 { h6 {
font-size: 20px; font-size: 20px;

@ -102,14 +102,16 @@
<!-- 简答题需要展示题干文件及富文本 --> <!-- 简答题需要展示题干文件及富文本 -->
<template v-if="item.questionType === 'essay'"> <template v-if="item.questionType === 'essay'">
<div v-if="ques.stemAttachment" class="m-b-20"> <div v-if="ques.stemAttachment" class="m-b-20">
<el-link class="m-r-10" type="primary">{{ ques.stemAttachment }}</el-link> <el-link class="m-r-10" type="primary" @click="preview(ques.stemAttachment)">{{ ques.fileName ||
<el-button type="primary" size="mini" round @click="download(ques.stemAttachment)">下载</el-button> ques.stemAttachment }}</el-link>
<el-button type="primary" size="mini" round
@click="download(ques.fileName || ques.stemAttachment, ques.stemAttachment)">下载</el-button>
</div> </div>
<UeditorPlus :ref="'essayAnswer' + ques.id" v-model="ques.answer" <UeditorPlus :ref="'essayAnswer' + ques.id" v-model="ques.answer"
@ready="editor => essayAnswerReady(editor, ques)" /> @ready="editor => essayAnswerReady(editor, ques)" />
<div v-if="ques.allowAttachment" class="m-t-20"> <div v-if="ques.allowAttachment" class="m-t-20">
<div v-if="ques.uploadInstructions" class="flex m-b-10 fs-12"> <div v-if="ques.uploadInstructions" class="flex m-b-10 fs-12">
<span>上传附件</span> <span>上传要求说明</span>
<div v-html="ques.uploadInstructions"></div> <div v-html="ques.uploadInstructions"></div>
</div> </div>
<Upload style="max-width: 700px;" accept=".csv,.xlsx,.xls,.docx,.doc,.pdf,.jpg,.png,.zip,.rar,.7z" <Upload style="max-width: 700px;" accept=".csv,.xlsx,.xls,.docx,.doc,.pdf,.jpg,.png,.zip,.rar,.7z"
@ -129,6 +131,12 @@
</li> </li>
</ul> </ul>
</div> </div>
<el-dialog title="图片预览" :visible.sync="previewImgVisible" width="800px" :close-on-click-modal="false">
<el-image style="max-width: 100px; max-height: 100px" :src="previewImg" :preview-src-list="[previewImg]">
</el-image>
</el-dialog>
<PdfDia :key="pdfVisible" :visible.sync="pdfVisible" :src.sync="pdfSrc" />
</div> </div>
</template> </template>
@ -141,11 +149,12 @@ import _ from 'lodash'
import Oss from '@/components/upload/upload.js' import Oss from '@/components/upload/upload.js'
import Upload from '@/components/upload' import Upload from '@/components/upload'
import UeditorPlus from '@/components/ueditorPlus' import UeditorPlus from '@/components/ueditorPlus'
import PdfDia from '@/components/pdf'
import Bus from '@/libs/bus' import Bus from '@/libs/bus'
export default { export default {
components: { components: {
Upload, UeditorPlus Upload, UeditorPlus, PdfDia
}, },
data () { data () {
return { return {
@ -166,6 +175,7 @@ export default {
stageName: '', stageName: '',
paperName: '', paperName: '',
}, },
timer: null,
counterTimer: null, counterTimer: null,
countVal: 0, countVal: 0,
// //
@ -193,12 +203,15 @@ export default {
submited: false, submited: false,
warned: 0, warned: 0,
quesWrapWidth: 0, quesWrapWidth: 0,
previewImgVisible: false,
previewImg: '',
pdfVisible: false,
pdfSrc: '',
}; };
}, },
mounted () { mounted () {
this.$once('hook:beforeDestroy', function () { this.$once('hook:beforeDestroy', function () {
clearInterval(this.counterTimer) clearInterval(this.counterTimer)
this.submited || this.submit(0)
}) })
// websocket // websocket
@ -328,6 +341,12 @@ export default {
n.answered = hasFillLen === inputs.length ? 1 : 0 n.answered = hasFillLen === inputs.length ? 1 : 0
n.partAnswer = hasFillLen && hasFillLen !== inputs.length ? 1 : 0 n.partAnswer = hasFillLen && hasFillLen !== inputs.length ? 1 : 0
clearTimeout(this.timer)
this.timer = setTimeout(() => {
this.submit(0)
this.calcProgress()
}, 500)
text = text.trim() text = text.trim()
// // // //
@ -473,11 +492,13 @@ export default {
ques.answered = 1 ques.answered = 1
this.calcProgress() this.calcProgress()
this.submit(0)
}, },
// //
mulChange (ques) { mulChange (ques) {
ques.answered = ques.questionAnswerVersionsList.some(e => e.answer) ques.answered = ques.questionAnswerVersionsList.some(e => e.answer)
this.calcProgress() this.calcProgress()
this.submit(0)
}, },
// //
@ -487,13 +508,31 @@ export default {
const content = editor.getContent() const content = editor.getContent()
ques.answered = content ? 1 : 0 ques.answered = content ? 1 : 0
ques.answers = content ques.answers = content
this.calcProgress()
clearTimeout(this.timer)
this.timer = setTimeout(() => {
this.submit(0)
this.calcProgress()
}, 500)
}) })
ques.answer && editor.setContent(ques.answer) ques.answer && editor.setContent(ques.answer)
}, },
//
preview (url) {
const ext = url.split('.').pop()
if (Util.isDoc(ext)) {
window.open('https://view.officeapps.live.com/op/view.aspx?src=' + url)
} else if (Util.isImg(ext)) {
this.previewImgVisible = true
this.previewImg = url
} else if (ext === 'pdf') {
this.pdfVisible = true
this.pdfSrc = url
}
},
// //
download (url) { download (name, url) {
Util.downloadFile(url, url) Util.downloadFile(name, url)
}, },
handleRemove (ques) { handleRemove (ques) {
Oss.del(ques.attachmentUrl) Oss.del(ques.attachmentUrl)
@ -531,11 +570,10 @@ export default {
}, },
// //
async submit (isSubmit) { async submit (isSubmit) {
if (this.submiting) return false if (isSubmit && this.submiting) return false
try { try {
this.submiting = true if (isSubmit) this.submiting = true
const form = _.cloneDeep(this.form) const form = _.cloneDeep(this.form)
const now = await Util.getNow()
const { entryTime, curStage } = this const { entryTime, curStage } = this
const ques = [] const ques = []
form.paperOutline.map(e => { form.paperOutline.map(e => {
@ -564,27 +602,31 @@ export default {
}) })
}) })
}) })
const timeSum = Math.ceil((now - entryTime) / 60000) //
const submitTime = Util.formatDate('yyyy-MM-dd hh:mm:ss', now)
// const data = {
await this.$post(this.api[isSubmit ? 'submitTheExamPaper' : 'examPaperRecordCache'], {
competitionId: this.id, competitionId: this.id,
stageId: curStage.stageId, stageId: curStage.stageId,
teamId: this.teamId, teamId: this.teamId,
startTime: Util.formatDate('yyyy-MM-dd hh:mm:ss', entryTime), // startTime: Util.formatDate('yyyy-MM-dd hh:mm:ss', entryTime), //
endTime: this.per ? curStage.endTime : submitTime, //
submitTime, // 3
timeSum,
totalScore: form.score, totalScore: form.score,
paperId: curStage.paperId, paperId: curStage.paperId,
examSubmitJudgeList: ques, examSubmitJudgeList: ques,
}) }
// if (isSubmit) {
const now = isSubmit ? await Util.getNow() : new Date()
const submitTime = Util.formatDate('yyyy-MM-dd hh:mm:ss', now)
data.endTime = this.per ? curStage.endTime : submitTime
data.submitTime = submitTime
data.timeSum = Math.ceil((now - entryTime) / 60000) //
// }
//
await this.$post(this.api[isSubmit ? 'submitTheExamPaper' : 'examPaperRecordCache'], data)
clearInterval(this.counterTimer)
this.submiting = false
this.submited = true
if (isSubmit) { if (isSubmit) {
clearInterval(this.counterTimer)
this.submiting = false
this.submited = true
// //
if (this.id) { if (this.id) {
const time = curStage.resultAnnouncementTime const time = curStage.resultAnnouncementTime
@ -669,7 +711,7 @@ export default {
} }
.type-wrap { .type-wrap {
max-height: calc(100vh - 294); max-height: calc(100vh - 297px);
padding: 10px; padding: 10px;
overflow: auto; overflow: auto;
@ -866,7 +908,7 @@ export default {
} }
.stem { .stem {
max-width: calc(100% - 191px); max-width: calc(100% - 197px);
} }
.fill-input { .fill-input {

Loading…
Cancel
Save