cfort пре 2 година
родитељ
комит
bb724bf7d6

+ 3 - 1
src/views/platform/examination/exam/detail.vue

@@ -291,7 +291,7 @@ export default {
                 this.$common.request('sql', sql).then(res => {
                     const { data = [] } = res.variables || {}
                     if (!data.length) {
-                        this.$message.error('未查询到已提交的考试记录,请先完成考试!')
+                        this.$message.warning('未查询到已提交的考试记录,请先完成考试!')
                         this.closeDialog()
                         return
                     }
@@ -377,6 +377,8 @@ export default {
                 }
                 .el-radio__label, .el-checkbox__label {
                     font-size: 16px;
+                    white-space: normal;
+                    line-height: 1.5;
                 }
                 .el-input {
                     margin-bottom: 10px;

+ 26 - 8
src/views/platform/examination/exam/edit.vue

@@ -49,7 +49,13 @@
                     placeholder="请选择考试题库"
                 />
             </el-form-item>
-            <el-form-item label="限考时间:" prop="xian_kao_shi_jian">
+            <el-form-item prop="xian_kao_shi_jian">
+                <template slot="label">
+                    限考时间
+                    <el-tooltip effect="dark" content="设置该考试的提交截至时间。" placement="top">
+                        <i class="el-icon-question question-icon">:</i>
+                    </el-tooltip>
+                </template>
                 <el-radio-group v-model="form.isDateLimit" @change="changeLimit(form.isDateLimit, 'xian_kao_shi_jian', null)">
                     <el-radio label="0">不限</el-radio>
                     <el-radio label="1">限制</el-radio>
@@ -79,7 +85,7 @@
             <el-form-item prop="isCountLimit" class="inline-item">
                 <template slot="label">
                     限考次数
-                    <el-tooltip effect="dark" content="限制是否可重复参加,以及可参加考试的最大次数" placement="top">
+                    <el-tooltip effect="dark" content="限制是否可重复参加,以及可参加考试的最大次数" placement="top">
                         <i class="el-icon-question question-icon">:</i>
                     </el-tooltip>
                 </template>
@@ -100,7 +106,7 @@
             <el-form-item v-if="form.isCountLimit === '0' || form.isCountLimit === '1' && form.xian_kao_ci_shu_ > 1" prop="ji_fen_fang_shi_">
                 <template slot="label">
                     计分方式
-                    <el-tooltip effect="dark" content="仅限考次数大于1时有效" placement="top">
+                    <el-tooltip effect="dark" content="设置对于可重复参加的考试,最终得分的计算方式(仅限考次数大于1时有效)。" placement="top">
                         <i class="el-icon-question question-icon">:</i>
                     </el-tooltip>
                 </template>
@@ -110,7 +116,13 @@
                     <el-radio label="最近得分">最近得分</el-radio>
                 </el-radio-group>
             </el-form-item>
-            <el-form-item label="考试时长:" prop="isTimeLimit" class="inline-item">
+            <el-form-item prop="isTimeLimit" class="inline-item">
+                <template slot="label">
+                    考试时长
+                    <el-tooltip effect="dark" content="设置该考试单次作答的最大时长。" placement="top">
+                        <i class="el-icon-question question-icon">:</i>
+                    </el-tooltip>
+                </template>
                 <el-radio-group v-model="form.isTimeLimit">
                     <el-radio label="0">不限</el-radio>
                     <el-radio label="1">限制</el-radio>
@@ -136,7 +148,13 @@
                     </div>
                 </template>
             </el-form-item>
-            <el-form-item label="达标分值占比:" prop="da_biao_zhan_bi_">
+            <el-form-item prop="da_biao_zhan_bi_">
+                <template slot="label">
+                    达标分值占比
+                    <el-tooltip effect="dark" content="设置该考试的达标分数线占试题总分的百分比。" placement="top">
+                        <i class="el-icon-question question-icon">:</i>
+                    </el-tooltip>
+                </template>
                 <el-input-number
                     v-model="form.da_biao_zhan_bi_"
                     :min="50"
@@ -149,7 +167,7 @@
             <el-form-item prop="yun_xu_bao_ming_">
                 <template slot="label">
                     允许自主报名
-                    <el-tooltip effect="dark" content="限制非参考人员是否可报名参加该考试" placement="top">
+                    <el-tooltip effect="dark" content="限制非本考试的参考人员是否可报名参加该考试" placement="top">
                         <i class="el-icon-question question-icon">:</i>
                     </el-tooltip>
                 </template>
@@ -161,7 +179,7 @@
             <el-form-item prop="guan_lian_id_">
                 <template slot="label">
                     关联培训记录
-                    <el-tooltip effect="dark" content="关联培训记录" placement="top">
+                    <el-tooltip effect="dark" content="关联培训记录" placement="top">
                         <i class="el-icon-question question-icon">:</i>
                     </el-tooltip>
                 </template>
@@ -212,7 +230,7 @@ export default {
             examTypeOptions,
             deptList: deptList.filter(i => i.depth === 4),
             title: this.id ? '编辑考试' : '新建考试',
-            formLabelWidth: '135px',
+            formLabelWidth: '150px',
             dialogVisible: this.visible,
             dialogLoading: false,
             form: {

+ 87 - 20
src/views/platform/examination/question/edit.vue

@@ -57,7 +57,13 @@
                 </el-form-item>
             </div>
             <div class="inline-item" :class="['单选题', '多选题', '判断题'].includes(form.ti_xing_) ? 'mb-20' : ''">
-                <el-form-item label="评分方式:" prop="ping_fen_fang_shi">
+                <el-form-item prop="ping_fen_fang_shi">
+                    <template slot="label">
+                        评分方式
+                        <el-tooltip effect="dark" content="单选、多选和判断题为系统自动评分,其余为手动评分类型,需选择评分人。" placement="top">
+                            <i class="el-icon-question question-icon">:</i>
+                        </el-tooltip>
+                    </template>
                     <el-radio-group v-model="questionRateType" disabled>
                         <el-radio-button label="自动">自动</el-radio-button>
                         <el-radio-button label="手动">手动</el-radio-button>
@@ -87,10 +93,17 @@
                     type="textarea"
                     :maxlength="512"
                     :rows="2"
+                    :autosize="readonly"
                     placeholder="请输入题干内容"
                 />
             </el-form-item>
-            <el-form-item label="标签:" prop="biao_qian_">
+            <el-form-item prop="biao_qian_">
+                <template slot="label">
+                    标签
+                    <el-tooltip effect="dark" content="可为题目设置标签便于后续检索。" placement="top">
+                        <i class="el-icon-question question-icon">:</i>
+                    </el-tooltip>
+                </template>
                 <el-tag
                     v-for="tag in questionTags"
                     :key="tag"
@@ -124,7 +137,17 @@
                     size=""
                 />
             </el-form-item>
-            <div class="inline-item" :class="['单选题', '多选题'].includes(form.ti_xing_) ? '' : 'mb-20'">
+            <el-form-item label="分值:" prop="fen_zhi_" :maxlength="8">
+                <el-input-number
+                    v-model="form.fen_zhi_"
+                    :min="1"
+                    :max="100"
+                    :precision="0"
+                    type="number"
+                    placeholder="请输入题目分值"
+                />
+            </el-form-item>
+            <!-- <div class="inline-item" :class="['单选题', '多选题'].includes(form.ti_xing_) ? '' : 'mb-20'">
                 <el-form-item label="分值:" prop="fen_zhi_" :maxlength="8">
                     <el-input-number
                         v-model="form.fen_zhi_"
@@ -141,19 +164,21 @@
                         <el-radio-button label="图片">图片</el-radio-button>
                     </el-radio-group>
                 </el-form-item>
-            </div>
+            </div> -->
             <template v-if="['单选题', '多选题'].includes(form.ti_xing_)">
                 <el-form-item
                     v-for="(item, index) in optionList"
                     :key="`${item.value}${index}`"
-                    prop="da_an_"
-                    :label="`选项${item.value}:`"
                     class="option-item"
                 >
+                    <template slot="label">
+                        <div class="custom-label">{{ `选项${item.value}:` }}</div>
+                    </template>
                     <el-input
                         v-model="item.content"
                         type="textarea"
                         :rows="1"
+                        :autosize="readonly"
                         placeholder="请输入选项内容,最多可配置8个选项"
                     />
                     <el-radio-group v-if="form.ti_xing_ === '单选题'" v-model="item.radio">
@@ -186,14 +211,16 @@
                 <el-form-item
                     v-for="(item, index) in optionList"
                     :key="`${item.value}${index}`"
-                    prop=""
-                    :label="`答案${index + 1}:`"
                     class="option-item"
                 >
+                    <template slot="label">
+                        <div class="custom-label">{{ `答案${index + 1}:` }}</div>
+                    </template>
                     <el-input
                         v-model="item.content"
                         type="textarea"
                         :rows="1"
+                        :autosize="readonly"
                         placeholder="请输入答案内容,最多可配置20个答案"
                     />
                     <div v-if="!readonly" class="operate-btn">
@@ -217,7 +244,7 @@
                 </el-form-item>
             </template>
             <template v-else-if="form.ti_xing_ === '判断题'">
-                <el-form-item prop="zheng_que_da_an_" label="答案:" required error="请选择正确答案">
+                <el-form-item prop="zheng_que_da_an_" label="答案:">
                     <el-radio-group v-model="form.zheng_que_da_an_">
                         <el-radio-button label="√">√</el-radio-button>
                         <el-radio-button label="×">×</el-radio-button>
@@ -225,17 +252,24 @@
                 </el-form-item>
             </template>
             <template v-else-if="form.ti_xing_ === '简答题'">
-                <el-form-item prop="zheng_que_da_an_" label="答案:" required error="请输入答案内容">
+                <el-form-item prop="zheng_que_da_an_" label="答案:">
                     <el-input
                         v-model="form.zheng_que_da_an_"
                         type="textarea"
                         :rows="4"
+                        :autosize="readonly"
                         placeholder="请输入答案内容"
                     />
                 </el-form-item>
             </template>
             <el-form-item label="备注:" prop="bei_zhu_">
-                <el-input v-model="form.bei_zhu_" type="textarea" :rows="2" placeholder="请输入题目备注信息" />
+                <el-input
+                    v-model="form.bei_zhu_"
+                    type="textarea"
+                    :rows="2"
+                    :autosize="readonly"
+                    placeholder="请输入题目备注信息"
+                />
             </el-form-item>
         </el-form>
         <div slot="footer" class="el-dialog--center">
@@ -347,8 +381,8 @@ export default {
             rules: {
                 ti_gan_: [{ required: true, message: this.$t('validate.required') }],
                 ti_xing_: [{ required: true, message: this.$t('validate.required') }],
-                // da_an_: [{ required: true, message: this.$t('validate.required') }],
-                // zheng_que_da_an_: [{ required: true, message: this.$t('validate.required') }],
+                da_an_: [{ required: true, message: this.$t('validate.required') }],
+                zheng_que_da_an_: [{ required: true, message: this.$t('validate.required') }],
                 xuan_xiang_lei_xi: [{ required: true, message: this.$t('validate.required') }],
                 ping_fen_fang_shi: [{ required: true, message: this.$t('validate.required') }],
                 ping_fen_ren_: [{ required: true, message: this.$t('validate.required') }],
@@ -368,7 +402,7 @@ export default {
     },
     watch: {
         visible: {
-            handler: function (val, oldVal) {
+            handler (val, oldVal) {
                 this.dialogVisible = this.visible
             }
             // immediate: true
@@ -528,12 +562,30 @@ export default {
         },
         handleSubmit (action) {
             this.$refs.form.validate((valid) => {
-                if (valid) {
-                    // 表单验证通过,提交表单
-                    this.submitForm(action)
-                } else {
-                    ActionUtils.saveErrorMessage()
+                if (!valid) {
+                    return ActionUtils.saveErrorMessage()
                 }
+                // 验证选项、答案内容(未被表单校验)
+                const { ti_xing_: questionType } = this.form
+                if (['单选题', '多选题', '填空题'].includes(questionType)) {
+                    const emptyIndex = this.optionList.findIndex(item => !item.content)
+                    if (emptyIndex !== -1) {
+                        const tip1 = `答案${(emptyIndex + 1)}内容为空,请填写后再保存!`
+                        const tip2 = `选项${(String.fromCharCode('A'.charCodeAt(0) + emptyIndex))}内容为空,请填写后再保存!`
+                        return ActionUtils.saveErrorMessage(questionType === '填空题' ? tip1 : tip2)
+                    }
+                    const hasRadioKey = this.optionList.some(item => item.radio)
+                    const hasMultipleKey = this.optionList.some(item => item.checkbox && item.checkbox.length)
+                    const hasKey = {
+                        '单选题': hasRadioKey,
+                        '多选题': hasMultipleKey
+                    }
+                    if (['单选题', '多选题'].includes(questionType) && !hasKey[questionType]) {
+                        return ActionUtils.saveErrorMessage('请至少选择一个正确答案!')
+                    }
+                }
+                // 表单验证通过,提交表单
+                this.submitForm(action)
             })
         },
         getSubmitData () {
@@ -551,6 +603,12 @@ export default {
                 }
                 a3.push(item.content)
             })
+            // console.log(options)
+            // console.log(JSON.stringify(options))
+            // console.log(JSON.parse(JSON.stringify(options)))
+            // return
+            const { first, second } = this.$store.getters.level || {}
+            this.form.di_dian_ = second || first
             this.form.biao_qian_ = this.questionTags.join(',')
             this.form.ping_fen_fang_shi = this.questionRateType
             switch (this.form.ti_xing_) {
@@ -579,11 +637,12 @@ export default {
                     this.form.xuan_xiang_lei_xi = ''
                     this.form.da_an_ = ''
                     break
+                default:
+                    break
             }
         },
         submitForm (action) {
             this.getSubmitData()
-            console.log(this.form)
             const addParams = {
                 tableName: 't_questions',
                 paramWhere: [this.form]
@@ -601,6 +660,7 @@ export default {
             }
             const type = this.id && !this.isCopy ? 'update' : 'add'
             const params = type === 'add' ? addParams : updateParams
+            // console.log(params)
             this.$common.request(type, params).then(() => {
                 this.$message.success(this.id ? '保存题目成功' : '添加题目成功')
                 this.updatePaper()
@@ -751,6 +811,13 @@ export default {
                     }
                 }
             }
+            .custom-label {
+                &::before {
+                    content: '*';
+                    color: #F56C6C;
+                    margin-right: 4px;
+                }
+            }
         }
     }
 </style>

+ 2 - 0
src/views/platform/examination/question/judge.vue

@@ -394,6 +394,8 @@ export default {
                 }
                 .el-radio__label, .el-checkbox__label {
                     font-size: 16px;
+                    white-space: normal;
+                    line-height: 1.5;
                 }
                 .el-input {
                     margin-bottom: 10px;

+ 6 - 3
src/views/platform/examination/questionBank/detail.vue

@@ -73,7 +73,7 @@
                     >
                         <div class="stem">
                             <span>{{ `【${qIndex + 1}】${q.stem}` }}</span>
-                            <el-tag type="info" size="small">{{ `${q.questionScore}分` }}</el-tag>
+                            <el-tag type="primary" size="small">{{ `${q.questionScore}分` }}</el-tag>
                         </div>
                         <div v-if="q.img && q.img.length" class="img">
                             <ibps-image
@@ -87,7 +87,7 @@
                         </div>
                         <div class="answer">
                             <div class="mine">
-                                <div class="title">考生答案:<el-tag type="success" size="small" class="score">{{ !q.score && q.score !== '0' ? '未评分' : `得${q.score}分` }}</el-tag></div>
+                                <div class="title">考生答案:<el-tag :type="!q.score && q.score !== '0' ? 'warning' : 'success'" size="small" class="score">{{ !q.score && q.score !== '0' ? '未评分' : `得${q.score}分` }}</el-tag></div>
                                 <div class="answer-content">
                                     <el-radio-group v-if="q.questionType === '单选题'" :value="q.answer">
                                         <el-radio
@@ -219,7 +219,7 @@ export default {
     },
     data () {
         return {
-            title: '试详情',
+            title: '试详情',
             dialogVisible: this.visible,
             toolbars: [
                 { key: 'cancel', label: '退出' }
@@ -402,6 +402,8 @@ export default {
                 }
                 .el-radio__label, .el-checkbox__label {
                     font-size: 16px;
+                    white-space: normal;
+                    line-height: 1.5;
                 }
                 .el-input {
                     margin-bottom: 10px;
@@ -527,6 +529,7 @@ export default {
             overflow-y: auto;
             top: 60px;
             left: calc(50vw + 540px);
+            padding-right: 8px;
             ::v-deep {
                 .el-timeline {
                     padding-left: 10px;

+ 73 - 18
src/views/platform/examination/questionBank/edit.vue

@@ -39,7 +39,13 @@
                     />
                 </el-select>
             </el-form-item>
-            <el-form-item label="题库状态:" prop="ti_ku_zhuang_tai_">
+            <el-form-item prop="ti_ku_zhuang_tai_">
+                <template slot="label">
+                    题库状态
+                    <el-tooltip effect="dark" content="限制该题库是否可用于创建考试及自主考核。" placement="top">
+                        <i class="el-icon-question question-icon">:</i>
+                    </el-tooltip>
+                </template>
                 <el-radio-group v-model="form.ti_ku_zhuang_tai_">
                     <el-radio label="可用">可用</el-radio>
                     <el-radio label="不可用">不可用</el-radio>
@@ -48,16 +54,22 @@
             <el-form-item prop="shi_fou_gong_kai_">
                 <template slot="label">
                     是否公开
-                    <el-tooltip effect="dark" content="限制该题库是否可自主考核。若您希望该题库仅用于考试中,则需要设置为“否" placement="top">
+                    <el-tooltip effect="dark" content="限制该题库是否可自主考核。若您希望该题库仅用于考试中,则需要设置为“否”。" placement="top">
                         <i class="el-icon-question question-icon">:</i>
                     </el-tooltip>
                 </template>
                 <el-radio-group v-model="form.shi_fou_gong_kai_">
-                    <el-radio label="是">是</el-radio>
+                    <el-radio label="是">是&nbsp;&nbsp;&nbsp;&nbsp;</el-radio>
                     <el-radio label="否">否</el-radio>
                 </el-radio-group>
             </el-form-item>
-            <el-form-item label="所属范围:" prop="suo_shu_fan_wei_" class="inline-item">
+            <el-form-item prop="suo_shu_fan_wei_" class="inline-item">
+                <template slot="label">
+                    所属范围
+                    <el-tooltip effect="dark" content="设置题库的所属范围,组级则需要选择具体的专业组。" placement="top">
+                        <i class="el-icon-question question-icon">:</i>
+                    </el-tooltip>
+                </template>
                 <el-radio-group v-model="form.suo_shu_fan_wei_">
                     <el-radio label="科级">科级</el-radio>
                     <el-radio label="组级">组级</el-radio>
@@ -76,7 +88,13 @@
                     />
                 </el-select>
             </el-form-item>
-            <el-form-item label="限考次数:" prop="isLimit" class="inline-item">
+            <el-form-item prop="isLimit" class="inline-item">
+                <template slot="label">
+                    限考次数
+                    <el-tooltip effect="dark" content="限制是否可重复考核,以及可自主考核的最大次数。" placement="top">
+                        <i class="el-icon-question question-icon">:</i>
+                    </el-tooltip>
+                </template>
                 <el-radio-group v-model="form.isLimit" @change="changeLimit">
                     <el-radio label="0">不限</el-radio>
                     <el-radio label="1">限制</el-radio>
@@ -91,7 +109,13 @@
                     <div class="unit">次</div>
                 </div>
             </el-form-item>
-            <el-form-item label="考试时长:" prop="limitTime" class="inline-item">
+            <el-form-item prop="limitTime" class="inline-item">
+                <template slot="label">
+                    考试时长
+                    <el-tooltip effect="dark" content="设置该题库对于单次用户自主考核的最大考试时长。" placement="top">
+                        <i class="el-icon-question question-icon">:</i>
+                    </el-tooltip>
+                </template>
                 <el-radio-group v-model="form.limitTime">
                     <el-radio label="0">不限</el-radio>
                     <el-radio label="1">限制</el-radio>
@@ -117,7 +141,13 @@
                     </div>
                 </template>
             </el-form-item>
-            <el-form-item label="达标分值占比:" prop="da_biao_zhan_bi_">
+            <el-form-item prop="da_biao_zhan_bi_">
+                <template slot="label">
+                    达标分值占比
+                    <el-tooltip effect="dark" content="设置该题库的达标分数线占题库总分的百分比。" placement="top">
+                        <i class="el-icon-question question-icon">:</i>
+                    </el-tooltip>
+                </template>
                 <el-input-number
                     v-model="form.da_biao_zhan_bi_"
                     :min="50"
@@ -127,7 +157,13 @@
                 />
                 <div class="unit">%</div>
             </el-form-item>
-            <el-form-item label="默认评分人:" prop="ping_fen_ren_">
+            <el-form-item prop="ping_fen_ren_">
+                <template slot="label">
+                    默认评分人
+                    <el-tooltip effect="dark" content="设置该题库试题的默认评分人,该题库下所有未设置评分人的题目都以该评分人为准。" placement="top">
+                        <i class="el-icon-question question-icon">:</i>
+                    </el-tooltip>
+                </template>
                 <!-- <el-cascader v-model="form.ping_fen_ren_" :options="getRaterOptions(userList)" :show-all-levels="false" /> -->
                 <el-select
                     v-model="form.ping_fen_ren_"
@@ -145,7 +181,13 @@
                 </el-select>
             </el-form-item>
             <el-form-item label="题库描述:" prop="miao_shu_">
-                <el-input v-model="form.miao_shu_" type="textarea" :rows="4" placeholder="请输入描述内容" />
+                <el-input
+                    v-model="form.miao_shu_"
+                    type="textarea"
+                    :autosize="readonly"
+                    :rows="4"
+                    placeholder="请输入描述内容"
+                />
             </el-form-item>
         </el-form>
         <div class="question-table">
@@ -155,13 +197,15 @@
                     v-model="quesIdList"
                     size="small"
                     template-key="tmlb"
-                    :dynamic-params="{parent_id_: ''}"
                     multiple
                     type="dialog"
                     class="custom-dialog"
                     placeholder="请选择需要关联的题目信息"
                 />
             </div>
+            <div class="table-title">
+                题库试题信息
+            </div>
             <el-table
                 ref="elTable"
                 :data="questionData"
@@ -266,7 +310,7 @@
                             v-if="!readonly"
                             type="text"
                             size="medium"
-                            @click="handleRowDblclick(scope.row, false)"
+                            @click="handleColumnAction(scope.row, false)"
                         >修改</el-button>
                         <el-button
                             v-if="!readonly"
@@ -280,7 +324,7 @@
                             type="text"
                             style="color: #909399;"
                             size="medium"
-                            @click="handleRowDblclick(scope.row)"
+                            @click="handleColumnAction(scope.row, true)"
                         >详情</el-button>
                     </template>
                 </el-table-column>
@@ -327,13 +371,14 @@ export default {
         }
     },
     data () {
-        const { userList = [], deptList = [], userId } = this.$store.getters || {}
+        const { userList = [], deptList = [], userId, level = {} } = this.$store.getters || {}
         return {
             userList,
             paperTypeOptions,
+            level: level.second || level.first,
             deptList: deptList.filter(i => i.depth === 4),
             title: this.readonly ? '题库明细' : this.id ? '编辑题库' : '创建题库',
-            formLabelWidth: '120px',
+            formLabelWidth: '150px',
             dialogVisible: this.visible,
             dialogLoading: false,
             questionData: [],
@@ -450,7 +495,10 @@ export default {
             const user = userList.find(u => u.userId === userId) || {}
             return user.userName || '-'
         },
-        handleRowDblclick (row, readonly = true) {
+        handleRowDblclick (row) {
+            this.handleColumnAction(row, true)
+        },
+        handleColumnAction (row, readonly) {
             this.quesId = row.quesId
             this.quesReadonly = readonly
             this.isCopy = this.quesIdList.includes(this.quesId)
@@ -513,7 +561,7 @@ export default {
             const sql = `select id_ as quesId, chu_ti_ren_ as creator, bu_men_ as createDept, chu_ti_shi_jian_ as createTime, xu_hao_ as sn, ti_gan_ as content, ti_xing_ as quesType, fu_tu_ as img, xuan_xiang_lei_xi as optionType, da_an_ as answer, zheng_que_da_an_ as rightKey, ping_fen_fang_shi as rateType, ping_fen_ren_ as rater, fen_zhi_ as score, bei_zhu_ as note, xuan_xiang_shu_ as optionCount, zhuang_tai_ as status, biao_qian_ as quesTag, zhuang_tai_ as quesState from t_questions where find_in_set(id_, '${this.quesIdList}')`
             this.$common.request('sql', sql).then(res => {
                 const { data = [] } = res.variables || {}
-                this.questionData = this.questionData.concat(data)
+                this.questionData = data.concat(this.questionData)
             })
         },
         handleSubmit () {
@@ -552,6 +600,7 @@ export default {
         },
         async createQuestion (list, bankId) {
             const paramWhere = list.map(item => ({
+                di_dian_: this.level,
                 parent_id_: bankId,
                 bu_men_: item.createDept || '',
                 chu_ti_ren_: item.creator,
@@ -602,6 +651,7 @@ export default {
                 this.form.kao_shi_shi_chang = (this.form.hours * 60 + this.form.minutes) * 60 * 1000
             }
             this.form.bian_zhi_bu_men_ = this.form.suo_shu_fan_wei_ === '科级' ? '' : this.form.bian_zhi_bu_men_
+            this.form.di_dian_ = this.level
             delete this.form.isLimit
             delete this.form.limitTime
             delete this.form.hours
@@ -686,7 +736,7 @@ export default {
             }
         }
         .paper-form {
-            padding: 20px;
+            padding: 20px 20px 14px 20px;
         }
         .inline-item {
             ::v-deep {
@@ -723,7 +773,7 @@ export default {
                 display: flex;
                 align-items: center;
                 .label {
-                    width: 108px;
+                    width: 138px;
                     padding-right: 12px;
                     text-align: right;
                 }
@@ -732,6 +782,11 @@ export default {
                 }
                 margin-bottom: 10px;
             }
+            .table-title {
+                font-size: 16px;
+                font-weight: 600;
+                margin: 20px 0 10px;
+            }
         }
     }
     .question-info {

+ 63 - 4
src/views/platform/examination/questionBank/test.vue

@@ -91,6 +91,19 @@
                 >{{ index + 1 }}</div>
             </div>
         </div>
+        <div class="tips">
+            <div>温馨提示:最下方题序方块无背景颜色时,表示该题还未作答;<br>题序方块背景颜色为<span style="background: #409EFF;">蓝色</span>时,表示题序对应题母为当前显示的题目;<br>题序方块背景颜色为<span style="background: #E6A23C;">黄色</span>时,表示该题已作答但是未完全答完(如填空题);<br>题序方块背景颜色为<span style="background: #67C23A;">绿色</span>时,表示该题已作答完成。</div>
+        </div>
+        <div slot="title" class="custom-title">
+            <div class="dialog-title">{{ title }}</div>
+            <el-statistic
+                v-if="examData.duration && examData.duration !== '不限'"
+                format="HH时mm分ss妙"
+                :value="countdown"
+                time-indices
+                title="🚩距离考试结束还有:"
+            />
+        </div>
         <div slot="footer" class="el-dialog--center">
             <ibps-toolbar
                 :actions="toolbars"
@@ -119,12 +132,21 @@ export default {
         id: {
             type: String,
             default: ''
+        },
+        examData: {
+            type: Object,
+            default: () => {}
         }
     },
     data () {
         const { userId } = this.$store.getters || {}
+        const { first, second } = this.$store.getters.level || {}
+        const { duration } = this.examData || {}
+        const countdown = duration === '不限' ? 0 : Date.now() + parseInt(duration)
         return {
-            title: '参加考试',
+            countdown,
+            title: this.examData.examName || '参加考试',
+            level: second || first,
             dialogVisible: this.visible,
             loading: false,
             toolbars: [
@@ -355,6 +377,7 @@ export default {
                     const multipleType = ['多选题', '填空题'].includes(item.questionType)
                     const selectType = ['多选题', '单选题'].includes(item.questionType)
                     submitData.push({
+                        di_dian_: this.level,
                         parent_id_: this.id,
                         ti_mu_id_: item.questionId,
                         ti_gan_: item.stem,
@@ -429,6 +452,8 @@ export default {
                 }
                 .el-radio__label, .el-checkbox__label {
                     font-size: 16px;
+                    white-space: normal;
+                    line-height: 1.5;
                 }
                 .el-input {
                     margin-bottom: 10px;
@@ -472,9 +497,6 @@ export default {
                         width: 100%;
                         margin-bottom: 10px;
                     }
-                    .answer {
-
-                    }
                 }
             }
             .question-link {
@@ -523,5 +545,42 @@ export default {
                 }
             }
         }
+        .tips {
+            position: fixed;
+            font-size: 12px;
+            right: calc(1100px + (100% - 1080px) / 2);
+            top: 50%;
+            width: auto;
+            max-width: 200px;
+            transform: translate(0, -50%);
+            background-color: rgba(0, 0, 0, .6);
+            color: #DCDFE6;
+            margin-left: 20px;
+            padding: 10px;
+            border-radius: 5px;
+            > div {
+                line-height: 20px;
+                > span {
+                    border-radius: 2px;
+                    padding: 2px 5px;
+                    margin: 0 2px;
+                }
+            }
+        }
+        .custom-title {
+            display: flex;
+            position: relative;
+            justify-content: center;
+            .dialog-title {
+                font-size: 18px;
+                line-height: 24px;
+            }
+            .el-statistic {
+                position: absolute;
+                width: 200px;
+                right: 0;
+                top: -16px;
+            }
+        }
     }
 </style>