|
@@ -14,19 +14,19 @@
|
|
|
<div class="sheet-groups">
|
|
|
<div v-for="(group,groupIndex) in groups" :key="groupIndex" class="sheet-group-item">
|
|
|
<div v-if="group.type === 'objective'">
|
|
|
- <BaseTitleEditor :ids="'titleEditor' + groupIndex"
|
|
|
- :content="titleContent(groupIndex,group)" ref="objectiveTitleRef"></BaseTitleEditor>
|
|
|
+ <BaseTitleEditor :ids="'titleEditor' + groupIndex" :content="titleContent(groupIndex,group)"
|
|
|
+ ref="objectiveTitleRef"></BaseTitleEditor>
|
|
|
<SheetObjective :items="items" v-show="groupItems.objectiveItems.length"
|
|
|
@onRendered="onRendered"></SheetObjective>
|
|
|
</div>
|
|
|
<div v-else-if="group.type === 'complete'">
|
|
|
- <BaseTitleEditor :ids="'titleEditor' + groupIndex"
|
|
|
- :content="titleContent(groupIndex,group)" ref="completeTitleRef"></BaseTitleEditor>
|
|
|
+ <BaseTitleEditor :ids="'titleEditor' + groupIndex" :content="titleContent(groupIndex,group)"
|
|
|
+ ref="completeTitleRef"></BaseTitleEditor>
|
|
|
<SheetComplete :items="items" v-if="groupItems.completeItems.length"></SheetComplete>
|
|
|
</div>
|
|
|
<div v-else>
|
|
|
- <BaseTitleEditor :ids="'titleEditor' + groupIndex"
|
|
|
- :content="titleContent(groupIndex,group)" ref="subjectiveTitleRef"></BaseTitleEditor>
|
|
|
+ <BaseTitleEditor :ids="'titleEditor' + groupIndex" :content="titleContent(groupIndex,group)"
|
|
|
+ ref="subjectiveTitleRef"></BaseTitleEditor>
|
|
|
<SheetSubjective :items="groupItems.subjectiveItems"
|
|
|
v-show="groupItems.subjectiveItems.length"></SheetSubjective>
|
|
|
</div>
|
|
@@ -37,7 +37,8 @@
|
|
|
</div>
|
|
|
<div class="sheet-right">
|
|
|
<Button @click="goBack">{{ $t('answerSheet.back') }}</Button>
|
|
|
- <Button @click="doDownload" class="btn-download" v-if="curPaper.id" :loading="isLoading">{{ !isLoading ? $t('answerSheet.print') : $t('answerSheet.loading') }}</Button>
|
|
|
+ <Button @click="doDownload" class="btn-download" v-if="curPaper.id"
|
|
|
+ :loading="isLoading">{{ !isLoading ? $t('answerSheet.print') : $t('answerSheet.loading') }}</Button>
|
|
|
<div>
|
|
|
<!-- <p class="sheet-right-title">基础设置</p>
|
|
|
<div>
|
|
@@ -78,23 +79,26 @@
|
|
|
<InputNumber :max="100" :min="0" v-model="addType.everyScore" @on-change="renderAddItem">
|
|
|
</InputNumber>
|
|
|
<span style="margin: 0 10px;">{{ $t('answerSheet.tip5') }}</span>
|
|
|
- <span v-if="activeTab === '0' || activeTab === '1'" >
|
|
|
+ <span v-if="activeTab === '0' || activeTab === '1'">
|
|
|
<span>{{ $t('answerSheet.tip6') }} </span>
|
|
|
<InputNumber :max="8" :min="0" v-model="addType.everyOpts" @on-change="renderAddItem">
|
|
|
</InputNumber>
|
|
|
- <span style="margin: 0 10px;">{{ $t('answerSheet.tip19') }}{{ activeTab === '0' ? $t('answerSheet.tip7') : $t('answerSheet.tip8') }}</span>
|
|
|
+ <span
|
|
|
+ style="margin: 0 10px;">{{ $t('answerSheet.tip19') }}{{ activeTab === '0' ? $t('answerSheet.tip7') : $t('answerSheet.tip8') }}</span>
|
|
|
</span>
|
|
|
<span v-if="activeTab === '3'">
|
|
|
<span>,{{ $t('answerSheet.tip9') }} </span>
|
|
|
- <InputNumber :max="2000" :min="100" v-model="addType.maxWords" :active-change="false"></InputNumber>
|
|
|
+ <InputNumber :max="2000" :min="100" v-model="addType.maxWords" :active-change="false">
|
|
|
+ </InputNumber>
|
|
|
<span> {{ $t('answerSheet.tip10') }} </span>
|
|
|
</span>
|
|
|
<span v-if="activeTab === '4'">
|
|
|
<span> {{ $t('answerSheet.tip9') }} </span>
|
|
|
- <InputNumber :max="30" :min="1" v-model="addType.maxLines" :active-change="false"></InputNumber>
|
|
|
+ <InputNumber :max="30" :min="1" v-model="addType.maxLines" :active-change="false">
|
|
|
+ </InputNumber>
|
|
|
<span> {{ $t('answerSheet.tip11') }}</span>
|
|
|
</span>
|
|
|
-
|
|
|
+
|
|
|
</div>
|
|
|
</div>
|
|
|
<p v-show="indexErr" style="color: red;">* {{ $t('answerSheet.tip12') }}</p>
|
|
@@ -108,7 +112,8 @@
|
|
|
<span> {{ $t('answerSheet.tip5') }} </span>
|
|
|
<span v-if="activeTab === '0' || activeTab === '1'" style="margin-left: 10px;">
|
|
|
<InputNumber :max="100" :min="0" v-model="item.opts"></InputNumber>
|
|
|
- <span> 个{{ activeTab === '0' ? $t('answerSheet.tip7') : $t('answerSheet.tip8') }}</span>
|
|
|
+ <span>
|
|
|
+ 个{{ activeTab === '0' ? $t('answerSheet.tip7') : $t('answerSheet.tip8') }}</span>
|
|
|
</span>
|
|
|
</div>
|
|
|
</div>
|
|
@@ -144,9 +149,9 @@
|
|
|
type: String,
|
|
|
default: "",
|
|
|
},
|
|
|
- paper:{
|
|
|
- type:Object,
|
|
|
- default:() => {}
|
|
|
+ paper: {
|
|
|
+ type: Object,
|
|
|
+ default: () => {}
|
|
|
}
|
|
|
},
|
|
|
components: {
|
|
@@ -159,30 +164,30 @@
|
|
|
},
|
|
|
data(vm) {
|
|
|
return {
|
|
|
- curPaper:{
|
|
|
- id:null
|
|
|
+ curPaper: {
|
|
|
+ id: null
|
|
|
},
|
|
|
indexErr: false,
|
|
|
- sheetId:null,
|
|
|
+ sheetId: null,
|
|
|
addItems: [],
|
|
|
addType: {
|
|
|
startIndex: null,
|
|
|
endIndex: null,
|
|
|
everyScore: null,
|
|
|
everyOpts: null,
|
|
|
- maxWords:800,
|
|
|
- maxLines:10
|
|
|
+ maxWords: 800,
|
|
|
+ maxLines: 10
|
|
|
},
|
|
|
isShowAdd: false,
|
|
|
- isShowErCode:false,
|
|
|
- isShowLines:false,
|
|
|
+ isShowErCode: false,
|
|
|
+ isShowLines: false,
|
|
|
activeTab: '0',
|
|
|
groups: [],
|
|
|
isLoading: false,
|
|
|
isColumn: false,
|
|
|
isRouterAlive: true,
|
|
|
isRender: true,
|
|
|
- isFromExam:false,
|
|
|
+ isFromExam: false,
|
|
|
pages: [],
|
|
|
items: [],
|
|
|
groupItems: {
|
|
@@ -196,12 +201,13 @@
|
|
|
objective: vm.$t('answerSheet.objective'),
|
|
|
complete: vm.$t('answerSheet.complete'),
|
|
|
subjective: vm.$t('answerSheet.subjective')
|
|
|
- }
|
|
|
+ },
|
|
|
+ hasModify:false
|
|
|
};
|
|
|
},
|
|
|
created() {
|
|
|
let routerPaper = this.$route.params.paper || this.paper
|
|
|
- console.log('答题卡路由数据:',routerPaper)
|
|
|
+ console.log('答题卡路由数据:', routerPaper)
|
|
|
this.curPaper = routerPaper
|
|
|
this.isFromExam = Boolean(routerPaper && routerPaper.examCode)
|
|
|
this.$store.commit('clearAllConfig')
|
|
@@ -209,6 +215,7 @@
|
|
|
this.$store.commit('clearFixArr')
|
|
|
this.$store.commit('clearIsNewPage')
|
|
|
this.$store.commit('setPaper', routerPaper)
|
|
|
+ routerPaper.sheet && this.setSheetConfig(routerPaper)
|
|
|
if (routerPaper.item === null) {
|
|
|
this.$store.commit('setCreateModal', 'diy')
|
|
|
} else {
|
|
@@ -222,7 +229,25 @@
|
|
|
|
|
|
},
|
|
|
methods: {
|
|
|
- onTabClick(type){
|
|
|
+
|
|
|
+ async setSheetConfig(routerPaper){
|
|
|
+ let sheetConfig = await this.getSheetConfigById(routerPaper.sheet,routerPaper.code,routerPaper.scope)
|
|
|
+ console.log(sheetConfig)
|
|
|
+ },
|
|
|
+
|
|
|
+ getSheetConfigById(id,code,scope) {
|
|
|
+ return new Promise((r, j) => {
|
|
|
+ this.$api.evaluation.findSheet({
|
|
|
+ "id": id,
|
|
|
+ "code": code.replace('Paper-',''),
|
|
|
+ "scope": scope
|
|
|
+ }).then(res => {
|
|
|
+ r(res.config)
|
|
|
+ })
|
|
|
+ })
|
|
|
+ },
|
|
|
+
|
|
|
+ onTabClick(type) {
|
|
|
this.activeTab = type
|
|
|
},
|
|
|
onAddType(type) {
|
|
@@ -233,8 +258,8 @@
|
|
|
endIndex: null,
|
|
|
everyScore: null,
|
|
|
everyOpts: (type === '0' || type === '1') ? null : 1,
|
|
|
- maxWords:800,
|
|
|
- maxLines:10
|
|
|
+ maxWords: 800,
|
|
|
+ maxLines: 10
|
|
|
}
|
|
|
},
|
|
|
|
|
@@ -247,7 +272,7 @@
|
|
|
this.indexErr = val < this.addType.startIndex || (!val && !this.addType.startIndex)
|
|
|
this.renderAddItem()
|
|
|
},
|
|
|
-
|
|
|
+
|
|
|
/* 点击添加题型 */
|
|
|
doAddType() {
|
|
|
if (this.isAddInfoComplete) {
|
|
@@ -267,75 +292,55 @@
|
|
|
},
|
|
|
/* 打印答题卡 */
|
|
|
doDownload() {
|
|
|
- this.isLoading = true
|
|
|
- this.$EventBus.$emit('onCreateSheet')
|
|
|
- this.doSaveSheet().then(async res => {
|
|
|
- let paperInfo = this.$store.state.answerSheet.paperItem
|
|
|
- this.sheetId = res.config.id
|
|
|
- if(this.isFromExam){
|
|
|
- this.$EventBus.$emit('createSheetId',res.config.id)
|
|
|
- }else{
|
|
|
- // await this.refreshPaperSheet(paperInfo,res.config.id)
|
|
|
- // await this.relatePaperSheet(paperInfo,res.config.id)//绑定废弃
|
|
|
- }
|
|
|
- this.getPdf().then(r => {
|
|
|
- this.isLoading = false
|
|
|
+ if(this.curPaper.sheet && this.hasModify){
|
|
|
+ this.$Modal.confirm({
|
|
|
+ title: '更新提示',
|
|
|
+ content: '检测到答题卡有更新,打印答题卡会覆盖原本答题卡数据,是否继续打印?',
|
|
|
+ onOk: () => {
|
|
|
+ this.isLoading = true
|
|
|
+ this.$EventBus.$emit('onCreateSheet')
|
|
|
+ this.doSaveSheet().then(async res => {
|
|
|
+ let paperInfo = this.$store.state.answerSheet.paperItem
|
|
|
+ this.sheetId = res.config.id
|
|
|
+ if (this.isFromExam) {
|
|
|
+ this.$EventBus.$emit('createSheetId', res.config.id)
|
|
|
+ }
|
|
|
+ this.getPdf().then(r => {
|
|
|
+ this.isLoading = false
|
|
|
+ })
|
|
|
+ }).catch(err => {
|
|
|
+ console.log(err)
|
|
|
+ this.isLoading = false
|
|
|
+ })
|
|
|
+ }
|
|
|
})
|
|
|
- }).catch(err => {
|
|
|
- console.log(err)
|
|
|
- this.isLoading = false
|
|
|
- })
|
|
|
- },
|
|
|
-
|
|
|
- /* 更新试卷的sheet字段 */
|
|
|
- // refreshPaperSheet(paperInfo,sheetId){
|
|
|
- // return new Promise(async (r,j) => {
|
|
|
- // console.log(paperInfo)
|
|
|
- // paperInfo.sheet = sheetId
|
|
|
- // let blobPaper = await this.$evTools.createBlobPaper(paperInfo)
|
|
|
- // console.log(blobPaper)
|
|
|
- // // 首先保存新题目的JSON文件到Blob 然后返回URL链接
|
|
|
- // let paperFile = new File([JSON.stringify(blobPaper)], "index.json");
|
|
|
- // // 获取初始化Blob需要的数据
|
|
|
- // let sasData = paperInfo.scope === 'private' ? await this.$tools
|
|
|
- // .getPrivateSas() : await this.$tools.getSchoolSas()
|
|
|
- // //初始化Blob
|
|
|
- // let containerClient = new blobTool(sasData.url, sasData.name, sasData.sas, paperInfo.scope)
|
|
|
- // containerClient.upload(paperFile,'paper/' + paperInfo.name, undefined, false).then(res => {
|
|
|
- // r(200)
|
|
|
- // }).catch(e => j(e))
|
|
|
- // })
|
|
|
- // },
|
|
|
-
|
|
|
- /**
|
|
|
- * 关联试卷ID和答题卡ID
|
|
|
- * 已废弃liqk
|
|
|
- * */
|
|
|
- relatePaperSheet(paperInfo,sheetId){
|
|
|
- return new Promise((r,j) => {
|
|
|
- this.$api.evaluation.upsertPaperSheet({
|
|
|
- "id": paperInfo.id,
|
|
|
- "code": paperInfo.code.replace('Paper-',''),
|
|
|
- "scope": paperInfo.scope,
|
|
|
- "sheet": sheetId
|
|
|
- }).then(res => {
|
|
|
- if(!res.error){
|
|
|
- r(res)
|
|
|
- }else{
|
|
|
- j(res.error)
|
|
|
+ }else{
|
|
|
+ this.isLoading = true
|
|
|
+ this.$EventBus.$emit('onCreateSheet')
|
|
|
+ this.doSaveSheet().then(async res => {
|
|
|
+ let paperInfo = this.$store.state.answerSheet.paperItem
|
|
|
+ this.sheetId = res.config.id
|
|
|
+ if (this.isFromExam) {
|
|
|
+ this.$EventBus.$emit('createSheetId', res.config.id)
|
|
|
}
|
|
|
- }).catch(err => j(err))
|
|
|
- })
|
|
|
+ this.getPdf().then(r => {
|
|
|
+ this.isLoading = false
|
|
|
+ })
|
|
|
+ }).catch(err => {
|
|
|
+ console.log(err)
|
|
|
+ this.isLoading = false
|
|
|
+ })
|
|
|
+ }
|
|
|
+
|
|
|
},
|
|
|
-
|
|
|
/* 保存答题卡模板数据 */
|
|
|
- doSaveSheet(){
|
|
|
- return new Promise((r,j) => {
|
|
|
+ doSaveSheet() {
|
|
|
+ return new Promise((r, j) => {
|
|
|
let paperInfo = this.$store.state.answerSheet.paperItem
|
|
|
let configParams = this.$store.state.answerSheet.config
|
|
|
let curCode = paperInfo.examCode || paperInfo.code
|
|
|
let curScope = paperInfo.examScope || paperInfo.scope
|
|
|
- if(paperInfo.sheet){
|
|
|
+ if (paperInfo.sheet) {
|
|
|
configParams.id = paperInfo.sheet
|
|
|
}
|
|
|
configParams.pageHeight = Number(configParams.pageHeight.toFixed())
|
|
@@ -343,11 +348,11 @@
|
|
|
configParams.pageCount = this.$store.state.answerSheet.pages
|
|
|
configParams.itemCount = this.$store.state.answerSheet.paperItem.item.length
|
|
|
// configParams.code = curCode.replace('Paper-','')
|
|
|
- configParams.code = curCode.replace('Paper-','').replace('Exam-','') //如果是评测修改code会有问题
|
|
|
+ configParams.code = curCode.replace('Paper-', '').replace('Exam-', '') //如果是评测修改code会有问题
|
|
|
configParams.school = curScope === 'school' ? this.$store.state.userInfo.schoolCode : ''
|
|
|
configParams.scope = curScope
|
|
|
- configParams.creatorId = this.$store.state.userInfo.TEAMModelId
|
|
|
- console.log('答题卡数据参数',configParams)
|
|
|
+ configParams.creatorId = this.$store.state.userInfo.TEAMModelId
|
|
|
+ console.log('答题卡数据参数', configParams)
|
|
|
// r(configParams)
|
|
|
/**
|
|
|
* 这里有参数调整 liqk
|
|
@@ -358,9 +363,9 @@
|
|
|
owner: paperInfo.owner,
|
|
|
sheet: configParams
|
|
|
}).then(res => {
|
|
|
- if(!res.error){
|
|
|
+ if (!res.error) {
|
|
|
r(res)
|
|
|
- }else{
|
|
|
+ } else {
|
|
|
j(res.error)
|
|
|
}
|
|
|
}).catch(err => j(err))
|
|
@@ -371,13 +376,15 @@
|
|
|
let params = {}
|
|
|
let curEditPaper = localStorage.getItem('c_edit_paper')
|
|
|
// 如果是从新建试卷或者编辑试卷 跳转过来的 则返回过去的时候带上编辑的信息
|
|
|
- if(this.$route.params.paper && (this.fromRouter === 'newSchoolPaper' || this.fromRouter === 'newPrivatePaper') && curEditPaper){
|
|
|
+ if (this.$route.params.paper && (this.fromRouter === 'newSchoolPaper' || this.fromRouter ===
|
|
|
+ 'newPrivatePaper') && curEditPaper) {
|
|
|
params = {
|
|
|
- paper:JSON.parse(curEditPaper)
|
|
|
+ paper: JSON.parse(curEditPaper)
|
|
|
}
|
|
|
}
|
|
|
+ console.log(params)
|
|
|
// 如果是从试卷库预览试卷跳转过来的 就返回试卷库
|
|
|
- if(this.$route.params.paper && (this.fromRouter === 'schoolBank' || this.fromRouter === 'personalBank')){
|
|
|
+ if (this.$route.params.paper && (this.fromRouter === 'schoolBank' || this.fromRouter === 'personalBank')) {
|
|
|
params = {
|
|
|
tabName: 'paper'
|
|
|
}
|
|
@@ -471,9 +478,10 @@
|
|
|
score: addInfo.everyScore,
|
|
|
opts: addInfo.everyOpts,
|
|
|
blankCount: 1,
|
|
|
- maxWords:this.activeTab === '3' ? addInfo.maxWords : null,
|
|
|
- maxLines:this.activeTab === '4' ? addInfo.maxLines : null,
|
|
|
- type: this.activeTab === '0' ? 'single' : this.activeTab === '1' ? 'complete' : 'subjective'
|
|
|
+ maxWords: this.activeTab === '3' ? addInfo.maxWords : null,
|
|
|
+ maxLines: this.activeTab === '4' ? addInfo.maxLines : null,
|
|
|
+ type: this.activeTab === '0' ? 'single' : this.activeTab === '1' ? 'complete' :
|
|
|
+ 'subjective'
|
|
|
})
|
|
|
}
|
|
|
this.addItems = addItems
|
|
@@ -482,16 +490,16 @@
|
|
|
mounted: function() {
|
|
|
this.doRender()
|
|
|
this.$EventBus.$off('deleteItem')
|
|
|
- this.$EventBus.$on('deleteItem',val => {
|
|
|
+ this.$EventBus.$on('deleteItem', val => {
|
|
|
console.log(val)
|
|
|
- if(val === '0'){
|
|
|
+ if (val === '0') {
|
|
|
this.groups = this.groups.filter(i => i.type !== 'complete')
|
|
|
this.items = this.items.filter(i => i.type !== 'complete')
|
|
|
- }else if (val === 'objective'){
|
|
|
+ } else if (val === 'objective') {
|
|
|
let objectiveTypes = ["single", "multiple", "judge"];
|
|
|
this.groups = this.groups.filter(i => i.type !== 'objective')
|
|
|
this.items = this.items.filter(i => !objectiveTypes.includes(i.type))
|
|
|
- }else{
|
|
|
+ } else {
|
|
|
this.groups = this.groups.filter(i => i.items.length)
|
|
|
}
|
|
|
this.$EventBus.$emit('doRefresh')
|
|
@@ -499,14 +507,20 @@
|
|
|
this.$EventBus.$off('titleMovePage')
|
|
|
this.$EventBus.$on('titleMovePage', val => {
|
|
|
this.$nextTick(() => {
|
|
|
- console.log('有标题跨页',val)
|
|
|
- if(val.type === 'subjective'){
|
|
|
- this.$refs.subjectiveTitleRef[0].$el.style.marginTop = SVG_BORDER_MB * 2 + val.height + 40 + 'px'
|
|
|
- }else{
|
|
|
- this.$refs.completeTitleRef[0].$el.style.marginTop = SVG_BORDER_MB * 2 + val.height + 40 + 'px'
|
|
|
+ console.log('有标题跨页', val)
|
|
|
+ if (val.type === 'subjective') {
|
|
|
+ this.$refs.subjectiveTitleRef[0].$el.style.marginTop = SVG_BORDER_MB * 2 + val
|
|
|
+ .height + 40 + 'px'
|
|
|
+ } else {
|
|
|
+ this.$refs.completeTitleRef[0].$el.style.marginTop = SVG_BORDER_MB * 2 + val
|
|
|
+ .height + 40 + 'px'
|
|
|
}
|
|
|
})
|
|
|
})
|
|
|
+ this.$EventBus.$off("hasDrag")
|
|
|
+ this.$EventBus.$on("hasDrag", () => {
|
|
|
+ this.hasModify = true
|
|
|
+ });
|
|
|
},
|
|
|
beforeRouteEnter(to, from, next) {
|
|
|
next(vm => {
|
|
@@ -514,9 +528,10 @@
|
|
|
})
|
|
|
},
|
|
|
beforeRouteLeave(to, from, next) {
|
|
|
- if(to.name === 'newSchoolPaper' || to.name === 'newPrivatePaper' || to.name === 'schoolBank' || to.name === 'personalBank'){
|
|
|
+ if (to.name === 'newSchoolPaper' || to.name === 'newPrivatePaper' || to.name === 'schoolBank' || to.name ===
|
|
|
+ 'personalBank') {
|
|
|
// 设置下一个路由的 meta
|
|
|
- to.meta.isKeep = true; // 让 A 缓存,即不刷新
|
|
|
+ to.meta.isKeep = true; // 让 A 缓存,即不刷新
|
|
|
}
|
|
|
next();
|
|
|
},
|
|
@@ -543,7 +558,8 @@
|
|
|
return (groupIndex, group) => {
|
|
|
let totalScore = group.items.length ? group.items.map(i => i.score).reduce((a, b) => a + b) : 0
|
|
|
let type = this.typeList[group.type]
|
|
|
- return this.numberConvertToUppercase(groupIndex + 1) + '、' + type + this.$t('answerSheet.tip16') + group.items.length +
|
|
|
+ return this.numberConvertToUppercase(groupIndex + 1) + '、' + type + this.$t('answerSheet.tip16') +
|
|
|
+ group.items.length +
|
|
|
this.$t('answerSheet.tip17') + totalScore + this.$t('answerSheet.tip18')
|
|
|
}
|
|
|
}
|