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

dev_hs
杨树林 6 years ago
commit 48774b67c6

@ -707,12 +707,12 @@ class CoursesController < ApplicationController
if order == 1
# REDO:Extension
@students = @students.includes(user: :user_extension).order("user_extensions.student_id, course_members.id")
@students = @students.includes(user: :user_extension).order("user_extensions.student_id, users.login")
elsif order == 2
@students = @students.includes(:course_group).order("course_groups.position, course_members.id")
@students = @students.includes(:course_group).order("course_groups.position, users.login")
else
# REDO:Extension
@students = @students.includes(user: :user_extension).order("user_extensions.student_id, course_members.id")
@students = @students.includes(user: :user_extension).order("user_extensions.student_id, users.login")
end
if course_group_id.present?

@ -322,6 +322,8 @@ class GraduationTasksController < ApplicationController
def publish_task
tip_exception("缺少截止时间参数") if params[:end_time].blank?
tip_exception("截止时间必须晚于当前时间") if params[:end_time] <= strf_time(Time.now)
tip_exception("截止时间不能晚于课堂结束时间(#{@course.end_date.end_of_day.strftime("%Y-%m-%d %H:%M")}") if
@course.end_date.present? && params[:end_time] > @course.end_date.end_of_day
ActiveRecord::Base.transaction do
begin
@ -397,8 +399,8 @@ class GraduationTasksController < ApplicationController
tip_exception("发布时间不能早于当前时间") if params[:publish_time] <= Time.now.strftime("%Y-%m-%d %H:%M:%S")
tip_exception("截止时间不能早于当前时间") if params[:end_time] <= Time.now.strftime("%Y-%m-%d %H:%M:%S")
tip_exception("截止时间不能早于发布时间") if params[:publish_time] > params[:end_time]
tip_exception("截止时间不能早于课堂结束时间") if @course.end_date.present? &&
params[:end_time] > @course.end_date.end_of_day
tip_exception("截止时间不能晚于课堂结束时间(#{@course.end_date.end_of_day.strftime("%Y-%m-%d %H:%M")}") if
@course.end_date.present? && params[:end_time] > @course.end_date.end_of_day
@task.publish_time = params[:publish_time]
@task.end_time = params[:end_time]
@ -410,7 +412,8 @@ class GraduationTasksController < ApplicationController
elsif @task.status < 2
tip_exception("截止时间不能为空") if params[:end_time].blank?
tip_exception("截止时间不能早于当前时间") if params[:end_time] <= Time.now.strftime("%Y-%m-%d %H:%M:%S")
tip_exception("截止时间不能晚于课堂结束时间(#{@course.end_date.end_of_day.strftime("%Y-%m-%d %H:%M")}") if @course.end_date.present? && params[:end_time] > @course.end_date.end_of_day
tip_exception("截止时间不能晚于课堂结束时间(#{@course.end_date.end_of_day.strftime("%Y-%m-%d %H:%M")}") if
@course.end_date.present? && params[:end_time] > @course.end_date.end_of_day
@task.end_time = params[:end_time]
end
@ -421,8 +424,8 @@ class GraduationTasksController < ApplicationController
if params[:allow_late].to_i == 1
tip_exception("补交结束时间不能为空") if params[:late_time].blank?
tip_exception("补交结束时间不能早于截止时间") if params[:late_time] <= @task.end_time
tip_exception("补交结束时间不能晚于课堂结束时间(#{@course.end_date.end_of_day.strftime("%Y-%m-%d %H:%M")}") if @course.end_date.present? && params[:late_time] >
@course.end_date.end_of_day
tip_exception("补交结束时间不能晚于课堂结束时间(#{@course.end_date.end_of_day.strftime("%Y-%m-%d %H:%M")}") if
@course.end_date.present? && params[:late_time] > @course.end_date.end_of_day
tip_exception("迟交扣分应为正整数") if params[:late_penalty] && params[:late_penalty].to_i < 0
@task.allow_late = true

@ -39,6 +39,11 @@ class Subject < ApplicationRecord
courses.pluck(:end_date).max
end
# 是否有已开课的课堂
def has_course_start?
courses.where("start_date <= '#{Date.today}' and end_date >= '#{Date.today}'").count > 0
end
# 挑战过路径的成员数(金课统计去重后的报名人数)
def member_count
excellent && CourseMember.where(role: 4, course_id: courses.pluck(:id)).pluck(:user_id).uniq.length > shixuns.pluck(:myshixuns_count).sum ?

@ -14,6 +14,7 @@ json.allow_add_member @is_manager
json.is_creator @is_creator
if @subject.excellent
json.has_start @subject.has_course_start?
json.courses @courses do |course|
json.course_id course.id
json.first_category_url module_url(course.none_hidden_course_modules.first, course)

@ -0,0 +1,9 @@
class MigrateSubjectShixunCount < ActiveRecord::Migration[5.2]
def change
Subject.reset_column_information
Subject.all.each do |subject|
Subject.reset_counters subject.id, :stage_shixuns
Subject.reset_counters subject.id, :shixuns
end
end
end

@ -2,7 +2,7 @@
namespace :course do
desc "course end"
task :end => :environment do
courses = Course.where("end_date <= '#{Date.today}' and is_end = 0")
courses = Course.where("end_date < '#{Date.today}' and is_end = 0")
courses.each do |course|
course.update_attribute(:is_end, 1)
end

@ -118,12 +118,13 @@ em.vertical-line{display: inline-block;width: 2px;background: #999;height: 10px}
bottom: 90px;}
.tag-green .tag-name{display: block;width: auto;
/*background-image: url("/images/educoder/tag1.png");*/
background: #000000;
background: rgba(000,000,000,0.56);
border: 1px solid #fff;
border-radius: 3px;
font-size: 12px;
opacity: 0.56;
background-size: 100% 100%;padding: 0px 8px;color: #fff;float: left;}
/*opacity: 0.56;*/
background-size: 100% 100%;
padding: 0px 8px;color: #fff;float: left;}
.tag-orange{position: absolute;right: 0px;top:12px;}
.tag-orange .tag-name{display: block;width: auto;background-color:#FF6800;
background-size: 100% 100%;padding: 0px 8px;color: #fff;float: left;
@ -3447,4 +3448,9 @@ a.singlepublishtwo{
.square-main p{
margin-bottom: 0 !important;
}
}
/*.ant-notification{*/
/*width: auto !important;*/
/*max-width: 600px !important;*/
/*}*/

@ -49,6 +49,20 @@ class ExerciceNew extends Component{
}
}
// 已发布试卷编辑保存的确认弹框
changeScore = (question_id,answerArray) =>{
this.props.confirm({
content:'修改了标准答案',
subContent:"是否重新计算学生答题的成绩?",
onOk:()=>{
this.sureChangeScore(question_id,answerArray)
},
onCancel:()=>{
this.addSuccess();
}
})
}
// 已发布试卷修改答案确认修改分数
sureChangeScore = (question_id,answerArray) =>{
let url=`/exercise_questions/${question_id}/update_scores.json`
@ -398,6 +412,7 @@ class ExerciceNew extends Component{
addSuccess: this.addSuccess,
addQuestion: this.addQuestion,
onEditorCancel: this.onEditorCancel,
changeScore:this.changeScore,
editQestion: this.editQestion,
onSortDown: this.onSortDown,
onSortUp: this.onSortUp,
@ -523,7 +538,7 @@ class ExerciceNew extends Component{
{ exercise_questions.map((item, index) => {
if (item.question_type == 0 || item.question_type == 1) {
if (item.isNew) {
return <SingleEditor {...this.props} {...item} index={index} {...commonHandler} sureChangeScore={this.sureChangeScore}></SingleEditor>
return <SingleEditor {...this.props} {...item} index={index} {...commonHandler}></SingleEditor>
} else {
return <SingleDisplay {...this.props} {...item} index={index} {...commonHandler}
displayCount={exercise_questions.length}
@ -531,13 +546,13 @@ class ExerciceNew extends Component{
}
} else if (item.question_type == 2) {
if (item.isNew) {
return <JudgeEditor {...this.props} {...item} index={index} {...commonHandler} sureChangeScore={this.sureChangeScore}></JudgeEditor>
return <JudgeEditor {...this.props} {...item} index={index} {...commonHandler}></JudgeEditor>
} else {
return <JudgeDisplay {...this.props} {...item} index={index} {...commonHandler} ></JudgeDisplay>
}
} else if (item.question_type == 3) {
if (item.isNew) {
return <NullEditor {...this.props} {...item} index={index} {...commonHandler} sureChangeScore={this.sureChangeScore}></NullEditor>
return <NullEditor {...this.props} {...item} index={index} {...commonHandler}></NullEditor>
} else {
return <NullDisplay {...this.props} {...item} index={index} {...commonHandler} ></NullDisplay>
}

@ -97,16 +97,8 @@ class SingleEditor extends Component{
if (response.data.status == 0) {
this.props.addSuccess()
}else if(response.data.status == 3){
this.props.confirm({
content:'修改了标准答案',
subContent:"是否重新计算学生答题的成绩?",
onOk:()=>{
this.props.sureChangeScore(question_id,answerArray)
},
onCancel:()=>{
this.props.addSuccess();
}
})
// 已发布试卷编辑保存
this.props.changeScore(question_id,answerArray);
}
})
.catch(function (error) {

@ -137,16 +137,8 @@ class NullEditor extends Component{
if (response.data.status == 0) {
this.props.addSuccess()
}else if(response.data.status == 3){
this.props.confirm({
content:'修改了标准答案',
subContent:"是否重新计算学生答题的成绩?",
onOk:()=>{
this.props.sureChangeScore(question_id,answerArray)
},
onCancel:()=>{
this.props.addSuccess();
}
})
// 已发布试卷编辑保存
this.props.changeScore(question_id,answerArray);
}
})
.catch(function (error) {

@ -135,16 +135,8 @@ class SingleEditor extends Component{
if (response.data.status == 0) {
this.props.addSuccess()
}else if(response.data.status == 3){
this.props.confirm({
content:'修改了标准答案',
subContent:"是否重新计算学生答题的成绩?",
onOk:()=>{
this.props.sureChangeScore(question_id,answerArray)
},
onCancel:()=>{
this.props.addSuccess();
}
})
// 已发布试卷编辑保存
this.props.changeScore(question_id,answerArray);
}
})
.catch(function (error) {

@ -13,15 +13,12 @@ class CreateGroupByImportModal extends Component{
constructor(props){
super(props);
this.state={
errorTip:undefined
}
}
fetchMemberList = (arg_page) => {
}
componentDidMount() {
}
onSendOk = () => {
const courseId = this.props.match.params.coursesId
let url = `/courses/${courseId}/create_group_by_importing_file.json`
@ -112,12 +109,13 @@ class CreateGroupByImportModal extends Component{
render(){
const { candidates, checkBoxValues, loading, hasMore, name, school_name, school_names
, graduationGroup, graduation_groups, courseGroup, course_groups } = this.state
, graduationGroup, graduation_groups, courseGroup, course_groups , fileList , errorTip } = this.state
const { moduleName } = this.props
const props = {
name: 'file',
multiple: true,
fileList:fileList,
action: getUploadActionUrl(),
onRemove: this.onAttachmentRemove,
onChange: this.handleChange
@ -131,17 +129,6 @@ class CreateGroupByImportModal extends Component{
onOk={this.onOk}
className="createGroupByImport"
>
<style>
{`
`}
</style>
<div className="df">
</div>
<Dragger {...props}>
<p className="ant-upload-drag-icon">
<Icon type="inbox" />
@ -151,6 +138,9 @@ class CreateGroupByImportModal extends Component{
单个文件最大150MB
</p>
</Dragger>
<p className="color-red lineh-25 edu-txt-left" style={{height:"25px"}}>
<span className={ errorTip ? "" : "none" }>{errorTip}</span>
</p>
</ModalWrapper>
)
}

@ -30,38 +30,41 @@ class DetailTop extends Component{
}
}
componentDidMount(){
let courseslist=[]
this.getdatalist();
}
getdatalist=()=>{
let courseslist=[];
let keys=1;
if(this.props.courses!=undefined&&this.props.courses.length!=0){
this.props.courses.map((item,key)=>{
if(this.props.pathtopskey===key+1){
return(
courseslist.push(item)
)
}
})
if(this.props.detailInfoList.has_start===true){
this.props.courses.map((item,key)=>{
if(item.course_status.status===1){
keys=key+1
return(
courseslist.push(item)
)
}
})
}else{
this.props.courses.map((item,key)=>{
if(this.props.pathtopskey===key+1){
keys=key+1
return(
courseslist.push(item)
)
}
})
}
}
this.setState({
courseslist:courseslist
courseslist:courseslist,
MenuItemskey:keys,
})
}
componentDidUpdate=(prevProps)=> {
if(prevProps.courses!=this.props.courses){
let courseslist=[]
if(this.props.courses!=undefined&&this.props.courses.length!=0){
this.props.courses.map((item,key)=>{
if(this.props.pathtopskey===key+1){
return(
courseslist.push(item)
)
}
})
}
this.setState({
courseslist:courseslist
})
this.getdatalist();
}
}
@ -451,7 +454,7 @@ class DetailTop extends Component{
onVisibleChange={this.onVisibleChanges}
>
<a className={"alist"}>
<span className={"color-orange"}>{this.state.MenuItemskey}</span>次开课 <Icon className="aIcons" type={!this.state.onVisibleChangestype?"down":"up"} />
<span className={"color-orange"}> {this.state.MenuItemskey} </span>次开课 <Icon className="aIcons" type={!this.state.onVisibleChangestype?"down":"up"} />
</a>
</Dropdown>
</li>
@ -509,7 +512,7 @@ class DetailTop extends Component{
报名人数
</div>
<div className={"pathtimes"}>
{item.student_count}
{item.student_count}
</div>
</div>
</span>

@ -108,7 +108,7 @@ class PathNew extends Component{
return;
}
if (des.length > 8000) {
this.props.showSnackbar("实践课程的简介最大限制5000个字符");
this.props.showSnackbar("实践课程的简介最大限制8000个字符");
window.location.href="#part_Des";
return;
}
@ -119,7 +119,7 @@ class PathNew extends Component{
return;
}
if(point.length > 2000){
this.props.showSnackbar("实践课程的学习须知最大限制500个字符");
this.props.showSnackbar("实践课程的学习须知最大限制2000个字符");
window.location.href="#part_point";
return;
}
@ -186,10 +186,10 @@ class PathNew extends Component{
})
const Des_editMD = create_editorMD("shixun_introduction","100%","490px"
,"请在此输入实践课程的简介,最大限制5000个字符","/api/attachments.json", response.data.description,"");
,"请在此输入实践课程的简介,最大限制8000个字符","/api/attachments.json", response.data.description,"");
this.Des_editMD=Des_editMD;
const Point_editMD = create_editorMD("shixun_propaedeutics","100%","260px"
,"请在此输入实践课程的学习须知,最大限制500个字符","/api/attachments.json",response.data.learning_notes,"");
,"请在此输入实践课程的学习须知,最大限制2000个字符","/api/attachments.json",response.data.learning_notes,"");
this.Point_editMD=Point_editMD;
}
}).catch((error)=>{
@ -198,9 +198,9 @@ class PathNew extends Component{
} else {
this.isEditPage = false
const Des_editMD = create_editorMD("shixun_introduction","100%","490px","请在此输入实践课程的简介,最大限制5000个字符","/api/attachments.json","","");
const Des_editMD = create_editorMD("shixun_introduction","100%","490px","请在此输入实践课程的简介,最大限制8000个字符","/api/attachments.json","","");
this.Des_editMD=Des_editMD;
const Point_editMD = create_editorMD("shixun_propaedeutics","100%","260px","请在此输入实践课程的学习须知,最大限制500个字符","/api/attachments.json","","");
const Point_editMD = create_editorMD("shixun_propaedeutics","100%","260px","请在此输入实践课程的学习须知,最大限制2000个字符","/api/attachments.json","","");
this.Point_editMD=Point_editMD;
}

@ -35,14 +35,14 @@ if (!window['indexHOCLoaded']) {
// $('head').append($('<link rel="stylesheet" type="text/css" />')
// .attr('href', `${_url_origin}/stylesheets/educoder/antd.min.css?1525440977`));
$('head').append($('<link rel="stylesheet" type="text/css" />')
.attr('href', `${_url_origin}/stylesheets/css/edu-common.css?6`));
.attr('href', `${_url_origin}/stylesheets/css/edu-common.css?8`));
$('head').append($('<link rel="stylesheet" type="text/css" />')
.attr('href', `${_url_origin}/stylesheets/educoder/edu-main.css?6`));
.attr('href', `${_url_origin}/stylesheets/educoder/edu-main.css?8`));
// index.html有加载
$('head').append($('<link rel="stylesheet" type="text/css" />')
.attr('href', `${_url_origin}/stylesheets/educoder/edu-all.css?6`));
.attr('href', `${_url_origin}/stylesheets/educoder/edu-all.css?8`));
// $('head').append($('<link rel="stylesheet" type="text/css" />')

@ -120,12 +120,13 @@ em.vertical-line{display: inline-block;width: 2px;background: #999;height: 10px}
bottom: 90px;}
.tag-green .tag-name{display: block;width: auto;
/*background-image: url("/images/educoder/tag1.png");*/
background: #000000;
background: rgba(000,000,000,0.56);
border: 1px solid #fff;
border-radius: 3px;
font-size: 12px;
opacity: 0.56;
background-size: 100% 100%;padding: 0px 8px;color: #fff;float: left;}
/*opacity: 0.56;*/
background-size: 100% 100%;
padding: 0px 8px;color: #fff;float: left;}
.tag-orange{position: absolute;right: 0px;top:12px;}
.tag-orange .tag-name{display: block;width: auto;background-color:#FF6800;
background-size: 100% 100%;padding: 0px 8px;color: #fff;float: left;
@ -3755,4 +3756,8 @@ a.singlepublishtwo{
.has-error .ant-input:focus{
border-color: #ff4d4f !important;
}
}
/*.ant-notification{*/
/*width: auto !important;*/
/*max-width: 600px !important;*/
/*}*/
Loading…
Cancel
Save