diff --git a/app/controllers/application_controller.rb b/app/controllers/application_controller.rb index a15e2b5ab..2ce52d405 100644 --- a/app/controllers/application_controller.rb +++ b/app/controllers/application_controller.rb @@ -253,7 +253,7 @@ class ApplicationController < ActionController::Base # 测试版前端需求 logger.info("subdomain:#{request.subdomain}") - if request.subdomain == "pre-newweb" + if request.subdomain == "test-newweb" if params[:debug] == 'teacher' #todo 为了测试,记得讲debug删除 User.current = User.find 81403 elsif params[:debug] == 'student' diff --git a/app/controllers/courses_controller.rb b/app/controllers/courses_controller.rb index bec53f993..0dc8829da 100644 --- a/app/controllers/courses_controller.rb +++ b/app/controllers/courses_controller.rb @@ -426,7 +426,7 @@ class CoursesController < ApplicationController active_student_exist = CourseMember.where(user_id: user[:user_id], role: 4, course_id: @course.id, is_active: 1).any? is_active = active_student_exist ? 0 : 1 user_id = User.find(user[:user_id]).id - existing_teacher = CourseMember.find_by(course_id: @course.id, user_id: user_id, role: role) + existing_teacher = CourseMember.find_by(course_id: @course.id, user_id: user_id, role: %i[CREATOR PROFESSOR ASSISTANT_PROFESSOR]) if existing_teacher.blank? teacher_ids << user_id member = CourseMember.create(course_id: @course.id, graduation_group_id: @graduation_group_id, user_id: user_id, role: role, is_active: is_active) @@ -812,43 +812,37 @@ class CoursesController < ApplicationController # 搜索添加学生 def add_students_by_search + student_ids = [] ActiveRecord::Base.transaction do - begin - user_ids = params[:user_ids] - course_group_id = params[:course_group_id].to_i - if course_group_id != 0 - course_group = CourseGroup.find(course_group_id) - course_group_id = course_group.id - end + user_ids = params[:user_ids] + course_group_id = params[:course_group_id].to_i + if course_group_id != 0 + course_group = CourseGroup.find(course_group_id) + course_group_id = course_group.id + end - student_ids = [] - user_ids.each do |user_id| - existing_course_member = @course.course_members.find_by(user_id: user_id.to_i) - new_student = CourseMember.new(user_id: user_id.to_i, course_id: @course.id, course_group_id: course_group_id, role: 4) + user_ids.each do |user_id| + existing_course_member = @course.course_members.find_by(user_id: user_id.to_i) + new_student = CourseMember.new(user_id: user_id.to_i, course_id: @course.id, course_group_id: course_group_id, role: 4) - if existing_course_member.present? - if existing_course_member.STUDENT? - existing_course_member.update_attributes(course_group_id: course_group_id) - else - new_student.is_active = 0 if existing_course_member.is_active - new_student.save! - student_ids << user_id - end + if existing_course_member.present? + if existing_course_member.STUDENT? + existing_course_member.update_attributes(course_group_id: course_group_id) else + new_student.is_active = 0 if existing_course_member.is_active new_student.save! student_ids << user_id end + else + new_student.save! + student_ids << user_id end - - CourseAddStudentCreateWorksJob.perform_later(@course.id, student_ids) if student_ids.present? - TeacherInviteJoinCourseNotifyJob.perform_later(current_user.id, @course.id, 10, student_ids) if student_ids.present? - normal_status(0, "添加成功") - rescue => e - uid_logger(e.message) - tip_exception("添加失败") - raise ActiveRecord::Rollback end end + + CourseAddStudentCreateWorksJob.perform_later(@course.id, student_ids) if student_ids.present? + TeacherInviteJoinCourseNotifyJob.perform_later(current_user.id, @course.id, 10, student_ids) if student_ids.present? + normal_status(0, "添加成功") end # 获取历史课堂,即用户管理的所有课堂以及课堂下的分班(去除当前课堂) diff --git a/app/controllers/graduation_tasks_controller.rb b/app/controllers/graduation_tasks_controller.rb index fe7511e29..a159cff59 100644 --- a/app/controllers/graduation_tasks_controller.rb +++ b/app/controllers/graduation_tasks_controller.rb @@ -326,7 +326,7 @@ class GraduationTasksController < ApplicationController tip_exception("截止时间不能晚于课堂结束时间(#{@course.end_date.end_of_day.strftime("%Y-%m-%d %H:%M")})") if @course.end_date.present? && params[:end_time] > @course.end_date.end_of_day - ActiveRecord::Base.transaction do + # ActiveRecord::Base.transaction do begin tasks = @course.graduation_tasks.where(id: params[:task_ids], status: 0). where("publish_time is null or publish_time > '#{Time.now}'") @@ -350,7 +350,7 @@ class GraduationTasksController < ApplicationController tip_exception(e.message) raise ActiveRecord::Rollback end - end + # end end def end_task diff --git a/app/controllers/homework_commons_controller.rb b/app/controllers/homework_commons_controller.rb index c0da42aa8..3b395bab2 100644 --- a/app/controllers/homework_commons_controller.rb +++ b/app/controllers/homework_commons_controller.rb @@ -927,18 +927,10 @@ class HomeworkCommonsController < ApplicationController unless params[:category_id].blank? @category = @course.course_second_categories.find_by(id: params[:category_id], category_type: "shixun_homework") end - ActiveRecord::Base.transaction do - begin - shixuns.each do |shixun| - homework = HomeworksService.new.create_homework shixun, @course, @category, current_user - @homework_ids << homework.id - CreateStudentWorkJob.perform_later(homework.id) - end - rescue Exception => e - uid_logger(e.message) - tip_exception("创建失败") - raise ActiveRecord::Rollback - end + shixuns.each do |shixun| + homework = HomeworksService.new.create_homework shixun, @course, @category, current_user + @homework_ids << homework.id + CreateStudentWorkJob.perform_later(homework.id) end end @@ -1019,29 +1011,21 @@ class HomeworkCommonsController < ApplicationController none_shixun_ids = ShixunSchool.where("school_id != #{current_user.school_id}").pluck(:shixun_id) course_module = @course.course_modules.find_by(module_type: "shixun_homework") - ActiveRecord::Base.transaction do - begin - subjects.each do |subject| + subjects.each do |subject| - subject.stages.each do |stage| + subject.stages.each do |stage| - # 为实训作业创建与stage同名的子目录 - category = CourseSecondCategory.find_by(name: stage.name, course_id: @course.id, category_type: "shixun_homework") || - CourseSecondCategory.create!(name: stage.name, course_id: @course.id, category_type: "shixun_homework", - course_module_id: course_module.id, position: course_module.course_second_categories.count + 1) + # 为实训作业创建与stage同名的子目录 + category = CourseSecondCategory.find_by(name: stage.name, course_id: @course.id, category_type: "shixun_homework") || + CourseSecondCategory.create!(name: stage.name, course_id: @course.id, category_type: "shixun_homework", + course_module_id: course_module.id, position: course_module.course_second_categories.count + 1) - # 去掉不对当前用户的单位公开的实训,已发布的实训 - stage.shixuns.where.not(shixuns: {id: none_shixun_ids}).unhidden.each do |shixun| - homework = HomeworksService.new.create_homework shixun, @course, category, current_user - @homework_ids << homework.id - CreateStudentWorkJob.perform_later(homework.id) - end - end + # 去掉不对当前用户的单位公开的实训,已发布的实训 + stage.shixuns.where.not(shixuns: {id: none_shixun_ids}).unhidden.each do |shixun| + homework = HomeworksService.new.create_homework shixun, @course, category, current_user + @homework_ids << homework.id + CreateStudentWorkJob.perform_later(homework.id) end - rescue Exception => e - uid_logger(e.message) - tip_exception("创建失败") - raise ActiveRecord::Rollback end end end @@ -1070,7 +1054,7 @@ class HomeworkCommonsController < ApplicationController charge_group_ids = @course.charge_group_ids(current_user) publish_groups = charge_group_ids & params[:group_ids] if params[:group_ids] - ActiveRecord::Base.transaction do + # ActiveRecord::Base.transaction do begin homeworks.each do |homework| # 作业未发布时 @@ -1141,7 +1125,7 @@ class HomeworkCommonsController < ApplicationController tip_exception("发布失败") raise ActiveRecord::Rollback end - end + # end end def end_groups @@ -1170,9 +1154,9 @@ class HomeworkCommonsController < ApplicationController charge_group_ids = @course.charge_group_ids(current_user) end_groups = charge_group_ids & params[:group_ids] if params[:group_ids] - ActiveRecord::Base.transaction do - begin - homeworks.each do |homework| + begin + homeworks.each do |homework| + ActiveRecord::Base.transaction do homework_detail_manual = homework.homework_detail_manual # 分组设置 @@ -1187,7 +1171,7 @@ class HomeworkCommonsController < ApplicationController none_end_settings.update_all(end_time: time) student_works = homework.student_works.where(user_id: course_students.where(course_group_id: none_end_settings. - pluck(:course_group_id)).pluck(:user_id)).has_committed if homework.homework_type == "practice" + pluck(:course_group_id)).pluck(:user_id)).has_committed if homework.homework_type == "practice" homework.end_time = homework.max_group_end_time if homework.end_time > time && homework_detail_manual.try(:comment_status) > 1 @@ -1210,40 +1194,40 @@ class HomeworkCommonsController < ApplicationController student_works.joins(:myshixun).where("myshixuns.status != 1").update_all(late_penalty: homework.late_penalty) if homework.allow_late =begin - student_works.where("work_status != 0").includes(:myshixun).each do |student_work| - unless student_work.myshixun.is_complete? - student_work.update_attributes(work_status: 2, late_penalty: homework.late_penalty) - student_work.late_penalty = homework.late_penalty - end - HomeworksService.new.set_shixun_final_score student_work, student_work.myshixun, homework_detail_manual.answer_open_evaluation, - homework_challenge_settings + student_works.where("work_status != 0").includes(:myshixun).each do |student_work| + unless student_work.myshixun.is_complete? + student_work.update_attributes(work_status: 2, late_penalty: homework.late_penalty) + student_work.late_penalty = homework.late_penalty end + HomeworksService.new.set_shixun_final_score student_work, student_work.myshixun, homework_detail_manual.answer_open_evaluation, + homework_challenge_settings + end - student_works.where("work_status = 0").each do |student_work| - myshixun = Myshixun.where(shixun_id: shixun.id, user_id: student_work.user_id).first - if myshixun.present? - student_work.update_attributes(work_status: (myshixun.is_complete? ? 1 : 2), - late_penalty: myshixun.is_complete? ? 0 : homework.late_penalty, - commit_time: myshixun.created_at, myshixun_id: myshixun.id) - student_work.late_penalty = myshixun.is_complete? ? 0 : homework.late_penalty - HomeworksService.new.set_shixun_final_score student_work, myshixun, homework_detail_manual.answer_open_evaluation, - homework_challenge_settings - end + student_works.where("work_status = 0").each do |student_work| + myshixun = Myshixun.where(shixun_id: shixun.id, user_id: student_work.user_id).first + if myshixun.present? + student_work.update_attributes(work_status: (myshixun.is_complete? ? 1 : 2), + late_penalty: myshixun.is_complete? ? 0 : homework.late_penalty, + commit_time: myshixun.created_at, myshixun_id: myshixun.id) + student_work.late_penalty = myshixun.is_complete? ? 0 : homework.late_penalty + HomeworksService.new.set_shixun_final_score student_work, myshixun, homework_detail_manual.answer_open_evaluation, + homework_challenge_settings end + end =end # 更新所有学生的效率分(重新取homework确保是更新后的) - HomeworkEndUpdateScoreJob.perform_later(homework.id) if !homework.allow_late && homework.end_time <= time end end homework.save! end - normal_status(0, "更新成功") - rescue Exception => e - uid_logger(e.message) - tip_exception("操作失败") - raise ActiveRecord::Rollback + HomeworkEndUpdateScoreJob.perform_later(homework.id) if !homework.allow_late && homework.end_time <= time end + normal_status(0, "更新成功") + rescue Exception => e + uid_logger(e.message) + tip_exception("操作失败") + raise ActiveRecord::Rollback end end diff --git a/app/controllers/subjects_controller.rb b/app/controllers/subjects_controller.rb index 952301053..ccd07c811 100644 --- a/app/controllers/subjects_controller.rb +++ b/app/controllers/subjects_controller.rb @@ -203,26 +203,24 @@ class SubjectsController < ApplicationController stages = @subject.stages.where(id: @subject.stage_shixuns.where(shixun_id: params[:shixun_ids]).pluck(:stage_id)) course_module = @course.course_modules.where(module_type: "shixun_homework").first + homework_ids = [] ActiveRecord::Base.transaction do - begin - # 将实训课程下的所有已发布实训按顺序发送到课堂,同时创建与章节同名的实训作业目录 - stages.each do |stage| - category = CourseSecondCategory.where(name: stage.name, course_id: @course.id, category_type: "shixun_homework").first || - CourseSecondCategory.create!(name: stage.name, course_id: @course.id, category_type: "shixun_homework", - course_module_id: course_module.id, position: course_module.course_second_categories.count + 1) - - stage.shixuns.where(id: params[:shixun_ids], status: 2).each do |shixun| - homework = HomeworksService.new.create_homework shixun, @course, category, current_user - CreateStudentWorkJob.perform_later(homework.id) - end + # 将实训课程下的所有已发布实训按顺序发送到课堂,同时创建与章节同名的实训作业目录 + stages.each do |stage| + category = CourseSecondCategory.where(name: stage.name, course_id: @course.id, category_type: "shixun_homework").first || + CourseSecondCategory.create!(name: stage.name, course_id: @course.id, category_type: "shixun_homework", + course_module_id: course_module.id, position: course_module.course_second_categories.count + 1) + + stage.shixuns.where(id: params[:shixun_ids], status: 2).each do |shixun| + homework = HomeworksService.new.create_homework shixun, @course, category, current_user + homework_ids << homework.id end - rescue Exception => e - uid_logger(e.message) - tip_exception(e.message) - raise ActiveRecord::Rollback end end + homework_ids.each do |homework_id| + CreateStudentWorkJob.perform_later(homework_id) + end end def publish diff --git a/app/models/course.rb b/app/models/course.rb index c66c597d4..ba818449e 100644 --- a/app/models/course.rb +++ b/app/models/course.rb @@ -82,6 +82,7 @@ class Course < ApplicationRecord scope :ended, ->(is_end = true) { where(is_end: is_end) } scope :processing, -> { where(is_end: false) } scope :not_deleted, -> { where(is_delete: 0) } + scope :not_excellent, -> { where(excellent: 0) } scope :deleted, ->(is_delete = 1) { where(is_delete: is_delete) } scope :by_user, ->(user) { joins(:course_members).where('course_members.user_id = ?', user.id).order(updated_at: :desc) } scope :by_keywords, lambda { |keywords| @@ -356,7 +357,7 @@ class Course < ApplicationRecord def my_subject_progress my_challenge_count = Game.joins(:challenge).where(user_id: User.current.id, status: 2, challenges: {shixun_id: shixuns.published_closed}). pluck(:challenge_id).uniq.size - course_challeng_count = course.shixuns.pluck(:challenges_count).sum + course_challeng_count = shixuns.pluck(:challenges_count).sum count = course_challeng_count == 0 ? 0 : ((my_challenge_count.to_f / course_challeng_count).round(2) * 100).to_i end diff --git a/app/services/users/course_service.rb b/app/services/users/course_service.rb index de70c5b86..db9be69bc 100644 --- a/app/services/users/course_service.rb +++ b/app/services/users/course_service.rb @@ -11,7 +11,7 @@ class Users::CourseService end def call - courses = category_scope_courses.not_deleted + courses = category_scope_courses.not_deleted.not_excellent courses = status_filter(courses) diff --git a/app/views/courses/online_learning.json.jbuilder b/app/views/courses/online_learning.json.jbuilder index 9c87743ee..057ec61cf 100644 --- a/app/views/courses/online_learning.json.jbuilder +++ b/app/views/courses/online_learning.json.jbuilder @@ -8,4 +8,4 @@ json.start_learning @start_learning json.learned @start_learning ? @course.my_subject_progress : 0 -json.last_shixun @start_learning ? last_subject_shixun(@user.id, @subject) : "" \ No newline at end of file +json.last_shixun @start_learning ? last_subject_shixun(@user.id, @course) : "" \ No newline at end of file diff --git a/db/migrate/20190911020749_migrate_shixun_student_work.rb b/db/migrate/20190911020749_migrate_shixun_student_work.rb new file mode 100644 index 000000000..54474c544 --- /dev/null +++ b/db/migrate/20190911020749_migrate_shixun_student_work.rb @@ -0,0 +1,18 @@ +class MigrateShixunStudentWork < ActiveRecord::Migration[5.2] + def change + homework_commons = HomeworkCommon.where(homework_type: 4).where("created_at > '2019-07-01 00:00:00'") + attrs = %i[homework_common_id user_id created_at updated_at] + StudentWork.bulk_insert(*attrs) do |worker| + homework_commons.each do |homework| + course = homework.course + if course && homework.student_works.count != course.students.count + course.students.each do |student| + next if StudentWork.where(homework_common_id: homework.id, user_id: student.user_id).any? + same_attrs = {user_id: student.user_id} + worker.add same_attrs.merge(homework_common_id: homework.id) + end + end + end + end + end +end diff --git a/public/react/config/webpack.config.prod.js b/public/react/config/webpack.config.prod.js index 8cab0465f..ddc111b9c 100644 --- a/public/react/config/webpack.config.prod.js +++ b/public/react/config/webpack.config.prod.js @@ -305,7 +305,7 @@ module.exports = { warnings: false, compress: { drop_debugger: true, - drop_console: true + // drop_console: true } } }), diff --git a/public/react/src/AppConfig.js b/public/react/src/AppConfig.js index 93447b65c..a89eacfa1 100644 --- a/public/react/src/AppConfig.js +++ b/public/react/src/AppConfig.js @@ -45,6 +45,7 @@ export function initAxiosInterceptors(props) { proxy="http://47.96.87.25:48080" // wy proxy="https://pre-newweb.educoder.net" + proxy="https://test-newweb.educoder.net" // wy // proxy="http://192.168.2.63:3001" diff --git a/public/react/src/modules/courses/Index.js b/public/react/src/modules/courses/Index.js index de437bbe1..716a3583c 100644 --- a/public/react/src/modules/courses/Index.js +++ b/public/react/src/modules/courses/Index.js @@ -527,14 +527,14 @@ class CoursesIndex extends Component{ ></Route> {/* 新建作品 */} - <Route path="/courses/:coursesId/graduation_tasks/:category_id/:task_Id/works/new" + <Route path="/courses/:coursesId/graduation_tasks/:category_id/works/:task_Id/new" render={ (props) => (<GraduationTasksSubmitnewApp {...this.props} {...props} {...this.state} {...common}/>) } ></Route> {/* 修改作品 */} - <Route path="/courses/:coursesId/graduation_tasks/:category_id/:work_Id/works/edit" + <Route path="/courses/:coursesId/graduation_tasks/:category_id/works/:work_Id/edit" render={ (props) => (<GraduationTasksSubmiteditApp {...this.props} {...props} {...this.state} {...common}/>) } diff --git a/public/react/src/modules/courses/busyWork/CommonWorkPost.js b/public/react/src/modules/courses/busyWork/CommonWorkPost.js index ed96914de..ce552fa50 100644 --- a/public/react/src/modules/courses/busyWork/CommonWorkPost.js +++ b/public/react/src/modules/courses/busyWork/CommonWorkPost.js @@ -131,7 +131,6 @@ class CommonWorkPost extends Component{ let coursesId=this.props.match.params.coursesId; window.location.href="courses/"+coursesId+"/graduation_tasks/"+workId+"/appraise"; - // window.location.href="/courses/"+coursesId+"/graduation/graduation_tasks/"+workId+"/"+workId+"/works/edit"; } handleSubmit=(e) => { diff --git a/public/react/src/modules/courses/graduation/tasks/GraduateTaskItem.js b/public/react/src/modules/courses/graduation/tasks/GraduateTaskItem.js index f3b98f927..d45b7d60f 100644 --- a/public/react/src/modules/courses/graduation/tasks/GraduateTaskItem.js +++ b/public/react/src/modules/courses/graduation/tasks/GraduateTaskItem.js @@ -302,7 +302,7 @@ class GraduateTaskItem extends Component{ {item==="提交作品"? <WordsBtn style="blue" className="colorblue font-16 ml20 fr mt12"> - <a className="btn colorblue" href={"/courses/"+this.props.coursesId+"/graduation_tasks/"+this.props.categoryid+"/"+this.props.taskid+"/works/new"}>提交作品</a> + <a className="btn colorblue" href={"/courses/"+this.props.coursesId+"/graduation_tasks/"+this.props.categoryid+"/works"+"/"+this.props.taskid+"/new"}>提交作品</a> </WordsBtn> :""} @@ -310,7 +310,7 @@ class GraduateTaskItem extends Component{ {item==="补交作品"? <WordsBtn style="blue" className="colorblue font-16 ml20 fr mt12"> - <a className="btn colorblue" href={"/courses/"+this.props.coursesId+"/graduation_tasks/"+this.props.categoryid+"/"+this.props.taskid+"/works/new"}>补交作品</a> + <a className="btn colorblue" href={"/courses/"+this.props.coursesId+"/graduation_tasks/"+this.props.categoryid+"/works"+"/"+this.props.taskid+"/new"}>补交作品</a> </WordsBtn> :""} @@ -318,7 +318,7 @@ class GraduateTaskItem extends Component{ {item==="修改作品"? <WordsBtn style="blue" className="font-16 colorblue ml20 fr mt12"> - <a className="btn colorblue" href={"/courses/"+this.props.coursesId+"/graduation_tasks/"+this.props.categoryid+"/"+this.props.workid+"/works/edit"}>修改作品</a> + <a className="btn colorblue" href={"/courses/"+this.props.coursesId+"/graduation_tasks/"+this.props.categoryid+"/works"+"/"+this.props.workid+"/edit"}>修改作品</a> </WordsBtn> :""} diff --git a/public/react/src/modules/courses/graduation/tasks/GraduationTaskDetail.js b/public/react/src/modules/courses/graduation/tasks/GraduationTaskDetail.js index 2c74547af..0aff1a1bd 100644 --- a/public/react/src/modules/courses/graduation/tasks/GraduationTaskDetail.js +++ b/public/react/src/modules/courses/graduation/tasks/GraduationTaskDetail.js @@ -168,8 +168,29 @@ class GraduationTaskDetail extends Component{ typs:"end", }) } + coursetaskend=()=>{ + const coursesId = this.props.match.params.coursesId; + const task_Id = this.props.match.params.task_Id; + + let url = `/courses/${coursesId}/graduation_tasks/end_task.json`; + axios.post(url,{ + task_ids:[task_Id], + group_ids: this.state.course_groupslist, + }).then((response)=>{ + if (response.data.status == 0) { + this.props.showNotification(response.data.message); + this.cancelmodel(); + this.getdatas(); + this.child && this.child.reInit(); + } + + }).catch((error)=>{ + + }) + } // 取消 cancelmodel=()=>{ + debugger this.setState({ Modalstype:false, Loadtype:false, @@ -255,6 +276,7 @@ class GraduationTaskDetail extends Component{ avisible:false }) } + bindRef = ref => { this.child = ref } ; render(){ @@ -391,21 +413,21 @@ class GraduationTaskDetail extends Component{ {this.props.isAdmin()? <li className="li_line drop_down fr color-blue font-16 mt20" style={{"paddingLeft":"0px"}}> 导出<i className="iconfont icon-xiajiantou font-12 ml2"></i> <ul className="drop_down_menu" style={{"right":"-34px","left":"unset","height":"auto"}}> - <li><a onClick={()=>this.confirmysl("/graduation_tasks/"+task_Id+"/tasks_list.xlsx")} className="color-dark">导出成绩</a></li> - <li><a onClick={()=>this.confirmysl("/graduation_tasks/"+task_Id+"/tasks_list.zip")} className="color-dark">导出作品附件</a></li> + <li><a onClick={()=>this.child.confirmysl("/graduation_tasks/"+task_Id+"/tasks_list.xlsx")} className="color-dark">导出成绩</a></li> + <li><a onClick={()=>this.child.confirmysl("/graduation_tasks/"+task_Id+"/tasks_list.zip")} className="color-dark">导出作品附件</a></li> </ul> </li>:""} {questionslist.work_status===undefined||questionslist.work_status===null||questionslist.work_status.length===0?"":questionslist.work_status.map((item,key)=>{ return( - <span key={key}> - {item==="提交作品"?<a className={"fr color-blue font-16"} href={"/courses/"+courseId+"/graduation_tasks/"+category_id+"/"+task_Id+"/works/new"}>提交作品</a>:""} - {item==="补交作品"?<a className={"fr color-blue font-16"} href={"/courses/"+courseId+"/graduation_tasks/"+category_id+"/"+task_Id+"/works/new"}>补交作品</a>:""} - {item==="修改作品"?<a className={"fr color-blue font-16"} href={"/courses/"+courseId+"/graduation_tasks/"+category_id+"/"+questionslist.work_id+"/works/edit"}>修改作品</a>:""} - {item==="查看作品"?<a className={"fr color-blue font-16"} href={"/courses/"+courseId+"/graduation_tasks/"+category_id+"/"+questionslist.work_id+"/works/edit"}>查看作品</a> :""} - {item==="创建项目"?<a className={"fr color-blue font-16"} href={'/projects/new'} target="_blank">创建项目</a>:""} - {item==="关联项目"?<a className={"fr color-blue font-16"} onClick={this.AssociationItems}>关联项目</a>:""} - {item==="取消关联"?<a className={"fr color-blue font-16"} onClick={this.cannelAssociation}>取消关联</a>:""} - {item==="补交附件"?<a className={"fr color-blue font-16"} onClick={this.handaccessory}>补交附件</a>:""} + <span key={key} className="fr mt20"> + {item==="提交作品"?<a className={"fr color-blue font-16 ml20"} href={"/courses/"+courseId+"/graduation_tasks/"+category_id+"/"+task_Id+"/works/new"}>提交作品</a>:""} + {item==="补交作品"?<a className={"fr color-blue font-16 ml20"} href={"/courses/"+courseId+"/graduation_tasks/"+category_id+"/"+task_Id+"/works/new"}>补交作品</a>:""} + {item==="修改作品"?<a className={"fr color-blue font-16 ml20"} href={"/courses/"+courseId+"/graduation_tasks/"+category_id+"/works"+"/"+ questionslist.work_id + "/edit"}>修改作品</a>:""} + {item==="查看作品"?<a className={"fr color-blue font-16 ml20"} href={"/courses/"+courseId+"/graduation_tasks/"+category_id+"/works"+"/"+ questionslist.work_id + "/edit"}>查看作品</a> :""} + {item==="创建项目"?<a className={"fr color-blue font-16 ml20"} href={'/projects/new'} target="_blank">创建项目</a>:""} + {item==="关联项目"?<a className={"fr color-blue font-16 ml20"} onClick={this.AssociationItems}>关联项目</a>:""} + {item==="取消关联"?<a className={"fr color-blue font-16 ml20"} onClick={this.cannelAssociation}>取消关联</a>:""} + {item==="补交附件"?<a className={"fr color-blue font-16 ml20"} onClick={this.handaccessory}>补交附件</a>:""} </span> ) @@ -428,13 +450,13 @@ class GraduationTaskDetail extends Component{ <Route exact path="/courses/:coursesId/graduation_tasks/:category_id/detail/:task_Id/setting" render={ - (props) => (<GraduationTaskssetting {...this.props} {...props} {...this.state} {...commom} tab={`setting`}/>) + (props) => (<GraduationTaskssetting {...this.props} {...props} {...this.state} {...commom} triggerRef={this.bindRef} tab={`setting`}/>) } ></Route> <Route exact path="/courses/:coursesId/graduation_tasks/:category_id/detail/:task_Id/questions" render={ - (props) => (<GraduationTasksquestions {...this.props} {...props} {...this.state} {...commom} tab={`questions`}/>) + (props) => (<GraduationTasksquestions {...this.props} {...props} {...this.state} {...commom} triggerRef={this.bindRef} tab={`questions`}/>) }></Route> </Switch> diff --git a/public/react/src/modules/courses/graduation/tasks/GraduationTasksSubmitedit.js b/public/react/src/modules/courses/graduation/tasks/GraduationTasksSubmitedit.js index 36ab0fbeb..35d9cdad2 100644 --- a/public/react/src/modules/courses/graduation/tasks/GraduationTasksSubmitedit.js +++ b/public/react/src/modules/courses/graduation/tasks/GraduationTasksSubmitedit.js @@ -496,7 +496,8 @@ class GraduationTasksSubmitedit extends Component{ Modalstype,Modalstopval,ModalCancel,ModalSave,memberslist,task_status,selectmemberslist,shixunsreplace} =this.state; let courseId=this.props.match.params.coursesId; - let category_id=this.props.match.params.category_id; + let task_Id=this.props.match.params.coursesId; + // let category_id=this.props.match.params.category_id; let work_Id=this.props.match.params.work_Id const uploadProps = { width: 600, @@ -570,7 +571,7 @@ class GraduationTasksSubmitedit extends Component{ {/*<span className="color-grey-9 fl ml3 mr3">></span>*/} <WordsBtn style="grey" className="fl"> <a onClick={this.goback} className="color-grey-6">毕设任务</a></WordsBtn> <span className="color-grey-9 fl ml3 mr3">></span> - <WordsBtn style="grey" className="fl"> <Link to={"/courses/"+courseId+"/graduation_tasks/"+category_id+"/detail/"+work_Id+"/list"} className="color-grey-6">任务详情</Link></WordsBtn> + <WordsBtn style="grey" className="fl"> <Link to={`/courses/${courseId}/graduation_tasks/${workslist && workslist.graduation_id}/detail/${workslist && workslist.task_id}/list`} className="color-grey-6">任务详情</Link></WordsBtn> <span className="color-grey-9 fl ml3 mr3">></span> {/*<WordsBtn style="grey" className="fl">*/} {/*<Link to={"/courses/"+courseId+"/graduation/graduation_tasks/"+category_id} className="color-grey-6">{workslist&&workslist.task_name}</Link>*/} @@ -580,7 +581,7 @@ class GraduationTasksSubmitedit extends Component{ </p> <div style={{ width:'100%',height:'75px'}} > - <p className=" fl color-black mt25 summaryname">{workslist&&workslist.task_name}</p> + <p className=" fl color-black mt25 summaryname">{ workslist && workslist.task_name }</p> <a className="color-grey-6 fr font-16 ml30 mt10 mr20" onClick={this.goback}>返回</a> </div> @@ -768,7 +769,7 @@ class GraduationTasksSubmitedit extends Component{ <div className={"fl ml5 fonthidden width100"} style={{width: '70px'}} title={item.user_name}>{item.user_name}</div> <div className={"fl ml5 fonthidden width100 color-grey-9"}>{item.group_name}</div> <div className={"fl ml5 color-grey-9 fonthidden width100"}>{item.student_id}</div> - <div className={"fl ml20"}>{item.commit_status===false?<span className={"color-orange"}>已提交</span> :""}</div> + <div className={"fl ml20"}>{item.commit_status===true?<span className={"color-orange"}>已提交</span> :""}</div> </div> ) })} diff --git a/public/react/src/modules/courses/graduation/tasks/GraduationTasksSubmitnew.js b/public/react/src/modules/courses/graduation/tasks/GraduationTasksSubmitnew.js index 4f9093709..be29d45a4 100644 --- a/public/react/src/modules/courses/graduation/tasks/GraduationTasksSubmitnew.js +++ b/public/react/src/modules/courses/graduation/tasks/GraduationTasksSubmitnew.js @@ -81,7 +81,6 @@ class GraduationTasksSubmitnew extends Component{ let coursesId=this.props.match.params.coursesId; window.location.href="/courses/"+coursesId+"/graduation_tasks/"+workId+"/appraise"; - // window.location.href="/courses/"+coursesId+"/graduation/graduation_tasks/"+task_Id+"/"+workId+"/works/edit"; } handleSubmit=(e) => { diff --git a/public/react/src/modules/courses/graduation/tasks/GraduationTaskssetting.js b/public/react/src/modules/courses/graduation/tasks/GraduationTaskssetting.js index 95d7a64cd..874a69ca5 100644 --- a/public/react/src/modules/courses/graduation/tasks/GraduationTaskssetting.js +++ b/public/react/src/modules/courses/graduation/tasks/GraduationTaskssetting.js @@ -83,6 +83,10 @@ class GraduationTaskssettingapp extends Component{ } } + reInit=()=>{ + this.getsettings(); + } + getsettings=()=>{ let task_Id=this.props.match.params.task_Id; @@ -155,7 +159,11 @@ class GraduationTaskssettingapp extends Component{ let tab = this.props.tab; this.props.setTab && this.props.setTab(tab); - + try{ + this.props.triggerRef(this) + }catch(e){ + + } } @@ -846,6 +854,8 @@ class GraduationTaskssettingapp extends Component{ } /// 确认是否下载 confirmysl(url){ + debugger; + console.log(3); axios.get(url + '?export=true' ).then((response) => { if(response === undefined){ return diff --git a/public/react/src/modules/courses/graduation/tasks/GraduationTaskssettinglist.js b/public/react/src/modules/courses/graduation/tasks/GraduationTaskssettinglist.js index 047946a6e..acfcbaa63 100644 --- a/public/react/src/modules/courses/graduation/tasks/GraduationTaskssettinglist.js +++ b/public/react/src/modules/courses/graduation/tasks/GraduationTaskssettinglist.js @@ -81,6 +81,15 @@ class GraduationTaskssettinglist extends Component{ this.props.history.replace(`/courses/${this.state.taskslistdata.course_id}/graduation_tasks/${this.state.taskslistdata.graduation_id}`); } + reInit=()=>{ + this.setState({ + course_groupslist:[], + checkAllValue:false + }) + let {teacher_comment, task_status, course_group, cross_comment, order, b_order, search} = this.state; + this.seacthdata(teacher_comment, task_status, course_group, cross_comment, order, b_order, search,this.state.page); + } + seacthdata=(teacher_comment,task_status,course_group,cross_comment,order,b_order,search,pages)=>{ let{page,limit}=this.state; // console.log(teacher_comment,task_status,course_group,cross_comment,order,b_order,search) @@ -97,7 +106,7 @@ class GraduationTaskssettinglist extends Component{ order:order===null?undefined:order, b_order:b_order===null?undefined:b_order, search:search===null?undefined:search, - page:pages===null?undefined:pages, + page:pages===null?undefined:page, limit:20, }, paramsSerializer: function(params) { @@ -646,6 +655,8 @@ class GraduationTaskssettinglist extends Component{ /// 确认是否下载 confirmysl(url){ + debugger; + console.log(1); let {teacher_comment, task_status, course_group, cross_comment, order, b_order, search,page} =this.state; let params ={ diff --git a/public/react/src/modules/courses/graduation/tasks/GraduationTaskssettingquestions.js b/public/react/src/modules/courses/graduation/tasks/GraduationTaskssettingquestions.js index 4df756d8c..06ed1eaa1 100644 --- a/public/react/src/modules/courses/graduation/tasks/GraduationTaskssettingquestions.js +++ b/public/react/src/modules/courses/graduation/tasks/GraduationTaskssettingquestions.js @@ -35,8 +35,18 @@ class GraduationTasksquestions extends Component{ let tab = this.props.tab; this.props.setTab && this.props.setTab(tab); - this.getdatas() + this.getdatas(); + try{ + this.props.triggerRef(this) + }catch(e){ + + } + } + + reInit=()=>{ + this.getdatas(); } + getdatas=()=>{ const task_Id = this.props.match.params.task_Id; let url="/graduation_tasks/"+task_Id+".json"; @@ -46,7 +56,6 @@ class GraduationTasksquestions extends Component{ this.setState({ questionslist:result.data }) - } }).catch((error)=>{ console.log(error) @@ -204,6 +213,8 @@ class GraduationTasksquestions extends Component{ /// 确认是否下载 confirmysl(url){ + debugger; + console.log(2); axios.get(url + '?export=true').then((response) => { if(response === undefined){ return @@ -299,82 +310,6 @@ class GraduationTasksquestions extends Component{ /> {questionslist&&questionslist?<div className="newMain clearfix"> <div className={"educontent mb20"}> - - {/* <p className="clearfix mt10"> - <a onClick={this.goback} className="color-grey-9 fl">{questionslist.course_name}</a> - <span className="color-grey-9 fl ml3 mr3">></span> - <Link to={"/courses/"+courseId+"/graduation_tasks/"+questionslist.graduation_id} className="color-grey-9 fl">{questionslist.graduation_name}</Link> - <span className="color-grey-9 fl ml3 mr3">></span> - <span className="color-grey-6">任务详情</span> - </p> - - <div className="clearfix mt20 mb20 lineh-25 linbox"> - <p className=" fl color-black summaryname"> - <Link to={"/courses/"+courseId+"/graduation_tasks/"+category_id} className="color-grey-3">{questionslist.task_name}</Link> - </p> - <CoursesListType - typelist={questionslist.task_status} - /> - <a className="color-grey-3 fr font-16 ml30 mr20" onClick={this.goback}>返回</a> - </div> */} - - - {/* <div className="stud-class-set bor-bottom-greyE"> - <div className="mt10 clearfix edu-back-white poll_list pl20"> */} - - {/* <Link to={"/courses/"+courseId+"/graduation_tasks/"+category_id+"/"+task_Id+"/list"}>任务列表</Link> - <Link className="active" to={"/courses/"+courseId+"/graduation_tasks/"+category_id+"/"+task_Id+"/questions"}>毕设描述</Link> - <Link style={{paddingLeft:'38px'}} - to={"/courses/"+courseId+"/graduation_tasks/"+category_id+"/"+task_Id+"/setting?tab=3"}>设置</Link> */} - - {/*<a className={"fr color-blue font-16"}>导出成绩</a>*/} - {/*{this.props.isAdmin()?<a href={"/api/graduation_tasks/"+task_Id+"/tasks_list.xls"} className={"fr color-blue font-16"}>导出成绩</a>:""}*/} - {/*{this.props.isAdmin()?<a href={"/api/graduation_tasks/"+task_Id+"/tasks_list.zip"} className={"fr color-blue font-16"}>导出作品附件</a>:""}*/} - - {/* <style> - { ` - .drop_down_menu{ - height: 118px; - left:0px; - width: 121px; - } - .drop_down_menu li { - overflow: visible; - width: 121px; - } - .drop_down_menu li a{ - padding: 0px; - font-size: 14px; - } - .mt19{ - margin-top:19px; - } - .drop_down_menu, .drop_down_normal{ - padding-top: 10px; - padding-bottom: 8px; - } - .drop_down_menu li .color-dark{ - color: #666 !important; - } - `} - </style> - {this.props.isAdmin()? <li className="li_line drop_down fr color-blue font-16 mr20 mt20" style={{"paddingLeft":"0px"}}> - 导出<i className="iconfont icon-xiajiantou font-12 ml2"></i> - <ul className="drop_down_menu" style={{"right":"-34px","left":"unset","height":"auto"}}> - <li><a onClick={()=>this.confirmysl("/graduation_tasks/"+task_Id+"/tasks_list.xlsx")} className="color-dark">导出成绩</a></li> - <li><a onClick={()=>this.confirmysl("/graduation_tasks/"+task_Id+"/tasks_list.zip")} className="color-dark">导出作品附件</a></li> - </ul> - </li>:""} */} - - {/*<a className={"fr color-blue font-16"}>项目在线质量检测</a>*/} - {/* {this.props.isAdmin()?questionslist.status===1? <a className={"fr color-blue font-16 mr20"} onClick={() => { this.end()} }>立即截止</a>:"":""} - {this.props.isAdmin()?questionslist.status===0? <a className={"fr color-blue font-16 mr20"} onClick={() => { this.publish()} }>立即发布</a>:"":""} - {this.props.isAdmin()?<a className={"fr color-blue font-16"} href={"/courses/"+courseId+"/graduation_tasks/"+task_Id+"/edit"}>编辑任务</a>:""} - </div> - </div> */} - - - <div className="justify break_full_word new_li markdown-body edu-back-white" id="challenge_editorMd_description"> <p id="ReactMarkdown"> @@ -390,22 +325,6 @@ class GraduationTasksquestions extends Component{ } <div> - {/*{questionslist&&questionslist.attachments.map((item,key)=>{*/} - {/*return(*/} - {/*<div className="color-grey mt5">*/} - {/*<a className="color-grey">*/} - {/*<i className="font-14 color-green iconfont icon-fujian mr8" aria-hidden="true"></i>*/} - {/*</a>*/} - {/*<a href={item.url}*/} - {/*className="mr12" length="58">*/} - {/*{item.title}*/} - {/*</a>*/} - {/*<span className="color-grey mt2 color-grey-6 font-12">{item.filesize}</span>*/} - - {/*</div>*/} - {/*)*/} - - {/*})}*/} <AttachmentList {...this.props} {...this.state} attachments={questionslist&&questionslist.attachments}></AttachmentList> </div> diff --git a/public/react/src/modules/courses/members/modal/AddStudentModal.js b/public/react/src/modules/courses/members/modal/AddStudentModal.js index 9113ba6ab..daaf04d5a 100644 --- a/public/react/src/modules/courses/members/modal/AddStudentModal.js +++ b/public/react/src/modules/courses/members/modal/AddStudentModal.js @@ -215,10 +215,10 @@ class AddStudentModal extends Component{ <p className="clearfix mb2" style={{ margin: '0px 15px 6px' }}> <Checkbox className="fl" style={{ visibility: 'hidden' }} ></Checkbox> - <span className="fl with25"><label className="task-hide fl" style={{"maxWidth":"208px;"}}>{'姓名'}</label></span> - <span className="fl with25"><label className="task-hide fl" style={{"maxWidth":"208px;"}}>{'学号'}</label></span> - <span className="fl with35"><label className="task-hide fl" style={{"maxWidth":"208px;"}}>{'单位'}</label></span> - <span className="fl with10"><label className="task-hide fl" style={{"maxWidth":"48px;"}}>{''}</label></span> + <span className="fl task-hide with25" style={{"maxWidth":"208px;"}}>{'姓名'}</span> + <span className="fl task-hide with25" style={{"maxWidth":"208px;"}}>{'学号'}</span> + <span className="fl task-hide with35" style={{"maxWidth":"208px;"}}>{'单位'}</span> + <span className="fl task-hide with10" style={{"maxWidth":"48px;"}}>{''}</span> </p> <Spin size="large" spinning={isSpin}> @@ -239,24 +239,21 @@ class AddStudentModal extends Component{ return ( <p className="clearfix mb7" key={candidate.id}> <Checkbox className="fl" value={candidate.id} key={candidate.id} disabled={candidate.added}></Checkbox> - <span className="fl with25"> + <span className="fl task-hide with25 ml5" style={{"maxWidth":"208px;"}}> <ConditionToolTip title={candidate.name} condition={candidate.name && candidate.name.length > 12 }> - <label className="task-hide fl" style={{"maxWidth":"208px;"}}> { candidate.name ? - <a href={`/users/${candidate.login}`} target="_blank" style={{"maxWidth":"208px;"}}> + <a href={`/users/${candidate.login}`} target="_blank"> { candidate.name } </a> : <span> </span> } - </label> </ConditionToolTip> </span> - <span className="fl with25"> + <span className="fl task-hide with25" style={{"maxWidth":"208px;"}}> <ConditionToolTip title={candidate.student_id} condition={candidate.student_id && candidate.student_id.length > 12 }> - <label className="task-hide fl" style={{"maxWidth":"208px;"}}>{candidate.student_id || ' '}</label> + {candidate.student_id || ' '} </ConditionToolTip> </span> - <span className="fl with35"><label className="task-hide fl" style={{"maxWidth":"208px;"}}>{candidate.school_name}</label></span> - <span className="fl with10"><label className="task-hide fl" - style={{"maxWidth":"48px", color: theme.foreground_select }}>{candidate.added ? '已加入' : ''}</label></span> + <span className="fl task-hide with35" style={{"maxWidth":"208px;"}}>{candidate.school_name}</span> + <span className="fl task-hide with10" style={{"maxWidth":"48px", color: theme.foreground_select }}>{candidate.added ? '已加入' : ''}</span> </p> ) diff --git a/public/react/src/modules/courses/members/modal/AddTeacherModal.js b/public/react/src/modules/courses/members/modal/AddTeacherModal.js index b397f7838..90a26a416 100644 --- a/public/react/src/modules/courses/members/modal/AddTeacherModal.js +++ b/public/react/src/modules/courses/members/modal/AddTeacherModal.js @@ -109,6 +109,11 @@ class AddTeacherModal extends Component{ checkBoxValues: [] }) } + this.setState({ + name:undefined, + graduationGroup:undefined, + courseGroup:undefined + }) } onSendOk = () => { @@ -259,10 +264,10 @@ class AddTeacherModal extends Component{ <p className="clearfix mb2" style={{ margin: '0px 15px 6px' }}> <Checkbox className="fl" style={{ visibility: 'hidden' }} ></Checkbox> - <span className="fl with25"><label className="task-hide fl" style={{"maxWidth":"208px;"}}>{'姓名'}</label></span> - <span className="fl with25"><label className="task-hide fl" style={{"maxWidth":"208px;"}}>{'昵称'}</label></span> - <span className="fl with35"><label className="task-hide fl" style={{"maxWidth":"208px;"}}>{'单位'}</label></span> - <span className="fl with10"><label className="task-hide fl" style={{"maxWidth":"48px"}}>{''}</label></span> + <span className="fl task-hide with25" style={{"maxWidth":"208px;"}}>{'姓名'}</span> + <span className="fl task-hide with25" style={{"maxWidth":"208px;"}}>{'昵称'}</span> + <span className="fl task-hide with35" style={{"maxWidth":"208px;"}}>{'单位'}</span> + <span className="fl task-hide with10" style={{"maxWidth":"48px"}}>{''}</span> </p> { loading || candidates.length ? <div> @@ -281,26 +286,22 @@ class AddTeacherModal extends Component{ { candidates && candidates.map( candidate => { return ( <p className="clearfix mb7" key={candidate.id}> - <Checkbox className="fl" value={candidate.id} key={candidate.id}></Checkbox> - <span className="fl with25"> + <Checkbox className="fl" value={candidate.id} key={candidate.id} disabled={candidate.added}></Checkbox> + <span className="fl task-hide with25 ml5" style={{"maxWidth":"208px;"}}> {/* "color":"#4c4c4c" */} <ConditionToolTip title={candidate.name} condition={candidate.name && candidate.name.length > 12 }> - <label className="task-hide fl" style={{"maxWidth":"208px;"}} - > - <a href={`/users/${candidate.login}`} target="_blank" - style={{}} - >{candidate.name}</a> - </label> + <a href={`/users/${candidate.login}`} target="_blank" + style={{}} + >{candidate.name}</a> </ConditionToolTip> </span> - <span className="fl with25"> + <span className="fl task-hide with25" style={{"maxWidth":"208px;"}}> <ConditionToolTip title={candidate.nickname} condition={candidate.nickname && candidate.nickname.length > 12 }> - <label className="task-hide fl" style={{"maxWidth":"208px;"}}>{candidate.nickname || ' '}</label> + {candidate.nickname || ' '} </ConditionToolTip> </span> - <span className="fl with35"><label className="task-hide fl" style={{"maxWidth":"208px;"}}>{candidate.school_name}</label></span> - <span className="fl with10"><label className="task-hide fl" style={{"maxWidth":"48px;"}}>{candidate.added ? '已加入' : ''}</label></span> - + <span className="fl task-hide with35" style={{"maxWidth":"208px;"}}>{candidate.school_name}</span> + <span className="fl task-hide with10 color-blue" style={{"maxWidth":"48px;"}}>{candidate.added ? '已加入' : ''}</span> </p> ) }) } diff --git a/public/react/src/modules/courses/members/studentsList.js b/public/react/src/modules/courses/members/studentsList.js index e82d417c2..6e52cd279 100644 --- a/public/react/src/modules/courses/members/studentsList.js +++ b/public/react/src/modules/courses/members/studentsList.js @@ -7,7 +7,7 @@ import CourseLayoutcomponent from '../common/CourseLayoutComponent' import Titlesearchsection from '../common/titleSearch/TitleSearchSection' import ColorCountText from '../common/titleSearch/ColorCountText' -import { WordsBtn, trigger, on, off, getUrl, downloadFile } from 'educoder' +import { WordsBtn, trigger, on, off, getUrl, downloadFile , sortDirections } from 'educoder' import Modals from "../../modals/Modals"; import axios from 'axios' import _ from 'lodash' @@ -17,8 +17,9 @@ import CreateGroupByImportModal from './modal/CreateGroupByImportModal' const Search =Input.Search; -const buildColumns = (that) => { - const { course_groups } = that.state +const buildColumns = (that,isParent) => { + const { course_groups , sortedInfo } = that.state + let showSorter = isParent==true const columns=[{ title: '序号', dataIndex: 'id', @@ -59,6 +60,9 @@ const buildColumns = (that) => { align:'center', width:"10%", className:"color-grey-6", + sorter: true, + sortDirections: sortDirections, + sortOrder: sortedInfo.columnKey === 'student_id' && sortedInfo.order, render: (student_id, record) => { return <span className="color-dark overflowHidden1 " title={student_id && student_id.length > 10 ? student_id : ''} style={{maxWidth: '160px'}} >{student_id}</span> @@ -71,7 +75,10 @@ const buildColumns = (that) => { key: 'course_group_name', align:'center', width:"40%", - className:"color-grey-6" + className:"color-grey-6", + sorter:showSorter, + sortDirections: sortDirections, + sortOrder: sortedInfo.columnKey === 'course_group_name' && sortedInfo.order, }) } const isAdminOrStudent = that.props.isAdminOrStudent() @@ -124,6 +131,7 @@ class studentsList extends Component{ isSpin:false, DownloadType:false, DownloadMessageval:undefined, + sortedInfo: {order:'ascend',columnKey: 'student_id'} } } /// 确认是否下载 @@ -319,8 +327,19 @@ class studentsList extends Component{ this.setState({ page: argPage }) } let page = argPage || this.state.page - let { order, searchValue }=this.state - let url=`/courses/${id}/students.json?order=${order}&page=${page}&limit=20&course_group_id=${course_group_id}`; + let { searchValue , sortedInfo }=this.state + let order = 1; + if (sortedInfo.columnKey == 'student_id') { + order = 1; + } else if (sortedInfo.columnKey == 'course_group_name') { + order = 2; + } + let sort = 'desc'; + if (sortedInfo.order == 'ascend') { + sort = 'asc' + } + + let url=`/courses/${id}/students.json?order=${order}&sort=${sort}&page=${page}&limit=20&course_group_id=${course_group_id}`; if(!!searchValue){ url+='&search='+searchValue; } @@ -494,6 +513,15 @@ class studentsList extends Component{ this.props.showNotification('复制成功') } + onTableChange = (pagination, filters, sorter) =>{ + this.setState({ + sortedInfo: sorter, + }, () => { + this.fetchAll(); + }); + } + + render(){ const isAdmin = this.props.isAdmin() const isSuperAdmin = this.props.isSuperAdmin() @@ -653,7 +681,7 @@ class studentsList extends Component{ {isAdmin && <Checkbox className="fl" onChange={this.onCheckAll} checked={checkAllValue} >已选 {checkBoxValues.length} 个</Checkbox>} <div className="studentList_operation_ul"> {isAdmin && <li className="li_line"><a href="javascript:void(0)" className="color-grey-9" onClick={this.onDelete}>删除</a></li>} - {isAdmin && <li className="li_line drop_down"> + {isAdmin && <li className="drop_down"> 移动到...<i className="iconfont icon-xiajiantou font-12 ml2"></i> <ul className="drop_down_menu" style={{"right":"0px","left":"unset", minWidth: '160px', maxHeight: '324px', overflowY: 'auto'}}> { @@ -687,7 +715,7 @@ class studentsList extends Component{ </ul> </li>} - <li className="drop_down"> + {/* <li className="drop_down"> {currentOrderName} { course_groups && !!course_groups.length && <React.Fragment> @@ -698,13 +726,13 @@ class studentsList extends Component{ </ul> </React.Fragment> } - </li> + </li> */} </div> </div> <Spin size="large" spinning={this.state.isSpin}> <div className="clearfix stu_table"> {!this.state.isSpin && <Checkbox.Group style={{ width: '100%' }} onChange={this.onCheckBoxChange} value={checkBoxValues}> - <Table columns={buildColumns(this)} dataSource={students} pagination={false}></Table> + <Table columns={buildColumns(this,isParent)} dataSource={students} onChange={this.onTableChange} pagination={false}></Table> </Checkbox.Group> } </div> </Spin> diff --git a/public/react/src/modules/courses/shixunHomework/shixunreport/Shixunechart.js b/public/react/src/modules/courses/shixunHomework/shixunreport/Shixunechart.js index c62750977..a05aca036 100644 --- a/public/react/src/modules/courses/shixunHomework/shixunreport/Shixunechart.js +++ b/public/react/src/modules/courses/shixunHomework/shixunreport/Shixunechart.js @@ -48,7 +48,7 @@ function startechart(data){ xAxis: [ { type : 'value', - name: '学生排名', + name: '学生效率位置', scale:true, axisLabel : { formatter: ' ', diff --git a/public/react/src/modules/moop_cases/css/moopCases.css b/public/react/src/modules/moop_cases/css/moopCases.css index 7a58cee61..932ea0db2 100644 --- a/public/react/src/modules/moop_cases/css/moopCases.css +++ b/public/react/src/modules/moop_cases/css/moopCases.css @@ -1,172 +1,172 @@ -.winput-300-35{ - width: 300px; - height: 35px; - padding: 5px; - box-sizing: border-box; -} -.library_nav li { - float: left; - cursor: pointer; - margin-right: 30px; - position: relative; - color: #05101A; - height: 40px; - line-height: 20px; - font-size: 16px; -} -.library_nav li.active a, .library_nav li:hover a{ - color: #4cacff!important; -} -.library_list { - margin-bottom: 30px; -} -.library_list_item:hover { - box-shadow: 0px 4px 8px rgba(158,158,158,0.16); -} -.library_list_item { - background: #fff; - padding: 20px 30px; - margin-bottom: 30px; - display: flex; -} -.library_list_item .library_l_name { - max-width: 600px; - float: left; -} - -.edu-activity-red { - background-color: #FC2B6A; - color: #fff!important; - cursor: pointer; - border: 1px solid #FC2B6A; - line-height: 17px; -} -.edu-activity-green { - background-color: green; - color: #fff!important; - cursor: pointer; - border: 1px solid green; - line-height: 17px; -} -.edu-activity-orange { - background-color: #ff6800; - color: #fff!important; - cursor: pointer; - border: 1px solid #ff6800; - line-height: 17px; -} -.edu-activity-blue { - background-color: #4CACFF; - color: #fff!important; - cursor: pointer; - border: 1px solid #4CACFF; - line-height: 17px; -} -.edu-activity-orange-sub { - background-color: #FF781B; - color: #fff!important; - cursor: pointer; - border: 1px solid #ff6800; - line-height: 17px; -} - -.pointsBtn { - width: 70px; - height: 70px; - background-color: #4cacff; - border-radius: 50%; - color: #fff; - text-align: center; - margin: 0 auto; - -webkit-box-sizing: border-box; - box-sizing: border-box; - padding: 2px 0; - cursor: pointer; - line-height: 22px; - padding-top: 12px; -} -.pointedBtn{ - background: #BCD1E3; - cursor: default -} -.pointsBtn span{ - display: block; -} -.upload_Title { - position: relative; - margin-right: 20px; - float: left; - line-height: 35px; - font-size: 16px; - width: 56px; - color:rgba(0, 0, 0, 0.85); - text-align: center -} -.upload_Title.must:before { - display: inline-block; - margin-right: 4px; - color: #f5222d; - font-size: 14px; - font-family: SimSun, sans-serif; - line-height: 1; - content: '*'; -} -.upload_Title:after{ - content: ':'; - position: relative; - top: -0.5px; - margin: 0 8px 0 2px; -} -.libraries_tab li { - width: 120px; - height: 35px; - line-height: 33px; - border-radius: 18px; - border: 1px solid #4C98FF; - color: #4C98FF; - cursor: pointer; - margin-right: 30px; - float: left; - text-align: center; -} -.libraries_tab li.active { - background: #4C98FF; - color: #fff; -} -.librariesField .ant-upload{ - width: 100%; - background: #F2F9FF; - justify-content: center; - align-items: center; - display: -webkit-flex; - text-align: center; - height: 120px!important; - border-radius: 4px; - border: 1px dashed #4cacff!important; - display: block; - cursor: pointer; -} -.librariesField .ant-upload.ant-upload-drag{ - border:none!important; -} -.uploadImage .ant-upload.ant-upload-select-picture-card{ - width:120px; - height: 90px; -} -.uploadImage .ant-upload.ant-upload-select-picture-card > .ant-upload{ - padding:0px!important; -} -.successPage { - justify-content: center; - align-items: center; - display: -webkit-flex; - height: 570px; - text-align: center; - margin-bottom: 50px; -} -.changebtn { - width:166px; - font-size: 16px; - height: 45px; - line-height: 45px; +.winput-300-35{ + width: 300px; + height: 35px; + padding: 5px; + box-sizing: border-box; +} +.library_nav li { + float: left; + cursor: pointer; + margin-right: 30px; + position: relative; + color: #05101A; + height: 40px; + line-height: 20px; + font-size: 16px; +} +.library_nav li.active a, .library_nav li:hover a{ + color: #4cacff!important; +} +.library_list { + margin-bottom: 30px; +} +.library_list_item:hover { + box-shadow: 0px 4px 8px rgba(158,158,158,0.16); +} +.library_list_item { + background: #fff; + padding: 20px 30px; + margin-bottom: 30px; + display: flex; +} +.library_list_item .library_l_name { + max-width: 600px; + float: left; +} + +.edu-activity-red { + background-color: #FC2B6A; + color: #fff!important; + cursor: pointer; + border: 1px solid #FC2B6A; + line-height: 17px; +} +.edu-activity-green { + background-color: green; + color: #fff!important; + cursor: pointer; + border: 1px solid green; + line-height: 17px; +} +.edu-activity-orange { + background-color: #ff6800; + color: #fff!important; + cursor: pointer; + border: 1px solid #ff6800; + line-height: 17px; +} +.edu-activity-blue { + background-color: #4CACFF; + color: #fff!important; + cursor: pointer; + border: 1px solid #4CACFF; + line-height: 17px; +} +.edu-activity-orange-sub { + background-color: #FF781B; + color: #fff!important; + cursor: pointer; + border: 1px solid #ff6800; + line-height: 17px; +} + +.pointsBtn { + width: 70px; + height: 70px; + background-color: #4cacff; + border-radius: 50%; + color: #fff; + text-align: center; + margin: 0 auto; + -webkit-box-sizing: border-box; + box-sizing: border-box; + padding: 2px 0; + cursor: pointer; + line-height: 22px; + padding-top: 12px; +} +.pointedBtn{ + background: #BCD1E3; + cursor: default +} +.pointsBtn span{ + display: block; +} +.upload_Title { + position: relative; + margin-right: 20px; + float: left; + line-height: 35px; + font-size: 16px; + /*width: 56px;*/ + color:rgba(0, 0, 0, 0.85); + text-align: center +} +.upload_Title.must:before { + display: inline-block; + margin-right: 4px; + color: #f5222d; + font-size: 14px; + font-family: SimSun, sans-serif; + line-height: 1; + content: '*'; +} +.upload_Title:after{ + content: ':'; + position: relative; + top: -0.5px; + margin: 0 8px 0 2px; +} +.libraries_tab li { + width: 120px; + height: 35px; + line-height: 33px; + border-radius: 18px; + border: 1px solid #4C98FF; + color: #4C98FF; + cursor: pointer; + margin-right: 30px; + float: left; + text-align: center; +} +.libraries_tab li.active { + background: #4C98FF; + color: #fff; +} +.librariesField .ant-upload{ + width: 100%; + background: #F2F9FF; + justify-content: center; + align-items: center; + display: -webkit-flex; + text-align: center; + height: 120px!important; + border-radius: 4px; + border: 1px dashed #4cacff!important; + display: block; + cursor: pointer; +} +.librariesField .ant-upload.ant-upload-drag{ + border:none!important; +} +.uploadImage .ant-upload.ant-upload-select-picture-card{ + width:120px; + height: 90px; +} +.uploadImage .ant-upload.ant-upload-select-picture-card > .ant-upload{ + padding:0px!important; +} +.successPage { + justify-content: center; + align-items: center; + display: -webkit-flex; + height: 570px; + text-align: center; + margin-bottom: 50px; +} +.changebtn { + width:166px; + font-size: 16px; + height: 45px; + line-height: 45px; } \ No newline at end of file diff --git a/public/react/src/modules/user/account/AccountBasicEdit.js b/public/react/src/modules/user/account/AccountBasicEdit.js index bff4422ec..1f87454a5 100644 --- a/public/react/src/modules/user/account/AccountBasicEdit.js +++ b/public/react/src/modules/user/account/AccountBasicEdit.js @@ -421,7 +421,11 @@ class AccountBasic extends Component { identity }=this.state; const { getFieldDecorator } = this.props.form; - let{basicInfo}=this.props + let{ basicInfo }=this.props + + // 已职业认证的账户不能修改职业,学校/单位,院系/部门,产品还未确定,先默认为false--可以更改 + // basicInfo && basicInfo.professional_certification == "certified" + const professionalFlag = false; // form合并了 const propsWithoutForm = Object.assign({}, this.props) @@ -607,7 +611,7 @@ class AccountBasic extends Component { message: '请先选择职业', }], })( - <Select style={{width:"190px",marginRight:"20px"}} onChange={this.changeJob}> + <Select style={{width:"190px",marginRight:"20px"}} onChange={this.changeJob} disabled={professionalFlag}> <Option value="teacher">教师</Option> <Option value="student">学生</Option> <Option value="professional">专业人士</Option> @@ -628,7 +632,7 @@ class AccountBasic extends Component { message: '请先输入学号', }], })( - <Input type="text" placeholder="请输入学号" style={{width:"190px"}}></Input> + <Input type="text" placeholder="请输入学号" style={{width:"190px"}} disabled={professionalFlag}></Input> )} </Form.Item> } @@ -646,7 +650,7 @@ class AccountBasic extends Component { message: '请先选择职称', }], })( - <Select style={{width:"190px"}}> + <Select style={{width:"190px"}} disabled={professionalFlag}> <Option value="教授">教授</Option> <Option value="副教授">副教授</Option> <Option value="讲师">讲师</Option> @@ -669,7 +673,7 @@ class AccountBasic extends Component { message: '请先选择职称', }], })( - <Select style={{width:"190px"}}> + <Select style={{width:"190px"}} disabled={professionalFlag}> <Option value="企业管理者">企业管理者</Option> <Option value="部门管理者">部门管理者</Option> <Option value="高级工程师">高级工程师</Option> @@ -703,7 +707,7 @@ class AccountBasic extends Component { }], })( - <AutoComplete width={400} showSearch onSearch={this.filterList} onChange={this.changeList}> + <AutoComplete width={400} showSearch onSearch={this.filterList} onChange={this.changeList} disabled={professionalFlag}> { filterSchoolList && filterSchoolList.map((item,key)=>{ return(<Option value={item.name} key={item.id}>{item.name}</Option>) @@ -741,7 +745,7 @@ class AccountBasic extends Component { // } }], })( - <AutoComplete width={400} showSearch onSearch={this.searchDepartment} onChange={this.changeDepartment}> + <AutoComplete width={400} showSearch onSearch={this.searchDepartment} onChange={this.changeDepartment} disabled={professionalFlag}> { filterDepartments && filterDepartments.map((item,key)=>{ return(