| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380 | 
							- <script>
 
-     var valid_result = false
 
-     {notempty name="row"}
 
-     var row = {:json_encode($row, 256)};
 
-     {else/}
 
-     var row = {};
 
-     {/notempty}
 
-     var app = new Vue({
 
-         el: '#app',
 
-         data: {
 
-             title: '',
 
-             kind: 'SINGLE',
 
-             // 填空题
 
-             fillOptions: [],
 
-             showTitleEditor: true,
 
-             showTitleFill: true,
 
-             // 简答题
 
-             shortOptions: [],
 
-             // 简答题分数设置
 
-             shortScoreDialogVisible: false,
 
-             shortScoreConfig: [],
 
-             shortScoreIndex: 0,
 
-             // 材料题
 
-             materialQuestions: [],
 
-             materialSummary: {
 
-                 // 总分数及题数
 
-                 total_score: 0,
 
-                 total_quantity: 0,
 
-                 // 各类题目的分数及题数
 
-                 judge_quantity: 0,
 
-                 judge_score: 0,
 
-                 single_quantity: 0,
 
-                 single_score: 0,
 
-                 multi_quantity: 0,
 
-                 multi_score: 0,
 
-                 fill_quantity: 0,
 
-                 fill_score: 0,
 
-                 short_quantity: 0,
 
-                 short_score: 0,
 
-             },
 
-             // 是否属于材料题的子题
 
-             isMaterialChild: 0,
 
-         },
 
-         created() {
 
-             // 编辑时初始化数据
 
-             if (row) {
 
-                 this.title = row.title
 
-                 this.kind = row.kind
 
-                 this.isMaterialChild = row.is_material_child
 
-                 this.hideMaterial()
 
-                 // this.changeIsMaterialChild({target: {value: row.is_material_child}})
 
-                 console.log('row.answer', row.answer)
 
-                 switch (row.kind) {
 
-                     // 填空题
 
-                     case 'FILL':
 
-                         this.fillOptions = JSON.parse(row.answer)
 
-                         console.log('fillOptions', this.fillOptions)
 
-                         break
 
-                     // 简答题
 
-                     case 'SHORT':
 
-                         let shortAnswer = JSON.parse(row.answer)
 
-                         this.shortOptions = shortAnswer.config
 
-                         $('#c-short_answer').html(shortAnswer.answer)
 
-                         console.log('shortOptions', this.shortOptions)
 
-                         break
 
-                     // 材料题
 
-                     case 'MATERIAL':
 
-                         let material_questions = row.material_questions ? row.material_questions : []
 
-                         for (let i = 0; i < material_questions.length; i++) {
 
-                             if (material_questions[i].question) {
 
-                                 material_questions[i].id = material_questions[i].question.id
 
-                                 material_questions[i].kind = material_questions[i].question.kind
 
-                                 material_questions[i].title = material_questions[i].question.title
 
-                                 material_questions[i].cates = material_questions[i].question.cates
 
-                             }
 
-                         }
 
-                         this.materialQuestions = material_questions
 
-                         this.statisticsMaterialSummary()
 
-                         console.log('materialQuestions', this.materialQuestions)
 
-                         break
 
-                     default:
 
-                         break
 
-                 }
 
-                 this.hideTitle(row.kind)
 
-             } else {
 
-               // $('#c-title2').hide()
 
-               this.showTitleFill = false
 
-             }
 
-         },
 
-         methods: {
 
-             // 修改是否属于材料题的子题
 
-             changeIsMaterialChild(e) {
 
-                 console.log('changeKind', e.target.value)
 
-                 this.isMaterialChild = e.target.value
 
-                 this.hideMaterial()
 
-             },
 
-             // 修改题型
 
-             changeKind(e) {
 
-                 console.log('changeKind', e.target.value)
 
-                 this.kind = e.target.value
 
-                 this.hideMaterial()
 
-                 this.hideTitle(this.kind)
 
-             },
 
-             // 隐藏材料题子题相关的内容
 
-             hideMaterial() {
 
-                 if (this.isMaterialChild == 1) {
 
-                     $('label[for="row[kind]-MATERIAL"]').hide()
 
-                     $('.is_material_child').show()
 
-                 } else {
 
-                     $('label[for="row[kind]-MATERIAL"]').show()
 
-                     $('.is_material_child').hide()
 
-                 }
 
-                 if (this.kind == 'MATERIAL') {
 
-                     $('#is_material_child').hide()
 
-                 } else {
 
-                     $('#is_material_child').show()
 
-                 }
 
-             },
 
-             // 隐藏题目
 
-             hideTitle(kind) {
 
-               if (kind == 'FILL') {
 
-                 this.showTitleEditor = false
 
-                 this.showTitleFill = true
 
-                 $('#c-title1').hide()
 
-                 $('#c-title2').show()
 
-               } else {
 
-                 this.showTitleEditor = true
 
-                 this.showTitleFill = false
 
-                 $('#c-title1').show()
 
-                 $('#c-title2').hide()
 
-               }
 
-               console.log('hideTitle', kind, this.showTitleEditor, this.showTitleFill)
 
-             },
 
-             // 填空题 - 插入填空位
 
-             addFillOptions() {
 
-                 this.fillOptions.push({
 
-                     answers: [''],
 
-                 })
 
-                 this.title = this.title == undefined ? '' : this.title
 
-                 this.title += '______'// 6个_
 
-             },
 
-             // 填空题 - 填空位添加答案
 
-             addFillAnswer(index) {
 
-                 this.fillOptions[index].answers.push('')
 
-             },
 
-             // 填空题 - 填空位删除答案
 
-             deleteFillAnswer(index, key) {
 
-                 if (this.fillOptions[index].answers.length === 1) {
 
-                     this.fillOptions.splice(index, 1)
 
-                 } else {
 
-                     this.fillOptions[index].answers.splice(key, 1)
 
-                 }
 
-             },
 
-             // 修改题目
 
-             changeTitle(e) {
 
-                 console.log('changeTitle e', e, this.title)
 
-             },
 
-             // 简答题 - 插入答案
 
-             addShortOptions() {
 
-               this.shortOptions.push({
 
-                 answer: '',
 
-                 score: 1,
 
-               })
 
-             },
 
-             // 简答题 - 删除答案
 
-             deleteShortAnswer(index) {
 
-               this.shortOptions.splice(index, 1)
 
-             },
 
-             // 材料题 - 选择题目
 
-             selectMaterialQuestion() {
 
-                 Fast.api.open('exam/question/select?kind=JUDGE,SINGLE,MULTI,FILL,SHORT', '选择题目', {
 
-                     callback: (data) => {
 
-                         console.log('selectMaterialQuestions', data)
 
-                         for (let i = 0; i < data.length; i++) {
 
-                             // 材料题不允许选择材料题
 
-                             if (data[i].kind == 'MATERIAL') {
 
-                                 data.splice(i, 1)
 
-                                 continue;
 
-                             }
 
-                             data[i].score = 1
 
-                         }
 
-                         // 排除已经存在的试题
 
-                         for (let i = 0; i < this.materialQuestions.length; i++) {
 
-                             for (let j = 0; j < data.length; j++) {
 
-                                 if (this.materialQuestions[i].id == data[j].id) {
 
-                                     data.splice(j, 1)
 
-                                 }
 
-                             }
 
-                         }
 
-                         // 合并数组
 
-                         this.materialQuestions = this.materialQuestions.concat(data)
 
-                         // 统计题目信息
 
-                         this.statisticsMaterialSummary()
 
-                     }
 
-                 })
 
-             },
 
-             // 材料题 - 修改分数
 
-             scoreChange(index) {
 
-                 console.log('scoreChange', index)
 
-                 // 统计题目信息
 
-                 this.statisticsMaterialSummary()
 
-             },
 
-             // 材料题 - 打开简答题关键词分数设置
 
-             openShortScoreDialog(row, index) {
 
-                 let answer = row.answer
 
-                 if (typeof answer == 'string') {
 
-                     answer = JSON.parse(answer)
 
-                 }
 
-                 console.log('openShortScoreDialog', row, index, answer)
 
-                 this.shortScoreConfig = [...answer.config]
 
-                 this.shortScoreIndex = index
 
-                 this.shortScoreDialogVisible = true
 
-             },
 
-             // 材料题 - 提交简答题关键词分数设置
 
-             shortScoreSubmit() {
 
-                 console.log('shortScoreSubmit', this.shortScoreConfig, this.materialQuestions[this.shortScoreIndex])
 
-                 let answer = this.materialQuestions[this.shortScoreIndex].answer
 
-                 if (typeof answer == 'string') {
 
-                     answer = JSON.parse(answer)
 
-                 }
 
-                 answer.config = this.shortScoreConfig
 
-                 this.materialQuestions[this.shortScoreIndex].answer = answer
 
-                 this.shortScoreConfig = null
 
-                 this.shortScoreIndex = 0
 
-                 this.shortScoreDialogVisible = false
 
-                 // 统计题目信息
 
-                 this.statisticsMaterialSummary()
 
-             },
 
-             // 材料题 - 删除试题
 
-             deleteQuestion(index) {
 
-                 console.log('deleteQuestion', index)
 
-                 this.materialQuestions.splice(index, 1)
 
-                 // 统计题目信息
 
-                 this.statisticsMaterialSummary()
 
-             },
 
-             // 材料题 - 统计材料题的分数及题数
 
-             statisticsMaterialSummary() {
 
-                 let summary = {
 
-                     // 总分数及题数
 
-                     total_score: 0,
 
-                     total_quantity: 0,
 
-                     // 各类题目的分数及题数
 
-                     judge_quantity: 0,
 
-                     judge_score: 0,
 
-                     single_quantity: 0,
 
-                     single_score: 0,
 
-                     multi_quantity: 0,
 
-                     multi_score: 0,
 
-                     fill_quantity: 0,
 
-                     fill_score: 0,
 
-                     short_quantity: 0,
 
-                     short_score: 0,
 
-                 }
 
-                 for (let i = 0; i < this.materialQuestions.length; i++) {
 
-                     let question = this.materialQuestions[i]
 
-                     summary.total_score += question.score ? question.score : 1
 
-                     summary.total_quantity += 1
 
-                     switch (question.kind) {
 
-                         case 'JUDGE':
 
-                             summary.judge_quantity += 1
 
-                             summary.judge_score += question.score ? question.score : 1
 
-                             break
 
-                         case 'SINGLE':
 
-                             summary.single_quantity += 1
 
-                             summary.single_score += question.score ? question.score : 1
 
-                             break
 
-                         case 'MULTI':
 
-                             summary.multi_quantity += 1
 
-                             summary.multi_score += question.score ? question.score : 1
 
-                             break
 
-                         case 'FILL':
 
-                             summary.fill_quantity += 1
 
-                             summary.fill_score += question.score ? question.score : 1
 
-                             break
 
-                         case 'SHORT':
 
-                             summary.short_quantity += 1
 
-                             summary.short_score += question.score ? question.score : 1
 
-                             break
 
-                     }
 
-                 }
 
-                 this.materialSummary = summary
 
-             },
 
-             // 验证
 
-             valid() {
 
-                 console.log('trigger valid', this.kind)
 
-                 switch (this.kind) {
 
-                     case 'FILL':
 
-                         console.log('this.fillOptions', this.fillOptions)
 
-                         for (let i = 0; i < this.fillOptions.length; i++) {
 
-                             let option = this.fillOptions[i]
 
-                             for (let j = 0; j < option.answers.length; j++) {
 
-                                 let answer = option.answers[j]
 
-                                 console.log('answer', answer)
 
-                                 if (answer.length == 0) {
 
-                                     Fast.api.msg('填空位(' + (i + 1) + ')的第' + (j + 1) + '个答案不能为空')
 
-                                     console.log('填空位(' + (i + 1) + ')的第' + (j + 1) + '个答案不能为空')
 
-                                     valid_result = false
 
-                                     return false
 
-                                 }
 
-                             }
 
-                         }
 
-                         // $('#options_extend').val(encodeURI(JSON.stringify(this.fillOptions)))
 
-                         valid_result = true
 
-                         return true
 
-                     // 材料题
 
-                     case 'MATERIAL':
 
-                         console.log('this.materialQuestions', this.materialQuestions)
 
-                         // if (this.materialQuestions.length == 0) {
 
-                         //     console.log('材料题的子题目不能为空')
 
-                         //     valid_result = false
 
-                         //     return false
 
-                         // }
 
-                         for (let i = 0; i < this.materialQuestions.length; i++) {
 
-                             let question = this.materialQuestions[i]
 
-                             if (question.kind == 'SHORT') {
 
-                                 let answer = question.answer
 
-                                 if (typeof answer == 'string') {
 
-                                     answer = JSON.parse(answer)
 
-                                 }
 
-                                 if (answer.config.length == 0) {
 
-                                     Fast.api.msg('简答题的关键词分数不能为空')
 
-                                     console.log('简答题的关键词分数不能为空')
 
-                                     valid_result = false
 
-                                     return false
 
-                                 }
 
-                             }
 
-                         }
 
-                         // 将试题信息转换为JSON字符串
 
-                         let questions = []
 
-                         for (let i = 0; i < this.materialQuestions.length; i++) {
 
-                             let question = this.materialQuestions[i]
 
-                             questions.push({
 
-                                 id: question.id,
 
-                                 score: question.score,
 
-                                 answer: question.answer,
 
-                                 answer_config: question.answer_config ? question.answer_config : null,
 
-                             })
 
-                         }
 
-                         $('#c-material_questions').val(JSON.stringify(questions))
 
-                         valid_result = true
 
-                         return true
 
-                     default:
 
-                         valid_result = true
 
-                         return true
 
-                 }
 
-             }
 
-         }
 
-     })
 
- </script>
 
- <style>
 
-     .sp_results {
 
-         min-width: 600px;
 
-     }
 
- </style>
 
 
  |