diff --git a/client/dist/index.html b/client/dist/index.html
index a83d5a2..5d4ee50 100644
--- a/client/dist/index.html
+++ b/client/dist/index.html
@@ -1 +1 @@
-
+
取消
diff --git a/client/src/views/exam/testPaperCreate.vue b/client/src/views/exam/testPaperCreate.vue
index 6362044..3ae97b5 100644
--- a/client/src/views/exam/testPaperCreate.vue
+++ b/client/src/views/exam/testPaperCreate.vue
@@ -74,22 +74,6 @@
{{ name }}: {{ value }}
-
-
-
-
- {{ index+1 }} -
- {{item.type}}
- {{ item.name }}
- (正确答案:{{item.right}})
-
-
{{ name }}: {{ value }}
-
@@ -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,
diff --git a/client/src/views/exam/testPaperUpdate.vue b/client/src/views/exam/testPaperUpdate.vue
index e0313f5..9d47e2c 100644
--- a/client/src/views/exam/testPaperUpdate.vue
+++ b/client/src/views/exam/testPaperUpdate.vue
@@ -15,19 +15,19 @@
单选题
{{Form.danxuan_count}} 道
每道
- 分
+ 分
多选题
{{Form.duoxuan_count}} 道
每道
- 分
+ 分
判断题
{{Form.panduan_count}} 道
每道
- 分
+ 分
总分
@@ -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;
diff --git a/server/apps/exam/migrations/0001_initial.py b/server/apps/exam/migrations/0001_initial.py
index 22b7f26..db3a686 100644
--- a/server/apps/exam/migrations/0001_initial.py
+++ b/server/apps/exam/migrations/0001_initial.py
@@ -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'),
+ ),
]
diff --git a/server/apps/exam/migrations/0002_auto_20221107_1356.py b/server/apps/exam/migrations/0002_auto_20221107_1356.py
deleted file mode 100644
index dc77a2c..0000000
--- a/server/apps/exam/migrations/0002_auto_20221107_1356.py
+++ /dev/null
@@ -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'),
- ),
- ]
diff --git a/server/apps/exam/migrations/0003_auto_20221108_0901.py b/server/apps/exam/migrations/0003_auto_20221108_0901.py
deleted file mode 100644
index 64aedfc..0000000
--- a/server/apps/exam/migrations/0003_auto_20221108_0901.py
+++ /dev/null
@@ -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),
- ),
- ]
diff --git a/server/apps/exam/migrations/0004_auto_20221114_1108.py b/server/apps/exam/migrations/0004_auto_20221114_1108.py
deleted file mode 100644
index a26aad5..0000000
--- a/server/apps/exam/migrations/0004_auto_20221114_1108.py
+++ /dev/null
@@ -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='结束答题时间'),
- ),
- ]
diff --git a/server/apps/exam/migrations/0005_exam_is_open.py b/server/apps/exam/migrations/0005_exam_is_open.py
deleted file mode 100644
index d637bd7..0000000
--- a/server/apps/exam/migrations/0005_exam_is_open.py
+++ /dev/null
@@ -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='是否公开'),
- ),
- ]
diff --git a/server/apps/exam/migrations/0006_auto_20240511_1349.py b/server/apps/exam/migrations/0006_auto_20240511_1349.py
deleted file mode 100644
index 5460906..0000000
--- a/server/apps/exam/migrations/0006_auto_20240511_1349.py
+++ /dev/null
@@ -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='考试人员'),
- ),
- ]
diff --git a/server/apps/exam/migrations/0007_auto_20240514_1439.py b/server/apps/exam/migrations/0007_auto_20240514_1439.py
deleted file mode 100644
index dca6be7..0000000
--- a/server/apps/exam/migrations/0007_auto_20240514_1439.py
+++ /dev/null
@@ -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'),
- ),
- ]
diff --git a/server/apps/exam/migrations/0008_examrecord_belong_dept.py b/server/apps/exam/migrations/0008_examrecord_belong_dept.py
deleted file mode 100644
index ea60e58..0000000
--- a/server/apps/exam/migrations/0008_examrecord_belong_dept.py
+++ /dev/null
@@ -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='所属部门'),
- ),
- ]
diff --git a/server/apps/exam/models.py b/server/apps/exam/models.py
index a5a74e5..c4cce52 100644
--- a/server/apps/exam/models.py
+++ b/server/apps/exam/models.py
@@ -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
diff --git a/server/apps/exam/views.py b/server/apps/exam/views.py
index ef0822f..64d7f9d 100644
--- a/server/apps/exam/views.py
+++ b/server/apps/exam/views.py
@@ -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)
diff --git a/server/apps/information/migrations/0042_alter_qualification_change_date.py b/server/apps/information/migrations/0042_alter_qualification_change_date.py
new file mode 100644
index 0000000..b159865
--- /dev/null
+++ b/server/apps/information/migrations/0042_alter_qualification_change_date.py
@@ -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='变更日期'),
+ ),
+ ]
diff --git a/server/apps/information/migrations/0043_alter_qualification_change_date.py b/server/apps/information/migrations/0043_alter_qualification_change_date.py
new file mode 100644
index 0000000..92c58da
--- /dev/null
+++ b/server/apps/information/migrations/0043_alter_qualification_change_date.py
@@ -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='变更日期'),
+ ),
+ ]
diff --git a/server/apps/information/migrations/0044_alter_qualification_change_date.py b/server/apps/information/migrations/0044_alter_qualification_change_date.py
new file mode 100644
index 0000000..534d772
--- /dev/null
+++ b/server/apps/information/migrations/0044_alter_qualification_change_date.py
@@ -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='变更日期'),
+ ),
+ ]
diff --git a/server/apps/information/migrations/0045_alter_qualification_change_date.py b/server/apps/information/migrations/0045_alter_qualification_change_date.py
new file mode 100644
index 0000000..41610d5
--- /dev/null
+++ b/server/apps/information/migrations/0045_alter_qualification_change_date.py
@@ -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='变更日期'),
+ ),
+ ]
diff --git a/server/apps/information/migrations/0046_alter_qualification_change_date.py b/server/apps/information/migrations/0046_alter_qualification_change_date.py
new file mode 100644
index 0000000..7236a8b
--- /dev/null
+++ b/server/apps/information/migrations/0046_alter_qualification_change_date.py
@@ -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='变更日期'),
+ ),
+ ]
diff --git a/server/apps/information/migrations/0047_alter_qualification_change_date.py b/server/apps/information/migrations/0047_alter_qualification_change_date.py
new file mode 100644
index 0000000..51a203c
--- /dev/null
+++ b/server/apps/information/migrations/0047_alter_qualification_change_date.py
@@ -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='变更日期'),
+ ),
+ ]