diff --git a/app/controllers/admins/school_base_statistics_controller.rb b/app/controllers/admins/school_base_statistics_controller.rb new file mode 100644 index 000000000..026fd9492 --- /dev/null +++ b/app/controllers/admins/school_base_statistics_controller.rb @@ -0,0 +1,17 @@ +class Admins::SchoolBaseStatisticsController < Admins::BaseController + + def index + params[:sort_by] = params[:sort_by].presence || :teacher_count + params[:sort_direction] = params[:sort_direction].presence || :desc + + total_count, statistics = Admins::SchoolBaseStatisticService.call(params) + + @statistics = paginate statistics, total_count: total_count + @params_page = params[:page] || 1 + + respond_to do |format| + format.html + format.js + end + end +end diff --git a/app/controllers/courses_controller.rb b/app/controllers/courses_controller.rb index c514bc0ff..6f2a66631 100644 --- a/app/controllers/courses_controller.rb +++ b/app/controllers/courses_controller.rb @@ -38,10 +38,10 @@ class CoursesController < ApplicationController :transfer_to_course_group, :delete_from_course, :export_member_scores_excel, :search_users, :add_students_by_search, :get_historical_courses, :add_teacher_popup, :add_teacher, :export_couser_info, :export_member_act_score, - :update_informs, :new_informs, :delete_informs, :switch_to_student, :move_to_category] + :update_informs, :new_informs, :delete_informs, :switch_to_student, :move_to_category, + :update_task_position, :tasks_list] before_action :admin_allowed, only: [:set_invite_code_halt, :set_public_or_private, :change_course_admin, - :set_course_group, :create_group_by_importing_file, - :update_task_position, :tasks_list] + :set_course_group, :create_group_by_importing_file] before_action :teacher_or_admin_allowed, only: [:graduation_group_list, :create_graduation_group, :join_graduation_group, :change_course_teacher, :course_group_list, :change_member_role,:inform_up, :inform_down, :teacher_application_review, :apply_teachers, :delete_course_teacher] diff --git a/app/controllers/exercises_controller.rb b/app/controllers/exercises_controller.rb index dd29d6b47..cebe2f61d 100644 --- a/app/controllers/exercises_controller.rb +++ b/app/controllers/exercises_controller.rb @@ -1201,7 +1201,7 @@ class ExercisesController < ApplicationController # 分页 @page = params[:page] || 1 @limit = params[:limit] || 20 - @exercise_users_list = @exercise_users_list.page(@page).per(@limit) + @exercise_users_list = @exercise_users_list.preload(:exercise_user_scores, user: :user_extension).page(@page).per(@limit) else @exercise_users_list = [] diff --git a/app/controllers/homework_commons_controller.rb b/app/controllers/homework_commons_controller.rb index 7473711a2..dd78299e4 100644 --- a/app/controllers/homework_commons_controller.rb +++ b/app/controllers/homework_commons_controller.rb @@ -19,10 +19,10 @@ class HomeworkCommonsController < ApplicationController :publish_homework, :end_homework, :set_public, :choose_category, :move_to_category, :choose_category, :create_subject_homework, :multi_destroy, :group_list, :homework_code_repeat, :code_review_results, :code_review_detail, :update_explanation, :update_settings, - :add_to_homework_bank, :publish_groups, :end_groups, :batch_comment] + :add_to_homework_bank, :publish_groups, :end_groups, :batch_comment, :alter_name] before_action :require_id_params, only: [:set_public, :multi_destroy, :publish_homework, :end_homework, :move_to_category, :add_to_homework_bank] - before_action :course_manager, only: [:alter_name] + # before_action :course_manager, only: [:alter_name] def index tip_exception("type参数有误") if params[:type] && ![1, 3, 4].include?(params[:type].to_i) diff --git a/app/helpers/application_helper.rb b/app/helpers/application_helper.rb index 88ed373d9..1039a648a 100644 --- a/app/helpers/application_helper.rb +++ b/app/helpers/application_helper.rb @@ -27,6 +27,12 @@ module ApplicationHelper sanitize content, tags: tags, attributes: attributes end + # MD5加密 + def base64_encode(content) + return nil if content.blank? + Base64.encode64(content) + end + def graduation_navigation graduation graduation.class.to_s == "GraduationTopic" ? "毕设选题" : "毕设任务" end diff --git a/app/helpers/exercises_helper.rb b/app/helpers/exercises_helper.rb index 1887aee5a..01b0bab61 100644 --- a/app/helpers/exercises_helper.rb +++ b/app/helpers/exercises_helper.rb @@ -688,7 +688,7 @@ module ExercisesHelper end #获取用户的相关信息 - def exercise_use_info(ex_user,user_status,exercise) + def exercise_use_info(ex_user,user_status,exercise,subject_question_ids) course = exercise.course current_user_group_id = "" current_user_group_name = "" @@ -712,11 +712,17 @@ module ExercisesHelper course_group = course.course_groups.by_group_ids(current_user_group_id) current_user_group_name = course_group.first.name if course_group.present? end - teacher_review = ex_user.subjective_score < 0.0 ? false : true + + if ex_user.subjective_score > 0.0 || ex_user.exercise_user_scores.size > 0 || + ExerciseAnswerComment.where(exercise_answer_id: ex_user.user.exercise_answers.where(exercise_question_id: subject_question_ids)).exists? + teacher_review = true + else + teacher_review = false + end if (user_status == 0 && commit_status == 1) || (user_status == 1 && ex_user_exercise_status == 3 && commit_status == 1) #老师都可以看,学生,需在试卷已提交,且已截止的情况下看 - ex_object_score = ex_user.objective_score < 0.0 ? 0.0 : ex_user.objective_score.round(1).to_s - ex_subject_score = ex_user.subjective_score < 0.0 ? nil : ex_user.subjective_score.round(1).to_s - score = ex_user.score.present? ? ex_user.score.round(1).to_s : 0.0.to_s + ex_object_score = ex_user.objective_score <= 0.0 ? 0 : ex_user.objective_score.round(1).to_s + ex_subject_score = ex_user.subjective_score < 0.0 ? nil : (ex_user.subjective_score > 0.0 ? ex_user.subjective_score.round(1).to_s : 0) + score = ex_user.score.present? && ex_user.score > 0.0 ? ex_user.score.round(1).to_s : 0.to_s else ex_object_score = nil ex_subject_score = nil diff --git a/app/models/exercise.rb b/app/models/exercise.rb index bf752fb92..5079d0ade 100644 --- a/app/models/exercise.rb +++ b/app/models/exercise.rb @@ -38,6 +38,10 @@ class Exercise < ApplicationRecord DEADLINE = 3 #已截止 ENDED = 4 #课堂已结束 + def subject_question_ids + exercise_questions.where(question_type: [4]).pluck(:id) + end + def question_scores exercise_questions.pluck(:question_score).sum end diff --git a/app/models/exercise_bank_choice.rb b/app/models/exercise_bank_choice.rb index 4a4c46251..70465a72e 100644 --- a/app/models/exercise_bank_choice.rb +++ b/app/models/exercise_bank_choice.rb @@ -5,6 +5,6 @@ class ExerciseBankChoice < ApplicationRecord scope :find_choice_custom, lambda {|k,v| where("#{k} = ?",v)} #根据传入的参数查找问题 scope :left_choice_choose, lambda {|k,v| where("#{k} > ?",v)} #根据传入的参数查找问题 - validates :choice_text, length: { maximum: 500, too_long: "不能超过500个字符" } + # validates :choice_text, length: { maximum: 500, too_long: "不能超过500个字符" } end \ No newline at end of file diff --git a/app/models/exercise_bank_question.rb b/app/models/exercise_bank_question.rb index 75d6bfedf..311c81491 100644 --- a/app/models/exercise_bank_question.rb +++ b/app/models/exercise_bank_question.rb @@ -11,7 +11,7 @@ class ExerciseBankQuestion < ApplicationRecord scope :left_question_choose, lambda {|k,v| where("#{k} > ?",v)} #根据传入的参数查找问题 scope :find_objective_questions, -> {where("question_type != ?",4)} #查找全部客观题 - validates :question_title, length: { maximum: 1000, too_long: "不能超过1000个字符" } + # validates :question_title, length: { maximum: 1000, too_long: "不能超过1000个字符" } def question_type_name case self.question_type diff --git a/app/models/exercise_choice.rb b/app/models/exercise_choice.rb index 3cfd7a17c..617f5b453 100644 --- a/app/models/exercise_choice.rb +++ b/app/models/exercise_choice.rb @@ -7,6 +7,6 @@ class ExerciseChoice < ApplicationRecord scope :find_choice_custom, lambda {|k,v| where("#{k} = ?",v)} #根据传入的参数查找问题 scope :left_choice_choose, lambda {|k,v| where("#{k} > ?",v)} #根据传入的参数查找问题 - validates :choice_text, length: { maximum: 500, too_long: "不能超过500个字符" } + # validates :choice_text, length: { maximum: 500, too_long: "不能超过500个字符" } end \ No newline at end of file diff --git a/app/models/exercise_question.rb b/app/models/exercise_question.rb index 2b8d88c57..e34c316aa 100644 --- a/app/models/exercise_question.rb +++ b/app/models/exercise_question.rb @@ -16,7 +16,7 @@ class ExerciseQuestion < ApplicationRecord scope :left_question_choose, lambda {|k,v| where("#{k} > ?",v)} #根据传入的参数查找问题 scope :find_objective_questions, -> {where("question_type != ?",4)} #查找全部客观题 - validates :question_title, length: { maximum: 1000, too_long: "不能超过1000个字符" } + # validates :question_title, length: { maximum: 1000, too_long: "不能超过1000个字符" } def question_type_name diff --git a/app/services/admins/school_base_statistic_service.rb b/app/services/admins/school_base_statistic_service.rb new file mode 100644 index 000000000..6f3895c4c --- /dev/null +++ b/app/services/admins/school_base_statistic_service.rb @@ -0,0 +1,137 @@ +class Admins::SchoolBaseStatisticService < ApplicationService + include CustomSortable + + attr_reader :params + + sort_columns :student_count, :teacher_count, :course_count, :course_group_count, + :attachment_count, :video_count, :normal_work_count, :shixun_work_count, :evaluate_count, + :student_work_count, :exercise_count, default_direction: :desc + + def initialize(params) + @params = params + end + + def call + schools = School.group('schools.id') + + keyword = params[:keyword].try(:to_s).try(:strip) + if keyword.present? + schools = schools.where("schools.name LIKE :keyword OR schools.id LIKE :keyword", keyword: "%#{keyword}%") + end + + count = schools.count.count + # 根据排序字段进行查询 + schools = query_by_sort_column(schools, params[:sort_by]) + + schools = custom_sort(schools, params[:sort_by], params[:sort_direction]) + schools = schools.limit(page_size).offset(offset) + schools = package_other_data(schools) + [count, schools] + end + + def package_other_data(schools) + ids = schools.map(&:id) + + student_count = CourseMember.course_students.joins(course: :school).group(:school_id).where("role= 'STUDENT' AND courses.is_delete = false AND schools.id in (?)", ids).count("distinct user_id") + teachers = UserExtension.where(school_id: ids, identity: :teacher).group(:school_id) + teacher_count = teachers.count + courses = Course.where(is_delete: 0, school_id: ids).group(:school_id) + course_count= courses.count + course_group_count = courses.joins(:course_groups).count + attachment_count = courses.joins(:attachments).count + video_count = teachers.joins(user: :videos).where("videos.delete_state IS NOT NULL").count + + homeworks = HomeworkCommon.joins(:course).where(courses: { school_id: ids }).where("courses.is_delete = false") + shixun_work_count = homeworks.where(homework_type: 4).group(:school_id).count + normal_work_count = homeworks.where(homework_type: 1).group(:school_id).count + student_work_count = homeworks.joins(:student_works).group(:school_id).count + evaluate_count = EvaluateRecord.unscoped.joins('JOIN homework_commons_shixuns hcs ON hcs.shixun_id = evaluate_records.shixun_id + JOIN homework_commons hc ON hcs.homework_common_id = hc.id AND hc.homework_type = 4 + JOIN course_members ON course_members.user_id = evaluate_records.user_id + JOIN courses ON course_members.course_id = courses.id AND hc.course_id = courses.id') + .where(courses: { school_id: ids }) + .group(:school_id).count + exercise_count = Exercise.joins(:course).where(courses: { school_id: ids }).group(:school_id).count + + schools.map do |school| + { + id: school.id, + name: school.name, + teacher_count: teacher_count[school.id], + student_count: student_count[school.id], + course_count: course_count[school.id], + course_group_count: course_group_count[school.id], + attachment_count: attachment_count[school.id], + video_count: video_count[school.id], + normal_work_count: normal_work_count[school.id], + shixun_work_count: shixun_work_count[school.id], + student_work_count: student_work_count[school.id], + evaluate_count: evaluate_count[school.id], + exercise_count: exercise_count[school.id] + } + end + end + + private + def query_by_sort_column(schools, sort_by_column) + base_query_column = 'schools.id, schools.name' + + case sort_by_column.to_s + when 'teacher_count' then + schools.joins('LEFT JOIN user_extensions ue ON ue.school_id = schools.id AND ue.identity = 0') + .select("#{base_query_column}, COUNT(*) teacher_count") + when 'student_count' then + schools.joins("LEFT JOIN courses ue ON ue.school_id = schools.id AND ue.is_delete = FALSE + LEFT JOIN course_members ON course_members.course_id = ue.id AND course_members.role = 'STUDENT'") + .select("#{base_query_column}, COUNT(distinct user_id) student_count") + when 'course_count' then + schools.joins('LEFT JOIN courses ON courses.school_id = schools.id AND courses.is_delete = false') + .select("#{base_query_column}, COUNT(*) course_count") + when 'course_group_count' then + schools.joins("LEFT JOIN courses ON courses.school_id = schools.id AND courses.is_delete = false + LEFT JOIN course_groups ON course_groups.course_id = courses.id") + .select("#{base_query_column}, COUNT(*) course_group_count") + when 'attachment_count' then + schools.joins("LEFT JOIN courses cs ON cs.school_id = schools.id AND cs.is_delete = 0 + LEFT JOIN attachments ON attachments.container_type ='Course' AND attachments.container_id = cs.id") + .select("#{base_query_column}, COUNT(*) attachment_count") + when 'video_count' then + schools.joins("LEFT JOIN user_extensions ue ON ue.school_id = schools.id AND ue.identity = 0 + LEFT JOIN videos ON videos.user_id = ue.user_id AND videos.delete_state IS NOT NULL") + .select("#{base_query_column}, COUNT(*) video_count") + when 'normal_work_count' then + schools.joins("LEFT JOIN courses ON courses.school_id = schools.id + LEFT JOIN homework_commons ON homework_commons.course_id = courses.id AND homework_commons.homework_type = 0") + .select("#{base_query_column}, COUNT(*) normal_work_count") + when 'shixun_work_count' then + schools.joins("LEFT JOIN courses ON courses.school_id = schools.id + LEFT JOIN homework_commons ON homework_commons.course_id = courses.id AND homework_commons.homework_type = 4") + .select("#{base_query_column}, COUNT(*) shixun_work_count") + when 'student_work_count' then + schools.joins("LEFT JOIN courses ON courses.school_id = schools.id + LEFT JOIN homework_commons ON homework_commons.course_id = courses.id + LEFT JOIN student_works ON student_works.homework_common_id = homework_commons.id") + .select("#{base_query_column}, COUNT(*) student_work_count") + when 'evaluate_count' then + schools.joins(' + LEFT JOIN courses ON courses.school_id = schools.id AND courses.is_delete = false + LEFT JOIN course_members ON course_members.course_id = courses.id + LEFT JOIN evaluate_records ON course_members.user_id = evaluate_records.user_id + LEFT JOIN homework_commons_shixuns hcs ON hcs.shixun_id = evaluate_records.shixun_id + LEFT JOIN homework_commons hc ON hcs.homework_common_id = hc.id AND hc.homework_type = 4') + .select("#{base_query_column}, COUNT(*) evaluate_count") + when 'exercise_count' then + schools.joins('LEFT JOIN courses cs ON cs.school_id = schools.id AND cs.is_delete = 0 + LEFT JOIN exercises ON exercises.course_id = cs.id') + .select("#{base_query_column}, COUNT(*) exercise_count") + end + end + + def page_size + params[:per_page] || 20 + end + + def offset + (params[:page].to_i.zero? ? 0 : params[:page].to_i - 1) * page_size + end +end \ No newline at end of file diff --git a/app/views/admins/dashboards/index.html.erb b/app/views/admins/dashboards/index.html.erb index b463e5571..2cd7a583f 100644 --- a/app/views/admins/dashboards/index.html.erb +++ b/app/views/admins/dashboards/index.html.erb @@ -2,6 +2,9 @@ <% add_admin_breadcrumb('概览', admins_path) %> <% end %> +<% content_for(:head) do %> + +<% end %>
序号 | +单位名称 | +<%= sort_tag('注册教师', name: 'teacher_count', path: admins_school_base_statistics_path) %> | +<%= sort_tag('注册学生', name: 'student_count', path: admins_school_base_statistics_path) %> | +<%= sort_tag('教学课堂', name: 'course_count', path: admins_school_base_statistics_path) %> | +<%= sort_tag('管理分班', name: 'course_group_count', path: admins_school_base_statistics_path) %> | +<%= sort_tag('课件资源', name: 'attachment_count', path: admins_school_base_statistics_path) %> | +<%= sort_tag('教学视频', name: 'video_count', path: admins_school_base_statistics_path) %> | +<%= sort_tag('普通作业', name: 'normal_work_count', path: admins_school_base_statistics_path) %> | +<%= sort_tag('实训作业', name: 'shixun_work_count', path: admins_school_base_statistics_path) %> | +<%= sort_tag('作业文件', name: 'student_work_count', path: admins_school_base_statistics_path) %> | +<%= sort_tag('评测次数', name: 'evaluate_count', path: admins_school_base_statistics_path) %> | +<%= sort_tag('在线试卷', name: 'exercise_count', path: admins_school_base_statistics_path) %> | +
---|---|---|---|---|---|---|---|---|---|---|---|---|
<%= list_index_no(@params_page.to_i, index) %> | ++ <%= link_to statistic[:name], "/colleges/#{statistic[:id]}/statistics", + target: '_blank', data: { toggle: 'tooltip', title: '点击查看学校统计概况' } %> + | +<%= statistic[:teacher_count].to_i %> | +<%= statistic[:student_count].to_i %> | +<%= statistic[:course_count].to_i %> | +<%= statistic[:course_group_count].to_i %> | +<%= statistic[:attachment_count].to_i %> | +<%= statistic[:video_count].to_i %> | +<%= statistic[:normal_work_count].to_i %> | +<%= statistic[:shixun_work_count].to_i %> | +<%= statistic[:student_work_count].to_i %> | +<%= statistic[:evaluate_count].to_i %> | +<%= statistic[:exercise_count].to_i %> | + +
EduCoder支持所有第三方直播平台,特别推荐:
-打开威佰通客户端,输入会议号即可进入直播
+打开{platform}客户端,输入会议号即可进入直播
会议号:
@@ -136,7 +137,7 @@ class LiveItem extends Component{
item.url ?
diff --git a/public/react/src/modules/courses/busyWork/CommonWorkList.js b/public/react/src/modules/courses/busyWork/CommonWorkList.js
index 4caf2f50c..05e2d067f 100644
--- a/public/react/src/modules/courses/busyWork/CommonWorkList.js
+++ b/public/react/src/modules/courses/busyWork/CommonWorkList.js
@@ -19,9 +19,9 @@ function renderScore(score, content) {
} else if (score >= 60) {
color = '#FF6800'
}
- return
- {score == null || score == undefined || score == '--' ? '--' : (content || score)}
-
+ return
+ {score == null || score == undefined || score == '--' ? '--': (content || score)}
+
}
function getScoreTip(score, dom) {
return score == '--' ? '未评分' : score == '**' ? '未公开' : dom
@@ -40,14 +40,14 @@ function buildColumns(that, student_works, studentData) {
})
} else if (studentData && studentData[0]) {
if (studentData[0].work_group) {
- gotWorkGroup = true
- }
+ gotWorkGroup = true
+ }
if (studentData[0].project_info) {
gotProjectInfo = true;
}
}
- let courseId = that.props.match.params.coursesId;
- let workId = that.props.match.params.workId;
+ let courseId= that.props.match.params.coursesId;
+ let workId= that.props.match.params.workId;
const { course_group_count, homework_status } = that.state;
const isAdmin = that.props.isAdmin()
const isAdminOrStudent = that.props.isAdminOrStudent()
@@ -434,16 +434,18 @@ class CommonWorkList extends Component{
if (val === "" || val === undefined) {
this.setState({
search: undefined,
- searchtypes: false
+ searchtypes: false,
+ page:1
})
} else {
this.setState({
searchtypes: true,
- loadingstate: true
+ loadingstate: true,
+ page:1
})
}
- this.fetchList()
+ this.fetchList(1)
}
onSearchValueInput = (e) => {
if (e.target.value === "" || e.target.value === undefined) {
@@ -474,8 +476,9 @@ class CommonWorkList extends Component{
this.fetchList()
}
- _getRequestParams() {
- const { search, arg_work_status, arg_teacher_comment, arg_course_group, order, page, arg_member_work, b_order } = this.state
+ _getRequestParams(pages) {
+ let { search, arg_work_status, arg_teacher_comment, arg_course_group, order, page, arg_member_work, b_order } = this.state
+ page=pages?pages:page
return {
page,
search,
@@ -492,7 +495,7 @@ class CommonWorkList extends Component{
fetchData = () => {
this.fetchList()
}
- fetchList = () => {
+ fetchList = (page) => {
if (this.state.comwbool === true) {
console.log('arg_course_group2');
console.log(this.state.arg_course_group);
@@ -507,7 +510,7 @@ class CommonWorkList extends Component{
let courseId = this.props.match.params.coursesId;
const url = `/homework_commons/${workId}/works_list.json`
- let params = this._getRequestParams()
+ let params = this._getRequestParams(page)
axios.post(url, params).then((response) => {
if (response.data) {
this.setState({
diff --git a/public/react/src/modules/courses/busyWork/commonWork.js b/public/react/src/modules/courses/busyWork/commonWork.js
index aa3ab2310..b76d76b95 100644
--- a/public/react/src/modules/courses/busyWork/commonWork.js
+++ b/public/react/src/modules/courses/busyWork/commonWork.js
@@ -582,7 +582,7 @@ class commonWork extends Component{
onClick={this.addToBank}
>加入题库
diff --git a/public/react/src/modules/courses/coursesDetail/CoursesBanner.js b/public/react/src/modules/courses/coursesDetail/CoursesBanner.js
index 180599fa8..afd62118e 100644
--- a/public/react/src/modules/courses/coursesDetail/CoursesBanner.js
+++ b/public/react/src/modules/courses/coursesDetail/CoursesBanner.js
@@ -404,7 +404,7 @@ class CoursesBanner extends Component {
exitclass=()=>{
this.setState({
modalsType: true,
- modalsTopval: "退出后您将不再是本课题的成员,作品将全部被删除,",
+ modalsTopval: "退出后您将不再是本课堂的成员,作品将全部被删除,",
modalsBottomval:"确定要退出该课堂吗?",
metype:6
})
@@ -602,28 +602,41 @@ class CoursesBanner extends Component {
- { item.platform && 直播平台:{item.platform} }
- { item.live_time && 开播时间:{item.live_time}}
+ { item.platform && 直播平台:{item.platform} }
+ { item.live_time && 开播时间:{item.live_time}}
{ item.duration && 直播预计时长:{item.duration}分钟 }
-
+
{
item.op_auth ?
{ boards && boards.length > 10 &&
{ course_module && course_module.length > 10 &&
{coursedata.teacher_applies_count===undefined?"":coursedata.teacher_applies_count>0?
- 您有{coursedata.teacher_applies_count}条新的加入申请
- this.setHistoryFun("/classrooms/"+this.props.match.params.coursesId+"/teachers?tab=2")}>
+ 新收到{coursedata.teacher_applies_count}条加入课堂的申请
+ this.setHistoryFun("/classrooms/"+this.props.match.params.coursesId+"/teachers?tab=2")}>
- 待审批
+ 去审批
:""}
}>
- this.setHistoryFun("/classrooms/"+this.props.match.params.coursesId+"/teachers")}>
+ this.setHistoryFun("/classrooms/"+this.props.match.params.coursesId+"/teachers")}>
教师
{coursedata.teacher_count}
diff --git a/public/react/src/modules/courses/coursesPublic/OneSelfOrderModal.js b/public/react/src/modules/courses/coursesPublic/OneSelfOrderModal.js
index c51b9a813..9c57cc88c 100644
--- a/public/react/src/modules/courses/coursesPublic/OneSelfOrderModal.js
+++ b/public/react/src/modules/courses/coursesPublic/OneSelfOrderModal.js
@@ -49,14 +49,20 @@ class OneSelfOrderModal extends Component{
let arr = this.props.course_groups.map(item => item.id);
let newarr = [];
let course_groups = this.props.course_groups;
+
course_groups.map((item, key) => {
+
if (item.end_time === null) {
// if(this.props.starttimesend===undefined){
// item.end_time = moment(moment(handleDateString(this.props.staytime)).add(1, 'week')).format("YYYY-MM-DD HH:mm");
// }else{
// item.end_time = moment(handleDateString(this.props.starttimesend)).format("YYYY-MM-DD HH:mm");
// }
- item.end_time = moment(moment(handleDateString(this.props.staytime)).add(1, 'week')).format("YYYY-MM-DD HH:mm");
+ if(this.props.starttimesend){
+ item.end_time = moment(moment(handleDateString(this.props.starttimesend))).format("YYYY-MM-DD HH:mm");
+ }else{
+ item.end_time = moment(moment(handleDateString(this.props.staytime)).add(1, 'week')).format("YYYY-MM-DD HH:mm");
+ }
newarr.push(item)
} else {
newarr.push(item)
@@ -101,7 +107,12 @@ class OneSelfOrderModal extends Component{
let course_groups=this.props.course_groups;
course_groups.map((item,key)=>{
if(item.end_time===null){
- item.end_time = moment(moment(handleDateString(this.props.staytime)).add(1, 'week')).format("YYYY-MM-DD HH:mm");
+ // item.end_time = moment(moment(handleDateString(this.props.staytime)).add(1, 'week')).format("YYYY-MM-DD HH:mm");
+ if(this.props.starttimesend){
+ item.end_time = moment(moment(handleDateString(this.props.starttimesend))).format("YYYY-MM-DD HH:mm");
+ }else{
+ item.end_time = moment(moment(handleDateString(this.props.staytime)).add(1, 'week')).format("YYYY-MM-DD HH:mm");
+ }
newarr.push(item)
}else{
newarr.push(item)
diff --git a/public/react/src/modules/courses/exercise/Studentshavecompletedthelist.js b/public/react/src/modules/courses/exercise/Studentshavecompletedthelist.js
index b8880c6f2..ab4efaf9b 100644
--- a/public/react/src/modules/courses/exercise/Studentshavecompletedthelist.js
+++ b/public/react/src/modules/courses/exercise/Studentshavecompletedthelist.js
@@ -23,14 +23,18 @@ import './yslexercisetable.css';
import {getImageUrl, toPath, sortDirections} from 'educoder';
import NoneData from '../../../modules/courses/coursesPublic/NoneData';
import ModulationModal_exercise from "../coursesPublic/ModulationModal_exercise";
+
const Search = Input.Search;
const RadioGroup = Radio.Group;
const CheckboxGroup = Checkbox.Group;
const {Option} = Select;
//学生老师页面
-let columnsystwo=[];
+let columnsystwo = [];
+let myssubjective = 0; //是否显示主观题
+let mysubjective_score = 0;//主观题得分
+let myobjective_score = 0;//客观题得分
+
class Studentshavecompletedthelist extends Component {
- // http://localhost:3007/courses/1309/exercises/722/exercises/student_exercise_list?debug=s
constructor(props) {
super(props);
this.state = {
@@ -47,7 +51,7 @@ class Studentshavecompletedthelist extends Component {
teacherlist: undefined,
searchtext: "",
Teacherliststudentlist: undefined,
- mylistansum:0,
+ mylistansum: 0,
review: null,
course_groupysls: undefined,
nocomment: false,
@@ -72,13 +76,13 @@ class Studentshavecompletedthelist extends Component {
key: 'number',
align: 'center',
className: "edu-txt-center font-14",
- width:'100px',
+ width: '100px',
render: (text, record) => (
{record.number === "--" ?
- {record.number}
+ {record.number}
:
- {record.number}
+ {record.number}
}
@@ -90,15 +94,16 @@ class Studentshavecompletedthelist extends Component {
key: 'name',
align: 'center',
className: "edu-txt-center font-14 maxnamewidth110",
- width:'100px',
+ width: '100px',
render: (text, record) => (
{record.name === "--" ?
- {record.name}
+ {record.name}
:
- {record.name}
+ {record.name}
}
@@ -110,30 +115,30 @@ class Studentshavecompletedthelist extends Component {
key: 'stduynumber',
align: 'center',
className: "edu-txt-center font-14 maxnamewidth175",
- width:'175px',
+ width: '175px',
sorter: true,
sortDirections: sortDirections,
render: (text, record) => (
{record.stduynumber === null ?
-- :
record.stduynumber ===
"" ?
-- :
{record.stduynumber}
}
@@ -146,26 +151,26 @@ class Studentshavecompletedthelist extends Component {
dataIndex: 'classroom',
align: 'center',
className: "edu-txt-center font-14 maxnamewidth255",
- width:'255px',
+ width: '255px',
render: (text, record) => (
-
+
{record.classroom === null ?
-- :
record.classroom ===
"" ?
-- :
{record.classroom}
}
@@ -178,19 +183,19 @@ class Studentshavecompletedthelist extends Component {
key: 'submitstate',
align: 'center',
className: "edu-txt-center font-14",
- width:'98px',
+ width: '98px',
render: (text, record) => (
{record.submitstate}
)
@@ -202,18 +207,18 @@ class Studentshavecompletedthelist extends Component {
key: 'updatetime',
align: 'center',
className: "edu-txt-center font-14",
- width:'175px',
+ width: '175px',
sorter: true,
defaultSortOrder: 'descend',
sortDirections: sortDirections,
render: (text, record) => (
{record.updatetime === "--" ?
- {record.updatetime}
+ {record.updatetime}
:
- {record.updatetime}
+ {record.updatetime}
}
),
@@ -224,14 +229,14 @@ class Studentshavecompletedthelist extends Component {
key: 'completion',
align: 'center',
className: "edu-txt-center font-14",
- width:'98px',
+ width: '98px',
render: (text, record) => (
{
record.completion === "--" ?
{record.completion}
@@ -239,20 +244,20 @@ class Studentshavecompletedthelist extends Component {
90 ? {
color: '#DD1717',
textAlign: "center",
- width:'98px',
- } : parseInt(record.completion) <= 90 ? {
+ width: '98px',
+ } : parseInt(record.completion) <= 90 &&parseInt(record.completion)>60? {
color: '#FF6800',
textAlign: "center",
- width:'98px',
+ width: '98px',
} : parseInt(record.completion) <= 60 ? {
color: '#747A7F',
textAlign: "center",
- width:'98px',
+ width: '98px',
} :
{
color: '#747A7F',
textAlign: "center",
- width:'98px',
+ width: '98px',
}}>{record.completion}
}
@@ -265,14 +270,14 @@ class Studentshavecompletedthelist extends Component {
key: 'levelscore',
align: 'center',
className: "edu-txt-center font-14",
- width:'99px',
+ width: '99px',
render: (text, record) => (
{record.levelscore === "--" ?
{record.levelscore}
@@ -280,22 +285,35 @@ class Studentshavecompletedthelist extends Component {
90 ? {
color: '#DD1717',
textAlign: "center",
- width:'99px',
- } : parseInt(record.levelscore) <= 90 ? {
+ width: '99px',
+ } : parseInt(record.levelscore) <= 90 &&parseInt(record.levelscore) >60? {
color: '#FF6800',
textAlign: "center",
- width:'99px',
+ width: '99px',
} : parseInt(record.levelscore) <= 60 ? {
color: '#747A7F',
textAlign: "center",
- width:'99px',
- } : {color: '#747A7F', textAlign: "center",width:'99px'}}>{record.levelscore}
+ width: '99px',
+ } : {color: '#747A7F', textAlign: "center", width: '99px'}}>{record.levelscore}
+ {
+ //主观题老师没有评分是
+ parseInt(record.levelscore) === 0 && myssubjective === 1 &&record.review_status===false?
+
+ (待批阅)
+
+ :""
+ }
+
}
)
},
{
- title:最终成绩