From 8ae1ac5e20fe09a7aec07da137aeee5db8c5052e Mon Sep 17 00:00:00 2001
From: cxt <853663049@qq.com>
Date: Tue, 7 Jan 2020 19:13:59 +0800
Subject: [PATCH 01/24] =?UTF-8?q?=E6=99=BA=E8=83=BD=E7=BB=84=E5=8D=B7?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
---
...ination_intelligent_settings_controller.rb | 14 ++++++++
app/models/examination_intelligent_setting.rb | 4 +++
app/models/examination_type_setting.rb | 3 ++
app/queries/optional_item_query.rb | 32 +++++++++++++++++++
.../optinal_items.json.jbuilder | 4 +++
config/routes.rb | 6 ++++
...create_examination_intelligent_settings.rb | 13 ++++++++
...091836_create_examination_type_settings.rb | 13 ++++++++
.../examination_intelligent_setting_spec.rb | 5 +++
spec/models/examination_type_setting_spec.rb | 5 +++
10 files changed, 99 insertions(+)
create mode 100644 app/controllers/examination_intelligent_settings_controller.rb
create mode 100644 app/models/examination_intelligent_setting.rb
create mode 100644 app/models/examination_type_setting.rb
create mode 100644 app/queries/optional_item_query.rb
create mode 100644 app/views/examination_intelligent_settings/optinal_items.json.jbuilder
create mode 100644 db/migrate/20200107091630_create_examination_intelligent_settings.rb
create mode 100644 db/migrate/20200107091836_create_examination_type_settings.rb
create mode 100644 spec/models/examination_intelligent_setting_spec.rb
create mode 100644 spec/models/examination_type_setting_spec.rb
diff --git a/app/controllers/examination_intelligent_settings_controller.rb b/app/controllers/examination_intelligent_settings_controller.rb
new file mode 100644
index 000000000..8a69a5c70
--- /dev/null
+++ b/app/controllers/examination_intelligent_settings_controller.rb
@@ -0,0 +1,14 @@
+class ExaminationIntelligentSettingsController < ApplicationController
+
+ def optinal_items
+ items = OptionalItemQuery.call(params)
+ @single_question_count = items[:single_question_count]
+ @multiple_question_count = items[:multiple_question_count]
+ @judgement_question_count = items[:judgement_question_count]
+ @program_question_count = items[:program_question_count]
+ end
+
+ def create
+
+ end
+end
\ No newline at end of file
diff --git a/app/models/examination_intelligent_setting.rb b/app/models/examination_intelligent_setting.rb
new file mode 100644
index 000000000..16dd88300
--- /dev/null
+++ b/app/models/examination_intelligent_setting.rb
@@ -0,0 +1,4 @@
+class ExaminationIntelligentSetting < ApplicationRecord
+ belongs_to :sub_discipline
+ has_many :examination_type_settings, dependent: :destroy
+end
diff --git a/app/models/examination_type_setting.rb b/app/models/examination_type_setting.rb
new file mode 100644
index 000000000..c985e578e
--- /dev/null
+++ b/app/models/examination_type_setting.rb
@@ -0,0 +1,3 @@
+class ExaminationTypeSetting < ApplicationRecord
+ belongs_to :examination_intelligent_setting
+end
diff --git a/app/queries/optional_item_query.rb b/app/queries/optional_item_query.rb
new file mode 100644
index 000000000..456a74c6a
--- /dev/null
+++ b/app/queries/optional_item_query.rb
@@ -0,0 +1,32 @@
+class OptionalItemQuery < ApplicationQuery
+ attr_reader :params
+
+ def initialize(params)
+ @params = params
+ end
+
+ def call
+ items = ItemBank.all
+ if params[:tag_discipline_id].present? && params[:sub_discipline_id].present?
+ items = items.joins(:tag_discipline_containers).where(tag_discipline_containers: {tag_discipline_id: params[:tag_discipline_id]})
+ hacks = Hack.joins(:tag_discipline_containers).where(tag_discipline_containers: {tag_discipline_id: params[:tag_discipline_id]})
+ elsif params[:sub_discipline_id].present?
+ items = items.where(sub_discipline_id: params[:sub_discipline_id])
+ hacks = Hack.where(sub_discipline_id: params[:sub_discipline_id])
+ end
+
+ # 来源
+ source = params[:source].present? ? params[:source].to_i : 1
+ public = source == 3 ? [0, 1] : source
+ items = items.where(public: public)
+
+ # 难度
+ difficulty = params[:difficulty] ? params[:difficulty].to_i : 1
+ items = items.where(difficulty: difficulty)
+ single_question_count = items.select{ |item| item.item_type == "SINGLE" }.size
+ multiple_question_count = items.select{ |item| item.item_type == "MULTIPLE" }.size
+ judgement_question_count = items.select{ |item| item.item_type == "JUDGMENT" }.size
+ program_question_count = hacks.present? ? hacks.pluck(:item_bank_id).reject(&:blank?).size : items.select{ |item| item.item_type == "PROGRAM" }.size
+ {single_question_count: single_question_count, multiple_question_count: multiple_question_count, judgement_question_count: judgement_question_count, program_question_count: program_question_count}
+ end
+end
\ No newline at end of file
diff --git a/app/views/examination_intelligent_settings/optinal_items.json.jbuilder b/app/views/examination_intelligent_settings/optinal_items.json.jbuilder
new file mode 100644
index 000000000..7d8ec7381
--- /dev/null
+++ b/app/views/examination_intelligent_settings/optinal_items.json.jbuilder
@@ -0,0 +1,4 @@
+json.single_question_count @single_question_count
+json.multiple_question_count @multiple_question_count
+json.judgement_question_count @judgement_question_count
+json.program_question_count @program_question_count
diff --git a/config/routes.rb b/config/routes.rb
index 065d12099..d41a8a783 100644
--- a/config/routes.rb
+++ b/config/routes.rb
@@ -96,6 +96,12 @@ Rails.application.routes.draw do
end
end
+ resources :examination_intelligent_settings do
+ collection do
+ get :optinal_items
+ end
+ end
+
resources :hacks, path: :problems, param: :identifier do
collection do
get :unpulished_list
diff --git a/db/migrate/20200107091630_create_examination_intelligent_settings.rb b/db/migrate/20200107091630_create_examination_intelligent_settings.rb
new file mode 100644
index 000000000..f00f19c33
--- /dev/null
+++ b/db/migrate/20200107091630_create_examination_intelligent_settings.rb
@@ -0,0 +1,13 @@
+class CreateExaminationIntelligentSettings < ActiveRecord::Migration[5.2]
+ def change
+ create_table :examination_intelligent_settings do |t|
+ t.references :sub_discipline
+ t.integer :public, default: 1
+ t.integer :difficulty, default: 1
+
+ t.timestamps
+ end
+
+ add_index :examination_intelligent_settings, :sub_discipline_id, name: "index_on_sub_discipline_id"
+ end
+end
diff --git a/db/migrate/20200107091836_create_examination_type_settings.rb b/db/migrate/20200107091836_create_examination_type_settings.rb
new file mode 100644
index 000000000..c2eb50e9e
--- /dev/null
+++ b/db/migrate/20200107091836_create_examination_type_settings.rb
@@ -0,0 +1,13 @@
+class CreateExaminationTypeSettings < ActiveRecord::Migration[5.2]
+ def change
+ create_table :examination_type_settings do |t|
+ t.references :examination_intelligent_setting, index: false
+ t.integer :item_type
+ t.integer :count
+
+ t.timestamps
+ end
+
+ add_index :examination_type_settings, :examination_intelligent_setting_id, name: "index_on_examination_intelligent_setting"
+ end
+end
diff --git a/spec/models/examination_intelligent_setting_spec.rb b/spec/models/examination_intelligent_setting_spec.rb
new file mode 100644
index 000000000..fb82f86ca
--- /dev/null
+++ b/spec/models/examination_intelligent_setting_spec.rb
@@ -0,0 +1,5 @@
+require 'rails_helper'
+
+RSpec.describe ExaminationIntelligentSetting, type: :model do
+ pending "add some examples to (or delete) #{__FILE__}"
+end
diff --git a/spec/models/examination_type_setting_spec.rb b/spec/models/examination_type_setting_spec.rb
new file mode 100644
index 000000000..916cb367d
--- /dev/null
+++ b/spec/models/examination_type_setting_spec.rb
@@ -0,0 +1,5 @@
+require 'rails_helper'
+
+RSpec.describe ExaminationTypeSetting, type: :model do
+ pending "add some examples to (or delete) #{__FILE__}"
+end
From d56e75324b95d98a14256be1e3aad48f309d61c5 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?=E6=9D=A8=E6=A0=91=E6=9E=97?= <904079904@qq.com>
Date: Wed, 8 Jan 2020 11:28:55 +0800
Subject: [PATCH 02/24] =?UTF-8?q?=E9=A2=98=E5=BA=93=E6=96=B0=E7=BC=96?=
=?UTF-8?q?=E8=BE=91=E5=99=A8?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
---
.../react/src/common/quillForEditor/README.md | 1 +
public/react/src/modules/question/Question.js | 23 ++
.../question/component/ChoquesEditor.js | 158 ++++++----
.../modules/question/component/Contentpart.js | 13 +-
.../question/component/JudquestionEditor.js | 181 ++++++-----
.../modules/question/component/Listjihe.js | 287 ++++++++++++------
.../question/component/SingleEditor.js | 194 +++++++-----
.../question/questioncss/questioncom.css | 9 +
8 files changed, 562 insertions(+), 304 deletions(-)
diff --git a/public/react/src/common/quillForEditor/README.md b/public/react/src/common/quillForEditor/README.md
index 0369164c7..eea4de5cc 100644
--- a/public/react/src/common/quillForEditor/README.md
+++ b/public/react/src/common/quillForEditor/README.md
@@ -61,6 +61,7 @@
### 使用
````
+ 编辑模式是放不大图片的
import QuillForEditor from 'xxx';
// 指定需要显示的工具栏信息, 不指定加载全部
diff --git a/public/react/src/modules/question/Question.js b/public/react/src/modules/question/Question.js
index 171a2f2d7..0d51f4972 100644
--- a/public/react/src/modules/question/Question.js
+++ b/public/react/src/modules/question/Question.js
@@ -66,9 +66,28 @@ class Question extends Component {
oj_status:null,
isVisible: false,
selectionbools:false,
+ chakanjiexiboolindex:"无",
}
}
+
+ chakanjiexibool=(index)=>{
+ debugger
+ if(this.state.chakanjiexiboolindex===index){
+ this.setState({
+ chakanjiexiboolindex:"无",
+ })
+ return
+ }
+ this.setState({
+ chakanjiexiboolindex:index,
+ })
+ }
+ setmychakanjiexibool=(str)=>{
+ this.setState({
+ chakanjiexiboolindex:str,
+ })
+ }
setdiscipline_id=(discipline_id)=>{
this.setState({
discipline_id:discipline_id,
@@ -338,6 +357,8 @@ class Question extends Component {
oj_status:this.state.oj_status
};
this.getdata(data);
+ this.setmychakanjiexibool("无")
+
}
showDrawer = () => {
if(this.state.visible===true){
@@ -882,6 +903,8 @@ class Question extends Component {
/>
{/*头部*/}
+
{/* {!question_id ? '新建' : '编辑'} */} * 题目解析:
- -{/* {!question_id ? '新建' : '编辑'} */} * 题目解析:
- -+ {items.item_type === "JUDGMENT" ? +
{ - items === undefined ||items === null? "" : items.choices.map((object, index) => { + items === undefined || items === null ? "" : items.choices.map((object, index) => { return ( -
+
-
-
++ { + items&&items.program_attr&&items.program_attr.description? +
+
+
{ - items === undefined ||items === null? "" : items.choices.map((object, index) => { + items === undefined || items === null ? "" : items.choices.map((object, index) => { return ( -
- {tagArray[index]} -
++
{tagArray[index]}
+
+ {object ?
+ object.choice_text === undefined || object.choice_text=== null || object.choice_text === "" ?
+
+ ""
+ :
+ object.choice_text.length>0?
+
难度:{items.difficulty===1?"简单":items.difficulty===2?"适中":items.difficulty===3?"困难":""}
-题型:{items.item_type==="SINGLE"?"单选题":items.item_type==="MULTIPLE"?"多选题":items.item_type==="JUDGMENT"?"判断题":items.item_type==="PROGRAM"?"编程题":""}
+难度:{items.difficulty === 1 ? "简单" : items.difficulty === 2 ? "适中" : items.difficulty === 3 ? "困难" : ""} +
+题型:{items.item_type === "SINGLE" ? "单选题" : items.item_type === "MULTIPLE" ? "多选题" : items.item_type === "JUDGMENT" ? "判断题" : items.item_type === "PROGRAM" ? "编程题" : ""} +
更新时间:{items.update_time}
{ - this.props.defaultActiveKey==="0"||this.props.defaultActiveKey===0? + this.props.defaultActiveKey === "0" || this.props.defaultActiveKey === 0 ? "" :创建者:{items.author.name}
} { - items.item_type==="PROGRAM"? + items.item_type === "PROGRAM" ?编程语言:{items.program_attr.language}
- :"" + : "" } { - items.item_type==="PROGRAM"? - items.program_attr.status===0? + items.item_type === "PROGRAM" ? + items.program_attr.status === 0 ?未发布
- :"" - :"" + : "" + : "" }this.Selectingpracticaltrainings(items.id)}> + items.choosed === true ? +
this.Selectingpracticaltrainings(items.id)}> 撤销
: - items.item_type==="PROGRAM"? - items.program_attr.status===0? -+ items.item_type === "PROGRAM" ? + items.program_attr.status === 0 ? +
选用
: -this.Selectingpracticaltraining(items.id)}> +
this.Selectingpracticaltraining(items.id)}> 选用
: -this.Selectingpracticaltraining(items.id)}> +
this.Selectingpracticaltraining(items.id)}> 选用
} { - defaultActiveKey===0||defaultActiveKey==="0"? + defaultActiveKey === 0 || defaultActiveKey === "0" ?this.props.showmodelysl(items.id)}> +
this.props.showmodelysl(items.id)}> 删除
{ - items.item_type==="PROGRAM"? + items.item_type === "PROGRAM" ? -+
编辑
: -+
编辑
} { - items.public===false? - items.item_type==="PROGRAM"? - items.program_attr.status===0? + items.public === false ? + items.item_type === "PROGRAM" ? + items.program_attr.status === 0 ? "" : -this.props.showmodels(items.id)}> +
this.props.showmodels(items.id)}> 公开
: -this.props.showmodels(items.id)}> +
this.props.showmodels(items.id)}> 公开
@@ -256,54 +341,65 @@ class Listjihe extends Component { }this.props.chakanjiexibool(keindex)}> +
this.props.chakanjiexibool(keindex)}> 查看解析
} -:
}
+
+ {items ?
+ items.analysis=== undefined || items.analysis=== null || items.analysis === "" ?
+
+ ""
+ :
+ items.analysis.length>0?
+
题数:{this.props.all_score}
-总分:{this.props.all_questions_count}
+题数:{this.props.all_questions_count}
+总分:{this.props.all_score}
-
-
+ { + objectsingle&&objectsingle.program_attr&&objectsingle.program_attr.description? +
+
{tagArray[index]} -
+
+ {object ?
+ object.choice_text === undefined || object.choice_text=== null || object.choice_text === "" ?
+ ""
+ :
+ object.choice_text.length>0?
+
{ objectsingle === undefined || objectsingle === null ? "" : objectsingle.choices.map((object, index) => { return ( -
-
+
-
+
+
{tagArray[index]} -
+
+ {object ?
+ object.choice_text === undefined || object.choice_text=== null || object.choice_text === "" ?
+ ""
+ :
+ object.choice_text.length>0?
+
- - 选用 -
++ + 选用 +
+this.Selectingpracticaltraining(items.id)}> From 9ff41434fb5640d07c79f2d24a1ef0280d252087 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E6=9D=A8=E6=A0=91=E6=9E=97?= <904079904@qq.com> Date: Wed, 8 Jan 2020 16:23:09 +0800 Subject: [PATCH 08/24] =?UTF-8?q?=E9=A2=98=E5=B9=B2=20=E9=A2=98=E8=A7=A3?= =?UTF-8?q?=E6=9E=90=20=E5=AD=97=E6=95=B0=E9=99=90=E5=88=B61000=E5=AD=97?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../react/src/modules/question/component/ChoquesEditor.js | 8 ++++---- .../src/modules/question/component/JudquestionEditor.js | 8 ++++---- .../react/src/modules/question/component/SingleEditor.js | 8 ++++---- 3 files changed, 12 insertions(+), 12 deletions(-) diff --git a/public/react/src/modules/question/component/ChoquesEditor.js b/public/react/src/modules/question/component/ChoquesEditor.js index c3412467d..8113322fb 100644 --- a/public/react/src/modules/question/component/ChoquesEditor.js +++ b/public/react/src/modules/question/component/ChoquesEditor.js @@ -277,8 +277,8 @@ class ChoquesEditor extends Component{ } else { // 提交到后台的内容需要处理一下; var texts=""; - if(_text.length>=101){ - var result = _text.substring(0,100); + if(_text.length>=1001){ + var result = _text.substring(0,1000); texts={"ops":[{"insert":result}]}; texts=JSON.stringify(texts); }else { @@ -301,8 +301,8 @@ class ChoquesEditor extends Component{ } else { // 提交到后台的内容需要处理一下; var texts=""; - if(_text.length>=101){ - var result = _text.substring(0,100); + if(_text.length>=1001){ + var result = _text.substring(0,1000); texts={"ops":[{"insert":result}]}; texts=JSON.stringify(texts); }else { diff --git a/public/react/src/modules/question/component/JudquestionEditor.js b/public/react/src/modules/question/component/JudquestionEditor.js index 08aa54955..65a80b8ab 100644 --- a/public/react/src/modules/question/component/JudquestionEditor.js +++ b/public/react/src/modules/question/component/JudquestionEditor.js @@ -289,8 +289,8 @@ class JudquestionEditor extends Component{ } else { // 提交到后台的内容需要处理一下; var texts=""; - if(_text.length>=101){ - var result = _text.substring(0,100); + if(_text.length>=1001){ + var result = _text.substring(0,1000); texts={"ops":[{"insert":result}]}; texts=JSON.stringify(texts); }else { @@ -313,8 +313,8 @@ class JudquestionEditor extends Component{ } else { // 提交到后台的内容需要处理一下; var texts=""; - if(_text.length>=101){ - var result = _text.substring(0,100); + if(_text.length>=1001){ + var result = _text.substring(0,1000); texts={"ops":[{"insert":result}]}; texts=JSON.stringify(texts); }else { diff --git a/public/react/src/modules/question/component/SingleEditor.js b/public/react/src/modules/question/component/SingleEditor.js index bf2c27b36..d7a326714 100644 --- a/public/react/src/modules/question/component/SingleEditor.js +++ b/public/react/src/modules/question/component/SingleEditor.js @@ -296,8 +296,8 @@ class SingleEditor extends Component{ } else { // 提交到后台的内容需要处理一下; var texts=""; - if(_text.length>=101){ - var result = _text.substring(0,100); + if(_text.length>=1001){ + var result = _text.substring(0,1000); texts={"ops":[{"insert":result}]}; texts=JSON.stringify(texts); }else { @@ -319,8 +319,8 @@ class SingleEditor extends Component{ }) } else { var texts=""; - if(_text.length>=101){ - var result = _text.substring(0,100); + if(_text.length>=1001){ + var result = _text.substring(0,1000); texts={"ops":[{"insert":result}]}; texts=JSON.stringify(texts); }else { From 84afe73ec8934272bb75e5d4cd790b3863cda42e Mon Sep 17 00:00:00 2001 From: tangjiang <465264938@qq.com> Date: Wed, 8 Jan 2020 16:28:08 +0800 Subject: [PATCH 09/24] add quill editor --- .../courses/exercise/new/SingleEditor.js | 74 +++++++++++++++++-- 1 file changed, 68 insertions(+), 6 deletions(-) diff --git a/public/react/src/modules/courses/exercise/new/SingleEditor.js b/public/react/src/modules/courses/exercise/new/SingleEditor.js index 0b1b7599a..8585e0a82 100644 --- a/public/react/src/modules/courses/exercise/new/SingleEditor.js +++ b/public/react/src/modules/courses/exercise/new/SingleEditor.js @@ -8,8 +8,9 @@ import { import TPMMDEditor from '../../../tpm/challengesnew/TPMMDEditor'; import axios from 'axios' import update from 'immutability-helper' - import {getUrl, ActionBtn, DMDEditor, ConditionToolTip} from 'educoder'; +import QuillForEditor from "../../../../common/quillForEditor"; + const { TextArea } = Input; const confirm = Modal.confirm; const $ = window.$ @@ -47,6 +48,9 @@ class SingleEditor extends Component{ question_title: this.props.question_title || '', question_type: this.props.question_type || 0, question_score: this.props.question_score || this.props.init_question_score, + choice_editor: 'md', + quill_question_title: '', + quill_default_title: '' } } addOption = () => { @@ -205,8 +209,33 @@ class SingleEditor extends Component{ toShowMode = () => { } + + // 切换编辑器 + handleChangeEditor = (e) => { + const {quill_question_title} = this.state; + const value = e.target.value + if (value === 'quill') { + const _val = quill_question_title ? JSON.parse(quill_question_title) : ''; + this.setState({ + quill_default_title: _val + }) + } + this.setState({ + choice_editor: value + }); + } + + // quill编辑器内容变化时调用此接口 + handleCtxChange = (ctx) => { + console.log('编辑器内容', ctx); + // 保存编辑器内容 + this.setState({ + quill_question_title: JSON.stringify(ctx) + }); + } + render() { - let { question_title, question_score, question_type, question_choices, standard_answers } = this.state; + let { question_title, question_score, question_type, question_choices, standard_answers, choice_editor, quill_default_title } = this.state; let { question_id, index, exerciseIsPublish, // question_title, // question_type, @@ -245,18 +274,51 @@ class SingleEditor extends Component{ max-width: 1056px; word-break:break-all; } + .editor_area{ + display: inline-block; + float: right; + // line-height: 30px; + // height: 30px; + } + .editor_txt{ + margin-right: 10px; + font-size: 12px; + color: #999; + } + .radio_style{ + display: inline-block; + vertical: center; + } `}
{/* {!question_id ? '新建' : '编辑'} */}
选择题
(客观题,由系统自动评分,请设置标准答案)
+ {/*
新增
{object.name}
diff --git a/public/react/src/modules/question/component/Newknledpots.js b/public/react/src/modules/question/component/Newknledpots.js index a097b7d79..06d5b8ea0 100644 --- a/public/react/src/modules/question/component/Newknledpots.js +++ b/public/react/src/modules/question/component/Newknledpots.js @@ -14,10 +14,27 @@ class PaperDeletModel extends Component { } handleChange=(e)=>{ - this.setState({ - newkntypeinput: e.target.value - }) + // this.setState({ + // newkntypeinput: e.target.value + // }) + // console.log(e.target.value); + // console.log(e.target.value.length); + this.setState({ + newkntypeinput: e.target.value + }) + // + // debugger + // console.log(e); + // + // if(e.target.value.length>0){ + // if(e.target.value.length>=16){ + // var result = e.target.value.substring(0,15); + // this.setState({ + // newkntypeinput: result + // }) + // } + // } } render() { @@ -35,7 +52,7 @@ class PaperDeletModel extends Component { >{/* {!question_id ? '新建' : '编辑'} */} - * + 题目解析:
diff --git a/public/react/src/modules/question/component/JudquestionEditor.js b/public/react/src/modules/question/component/JudquestionEditor.js index a48bef60a..b1dc1fb45 100644 --- a/public/react/src/modules/question/component/JudquestionEditor.js +++ b/public/react/src/modules/question/component/JudquestionEditor.js @@ -390,7 +390,7 @@ class JudquestionEditor extends Component{