| 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>
 |