Merge branch 'dev_aliyun' of http://bdgit.educoder.net/Hjqreturn/educoder into dev_aliyun

PCqiandao
anke1460 5 years ago
commit c603e446a5

@ -399,7 +399,7 @@ class ExercisesController < ApplicationController
choice_random = params[:choice_random] ? true : false choice_random = params[:choice_random] ? true : false
score_open = params[:score_open] ? true : false #分数是否公开 score_open = params[:score_open] ? true : false #分数是否公开
answer_open = params[:answer_open] ? true : false #答案是否公开 answer_open = params[:answer_open] ? true : false #答案是否公开
assistant_auth = params[:assistant_auth] ? true : false # 助教权限 assistant_auth = params[:assistant_auth] # 助教权限
# 统一设置或者分班为0则更新试卷并删除试卷分组 # 统一设置或者分班为0则更新试卷并删除试卷分组
if unified_setting || (course_group_ids.size == 0) if unified_setting || (course_group_ids.size == 0)
@ -532,7 +532,8 @@ class ExercisesController < ApplicationController
:answer_open => answer_open, :answer_open => answer_open,
:exercise_status => exercise_status, :exercise_status => exercise_status,
:publish_time => p_time, :publish_time => p_time,
:end_time => e_time :end_time => e_time,
:assistant_auth => assistant_auth
} }
@exercise.update!(exercise_params) @exercise.update!(exercise_params)
if @exercise.exercise_status == Exercise::PUBLISHED if @exercise.exercise_status == Exercise::PUBLISHED
@ -773,10 +774,11 @@ class ExercisesController < ApplicationController
ex_group_setting = exercise.exercise_group_settings ex_group_setting = exercise.exercise_group_settings
old_exercise_groups = ex_group_setting.find_in_exercise_group("course_group_id", g_course) #试卷的分组设置 old_exercise_groups = ex_group_setting.find_in_exercise_group("course_group_id", g_course) #试卷的分组设置
left_course_groups = teacher_course_group_ids - g_course left_course_groups = teacher_course_group_ids - g_course
all_left_groups = all_course_group_ids - g_course
left_exercise_groups = ex_group_setting.find_in_exercise_group("course_group_id", left_course_groups) left_exercise_groups = ex_group_setting.find_in_exercise_group("course_group_id", left_course_groups)
if left_exercise_groups.blank? && exercise.unified_setting if left_exercise_groups.blank? && exercise.unified_setting
if left_course_groups.size > 0 #开始为统一设置但是立即截止为分班。则创建没有立即截止的班级的exercise_group_setting if all_left_groups.size > 0 #开始为统一设置但是立即截止为分班。则创建没有立即截止的班级的exercise_group_setting
left_course_groups.each do |g| all_left_groups.each do |g|
ex_group_options = { ex_group_options = {
:exercise_id => exercise.id, :exercise_id => exercise.id,
:course_group_id => g, :course_group_id => g,

@ -359,6 +359,9 @@ class HomeworkCommonsController < ApplicationController
def new def new
tip_exception("type参数有误") if params[:type].blank? || ![1, 3].include?(params[:type].to_i) tip_exception("type参数有误") if params[:type].blank? || ![1, 3].include?(params[:type].to_i)
@homework_type = params[:type].to_i @homework_type = params[:type].to_i
module_type = params[:type].to_i == 1 ? "common_homework" : "group_homework"
@main_category = @course.course_modules.find_by(module_type: module_type)
@category = @main_category.course_second_categories.find_by(id: params[:category]) if params[:category].present?
end end
def create def create
@ -376,6 +379,11 @@ class HomeworkCommonsController < ApplicationController
@homework.user_id = current_user.id @homework.user_id = current_user.id
@homework.course_id = @course.id @homework.course_id = @course.id
if params[:category].present?
category = @course.course_second_categories.find_by(id: params[:category])
@homework.course_second_category_id = category&.id.to_i
end
homework_detail_manual = HomeworkDetailManual.new homework_detail_manual = HomeworkDetailManual.new
@homework.homework_detail_manual = homework_detail_manual @homework.homework_detail_manual = homework_detail_manual
homework_detail_manual.te_proportion = 0.7 homework_detail_manual.te_proportion = 0.7
@ -404,7 +412,12 @@ class HomeworkCommonsController < ApplicationController
end end
def edit def edit
if @homework.course_second_category_id == 0
module_type = @homework.homework_type == "normal" ? "common_homework" : "group_homework"
@main_category = @course.course_modules.find_by(module_type: module_type)
else
@category = @homework.course_second_category
end
end end
def update def update

@ -212,6 +212,11 @@ class QuestionBanksController < ApplicationController
homework_type: homework.homework_type, course_id: course.id, homework_bank_id: homework.id, homework_type: homework.homework_type, course_id: course.id, homework_bank_id: homework.id,
reference_answer: homework.reference_answer) reference_answer: homework.reference_answer)
if params[:category].present?
category = course.course_second_categories.find_by(id: params[:category])
new_homework.course_second_category_id = category&.id.to_i
end
# 作业的基本设置复制 # 作业的基本设置复制
new_homework.homework_detail_manual = HomeworkDetailManual.new new_homework.homework_detail_manual = HomeworkDetailManual.new
new_homework_detail_manual = new_homework.homework_detail_manual new_homework_detail_manual = new_homework.homework_detail_manual

@ -69,17 +69,18 @@ class HomeworkCommon < ApplicationRecord
# 作业对应的子目录/父目录名称 # 作业对应的子目录/父目录名称
def category_info def category_info
case self.homework_type if self.course_second_category.present?
when 'normal' {category_id: self.course_second_category.try(:id), category_name: self.course_second_category.try(:name), main: 0}
{category_id: course.common_course_modules.first.try(:id), category_name: course.common_course_modules.first.try(:module_name), main: 1} else
when 'group' course_module = case homework_type
{category_id: course.group_course_modules.first.try(:id), category_name: course.group_course_modules.first.try(:module_name), main: 1} when 'normal'
when 'practice' course.common_course_modules.take
if self.course_second_category.present? when 'group'
{category_id: self.course_second_category.try(:id), category_name: self.course_second_category.try(:name), main: 0} course.group_course_modules.take
else when 'practice'
{category_id: course.shixun_course_modules.take.try(:id), category_name: course.shixun_course_modules.take.try(:module_name), main: 1} course.shixun_course_modules.take
end end
{category_id: course_module.try(:id), category_name: course_module.try(:module_name), main: 1}
end end
end end

@ -1,7 +1,7 @@
json.exercise do json.exercise do
json.extract! @exercise, :id,:exercise_name, :exercise_status,:time,:publish_time, json.extract! @exercise, :id,:exercise_name, :exercise_status,:time,:publish_time,
:end_time,:score_open,:answer_open,:question_random,:choice_random, :end_time,:score_open,:answer_open,:question_random,:choice_random,
:unified_setting,:show_statistic :unified_setting,:show_statistic,:assistant_auth
json.course_id @course.id json.course_id @course.id
json.published_count @exercise_publish_count json.published_count @exercise_publish_count
json.unpublish_count @exercise_unpublish_count json.unpublish_count @exercise_unpublish_count

@ -14,6 +14,7 @@ json.data do
json.partial! "users/user_simple", user: attachment.author json.partial! "users/user_simple", user: attachment.author
end end
# json.partial! "files/course_groups", attachment_group_settings: attachment.attachment_group_settings # json.partial! "files/course_groups", attachment_group_settings: attachment.attachment_group_settings
json.category_id attachment.course_second_category_id
if @course_second_category_id.to_i == 0 if @course_second_category_id.to_i == 0
json.category_name attachment.course_second_category&.name json.category_name attachment.course_second_category&.name
end end

@ -1,6 +1,16 @@
json.course_id @course.id json.course_id @course.id
json.course_name @course.name json.course_name @course.name
json.category @homework.category_info # json.category @homework.category_info
json.category do
if @category.present?
json.category_id @category.id
json.category_name @category.name
else
json.category_id @main_category&.id
json.category_name @main_category&.module_name
end
end
json.(@homework, :id, :name, :description, :reference_answer) json.(@homework, :id, :name, :description, :reference_answer)

@ -1,3 +1,11 @@
json.course_id @course.id json.course_id @course.id
json.course_name @course.name json.course_name @course.name
json.category @course.category_info(@homework_type == 1 ? "common_homework" : "group_homework") json.category do
if @category.present?
json.category_id @category.id
json.category_name @category.name
else
json.category_id @main_category&.id
json.category_name @main_category&.module_name
end
end

@ -0,0 +1,9 @@
class AddIndexUserIdChallengeIdForGames < ActiveRecord::Migration[5.2]
def change
delete_games = Game.where.not(myshixun_id: Myshixun.all).reorder(nil)
puts "delete_games: #{delete_games.pluck(:id)}"
delete_games.destroy_all
add_index :games, [:user_id, :challenge_id], unique: true
end
end

@ -907,7 +907,7 @@ class College extends Component {
<div className="jibenshiyong100 sortinxdirection yinyin"> <div className="jibenshiyong100 sortinxdirection yinyin">
<div className="yslstatistic-base-item-labels"> <div className="yslstatistic-base-item-labels">
{ {
teachers_count? teachers_count || teachers_count===0?
<div className="yslstatistic-base-item-labelsp"> {teachers_count}<span className="yslstatistic-base-item-labelsspan"></span></div> <div className="yslstatistic-base-item-labelsp"> {teachers_count}<span className="yslstatistic-base-item-labelsspan"></span></div>
: :
<Spin/> <Spin/>
@ -915,7 +915,7 @@ class College extends Component {
</div> </div>
<div className="yslstatistic-base-item-labels"> <div className="yslstatistic-base-item-labels">
{ {
students_count? students_count || students_count===0?
<div className="yslstatistic-base-item-labelsp">{students_count}<span className="yslstatistic-base-item-labelsspan"></span></div> <div className="yslstatistic-base-item-labelsp">{students_count}<span className="yslstatistic-base-item-labelsspan"></span></div>
: :
<Spin/> <Spin/>
@ -923,7 +923,7 @@ class College extends Component {
</div> </div>
<div className="yslstatistic-base-item-labels"> <div className="yslstatistic-base-item-labels">
{ {
courses_count? courses_count || courses_count === 0?
<div className="yslstatistic-base-item-labelsp">{courses_count}<span className="yslstatistic-base-item-labelsspan"></span></div> <div className="yslstatistic-base-item-labelsp">{courses_count}<span className="yslstatistic-base-item-labelsspan"></span></div>
: :
<Spin/> <Spin/>
@ -931,7 +931,7 @@ class College extends Component {
</div> </div>
<div className="yslstatistic-base-item-labels"> <div className="yslstatistic-base-item-labels">
{ {
shixuns_count? shixuns_count || shixuns_count === 0?
<div className="yslstatistic-base-item-labelsp">{shixuns_count}<span className="yslstatistic-base-item-labelsspan"></span></div> <div className="yslstatistic-base-item-labelsp">{shixuns_count}<span className="yslstatistic-base-item-labelsspan"></span></div>
: :
<Spin/> <Spin/>
@ -939,7 +939,7 @@ class College extends Component {
</div> </div>
<div className="yslstatistic-base-item-labels"> <div className="yslstatistic-base-item-labels">
{ {
shixun_report_count? shixun_report_count || shixun_report_count===0?
<div className="yslstatistic-base-item-labelsp">{shixun_report_count}<span className="yslstatistic-base-item-labelsspan"></span></div> <div className="yslstatistic-base-item-labelsp">{shixun_report_count}<span className="yslstatistic-base-item-labelsspan"></span></div>
: :
<Spin/> <Spin/>
@ -947,7 +947,7 @@ class College extends Component {
</div> </div>
<div className="yslstatistic-base-item-labels"> <div className="yslstatistic-base-item-labels">
{ {
shixun_time? shixun_time || shixun_time === 0 ?
<div className="yslstatistic-base-item-labelsp">{shixun_time}<span className="yslstatistic-base-item-labelsspan"></span></div> <div className="yslstatistic-base-item-labelsp">{shixun_time}<span className="yslstatistic-base-item-labelsspan"></span></div>
: :
<Spin/> <Spin/>

@ -130,16 +130,17 @@ class CoursesBanner extends Component {
axios.get(url,{params: axios.get(url,{params:
dataqueryss dataqueryss
}).then((result) => { }).then((result) => {
if(result.data.status===-2){ try {
// this.setState({ if(result.data.status===-2){
// AccountProfiletype:true, // this.setState({
// content:result.data.message, // AccountProfiletype:true,
// okText:"立即认证", // content:result.data.message,
// cannelText:"稍后认证", // okText:"立即认证",
// okHref:`/account/certification`, // cannelText:"稍后认证",
// Accounturltype:true // okHref:`/account/certification`,
// }) // Accounturltype:true
}else{ // })
}else{
if( result!=undefined){ if( result!=undefined){
let data = result.data; let data = result.data;
this.setState({ this.setState({
@ -150,8 +151,12 @@ class CoursesBanner extends Component {
}else{ }else{
this.onloadupdatabanner() this.onloadupdatabanner()
} }
}
}catch (e) {
} }
}) })
}; };
foo=(url)=> { foo=(url)=> {

@ -42,8 +42,8 @@ class ModulationModal_exercise extends Component {
} }
componentDidMount = () => { componentDidMount = () => {
console.log("ModulationModal_exercise"); // console.log("ModulationModal_exercise");
console.log(this.props); // console.log(this.props);
this.setState({ this.setState({
subjective_score: this.props.subjective_score, subjective_score: this.props.subjective_score,
objective_score: this.props.objective_score, objective_score: this.props.objective_score,

@ -75,9 +75,10 @@ class ExerciseListItem extends Component{
let{item,checkBox,index}=this.props; let{item,checkBox,index}=this.props;
let {coursesId,Id}=this.props.match.params let {coursesId,Id}=this.props.match.params
const IsAdmin =this.props.isAdmin(); const IsAdmin =this.props.isAdmin();
const IsStudent =this.props.isStudent(); const isAssistant=this.props.isAssistant();
const IsStudent =this.props.isStudent();
// console.log(this.props.current_user.user_id)
return( return(
<div className="workList_Item" style={{cursor : IsAdmin ? "pointer" : "default",padding:"30px" }} onClick={() => window.$(`.exerciseitem${index} input`).click() }> <div className="workList_Item" style={{cursor : IsAdmin ? "pointer" : "default",padding:"30px" }} onClick={() => window.$(`.exerciseitem${index} input`).click() }>
{ {
@ -189,8 +190,31 @@ class ExerciseListItem extends Component{
{ IsAdmin &&<div className="homepagePostSetting" style={{"right":"-17px","top":"46px","display":"block","width":"200px"}}> { IsAdmin &&<div className="homepagePostSetting" style={{"right":"-17px","top":"46px","display":"block","width":"200px"}}>
<a className="btn colorblue font-16 ml20" onClick={()=>this.toDetailPage(`/classrooms/${coursesId}/exercises/${item.id}/student_exercise_list?tab=0`)}>查看详情</a> {
<Link className="btn colorblue font-16 ml20" to={`/classrooms/${coursesId}/exercises/${item.id}/edit`}>编辑</Link> isAssistant===true?
(
item&&item.assistant_auth===true?
<a className="btn colorblue font-16 ml20" onClick={()=>this.toDetailPage(`/classrooms/${coursesId}/exercises/${item.id}/student_exercise_list?tab=0`)}>查看详情</a>
:
<a className="btn colorblue font-16 " style={{
marginLeft: "73px"
}} onClick={()=>this.toDetailPage(`/classrooms/${coursesId}/exercises/${item.id}/student_exercise_list?tab=0`)}>查看详情</a>
)
:
<a className="btn colorblue font-16 ml20" onClick={()=>this.toDetailPage(`/classrooms/${coursesId}/exercises/${item.id}/student_exercise_list?tab=0`)}>查看详情</a>
}
{
isAssistant===true?
(
item&&item.assistant_auth===true?
<Link className="btn colorblue font-16 ml20" to={`/classrooms/${coursesId}/exercises/${item.id}/edit`}>编辑</Link>
:
""
)
:
<Link className="btn colorblue font-16 ml20" to={`/classrooms/${coursesId}/exercises/${item.id}/edit`}>编辑</Link>
}
<Link className="btn colorblue ml20 font-16" to={`/classrooms/${coursesId}/exercises/${item.id}/student_exercise_list?tab=3`}>设置</Link> <Link className="btn colorblue ml20 font-16" to={`/classrooms/${coursesId}/exercises/${item.id}/student_exercise_list?tab=3`}>设置</Link>
</div> } </div> }

@ -75,10 +75,11 @@ class Exercisesetting extends Component{
limit:10, limit:10,
searchtext:"", searchtext:"",
order: "end_at", order: "end_at",
assistant_auth:false
} }
console.log("Exercisesetting"); // console.log("Exercisesetting");
console.log("69"); // console.log("69");
console.log(props); // console.log(props);
} }
_getRequestParams() { _getRequestParams() {
const { order, exercise_group_id,searchtext, page ,limit} = this.state const { order, exercise_group_id,searchtext, page ,limit} = this.state
@ -92,6 +93,12 @@ class Exercisesetting extends Component{
} }
//加载 //加载
componentDidMount=()=>{ componentDidMount=()=>{
this.setState({
assistant_auth:this.props.assistant_auth,
})
this.getSettingInfo(); this.getSettingInfo();
// window.addEventListener('click', this.handleClick); // window.addEventListener('click', this.handleClick);
@ -108,11 +115,34 @@ class Exercisesetting extends Component{
if(this.props.isAdmin() === false){ if(this.props.isAdmin() === false){
this.cancelEdit() this.cancelEdit()
} }
try {
//是否为助教
if(this.props.isAssistant()===true){
//如果是助教是否有权限
if(this.props.assistant_auth===true){
this.setState({
flagPageEdit:true
})
}else{
this.setState({
flagPageEdit:false
})
}
}
}catch (e) {
}
} }
componentDidUpdate = (prevProps) => { componentDidUpdate = (prevProps) => {
if(prevProps.Commonheadofthetestpaper!= this.props.Commonheadofthetestpaper){ if(prevProps.Commonheadofthetestpaper!= this.props.Commonheadofthetestpaper){
this.editSetting() this.editSetting()
} }
if(prevProps.assistant_auth!= this.props.assistant_auth){
this.setState({
assistant_auth:this.props.assistant_auth,
})
}
} }
_getRequestParams() { _getRequestParams() {
@ -348,10 +378,16 @@ class Exercisesetting extends Component{
this.commitSetting((result)=>{ this.commitSetting((result)=>{
console.log(result) console.log(result)
if(result.status==200){ if(result.status===200){
this.props.showNotification(`${result.data.message}`); this.props.showNotification(`${result.data.message}`);
this.getSettingInfo(1); this.getSettingInfo(1);
this.cancelEdit(); this.cancelEdit();
try {
this.props.assistantauthoritys(this.state.assistant_auth);
}catch (e) {
}
} }
}) })
} }
@ -371,6 +407,12 @@ class Exercisesetting extends Component{
this.props.showNotification(`${result.data.message}`); this.props.showNotification(`${result.data.message}`);
this.cancelEdit(); this.cancelEdit();
this.getSettingInfo(1); this.getSettingInfo(1);
try {
this.props.assistantauthoritys(this.state.assistant_auth);
}catch (e) {
}
} }
}); });
@ -386,11 +428,12 @@ class Exercisesetting extends Component{
publish_time:this.state.publish_time, publish_time:this.state.publish_time,
end_time:this.state.end_time, end_time:this.state.end_time,
show_statistic:this.state.show_statistic, show_statistic:this.state.show_statistic,
choice_random:this.state.choice_random, choice_random:this.state.choice_random,
score_open:this.state.score_open, score_open:this.state.score_open,
answer_open:this.state.answer_open, answer_open:this.state.answer_open,
question_random:this.state.question_random, question_random:this.state.question_random,
time:this.state.time, time:this.state.time,
assistant_auth:this.state.assistant_auth,
} }
}else{ }else{
let list=this.state.rules; let list=this.state.rules;
@ -403,7 +446,6 @@ class Exercisesetting extends Component{
} }
lists.push(newlist) lists.push(newlist)
}) })
params={ params={
unified_setting:this.state.unified_setting, unified_setting:this.state.unified_setting,
show_statistic:this.state.show_statistic, show_statistic:this.state.show_statistic,
@ -413,6 +455,7 @@ class Exercisesetting extends Component{
answer_open:this.state.answer_open, answer_open:this.state.answer_open,
publish_time_groups:lists, publish_time_groups:lists,
time:this.state.time, time:this.state.time,
assistant_auth:this.state.assistant_auth,
} }
} }
axios.post((url),params).then((result)=>{ axios.post((url),params).then((result)=>{
@ -491,6 +534,12 @@ class Exercisesetting extends Component{
}) })
} }
assistantauthority=(e)=>{
this.setState({
assistant_auth:e.target.checked
})
}
onChangeTimepublish=(date, dateString)=>{ onChangeTimepublish=(date, dateString)=>{
if(date===null){ if(date===null){
this.setState({ this.setState({
@ -555,9 +604,33 @@ class Exercisesetting extends Component{
modalSave:this.cancelBox modalSave:this.cancelBox
}) })
}else{ }else{
this.setState({ if(this.props.isAdmin()===true){
flagPageEdit:true try {
}) //是否为助教
if(this.props.isAssistant()===true){
//如果是助教是否有权限
if(this.props.assistant_auth===true){
this.setState({
flagPageEdit:true
})
}else{
this.setState({
flagPageEdit:false
})
}
}else{
//是老师
this.setState({
flagPageEdit:true
})
}
}catch (e) {
this.setState({
flagPageEdit:true
})
}
}
} }
} }
//取消编辑 //取消编辑
@ -608,7 +681,9 @@ class Exercisesetting extends Component{
// console.log("asdasdasda"); // console.log("asdasdasda");
// console.log(this.props); // console.log(this.props);
// console.log(this.props.Commonheadofthetestpaper); // console.log(this.props.Commonheadofthetestpaper);
return(
return(
<div> <div>
<Modals <Modals
modalsType={modalsType} modalsType={modalsType}
@ -623,13 +698,22 @@ class Exercisesetting extends Component{
<span className="font-16 fl">发布设置<span className="color-grey-c font-14"></span></span> <span className="font-16 fl">发布设置<span className="color-grey-c font-14"></span></span>
{ {
!flagPageEdit&&this.props.isAdmin()===true ? !flagPageEdit&&this.props.isAdmin()===true ?
<a className="fr mr6 white-btn edu-blueline-btn lineh-24" onClick={this.editSetting}> (
编辑设置 this.props.isAssistant()===true?
{/*<Tooltip title="编辑">*/} (
{/*<i className="iconfont icon-bianjidaibeijing font-20 color-green"></i>*/} this.props.assistant_auth===true?
{/*</Tooltip>*/} <a className="fr mr6 white-btn edu-blueline-btn lineh-24" onClick={this.editSetting}>
</a> 编辑设置
:"" </a>
:
""
)
:
<a className="fr mr6 white-btn edu-blueline-btn lineh-24" onClick={this.editSetting}>
编辑设置
</a>
)
:""
} }
</p> </p>
@ -769,7 +853,7 @@ class Exercisesetting extends Component{
<div className="padding20-30"> <div className="padding20-30">
<p className="mb30 clearfix font-16">公开设置</p> <p className="mb30 clearfix font-16">属性设置</p>
<div className="pl33"> <div className="pl33">
<p className="mb20"> <p className="mb20">
@ -790,7 +874,7 @@ class Exercisesetting extends Component{
</Form.Item> </Form.Item>
<span className="color-grey-c">(选中则在试卷截止时间之后已提交答题的学生可以查看试卷题目的答案否则不能查看)</span> <span className="color-grey-c">(选中则在试卷截止时间之后已提交答题的学生可以查看试卷题目的答案否则不能查看)</span>
</p> </p>
<p className="clearfix mb5"> <p className="clearfix mb20">
<Form.Item className="fl pollForm"> <Form.Item className="fl pollForm">
{getFieldDecorator('show_statistic') {getFieldDecorator('show_statistic')
( (
@ -799,6 +883,15 @@ class Exercisesetting extends Component{
</Form.Item> </Form.Item>
<span className="color-grey-c">(选中则在试卷截止时间之后已提交答题的学生可以查看答题统计否则不能查看)</span> <span className="color-grey-c">(选中则在试卷截止时间之后已提交答题的学生可以查看答题统计否则不能查看)</span>
</p> </p>
<p className="clearfix mb5">
<Form.Item className="fl pollForm">
{getFieldDecorator('assistantauthority')
(
<Checkbox disabled={this.props.isAdmin()===true?!flagPageEdit:true} className="mr15 font-16 color-grey-6" checked={this.state.assistant_auth} onChange={this.assistantauthority}>助教权限</Checkbox>
)}
</Form.Item>
<span className="color-grey-c">(选中则允许助教查看答案)</span>
</p>
</div> </div>
</div> </div>
@ -808,7 +901,10 @@ class Exercisesetting extends Component{
<div className="clearfix mt30 ml40" style={{paddingBottom:'40px'}}> <div className="clearfix mt30 ml40" style={{paddingBottom:'40px'}}>
<Button type="primary" htmlType="submit" className="defalutSubmitbtn fl mr20">提交</Button> <Button type="primary" htmlType="submit" className="defalutSubmitbtn fl mr20">提交</Button>
<a className="defalutCancelbtn fl" onClick={this.cancelEdit}>取消</ a> <a className="defalutCancelbtn fl" onClick={this.cancelEdit}>取消</ a>
</div>:"" </div>
:""
} }
</Form> </Form>
@ -820,70 +916,3 @@ const WrappedExercisesetting = Form.create({ name: 'exercisesetting' })(Exercise
export default WrappedExercisesetting; export default WrappedExercisesetting;
// //提交form表单
// handleSubmit = (e) => {
//
// let{unified_setting,answer_open}=this.state;
// e.preventDefault();
// let exercise_id=this.props.match.params.Id;
//
// this.props.form.validateFieldsAndScroll((err, values) => {
// debugger
// if(!err){
// // 第一次进行问卷设置或者勾选了统一设置
// if(unified_setting==true){
// if(this.state.p_flag == false && this.state.e_flag == true){
// // 选择了发布时间但截至时间没有选择
// this.setState({
// modalsType:true,
// modalsTopval:"请选择截止时间",
// loadtype:true,
// modalSave:this.cancelBox
// })
// return;
// }else if(this.state.p_flag == true && this.state.e_flag == true){
// // 如果两个时间都没有填写则弹出立即发布弹框
// let{publish_time,end_time}=this.state
// if(publish_time==undefined && end_time ==undefined){
//
// }else{
// // 否则就是选择的时间错误
// this.setState({
// modalsType:true,
// modalsTopval:"请选择正确的发布时间和截止时间",
// loadtype:true,
// modalSave:this.cancelBox
// })
// }
// return;
// }
// }
//
// let url=`/exercises/${exercise_id}/commit_setting.json`;
// let params=[];
// if(values.unitSet){
// params={
// unified_setting:values.unitSet,
// publish_time:this.state.publish_time,
// end_time:this.state.end_time,
// show_result:values.public,
// un_anonymous:values.real
// }
// }else{
// params={
// unified_setting:values.unitSet,
// show_result:values.public,
// un_anonymous:values.real,
// publish_time_groups:this.state.rules
// }
// }
// axios.post((url),{params}).then((result)=>{
// if(result.status==200){
// this.props.showNotification(`${result.data.message}`);
// }
// }).catch((error)=>{
// console.log(error);
// })
// }
// })
// }

@ -28,6 +28,7 @@ const RadioGroup = Radio.Group;
const CheckboxGroup = Checkbox.Group; const CheckboxGroup = Checkbox.Group;
const {Option} = Select; const {Option} = Select;
//学生老师页面 //学生老师页面
let columnsystwo=[];
class Studentshavecompletedthelist extends Component { class Studentshavecompletedthelist extends Component {
// http://localhost:3007/courses/1309/exercises/722/exercises/student_exercise_list?debug=s // http://localhost:3007/courses/1309/exercises/722/exercises/student_exercise_list?debug=s
constructor(props) { constructor(props) {
@ -1158,237 +1159,56 @@ class Studentshavecompletedthelist extends Component {
<span> <span>
{ {
record.submitstate === "未提交"||record.commit_method===5? record.submitstate === "未提交"||record.commit_method===5?
<a style={{textAlign: "center"}} className="color-blue" (//是否助教
target="_blank" onClick={() => this.Adjustment(record.user_id)}>评阅</a> this.props.isAssistant()&&this.props.isAssistant()===true?
(//助教是否有权限
this.props.assistant_auth&&this.props.assistant_auth===true?
<a style={{textAlign: "center"}} className="color-blue"
target="_blank" onClick={() => this.Adjustment(record.user_id)}>评阅</a>
:
(//是否截止
this.props.Commonheadofthetestpaper && this.props.Commonheadofthetestpaper.exercise_status===3?
<a style={{textAlign: "center"}} className="color-blue"
target="_blank" onClick={() => this.Adjustment(record.user_id)}>评阅</a>
:
<span style={{textAlign: "center", color: '#999999'}}>--</span>
)
)
:
<a style={{textAlign: "center"}} className="color-blue"
target="_blank" onClick={() => this.Adjustment(record.user_id)}>评阅</a>
)
:record.submitstate === "已提交"? :record.submitstate === "已提交"?
<a style={{textAlign: "center"}} className="color-blue" (//是否助教
target="_blank" this.props.isAssistant()&&this.props.isAssistant()===true?
href={`/classrooms/${this.props.match.params.coursesId}/exercises/${this.props.match.params.Id}/users/${record.myid}`}>{record.finalscore}</a> (//助教是否有权限
this.props.assistant_auth&&this.props.assistant_auth===true?
<a style={{textAlign: "center"}} className="color-blue"
target="_blank"
href={`/classrooms/${this.props.match.params.coursesId}/exercises/${this.props.match.params.Id}/users/${record.myid}`}>{record.finalscore}</a>
:
(//是否截止
this.props.Commonheadofthetestpaper && this.props.Commonheadofthetestpaper.exercise_status===3?
<a style={{textAlign: "center"}} className="color-blue"
target="_blank"
href={`/classrooms/${this.props.match.params.coursesId}/exercises/${this.props.match.params.Id}/users/${record.myid}`}>{record.finalscore}</a>
:
<span style={{textAlign: "center", color: '#999999'}}>--</span>
)
)
:
<a style={{textAlign: "center"}} className="color-blue"
target="_blank"
href={`/classrooms/${this.props.match.params.coursesId}/exercises/${this.props.match.params.Id}/users/${record.myid}`}>{record.finalscore}</a>
)
: :
<span style={{textAlign: "center", color: '#999999'}}>--</span> <span style={{textAlign: "center", color: '#999999'}}>--</span>
} }
</span> </span>
) )
}, },
], ],
columnsystwo: [ // 也会被columnsys当作参数接收
{
title: '序号',
dataIndex: 'number',
key: 'number',
align: 'center',
className: "edu-txt-center font-14",
render: (text, record) => (
<span>
{record.number === "--" ?
<span style={{color: '#999999', textAlign: "center"}}>--</span>
:
<span style={{color: '#07111B', textAlign: "center"}}>{record.number}</span>
}
</span>
)
},
{
title: '姓名',
dataIndex: 'name',
key: 'name',
align: 'center',
className: "edu-txt-center font-14",
render: (text, record) => (
<span>
{record.name==="--"?
<span style={{color: '#999999', textAlign: "center"}}>{record.name}</span>
:
<span style={{color: '#07111B', textAlign: "center"}}>{record.name}</span>
}
</span>
)
},
{
title: '学号',
dataIndex: 'stduynumber',
key: 'stduynumber',
align: 'center',
className: "edu-txt-center font-14",
sorter: true,
sortDirections: sortDirections,
render: (text, record) => (
<span>
{record.stduynumber === "--" ?
<span style={{color: '#999999', textAlign: "center"}}>{record.stduynumber}</span>
:
<span style={{color: '#9A9A9A', textAlign: "center"}}>{record.stduynumber}</span>
}
</span>
),
},
{
title: '分班',
key: 'classroom',
dataIndex: 'classroom',
align: 'center',
className: "edu-txt-center font-14 maxnamewidth260 ",
width:'260px',
render: (text, record) => (
<span>
{record.classroom==="--"?
<span style={{color: '#999999', textAlign: "center"}} className="maxnamewidth260">{record.classroom}</span>
:
<a style={{color: '#07111B', textAlign: "center"}} className="maxnamewidth260" title={record.classroom}>{record.classroom}</a>
}
</span>
)
},
{
title: '提交状态',
dataIndex: 'submitstate',
key: 'submitstate',
align: 'center',
className: "edu-txt-center font-14",
render: (text, record) => (
<span>
<span style={record.submitstate === "未提交" ? {
color: '#999999',
textAlign: "center"
} : record.submitstate === "已提交" ? {color: '#29BD8B', textAlign: "center"} : {
color: '#29BD8B',
textAlign: "center"
}}>{record.submitstate}</span>
</span>
)
},
{
title: '提交时间',
dataIndex: 'updatetime',
key: 'updatetime',
align: 'center',
className: "edu-txt-center font-14",
sorter: true,
defaultSortOrder: 'descend',
sortDirections: sortDirections,
render: (text, record) => (
<span>
{record.updatetime==="--"?
<span style={{color: '#999999', textAlign: "center"}}>--</span>
:
<span style={{color: '#9A9A9A', textAlign: "center"}}>{record.updatetime}</span>
}
</span>
),
},
{
title: '客观题得分',
dataIndex: 'completion',
key: 'completion',
align: 'center',
className: "edu-txt-center font-14",
render: (text, record) => (
<span>
{record.completion=== "--"?
<span style={{color: '#999999', textAlign: "center"}}>--</span>
:
<span style={{color: '#07111B', textAlign: "center"}}>{record.completion}</span>
}
</span>
)
},
{
title: '主观题得分',
dataIndex: 'levelscore',
key: 'levelscore',
align: 'center',
className: "edu-txt-center font-14",
render: (text, record) => (
<span>
{record.levelscore==="--"?
<span style={{color: '#999999', textAlign: "center"}}>--</span>
:
<span style={{color: '#FF6800', textAlign: "center"}}>{record.levelscore}</span>
}
</span>
)
},
{
title: '最终成绩',
dataIndex: 'efficiencyscore',
key: 'efficiencyscore',
align: 'center',
className: "edu-txt-center font-14",
sorter: true,
sortDirections: sortDirections,
render: (text, record) => (
<span>
{record.efficiencyscore === "--" ?
<Tooltip placement="bottom" title={<div>
<div>未评分</div>
</div>}>
<a style={{color: '#999999',
textAlign: "center",}}>--</a>
</Tooltip>
:
record.commit_method===5?
<Tooltip placement="bottom" title={
<div>
<div>最终调整成绩{record.efficiencyscore}</div>
</div>}>
<span style={parseInt(record.efficiencyscore) > 90 ? {
color: '#DD1717',
textAlign: "center",
} : parseInt(record.efficiencyscore) <= 90 ? {
color: '#FF6800',
textAlign: "center",
} : parseInt(record.efficiencyscore) <= 60 ? {
color: '#747A7F',
textAlign: "center",
} : {
color: '#747A7F',
textAlign: "center",
}}>{record.efficiencyscore}</span>
</Tooltip>
:
<span style={parseInt(record.efficiencyscore) > 90 ? {
color: '#DD1717',
textAlign: "center",
} : parseInt(record.efficiencyscore) <= 90 ? {
color: '#FF6800',
textAlign: "center",
} : parseInt(record.efficiencyscore) <= 60 ? {
color: '#747A7F',
textAlign: "center",
} : {
color: '#747A7F',
textAlign: "center",
}}>{record.efficiencyscore}</span>
}
</span>
)
},
{
title: '操作',
dataIndex: 'finalscore',
key: 'finalscore',
align: 'center',
className: "edu-txt-center font-14",
render: (text, record) => (
<span>
{
record.submitstate === "未提交"||record.commit_method===5?
<a style={{textAlign: "center"}} className="color-blue"
target="_blank" onClick={() => this.Adjustment(record.user_id)}>评阅</a>
:record.submitstate === "已提交"?
<a style={{textAlign: "center"}} className="color-blue"
target="_blank"
href={`/classrooms/${this.props.match.params.coursesId}/exercises/${this.props.match.params.Id}/users/${record.myid}`}>{record.finalscore}</a>
:
<span style={{textAlign: "center", color: '#999999'}}>--</span>
}
</span>
)
},
],//columnsystwo 也会被columnsys当作参数接收
exercise_status:0, exercise_status:0,
order_type: "desc", order_type: "desc",
exeuserid: 0, exeuserid: 0,
@ -1449,20 +1269,23 @@ class Studentshavecompletedthelist extends Component {
} }
componentDidMount() { componentDidMount() {
// if(this.props.isAdmin() === true){ //被columnsys当作参数接收
// this.Teacherliststudentlistsy(); // console.log("componentDidMount");
// //console.log("1111111111111111"); // console.log(columnsystwo);
// //console.log(this.props.isAdmin()); try {
// }else { columnsystwo=this.state.columnsys;
}catch (e) {
}
// console.log(columnsystwo);
this.Teacherliststudentlist(); this.Teacherliststudentlist();
// //console.log("2222222222222");
// //console.log(this.props.isAdmin());
// }
try { try {
this.props.triggerRef(this); this.props.triggerRef(this);
}catch (e) { }catch (e) {
} }
} }
componentWillReceiveProps = (nextProps) => { componentWillReceiveProps = (nextProps) => {
@ -2163,7 +1986,7 @@ class Studentshavecompletedthelist extends Component {
course_groups: response.data.course_groups, course_groups: response.data.course_groups,
mylistansum:response.data.exercise_types.answer_users+response.data.exercise_types.unanswer_users, mylistansum:response.data.exercise_types.answer_users+response.data.exercise_types.unanswer_users,
loadingstate: false, loadingstate: false,
columnsys: this.state.columnsystwo, columnsys: columnsystwo,
subjective: response.data.exercise_types.subjective, subjective: response.data.exercise_types.subjective,
objective_score: response.data.exercise_types.objective_score, objective_score: response.data.exercise_types.objective_score,
subjective_score: response.data.exercise_types.subjective_score, subjective_score: response.data.exercise_types.subjective_score,
@ -2772,8 +2595,16 @@ class Studentshavecompletedthelist extends Component {
} }
// 调分 // 调分
Adjustment = (e) => { Adjustment = (e) => {
console.log("Adjustment"); // console.log("Adjustment");
console.log(e); // console.log(e);
if(this.state.objective_score===0&&this.state.subjective_score===0){
this.props.showNotification('试卷题型分被限制为0分不能调分请点击编辑试卷修改题型分数');
return
}
this.setState({ this.setState({
testpapergradingboll: true, testpapergradingboll: true,
exeuserid: e, exeuserid: e,
@ -2828,8 +2659,8 @@ class Studentshavecompletedthelist extends Component {
// //console.log("this.props.Commonheadofthetestpaper.exercise_status"); // //console.log("this.props.Commonheadofthetestpaper.exercise_status");
// //console.log(this.props.Commonheadofthetestpaper&&this.props.Commonheadofthetestpaper.exercise_status); // //console.log(this.props.Commonheadofthetestpaper&&this.props.Commonheadofthetestpaper.exercise_status);
// //console.log(exercise_status); // //console.log(exercise_status);
console.log("Studentshavecompletedthelis123123t"); // console.log("Studentshavecompletedthelis123123t");
console.log(columnss); // console.log(columnss);
return ( return (
isAdmin === true ? isAdmin === true ?
( (

@ -35,6 +35,7 @@ class Testpapersettinghomepage extends Component{
DownloadMessageval:undefined, DownloadMessageval:undefined,
donwloading:false, donwloading:false,
exercise_status:3, exercise_status:3,
assistant_auth:false, //设置助教
} }
} }
//切换tab //切换tab
@ -72,6 +73,7 @@ class Testpapersettinghomepage extends Component{
Commonheadofthetestpaper:response.data, Commonheadofthetestpaper:response.data,
current_status:response.data.user_permission.current_status, current_status:response.data.user_permission.current_status,
exercise_status:response.data.exercise_status, exercise_status:response.data.exercise_status,
assistant_auth:response.data.assistant_auth,
}) })
// console.log(JSON.stringify(response.data.show_statistic)); // console.log(JSON.stringify(response.data.show_statistic));
@ -85,6 +87,12 @@ class Testpapersettinghomepage extends Component{
} }
assistantauthoritys=(bool)=>{
this.setState({
assistant_auth:bool,
})
}
Ecerciseacallagain=()=>{ Ecerciseacallagain=()=>{
this.setState({ this.setState({
visible:true visible:true
@ -287,9 +295,11 @@ class Testpapersettinghomepage extends Component{
this.props.history.goBack() this.props.history.goBack()
} }
render(){ render(){
let {tab,visible,Commonheadofthetestpaper,exercise_status}=this.state; let {tab,visible,Commonheadofthetestpaper,exercise_status,assistant_auth}=this.state;
const isAdmin =this.props.isAdmin(); const isAdmin =this.props.isAdmin();
const isStudent = this.props.isStudent(); const isAssistant=this.props.isAssistant();
const isStudent = this.props.isStudent();
// TODO // TODO
//console.log(Commonheadofthetestpaper.exercise_status); //console.log(Commonheadofthetestpaper.exercise_status);
@ -353,7 +363,26 @@ class Testpapersettinghomepage extends Component{
<div className="stud-class-set bor-bottom-greyE "> <div className="stud-class-set bor-bottom-greyE ">
<div className=" clearfix edu-back-white pl30 pr30"> <div className=" clearfix edu-back-white pl30 pr30">
<div className="fl task_menu_ul"> <div className="fl task_menu_ul">
{this.props.isAdmin()===true? {isAssistant===true?
(
assistant_auth===true?
<Menu mode="horizontal" selectedKeys={tab} onClick={this.changeTab}>
<Menu.Item key="0" className={"exercisesafonts"}>答题列表</Menu.Item>
<Menu.Item key="1" className={"exercisesafonts"}>统计结果</Menu.Item>
<Menu.Item key="2" className={"exercisesafonts"}>试卷预览</Menu.Item>
<Menu.Item key="3" className={"exercisesafonts"}>设置</Menu.Item>
</Menu>
:
<Menu mode="horizontal" selectedKeys={tab} onClick={this.changeTab}>
<Menu.Item key="0" className={"exercisesafonts"}>答题列表</Menu.Item>
{Commonheadofthetestpaper&&Commonheadofthetestpaper.show_statistic===true?
Commonheadofthetestpaper && Commonheadofthetestpaper.exercise_status===3?
<Menu.Item key="1" className={"exercisesafonts"}>统计结果</Menu.Item>:"":""}
<Menu.Item key="3" className={"exercisesafonts"}>设置</Menu.Item>
</Menu>
)
:
this.props.isAdmin()===true?
<Menu mode="horizontal" selectedKeys={tab} onClick={this.changeTab}> <Menu mode="horizontal" selectedKeys={tab} onClick={this.changeTab}>
<Menu.Item key="0" className={"exercisesafonts"}>答题列表</Menu.Item> <Menu.Item key="0" className={"exercisesafonts"}>答题列表</Menu.Item>
<Menu.Item key="1" className={"exercisesafonts"}>统计结果</Menu.Item> <Menu.Item key="1" className={"exercisesafonts"}>统计结果</Menu.Item>
@ -437,7 +466,23 @@ class Testpapersettinghomepage extends Component{
getsetdata={this.getsetdata} getsetdata={this.getsetdata}
></ImmediatelyPublish> ></ImmediatelyPublish>
:"":""} :"":""}
{isAdmin === true? <Link className="fr color-blue font-16 mt20 mr20" to={`/classrooms/${this.props.match.params.coursesId}/exercises/${this.props.match.params.Id}/edit`}>编辑试卷</Link>:""} {/*const isAdminOrTeacher*/}
{/*assistant_auth===true*/}
{/**/}
{isAdmin === true?
(
isAssistant===true?
(
assistant_auth===true?
<Link className="fr color-blue font-16 mt20 mr20" to={`/classrooms/${this.props.match.params.coursesId}/exercises/${this.props.match.params.Id}/edit`}>编辑试卷</Link>
:
""
)
:
<Link className="fr color-blue font-16 mt20 mr20" to={`/classrooms/${this.props.match.params.coursesId}/exercises/${this.props.match.params.Id}/edit`}>编辑试卷</Link>
)
:""}
{isAdmin === false && this.props.current_user !== undefined? {isAdmin === false && this.props.current_user !== undefined?
Commonheadofthetestpaper&&Commonheadofthetestpaper.user_permission.current_status===2? Commonheadofthetestpaper&&Commonheadofthetestpaper.user_permission.current_status===2?
@ -461,22 +506,22 @@ class Testpapersettinghomepage extends Component{
/> />
{ {
// 教师列表 // 教师列表
parseInt(tab[0])==0 ? <Studentshavecompletedthelist {...this.props} {...this.state} triggerRef={this.bindRef} setcourse_groupysls={(value)=>this.setcourse_groupysls(value)} current_status = {this.state.current_status} Commonheadofthetestpaper={this.state.Commonheadofthetestpaper} yslstustate={[`${polls_status[Commonheadofthetestpaper && Commonheadofthetestpaper.exercise_status]}`]}></Studentshavecompletedthelist>:"" parseInt(tab[0])==0 ? <Studentshavecompletedthelist {...this.props} {...this.state} assistant_auth={assistant_auth} triggerRef={this.bindRef} setcourse_groupysls={(value)=>this.setcourse_groupysls(value)} current_status = {this.state.current_status} Commonheadofthetestpaper={this.state.Commonheadofthetestpaper} yslstustate={[`${polls_status[Commonheadofthetestpaper && Commonheadofthetestpaper.exercise_status]}`]}></Studentshavecompletedthelist>:""
} }
{/*统计结果*/} {/*统计结果*/}
{ {
parseInt(tab[0])==1 ? <Exercisestatisticalresult {...this.props} {...this.state} triggerRef={this.bindRef}></Exercisestatisticalresult>:"" parseInt(tab[0])==1 ? <Exercisestatisticalresult {...this.props} {...this.state} assistant_auth={assistant_auth} triggerRef={this.bindRef}></Exercisestatisticalresult>:""
} }
{ {
parseInt(tab[0])==2 ? <ExerciseDisplay {...this.props} {...this.state} triggerRef={this.bindRef}></ExerciseDisplay>:"" parseInt(tab[0])==2 ? <ExerciseDisplay {...this.props} {...this.state} assistant_auth={assistant_auth} triggerRef={this.bindRef}></ExerciseDisplay>:""
} }
{ {
parseInt(tab[0])==3 ? <WrappedExercisesetting Commonheadofthetestpaper={this.state.Commonheadofthetestpaper} {...this.props} {...this.state} triggerRef={this.bindRef} Commonheadofthetestpapers={this.Commonheadofthetestpaper}></WrappedExercisesetting>:"" parseInt(tab[0])==3 ? <WrappedExercisesetting Commonheadofthetestpaper={this.state.Commonheadofthetestpaper} {...this.props} {...this.state} assistant_auth={assistant_auth} triggerRef={this.bindRef} Commonheadofthetestpapers={this.Commonheadofthetestpaper} assistantauthoritys={(bool)=>this.assistantauthoritys(bool)}></WrappedExercisesetting>:""
} }
</div> </div>
</div> </div>

@ -276,6 +276,10 @@ export function TPMIndexHOC(WrappedComponent) {
isAdminOrTeacher = () => { isAdminOrTeacher = () => {
return this.state.coursedata&&this.state.coursedata.course_identity < 4 return this.state.coursedata&&this.state.coursedata.course_identity < 4
} }
// 助教===4
isAssistant=()=>{
return this.state.coursedata&&this.state.coursedata.course_identity ===4
}
// 超管、运维、课堂管理、老师、助教0-4 // 超管、运维、课堂管理、老师、助教0-4
isAdmin = () => { isAdmin = () => {
return this.state.coursedata&&this.state.coursedata.course_identity < 5 return this.state.coursedata&&this.state.coursedata.course_identity < 5
@ -711,6 +715,7 @@ export function TPMIndexHOC(WrappedComponent) {
isAdmin: this.isAdmin, isAdmin: this.isAdmin,
isAdminOrTeacher: this.isAdminOrTeacher, isAdminOrTeacher: this.isAdminOrTeacher,
isAssistant:this.isAssistant,
isStudent: this.isStudent, isStudent: this.isStudent,
isAdminOrStudent: this.isAdminOrStudent, isAdminOrStudent: this.isAdminOrStudent,
isNotMember: this.isNotMember, isNotMember: this.isNotMember,

Loading…
Cancel
Save