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 @@ -vue Admin Template
\ No newline at end of file +vue Admin Template
\ No newline at end of file diff --git a/client/src/views/exam/index.vue b/client/src/views/exam/index.vue index 7c8c91b..ddc41e8 100644 --- a/client/src/views/exam/index.vue +++ b/client/src/views/exam/index.vue @@ -165,7 +165,7 @@ - +
取消 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='变更日期'), + ), + ]