dev_review
yujialong 6 months ago
parent 6747314cc9
commit 45ff98f698
  1. 1
      src/utils/api.js
  2. 5
      src/views/Home.vue
  3. 31
      src/views/match/add/set.vue
  4. 33
      src/views/match/add/step3.vue
  5. 6
      src/views/match/add/template.vue
  6. 71
      src/views/match/manage/theoryReport.vue
  7. 9
      src/views/theoryExam/index.vue

@ -345,6 +345,7 @@ export default {
examPaperList: `exam/exam/paper/examPaperList`,
copyExamPaper: `exam/exam/paper/copyExamPaper`,
getDetailedExamScores: `exam/exam/paper/getDetailedExamScores`,
exportExamPaperReport: `exam/exam/paper/exportExamPaperReport`,
// 赛事内容
addCompetitionContent: `competition/competition/content/addCompetitionContent`,

@ -4,8 +4,7 @@
<v-sidebar></v-sidebar>
<div class="content-box">
<div class="content">
<transition name="move"
mode="out-in">
<transition name="move" mode="out-in">
<!-- <keep-alive> -->
<router-view></router-view>
<!-- </keep-alive> -->
@ -32,7 +31,7 @@ export default {
vSidebar,
},
created () {
this.autoLogout()
// this.autoLogout()
},
methods: {
// ,退

@ -49,11 +49,14 @@
</div>
</div>
</div>
<p v-if="form.originPaperName" style="margin-bottom: 20px">已选试卷{{ form.originPaperName }}</p>
<p v-if="form.paperName" style="margin-bottom: 20px">
已选试卷{{ form.paperName }}
<el-button type="primary" size="mini" @click="previewPaper(form)">预览</el-button>
</p>
<el-table :data="projects" class="table" stripe header-align="center">
<el-table-column width="60" label="选择" align="center">
<template slot-scope="scope">
<el-radio v-model="form.paperId" :label="scope.row.paperId">&nbsp;</el-radio>
<el-radio v-model="form.paperId" :label="scope.row.paperId" @change="paperChange">&nbsp;</el-radio>
</template>
</el-table-column>
<el-table-column type="index" width="60" label="序号" align="center"></el-table-column>
@ -75,6 +78,11 @@
</el-table-column>
<el-table-column prop="updateTime" label="最近编辑时间" align="center" width="170"></el-table-column>
<el-table-column prop="createUser" label="最近编辑人" align="center" width="110"></el-table-column>
<el-table-column label="操作" align="center" width="80">
<template slot-scope="scope">
<el-button type="text" @click="previewPaper(scope.row)">预览</el-button>
</template>
</el-table-column>
</el-table>
<div class="pagination">
<el-pagination background :page-size="pageSize" @current-change="handleCurrentChange"
@ -145,6 +153,7 @@
</template>
<script>
import Setting from '@/setting'
import util from "@/libs/util";
import { Loading } from 'element-ui'
import TestPaperConst from '@/const/testPaper'
@ -259,7 +268,8 @@ export default {
const res = await this.$post(this.api.libraryList, {
pageNum: 1,
pageSize: 10000,
type: 1
type: 1,
isDisable: 0,
})
const { records } = res.pageList
if (records.length) {
@ -281,7 +291,9 @@ export default {
pageSize: this.pageSize,
type: 1,
keyWord: this.keyword,
libraryId: this.libraryId
libraryId: this.libraryId,
isDisable: 0,
status: 1
})
this.projects = res.pageList.records
this.total = res.pageList.total
@ -293,7 +305,7 @@ export default {
cid: this.form.cid,
projectName: this.keyword,
systemId: this.sysId,
permissions: 2
permissions: 2,
})
this.projects = data.records
this.total = data.total
@ -345,6 +357,15 @@ export default {
}
}
},
//
previewPaper (row) {
this.$parent.previewPaper(row)
},
//
paperChange (id) {
const item = this.projects.find(e => e.paperId === id)
if (item) this.form.paperName = item.name
},
//
save () {
const { form } = this

@ -82,6 +82,7 @@
<template v-else>
<el-form-item class="req" label="已选择试卷">
{{ item.paperName }}
<el-button v-if="item.paperName" type="primary" size="mini" @click="previewPaper(item)">预览</el-button>
</el-form-item>
</template>
<el-form-item class="req" prop="resultAnnouncementTime" label="比赛地点">
@ -102,8 +103,7 @@
</div>
</div>
<set v-if="setVisible" :form.sync="form[curStep]" :step1.sync="step1" @hideSet="hideSet" />
<Set v-if="setVisible" :form.sync="form[curStep]" :step1.sync="step1" @hideSet="hideSet" />
<el-dialog title="提示" :visible.sync="tipsVisible" width="500px" :close-on-click-modal="false"
custom-class="tips-dia">
@ -121,11 +121,13 @@
</template>
<script>
import Set from './set'
import Oss from '@/components/upload/upload.js'
import Setting from '@/setting'
import Util from '@/libs/util'
import set from './set'
export default {
props: ['setupId', 'competitionId', 'editing'],
components: { Set },
data () {
return {
headers: {
@ -175,9 +177,6 @@ export default {
tipsVisible: false,
};
},
components: {
set
},
watch: {
// ,
form: {
@ -269,6 +268,19 @@ export default {
this.setVisible = false
this.$parent.showBtns = true
},
//
previewPaper (row) {
let url = `${location.origin}/examination`
if (Setting.isDev) {
url = `http://192.168.31.125:8098/`
} else if (Setting.isPro) {
const { host } = location
url = `https://${host === 'dev.huorantech.cn' ? host : 'www.huorantech.cn'}/examination/`
}
url += `#/testPaper/preview?id=${row.paperId}&token=${sessionStorage.getItem('token')}`
localStorage.setItem('exam_token', sessionStorage.getItem('token'))
window.open(url)
},
//
timeChange (val) {
if (val.length) {
@ -388,6 +400,10 @@ export default {
this.$emit('next', next)
}
},
// websocket
async sendSocket () {
await this.$post(`${this.api.refreshPageNotification}?content=1`)
},
//
save (status, next = 0) {
const { form } = this
@ -486,7 +502,10 @@ export default {
}).then(res => {
this.$parent.hideLoad()
//
status && this.publish(status)
if (status) {
this.publish(status)
this.sendSocket()
}
Util.successMsg((status ? '发布' : '保存') + '成功')
this.updateTime = 0
if (status && this.$parent.$refs.step1.form.completeCompetitionSetup.competitionType) {

@ -7,12 +7,12 @@
<ul class="filter">
<li>
<label>搜索</label>
<el-input style="width: 250px;" placeholder="请输入模板名称" prefix-icon="el-icon-search" v-model="filter.keyWord"
<el-input style="width: 250px;" placeholder="请输入试卷名称" prefix-icon="el-icon-search" v-model="filter.keyWord"
clearable />
</li>
</ul>
<div>
<el-button type="primary" @click="add">新增模板</el-button>
<el-button type="primary" @click="add">自定义理论试卷</el-button>
</div>
</div>
@ -26,6 +26,8 @@
<el-table-column prop="name" label="试卷名称" min-width="140" align="center"></el-table-column>
<el-table-column prop="questionCount" label="试题总数" align="center" min-width="70"></el-table-column>
<el-table-column prop="score" label="总分" align="center" min-width="70"></el-table-column>
<el-table-column prop="questionType" label="题型" align="center" min-width="90"
show-overflow-tooltip></el-table-column>
<el-table-column prop="difficult" label="试卷难度" align="center" min-width="70" sortable="custom">
<template slot-scope="scope">{{ difficults.find(e => e.id === scope.row.difficult) ? difficults.find(e =>
e.id === scope.row.difficult).name : '' }}</template>

@ -34,7 +34,7 @@
</div>
<div class="right" id="right">
<div class="text-right">
<el-button type="primary" @click="exportPage">导出报告</el-button>
<el-button type="primary" :loading="exporting" @click="exportPage">导出报告</el-button>
</div>
<h6 class="r-title">标准成绩报告</h6>
<div class="info">
@ -144,8 +144,10 @@
</div>
<template v-if="item.questionType === 'essay'">
<div v-if="ques.stemAttachment" class="m-b-10">
<el-link class="m-r-10" type="primary">{{ ques.stemAttachment }}</el-link>
<el-button type="primary" size="mini" round @click="download(ques.stemAttachment)">下载</el-button>
<el-link class="m-r-10" type="primary" @click="preview(ques.stemAttachment)">{{ ques.fileName ||
ques.stemAttachment }}</el-link>
<el-button type="primary" size="mini" round
@click="download(ques.fileName || ques.stemAttachment, ques.stemAttachment)">下载</el-button>
</div>
<div v-if="ques.uploadInstructions" class="line m-b-10">
<span>考生上传附件说明</span>
@ -180,7 +182,8 @@
<div v-if="ques.attachmentUrl" class="line">
<span class="line-label">考生上传附件</span>
<el-link class="m-r-10" type="primary">{{ ques.attachmentName }}</el-link>
<el-button type="primary" size="mini" round @click="download(ques)">下载</el-button>
<el-button type="primary" size="mini" round
@click="download(ques.attachmentName, ques.attachmentUrl)">下载</el-button>
</div>
</template>
<template v-else>
@ -219,15 +222,25 @@
</div>
</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>
</template>
<script>
import PdfDia from '@/components/pdf'
import QuesConst from '@/const/ques'
import TestPaperConst from '@/const/testPaper'
import Util from '@/libs/util'
import _ from 'lodash'
export default {
components: {
PdfDia
},
data () {
return {
numToLetter: Util.numToLetter,
@ -268,6 +281,11 @@ export default {
outlines: [],
paper: [],
essayExist: 0,
previewImgVisible: false,
previewImg: '',
pdfVisible: false,
pdfSrc: '',
exporting: false,
};
},
mounted () {
@ -427,33 +445,32 @@ export default {
return stem
}
},
//
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 (ques) {
Util.downloadFile(ques.attachmentName, ques.attachmentUrl)
download (name, url) {
Util.downloadFile(name, url)
},
//
exportPage () {
const form = Object.assign(this.form, this.info)
const list = JSON.parse(JSON.stringify(this.expData))
list.map((e, i) => {
const item = this.userScores.find(n => n.judgmentId == e.judgmentId)
if (item && item.runThePicture) e.runThePicture = item.runThePicture
if (item && item.runThePictureList) e.runThePictureList = item.runThePictureList
e.id = i + 1
// if (e.referenceAnswer && typeof e.referenceAnswer === 'string') e.referenceAnswer = e.referenceAnswer.replace(/<[^>]+>/g, '').replace(/(&nbsp;|&amp;|%s)/g, '').replace(/>/g, '&gt;').replace(/</g, '&lt;')
if (e.answer && typeof e.answer === 'string') e.answer = e.answer.replace(/<[^>]+>/g, '').replace(/(&nbsp;|&amp;|%s)/g, '').replace(/>/g, '&gt;').replace(/</g, '&lt;')
async exportPage () {
this.exporting = true
const res = await this.$get(this.api.exportExamPaperReport, {
reportId: this.reportId
})
for (const i in form) {
if (form[i] && typeof form[i] === 'string') form[i] = form[i].replace(/<[^>]+>/g, '')
}
form.purpose = form.purpose.replace(/<[^>]+>/g, '')
this.$post(this.project ? this.api.exportBankExperimentReport : this.api.exportLabReport, {
...form,
experimentalData: list
}).then(res => {
console.log(res)
Util.downloadFileDirect(`实验报告.docx`, new Blob([res]))
}).catch(res => { })
console.log(res)
Util.downloadFileDirect(`标准实验报告.docx`, new Blob([res]))
this.exporting = false
},
}
};

@ -14,20 +14,21 @@ export default {
};
},
mounted () {
const path = localStorage.getItem('examPath')
let url = `${location.origin}/examination`
const cache = localStorage.getItem('examPath') // localStorage
let url = `${location.origin}/examination/`
if (Setting.isDev) {
url = `http://192.168.31.125:8098/`
} else if (Setting.isPro) {
const { host } = location
url = `https://${host === 'dev.huorantech.cn' ? host : 'www.huorantech.cn'}/examination/`
}
if (path) {
url += `${path}${path.includes('?') ? `&` : '?'}token=${sessionStorage.getItem('token')}`
if (cache) {
url += `#${cache}${cache.includes('?') ? `&` : '?'}token=${sessionStorage.getItem('token')}`
} else {
url += `#/quesBankType?token=${sessionStorage.getItem('token')}`
}
url += `&v=${Date.now()}`
localStorage.setItem('exam_token', sessionStorage.getItem('token'))
this.url = url
},
methods: {

Loading…
Cancel
Save