Merge branches 'dev_aliyun' and 'newshiyanaliyun' of https://bdgit.educoder.net/Hjqreturn/educoder into newshiyanaliyun

 Conflicts:
	public/react/src/modules/courses/busyWork/CommonWorkList.js
	public/react/src/modules/paths/ShixunPathCard.js
dev_aliyun2
杨树明 5 years ago
commit f55a41fb4b

@ -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

@ -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]
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_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]
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]

@ -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 = []

@ -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)

@ -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

@ -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

@ -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

@ -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

@ -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

@ -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

@ -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

@ -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

@ -2,6 +2,9 @@
<% add_admin_breadcrumb('概览', admins_path) %>
<% end %>
<% content_for(:head) do %>
<meta name="turbolinks-cache-control" content="no-cache">
<% end %>
<div class="header bg-gradient-primary pb-8 pt-md-8">
<div class="container-fluid">
<div class="header-body">

@ -0,0 +1,48 @@
<table class="table table-hover text-center school-base-statistic-list-table">
<thead class="thead-light">
<tr>
<th width="4%">序号</th>
<th width="10%" class="text-left">单位名称</th>
<th width="8%"><%= sort_tag('注册教师', name: 'teacher_count', path: admins_school_base_statistics_path) %></th>
<th width="8%"><%= sort_tag('注册学生', name: 'student_count', path: admins_school_base_statistics_path) %></th>
<th width="8%"><%= sort_tag('教学课堂', name: 'course_count', path: admins_school_base_statistics_path) %></th>
<th width="8%"><%= sort_tag('管理分班', name: 'course_group_count', path: admins_school_base_statistics_path) %></th>
<th width="8%"><%= sort_tag('课件资源', name: 'attachment_count', path: admins_school_base_statistics_path) %></th>
<th width="8%"><%= sort_tag('教学视频', name: 'video_count', path: admins_school_base_statistics_path) %></th>
<th width="8%"><%= sort_tag('普通作业', name: 'normal_work_count', path: admins_school_base_statistics_path) %></th>
<th width="8%"><%= sort_tag('实训作业', name: 'shixun_work_count', path: admins_school_base_statistics_path) %></th>
<th width="8%"><%= sort_tag('作业文件', name: 'student_work_count', path: admins_school_base_statistics_path) %></th>
<th width="8%"><%= sort_tag('评测次数', name: 'evaluate_count', path: admins_school_base_statistics_path) %></th>
<th width="8%"><%= sort_tag('在线试卷', name: 'exercise_count', path: admins_school_base_statistics_path) %></th>
</tr>
</thead>
<tbody>
<% if statistics.present? %>
<% statistics.each_with_index do |statistic, index| %>
<tr>
<td><%= list_index_no(@params_page.to_i, index) %></td>
<td class="text-left">
<%= link_to statistic[:name], "/colleges/#{statistic[:id]}/statistics",
target: '_blank', data: { toggle: 'tooltip', title: '点击查看学校统计概况' } %>
</td>
<td><%= statistic[:teacher_count].to_i %></td>
<td><%= statistic[:student_count].to_i %></td>
<td><%= statistic[:course_count].to_i %></td>
<td><%= statistic[:course_group_count].to_i %></td>
<td><%= statistic[:attachment_count].to_i %></td>
<td><%= statistic[:video_count].to_i %></td>
<td><%= statistic[:normal_work_count].to_i %></td>
<td><%= statistic[:shixun_work_count].to_i %></td>
<td><%= statistic[:student_work_count].to_i %></td>
<td><%= statistic[:evaluate_count].to_i %></td>
<td><%= statistic[:exercise_count].to_i %></td>
</tr>
<% end %>
<% else %>
<%= render 'admins/shared/no_data_for_table' %>
<% end %>
</tbody>
</table>
<%= render partial: 'admins/shared/paginate', locals: { objects: statistics } %>

@ -0,0 +1,14 @@
<% define_admin_breadcrumbs do %>
<% add_admin_breadcrumb('数据项列表', admins_school_base_statistics_path) %>
<% end %>
<div class="box search-form-container school-base-statistic-list-form">
<%= form_tag(admins_school_base_statistics_path, method: :get, class: 'form-inline search-form', remote: true) do %>
<%= text_field_tag(:keyword, params[:keyword], class: 'form-control col-sm-2 ml-3', placeholder: '学校名称搜索') %>
<%= submit_tag('搜索', class: 'btn btn-primary ml-3', 'data-disable-with': '搜索中...') %>
<% end %>
</div>
<div class="box admin-list-container school-base-statistic-list-container">
<%= render partial: 'admins/school_base_statistics/list', locals: { statistics: @statistics } %>
</div>

@ -0,0 +1 @@
$(".school-base-statistic-list-container").html("<%= j(render partial: 'admins/school_base_statistics/list', locals: { statistics: @statistics }) %>")

@ -17,7 +17,8 @@
<li>
<%= sidebar_item_group('#school-submenu', '学校统计', icon: 'area-chart') do %>
<li><%= sidebar_item(admins_daily_school_statistics_path, '统计总表', icon: 'bar-chart', controller: 'admins-daily_school_statistics') %></li>
<li><%= sidebar_item(admins_school_statistics_path, '数据变化报表', icon: 'line-chart', controller: 'admins-schools') %></li>
<li><%= sidebar_item(admins_school_statistics_path, '数据变化报表', icon: 'line-chart', controller: 'admins-school_statistics') %></li>
<li><%= sidebar_item(admins_school_base_statistics_path, '数据项列表', icon: 'eyedropper', controller: 'admins-school_base_statistics') %></li>
<% end %>
</li>

@ -1,4 +1,4 @@
ex_user_info = exercise_use_info(exercise_user,user_status,exercise)
ex_user_info = exercise_use_info(exercise_user,user_status,exercise,subject_question_ids)
json.user_id ex_user_info[:user_id]
json.user_name ex_user_info[:user_name]

@ -38,7 +38,8 @@ if @current_user_ex_answers.present?
json.current_answer_user do
json.partial! "exercises/exercise_user",locals: {exercise_user:@current_user_ex_answers.first, subjective_type:@subjective_type,
user_status:@exercise_current_user_status, exercise:@exercise,
question_ids: @exercise.exercise_questions.pluck(:id)}
question_ids: @exercise.exercise_questions.pluck(:id),
subject_question_ids: @exercise.subject_question_ids}
end
end
@ -47,7 +48,8 @@ if @exercise_users_list.present?
json.array! @exercise_users_list.each do |exercise_user|
json.partial! "exercises/exercise_user",locals: {exercise_user:exercise_user, subjective_type:@subjective_type,
user_status:@exercise_current_user_status, exercise:@exercise,
question_ids: @exercise.exercise_questions.pluck(:id)}
question_ids: @exercise.exercise_questions.pluck(:id),
subject_question_ids: @exercise.subject_question_ids}
end
end
else

@ -5,7 +5,7 @@
<meta charset="utf-8">
<meta name="viewport" content="width=device-width, initial-scale=1, shrink-to-fit=no">
<link rel='shortcut icon' type='image/x-icon' href='/favicon.ico' />
<%= yield :head %>
<%= csrf_meta_tags %>
<%= csp_meta_tag %>

@ -39,7 +39,7 @@ if @shixun
json.challenge_id challenge.id
challenge_score = @homework.challenge_score challenge.id
json.game_score_full challenge_score
json.game_score @work.work_challenge_score game, challenge_score, challenge.id
json.game_score number_with_precision (@work.work_challenge_score game, challenge_score, challenge.id), precision: 1
challenge_comment = @work.shixun_work_comments.find_by(challenge_id: challenge.id)
json.challenge_comment challenge_comment&.comment
json.challenge_comment_hidden @user_course_identity < Course::STUDENT ? challenge_comment&.hidden_comment : nil

@ -1,4 +1,6 @@
json.extract! video, :id, :title, :cover_url, :file_url, :play_url, :vv, :user_id, :transcoded
json.play_url base64_encode(video.play_url)
json.file_url base64_encode(video.file_url)
json.play_duration video.video_play_duration
json.published_at video.display_published_at
json.created_at video.display_created_at

@ -1173,6 +1173,8 @@ Rails.application.routes.draw do
get :contrast, on: :collection
end
resources :school_base_statistics, only: [:index]
resources :users, only: [:index, :edit, :update, :destroy] do
member do
post :reward_grade

@ -108,13 +108,15 @@ class TPIContextProvider extends Component {
})
}
componentWillMount () {
// 拦截判断是否离开当前页面
}
componentWillUnmount() {
this.costTimeInterval && window.clearInterval(this.costTimeInterval)
}
componentDidMount() {
window.$(window).unload( ()=>{
console.log(12321)
});
// TODO 登录状态的判断?
// request
@ -136,12 +138,15 @@ class TPIContextProvider extends Component {
}
}, 1000)
// 页面离开时存下用户的任务耗时
window.$(window).bind('beforeunload', function (e) {
console.log(111111)
// // 页面离开时存下用户的任务耗时
window.$(window).bind('beforeunload',()=>{
this._updateCostTime();
})
// window.$(window).unload( ()=>{
// this._updateCostTime();
// });
// // 页面离开时存下用户的任务耗时
// window.$(window).unload( ()=>{
// this._updateCostTime();

@ -1015,7 +1015,7 @@ class Fileslists extends Component{
:"":""}
{this.props.isAdmin()?<li className="li_line drop_down">
移动到...<i className="iconfont icon-xiajiantou font-12 ml2"></i>
移动到目录<i className="iconfont icon-xiajiantou font-12 ml2"></i>
<style>
{ `

@ -9,6 +9,7 @@ import bilibili from './images/bilibili.png';
import tencent from './images/tencent.png';
import WeiBaiTong from './images/WeiBaiTong.png';
import douyu from './images/douyu.jpg';
import zoom from './images/zoom.png';
class Live extends Component{
render(){
@ -16,31 +17,64 @@ class Live extends Component{
return(
<div className="livePanel">
<style>
{
`
.verticallayout{
display: flex;
flex-direction:column;
}
.myspacearound{
display: flex;
justify-content: space-around;
}
.mr0{
margin-right: 0px !important;
}
.mr5{
margin-right: 5px !important;
}
.ml0{
margin-left: 0px !important;
}
`
}
</style>
<p className="mt30 mb10 color-grey-9 pl10">EduCoder支持所有第三方直播平台特别推荐</p>
<ul className="platform">
<li>
<ul className="platform myspacearound">
<li className="verticallayout mr0">
<a href="https://ke.qq.com/act/speed_pc/index.html?from=800021837" target="_blank"><img alt="" src={tencent} className="mr8" width="28px"/>
<label className="color-grey-3 pointer">腾讯课堂</label>
</a>
<a href="https://pub.idqqimg.com/pc/misc/files/20200204/2e4cb765bef54f0c919c0ab8ab79d969.pdf" target="_blank" className="color-blue ml20">(简明手册)</a>
<a href="https://pub.idqqimg.com/pc/misc/files/20200204/2e4cb765bef54f0c919c0ab8ab79d969.pdf" target="_blank" className="color-blue ml0">(简明手册)</a>
</li>
<li>
<li className="verticallayout mr0">
<a href="https://live.bilibili.com/liveHime?visit_id=a81rbm7v2kk0" target="_blank"><img alt="" src={bilibili} className="mr8" width="52px"/>
<label className="color-grey-3 pointer">哔哩哔哩</label>
</a>
<a href="https://www.bilibili.com/blackboard/live/broadcast-intro.html#/" target="_blank" className="color-blue ml20">(简明手册)</a>
<a href="https://www.bilibili.com/blackboard/live/broadcast-intro.html#/" target="_blank" className="color-blue ml0">(简明手册)</a>
</li>
<li>
<li className="verticallayout mr0">
<a href="https://www.douyu.com/" target="_blank"><img alt="" src={douyu} className="mr8" width="28px"/>
<label className="color-grey-3 pointer">斗鱼</label>
</a>
<a href="https://www.douyu.com/special/guide/anchor" target="_blank" className="color-blue ml20">(简明手册)</a>
<a href="https://www.douyu.com/special/guide/anchor" target="_blank" className="color-blue ml0">(简明手册)</a>
</li>
<li>
<div><img alt="" src={WeiBaiTong} className="mr8" width="28px"/>
<li className="verticallayout mr0">
<div>
<img alt="" src={WeiBaiTong} className="mr8" width="28px"/>
<label className="color-grey-3">威佰通</label>
</div>
<a href="https://www.educoder.net/forums/3734" target="_blank" className="color-blue ml20">(简明手册)</a>
<a href="https://www.educoder.net/forums/3734" target="_blank" className="color-blue ml0">(简明手册)</a>
</li>
<li className="verticallayout mr0">
<a href="https://zoom.com.cn/download" target="_blank"><img alt="" src={zoom} className="mr8" width="63px"/>
<label className="color-grey-3" style={{
cursor:"pointer"
}}>zoom</label>
</a>
<a href="https://support.zoom.us/hc/zh-cn/articles/201362033-Windows%E5%92%8CMAC%E5%85%A5%E9%97%A8%E6%8C%87%E5%8D%97" target="_blank" className="color-blue ml0">(简明手册)</a>
</li>
</ul>
{

@ -62,7 +62,8 @@ class LiveItem extends Component{
const { key, item , setLiveId } = this.props;
const { visible } = this.state;
const wei_flag = item.platform && (item.platform === "威佰通");
const wei_flag = item.platform && (item.platform === "威佰通"||item.platform === "zoom");
let platform=item&&item.platform?item.platform:"威佰通";
console.log(wei_flag && item.url);
return(
<div className="liveItem" key={key}>
@ -78,7 +79,7 @@ class LiveItem extends Component{
wei_flag && item.url ?
<React.Fragment>
<div className="task-popup-content edu-txt-center">
<p className="font-16">打开威佰通客户端输入会议号即可进入直播</p>
<p className="font-16">打开{platform}客户端输入会议号即可进入直播</p>
<div className="wei_meet">
<p className="wei_meet_info">
<span>会议号</span>
@ -158,7 +159,7 @@ class LiveItem extends Component{
{ item.live_time && <span className="mr50">开播时间{item.live_time}</span>}
{ item.duration && <span className="mr50">直播预计时长{item.duration}分钟</span> }
</span>
<span className="edu-txt-right" style={{width:"80px"}}>
<span className="edu-txt-right" style={{width:"120px"}}>
{
item.op_auth ?
<WordsBtn style="grey" onClick={()=>setLiveId(item.id)}>编辑</WordsBtn>:""

@ -9,7 +9,7 @@ import axios from 'axios';
const { TextArea } = Input;
const { Option } = Select;
const array=['腾讯课堂','斗鱼直播','Bilibili','威佰通'];
const array=['腾讯课堂','斗鱼直播','Bilibili','威佰通','zoom'];
function range(start, end) {
const result = [];
@ -68,7 +68,7 @@ class LiveNew extends Component{
})
this.setState({
beginTime:result.data.live_time && moment(result.data.live_time,"YYYY-MM-DD HH:mm"),
wei_flag:result.data.platform && result.data.platform === "威佰通"
wei_flag:result.data.platform && (result.data.platform === "威佰通"||result.data.platform === "zoom")
})
}
})
@ -181,7 +181,7 @@ class LiveNew extends Component{
}
ChangePlatform=(e)=>{
if(e === "威佰通"){
if(e === "威佰通"||e==="zoom"){
this.setState({
wei_flag:true
})

@ -299,8 +299,7 @@ class VideoIndex extends Component {
const flag = parseInt(course_identity) < 5;
const newOperation = flag;
const new_upload = flag && (is_teacher && this.props.checkIfProfessionalCertification());
let isAdmin = this.props&&this.props.isAdmin();
return (
<React.Fragment>
@ -404,7 +403,10 @@ class VideoIndex extends Component {
</React.Fragment>
:
isAdmin===true?
<WordsBtn style="blue" className="font-16 ml30" onClick={this.liveSetting}>添加直播</WordsBtn>
:
""
}
</li>
</div>

Binary file not shown.

After

Width:  |  Height:  |  Size: 3.3 KiB

@ -387,7 +387,7 @@ class Boards extends Component{
{ coursedata && !!coursedata.course_public && <li className="li_line"><a href="javascript:void(0)" className="color-grey-9" onClick={this.onSetToOpen}>设为公开</a></li> }
<li className="li_line drop_down">
移动到...<i className="iconfont icon-xiajiantou font-12 ml2"></i>
移动到目录<i className="iconfont icon-xiajiantou font-12 ml2"></i>
<ul className="drop_down_menu"
style={{"right":"0px","left":"unset", maxHeight: '318px', overflowY: 'auto', minWidth: '200px'}}>
{ boards && boards.length > 10 && <p className="drop_down_search">

@ -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({

@ -582,7 +582,7 @@ class commonWork extends Component{
onClick={this.addToBank}
>加入题库</a></li>:""}
<li className="li_line drop_down">
移动到...<i className="iconfont icon-xiajiantou font-12 ml2"></i>
移动到目录<i className="iconfont icon-xiajiantou font-12 ml2"></i>
<ul className="drop_down_menu"
style={{"right":"0px","left":"unset", maxHeight: '318px', overflowY: 'auto', minWidth: '200px'}}>
{ course_module && course_module.length > 10 && <p className="drop_down_search">

@ -404,7 +404,7 @@ class CoursesBanner extends Component {
exitclass=()=>{
this.setState({
modalsType: true,
modalsTopval: "退出后您将不再是本课题的成员,作品将全部被删除,",
modalsTopval: "退出后您将不再是本课堂的成员,作品将全部被删除,",
modalsBottomval:"确定要退出该课堂吗?",
metype:6
})
@ -602,9 +602,10 @@ class CoursesBanner extends Component {
</div>
<div className="clearfix ">
<div className="fl fl mr40 mb20" >
<div>
<a href={"/users/" + coursedata.teacher_login} className="fl">
<img alt="头像" className="radius fl mt3 bannerimgname"
src={getImageUrl(`images/` + coursedata.teacher_img)}/>
@ -616,12 +617,24 @@ class CoursesBanner extends Component {
className="color-white bannnerusername">{coursedata.teacher_name}</a>
</p>
</div>
<div className="fl mt13">
<p className="color-white bannnerusernames">{coursedata.teacher_school}</p>
</div>
</div>
{/* <div className="task-hide" style={{height:25,marginBottom:10,marginLeft:60}}>
{coursedata.teacher_users.length===0?'':
<span className="color-white" >协作老师
{coursedata.teacher_users.map((iem,idx)=>{
return(
<span className="task-hide" style={{width:50,marginLeft:5}}>{idx<3?iem:''} {coursedata.teacher_users.length>3&&idx===2?'...':''} </span>
)
})
}
</span>
}
</div> */}
</div>
@ -652,6 +665,10 @@ class CoursesBanner extends Component {
{/*}*/}
<div>
{this.props.isStudent()?this.props.current_user&&this.props.current_user.course_is_end===true?"":<a className="fr user_default_btn user_blue_btn mr20 font-18"
onClick={() => this.exitclass()}
> 永久退出课堂 </a>:""}
{coursedata.switch_to_student === true ?
<Tooltip placement="bottom" title={
<pre>由教师/助教身份切换至学生<br/>可进行提交作品答题等操作</pre>
@ -710,9 +727,7 @@ class CoursesBanner extends Component {
)
: ""}
{this.props.isStudent()?this.props.current_user&&this.props.current_user.course_is_end===true?"":<a className="fr user_default_btn user_blue_btn mr20 font-18"
onClick={() => this.exitclass()}
> 永久退出课堂 </a>:""}
</div>
@ -753,12 +768,12 @@ background:rgba(204,204,204,0.2) !important;
placement="topLeft"
title={<pre className="antsoancss">
{coursedata.teacher_applies_count===undefined?"":coursedata.teacher_applies_count>0?
<span >您有{coursedata.teacher_applies_count}新的加入申请
<a className={"daishenp"} onClick={excellent === true && this.props.isAdminOrStudent() === false ?"":()=>this.setHistoryFun("/classrooms/"+this.props.match.params.coursesId+"/teachers?tab=2")}>
<span>新收到{coursedata.teacher_applies_count}加入课堂的申请
<a className={"daishenp ml5"} onClick={excellent === true && this.props.isAdminOrStudent() === false ?"":()=>this.setHistoryFun("/classrooms/"+this.props.match.params.coursesId+"/teachers?tab=2")}>
<span style={{
color:"#FFA804"
}}>
审批
审批
</span></a></span>:""}</pre>}>
<span className="color-grey-c font-16" onClick={excellent === true && this.props.isAdminOrStudent() === false ?"":()=>this.setHistoryFun("/classrooms/"+this.props.match.params.coursesId+"/teachers")}>
<span className={"mr10"}>教师</span>

@ -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");
// }
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");
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)

@ -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 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 = {
@ -98,7 +102,8 @@ class Studentshavecompletedthelist extends Component {
{record.name === "--" ?
<span style={{color: '#999999', textAlign: "center", width: '100px'}}>{record.name}</span>
:
<a className="maxnamewidth110" style={{color: '#07111B', textAlign: "center",width:'100px'}} title={record.name}>{record.name}</a>
<a className="maxnamewidth110" style={{color: '#07111B', textAlign: "center", width: '100px'}}
title={record.name}>{record.name}</a>
}
</span>
@ -240,7 +245,7 @@ class Studentshavecompletedthelist extends Component {
color: '#DD1717',
textAlign: "center",
width: '98px',
} : parseInt(record.completion) <= 90 ? {
} : parseInt(record.completion) <= 90 &&parseInt(record.completion)>60? {
color: '#FF6800',
textAlign: "center",
width: '98px',
@ -281,7 +286,7 @@ class Studentshavecompletedthelist extends Component {
color: '#DD1717',
textAlign: "center",
width: '99px',
} : parseInt(record.levelscore) <= 90 ? {
} : parseInt(record.levelscore) <= 90 &&parseInt(record.levelscore) >60? {
color: '#FF6800',
textAlign: "center",
width: '99px',
@ -289,7 +294,20 @@ class Studentshavecompletedthelist extends Component {
color: '#747A7F',
textAlign: "center",
width: '99px',
} : {color: '#747A7F', textAlign: "center",width:'99px'}}>{record.levelscore}</span>
} : {color: '#747A7F', textAlign: "center", width: '99px'}}>{record.levelscore}
{
//主观题老师没有评分是
parseInt(record.levelscore) === 0 && myssubjective === 1 &&record.review_status===false?
<span style={{
color: '#DD1717',
textAlign: "center",
marginLeft: "5px",
}}>
(待批阅)
</span>
:""
}
</span>
}
</span>
)
@ -328,7 +346,7 @@ class Studentshavecompletedthelist extends Component {
<span style={parseInt(record.efficiencyscore) > 90 ? {
color: '#DD1717',
textAlign: "center"
} : parseInt(record.efficiencyscore) <= 90 ? {
} : parseInt(record.efficiencyscore) <= 90 && parseInt(record.efficiencyscore) > 60 ? {
color: '#FF6800',
textAlign: "center"
} : parseInt(record.efficiencyscore) <= 60 ? {
@ -342,24 +360,32 @@ class Studentshavecompletedthelist extends Component {
:
<Tooltip placement="right" title={<div>
<div>{record.objective_score===undefined?"":record.objective_score === "--" ? <span>客观题得分0</span> :
<div>{record.objective_score === undefined ? "" : record.objective_score === "--" ?
<span>客观题得分0</span> :
<span>客观题得分{record.objective_score}</span>}
</div>
<div>{record.subjective_score===undefined?"":record.subjective_score === "--" ? <span>主观题得分0</span> :
<div>{record.subjective_score === undefined ? "" : record.subjective_score === "--" ?
<span>主观题得分0</span> :
<span>主观题得分{record.subjective_score}</span>}
</div>
{
parseInt(record.efficiencyscore) === 0 && myssubjective === 0 &&record.review_status===false?
<div>
<span>待批阅</span>
</div>
:
<div>{record.efficiencyscore === "--" ? <span>最终成绩0</span> :
<span>最终成绩{record.efficiencyscore}</span>}
</div>
}
</div>
}>
<span style={parseInt(record.efficiencyscore) > 90 ? {
color: '#DD1717',
textAlign: "center"
} : parseInt(record.efficiencyscore) <= 90 ? {
} : parseInt(record.efficiencyscore) <= 90 && parseInt(record.efficiencyscore) > 60 ? {
color: '#FF6800',
textAlign: "center"
} : parseInt(record.efficiencyscore) <= 60 ? {
@ -369,6 +395,17 @@ class Studentshavecompletedthelist extends Component {
color: '#747A7F',
textAlign: "center"
}}>{record.efficiencyscore}</span>
{//只有一个主观题的时候
parseInt(record.efficiencyscore) === 0 && myssubjective === 0 &&record.review_status===false?
<span style={{
color: '#DD1717',
textAlign: "center",
marginLeft: "5px",
}}>
(待批阅)
</span> :
""
}
</Tooltip>
}
</span>
@ -415,9 +452,11 @@ class Studentshavecompletedthelist extends Component {
<span className="maxnamewidth110 font-14">
{
record.name === "--" ?
<span className="maxnamewidth110" style={{color: '#999999', textAlign: "center",width:'100px'}}>{record.name}</span>
<span className="maxnamewidth110"
style={{color: '#999999', textAlign: "center", width: '100px'}}>{record.name}</span>
:
<span className="maxnamewidth110" style={{color: '#07111B', textAlign: "center",width:'100px'}}>{record.name}</span>
<span className="maxnamewidth110"
style={{color: '#07111B', textAlign: "center", width: '100px'}}>{record.name}</span>
}
</span>
@ -554,7 +593,7 @@ class Studentshavecompletedthelist extends Component {
color: '#DD1717',
textAlign: "center",
width: '98px',
} : parseInt(record.completion) <= 90 ? {
} : parseInt(record.completion) <= 90 && parseInt(record.completion)>60? {
color: '#FF6800',
textAlign: "center",
width: '98px',
@ -593,7 +632,7 @@ class Studentshavecompletedthelist extends Component {
color: '#DD1717',
textAlign: "center",
width: '99px'
} : parseInt(record.levelscore) <= 90 ? {
} : parseInt(record.levelscore) <= 90 && parseInt(record.levelscore) >60? {
color: '#FF6800',
textAlign: "center",
width: '99px'
@ -601,7 +640,19 @@ class Studentshavecompletedthelist extends Component {
color: '#747A7F',
textAlign: "center",
width: '99px'
} : {color: '#747A7F', textAlign: "center", width:'99px'}}>{record.levelscore}</span>
} : {color: '#747A7F', textAlign: "center", width: '99px'}}>{record.levelscore}
{
//主观题老师没有评分是
parseInt(record.levelscore) === 0 && myssubjective === 1 &&record.review_status===false?
<span style={{
color: '#DD1717',
textAlign: "center",
marginLeft: "5px",
}}>
(待批阅)
</span> :""
}
</span>
}
</span>
)
@ -639,7 +690,7 @@ class Studentshavecompletedthelist extends Component {
color: '#DD1717',
textAlign: "center",
width: "199px"
} : parseInt(record.efficiencyscore) <= 90 ? {
} : parseInt(record.efficiencyscore) <= 90 && parseInt(record.efficiencyscore) > 60 ? {
color: '#FF6800',
textAlign: "center",
width: "199px"
@ -656,17 +707,25 @@ class Studentshavecompletedthelist extends Component {
:
<Tooltip placement="right" title={<div>
<div>{record.objective_score===undefined?"":record.objective_score === "--" ? <span>客观题得分0</span> :
<div>{record.objective_score === undefined ? "" : record.objective_score === "--" ?
<span>客观题得分0</span> :
<span>客观题得分{record.objective_score}</span>}
</div>
<div>{record.subjective_score===undefined?"":record.subjective_score === "--" ? <span>主观题得分0</span> :
<div>{record.subjective_score === undefined ? "" : record.subjective_score === "--" ?
<span>主观题得分0</span> :
<span>主观题得分{record.subjective_score}</span>}
</div>
{
parseInt(record.efficiencyscore) === 0 && myssubjective === 0 &&record.review_status===false?
<div>
<span>待批阅</span>
</div>
:
<div>{record.efficiencyscore === "--" ? <span>最终成绩0</span> :
<span>最终成绩{record.efficiencyscore}</span>}
</div>
}
</div>
}>
@ -674,7 +733,7 @@ class Studentshavecompletedthelist extends Component {
color: '#DD1717',
textAlign: "center",
width: "199px"
} : parseInt(record.efficiencyscore) <= 90 ? {
} : parseInt(record.efficiencyscore) <= 90 && parseInt(record.efficiencyscore) > 60 ? {
color: '#FF6800',
textAlign: "center",
width: "199px"
@ -687,6 +746,17 @@ class Studentshavecompletedthelist extends Component {
textAlign: "center",
width: "199px"
}}>{record.efficiencyscore}</span>
{//只有一个主观题的时候
parseInt(record.efficiencyscore) === 0 && myssubjective === 0 &&record.review_status===false?
<span style={{
color: '#DD1717',
textAlign: "center",
marginLeft: "5px",
}}>
(待批阅)
</span> :
""
}
</Tooltip>
}
@ -866,7 +936,7 @@ class Studentshavecompletedthelist extends Component {
<span style={parseInt(record.completion) > 90 ? {
color: '#DD1717',
textAlign: "center",
} : parseInt(record.completion) <= 90 ? {
} : parseInt(record.completion) <= 90&& parseInt(record.completion) >60 ? {
color: '#FF6800',
textAlign: "center",
} : parseInt(record.completion) <= 60 ? {
@ -898,13 +968,26 @@ class Studentshavecompletedthelist extends Component {
<span style={parseInt(record.levelscore) > 90 ? {
color: '#DD1717',
textAlign: "center",
} : parseInt(record.levelscore) <= 90 ? {
} : parseInt(record.levelscore) <= 90 &&parseInt(record.levelscore)>60? {
color: '#FF6800',
textAlign: "center",
} : parseInt(record.levelscore) <= 60 ? {
color: '#747A7F',
textAlign: "center",
} : {color: '#747A7F', textAlign: "center"}}>{record.levelscore}</span>
} : {color: '#747A7F', textAlign: "center"}}>{record.levelscore}
{
//主观题老师没有评分是
parseInt(record.levelscore) === 0 && myssubjective === 1 &&record.review_status===false?
<span style={{
color: '#DD1717',
textAlign: "center",
marginLeft: "5px",
}}>
(待批阅)
</span> :
""
}
</span>
}
</span>
@ -940,7 +1023,7 @@ class Studentshavecompletedthelist extends Component {
<span style={parseInt(record.efficiencyscore) > 90 ? {
color: '#DD1717',
textAlign: "center",
} : parseInt(record.efficiencyscore) <= 90 ? {
} : parseInt(record.efficiencyscore) <= 90 && parseInt(record.efficiencyscore) > 60 ? {
color: '#FF6800',
textAlign: "center",
} : parseInt(record.efficiencyscore) <= 60 ? {
@ -954,24 +1037,32 @@ class Studentshavecompletedthelist extends Component {
:
<Tooltip placement="right" title={<div>
<div>{record.objective_score===undefined?"":record.objective_score === "--" ? <span>客观题得分0</span> :
<div>{record.objective_score === undefined ? "" : record.objective_score === "--" ?
<span>客观题得分0</span> :
<span>客观题得分{record.objective_score}</span>}
</div>
<div>{record.subjective_score===undefined?"":record.subjective_score === "--" ? <span>主观题得分0</span> :
<div>{record.subjective_score === undefined ? "" : record.subjective_score === "--" ?
<span>主观题得分0</span> :
<span>主观题得分{record.subjective_score}</span>}
</div>
{
parseInt(record.efficiencyscore) === 0 && myssubjective === 0 &&record.review_status===false?
<div>
<span>待批阅</span>
</div>
:
<div>{record.efficiencyscore === "--" ? <span>最终成绩0</span> :
<span>最终成绩{record.efficiencyscore}</span>}
</div>
}
</div>
}>
<span style={parseInt(record.efficiencyscore) > 90 ? {
color: '#DD1717',
textAlign: "center",
} : parseInt(record.efficiencyscore) <= 90 ? {
} : parseInt(record.efficiencyscore) <= 90 && parseInt(record.efficiencyscore) > 60 ? {
color: '#FF6800',
textAlign: "center",
} : parseInt(record.efficiencyscore) <= 60 ? {
@ -981,6 +1072,17 @@ class Studentshavecompletedthelist extends Component {
color: '#747A7F',
textAlign: "center",
}}>{record.efficiencyscore}</span>
{//只有一个主观题的时候
parseInt(record.efficiencyscore) === 0 && myssubjective === 0 &&record.review_status===false?
<span style={{
color: '#DD1717',
textAlign: "center",
marginLeft: "5px",
}}>
(待批阅)
</span> :
""
}
</Tooltip>
}
</span>
@ -1076,9 +1178,11 @@ class Studentshavecompletedthelist extends Component {
render: (text, record) => (
<span>
{record.classroom === "--" ?
<span style={{color: '#999999', textAlign: "center"}} className="maxnamewidth260">{record.classroom}</span>
<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>
<a style={{color: '#07111B', textAlign: "center"}} className="maxnamewidth260"
title={record.classroom}>{record.classroom}</a>
}
</span>
)
@ -1130,10 +1234,26 @@ class Studentshavecompletedthelist extends Component {
className: "edu-txt-center font-14",
render: (text, record) => (
<span>
{record.completion=== "--"?
<span style={{color: '#999999', textAlign: "center"}}>--</span>
{
record.completion === "--" ?
<span style={{
color: '#999999',
textAlign: "center",
}}>--</span>
:
<span style={{color: '#07111B', textAlign: "center"}}>{record.completion}</span>
<span style={parseInt(record.completion) > 90 ? {
color: '#DD1717',
textAlign: "center",
} : parseInt(record.completion) <= 90 && parseInt(record.completion) > 60 ? {
color: '#FF6800',
textAlign: "center",
} : parseInt(record.completion) <= 60 ? {
color: '#747A7F',
textAlign: "center",
} : {
color: '#747A7F',
textAlign: "center",
}}>{record.completion}</span>
}
</span>
)
@ -1146,11 +1266,38 @@ class Studentshavecompletedthelist extends Component {
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>
{
record.levelscore === "--" ?
<span style={{
color: '#999999',
textAlign: "center",
}}>--</span> :
<span style={parseInt(record.levelscore) > 90 ? {
color: '#DD1717',
textAlign: "center",
} : parseInt(record.levelscore) <= 90 && parseInt(record.levelscore) > 60 ? {
color: '#FF6800',
textAlign: "center",
} : parseInt(record.levelscore) <= 60 ? {
color: '#747A7F',
textAlign: "center",
} : {color: '#747A7F', textAlign: "center"}}>{record.levelscore}
{
//主观题老师没有评分是
parseInt(record.levelscore) === 0 && myssubjective === 1&&record.review_status===false?
<span style={{
color: '#DD1717',
textAlign: "center",
marginLeft: "5px",
}}>
(待批阅)
</span> :
""
}
</span>
}
</span>
)
},
@ -1171,8 +1318,10 @@ class Studentshavecompletedthelist extends Component {
<Tooltip placement="bottom" title={<div>
<div>未评分</div>
</div>}>
<a style={{color: '#999999',
textAlign: "center",}}>--</a>
<a style={{
color: '#999999',
textAlign: "center",
}}>--</a>
</Tooltip>
:
record.commit_method === 5 ?
@ -1183,7 +1332,7 @@ class Studentshavecompletedthelist extends Component {
<span style={parseInt(record.efficiencyscore) > 90 ? {
color: '#DD1717',
textAlign: "center",
} : parseInt(record.efficiencyscore) <= 90 ? {
} : parseInt(record.efficiencyscore) <= 90 && parseInt(record.efficiencyscore) > 60 ? {
color: '#FF6800',
textAlign: "center",
} : parseInt(record.efficiencyscore) <= 60 ? {
@ -1197,24 +1346,37 @@ class Studentshavecompletedthelist extends Component {
:
<Tooltip placement="right" title={<div>
<div>{record.objective_score===undefined?"":record.objective_score === "--" ? <span>客观题得分0</span> :
<div>{record.objective_score === undefined ? "" : record.objective_score === "--" ?
<span>客观题得分0</span> :
<span>客观题得分{record.objective_score}</span>}
</div>
<div>{record.subjective_score===undefined?"":record.subjective_score === "--" ? <span>主观题得分0</span> :
<div>{record.subjective_score === undefined ? "" : record.subjective_score === "--" ?
<span>主观题得分0</span> :
<span>主观题得分{record.subjective_score}</span>}
</div>
<div>{record.efficiencyscore === "--" ? <span>最终成绩0</span> :
<span>最终成绩{record.efficiencyscore}</span>}
{
parseInt(record.efficiencyscore) === 0 && myssubjective === 0&& record.review_status===false?
<div>
<span>待批阅</span>
</div>
:
<div>
{record.efficiencyscore === "--" ?
<span>最终成绩0</span>
:
<span>最终成绩{record.efficiencyscore}</span>
}
</div>
}
</div>
}>
<span style={parseInt(record.efficiencyscore) > 90 ? {
color: '#DD1717',
textAlign: "center",
} : parseInt(record.efficiencyscore) <= 90 ? {
} : parseInt(record.efficiencyscore) <= 90 && parseInt(record.efficiencyscore) > 60 ? {
color: '#FF6800',
textAlign: "center",
} : parseInt(record.efficiencyscore) <= 60 ? {
@ -1223,7 +1385,19 @@ class Studentshavecompletedthelist extends Component {
} : {
color: '#747A7F',
textAlign: "center",
}}>{record.efficiencyscore}</span>
}}>{parseInt(record.efficiencyscore) === 0 ? 0 : record.efficiencyscore}</span>
{//只有一个主观题的时候
parseInt(record.efficiencyscore) === 0 && myssubjective === 0 && record.review_status===false?
<span style={{
color: '#DD1717',
textAlign: "center",
marginLeft: "5px",
}}>
(待批阅)
</span> :
""
}
</Tooltip>
}
</span>
@ -1244,19 +1418,22 @@ class Studentshavecompletedthelist extends Component {
(//助教是否有权限
this.props.assistant_auth && this.props.assistant_auth === true ?
<a style={{textAlign: "center"}} className="color-blue"
target="_blank" onClick={() => this.Adjustment(record.user_id)}>{record.has_comment===true?"已评阅":"评阅"}</a>
target="_blank"
onClick={() => this.Adjustment(record.user_id)}>{record.has_comment === true ? "已评阅" : "评阅"}</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)}>{record.has_comment===true?"已评阅":"评阅"}</a>
target="_blank"
onClick={() => this.Adjustment(record.user_id)}>{record.has_comment === true ? "已评阅" : "评阅"}</a>
:
<span style={{textAlign: "center", color: '#999999'}}>--</span>
)
)
:
<a style={{textAlign: "center"}} className="color-blue"
target="_blank" onClick={() => this.Adjustment(record.user_id)}>{record.has_comment===true?"已评阅":"评阅"}</a>
target="_blank"
onClick={() => this.Adjustment(record.user_id)}>{record.has_comment === true ? "已评阅" : "评阅"}</a>
)
: record.submitstate === "已提交" ?
(//是否助教
@ -1302,8 +1479,10 @@ class Studentshavecompletedthelist extends Component {
}
{/* onClick={() => this.Adjustment(record.user_id)}>评阅</a>*/
}
{/*<span style={{textAlign: "center", color: '#999999'}}*/}
{/*>--</span>*/}
{/*<span style={{textAlign: "center", color: '#999999'}}*/
}
{/*>--</span>*/
}
// //console.log("Studentshavecompletedthelist");
// //console.log(props.current_status);
// columnsys 老师列表
@ -1391,6 +1570,17 @@ class Studentshavecompletedthelist extends Component {
limit: null,
}
}).then((response) => {
if (response === undefined) {
return
}
try {
myssubjective = response.data.exercise_types.subjective?response.data.exercise_types.subjective:0;//记录是否有主观题 1是有
mysubjective_score = response.data.exercise_types.subjective_score?response.data.exercise_types.subjective_score:0;
myobjective_score = response.data.exercise_types.objective_score?response.data.exercise_types.objective_score:0;
} catch (e) {
}
//学生
if (response.data.exercise_types.user_permission === 1) {
this.setState({
@ -1414,15 +1604,11 @@ class Studentshavecompletedthelist extends Component {
for (var i = 0; i < this.state.columnss.length; i++) {
var item = this.state.columnss[i];
if (item.title === "分班") {
}
else if(item.title==="客观题得分"){
}
else if(item.title==="主观题得分"){
}
else if(this.props.isNotMember()===true&&item.title==="学号") {
} else if (item.title === "客观题得分") {
} else if (item.title === "主观题得分") {
} else if (this.props.isNotMember() === true && item.title === "学号") {
}
else{
} else {
arr.push(item);
}
}
@ -1438,13 +1624,10 @@ class Studentshavecompletedthelist extends Component {
var item = this.state.columnss[i];
if (item.title === "客观题得分") {
}
else if(item.title==="主观题得分"){
}
else if(this.props.isNotMember()===true&&item.title==="学号") {
} else if (item.title === "主观题得分") {
} else if (this.props.isNotMember() === true && item.title === "学号") {
}
else{
} else {
arr.push(item);
}
}
@ -1463,13 +1646,10 @@ class Studentshavecompletedthelist extends Component {
for (var i = 0; i < this.state.columnstwo.length; i++) {
var item = this.state.columnstwo[i];
if (item.title === "客观题得分") {
}
else if(item.title==="主观题得分"){
}
else if(this.props.isNotMember()===true&&item.title==="学号") {
} else if (item.title === "主观题得分") {
} else if (this.props.isNotMember() === true && item.title === "学号") {
}
else{
} else {
arr.push(item);
}
}
@ -1478,13 +1658,10 @@ class Studentshavecompletedthelist extends Component {
for (var i = 0; i < this.state.columns.length; i++) {
var item = this.state.columns[i];
if (item.title === "客观题得分") {
}
else if(item.title==="主观题得分"){
}
else if(this.props.isNotMember()===true&&item.title==="学号") {
} else if (item.title === "主观题得分") {
} else if (this.props.isNotMember() === true && item.title === "学号") {
}
else{
} else {
arr2.push(item);
}
}
@ -1499,13 +1676,10 @@ class Studentshavecompletedthelist extends Component {
for (var i = 0; i < this.state.columnstwo.length; i++) {
var item = this.state.columnstwo[i];
if (item.title === "客观题得分") {
}
else if(item.title==="主观题得分"){
}
else if(this.props.isNotMember()===true&&item.title==="学号") {
} else if (item.title === "主观题得分") {
} else if (this.props.isNotMember() === true && item.title === "学号") {
}
else{
} else {
arr.push(item);
}
}
@ -1513,13 +1687,10 @@ class Studentshavecompletedthelist extends Component {
for (var i = 0; i < this.state.columns.length; i++) {
var item = this.state.columns[i];
if (item.title === "客观题得分") {
}
else if(item.title==="主观题得分"){
}
else if(this.props.isNotMember()===true&&item.title==="学号") {
} else if (item.title === "主观题得分") {
} else if (this.props.isNotMember() === true && item.title === "学号") {
}
else{
} else {
arr2.push(item);
}
}
@ -1583,7 +1754,8 @@ class Studentshavecompletedthelist extends Component {
subjective_score: exercise_users[i].subjective_score === null ? "--" : exercise_users[i].subjective_score === "" ? "--" : exercise_users[i].subjective_score,
operating: exercise_users[i].has_comment === true ? "已评阅" : "评阅",
commit_method: exercise_users[i].commit_method,
has_comment:exercise_users[i].has_comment
has_comment: exercise_users[i].has_comment,
review_status: exercise_users[i].review_status,
})
} else {
datalist.push({
@ -1602,7 +1774,9 @@ class Studentshavecompletedthelist extends Component {
subjective_score: exercise_users[i].subjective_score === null ? "--" : exercise_users[i].subjective_score === "" ? "--" : exercise_users[i].subjective_score,
operating: exercise_users[i].has_comment === true ? "已评阅" : "--",
commit_method: exercise_users[i].commit_method,
has_comment:exercise_users[i].has_comment
has_comment: exercise_users[i].has_comment,
review_status: exercise_users[i].review_status,
})
}
@ -1632,7 +1806,7 @@ class Studentshavecompletedthelist extends Component {
completion: current_answer_user.objective_score === undefined ? "--" : current_answer_user.objective_score === null ? "--" : current_answer_user.objective_score === "" ? "--" : current_answer_user.objective_score,
levelscore: current_answer_user.subjective_score === undefined ? "--" : current_answer_user.subjective_score === null ? "--" : current_answer_user.subjective_score === "" ? "--" : current_answer_user.subjective_score,
score_open: exercise_types.score_open,
commit_method:current_answer_user.commit_method
commit_method: current_answer_user.commit_method,
})
@ -1674,7 +1848,9 @@ class Studentshavecompletedthelist extends Component {
subjective_score: exercise_users[i].subjective_score === null ? "--" : exercise_users[i].subjective_score === "" ? "--" : exercise_users[i].subjective_score,
operating: exercise_users[i].has_comment === true ? "已评阅" : "查看",
commit_method: exercise_users[i].commit_method,
has_comment:exercise_users[i].has_comment
has_comment: exercise_users[i].has_comment,
review_status: exercise_users[i].review_status,
})
noclassroom = exercise_users[i].user_group_name;
}
@ -1739,6 +1915,9 @@ class Studentshavecompletedthelist extends Component {
params: params
}).then((response) => {
// //console.log(JSON.stringify(response));
if (response === undefined) {
return
}
this.setState({
Teacherliststudentlist: response.data,
review: response.data.review,
@ -1747,19 +1926,23 @@ class Studentshavecompletedthelist extends Component {
current_answer_user: response.data.current_answer_user,
mylistansum: response.data.exercise_types.answer_users + response.data.exercise_types.unanswer_users,
})
try {
myssubjective = response.data.exercise_types.subjective?response.data.exercise_types.subjective:0;//记录是否有主观题 1是有
mysubjective_score = response.data.exercise_types.subjective_score?response.data.exercise_types.subjective_score:0;
myobjective_score = response.data.exercise_types.objective_score?response.data.exercise_types.objective_score:0;
} catch (e) {
}
if (response.data.exercise_types.subjective === 0) {
var arr = [];
for (var i = 0; i < this.state.columnstwo.length; i++) {
var item = this.state.columnstwo[i];
if (item.title === "客观题得分") {
}
else if(item.title==="主观题得分"){
}
else if(this.props.isNotMember()===true&&item.title==="学号") {
} else if (item.title === "主观题得分") {
} else if (this.props.isNotMember() === true && item.title === "学号") {
}
else{
} else {
arr.push(item);
}
}
@ -1768,13 +1951,10 @@ class Studentshavecompletedthelist extends Component {
for (var i = 0; i < this.state.columns.length; i++) {
var item = this.state.columns[i];
if (item.title === "客观题得分") {
}
else if(item.title==="主观题得分"){
}
else if(this.props.isNotMember()===true&&item.title==="学号") {
} else if (item.title === "主观题得分") {
} else if (this.props.isNotMember() === true && item.title === "学号") {
}
else{
} else {
arr2.push(item);
}
}
@ -1823,7 +2003,9 @@ class Studentshavecompletedthelist extends Component {
finalscore: exercise_users[i].has_comment === true ? "已评阅" : "评阅",
user_id: exercise_users[i].user_id,
commit_method: exercise_users[i].commit_method,
has_comment:exercise_users[i].has_comment
has_comment: exercise_users[i].has_comment,
review_status: exercise_users[i].review_status,
})
} else {
datalist.push({
@ -1843,7 +2025,8 @@ class Studentshavecompletedthelist extends Component {
finalscore: exercise_users[i].has_comment === true ? "已评阅" : "--",
user_id: exercise_users[i].user_id,
commit_method: exercise_users[i].commit_method,
has_comment:exercise_users[i].has_comment
has_comment: exercise_users[i].has_comment,
review_status: exercise_users[i].review_status,
})
indexi++;
}
@ -1871,13 +2054,10 @@ class Studentshavecompletedthelist extends Component {
for (var i = 0; i < this.state.columnsys.length; i++) {
var item = this.state.columnsys[i];
if (item.title === "客观题得分") {
}
else if(item.title==="主观题得分"){
}
else if(this.props.isNotMember()===true&&item.title==="学号") {
} else if (item.title === "主观题得分") {
} else if (this.props.isNotMember() === true && item.title === "学号") {
}
else{
} else {
arr.push(item);
}
}
@ -1905,14 +2085,10 @@ class Studentshavecompletedthelist extends Component {
for (var i = 0; i < this.state.columnsys.length; i++) {
var item = this.state.columnsys[i];
if (item.title === "分班") {
}
else if(item.title==="客观题得分"){
}
else if(item.title==="主观题得分"){
}
else if(this.props.isNotMember()===true&&item.title==="学号") {
}
else{
} else if (item.title === "客观题得分") {
} else if (item.title === "主观题得分") {
} else if (this.props.isNotMember() === true && item.title === "学号") {
} else {
arr.push(item);
}
}
@ -1945,10 +2121,8 @@ class Studentshavecompletedthelist extends Component {
for (var i = 0; i < this.state.columnsys.length; i++) {
var item = this.state.columnsys[i];
if (item.title === "客观题得分") {
}
else if(item.title==="主观题得分"){
}
else if(this.props.isNotMember()===true&&item.title==="学号") {
} else if (item.title === "主观题得分") {
} else if (this.props.isNotMember() === true && item.title === "学号") {
} else {
arr.push(item);
@ -1979,12 +2153,9 @@ class Studentshavecompletedthelist extends Component {
for (var i = 0; i < this.state.columnsys.length; i++) {
var item = this.state.columnsys[i];
if (item.title === "分班") {
}
else if(item.title==="客观题得分"){
}
else if(item.title==="主观题得分"){
}
else if(this.props.isNotMember()===true&&item.title==="学号") {
} else if (item.title === "客观题得分") {
} else if (item.title === "主观题得分") {
} else if (this.props.isNotMember() === true && item.title === "学号") {
} else {
arr.push(item);
@ -2022,8 +2193,7 @@ class Studentshavecompletedthelist extends Component {
var item = this.state.columnsys[i];
if (this.props.isNotMember() === true && item.title === "学号") {
}
else{
} else {
arr.push(item);
}
}
@ -2047,11 +2217,9 @@ class Studentshavecompletedthelist extends Component {
var item = this.state.columnsys[i];
if (item.title === "分班") {
}
else if(this.props.isNotMember()===true&&item.title==="学号") {
} else if (this.props.isNotMember() === true && item.title === "学号") {
}
else{
} else {
arr.push(item);
}
}
@ -2094,11 +2262,9 @@ class Studentshavecompletedthelist extends Component {
var item = this.state.columnsys[i];
if (item.title === "分班") {
}
else if(this.props.isNotMember()===true&&item.title==="学号") {
} else if (this.props.isNotMember() === true && item.title === "学号") {
}
else{
} else {
arr.push(item);
}
}
@ -2161,9 +2327,18 @@ class Studentshavecompletedthelist extends Component {
if (response === undefined) {
return
}
this.setState({
loadingstate: false,
})
try {
myssubjective = response.data.exercise_types.subjective?response.data.exercise_types.subjective:0;//记录是否有主观题 1是有
mysubjective_score = response.data.exercise_types.subjective_score?response.data.exercise_types.subjective_score:0;
myobjective_score = response.data.exercise_types.objective_score?response.data.exercise_types.objective_score:0;
} catch (e) {
}
// //console.log(response);
// //console.log(1997);
this.Generatenewdatasy(response.data.exercise_users, response);
@ -2487,6 +2662,7 @@ class Studentshavecompletedthelist extends Component {
};
_getRequestParams() {
const {order, checkedValuesineinfo, course_groupyslstwo, searchtext, page, limit, course_groupyslsthree} = this.state
return {
@ -2701,7 +2877,6 @@ class Studentshavecompletedthelist extends Component {
}
this.setState({
testpapergradingboll: true,
exeuserid: e,
@ -2743,7 +2918,6 @@ class Studentshavecompletedthelist extends Component {
}
render() {
const isAdmin = this.props.isAdmin();

@ -860,7 +860,7 @@ class studentsList extends Component{
<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 && !isStudentPage && <li className="drop_down">
移动到...<i className="iconfont icon-xiajiantou font-12 ml2"></i>
移动到目录<i className="iconfont icon-xiajiantou font-12 ml2"></i>
<ul className="drop_down_menu" style={{"right":"0px","left":"unset", width: '200px', maxHeight: '324px', overflowY: 'auto'}}>
{
course_groups && course_groups.length > 9 ?

@ -60,8 +60,11 @@ class PollDetailTabFirst extends Component{
})
}
searchInfo=()=>{
let {order, search, commit_status, poll_group_id, page, order_type} = this.state
this.getTableList(order, search, commit_status, poll_group_id, page, order_type);
let {order, search, commit_status, poll_group_id, page, order_type} = this.state;
this.setState({
page:1
})
this.getTableList(order, search, commit_status, poll_group_id, 1, order_type);
}
// 获取接口数据

@ -305,7 +305,7 @@ class ShixunhomeWorkItem extends Component{
<div className="clearfix ds pr contentSection" >
<style>{`
.maxwidth333{
max-width: 333px;
max-width: 300px;
overflow: hidden;
text-overflow: ellipsis;
white-space: nowrap;
@ -378,7 +378,7 @@ class ShixunhomeWorkItem extends Component{
}
{this.props.isAdminOrCreator()?<a onClick={(event)=>this.editname(discussMessage.name,discussMessage.homework_id,event)} className={"ml20 btn colorblue font-16 fontweight400 "}>重命名</a>:""}
{this.props.isAdmin?<a onClick={(event)=>this.editname(discussMessage.name,discussMessage.homework_id,event)} className={"ml20 btn colorblue font-16 fontweight400 "}>重命名</a>:""}
{/*<WordsBtn className="btn colorblue ml20 font-16" to={`/classrooms/${this.props.match.params.coursesId}/${this.state.shixuntypes}/${discussMessage.homework_id}/settings?tab=3`} > 设置</WordsBtn>*/}
<WordsBtn className="btn colorblue font-16 ml15 fontweight400 " to={`/classrooms/${this.props.match.params.coursesId}/${this.state.shixuntypes}/${discussMessage.homework_id}/settings?tab=3`} > 设置</WordsBtn>
</span>:""}

@ -1188,7 +1188,7 @@ class ShixunHomework extends Component{
</span>}
</span>
<li className="fr">
{datas===undefined?"":datas.homeworks && datas.homeworks.length>1?this.props.isAdminOrCreator()===true?datas&&datas.category_name===undefined||datas&&datas.category_name===null?
{datas===undefined?"":datas.homeworks && datas.homeworks.length>1?this.props.isAdmin()===true?datas&&datas.category_name===undefined||datas&&datas.category_name===null?
<span>
<WordsBtn style="blue" className={"mr30 font-16"}>
<Link className="color4CACFF" to={`/classrooms/${this.props.match.params.coursesId}/ordering/shixun_homework/${main_id&&main_id}`}>调整排序</Link>
@ -1256,7 +1256,7 @@ class ShixunHomework extends Component{
</li>
<li className="li_line drop_down" onMouseEnter={this.updadatalist}>
{/*onClick={()=>this.selectBlank(4)}*/}
移动到...<i className="iconfont icon-xiajiantou font-12 ml2"></i>
移动到目录<i className="iconfont icon-xiajiantou font-12 ml2"></i>
<ul className="drop_down_menu" style={{"right":"0px","left":"unset", maxHeight: '318px', overflowY: 'auto', minWidth: '200px'}}>
{ course_modules&&course_modules.homework_category.length > 10 && <p className="drop_down_search">
<Input placeholder="搜索" value={this.state.dirSearchValue} onChange={(e) => {this.setState({dirSearchValue: e.target.value})}}/>

@ -1,9 +1,7 @@
import React, {Component} from "react";
import {WordsBtn} from 'educoder';
import {Table, InputNumber, Tooltip} from "antd";
import {Link, Switch, Route, Redirect} from 'react-router-dom';
import {Table, InputNumber, Tooltip,Badge} from "antd";
import axios from 'axios';
import './Shixunbage.css';
class OfficialAcademicTranscript extends Component {
constructor(props) {
@ -116,14 +114,15 @@ class OfficialAcademicTranscript extends Component {
className: "TaskForms",
render: (text, record) => (
<span>
<span className={"task-hide linhe15"} style={{color: "#676767"}}><a className="tasknameName font-14"
onClick={() => this.myjumptopic("id" + record.customs)}
<span className={"task-hide"} style={{color: "#676767"}}>
<a className="relative font-14" onClick={() => this.myjumptopic("id" + record.customs)}
title={record.taskname.name.length > 15 ? record.taskname.name : ""}>
{record.taskname.name}
</a>
<span className={"tasknameName fl mr5"}>{record.taskname.name}</span>
{record.taskname.complete_status === 2 ?
<span className={"tasknamebox ml10"}>延时</span> : record.taskname.complete_status === 3 ?
<span className={"tasknameboxs ml10"}>延时</span> : ""}
<Badge count={"延时"} className="site-badge-red fl pdt3" /> : record.taskname.complete_status === 3 ?
<Badge count={"无效"} className="site-badge-white fl pdt3" />: ""}
</a>
</span>
</span>
),
@ -305,10 +304,11 @@ class OfficialAcademicTranscript extends Component {
.tasknameName:link{color:#676767}
.tasknameName:hover{color:#4CACFF}
.tasknameName{
display: inline-block;
overflow: hidden;
text-overflow: ellipsis;
white-space: nowrap;
max-width: 225px;
max-width: 200px;
text-align: left !important;
}
.TaskForms{
@ -331,6 +331,9 @@ class OfficialAcademicTranscript extends Component {
.mr22{
margin-right: 22px;
}
.pdt3{
padding-top:3px;
}
`}
</style>
{datas === undefined ? "" : <Table

@ -0,0 +1,15 @@
.site-badge-red .ant-badge-count {
background-color: #FC2B6A;
color: #fff;
/*box-shadow: 0 0 0 1px #d9d9d9 inset;*/
}
.site-badge-white .ant-badge-count {
background-color: #EDEDED;
color: #666666;
/*box-shadow: 0 0 0 1px #d9d9d9 inset;*/
}
.relative{
position: relative;
}

@ -29,7 +29,7 @@ class ShixunPathCard extends Component {
<span className="tag_open_name">开放课程</span>
</div>
}
<Link to={"/paths/" + item.id} className="squareImg" >
<Link to={"/paths/" + item.id} className="squareImg" target="_blank">
<img alt="详情图片" src={setImagesUrl(item.image_url)} />
</Link>
<div className="mt20" style={{ marginLeft: "1px" }}>

@ -295,7 +295,7 @@ const App = (props) => {
fetchData={handleFetchData}
/>
</TabPane>
<TabPane tab="实使用情况" key="2">
<TabPane tab="实使用情况" key="2">
<DisplayTableData
columns={sxColumns}
datas={other_info}
@ -303,7 +303,7 @@ const App = (props) => {
fetchData={handleFetchData}
/>
</TabPane>
<TabPane tab="学习情况" key="3">
<TabPane tab="学员学习情况" key="3">
<DisplayTableData
columns={stColumns}
datas={other_info}

@ -488,7 +488,7 @@
color: #4CACFF;
}
.xiaoshou{
cursor:pointer !important;
cursor: !important;
}
.xiaoshout{
cursor:default !important;

@ -1265,14 +1265,14 @@ class TPMBanner extends Component {
{this.props.identity < 8 && shixunsDetails.shixun_status != -1 && shixunsDetails.shixun_status != 0?
<div className="fr kaike kkbth mr20 width155"
<div className="fr kaike kkbth mr20"
style={{display: shixunsDetails.can_copy === false || shixunsDetails.can_copy === null ? "none" : "flex"}}>
<Tooltip placement="bottom" title={"基于这个实训修改形成新的实训"}>
<span className="flex1 edu-txt-center fl font-18"
onClick={this.copyForkvisible}
style={{display: shixunsDetails.can_copy === false || shixunsDetails.can_copy === null ? "none" : "inline-block"}}
>
复制实训
复制
</span>
</Tooltip>

Loading…
Cancel
Save