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

PCqiandao
杨树明 5 years ago
commit 3fa6b9f5cf

@ -0,0 +1,59 @@
class AttendancesController < ApplicationController
before_action :require_login
before_action :find_course, only: [:index, :statistics]
before_action :user_course_identity
def index
current_date = Date.current
current_end_time = Time.current.strftime("%H:%M:%S")
if params[:history]
@attendances = @course.course_attendances.where("attendance_date < '#{current_date}' or
(attendance_date = '#{current_date}' and end_time < '#{current_end_time}')")
if @user_course_identity == Course::STUDENT
member = @course.students.find_by(user_id: current_user.id)
group_ids = [member&.course_group_id.to_i, 0]
@attendances = @attendances.joins(:course_attendance_groups).where(course_attendance_groups: {course_group_id: group_ids})
attendance_ids = @attendances.pluck(:id)
@normal_count = @course.course_member_attendances.where(course_member_id: member&.id, course_attendance_id: attendance_ids, attendance_status: "NORMAL").size
@leave_count = @course.course_member_attendances.where(course_member_id: member&.id, course_attendance_id: attendance_ids, attendance_status: "LEAVE").size
@absence_count = @course.course_member_attendances.where(course_member_id: member&.id, course_attendance_id: attendance_ids, attendance_status: "ABSENCE").size
end
else
@attendances = @course.course_attendances.where("attendance_date > '#{current_date}' or
(attendance_date = '#{current_date}' and end_time > '#{current_end_time}')")
end
@attendances_count = @attendances.size
@attendances = @attendances.order("attendance_date desc, start_time desc")
@attendances = paginate @attendances.includes(:user, :course_member_attendances)
end
def statistics
current_date = Date.current
current_end_time = Time.current.strftime("%H:%M:%S")
history_attendances = @course.course_attendances.where("attendance_date < '#{current_date}' or
(attendance_date = '#{current_date}' and end_time < '#{current_end_time}')")
all_member_attendances = CourseMemberAttendance.where(course_attendance_id: history_attendances)
if params[:group_id].present?
history_attendances = history_attendances.joins(:course_attendance_groups).where(course_attendance_groups: {course_group_id: [params[:group_id], 0]})
all_member_attendances = all_member_attendances.joins(:course_member).where(course_members: {course_group_id: params[:group_id]})
end
history_attendances = history_attendances.order("attendance_date desc, start_time desc")
data = AttendanceStatisticsService.call history_attendances, all_member_attendances
@all_history_count = data[:all_history_count]
@history_attendances = data[:history_attendances]
@avg_normal_rate = data[:avg_normal_rate]
@avg_absence_rate = data[:avg_absence_rate]
@avg_leave_rate = data[:avg_leave_rate]
end
private
def find_attendance
@attendance = CourseAttendance.find params[:id]
@course = @attendance.course
end
end

@ -162,7 +162,7 @@ class ChallengesController < ApplicationController
#@pass_games_map = @shixun.challenges.joins(:games).where(games: {status:2}).group(:challenge_id).reorder(nil).count
#@play_games_map = @shixun.challenges.joins(:games).where(games: {status:[0,1]}).group(:challenge_id).reorder(nil).count
@challenges = @shixun.challenges.joins(join_sql).select(base_columns)
@challenges = @shixun.challenges.joins(join_sql).select(base_columns).uniq
#@challenges = @shixun.challenges.fields_for_list
@editable = @shixun.status == 0 # before_action有判断权限如果没发布则肯定是管理人员

@ -43,6 +43,12 @@ class CourseSecondCategoriesController < ApplicationController
elsif @course_module.module_type == "video"
@course.course_videos.where(course_second_category_id: @category.id).update_all(course_second_category_id: 0)
@right_url = "/classrooms/#{@course.id}/course_videos"
elsif @course_module.module_type == "common_homework"
@category.homework_commons.update_all(course_second_category_id: 0)
@right_url = "/classrooms/#{@course.id}/common_homeworks/#{@course_module.id}"
elsif @course_module.module_type == "group_homework"
@category.homework_commons.update_all(course_second_category_id: 0)
@right_url = "/classrooms/#{@course.id}/group_homeworks/#{@course_module.id}"
end
@category.destroy

@ -22,23 +22,17 @@ class MyshixunsController < ApplicationController
tip_exception("403", "")
end
begin
@shixun = Shixun.select(:id, :identifier, :challenges_count).find(@myshixun.shixun_id)
ActiveRecord::Base.transaction do
begin
@shixun = Shixun.select(:id, :identifier, :challenges_count).find(@myshixun.shixun_id)
@myshixun.destroy!
StudentWork.where(:myshixun_id => @myshixun.id).update_all(myshixun_id: 0, work_status: 0, work_score: nil,
final_score: nil, efficiency: 0, eff_score: 0, calculation_time: nil, cost_time: 0, compelete_status: 0)
rescue Exception => e
logger.error("######reset_my_game_failed:#{e.message}")
raise("ActiveRecord::RecordInvalid")
end
StudentWork.where(:myshixun_id => @myshixun.id)
.update_all(myshixun_id: 0, work_status: 0, work_score: nil,
final_score: nil, efficiency: 0, eff_score: 0, calculation_time: nil, cost_time: 0, compelete_status: 0)
end
# 删除版本库
GitService.delete_repository(repo_path: @repo_path) unless @shixun.is_choice_type?
rescue Exception => e
if e.message != "ActiveRecord::RecordInvalid"
logger.error("######delete_repository_error-:#{e.message}")
end
raise "delete_repository_error:#{e.message}"
end
end

@ -37,8 +37,14 @@ class Weapps::AttendancesController < ApplicationController
@all_member_attendances = @all_member_attendances.joins(:course_member).where(course_members: {course_group_id: params[:group_id]})
end
@history_attendances = all_attendances.order("id asc")
@all_history_count = @history_attendances.size
all_attendances = all_attendances.order("attendance_date desc, start_time desc")
data = AttendanceStatisticsService.call all_attendances, @all_member_attendances
@all_history_count = data[:all_history_count]
@history_attendances = data[:history_attendances]
@avg_normal_rate = data[:avg_normal_rate]
@avg_absence_rate = data[:avg_absence_rate]
@avg_leave_rate = data[:avg_leave_rate]
end
def student_attendances

@ -75,7 +75,7 @@ class Challenge < ApplicationRecord
if identifier.present?
shixun.task_pass || self.status != 3 ? "/tasks/#{identifier}" : ""
else
self.position == 1 ? "/api/shixuns/#{shixun.identifier}/shixun_exec" : ""
self.position == 1 ? "/shixuns/#{shixun.identifier}/shixun_exec.json" : ""
end
end
@ -143,7 +143,7 @@ class Challenge < ApplicationRecord
# 关卡用户通关数
def user_passed_count
#games.map{|g| g.status == 2}.count
self.games.where(status: 1).count
self.games.where(status: 2).count
end
# 关卡用户正在挑战的人数

@ -7,6 +7,7 @@
class Game < ApplicationRecord
default_scope { order("games.created_at desc") }
#TODO: games表要增加challenge_id与user_id的唯一索引
has_many :outputs, -> { order('query_index DESC') }
has_many :challenge_samples, :dependent => :destroy
has_many :game_codes, :dependent => :destroy

@ -0,0 +1,54 @@
class AttendanceStatisticsService < ApplicationService
attr_reader :attendances, :member_attendances
def initialize(attendances, member_attendances)
@attendances = attendances
@member_attendances = member_attendances
end
def call
all_normal_rate = []
all_absence_rate = []
all_leave_rate = []
history_attendances = []
attendances.each do |attendance|
normal_count = history_member_count(member_attendances, "NORMAL", attendance.id)
absence_count = history_member_count(member_attendances, "ABSENCE", attendance.id)
leave_count = history_member_count(member_attendances, "LEAVE", attendance.id)
all_count = member_attendances.select{|member_attendance| member_attendance.course_attendance_id == attendance.id}.size
normal_rate = cal_rate(normal_count, all_count)
all_normal_rate << normal_rate
absence_rate = cal_rate(absence_count, all_count)
all_absence_rate << absence_rate
leave_rate = cal_rate(leave_count, all_count)
all_leave_rate << leave_rate
history_attendances << {name: attendance.name, attendance_date: attendance.attendance_date.strftime("%Y-%m-%d"),
start_time: attendance.start_time.strftime("%H:%M"), end_time: attendance.end_time.strftime("%H:%M"),
normal_rate: normal_rate, absence_rate: absence_rate, leave_rate: leave_rate}
end
all_history_count = history_attendances.size
history_attendances = history_attendances[0..9].reverse
avg_normal_rate = cal_rate(all_normal_rate.sum, all_history_count)
avg_absence_rate = cal_rate(all_absence_rate.sum, all_history_count)
avg_leave_rate = cal_rate(all_leave_rate.sum, all_history_count)
{all_history_count: all_history_count, history_attendances: history_attendances, avg_normal_rate: avg_normal_rate,
avg_absence_rate: avg_absence_rate, avg_leave_rate: avg_leave_rate}
end
private
def history_member_count member_attendances, status, attendance_id
member_attendances.select{|member_attendance| member_attendance.attendance_status == status && member_attendance.course_attendance_id == attendance_id}.size
end
def cal_rate base, sum
sum == 0 ? 0 : (base.to_f / sum)
end
end

@ -0,0 +1,24 @@
json.attendances @attendances do |attendance|
json.(attendance, :id, :name, :normal_count, :all_count, :mode)
json.author do
user = attendance.user
json.user_name user.real_name
json.user_login user.login
end
json.attendance_date attendance.attendance_date.strftime("%Y-%m-%d")
json.start_time attendance.start_time.strftime("%H:%M")
json.end_time attendance.end_time.strftime("%H:%M")
json.edit_auth @user_course_identity < Course::PROFESSOR || attendance.user_id == User.current.id
if @user_course_identity == Course::STUDENT
json.attendance_status student_attendance_status(attendance, User.current)
end
end
json.attendances_count @attendances_count
if @user_course_identity == Course::STUDENT
json.normal_count @normal_count
json.leave_count @leave_count
json.absence_count @absence_count
end

@ -0,0 +1,10 @@
json.history_attendances @history_attendances.each_with_index.to_a do |attendance, index|
json.(attendance, :name, :attendance_date, :start_time, :end_time, :normal_rate, :absence_rate, :leave_rate)
json.index "签到#{index + 1}"
end
json.all_history_count @all_history_count
json.avg_normal_rate @avg_normal_rate
json.avg_absence_rate @avg_absence_rate
json.avg_leave_rate @avg_leave_rate

@ -5,25 +5,12 @@ json.current_attendance @current_attendance do |attendance|
json.end_time attendance.end_time.strftime("%H:%M")
end
all_normal_rate = []
all_absence_rate = []
all_leave_rate = []
json.history_attendances @history_attendances.each_with_index.to_a do |attendance, index|
normal_count = history_member_count(@all_member_attendances, "NORMAL", attendance.id)
absence_count = history_member_count(@all_member_attendances, "ABSENCE", attendance.id)
leave_count = history_member_count(@all_member_attendances, "LEAVE", attendance.id)
all_count = @all_member_attendances.select{|member_attendance| member_attendance.course_attendance_id == attendance.id}.size
json.(attendance, :name, :attendance_date, :start_time, :end_time, :normal_rate, :absence_rate, :leave_rate)
json.index index + 1
json.normal_rate cal_rate(normal_count, all_count)
all_normal_rate << cal_rate(normal_count, all_count)
json.absence_rate cal_rate(absence_count, all_count)
all_absence_rate << cal_rate(absence_count, all_count)
json.leave_rate cal_rate(leave_count, all_count)
all_leave_rate << cal_rate(leave_count, all_count)
end
json.all_history_count @all_history_count
json.avg_normal_rate @all_history_count == 0 ? 0 : all_normal_rate.sum / @all_history_count
json.avg_absence_rate @all_history_count == 0 ? 0 : all_absence_rate.sum / @all_history_count
json.avg_leave_rate @all_history_count == 0 ? 0 : all_leave_rate.sum / @all_history_count
json.avg_normal_rate @avg_normal_rate
json.avg_absence_rate @avg_absence_rate
json.avg_leave_rate @avg_leave_rate

@ -550,6 +550,10 @@ Rails.application.routes.draw do
end
end
resources :attendances, shallow: true do
get :statistics, on: :collection
end
resources :polls, only:[:index,:new,:create] do
collection do
post :publish # 立即发布

@ -0,0 +1,28 @@
#coding=utf-8
desc "合并高校的数据,第一个参数是: 正确高校的id, 第二个参数是: 错误高校需要合并到正确高校的id"
# 命令: bundle exec rake schools:merge_school_data f_school=1 s_school=2,3
namespace :schools do
task merge_school_data: :environment do
f_school = ENV['f_school'].to_i
school = School.find_by(id: f_school)
return if school.blank?
s_school = ENV['s_school'].split(",")
merge_schools = School.where(id: s_school)
# 改变用户的学校id 和 单位
UserExtension.where(school_id: merge_schools)
.update_all(school_id: f_school, department_id: nil)
# 改变课堂的学校id
Course.where(school_id: merge_schools).update_all(school_id: f_school)
# 实训报告表迁移数据
s_report = SchoolReport.find_by(school_id: f_school)
SchoolReport.where(school_id: merge_schools).each do |sr|
s_report.update_column(:shixun_evaluate_count, (s_report.shixun_evaluate_count+sr.shixun_evaluate_count))
sr.update(shixun_evaluate_count: 0)
end
end
end

@ -2,13 +2,18 @@
namespace :video_transcode do
desc "视频转码成h264"
task :submit => :environment do
Video.find_each do |v|
if v.uuid && !v.transcoded && !v.file_url.include?('.mp4') && !AliyunVod::Service.get_meta_code_info(v.uuid)[:codecnamne].start_with?("h264", "h265")
p "--- Start submit video trans code #{v.uuid}"
AliyunVod::Service.submit_transcode_job(v.uuid, 'a0277c5c0c7458458e171b0cee6ebf5e')
else
i = []
Video.where.not(uuid: nil, file_url: nil).where(transcoded: false, status: "published").find_each do |v|
code_info = AliyunVod::Service.get_meta_code_info(v.uuid)
if v.file_url.include?('.mp4') && code_info[:codecnamne]&.include?("h264")
v.update(transcoded: true)
else
puts("uuid: #{v.uuid}")
i << "#{v.id}, #{v.file_url}, #{code_info[:codecnamne]}"
AliyunVod::Service.submit_transcode_job(v.uuid, 'a0277c5c0c7458458e171b0cee6ebf5e')
end
end
puts "###########转码个数:#{i.size}"
puts "###########id,file_url, codecnamne:#{i}"
end
end

@ -1,7 +1,7 @@
/*
* @Description: quill delta -> html
* @Author: tangjiang
* @Github:
* @Github:
* @Date: 2019-12-24 08:51:25
* @LastEditors : tangjiang
* @LastEditTime : 2019-12-26 09:30:11
@ -55,7 +55,7 @@ export const formatDelta = (deltas) => {
*/
export const operate = (text, key, value) => {
let operatedText = null;
debugger;
switch (key) {
case 'bold':
operatedText = `<strong>${text}</strong>`;
@ -72,7 +72,7 @@ export const operate = (text, key, value) => {
case 'link':
operatedText = `<a href="${value}" style="color: #5091ff; text-decoration: underline;" target="bland">${text}</a>`;
break;
default:
default:
operatedText = text;
}

@ -34,7 +34,7 @@ class CompetitionContentsMd extends Component{
}else{
chart_rules.rule_contents.map((items,keys)=>{
debugger
if(parseInt(this.props.tabkey)===items.competition_stage_id){
console.log(items)
this.contentMdRef.current.setValue(items.content);

@ -684,12 +684,24 @@ class CoursesIndex extends Component{
(props) => (<ListPageIndex {...this.props} {...props} {...this.state} {...common}/>)
}
></Route>
{/* 子目录普通作业 */}
<Route path="/classrooms/:coursesId/common_homework/:category_id" exact
render={
(props) => (<ListPageIndex {...this.props} {...props} {...this.state} {...common}/>)
}
></Route>
{/* 分组作业 */}
<Route path="/classrooms/:coursesId/group_homeworks/:category_id" exact
render={
(props) => (<ListPageIndex {...this.props} {...props} {...this.state} {...common}/>)
}
></Route>
{/* 分组作业 */}
<Route path="/classrooms/:coursesId/group_homework/:category_id" exact
render={
(props) => (<ListPageIndex {...this.props} {...props} {...this.state} {...common}/>)
}
></Route>
{/* 普通作业 */}
<Route path="/classrooms/:coursesId/common_homeworks/" strict
@ -697,6 +709,12 @@ class CoursesIndex extends Component{
(props) => (<CommonWork {...this.props} {...props} {...this.state} {...common}/>)
}
></Route>
{/* 子普通作业 */}
<Route path="/classrooms/:coursesId/common_homework/" strict
render={
(props) => (<CommonWork {...this.props} {...props} {...this.state} {...common}/>)
}
></Route>
{/* 分组作业 */}
<Route path="/classrooms/:coursesId/group_homeworks/" strict
@ -705,7 +723,15 @@ class CoursesIndex extends Component{
}
></Route>
{/* 问卷答题 */}
{/* 分组作业 */}
<Route path="/classrooms/:coursesId/group_homework/" strict
render={
(props) => (<GroupWork {...this.props} {...props} {...this.state} {...common}/>)
}
></Route>
{/* 问卷答题 */}
<Route path="/classrooms/:coursesId/polls/:pollId/users/:login"
render={
(props) => (<PollInfo {...this.props} {...props} {...this.state} {...common}/>)

@ -245,6 +245,12 @@ class ListPageIndex extends Component{
(props) => (<CommonWork {...this.props} {...props} {...this.state} />)
}
></Route>
{/* 普通作业 */}
<Route path="/classrooms/:coursesId/common_homework/:category_id"
render={
(props) => (<CommonWork {...this.props} {...props} {...this.state} />)
}
></Route>
{/* 作品列表 */}
<Route path="/classrooms/:coursesId/group_homeworks/:category_id"
@ -252,6 +258,12 @@ class ListPageIndex extends Component{
(props) => (<CommonWork {...this.props} {...props} {...this.state} />)
}
></Route>
{/* 作品列表 */}
<Route path="/classrooms/:coursesId/group_homework/:category_id"
render={
(props) => (<CommonWork {...this.props} {...props} {...this.state} />)
}
></Route>
<Route exact path="/classrooms/:coursesId/boards/:boardId"
render={

@ -222,6 +222,8 @@ class CommonWorkDetailIndex extends Component{
let exportUrl = `/homework_commons/${workId}/works_list.zip?${queryString.stringify(params)}`
let exportResultUrl = `/homework_commons/${workId}/works_list.xlsx?${queryString.stringify(params)}`
document.title=course_name === undefined ? "" : course_name;
console.log(category_id)
return (
<div>
<PublishRightnow ref={this.publishModal} showActionButton={false} {...this.props} checkBoxValues={[workId]}
@ -426,6 +428,12 @@ class CommonWorkDetailIndex extends Component{
}
></Route>
<Route exact path="/classrooms/:coursesId/common_homework/:workId/setting"
render={
(props) => (<CommonWorkSetting {...this.props} {...props} {...this.state} {...commonHandler}/>)
}
></Route>
{/* 作品列表 */}
<Route exact path="/classrooms/:coursesId/common_homeworks/:workId/list"
render={
@ -433,17 +441,35 @@ class CommonWorkDetailIndex extends Component{
}
></Route>
{/* 作品列表 */}
<Route exact path="/classrooms/:coursesId/common_homework/:workId/list"
render={
(props) => (<CommonWorkList ref="commonWorkList" triggerRef={this.bindRef} {...this.props} {...props} {...this.state} {...commonHandler}/>)
}
></Route>
{/* 作业问答 */}
<Route exact path="/classrooms/:coursesId/common_homeworks/:workId/question"
render={
(props) => (<CommonWorkQuestion {...this.props} {...props} {...this.state} {...commonHandler}/>)
}
></Route>
<Route exact path="/classrooms/:coursesId/common_homework/:workId/question"
render={
(props) => (<CommonWorkQuestion {...this.props} {...props} {...this.state} {...commonHandler}/>)
}
></Route>
<Route exact path="/classrooms/:coursesId/common_homeworks/:workId/answer"
render={
(props) => (<CommonWorkAnswer {...this.props} {...props} {...this.state} {...commonHandler}/>)
}
></Route>
<Route exact path="/classrooms/:coursesId/common_homework/:workId/answer"
render={
(props) => (<CommonWorkAnswer {...this.props} {...props} {...this.state} {...commonHandler}/>)
}
></Route>
<Route exact path="/classrooms/:coursesId/group_homeworks/:workId/setting"
@ -451,25 +477,43 @@ class CommonWorkDetailIndex extends Component{
(props) => (<CommonWorkSetting {...this.props} {...props} {...this.state} {...commonHandler}/>)
}
></Route>
<Route exact path="/classrooms/:coursesId/group_homework/:workId/setting"
render={
(props) => (<CommonWorkSetting {...this.props} {...props} {...this.state} {...commonHandler}/>)
}
></Route>
{/* 作品列表 */}
<Route exact path="/classrooms/:coursesId/group_homeworks/:workId/list"
render={
(props) => (<CommonWorkList triggerRef={this.bindRef} {...this.props} {...props} {...this.state} {...commonHandler}/>)
}
></Route>
<Route exact path="/classrooms/:coursesId/group_homework/:workId/list"
render={
(props) => (<CommonWorkList triggerRef={this.bindRef} {...this.props} {...props} {...this.state} {...commonHandler}/>)
}
></Route>
{/* 作业问答 */}
<Route exact path="/classrooms/:coursesId/group_homeworks/:workId/question"
render={
(props) => (<CommonWorkQuestion {...this.props} {...props} {...this.state} {...commonHandler}/>)
}
></Route>
<Route exact path="/classrooms/:coursesId/group_homework/:workId/question"
render={
(props) => (<CommonWorkQuestion {...this.props} {...props} {...this.state} {...commonHandler}/>)
}
></Route>
<Route exact path="/classrooms/:coursesId/group_homeworks/:workId/answer"
render={
(props) => (<CommonWorkAnswer {...this.props} {...props} {...this.state} {...commonHandler}/>)
}
></Route>
<Route exact path="/classrooms/:coursesId/group_homework/:workId/answer"
render={
(props) => (<CommonWorkAnswer {...this.props} {...props} {...this.state} {...commonHandler}/>)
}
></Route>
</Switch>
</div>
</div>

@ -163,7 +163,7 @@ class CommonWorkItem extends Component{
}
<div className="flex1" onClick={() => this.props.onItemClick(Object.assign({}, item, {id: item.homework_id})) }>
<p className="clearfix mb20">
<p className="clearfix">
{canNotLink?<span className={"fl font-16 font-bd mt2 comnonwidth580 pointer color-grey-name"}
title={ canNotLink ? "私有属性,非课堂成员不能访问" : item.name}
>
@ -199,7 +199,13 @@ class CommonWorkItem extends Component{
</li>
} */}
</p>
<p className="color-grey-9 clearfix">
{
item && item.upper_category_name &&
// <ConditionToolTip title={discussMessage.upper_category_name} condition={ discussMessage.upper_category_name.length > 22 }>
<div className="color-grey9 task-hide mt5" title={item.upper_category_name}>所属目录{item.upper_category_name}</div>
// </ConditionToolTip>
}
<p className="color-grey-9 clearfix mt10">
{ item.author && <span className="mr20 fl">{item.author}</span> }
{item.commit_count===undefined?"":<span className="mr20 fl">{item.commit_count} 已交</span>}
{item.uncommit_count===undefined?"":<span className="mr20 fl">{item.uncommit_count} 未交</span>}

@ -68,6 +68,12 @@ class CoursesWorkIndex extends Component{
(props) => (<CommonWorkDetailIndex {...this.props} {...props} {...this.state} />)
}
></Route>
<Route exact path="/classrooms/:coursesId/common_homework/:workId/setting"
render={
(props) => (<CommonWorkDetailIndex {...this.props} {...props} {...this.state} />)
}
></Route>
{/* 作品列表 */}
<Route exact path="/classrooms/:coursesId/common_homeworks/:workId/list"
@ -75,17 +81,36 @@ class CoursesWorkIndex extends Component{
(props) => (<CommonWorkDetailIndex {...this.props} {...props} {...this.state} />)
}
></Route>
{/* 作品列表 */}
<Route exact path="/classrooms/:coursesId/common_homework/:workId/list"
render={
(props) => (<CommonWorkDetailIndex {...this.props} {...props} {...this.state} />)
}
></Route>
{/* 作业问答 */}
<Route exact path="/classrooms/:coursesId/common_homeworks/:workId/question"
render={
(props) => (<CommonWorkDetailIndex {...this.props} {...props} {...this.state} />)
}
></Route>
<Route exact path="/classrooms/:coursesId/common_homework/:workId/question"
render={
(props) => (<CommonWorkDetailIndex {...this.props} {...props} {...this.state} />)
}
></Route>
<Route exact path="/classrooms/:coursesId/common_homeworks/:workId/answer"
render={
(props) => (<CommonWorkDetailIndex {...this.props} {...props} {...this.state} />)
}
></Route>
<Route exact path="/classrooms/:coursesId/common_homework/:workId/answer"
render={
(props) => (<CommonWorkDetailIndex {...this.props} {...props} {...this.state} />)
}
></Route>
{/* 评阅 */}
<Route exact path="/classrooms/:coursesId/common_homeworks/:workId/:studentWorkId/appraise"
@ -93,6 +118,12 @@ class CoursesWorkIndex extends Component{
(props) => (<CommonWorkAppraise {...this.props} {...props} {...this.state} />)
}
></Route>
<Route exact path="/classrooms/:coursesId/common_homework/:workId/:studentWorkId/appraise"
render={
(props) => (<CommonWorkAppraise {...this.props} {...props} {...this.state} />)
}
></Route>
{/* 提交作品 */}
<Route exact path="/classrooms/:coursesId/common_homeworks/:workId/post"
@ -100,11 +131,22 @@ class CoursesWorkIndex extends Component{
(props) => (<CommonWorkPost {...this.props} {...props} {...this.state} />)
}
></Route>
<Route exact path="/classrooms/:coursesId/common_homework/:workId/post"
render={
(props) => (<CommonWorkPost {...this.props} {...props} {...this.state} />)
}
></Route>
<Route exact path="/classrooms/:coursesId/common_homeworks/:workId/:studentWorkId/post_edit"
render={
(props) => (<CommonWorkPost {...this.props} {...props} {...this.state} />)
}
></Route>
<Route exact path="/classrooms/:coursesId/common_homework/:workId/:studentWorkId/post_edit"
render={
(props) => (<CommonWorkPost {...this.props} {...props} {...this.state} />)
}
></Route>
{/* 新建 */}
@ -114,12 +156,23 @@ class CoursesWorkIndex extends Component{
(props) => (<NewWork {...this.props} {...props} {...this.state} />)
}
></Route>
<Route exact path="/classrooms/:coursesId/common_homework/:workId/:pageType"
render={
(props) => (<NewWork {...this.props} {...props} {...this.state} />)
}
></Route>
<Route exact path="/classrooms/:coursesId/common_homeworks/:categroy_id/new"
render={
(props) => (<NewWork {...this.props} {...props} {...this.state} />)
}
></Route>
<Route exact path="/classrooms/:coursesId/common_homework/:categroy_id/new"
render={
(props) => (<NewWork {...this.props} {...props} {...this.state} />)
}
></Route>
{/* 作业列表 */}
@ -128,6 +181,11 @@ class CoursesWorkIndex extends Component{
(props) => (<ListPageIndex {...this.props} {...props} {...this.state} />)
}
></Route>
<Route path="/classrooms/:coursesId/common_homework"
render={
(props) => (<ListPageIndex {...this.props} {...props} {...this.state} />)
}
></Route>
{/* --------------------------------------------------------------------- */}

@ -71,6 +71,11 @@ class CoursesWorkIndex extends Component{
(props) => (<CommonWorkDetailIndex {...this.props} {...props} {...this.state} />)
}
></Route>
<Route exact path="/classrooms/:coursesId/group_homework/:workId/setting"
render={
(props) => (<CommonWorkDetailIndex {...this.props} {...props} {...this.state} />)
}
></Route>
{/* 作品列表 */}
<Route exact path="/classrooms/:coursesId/group_homeworks/:workId/list"
@ -78,6 +83,11 @@ class CoursesWorkIndex extends Component{
(props) => (<CommonWorkDetailIndex {...this.props} {...props} {...this.state} />)
}
></Route>
<Route exact path="/classrooms/:coursesId/group_homework/:workId/list"
render={
(props) => (<CommonWorkDetailIndex {...this.props} {...props} {...this.state} />)
}
></Route>
{/* 作业问答 */}
<Route exact path="/classrooms/:coursesId/group_homeworks/:workId/question"
@ -85,31 +95,56 @@ class CoursesWorkIndex extends Component{
(props) => (<CommonWorkDetailIndex {...this.props} {...props} {...this.state} />)
}
></Route>
<Route exact path="/classrooms/:coursesId/group_homework/:workId/question"
render={
(props) => (<CommonWorkDetailIndex {...this.props} {...props} {...this.state} />)
}
></Route>
{/* 参考答案 */}
<Route exact path="/classrooms/:coursesId/group_homeworks/:workId/answer"
render={
(props) => (<CommonWorkDetailIndex {...this.props} {...props} {...this.state} />)
}
></Route>
<Route exact path="/classrooms/:coursesId/group_homework/:workId/answer"
render={
(props) => (<CommonWorkDetailIndex {...this.props} {...props} {...this.state} />)
}
></Route>
{/* 评阅 */}
<Route exact path="/classrooms/:coursesId/group_homeworks/:workId/:studentWorkId/appraise"
render={
(props) => (<CommonWorkAppraise {...this.props} {...props} {...this.state} />)
}
></Route>
<Route exact path="/classrooms/:coursesId/group_homework/:workId/:studentWorkId/appraise"
render={
(props) => (<CommonWorkAppraise {...this.props} {...props} {...this.state} />)
}
></Route>
<Route exact path="/classrooms/:coursesId/group_homeworks/:workId/post"
render={
(props) => (<CommonWorkPost {...this.props} {...props} {...this.state} />)
}
></Route>
<Route exact path="/classrooms/:coursesId/group_homework/:workId/post"
render={
(props) => (<CommonWorkPost {...this.props} {...props} {...this.state} />)
}
></Route>
<Route exact path="/classrooms/:coursesId/group_homeworks/:workId/:studentWorkId/post_edit"
render={
(props) => (<CommonWorkPost {...this.props} {...props} {...this.state} />)
}
></Route>
<Route exact path="/classrooms/:coursesId/group_homework/:workId/:studentWorkId/post_edit"
render={
(props) => (<CommonWorkPost {...this.props} {...props} {...this.state} />)
}
></Route>
{/* 新建 */}
{/* http://localhost:3007/classrooms/1309/group_homeworks/9299/edit/1 */}
<Route exact path="/classrooms/:coursesId/group_homeworks/:workId/:pageType"
@ -117,11 +152,21 @@ class CoursesWorkIndex extends Component{
(props) => (<NewWork {...this.props} {...props} {...this.state} />)
}
></Route>
<Route exact path="/classrooms/:coursesId/group_homework/:workId/:pageType"
render={
(props) => (<NewWork {...this.props} {...props} {...this.state} />)
}
></Route>
<Route exact path="/classrooms/:coursesId/group_homeworks/:categroy_id/new"
render={
(props) => (<NewWork {...this.props} {...props} {...this.state} />)
}
></Route>
<Route exact path="/classrooms/:coursesId/group_homework/:categroy_id/new"
render={
(props) => (<NewWork {...this.props} {...props} {...this.state} />)
}
></Route>
{/* 作业列表 */}
<Route path="/classrooms/:coursesId/group_homeworks"
@ -129,6 +174,12 @@ class CoursesWorkIndex extends Component{
(props) => (<ListPageIndex {...this.props} {...props} {...this.state} />)
}
></Route>
{/* 作业列表 */}
<Route path="/classrooms/:coursesId/group_homework"
render={
(props) => (<ListPageIndex {...this.props} {...props} {...this.state} />)
}
></Route>
</Switch>

@ -34,8 +34,17 @@ class NewWork extends Component{
}
}
fetchCourseData = (courseId) => {
let newcategory=undefined;
if(this.props.match.path==="/classrooms/:coursesId/common_homework/:workId/:pageType"||this.props.match.path==="/classrooms/:coursesId/group_homework/:workId/:pageType"){
newcategory=this.props.match.params.workId
}
const isGroup = this.props.isGroup()
const url = `/courses/${courseId}/homework_commons/new.json?type=${isGroup ? 3 : 1}`
let url=""
if(newcategory){
url = `/courses/${courseId}/homework_commons/new.json?type=${isGroup ? 3 : 1}&category=${newcategory}`;
}else{
url = `/courses/${courseId}/homework_commons/new.json?type=${isGroup ? 3 : 1}`
}
axios.get(url, {
})
.then((response) => {
@ -54,7 +63,17 @@ class NewWork extends Component{
});
}
fetchWork = (workId) => {
const url = `/homework_commons/${workId}/edit.json`
let newcategory=undefined;
if(this.props.match.path==="/classrooms/:coursesId/common_homework/:workId/:pageType"||this.props.match.path==="/classrooms/:coursesId/group_homework/:workId/:pageType"){
newcategory=this.props.match.params.workId
}
let url=""
if(newcategory){
url = `/homework_commons/${workId}/edit.json?category=${newcategory}`;
}else{
url = `/homework_commons/${workId}/edit.json`
}
axios.get(url, {
})
.then((response) => {
@ -96,6 +115,9 @@ class NewWork extends Component{
doNew = (params) => {
const coursesId = this.props.match.params.coursesId
const newUrl = `/courses/${coursesId}/homework_commons.json`
if(this.props.match.path==="/classrooms/:coursesId/common_homework/:workId/:pageType"||this.props.match.path==="/classrooms/:coursesId/group_homework/:workId/:pageType"){
params.category=this.props.match.params.workId
}
axios.post(newUrl, params)
.then((response) => {

@ -41,10 +41,10 @@ class PublishRightnow extends Component{
this.props.showNotification(`请先选择要立即${showdatatypes? "发布" : "截止"}的作业`)
return;
}
this.fetchCourseGroups();
}
showDialog = (course_groups) => {
const isPublish = this.props.isPublish;
@ -96,7 +96,7 @@ class PublishRightnow extends Component{
}
homeworkstartend=(arg_group_ids,endtime)=>{
debugger
if (this.usingCheckBeforePost && this.props.checkBeforePost) {
const goOn = this.props.checkBeforePost();
if (!goOn) {
@ -104,7 +104,7 @@ class PublishRightnow extends Component{
return;
}
}
debugger
const isPublish = this.props.isPublish;
let group_ids = arg_group_ids
if (this.usingCheckBeforePost) {
@ -112,7 +112,7 @@ class PublishRightnow extends Component{
return item.id
})
}
debugger
if(this.state.course_groups.length>0){
if (this.state.course_groups.length && (!group_ids || group_ids&&group_ids.length == 0)) {
this.props.showNotification('请至少选择一个分班');

@ -130,9 +130,9 @@ class UseBank extends Component{
})
}
onSave = () => {
debugger
const { checkBoxValues } = this.state;
const { object_type } = this.props
const { object_type,category_id } = this.props
if(checkBoxValues.length==0){
this.setState({
isChecked:"请先选择"+engNameMap[object_type]
@ -149,7 +149,8 @@ class UseBank extends Component{
, {
"object_type": object_type,
"bank_id": checkBoxValues,
"course_id": courseId
"course_id": courseId,
"category":category_id
}
)
.then((response) => {

@ -31,7 +31,7 @@ export function RouteHOC(options = {}) {
// common_homework group_homework
// 是否是分组作业
isGroup = () => {
return window.location.pathname.indexOf('group_homeworks') != -1
return window.location.pathname.indexOf('group_homeworks') != -1||window.location.pathname.indexOf('group_homework') != -1
}
getModuleName = (isChinese) => {
const isGroup = this.isGroup()
@ -39,8 +39,29 @@ export function RouteHOC(options = {}) {
let chName = isGroup ? '分组作业' : '普通作业'
return chName;
}
const secondName = isGroup ? 'group_homeworks' : 'common_homeworks'
return secondName;
if(window.location.pathname.indexOf('group_homeworks') != -1){
const secondName ='group_homeworks';
return secondName;
}
if(window.location.pathname.indexOf('group_homework') != -1){
const secondName ='group_homework';
return secondName;
}
if(window.location.pathname.indexOf('common_homeworks') != -1){
const secondName ='common_homeworks';
return secondName;
}
if(window.location.pathname.indexOf('common_homework') != -1){
const secondName ='common_homework';
return secondName;
}
}
getModuleType = () => {
const isGroup = this.isGroup()

@ -6,7 +6,7 @@ import '../css/busyWork.css'
import CommonWorkItem from './CommonWorkItem'
import PublishRightnow from './PublishRightnow'
import ConnectProject from './ConnectProject'
import { WordsBtn, on, off } from 'educoder'
import { WordsBtn, on, off ,trigger} from 'educoder'
import Modals from '../../modals/Modals'
import NoneData from "../coursesPublic/NoneData"
import Titlesearchsection from '../common/titleSearch/TitleSearchSection';
@ -34,7 +34,9 @@ class commonWork extends Component{
totalCount:0,
checkAll:false,
checkBoxValues:[],
isSpin:false
isSpin:false,
category_id:undefined,
course_module:[]
}
}
//输入搜索条件
@ -45,8 +47,8 @@ class commonWork extends Component{
}
//搜索查询
searchStudent=()=>{
let {page,search,order}=this.state;
this.getList(1,search,order);
let {category_id,search,order}=this.state;
this.getList(1,search,order,category_id);
}
openConnectionProject = (work) => {
this.refs['connectProject'].openConnectionProject(work)
@ -54,7 +56,7 @@ class commonWork extends Component{
// 新建
createCommonWork=(type)=>{
this.props.toNewPage(this.props.match.params)
this.props.toNewPage(this.props.match.params)
}
cancelDelClasses=()=>{
@ -69,23 +71,53 @@ class commonWork extends Component{
}
componentDidUpdate(prevProps, prevState) {
if (prevProps.match.path != this.props.match.path) {
this.clearSelection()
this.setState({ selectedKeys: 'all', order: '' }, () => {
this._getList()
})
if (prevProps.coursesidtype != this.props.coursesidtype||prevProps.match.params.category_id!=this.props.match.params.category_id) {
if (this.props.match.path === "/classrooms/:coursesId/common_homeworks/:category_id" || this.props.match.path === "/classrooms/:coursesId/common_homework/:category_id"||
this.props.match.path === "/classrooms/:coursesId/group_homeworks/:category_id" || this.props.match.path === "/classrooms/:coursesId/group_homework/:category_id"
) {
if (this.props.coursesidtype === "node" && this.props.match.path === "/classrooms/:coursesId/common_homeworks/:category_id"||
this.props.coursesidtype === "node" && this.props.match.path === "/classrooms/:coursesId/group_homeworks/:category_id"
) {
this.clearSelection()
this.setState({selectedKeys: 'all', order: ''}, () => {
this._getList()
})
}
if (this.props.coursesidtype === "child" && this.props.match.path === "/classrooms/:coursesId/common_homework/:category_id"||
this.props.coursesidtype === "child" && this.props.match.path === "/classrooms/:coursesId/group_homework/:category_id"
) {
this.clearSelection()
this.setState({selectedKeys: 'all', order: ''}, () => {
this._getList(this.props.match.params.category_id)
})
}
}
}
}
_getList = () => {
_getList = (id) => {
this.setState({
isSpin:true
isSpin:true,
category_id:id
})
let {page,search,order}=this.state;
this.getList(page,search,order);
this.getList(page,search,order,id);
}
componentDidMount(){
this._getList()
if(this.props.match.path === "/classrooms/:coursesId/common_homeworks/:category_id"||this.props.match.path === "/classrooms/:coursesId/group_homeworks/:category_id"){
this._getList()
}
if(this.props.match.path === "/classrooms/:coursesId/common_homework/:category_id"||this.props.match.path === "/classrooms/:coursesId/group_homework/:category_id") {
this._getList(this.props.match.params.category_id)
}
on('updateNavSuccess', this.updateNavSuccess)
}
@ -93,9 +125,14 @@ class commonWork extends Component{
off('updateNavSuccess', this.updateNavSuccess)
}
updateNavSuccess = () => {
this._getList()
if(this.props.match.path === "/classrooms/:coursesId/common_homeworks/:category_id"||this.props.match.path === "/classrooms/:coursesId/group_homeworks/:category_id"){
this._getList()
}
if(this.props.match.path === "/classrooms/:coursesId/common_homework/:category_id"||this.props.match.path === "/classrooms/:coursesId/group_homework/:category_id") {
this._getList(this.props.match.params.category_id)
}
}
useBankSuccess = (checkBoxValues, newWorkIdArray) => {
this.setState({
page:1,
@ -103,12 +140,13 @@ class commonWork extends Component{
}, () => {
this.refs['publishModalRef'].open()
})
let {search, order}=this.state;
this.getList(1, search, order);
let {search, order,category_id}=this.state;
this.getList(1, search, order,category_id);
}
getList=(page,search,order)=>{
getList=(page,search,order,category_id)=>{
this.setState({
isSpin:true
})
@ -121,6 +159,9 @@ class commonWork extends Component{
if(search!=""){
url+="&search="+search;
}
if(category_id){
url+="&category="+category_id;
}
axios.get(encodeURI(url)).then((result)=>{
if(result.status==200){
this.setState({
@ -130,6 +171,32 @@ class commonWork extends Component{
page:page,
...result.data
})
this.getdatas(result.data.main_category_id)
}
}).catch((error)=>{
this.setState({
isSpin:false
})
})
}
getdatas=(main_category_id)=>{
let newcourse_module=[]
let urls=`/course_modules/${main_category_id}.json`
axios.get(encodeURI(urls)).then((result)=>{
if(result.status==200){
newcourse_module.push({name:result.data.course_module.module_name,id:result.data.course_module.id})
if(result.data.course_module.course_second_categories.length>0){
result.data.course_module.course_second_categories.map((item,key)=>{
newcourse_module.push(item)
})
}
this.setState({
course_module:newcourse_module
})
}
}).catch((error)=>{
this.setState({
@ -148,8 +215,8 @@ class commonWork extends Component{
checkBoxValues:[],
checkAll:false
})
let {search}=this.state;
this.getList(1,search,e.key==="all"?"":e.key);
let {search,category_id}=this.state;
this.getList(1,search,e.key==="all"?"":e.key,category_id);
}
onPageChange=(pageNumber)=>{
@ -157,8 +224,8 @@ class commonWork extends Component{
page:pageNumber,
checkBoxValues:[]
})
let {search,order}=this.state;
this.getList(pageNumber,search,order);
let {search,order,category_id}=this.state;
this.getList(pageNumber,search,order,category_id);
}
// 全选和反选
@ -191,7 +258,7 @@ class commonWork extends Component{
}
onWorkDelete = () => {
const { checkBoxValues } = this.state;
const { checkBoxValues,category_id} = this.state;
const len = checkBoxValues.length;
if (len == 0) {
this.props.showNotification('请先选择要删除的作业')
@ -209,13 +276,14 @@ class commonWork extends Component{
axios.post(url, {
homework_ids: checkBoxValues,
all_check: 0,
// category:category_id
// group_ids
}).then((response) => {
if (response.data.status == 0) {
if (response.data.status == 0) {
this.props.showNotification('删除成功')
this.clearSelection()
let {search,order}=this.state;
this.getList(1,search,order);
this.getList(1,search,order,category_id);
this.props.updataleftNavfun()
}
@ -224,14 +292,14 @@ class commonWork extends Component{
})
}
})
}
clearSelection = () => {
this.setState({ checkBoxValues: [], checkAll: false })
}
//
//
onSetPublic = () => {
const { checkBoxValues } = this.state;
const { checkBoxValues,category_id } = this.state;
const len = checkBoxValues.length;
if (len == 0) {
this.props.showNotification('请先选择要公开的作业')
@ -249,10 +317,10 @@ class commonWork extends Component{
homework_ids: checkBoxValues,
all_check: 0
}).then((response) => {
if (response.data.status == 0) {
if (response.data.status == 0) {
this.props.showNotification('设为公开操作成功')
let {search,order, page}=this.state;
this.getList(page,search,order);
this.getList(page,search,order,category_id);
}
}).catch((error) => {
@ -262,8 +330,8 @@ class commonWork extends Component{
})
}
doWhenSuccess = () => {
let {search,order, page}=this.state;
this.getList(page,search,order);
let {search,order, page,category_id}=this.state;
this.getList(page,search,order,category_id);
this.setState({
checkBoxValues:[]
})
@ -279,7 +347,7 @@ class commonWork extends Component{
this.onChangeSelect(checkBoxValues)
}
addToBank = () => {
const { checkBoxValues } = this.state;
const { checkBoxValues,category_id } = this.state;
const len = checkBoxValues.length;
if (len == 0) {
this.props.showNotification('请先选择要加入题库的作业')
@ -291,10 +359,10 @@ class commonWork extends Component{
homework_ids: checkBoxValues,
all_check: 0
}).then((response) => {
if (response.data.status == 0) {
if (response.data.status == 0) {
this.props.showNotification('加入成功')
let {search,order}=this.state;
this.getList(1,search,order);
this.getList(1,search,order,category_id);
}
}).catch((error) => {
@ -302,27 +370,70 @@ class commonWork extends Component{
})
}
connectSuccess = () => {
let {page,search,order}=this.state;
this.getList(page,search,order);
let {page,search,order,category_id}=this.state;
this.getList(page,search,order,category_id);
}
cancelConnectionProject = (work) => {
let workId=this.props.match.params.workId;
let courseId=this.props.match.params.coursesId;
let {page,search,order,category_id}=this.state;
const url = `/homework_commons/${work.homework_id}/student_works/cancel_relate_project.json`
axios.get(url).then((response)=> {
if (response.data.status == 0) {
let {page,search,order}=this.state;
this.getList(page,search,order);
this.getList(page,search,order,category_id);
this.props.showNotification('取消关联成功')
}
}).catch((error)=>{
console.log(error)
})
}
addDir = (id) => {
if(!id){
trigger('addcommon_homeworks', parseInt(this.props.match.params.category_id))
}else{
let data={id:parseInt(id),name:this.state.category_name}
trigger('editcommon_homeworks', data)
}
}
newaddDir = () => {
trigger('addcommon_homeworks', parseInt(this.state.main_category_id))
}
moveTo = (item) => {
const len = this.state.checkBoxValues.length
if (len == 0) {
this.props.showNotification('请先在列表中选择要移动的作业')
return;
}
const checkBoxValues = this.state.checkBoxValues;
const coursesId= this.props.match.params.coursesId;
const category_id=this.state.category_id;
const url = `/courses/${coursesId}/homework_commons/move_to_category.json`
axios.post(url, {
homework_ids: checkBoxValues,
new_category_id: item.id,
category_id:!category_id?undefined:category_id
})
.then((response) => {
if (response.data.status == 0) {
console.log('--- 成功')
this.props.showNotification('作业移动成功')
this.props.updataleftNavfun()
this.setState({
checkBoxValues:[]
})
this.updateNavSuccess()
}
})
.catch(function (error) {
console.log(error);
});
}
render(){
let {
search,
@ -334,11 +445,13 @@ class commonWork extends Component{
totalCount,
checkAll,
checkBoxValues,
course_module,
task_count,
published_count,
unpublished_count,
main_category_name,
category_name,
category_id
}=this.state;
const { coursedata } = this.props;
if (!coursedata) {
@ -350,16 +463,15 @@ class commonWork extends Component{
const isGroup = this.props.isGroup()
const isAdmin = this.props.isAdmin()
const bid = this.props.match.params.category_id
// <CourseLayoutcomponent {...this.props}>
// </CourseLayoutcomponent>
return(
<div>
{/* <div className="edu-back-white">
<p className="clearfix padding30 bor-bottom-greyE">
<span className="font-18 fl color-dark-21">{moduleChineseName}</span>
</p>
<div className="clearfix pl30 pr30">
<div className="fl mt6 task_menu_ul">
@ -374,7 +486,7 @@ class commonWork extends Component{
</Menu>
</div>
<div className="fr mt16 mb16 searchView">
<Search
<Search
value={search}
placeholder="请输入姓名进行搜索"
onInput={this.inputStudent}
@ -387,7 +499,7 @@ class commonWork extends Component{
<Titlesearchsection
title={main_category_name}
title={!category_id?main_category_name:category_name}
searchValue={ search }
// searchtype={this.props.isAdmin||this.props.isStudent ?true:false}
onInputSearchChange={this.inputStudent}
@ -399,6 +511,9 @@ class commonWork extends Component{
{ isAdmin && <li className="fr">
<UseBank {...this.props} {...this.state} object_type={isGroup ? "group" : "normal"} useBankSuccess={this.useBankSuccess}></UseBank>
</li> }
{ isAdmin && <li className="fr mr30">
<WordsBtn style="blue" className="fr" onClick={()=>this.addDir(category_id)}>{!category_id?"新建目录":"目录重命名"}</WordsBtn>
</li> }
</React.Fragment>
}
secondRowBotton={
@ -425,7 +540,7 @@ class commonWork extends Component{
searchPlaceholder={"请输入名称进行搜索"}
showSearchInput={true}
></Titlesearchsection>
<PublishRightnow ref="publishModalRef" showActionButton={true} {...this.props} checkBoxValues={checkBoxValues}
<PublishRightnow ref="publishModalRef" showActionButton={true} {...this.props} checkBoxValues={checkBoxValues}
showActionButton={false}
isPublish={true}
islist={true}
@ -445,14 +560,38 @@ class commonWork extends Component{
<a href="javascript:void(0)" className="color-grey-9" onClick={() => this.refs['publishModalRef'].homeworkstart()}>{ "立即发布" }</a>
</li>
<li className="li_line">
<PublishRightnow showActionButton={true} {...this.props} checkBoxValues={checkBoxValues}
<PublishRightnow showActionButton={true} {...this.props} checkBoxValues={checkBoxValues}
isPublish={false} doWhenSuccess={this.doWhenSuccess} fromListPage={true}></PublishRightnow>
</li>
{ !!course_public && <li className="li_line"><a href="javascript:void(0)" onClick={this.onSetPublic} className="color-grey-9">设为公开</a></li>}
{this.props.user&&this.props.user.main_site===true?<li><a href="javascript:void(0)" className="color-grey-9"
{this.props.user&&this.props.user.main_site===true?<li class="li_line"><a href="javascript:void(0)" className="color-grey-9"
onClick={this.addToBank}
>加入题库</a></li>:""}
<li className="li_line drop_down">
移动到...<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">
<Input placeholder="搜索" value={this.state.dirSearchValue} onChange={(e) => {this.setState({dirSearchValue: e.target.value})}}/>
</p> }
{
course_module && course_module.filter((item)=> {
return item.id != bid && (!this.state.dirSearchValue || item.name.indexOf(this.state.dirSearchValue) != -1)
}).map( (item, index) => {
return <li key={`i_${index}`} onClick={() => this.moveTo(item)} title={item.name}>{item.name}</li>
})
}
{ isAdmin &&
<p className="drop_down_btn">
<a href="javascript:void(0)" className="color-grey-6"
onClick={()=>this.newaddDir()}
>新建目录...</a>
</p>
}
{/* <p className="drop_down_btn"><a href="javascript:void(0)" className="color-grey-6">添加分班...</a></p> */}
</ul>
</li>
</div>
{/* 设为公开 */}
<Modals
@ -483,7 +622,7 @@ class commonWork extends Component{
{
!!totalCount && totalCount > 15 &&
<div className="edu-txt-center pt30 pb10 clearfix">
<div className="edu-txt-center pt30 pb10 clearfix">
<Pagination current={page} showQuickJumper pageSize={15} total={totalCount} onChange={this.onPageChange}></Pagination>
</div>
}

@ -34,7 +34,7 @@ class CompetitionContentsMd extends Component{
}else{
chart_rules.rule_contents.map((items,keys)=>{
debugger
if(parseInt(this.props.tabkey)===items.competition_stage_id){
console.log(items)
this.contentMdRef.current.setValue(items.content);

@ -142,6 +142,8 @@ class Coursesleftnav extends Component{
off('editshixunmainname',this.editshixunmainname)
off('videoAdd',this.addVideo)
off('editVideo',this.editVideo)
off('addcommon_homeworks',this.addcommon_homeworks)
off('editcommon_homeworks',this.editcommon_homeworks)
}
addshixunchild=(e, data)=>{
this.Navmodalnames(e,1,"shixun_homework",data);
@ -149,6 +151,12 @@ class Coursesleftnav extends Component{
editshixunchild=(e, data)=>{
this.Navmodalnames(e,4,"editSecondname",data.id,data.name);
}
addcommon_homeworks=(e, data)=>{
this.Navmodalnames(e,1,"common_homework",data);
}
editcommon_homeworks=(e, data)=>{
this.Navmodalnames(e,4,"editSecondname",data.id,data.name);
}
editshixunmainname=(e, data)=>{
this.Navmodalnames(e,3,"editname",data.id,data.name);
}
@ -196,7 +204,8 @@ class Coursesleftnav extends Component{
on('editshixunmainname',this.editshixunmainname);
on('videoAdd',this.addVideo);
on('editVideo',this.editVideo)
on('addcommon_homeworks',this.addcommon_homeworks)
on('editcommon_homeworks',this.editcommon_homeworks)
let courstype=this.props.match.url;
@ -537,7 +546,7 @@ class Coursesleftnav extends Component{
}
saveNavmodapost=(url,value,positiontype,coursesId,type)=>{
console.log(positiontype)
axios.post(url,
{name:value}).then((result)=>{
if(result!=undefined){
@ -548,6 +557,23 @@ class Coursesleftnav extends Component{
description:result.data.message
});
if(positiontype==="common_homeworks"||positiontype==="common_homework"||positiontype==="group_homeworks"||positiontype==="group_homework"){
if(type===true){
this.updasaveNavmoda()
trigger('updateNavSuccess')
}else{
this.updasaveNavmoda()
if(positiontype==="common_homeworks"){
this.props.history.push(`/classrooms/${coursesId}/common_homework/${result.data.category_id}`);
}
if(positiontype==="group_homeworks"){
this.props.history.push(`/classrooms/${coursesId}/group_homework/${result.data.category_id}`);
}
}
return
}
if(positiontype==="shixun_homeworks"||positiontype==="shixun_homework"){
if(type===true){
this.updasaveNavmoda()
@ -557,6 +583,7 @@ class Coursesleftnav extends Component{
this.props.history.push(`/classrooms/${coursesId}/shixun_homework/${result.data.category_id}`);
}
return
}
if(positiontype==="files"||positiontype==="file"){
@ -569,22 +596,25 @@ class Coursesleftnav extends Component{
this.updasaveNavmoda()
this.props.history.push(`/classrooms/${coursesId}/file/${result.data.category_id}`);
}
return
}
if(positiontype==="boards"){
this.updasaveNavmoda()
trigger('updateNavSuccess')
this.props.history.push(`/classrooms/${coursesId}/boards/${result.data.category_id}`);
return
}
if(positiontype!="course_groups"&&positiontype!="shixun_homeworks"&&positiontype!="shixun_homework"){
this.updasaveNavmoda()
return
}
if(positiontype==="course_groups"){
this.props.updataleftNavfun();
this.props.history.push(`/classrooms/${coursesId}/course_groups/${result.data.group_id}`);
return
}
}
@ -864,6 +894,10 @@ class Coursesleftnav extends Component{
{/*公告栏*/}
{/*作业*/}
{item.type==="shixun_homework"?<div onClick={e=>this.Navmodalnames(e,1,"shixun_homework",item.id)}>新建目录</div>:""}
{/* 普通作业 */}
{item.type==="common_homework"?<div onClick={e=>this.Navmodalnames(e,1,"common_homeworks",item.id)}>新建目录</div>:""}
{/*/!* 分组作业 *!/*/}
{item.type==="group_homework"?<div onClick={e=>this.Navmodalnames(e,1,"group_homeworks",item.id)}>新建目录</div>:""}
{/*资源*/}
{item.type==="attachment"?<div onClick={e=>this.Navmodalnames(e,1,"attachment",item.id)}>新建目录</div>:""}
{/* 视频 */}
@ -894,8 +928,8 @@ class Coursesleftnav extends Component{
let {twosandiantypes,twosandiantypenum}=this.state;
return (item.type==="graduation"?"": <div className={item.type===twosandiantypes&&twosandiantypenum===index?"sandianboxs":"sandianboxs"} >
{/*作业/资源*/}
{item.type==="shixun_homework"||item.type==="attachment"||item.type==="graduation"?<div onClick={e=>this.Navmodalnames(e,4,"editSecondname",iem.category_id,iem.category_name)}>重命名</div>:""}
{item.type==="shixun_homework"||item.type==="attachment"?<div onClick={e=>this.deleteSecondary(e,1,iem.category_id)}>删除</div>:""}
{item.type==="shixun_homework"||item.type==="attachment"||item.type==="graduation"||item.type==="common_homework"||item.type==="group_homework"?<div onClick={e=>this.Navmodalnames(e,4,"editSecondname",iem.category_id,iem.category_name)}>重命名</div>:""}
{item.type==="shixun_homework"||item.type==="attachment"||item.type==="common_homework"||item.type==="group_homework"?<div onClick={e=>this.deleteSecondary(e,1,iem.category_id)}>删除</div>:""}
{/*分班*/}
{item.type==="course_group"?<div onClick={e=>this.Navmodalnames(e,5,"editSecondname",iem.category_id,iem.category_name)}>重命名</div>:""}
{item.type==="course_group"?<div onClick={e=>this.deleteSecondary(e,2,iem.category_id)}>删除</div>:""}

@ -156,7 +156,7 @@ class Bullsubdirectory extends Component{
handleSubmit=(e) => {
e.preventDefault();
this.props.form.validateFields((err, values) => {
debugger
if (!err) {
console.log(values.description);
if(values.eduintits === undefined|| values.eduintits === "" || values.eduintits ===null){

@ -20,7 +20,7 @@ let id = 0;
/**
target_id
position
position
target_weight
target_contents
@ -29,7 +29,7 @@ let id = 0;
subitem_contents
*/
const data =
const data =
[{"position":0,"target_weight":0.02,"target_contents":"12","standard_grade":2,"subitem_id":"65"},{"position":3,"target_id":"0","target_weight":0.1,"target_contents":"理解数据管理技术和数据库技术的发展,区分不同数据模型的作用和特点,描述数据库系统的类型、结构、数据独立性。","standard_grade":60,"subitem_id":"66"},{"position":4,"target_weight":1,"target_contents":"22","standard_grade":33,"subitem_id":"66"},{"position":11,"target_id":"1","target_weight":0.1,"target_contents":"理解数据管理技术和数据库技术的发展,区分不同数据模型的作用和特点,描述数据库系统的类型、结构、数据独立性。","standard_grade":61,"subitem_id":"65"}]
;
let _data = [
@ -70,10 +70,10 @@ class EditableCourseSupportSetting extends Component {
let fValues = this.props.form.getFieldsValue();
if (
// fValues.standard_grade[k] && fValues.standard_grade[k] != 75
// || fValues.subitem_id[k]
// ||
fValues.target_contents[k]
// || fValues.target_weight[k]
// || fValues.subitem_id[k]
// ||
fValues.target_contents[k]
// || fValues.target_weight[k]
) {
this.props.showModal('提示', '确定要删除吗?', () => {
this.remove(k)
@ -129,7 +129,7 @@ class EditableCourseSupportSetting extends Component {
const subitem_id = form.getFieldValue('subitem_id');
keys.splice(index_arg, 0, newKey);
// position2Target_idMap
// position2Target_idMap
// {1:2, 2:3, 3:4, 4:6 } --> {1:2, 2:3, 3:7, 4:4, 5:6 }
// 更新key/position 映射到target_id的map
// 两次revers用这个结构达到给position加1的效果
@ -142,13 +142,13 @@ class EditableCourseSupportSetting extends Component {
reverseMap[target_id] = parseInt(reverseMap[target_id]) + 1;
keys[i] = keys[i] + 1;
}
for (let i = 0 ; i < keys.length - 1; i++) {
for (let i = 0 ; i < keys.length - 1; i++) {
if (keys[i] == keys[i + 1]) {
debugger;
}
}
this.position2Target_idMap = this._reverseMap(reverseMap);
target_weight.splice(newKey, 0, undefined);
target_contents.splice(newKey, 0, undefined);
@ -179,7 +179,7 @@ class EditableCourseSupportSetting extends Component {
const keys = form.getFieldValue('keys');
let nextKeys ;
let newKey = k + 1;
const newKeyIndex = keys.indexOf(newKey)
if (newKeyIndex != -1) {
// 新key存在将新key位置及以后的row后移直到找到一个之后的空位置
@ -213,7 +213,7 @@ class EditableCourseSupportSetting extends Component {
data.push({})
}
for (var valKey in values) {
let dataIndex = 0
values[valKey].forEach( (item,index) => {
let _val = values[valKey][index];
@ -228,7 +228,7 @@ class EditableCourseSupportSetting extends Component {
}
console.log('Received values of form: ', values, data);
let totalWeight = 0;
values.target_weight.forEach(item => {
if (item) {
@ -264,8 +264,8 @@ class EditableCourseSupportSetting extends Component {
}
}
}
});
}
@ -292,7 +292,7 @@ class EditableCourseSupportSetting extends Component {
subitem_id[item.position] = item.subitem_id ? (item.subitem_id).toString() : item.subitem_id;
this.position2Target_idMap[item.position] = item.target_id
})
})
form.setFieldsValue({
keys
});
@ -308,9 +308,9 @@ class EditableCourseSupportSetting extends Component {
// this.forceUpdate()
}, 3000)
}
render() {
const { getFieldDecorator, getFieldValue } = this.props.form;
@ -397,7 +397,7 @@ class EditableCourseSupportSetting extends Component {
message: "请先选择毕业要求指标点",
}],
})(
<Select
<Select
// mode="multiple"
// dropdownMatchSelectWidth={ false }
style={{ width: '100%', marginRight: 8 }}
@ -407,32 +407,32 @@ class EditableCourseSupportSetting extends Component {
{item.index} : {item.subitem_contents}
</Option> )
}) }
</Select>
)}
</span>
<span className="column-1 edu-txt-right">
{ !addOrDeleting && <a href="javascript:void(0)"
{ !addOrDeleting && <a href="javascript:void(0)"
onClick={() => { this.onRemove(k) }}
className="color-grey-c mr15" data-tip-down="删除">
<i className="iconfont icon-shanchu font-15"></i>
</a> }
{ !addOrDeleting && <a href="javascript:void(0)"
{ !addOrDeleting && <a href="javascript:void(0)"
onClick={() => { this.add(k, index + 1) }}
className="color-green show-FillTable"
className="color-green show-FillTable"
data-tip-down="添加">
<i className="iconfont icon-tianjiafangda"
></i>
</a> }
</span>
</Form.Item>
</li>
));
return (
<Form onSubmit={this.handleSubmit}>
<div className="ListTableLine" id="show-Target-table">
<p className="clearfix">
@ -443,15 +443,15 @@ class EditableCourseSupportSetting extends Component {
<span className="column-3">对应毕业要求指标点</span>
{ !addOrDeleting && <span className="column-1 edu-txt-right"
>
<a href="javascript:void(0)" className="color-green show-FillTable"
<a href="javascript:void(0)" className="color-green show-FillTable"
onClick={ () => { this.add(-1, 0) }} data-tip-down="添加">
<i className="iconfont icon-tianjiafangda"></i></a>
</span> }
</p>
</p>
{formItems}
</div>
{/* <Form.Item {...formItemLayoutWithOutLabel}>
<Button type="dashed" onClick={ () => { this.add(keys.length === 0 ? -1 : keys[keys.length - 1], keys.length - 1) }}
<Button type="dashed" onClick={ () => { this.add(keys.length === 0 ? -1 : keys[keys.length - 1], keys.length - 1) }}
style={{ width: '60%' }}>
<Icon type="plus" /> Add field
</Button>

@ -123,7 +123,7 @@ class EcStudentList extends Component {
console.log(error);
});
}
windowsgoblack=()=>{
window.history.go(-1)
@ -267,17 +267,17 @@ class EcStudentList extends Component {
Modallist: '确定删除这些学生吗?',
Modallisttype:true,
Modallisttypess:1
})
})
}else{
this.setState({
Modallist: '请选择学生!',
Modallisttype:true
})
})
}
};
//删除学生
deletelistbthenters=()=>{
debugger
let {Myschoolstudents,studentall} =this.state;
let major_id=this.props.match.params.majorId;
let year_id=this.props.match.params.yearId;

@ -668,7 +668,7 @@ class MemoDetail extends Component {
// --------------------------------------------------------------------------------------------帖子獎勵 END
showCommentInput = () => {
debugger
if (window.__useKindEditor === true) {
this.refs.editor.showEditor();
} else {

@ -469,7 +469,7 @@ class LoginDialog extends Component {
autologin:isGoingValue
}
).then((response) => {
debugger;
if(response===undefined){
return
}

@ -34,6 +34,9 @@ render() {
}
.color848282{
color:#848282;
}
.task-btn{
color: #fff !important;
}
`
}
@ -50,7 +53,7 @@ render() {
</div>
:
<div className="clearfix mt30 edu-txt-center">
<a className="task-btn mr30" onClick={this.props.modalCancel}>取消</a>
<a className="task-btn mr30" onClick={this.props.modalCancel}>{this.props.cancelText || '取消'}</a>
<a className="task-btn task-btn-orange" onClick={this.props.modalSave}>{this.props.okText || '确定'}</a>
</div>
}

@ -95,7 +95,7 @@ class SendTopics extends Component{
}catch (e) {
}
debugger
if(this.props.mysendall===true){
//详情页面跳过来的
try {
@ -119,7 +119,7 @@ debugger
}
}else{
//外部多个列表页跳过来的
debugger
try {
var rurls="";
if(this.props.category==="normal"){

@ -32,7 +32,10 @@ class DetailTop extends Component{
getappointmenttype:false,
openpathss:false,
cancel_publics:false,
cancel_has_publics:false
cancel_has_publics:false,
applyissuePaths:false,
cancelText:undefined,
okText:undefined
}
}
componentDidMount(){
@ -110,21 +113,27 @@ class DetailTop extends Component{
applyissuePath=()=>{
this.setState({
loadtype:true,
Modalstype: true,
Modalstopval:`课程发布后即可发送课堂使用`,
// modalsMidval:"有人公开可见,若仅本人教学使用则无需申请公开,直接发",
// Modalsbottomval:"送到课堂即可。",
applyissuePaths:true
})
}
showapplyissuePath=()=>{
let pathid=this.props.match.params.pathId;
let url ="/paths/"+pathid+"/publish.json";
axios.post(url).then((result)=>{
if(result.status===200){
if(result.data.status===0){
this.setState({
loadtype:true,
Modalstype: true,
Modalstopval: ` 课程需经过平台审核方可公开使用,公开的课程将对平台所`,
modalsMidval:"有人公开可见。若仅本人教学使用则无需申请公开, 直接发",
Modalsbottomval:"送到课堂即可.",
cardsModalsavetype: true,
})
this.props.showNotification(result.data.message)
this.props.getlistdatas();
this.cardsModalcancel()
}else if(result.data.status===1){
// window.location.reload();
}
@ -132,9 +141,7 @@ class DetailTop extends Component{
}).catch((error)=>{
console.log(error);
})
}
}
postcancelissuePath=()=>{
let pathId=this.props.match.params.pathId;
let url ="/paths/"+pathId+"/cancel_publish.json";
@ -180,12 +187,15 @@ class DetailTop extends Component{
modalsMidval:'',
modalstyles:'',
cardsModalsavetype:false,
applyissuePath:false,
applyissuePaths:false,
openpathss:false,
cancel_publics:false,
cancel_has_publics:false,
Modalstopval:``,
cancelText:undefined,
okText:undefined
})
}
cardsModalsave=()=>{
@ -369,13 +379,13 @@ class DetailTop extends Component{
openpaths=()=>{
this.setState({
loadtype:true,
Modalstype: true,
openpathss:true,
Modalstopval: "公开申请已提交,请等待管理员的审核",
modalsMidval:"• 我们将在1-2个工作日内完成审核",
Loadtype:true,
modalstyles:"848282"
Modalstopval: "公开课程需经过平台标准化审核审核周期为1-2天公开",
modalsMidval:"的课程将对平台所有人可见。若仅本人教学使用则无需",
Modalsbottomval:"申请公开,直接发送到课堂即可",
cancelText:"取消申请",
okText:"确定申请"
})
}
@ -433,7 +443,7 @@ class DetailTop extends Component{
render(){
let{detailInfoList}=this.props;
let{Modalstype,Modalstopval,cardsModalcancel,putappointmenttype,Modalsbottomval,cardsModalsavetype,loadtype,getappointmenttype,openpathss,cancel_publics,cancel_has_publics}=this.state;
let{Modalstype,Modalstopval,cardsModalcancel,putappointmenttype,Modalsbottomval,cardsModalsavetype,loadtype,getappointmenttype,openpathss,cancel_publics,cancel_has_publics,applyissuePaths}=this.state;
const radioStyle = {
display: 'block',
height: '30px',
@ -470,8 +480,10 @@ class DetailTop extends Component{
modalsTopval={Modalstopval}
modalsBottomval={Modalsbottomval}
modalCancel={cardsModalcancel}
modalSave={loadtype===true&&openpathss===false?()=>this.cardsModalcancel():cardsModalsavetype===true?()=>this.postcancelissuePath():openpathss===true?()=>this.postopenpaths():cancel_publics===true?()=>this.postcancel_public():cancel_has_publics===true?()=>this.postcancel_has_public():putappointmenttype===true?()=>this.getappointment():()=>this.cardsModalsave()}
modalSave={applyissuePaths===true?()=>this.showapplyissuePath():loadtype===true&&openpathss===false?()=>this.cardsModalcancel():cardsModalsavetype===true?()=>this.postcancelissuePath():openpathss===true?()=>this.postopenpaths():cancel_publics===true?()=>this.postcancel_public():cancel_has_publics===true?()=>this.postcancel_has_public():putappointmenttype===true?()=>this.getappointment():()=>this.cardsModalsave()}
loadtype={loadtype}
cancelText={this.state.cancelText}
okText={this.state.okText}
modalsMidval={this.state.modalsMidval}
modalstyles={this.state.modalstyles}
>
@ -605,8 +617,8 @@ class DetailTop extends Component{
{
detailInfoList.publish_status===0&&detailInfoList.allow_add_member===true?
<a className="fr font-18 color-white kaike mr20 kkbths"
style={{'width':'65px'}}
onClick={this.applyissuePath}>发布</a>:""
style={{'width':'95px'}}
onClick={this.applyissuePath}>申请发布</a>:""
}

@ -16,7 +16,7 @@ class PackageIndexNEIBanner extends Component {
}
onChange=(current)=>{
debugger
console.log('onChange:', current);
this.setState({ current });
};

@ -63,7 +63,7 @@ class PaperDeletModel extends Component {
}
NewknTypedeltyoedels=()=>{
debugger
if(this.state.newkntypeinput.length===0){
this.setState({
errorestit:'请输入知识点',

@ -475,7 +475,7 @@ class Comthetestpaperst extends Component {
//////console.log('Clicked! But prevent default.');
}
deletesobject = (item, index) => {
debugger
var tmp = this.state.Knowpoints;
for (var i = 0; i < tmp.length; i++) {
if (i ===index) {

@ -123,7 +123,7 @@ class Paperreview_item extends Component {
}
axios.post(url, data)
.then((result) => {
debugger
if (result.data.status == 0) {
// this.props.showNotification(`拖动成功`);
this.props.getdata();

@ -106,7 +106,7 @@ class Audit_situationComponent extends Component {
}
showModal = (id,status) => {
debugger
this.setState({
visible: true,
editid:id,

@ -60,7 +60,8 @@ class TPMBanner extends Component {
openshowpublictype:false,
Radiovalue:1,
TextAreaintshow:false,
cancelText:undefined,
okText:undefined,
}
}
@ -434,6 +435,9 @@ class TPMBanner extends Component {
modalsMidval:undefined,
ModalsBottomval:"",
modalstyles:"",
cancelText:undefined,
okText:undefined,
Loadtype:false,
})
}
ModalSave = () => {
@ -441,7 +445,10 @@ class TPMBanner extends Component {
let url = "/shixuns/" + id + "/cancel_publish.json";
axios.get(url).then((response) => {
this.props.showSnackbar(response.data.message);
window.location.reload()
// window.location.reload()
this.ModalCancel()
this.props.getcomponentdidmount()
}).catch((error) => {
console.log(error)
});
@ -461,16 +468,21 @@ class TPMBanner extends Component {
ModalSaveopenpublic= () => {
this.setState({
Modalstype: true,
Modalstopval: "公开申请已提交,请等待管理员的审核",
modalsMidval:"• 我们将在1-2个工作日内完成审核",
ModalCancel: this.eopenpublicupdatadata,
Modalstopval:"公开实训需经过平台标准化审核审核周期为1-2天",
modalsMidval:"公开的实训将对平台所有人可见。若仅本人教学使用",
ModalsBottomval:"则无需申请公开, 直接发送到课堂即可。",
cancelText:"取消申请",
okText:"确定申请",
ModalCancel: this.ModalCancel,
ModalSave: this.eopenpublicupdatadata,
Loadtype:true,
modalstyles:"848282"
// Loadtype:true,
// modalstyles:"848282"
})
}
eopenpublicupdatadata=()=>{
window.location.reload()
// window.location.reload()
this.ModalCancel()
this.props.getcomponentdidmount()
}
openpublic=()=>{
let id = this.props.match.params.shixunId;
@ -490,7 +502,9 @@ class TPMBanner extends Component {
let url = `/shixuns/${id}/cancel_apply_public.json`;
axios.get(url).then((response) => {
if(response.data.status===0){
window.location.reload()
// window.location.reload()
this.ModalCancel()
this.props.getcomponentdidmount()
}
}).catch((error) => {
console.log(error)
@ -522,7 +536,10 @@ class TPMBanner extends Component {
evaluation_set_position = response.data.evaluation_set_position
}
if(response.data.status===0){
window.location.reload()
// window.location.reload()
this.applyreleaseopen()
// this.ModalCancel()
this.props.getcomponentdidmount()
}else{
this.setState({
Issuevisible: true,
@ -536,13 +553,23 @@ class TPMBanner extends Component {
console.log(error)
});
};
applyreleaseopen = () => {
this.setState({
Modalstype: true,
Loadtype:true,
Modalstopval: "实训发布后即可发送课堂使用",
ModalSave: this.ModalCancel,
})
}
hiddenIssuevisible = (val) => {
this.setState({
Issuevisible: false
})
if (val === 0 || val === 1) {
window.location.reload()
// window.location.reload()
this.ModalCancel()
this.props.getcomponentdidmount()
}
}
@ -803,7 +830,9 @@ class TPMBanner extends Component {
hidestartshixunsreplacevalue,
Forkvisibletype,
AccountProfiletype,
isIE
isIE,
cancelText,
okText,
} = this.state;
let {shixunsDetails, shixunId, star_info, star_infos} = this.props;
let challengeBtnTipText = '';
@ -900,6 +929,8 @@ class TPMBanner extends Component {
modalsMidval={this.state.modalsMidval}
loadtype={this.state.Loadtype}
modalstyles={this.state.modalstyles}
cancelText={this.state.cancelText}
okText={this.state.okText}
/> : ""}
<div className="educontent clearfix">

@ -412,6 +412,7 @@ class TPMIndex extends Component {
{...this.props}
{...this.state}
is_jupyter={this.state. is_jupyter}
getcomponentdidmount={()=>this.getcomponentdidmount()}
></TPMBanner>
}

@ -97,7 +97,7 @@ class Newshixuns extends Component {
})
const mdContnet = this.contentMdRef.current.getValue().trim();
this.props.form.validateFieldsAndScroll((err, values) => {
debugger
if (!err) {
console.log('Received values of form: ', values);

@ -33,7 +33,7 @@ class Challenges extends Component {
isSpin:false,
boxoffsetHeigh:0,
opentitletype:true,
isopentitletype:"Less",
isopentitletype:"Less"
}
}
@ -357,6 +357,50 @@ class Challenges extends Component {
})
}
// 开启挑战
beginChallenge=(url)=>{
if (this.props.checkIfLogin() === false) {
this.props.showLoginDialog()
return;
}
if (this.props.checkIfProfileCompleted() === false) {
this.setState({
AccountProfiletype: true
})
return;
}
this.setState({
startbtns:true
})
if(url.indexOf(".json")>-1){
axios.get(url).then((response) => {
if (response.data.status === -2) {
this.setState({
startbtns:false,
shixunsreplace:true,
hidestartshixunsreplacevalue:response.data.message+".json"
})
} else if (response.data.status === -1) {
this.setState({
startbtns: false
})
}else if(response.data.status===-3){
this.setState({
shixunsmessage:response.data.message,
startshixunCombattype:true,
startbtns:false
})
} else {
window.location.href = "/tasks/" + response.data.game_identifier;
}
}).catch((error) => {
});
}else{
window.location.href=url;
}
}
render() {
let { ChallengesDataList, startbtns, sumidtype ,startshixunCombattype,shixunsreplace,shixunsmessage,hidestartshixunsreplacevalue,operationstrue,AccountProfiletype} = this.state;
let { loadingContent } = this.props;
@ -700,49 +744,60 @@ class Challenges extends Component {
</span>
</div>
<div className="challengtes_Item">
<div className="flex1">
<div className="clearfix mb5">
{/*onClick={() => this.EditTraining(this.props.identity, item.challenge_id, "/editquestion")}*/}
{this.props.identity<5?
item.st === 1 ?
<div className="font-16 color05101a fonthiddens">{item.name}</div>
:
<div className="font-16 color05101a fonthiddens">{item.name}</div>:<div
// onClick={() => this.startshixunCombat(this.props.identity, item.challenge_id, "/editcheckpoint")}
className="font-16 color05101a fonthiddens">{item.name}</div>
}
{/* onClick={() => this.EditTraining(this.props.identity, item.challenge_id, "/editcheckpoint")}*/}
</div>
<div className="clearfix">
<style>
{
`
.task-colspan {
min-width: 18% !important;
}
`
}
</style>
<span className="task-colspan"><span className={"shixunbingbaocun12"}>正在挑战 </span><span className={"shixunbingbaocun33312"}>{item.playing_count}</span></span>
<span className="task-colspan"><span className={"shixunbingbaocun12"}>完成挑战 </span><span className={"shixunbingbaocun33312"}>{item.passed_count}</span></span>
<span className="task-colspan"><span className={"shixunbingbaocun12"}>可获经验 </span><span className={"shixunbingbaocun33312"}>{item.score}</span></span>
<div className="clearfix mb5">
{/*onClick={() => this.EditTraining(this.props.identity, item.challenge_id, "/editquestion")}*/}
{this.props.identity<5?
item.st === 1 ?
<div className="font-16 color05101a fonthiddens">{item.name}</div>
:
<div className="font-16 color05101a fonthiddens">{item.name}</div>:<div
// onClick={() => this.startshixunCombat(this.props.identity, item.challenge_id, "/editcheckpoint")}
className="font-16 color05101a fonthiddens">{item.name}</div>
</div>
</div>
{
item.open_game ?
<a onClick={()=>this.beginChallenge(item.open_game)} className="challengeBtn blue">开启挑战</a>
:
<span className="challengeBtn">开启挑战</span>
}
{/* onClick={() => this.EditTraining(this.props.identity, item.challenge_id, "/editcheckpoint")}*/}
<Modal
keyboard={false}
visible={startbtns}
closable={false}
footer={null}
className="startbtnModal"
>
<Spin size="large" />
</Modal>
</div>
<div className="clearfix">
<style>
{
`
.task-colspan {
min-width: 18% !important;
}
`
}
</style>
<span className="task-colspan"><span className={"shixunbingbaocun12"}>正在挑战 </span><span className={"shixunbingbaocun33312"}>{item.playing_count}</span></span>
<span className="task-colspan"><span className={"shixunbingbaocun12"}>完成挑战 </span><span className={"shixunbingbaocun33312"}>{item.passed_count}</span></span>
<span className="task-colspan"><span className={"shixunbingbaocun12"}>可获经验 </span><span className={"shixunbingbaocun33312"}>{item.score}</span></span>
</div>
</div>
</div>
)
})}
</div>
<Modal
keyboard={false}
visible={startbtns}
closable={false}
footer={null}
className="startbtnModal"
centered={true}
>
<Spin size="large" />
</Modal>
<Modal
keyboard={false}
title="提示"
@ -765,7 +820,6 @@ class Challenges extends Component {
</div>
</Modal>
<Modal
keyboard={false}
title="提示"

@ -262,4 +262,28 @@
.boreee{
border-bottom: 1px solid #F4F4F4;
}
.challengtes_Item{
display: flex;
justify-content: space-between;
align-items: center;
}
.flex1{
flex: 1;
width: 0;
}
.challengeBtn{
height:40px;
line-height: 38px;
padding:0px 27px;
color: #C0C4CC!important;
font-size: 16px;
border:1px solid rgba(235,235,235,1);
border-radius:4px;
margin-left: 15px;
}
.challengeBtn.blue{
background: #F2F8FE;
border:1px solid rgba(64,158,255,1);
color: #409EFF!important;
}

@ -94,7 +94,7 @@ class LoginRegisterComponent extends Component {
}
//倒计时
getverificationcode = () => {
debugger
if(this.state.login === undefined || this.state.login.length===0){
this.openNotification("请输入手机号或邮箱");
return;

@ -352,7 +352,7 @@ class LoginRegisterComponent extends Component {
login: this.state.login,
password: this.state.password,
}).then((response) => {
debugger
if (response === undefined) {
return
}

@ -110,7 +110,7 @@ class NewGtaskForms extends Component{
}
handleSubmit = () => {
console.log(this.props)
let {contentFileList,min_num,max_num,base_on_project}=this.state;
let {data}=this.props;
let task_type=data.task_type

Loading…
Cancel
Save