fix: 考试时长bug
This commit is contained in:
parent
28e2cc84e2
commit
6e429e5619
File diff suppressed because one or more lines are too long
|
@ -165,7 +165,7 @@
|
|||
</el-select>
|
||||
</el-form-item>
|
||||
|
||||
<el-form-item label="考试人员" prop="participant_user" style="width:100%" clearable>
|
||||
<!-- <el-form-item label="考试人员" prop="participant_user" style="width:100%" clearable>
|
||||
<el-select v-model="exam.participant_user" multiple filterable placeholder = "请选择人员">
|
||||
<el-option
|
||||
v-for="item in userOptions"
|
||||
|
@ -183,7 +183,7 @@
|
|||
layout="total, sizes, prev, pager, next, jumper"
|
||||
:total="total"
|
||||
></el-pagination>
|
||||
</el-form-item>
|
||||
</el-form-item> -->
|
||||
</el-form>
|
||||
<div style="text-align:right;">
|
||||
<el-button type="danger" @click="dialogVisible=false">取消</el-button>
|
||||
|
|
|
@ -74,22 +74,6 @@
|
|||
</h4>
|
||||
<div v-for="(value, name) in item.options">{{ name }}: {{ value }}</div>
|
||||
</div>
|
||||
|
||||
<div v-for="(item, index) in up_questions">
|
||||
<h4>
|
||||
<el-button
|
||||
type="danger"
|
||||
size="small"
|
||||
@click="handleDeleteUp(index)"
|
||||
icon="el-icon-delete"
|
||||
></el-button>
|
||||
{{ index+1 }} -
|
||||
<el-tag>{{item.type}}</el-tag>
|
||||
{{ item.name }}
|
||||
<span>(正确答案:{{item.right}})</span>
|
||||
</h4>
|
||||
<div v-for="(value, name) in item.options">{{ name }}: {{ value }}</div>
|
||||
</div>
|
||||
</el-col>
|
||||
</el-row>
|
||||
<Questionchoose v-bind:chooseVisible="chooseVisible" @closeDg="closeDg" @choseQ="choseQ"></Questionchoose>
|
||||
|
@ -104,7 +88,6 @@
|
|||
data() {
|
||||
return {
|
||||
questions: [],
|
||||
up_questions: [],
|
||||
Form: {
|
||||
name: "",
|
||||
// workscope: null,
|
||||
|
@ -112,7 +95,6 @@
|
|||
total_score: 0,
|
||||
pass_score: 60,
|
||||
questions_: [],
|
||||
uo_questions: [],
|
||||
danxuan_score: 2,
|
||||
danxuan_count: 0,
|
||||
duoxuan_score: 4,
|
||||
|
@ -157,14 +139,17 @@
|
|||
});
|
||||
},
|
||||
handleUpSuccess(res, file, filelist) {
|
||||
let that =this;
|
||||
if (res.code == 201){
|
||||
// this.impForm.file = res.data.path;
|
||||
this.impForm.doc_path = "C:\\code\\data\\test.docx";
|
||||
console.log(this.impForm)
|
||||
UploadPaper(this.impForm).then(res => {
|
||||
that.impForm.doc_path = "C:\\code\\data\\test.docx";
|
||||
console.log(that.impForm)
|
||||
UploadPaper(that.impForm).then(res => {
|
||||
if (res.code == 200) {
|
||||
this.up_questions == res.data;
|
||||
this.$message({
|
||||
console.log(res.data)
|
||||
that.questions = res.data;
|
||||
|
||||
that.$message({
|
||||
type: "success",
|
||||
message: "上传成功"
|
||||
})
|
||||
|
@ -185,7 +170,7 @@
|
|||
this.submitLoding = false;
|
||||
this.$message({
|
||||
type: "success",
|
||||
message: "编辑成功!"
|
||||
message: "新增成功!"
|
||||
});
|
||||
this.goBack();
|
||||
}).catch(res=>{
|
||||
|
@ -214,9 +199,6 @@
|
|||
handleDelete(val) {
|
||||
this.questions.splice(val, 1);
|
||||
},
|
||||
handleDeleteUp(val) {
|
||||
this.up_questions.splice(val, 1);
|
||||
},
|
||||
calScore() {
|
||||
let danxuan_count = 0,
|
||||
duoxuan_count = 0,
|
||||
|
|
|
@ -15,19 +15,19 @@
|
|||
单选题
|
||||
<span style="color:darkred;font-weight:bold">{{Form.danxuan_count}} 道</span>
|
||||
每道
|
||||
<el-input-number v-model="Form.danxuan_score" :min="0"></el-input-number>分
|
||||
<el-input-number v-model="Form.danxuan_score" :min="0" @change="calScore"></el-input-number>分
|
||||
</div>
|
||||
<div>
|
||||
多选题
|
||||
<span style="color:darkred;font-weight:bold">{{Form.duoxuan_count}} 道</span>
|
||||
每道
|
||||
<el-input-number v-model="Form.duoxuan_score" :min="0"></el-input-number>分
|
||||
<el-input-number v-model="Form.duoxuan_score" :min="0" @change="calScore"></el-input-number>分
|
||||
</div>
|
||||
<div>
|
||||
判断题
|
||||
<span style="color:darkred;font-weight:bold">{{Form.panduan_count}} 道</span>
|
||||
每道
|
||||
<el-input-number v-model="Form.panduan_score" :min="0"></el-input-number>分
|
||||
<el-input-number v-model="Form.panduan_score" :min="0" @change="calScore"></el-input-number>分
|
||||
</div>
|
||||
<div>
|
||||
总分
|
||||
|
@ -125,7 +125,6 @@
|
|||
let that = this;
|
||||
getPaperDetail(this.Form.id).then(response => {
|
||||
that.Form = response.data;
|
||||
debugger;
|
||||
that.questions = response.data.questions_;
|
||||
});
|
||||
},
|
||||
|
@ -135,6 +134,7 @@
|
|||
this.submitLoding = true;
|
||||
updatePaper(this.Form.id,this.Form).then(response => {
|
||||
this.submitLoding = false;
|
||||
this.$forceUpdate();
|
||||
this.$message({
|
||||
type: "success",
|
||||
message: "编辑成功!"
|
||||
|
@ -167,7 +167,7 @@
|
|||
this.questions.splice(val, 1);
|
||||
},
|
||||
calScore() {
|
||||
let that = this;
|
||||
let that = this;
|
||||
let danxuan_count = 0,
|
||||
duoxuan_count = 0,
|
||||
panduan_count = 0,
|
||||
|
@ -188,7 +188,7 @@
|
|||
total_score = that.Form.panduan_score;
|
||||
break;
|
||||
}
|
||||
questions.push({question:that.questions[i].id,total_score:total_score})
|
||||
questions.push({id:that.questions[i].id,total_score:total_score, question:that.questions[i].question})
|
||||
}
|
||||
that.Form.danxuan_count = danxuan_count;
|
||||
that.Form.duoxuan_count = duoxuan_count;
|
||||
|
|
|
@ -1,4 +1,4 @@
|
|||
# Generated by Django 3.0.5 on 2022-10-31 02:26
|
||||
# Generated by Django 3.2.12 on 2024-05-27 08:35
|
||||
|
||||
from django.conf import settings
|
||||
import django.contrib.postgres.fields.jsonb
|
||||
|
@ -12,10 +12,77 @@ class Migration(migrations.Migration):
|
|||
initial = True
|
||||
|
||||
dependencies = [
|
||||
('edu', '0005_certificate_培训结束日期'),
|
||||
migrations.swappable_dependency(settings.AUTH_USER_MODEL),
|
||||
('system', '0023_alter_user_first_name'),
|
||||
]
|
||||
|
||||
operations = [
|
||||
migrations.CreateModel(
|
||||
name='AnswerDetail',
|
||||
fields=[
|
||||
('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
|
||||
('create_time', models.DateTimeField(default=django.utils.timezone.now, help_text='创建时间', verbose_name='创建时间')),
|
||||
('update_time', models.DateTimeField(auto_now=True, help_text='修改时间', verbose_name='修改时间')),
|
||||
('is_deleted', models.BooleanField(default=False, help_text='删除标记', verbose_name='删除标记')),
|
||||
('total_score', models.FloatField(default=0, verbose_name='该题满分')),
|
||||
('user_answer', django.contrib.postgres.fields.jsonb.JSONField(blank=True, null=True)),
|
||||
('score', models.FloatField(default=0, verbose_name='本题得分')),
|
||||
('is_right', models.BooleanField(default=False, verbose_name='是否正确')),
|
||||
],
|
||||
options={
|
||||
'verbose_name': '答题记录',
|
||||
'verbose_name_plural': '答题记录',
|
||||
},
|
||||
),
|
||||
migrations.CreateModel(
|
||||
name='Exam',
|
||||
fields=[
|
||||
('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
|
||||
('create_time', models.DateTimeField(default=django.utils.timezone.now, help_text='创建时间', verbose_name='创建时间')),
|
||||
('update_time', models.DateTimeField(auto_now=True, help_text='修改时间', verbose_name='修改时间')),
|
||||
('is_deleted', models.BooleanField(default=False, help_text='删除标记', verbose_name='删除标记')),
|
||||
('code', models.CharField(blank=True, max_length=100, null=True, unique=True, verbose_name='考试编号')),
|
||||
('name', models.CharField(max_length=100, verbose_name='名称')),
|
||||
('place', models.CharField(blank=True, max_length=100, null=True, verbose_name='考试地点')),
|
||||
('open_time', models.DateTimeField(blank=True, null=True, verbose_name='开启时间')),
|
||||
('close_time', models.DateTimeField(blank=True, null=True, verbose_name='关闭时间')),
|
||||
('proctor_name', models.CharField(blank=True, max_length=100, null=True, verbose_name='监考人姓名')),
|
||||
('proctor_phone', models.CharField(blank=True, max_length=100, null=True, verbose_name='监考人联系方式')),
|
||||
('chance', models.IntegerField(default=3, verbose_name='考试机会')),
|
||||
('certificate', models.BooleanField(default=False, verbose_name='是否生成证书')),
|
||||
('is_open', models.BooleanField(default=True, verbose_name='是否公开')),
|
||||
('course_name', models.ManyToManyField(blank=True, to='edu.Course')),
|
||||
('create_by', models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.SET_NULL, related_name='exam_create_by', to=settings.AUTH_USER_MODEL, verbose_name='创建人')),
|
||||
],
|
||||
options={
|
||||
'abstract': False,
|
||||
},
|
||||
),
|
||||
migrations.CreateModel(
|
||||
name='Paper',
|
||||
fields=[
|
||||
('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
|
||||
('create_time', models.DateTimeField(default=django.utils.timezone.now, help_text='创建时间', verbose_name='创建时间')),
|
||||
('update_time', models.DateTimeField(auto_now=True, help_text='修改时间', verbose_name='修改时间')),
|
||||
('is_deleted', models.BooleanField(default=False, help_text='删除标记', verbose_name='删除标记')),
|
||||
('name', models.CharField(max_length=200, verbose_name='名称')),
|
||||
('limit', models.IntegerField(default=0, verbose_name='限时(分钟)')),
|
||||
('total_score', models.FloatField(default=0, verbose_name='满分')),
|
||||
('pass_score', models.FloatField(default=0, verbose_name='通过分数')),
|
||||
('danxuan_count', models.IntegerField(default=0, verbose_name='单选数量')),
|
||||
('danxuan_score', models.FloatField(default=2, verbose_name='单选分数')),
|
||||
('duoxuan_count', models.IntegerField(default=0, verbose_name='多选数量')),
|
||||
('duoxuan_score', models.FloatField(default=4, verbose_name='多选分数')),
|
||||
('panduan_count', models.IntegerField(default=0, verbose_name='判断数量')),
|
||||
('panduan_score', models.FloatField(default=2, verbose_name='判断分数')),
|
||||
('create_by', models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.SET_NULL, related_name='paper_create_by', to=settings.AUTH_USER_MODEL, verbose_name='创建人')),
|
||||
],
|
||||
options={
|
||||
'verbose_name': '押题卷',
|
||||
'verbose_name_plural': '押题卷',
|
||||
},
|
||||
),
|
||||
migrations.CreateModel(
|
||||
name='Questioncat',
|
||||
fields=[
|
||||
|
@ -25,7 +92,7 @@ class Migration(migrations.Migration):
|
|||
('is_deleted', models.BooleanField(default=False, help_text='删除标记', verbose_name='删除标记')),
|
||||
('name', models.CharField(max_length=200, verbose_name='名称')),
|
||||
('create_by', models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.SET_NULL, related_name='questioncat_create_by', to=settings.AUTH_USER_MODEL, verbose_name='创建人')),
|
||||
('parent', models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.CASCADE, related_name='questioncat_parent', to='exam.Questioncat', verbose_name='父')),
|
||||
('parent', models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.CASCADE, related_name='questioncat_parent', to='exam.questioncat', verbose_name='父')),
|
||||
('update_by', models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.SET_NULL, related_name='questioncat_update_by', to=settings.AUTH_USER_MODEL, verbose_name='最后编辑人')),
|
||||
],
|
||||
options={
|
||||
|
@ -50,7 +117,7 @@ class Migration(migrations.Migration):
|
|||
('enabled', models.BooleanField(default=False, verbose_name='是否启用')),
|
||||
('year', models.IntegerField(blank=True, null=True, verbose_name='真题年份')),
|
||||
('create_by', models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.SET_NULL, related_name='question_create_by', to=settings.AUTH_USER_MODEL, verbose_name='创建人')),
|
||||
('questioncat', models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.SET_NULL, related_name='questioncat', to='exam.Questioncat', verbose_name='所属题库')),
|
||||
('questioncat', models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.SET_NULL, related_name='questioncat', to='exam.questioncat', verbose_name='所属题库')),
|
||||
('update_by', models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.SET_NULL, related_name='question_update_by', to=settings.AUTH_USER_MODEL, verbose_name='最后编辑人')),
|
||||
],
|
||||
options={
|
||||
|
@ -58,4 +125,88 @@ class Migration(migrations.Migration):
|
|||
'verbose_name_plural': '题目',
|
||||
},
|
||||
),
|
||||
migrations.CreateModel(
|
||||
name='PaperQuestion',
|
||||
fields=[
|
||||
('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
|
||||
('create_time', models.DateTimeField(default=django.utils.timezone.now, help_text='创建时间', verbose_name='创建时间')),
|
||||
('update_time', models.DateTimeField(auto_now=True, help_text='修改时间', verbose_name='修改时间')),
|
||||
('is_deleted', models.BooleanField(default=False, help_text='删除标记', verbose_name='删除标记')),
|
||||
('total_score', models.FloatField(default=0, verbose_name='单题满分')),
|
||||
('paper', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to='exam.paper', verbose_name='试卷')),
|
||||
('question', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to='exam.question', verbose_name='试题')),
|
||||
],
|
||||
options={
|
||||
'abstract': False,
|
||||
},
|
||||
),
|
||||
migrations.AddField(
|
||||
model_name='paper',
|
||||
name='questions',
|
||||
field=models.ManyToManyField(through='exam.PaperQuestion', to='exam.Question'),
|
||||
),
|
||||
migrations.AddField(
|
||||
model_name='paper',
|
||||
name='update_by',
|
||||
field=models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.SET_NULL, related_name='paper_update_by', to=settings.AUTH_USER_MODEL, verbose_name='最后编辑人'),
|
||||
),
|
||||
migrations.CreateModel(
|
||||
name='ExamRecord',
|
||||
fields=[
|
||||
('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
|
||||
('create_time', models.DateTimeField(default=django.utils.timezone.now, help_text='创建时间', verbose_name='创建时间')),
|
||||
('update_time', models.DateTimeField(auto_now=True, help_text='修改时间', verbose_name='修改时间')),
|
||||
('is_deleted', models.BooleanField(default=False, help_text='删除标记', verbose_name='删除标记')),
|
||||
('name', models.CharField(max_length=200, verbose_name='名称')),
|
||||
('type', models.CharField(choices=[('自助模考', '自助模考'), ('押卷模考', '押卷模考'), ('正式考试', '正式考试')], default='自助模考', max_length=50, verbose_name='考试类型')),
|
||||
('limit', models.IntegerField(default=0, verbose_name='限时(分钟)')),
|
||||
('total_score', models.FloatField(default=0, verbose_name='总分')),
|
||||
('score', models.FloatField(default=0, verbose_name='得分')),
|
||||
('took', models.IntegerField(default=0, verbose_name='耗时(秒)')),
|
||||
('start_time', models.DateTimeField(verbose_name='开始答题时间')),
|
||||
('end_time', models.DateTimeField(blank=True, null=True, verbose_name='结束答题时间')),
|
||||
('is_pass', models.BooleanField(default=True, verbose_name='是否通过')),
|
||||
('is_submited', models.BooleanField(default=False)),
|
||||
('belong_dept', models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.SET_NULL, related_name='examrecord_belong_dept', to='system.organization', verbose_name='所属部门')),
|
||||
('create_by', models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.SET_NULL, related_name='examrecord_create_by', to=settings.AUTH_USER_MODEL, verbose_name='创建人')),
|
||||
('detail', models.ManyToManyField(through='exam.AnswerDetail', to='exam.Question', verbose_name='答题记录')),
|
||||
('exam', models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.SET_NULL, to='exam.exam', verbose_name='关联的正式考试')),
|
||||
('paper', models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.SET_NULL, to='exam.paper', verbose_name='所用试卷')),
|
||||
('update_by', models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.SET_NULL, related_name='examrecord_update_by', to=settings.AUTH_USER_MODEL, verbose_name='最后编辑人')),
|
||||
],
|
||||
options={
|
||||
'verbose_name': '考试记录',
|
||||
'verbose_name_plural': '考试记录',
|
||||
},
|
||||
),
|
||||
migrations.AddField(
|
||||
model_name='exam',
|
||||
name='paper',
|
||||
field=models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.CASCADE, to='exam.paper', verbose_name='使用的试卷'),
|
||||
),
|
||||
migrations.AddField(
|
||||
model_name='exam',
|
||||
name='participant_dep',
|
||||
field=models.ManyToManyField(blank=True, null=True, related_name='exam_dep', to='system.Organization', verbose_name='考试公司'),
|
||||
),
|
||||
migrations.AddField(
|
||||
model_name='exam',
|
||||
name='participant_user',
|
||||
field=models.ManyToManyField(blank=True, null=True, related_name='exam_user', to=settings.AUTH_USER_MODEL, verbose_name='考试人员'),
|
||||
),
|
||||
migrations.AddField(
|
||||
model_name='exam',
|
||||
name='update_by',
|
||||
field=models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.SET_NULL, related_name='exam_update_by', to=settings.AUTH_USER_MODEL, verbose_name='最后编辑人'),
|
||||
),
|
||||
migrations.AddField(
|
||||
model_name='answerdetail',
|
||||
name='examrecord',
|
||||
field=models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to='exam.examrecord'),
|
||||
),
|
||||
migrations.AddField(
|
||||
model_name='answerdetail',
|
||||
name='question',
|
||||
field=models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to='exam.question'),
|
||||
),
|
||||
]
|
||||
|
|
|
@ -1,153 +0,0 @@
|
|||
# Generated by Django 3.0.5 on 2022-11-07 05:56
|
||||
|
||||
from django.conf import settings
|
||||
import django.contrib.postgres.fields.jsonb
|
||||
from django.db import migrations, models
|
||||
import django.db.models.deletion
|
||||
import django.utils.timezone
|
||||
|
||||
|
||||
class Migration(migrations.Migration):
|
||||
|
||||
dependencies = [
|
||||
migrations.swappable_dependency(settings.AUTH_USER_MODEL),
|
||||
('exam', '0001_initial'),
|
||||
]
|
||||
|
||||
operations = [
|
||||
migrations.CreateModel(
|
||||
name='AnswerDetail',
|
||||
fields=[
|
||||
('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
|
||||
('create_time', models.DateTimeField(default=django.utils.timezone.now, help_text='创建时间', verbose_name='创建时间')),
|
||||
('update_time', models.DateTimeField(auto_now=True, help_text='修改时间', verbose_name='修改时间')),
|
||||
('is_deleted', models.BooleanField(default=False, help_text='删除标记', verbose_name='删除标记')),
|
||||
('user_answer', django.contrib.postgres.fields.jsonb.JSONField(blank=True, null=True)),
|
||||
('score', models.FloatField(default=0, verbose_name='本题得分')),
|
||||
('is_right', models.BooleanField(default=False, verbose_name='是否正确')),
|
||||
],
|
||||
options={
|
||||
'verbose_name': '答题记录',
|
||||
'verbose_name_plural': '答题记录',
|
||||
},
|
||||
),
|
||||
migrations.CreateModel(
|
||||
name='Exam',
|
||||
fields=[
|
||||
('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
|
||||
('create_time', models.DateTimeField(default=django.utils.timezone.now, help_text='创建时间', verbose_name='创建时间')),
|
||||
('update_time', models.DateTimeField(auto_now=True, help_text='修改时间', verbose_name='修改时间')),
|
||||
('is_deleted', models.BooleanField(default=False, help_text='删除标记', verbose_name='删除标记')),
|
||||
('code', models.CharField(blank=True, max_length=100, null=True, unique=True, verbose_name='考试编号')),
|
||||
('name', models.CharField(max_length=100, verbose_name='名称')),
|
||||
('place', models.CharField(blank=True, max_length=100, null=True, verbose_name='考试地点')),
|
||||
('open_time', models.DateTimeField(blank=True, null=True, verbose_name='开启时间')),
|
||||
('close_time', models.DateTimeField(blank=True, null=True, verbose_name='关闭时间')),
|
||||
('proctor_name', models.CharField(blank=True, max_length=100, null=True, verbose_name='监考人姓名')),
|
||||
('proctor_phone', models.CharField(blank=True, max_length=100, null=True, verbose_name='监考人联系方式')),
|
||||
('chance', models.IntegerField(default=3, verbose_name='考试机会')),
|
||||
('create_by', models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.SET_NULL, related_name='exam_create_by', to=settings.AUTH_USER_MODEL, verbose_name='创建人')),
|
||||
],
|
||||
options={
|
||||
'abstract': False,
|
||||
},
|
||||
),
|
||||
migrations.CreateModel(
|
||||
name='Paper',
|
||||
fields=[
|
||||
('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
|
||||
('create_time', models.DateTimeField(default=django.utils.timezone.now, help_text='创建时间', verbose_name='创建时间')),
|
||||
('update_time', models.DateTimeField(auto_now=True, help_text='修改时间', verbose_name='修改时间')),
|
||||
('is_deleted', models.BooleanField(default=False, help_text='删除标记', verbose_name='删除标记')),
|
||||
('name', models.CharField(max_length=200, verbose_name='名称')),
|
||||
('limit', models.IntegerField(default=0, verbose_name='限时(分钟)')),
|
||||
('total_score', models.FloatField(default=0, verbose_name='满分')),
|
||||
('pass_score', models.FloatField(default=0, verbose_name='通过分数')),
|
||||
('danxuan_count', models.IntegerField(default=0, verbose_name='单选数量')),
|
||||
('danxuan_score', models.FloatField(default=2, verbose_name='单选分数')),
|
||||
('duoxuan_count', models.IntegerField(default=0, verbose_name='多选数量')),
|
||||
('duoxuan_score', models.FloatField(default=4, verbose_name='多选分数')),
|
||||
('panduan_count', models.IntegerField(default=0, verbose_name='判断数量')),
|
||||
('panduan_score', models.FloatField(default=2, verbose_name='判断分数')),
|
||||
('create_by', models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.SET_NULL, related_name='paper_create_by', to=settings.AUTH_USER_MODEL, verbose_name='创建人')),
|
||||
],
|
||||
options={
|
||||
'verbose_name': '押题卷',
|
||||
'verbose_name_plural': '押题卷',
|
||||
},
|
||||
),
|
||||
migrations.CreateModel(
|
||||
name='PaperQuestion',
|
||||
fields=[
|
||||
('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
|
||||
('create_time', models.DateTimeField(default=django.utils.timezone.now, help_text='创建时间', verbose_name='创建时间')),
|
||||
('update_time', models.DateTimeField(auto_now=True, help_text='修改时间', verbose_name='修改时间')),
|
||||
('is_deleted', models.BooleanField(default=False, help_text='删除标记', verbose_name='删除标记')),
|
||||
('total_score', models.FloatField(default=0, verbose_name='单题满分')),
|
||||
('sort', models.PositiveSmallIntegerField(default=1)),
|
||||
('paper', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to='exam.Paper', verbose_name='试卷')),
|
||||
('question', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to='exam.Question', verbose_name='试题')),
|
||||
],
|
||||
options={
|
||||
'abstract': False,
|
||||
},
|
||||
),
|
||||
migrations.AddField(
|
||||
model_name='paper',
|
||||
name='questions',
|
||||
field=models.ManyToManyField(through='exam.PaperQuestion', to='exam.Question'),
|
||||
),
|
||||
migrations.AddField(
|
||||
model_name='paper',
|
||||
name='update_by',
|
||||
field=models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.SET_NULL, related_name='paper_update_by', to=settings.AUTH_USER_MODEL, verbose_name='最后编辑人'),
|
||||
),
|
||||
migrations.CreateModel(
|
||||
name='ExamRecord',
|
||||
fields=[
|
||||
('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
|
||||
('create_time', models.DateTimeField(default=django.utils.timezone.now, help_text='创建时间', verbose_name='创建时间')),
|
||||
('update_time', models.DateTimeField(auto_now=True, help_text='修改时间', verbose_name='修改时间')),
|
||||
('is_deleted', models.BooleanField(default=False, help_text='删除标记', verbose_name='删除标记')),
|
||||
('name', models.CharField(max_length=200, verbose_name='名称')),
|
||||
('type', models.CharField(choices=[('自助模考', '自助模考'), ('押卷模考', '押卷模考'), ('正式考试', '正式考试')], default='自助模考', max_length=50, verbose_name='考试类型')),
|
||||
('limit', models.IntegerField(default=0, verbose_name='限时(分钟)')),
|
||||
('total_score', models.FloatField(default=0, verbose_name='总分')),
|
||||
('score', models.FloatField(default=0, verbose_name='得分')),
|
||||
('took', models.IntegerField(default=0, verbose_name='耗时(秒)')),
|
||||
('start_time', models.DateTimeField(verbose_name='开始答题时间')),
|
||||
('end_time', models.DateTimeField(verbose_name='结束答题时间')),
|
||||
('is_pass', models.BooleanField(default=True, verbose_name='是否通过')),
|
||||
('questions', django.contrib.postgres.fields.jsonb.JSONField(blank=True, default=list, verbose_name='下发的题目列表')),
|
||||
('create_by', models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.SET_NULL, related_name='examrecord_create_by', to=settings.AUTH_USER_MODEL, verbose_name='创建人')),
|
||||
('detail', models.ManyToManyField(through='exam.AnswerDetail', to='exam.Question', verbose_name='答题记录')),
|
||||
('exam', models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.SET_NULL, to='exam.Exam', verbose_name='关联的正式考试')),
|
||||
('paper', models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.SET_NULL, to='exam.Paper', verbose_name='所用试卷')),
|
||||
('update_by', models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.SET_NULL, related_name='examrecord_update_by', to=settings.AUTH_USER_MODEL, verbose_name='最后编辑人')),
|
||||
],
|
||||
options={
|
||||
'verbose_name': '考试记录',
|
||||
'verbose_name_plural': '考试记录',
|
||||
},
|
||||
),
|
||||
migrations.AddField(
|
||||
model_name='exam',
|
||||
name='paper',
|
||||
field=models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.CASCADE, to='exam.Paper', verbose_name='使用的试卷'),
|
||||
),
|
||||
migrations.AddField(
|
||||
model_name='exam',
|
||||
name='update_by',
|
||||
field=models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.SET_NULL, related_name='exam_update_by', to=settings.AUTH_USER_MODEL, verbose_name='最后编辑人'),
|
||||
),
|
||||
migrations.AddField(
|
||||
model_name='answerdetail',
|
||||
name='examrecord',
|
||||
field=models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to='exam.ExamRecord'),
|
||||
),
|
||||
migrations.AddField(
|
||||
model_name='answerdetail',
|
||||
name='question',
|
||||
field=models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to='exam.Question'),
|
||||
),
|
||||
]
|
|
@ -1,31 +0,0 @@
|
|||
# Generated by Django 3.0.5 on 2022-11-08 01:01
|
||||
|
||||
from django.db import migrations, models
|
||||
|
||||
|
||||
class Migration(migrations.Migration):
|
||||
|
||||
dependencies = [
|
||||
('exam', '0002_auto_20221107_1356'),
|
||||
]
|
||||
|
||||
operations = [
|
||||
migrations.RemoveField(
|
||||
model_name='examrecord',
|
||||
name='questions',
|
||||
),
|
||||
migrations.RemoveField(
|
||||
model_name='paperquestion',
|
||||
name='sort',
|
||||
),
|
||||
migrations.AddField(
|
||||
model_name='answerdetail',
|
||||
name='total_score',
|
||||
field=models.FloatField(default=0, verbose_name='该题满分'),
|
||||
),
|
||||
migrations.AddField(
|
||||
model_name='examrecord',
|
||||
name='is_submited',
|
||||
field=models.BooleanField(default=False),
|
||||
),
|
||||
]
|
|
@ -1,18 +0,0 @@
|
|||
# Generated by Django 3.0.5 on 2022-11-14 03:08
|
||||
|
||||
from django.db import migrations, models
|
||||
|
||||
|
||||
class Migration(migrations.Migration):
|
||||
|
||||
dependencies = [
|
||||
('exam', '0003_auto_20221108_0901'),
|
||||
]
|
||||
|
||||
operations = [
|
||||
migrations.AlterField(
|
||||
model_name='examrecord',
|
||||
name='end_time',
|
||||
field=models.DateTimeField(blank=True, null=True, verbose_name='结束答题时间'),
|
||||
),
|
||||
]
|
|
@ -1,18 +0,0 @@
|
|||
# Generated by Django 3.0.5 on 2022-11-22 02:14
|
||||
|
||||
from django.db import migrations, models
|
||||
|
||||
|
||||
class Migration(migrations.Migration):
|
||||
|
||||
dependencies = [
|
||||
('exam', '0004_auto_20221114_1108'),
|
||||
]
|
||||
|
||||
operations = [
|
||||
migrations.AddField(
|
||||
model_name='exam',
|
||||
name='is_open',
|
||||
field=models.BooleanField(default=True, verbose_name='是否公开'),
|
||||
),
|
||||
]
|
|
@ -1,38 +0,0 @@
|
|||
# Generated by Django 3.2.12 on 2024-05-11 05:49
|
||||
|
||||
from django.conf import settings
|
||||
from django.db import migrations, models
|
||||
import django.db.models.deletion
|
||||
|
||||
|
||||
class Migration(migrations.Migration):
|
||||
|
||||
dependencies = [
|
||||
('edu', '0005_certificate_培训结束日期'),
|
||||
('system', '0023_alter_user_first_name'),
|
||||
migrations.swappable_dependency(settings.AUTH_USER_MODEL),
|
||||
('exam', '0005_exam_is_open'),
|
||||
]
|
||||
|
||||
operations = [
|
||||
migrations.AddField(
|
||||
model_name='exam',
|
||||
name='certificate',
|
||||
field=models.BooleanField(default=False, verbose_name='是否生成证书'),
|
||||
),
|
||||
migrations.AddField(
|
||||
model_name='exam',
|
||||
name='course_name',
|
||||
field=models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.CASCADE, to='edu.course', verbose_name='课程名称'),
|
||||
),
|
||||
migrations.AddField(
|
||||
model_name='exam',
|
||||
name='participant_dep',
|
||||
field=models.ManyToManyField(related_name='exam_dep', to='system.Organization', verbose_name='考试公司'),
|
||||
),
|
||||
migrations.AddField(
|
||||
model_name='exam',
|
||||
name='participant_user',
|
||||
field=models.ManyToManyField(related_name='exam_user', to=settings.AUTH_USER_MODEL, verbose_name='考试人员'),
|
||||
),
|
||||
]
|
|
@ -1,23 +0,0 @@
|
|||
# Generated by Django 3.2.12 on 2024-05-14 06:39
|
||||
|
||||
from django.db import migrations, models
|
||||
|
||||
|
||||
class Migration(migrations.Migration):
|
||||
|
||||
dependencies = [
|
||||
('edu', '0005_certificate_培训结束日期'),
|
||||
('exam', '0006_auto_20240511_1349'),
|
||||
]
|
||||
|
||||
operations = [
|
||||
migrations.RemoveField(
|
||||
model_name='exam',
|
||||
name='course_name',
|
||||
),
|
||||
migrations.AddField(
|
||||
model_name='exam',
|
||||
name='course_name',
|
||||
field=models.ManyToManyField(blank=True, to='edu.Course'),
|
||||
),
|
||||
]
|
|
@ -1,20 +0,0 @@
|
|||
# Generated by Django 3.2.12 on 2024-05-17 07:45
|
||||
|
||||
from django.db import migrations, models
|
||||
import django.db.models.deletion
|
||||
|
||||
|
||||
class Migration(migrations.Migration):
|
||||
|
||||
dependencies = [
|
||||
('system', '0023_alter_user_first_name'),
|
||||
('exam', '0007_auto_20240514_1439'),
|
||||
]
|
||||
|
||||
operations = [
|
||||
migrations.AddField(
|
||||
model_name='examrecord',
|
||||
name='belong_dept',
|
||||
field=models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.SET_NULL, related_name='examrecord_belong_dept', to='system.organization', verbose_name='所属部门'),
|
||||
),
|
||||
]
|
|
@ -41,6 +41,7 @@ class Question(CommonAModel):
|
|||
resolution = models.TextField(verbose_name='解析', blank=True)
|
||||
enabled = models.BooleanField('是否启用', default=False)
|
||||
year = models.IntegerField('真题年份', null=True, blank=True)
|
||||
|
||||
class Meta:
|
||||
verbose_name = '题目'
|
||||
verbose_name_plural = verbose_name
|
||||
|
|
|
@ -106,7 +106,6 @@ class QuestionViewSet(CreateUpdateCustomMixin, ModelViewSet):
|
|||
qlist = ['A', 'B', 'C', 'D', 'E', 'F']
|
||||
leveldict = {'低': '低', '中': '中', '高': '高'}
|
||||
notinlist = []
|
||||
ids = []
|
||||
# 验证文件内容
|
||||
if sheet['a2'].value != '题目类型':
|
||||
return Response({"error": "类型列错误!"})
|
||||
|
@ -176,7 +175,6 @@ class QuestionViewSet(CreateUpdateCustomMixin, ModelViewSet):
|
|||
else:
|
||||
obj.level = '低'
|
||||
obj.save()
|
||||
ids.append(obj.id)
|
||||
elif type == '多选':
|
||||
right = list(right.strip())
|
||||
if Question.objects.filter(type='多选', name=name, year=year, options=answer, questioncat=cateobj).exists():
|
||||
|
@ -198,7 +196,6 @@ class QuestionViewSet(CreateUpdateCustomMixin, ModelViewSet):
|
|||
else:
|
||||
obj.level = '低'
|
||||
obj.save()
|
||||
ids.append(obj.id)
|
||||
elif type == '判断':
|
||||
if right == 'A' or right == '对' or right == '正确':
|
||||
right = 'A'
|
||||
|
@ -220,9 +217,8 @@ class QuestionViewSet(CreateUpdateCustomMixin, ModelViewSet):
|
|||
else:
|
||||
obj.level = '低'
|
||||
obj.save()
|
||||
ids.append(obj.id)
|
||||
i = i + 1
|
||||
return Response(notinlist, ids, status=200)
|
||||
return Response(notinlist, status=200)
|
||||
|
||||
|
||||
class PaperViewSet(ModelViewSet):
|
||||
|
@ -264,7 +260,9 @@ class PaperViewSet(ModelViewSet):
|
|||
sr = PaperCreateUpdateSerializer(instance=paper, data=request.data)
|
||||
sr.is_valid(raise_exception=True)
|
||||
vdata = sr.validated_data
|
||||
print(vdata, 'QQQ')
|
||||
questions_ = vdata.pop('questions_')
|
||||
print(questions_, '')
|
||||
vdata['update_by'] = request.user
|
||||
Paper.objects.filter(id=paper.id).update(**vdata)
|
||||
q_list = []
|
||||
|
@ -277,7 +275,8 @@ class PaperViewSet(ModelViewSet):
|
|||
@action(methods=['post'], detail=False, perms_map={'post': 'question'}, serializer_class=Serializer)
|
||||
def upload_paper(self, request):
|
||||
doc_path = request.data.get('doc_path')
|
||||
excel_path = settings.BASE_DIR + "media/default/question.xlsx"
|
||||
# excel_path = settings.BASE_DIR + "/media/default/question.xlsx"
|
||||
excel_path = "C:\code\data\question.xlsx"
|
||||
timenow = timezone.now().strftime('%Y%m%d%H%M%S')
|
||||
question_excel_name = "question_excel_"+timenow
|
||||
question_excel = os.path.join(os.path.dirname(excel_path), question_excel_name)
|
||||
|
@ -314,7 +313,6 @@ class PaperViewSet(ModelViewSet):
|
|||
else:
|
||||
return Response(str(i)+'行没有分类', status=400)
|
||||
name = sheet['c'+str(i)].value
|
||||
|
||||
answer = {}
|
||||
if sheet['d'+str(i)].value:
|
||||
answer['A'] = sheet['d'+str(i)].value
|
||||
|
@ -344,6 +342,11 @@ class PaperViewSet(ModelViewSet):
|
|||
else:
|
||||
cateobj = Questioncat.objects.get(
|
||||
id=questioncatdict[questioncat])
|
||||
if Question.objects.filter(name=name, is_deleted=0, questioncat=cateobj).exists():
|
||||
ids.append(Question.objects.get(name=name, is_deleted=0, questioncat=cateobj).id)
|
||||
print(ids, '已存在')
|
||||
i = i + 1
|
||||
continue
|
||||
if type == '单选':
|
||||
if right in ['A', 'B', 'C', 'D', 'E', 'F']:
|
||||
obj = Question()
|
||||
|
@ -362,24 +365,20 @@ class PaperViewSet(ModelViewSet):
|
|||
obj.save()
|
||||
ids.append(obj.id)
|
||||
elif type == '多选':
|
||||
right = list(right.strip())
|
||||
if [False for c in right if c not in qlist]:
|
||||
pass
|
||||
obj = Question()
|
||||
obj.type = '多选'
|
||||
obj.questioncat = cateobj
|
||||
obj.name = name
|
||||
obj.options = answer
|
||||
obj.right = right
|
||||
obj.resolution = resolution if resolution else ''
|
||||
obj.year = year if year else None
|
||||
if level in leveldict:
|
||||
obj.level = leveldict[level]
|
||||
else:
|
||||
obj = Question()
|
||||
obj.type = '多选'
|
||||
obj.questioncat = cateobj
|
||||
obj.name = name
|
||||
obj.options = answer
|
||||
obj.right = right
|
||||
obj.resolution = resolution if resolution else ''
|
||||
obj.year = year if year else None
|
||||
if level in leveldict:
|
||||
obj.level = leveldict[level]
|
||||
else:
|
||||
obj.level = '低'
|
||||
obj.save()
|
||||
ids.append(obj.id)
|
||||
obj.level = '低'
|
||||
obj.save()
|
||||
ids.append(obj.id)
|
||||
elif type == '判断':
|
||||
if right == 'A' or right == '对' or right == '正确':
|
||||
right = 'A'
|
||||
|
@ -402,6 +401,7 @@ class PaperViewSet(ModelViewSet):
|
|||
i = i + 1
|
||||
else:
|
||||
raise ParseError('excel解析失败')
|
||||
print(ids, "--------------------")
|
||||
if ids:
|
||||
questions = Question.objects.filter(pk__in=ids)
|
||||
Serializer = QuestionSerializer(questions, many=True)
|
||||
|
|
|
@ -0,0 +1,20 @@
|
|||
# Generated by Django 3.2.12 on 2024-05-27 08:01
|
||||
|
||||
import datetime
|
||||
from django.db import migrations, models
|
||||
from django.utils.timezone import utc
|
||||
|
||||
|
||||
class Migration(migrations.Migration):
|
||||
|
||||
dependencies = [
|
||||
('information', '0041_alter_qualification_change_date'),
|
||||
]
|
||||
|
||||
operations = [
|
||||
migrations.AlterField(
|
||||
model_name='qualification',
|
||||
name='change_date',
|
||||
field=models.DateField(blank=True, default=datetime.datetime(2024, 5, 27, 8, 1, 31, 856277, tzinfo=utc), null=True, verbose_name='变更日期'),
|
||||
),
|
||||
]
|
|
@ -0,0 +1,20 @@
|
|||
# Generated by Django 3.2.12 on 2024-05-27 08:04
|
||||
|
||||
import datetime
|
||||
from django.db import migrations, models
|
||||
from django.utils.timezone import utc
|
||||
|
||||
|
||||
class Migration(migrations.Migration):
|
||||
|
||||
dependencies = [
|
||||
('information', '0042_alter_qualification_change_date'),
|
||||
]
|
||||
|
||||
operations = [
|
||||
migrations.AlterField(
|
||||
model_name='qualification',
|
||||
name='change_date',
|
||||
field=models.DateField(blank=True, default=datetime.datetime(2024, 5, 27, 8, 4, 33, 733962, tzinfo=utc), null=True, verbose_name='变更日期'),
|
||||
),
|
||||
]
|
|
@ -0,0 +1,20 @@
|
|||
# Generated by Django 3.2.12 on 2024-05-27 08:04
|
||||
|
||||
import datetime
|
||||
from django.db import migrations, models
|
||||
from django.utils.timezone import utc
|
||||
|
||||
|
||||
class Migration(migrations.Migration):
|
||||
|
||||
dependencies = [
|
||||
('information', '0043_alter_qualification_change_date'),
|
||||
]
|
||||
|
||||
operations = [
|
||||
migrations.AlterField(
|
||||
model_name='qualification',
|
||||
name='change_date',
|
||||
field=models.DateField(blank=True, default=datetime.datetime(2024, 5, 27, 8, 4, 40, 332743, tzinfo=utc), null=True, verbose_name='变更日期'),
|
||||
),
|
||||
]
|
|
@ -0,0 +1,20 @@
|
|||
# Generated by Django 3.2.12 on 2024-05-27 08:18
|
||||
|
||||
import datetime
|
||||
from django.db import migrations, models
|
||||
from django.utils.timezone import utc
|
||||
|
||||
|
||||
class Migration(migrations.Migration):
|
||||
|
||||
dependencies = [
|
||||
('information', '0044_alter_qualification_change_date'),
|
||||
]
|
||||
|
||||
operations = [
|
||||
migrations.AlterField(
|
||||
model_name='qualification',
|
||||
name='change_date',
|
||||
field=models.DateField(blank=True, default=datetime.datetime(2024, 5, 27, 8, 18, 20, 511295, tzinfo=utc), null=True, verbose_name='变更日期'),
|
||||
),
|
||||
]
|
|
@ -0,0 +1,20 @@
|
|||
# Generated by Django 3.2.12 on 2024-05-27 08:34
|
||||
|
||||
import datetime
|
||||
from django.db import migrations, models
|
||||
from django.utils.timezone import utc
|
||||
|
||||
|
||||
class Migration(migrations.Migration):
|
||||
|
||||
dependencies = [
|
||||
('information', '0045_alter_qualification_change_date'),
|
||||
]
|
||||
|
||||
operations = [
|
||||
migrations.AlterField(
|
||||
model_name='qualification',
|
||||
name='change_date',
|
||||
field=models.DateField(blank=True, default=datetime.datetime(2024, 5, 27, 8, 34, 38, 679984, tzinfo=utc), null=True, verbose_name='变更日期'),
|
||||
),
|
||||
]
|
|
@ -0,0 +1,20 @@
|
|||
# Generated by Django 3.2.12 on 2024-05-27 08:35
|
||||
|
||||
import datetime
|
||||
from django.db import migrations, models
|
||||
from django.utils.timezone import utc
|
||||
|
||||
|
||||
class Migration(migrations.Migration):
|
||||
|
||||
dependencies = [
|
||||
('information', '0046_alter_qualification_change_date'),
|
||||
]
|
||||
|
||||
operations = [
|
||||
migrations.AlterField(
|
||||
model_name='qualification',
|
||||
name='change_date',
|
||||
field=models.DateField(blank=True, default=datetime.datetime(2024, 5, 27, 8, 35, 7, 955201, tzinfo=utc), null=True, verbose_name='变更日期'),
|
||||
),
|
||||
]
|
Loading…
Reference in New Issue