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

dev_sync_trustie
杨树明 5 years ago
commit 101f53b306

@ -0,0 +1,23 @@
$(document).on('turbolinks:load', function(){
if ($('body.admins-competition-settings-index-page').length > 0) {
var baseOptions = {
autoclose: true,
language: 'zh-CN',
format: 'yyyy-mm-dd',
startDate: '2017-04-01',
endDate: '-1d'
};
var defineDateRangeSelect = function(element){
var options = $.extend({inputs: $(element).find('.start-date, .end-date')}, baseOptions);
$(element).datepicker(options);
$(element).find('.start-date').datepicker().on('changeDate', function(e){
$(element).find('.end-date').datepicker('setStartDate', e.date);
});
};
defineDateRangeSelect('.teaching-mode-date');
}
});

@ -0,0 +1,21 @@
.admins-competition-settings-index-page {
.competition-mode-container {
.row {
height: 35px;
}
.des-row {
height: auto;
}
.form-control {
font-size: 14px;
}
//.mode-input {
// input {
// width: 40%;
// }
//}
}
}

@ -439,6 +439,7 @@ class HomeworkCommonsController < ApplicationController
def settings
@user = current_user
@work = @homework.user_work(current_user.id) if @user_course_identity == Course::STUDENT
@course_groups = @course.course_groups.where(id: @course.charge_group_ids(@user))
end
def update_settings

@ -28,9 +28,9 @@ class Competition < ApplicationRecord
def mode_type
case mode
when 1
"课堂"
when 2
"实训"
when 2
"课堂"
when 3
"教学"
when 4
@ -94,9 +94,9 @@ class Competition < ApplicationRecord
GROUP BY competition_stage_id order by competition_stage_id")
end
def awards_count
competition_awards.pluck(:num)&.sum > 0 ? competition_awards.pluck(:num)&.sum : 20
end
# def awards_count
# competition_awards.pluck(:num)&.sum > 0 ? competition_awards.pluck(:num)&.sum : 20
# end
private

@ -36,8 +36,8 @@ class Admins::UserStatisticQuery < ApplicationQuery
study_myshixun = Myshixun.where(user_id: ids)
finish_myshixun = Myshixun.where(user_id: ids, status: 1)
study_challenge = Game.joins(:myshixun).where(myshixuns: { user_id: ids }).where(status: [0, 1, 2])
finish_challenge = Game.joins(:myshixun).where(myshixuns: { user_id: ids }).where(status: 2)
study_challenge = Game.where(user_id: ids).where(status: [0, 1, 2])
finish_challenge = Game.where(user_id: ids).where(status: 2)
if time_range.present?
study_myshixun = study_myshixun.where(updated_at: time_range)
@ -106,12 +106,12 @@ class Admins::UserStatisticQuery < ApplicationQuery
when 'finish_challenge_count' then
users =
if time_range.present?
users.joins('LEFT JOIN myshixuns ON myshixuns.user_id = users.id')
.joins("LEFT JOIN games ON games.myshixun_id = myshixuns.id "\
users#.joins('LEFT JOIN myshixuns ON myshixuns.user_id = users.id')
.joins("LEFT JOIN games ON games.user_id = users.id "\
"AND games.status = 2 AND games.updated_at BETWEEN '#{time_range.min}' AND '#{time_range.max}'")
else
users.joins('LEFT JOIN myshixuns ON myshixuns.user_id = users.id')
.joins("LEFT JOIN games ON games.myshixun_id = myshixuns.id AND games.status = 2")
users#.joins('LEFT JOIN myshixuns ON myshixuns.user_id = users.id')
.joins("LEFT JOIN games ON games.user_id = users.id AND games.status = 2")
end
users.select("#{base_query_column}, COUNT(*) finish_challenge_count")

@ -10,9 +10,110 @@
<span class="flex-1">基础设置</span>
</div>
<div class="card-body row">
<div class="container">
<%= form_tag(admins_competition_competition_settings_path(unsafe_params), method: :post, class: 'basic-setting-form flex-1', remote: true) do %>
<div class="container competition-mode-container">
<div class="row align-items-center mb-1">
<div class="col-1 text-right">
竞赛模式
</div>
<div class="col-5 text-left">
<%= radio_button_tag(:mode, 1, @competition.mode == 1, class: 'form-radio-input') %>
<label class="form-radio-label mb-0" for="mode_1">实训模式(参赛者报名参赛,挑战实训,系统评审)</label>
</div>
</div>
</div>
<div class="row align-items-center mb-1">
<div class="col-1 text-right">
</div>
<div class="col-5 text-left">
<%= radio_button_tag(:mode, 2, @competition.mode == 2, class: 'form-radio-input') %>
<label class="form-radio-label mb-0" for="mode_2">课堂模式(参赛者加入课堂,提交作品,评委评审)</label>
</div>
<div class="col-6">
<%= text_field_tag(:course_id, @competition.competition_mode_setting&.course_id, autocomplete: 'off', class: 'form-control', placeholder: '课堂id') %>
</div>
</div>
<div class="row align-items-center mb-1">
<div class="col-1 text-right">
</div>
<div class="col-5 text-left">
<%= radio_button_tag(:mode, 3, @competition.mode == 3, class: 'form-radio-input') %>
<label class="form-radio-label mb-0" for="mode_3">教学模式(参赛者报名参赛,统计战队课堂和实训数据)</label>
</div>
<div class="col-6 teaching-mode-date d-flex">
<%= text_field_tag :start_time, @competition.competition_mode_setting&.start_time, autocomplete: 'off', class: 'form-control start-date mx-0 mr-2', placeholder: '统计数据的开始时间' %>
<%= text_field_tag :end_time, @competition.competition_mode_setting&.end_time, autocomplete: 'off', class: 'form-control end-date mx-0', placeholder: '统计数据的结束时间' %>
</div>
</div>
<div class="row align-items-center mb-1">
<div class="col-1 text-right">
</div>
<div class="col-5 text-left">
<%= radio_button_tag(:mode, 4, @competition.mode == 4, class: 'form-radio-input') %>
<label class="form-radio-label mb-0" for="mode_4">托管模式(参赛者报名参赛,在其他平台完成任务)</label>
</div>
</div>
<div class="row align-items-center mb-1">
<div class="col-1 text-right">
URL
</div>
<div class="col-5 text-left mode-input">
<%= text_field_tag(:identifier, @competition.identifier, autocomplete: 'off', class: 'form-control', placeholder: '请输入url赛事网址') %>
</div>
</div>
<div class="row align-items-center mb-1">
<div class="col-1 text-right">
主办方
</div>
<div class="col-5 text-left">
</div>
</div>
<div class="row align-items-center mb-1">
<div class="col-1 text-right">
奖金
</div>
<div class="col-5 text-left input-group">
<div class="input-group-prepend">
<div class="input-group-text">¥</div>
</div>
<%= number_field_tag(:bonus, @competition.bonus, autocomplete: 'off', step: 1, min: 0, class: 'form-control', placeholder: '请输入总奖金额') %>
</div>
</div>
<div class="row align-items-center mb-1">
<div class="col-1 text-right">
获奖人数
</div>
<div class="col-5 text-left">
<%= number_field_tag(:bonus, @competition.bonus, autocomplete: 'off', step: 1, min: 0, class: 'form-control', placeholder: '请输入总奖金额') %>
</div>
</div>
<div class="row des-row align-items-center mb-1">
<div class="col-1 text-right">
描述
</div>
<div class="col-11 text-left">
<%= text_area_tag(:description, @competition.description, class: 'form-control', placeholder: '请输入赛事简介') %>
</div>
</div>
<div class="row des-row align-items-center mb-1">
<div class="col-1 text-right">
</div>
<div class="col-5 text-left">
<%= javascript_void_link '保存', class: 'btn btn-primary submit-btn' %>
</div>
</div>
</div>
<% end %>
</div>
</div>

@ -3,8 +3,8 @@
<tr>
<th width="14%" class="text-left">姓名</th>
<th width="22%" class="text-left">单位部门</th>
<th width="10%"><%= sort_tag('学习关卡数', name: 'study_challenge_count', path: admins_user_statistics_path) %></th>
<th width="10%"><%= sort_tag('完成关卡数', name: 'finish_challenge_count', path: admins_user_statistics_path) %></th>
<th width="10%">学习关卡数<%#= sort_tag('学习关卡数', name: 'study_challenge_count', path: admins_user_statistics_path) %></th>
<th width="10%">完成关卡数<%#= sort_tag('完成关卡数', name: 'finish_challenge_count', path: admins_user_statistics_path) %></th>
<th width="10%"><%= sort_tag('学习实训数', name: 'study_shixun_count', path: admins_user_statistics_path) %></th>
<th width="10%"><%= sort_tag('完成实训数', name: 'finish_shixun_count', path: admins_user_statistics_path) %></th>
<th width="10%">评测次数</th>

@ -7,7 +7,7 @@ json.partial! "student_btn_check", locals: {identity: @user_course_identity, hom
json.(@homework, :unified_setting, :publish_time, :end_time, :late_penalty, :allow_late, :late_time, :work_public,
:score_open, :answer_public)
json.group_settings @course.course_groups do |group|
json.group_settings @course_groups do |group|
json.group_id group.id
json.group_name group.name
json.publish_time group_homework_setting(@homework, group.id).try(:publish_time)

@ -0,0 +1,6 @@
class MigrateCompetitionModeDefault < ActiveRecord::Migration[5.2]
def change
change_column_default :competitions, :mode, from: 0, to: 1
Competition.all.update_all(mode: 1)
end
end

@ -0,0 +1,5 @@
class AddAwardsCountToCompetition < ActiveRecord::Migration[5.2]
def change
add_column :competitions, :awards_count, :integer, default: 0
end
end

@ -46,17 +46,17 @@ class PublishRightnow extends Component{
}
showDialog = () => {
showDialog = (course_groups) => {
const isPublish = this.props.isPublish;
const isPublishtype = this.props.isPublishtype;
const dateFormat = 'YYYY-MM-DD HH:mm';
let showdatatype=isPublish===false||isPublishtype===undefined;
let showdatatype=isPublish===true&&isPublishtype===undefined;
let showdatatypes=isPublish===true||isPublishtype===1;
// getNextHalfHourOfMoment
const startMoment = (moment());
this.setState({
modalname: showdatatypes ? "立即发布" : "立即截止",
modaltype:1,
modaltype:course_groups.length> 0 ? 1 : 2,
visible:showdatatype?false:true,
OneSelftype:showdatatype?true:false,
Topval:showdatatypes ? "学生将立即收到作业" : "学生将不能再提交作品",
@ -172,7 +172,7 @@ class PublishRightnow extends Component{
this.setState({ visible : false })
return;
}
this.showDialog()
this.showDialog(response.data.course_groups)
this.setState({
course_groups: response.data.course_groups,
starttimesend:response.data.end_time===undefined||response.data.end_time===null||response.data.end_time===""?undefined:response.data.end_time,
@ -231,7 +231,7 @@ class PublishRightnow extends Component{
typs={this.state.typs}
/>:""}
{/*立即发布*/}
<OneSelfOrderModal
{this.state.OneSelftype===true?<OneSelfOrderModal
modaltype={this.state.modaltype}
modalname={this.state.modalname}
OneSelftype={this.state.OneSelftype}
@ -249,7 +249,7 @@ class PublishRightnow extends Component{
starttimes={this.state.starttimes}
starttimesend={this.state.starttimesend}
typs={this.state.typs}
/>
/>:""}
{ showActionButton && <a href="javascript:void(0)" className="color-grey-9" onClick={this.homeworkstart}>{ showdatatypes ? "立即发布" : "立即截止" }</a> }
</div>
)

@ -235,10 +235,14 @@ class HomeworkModal extends Component{
<style>
{
`
.ant-checkbox-wrapper {
.HomeworkModal .ant-checkbox-wrapper {
margin-top: 0px;
float: left;
}
.width300{
width:300px;
display: inline-block;
}
`
}
</style>
@ -251,7 +255,7 @@ class HomeworkModal extends Component{
<div className="clearfix edu-txt-center lineh-40" key={key}>
<li style={{ width: '100%',padding: "0px 10px"}}>
<Checkbox
className="task-hide edu-txt-left"
className="task-hide edu-txt-left width300"
name="shixun_homework[]"
value={item.id}
key={item.id}

@ -48,11 +48,12 @@ class OneSelfOrderModal extends Component{
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===undefined){
// item.end_time = moment(moment(handleDateString(this.props.staytime)).add(1, 'week')).format("YYYY-MM-DD HH:mm");
// }else{
// item.end_time = moment(handleDateString(this.props.starttimesend)).format("YYYY-MM-DD HH:mm");
// }
item.end_time = moment(moment(handleDateString(this.props.staytime)).add(1, 'week')).format("YYYY-MM-DD HH:mm");
newarr.push(item)
} else {
newarr.push(item)
@ -97,11 +98,7 @@ class OneSelfOrderModal extends Component{
let course_groups=this.props.course_groups;
course_groups.map((item,key)=>{
if(item.end_time===null){
if(this.props.starttimesend===undefined){
item.end_time = moment(moment(handleDateString(this.props.staytime)).add(1, 'week')).format("YYYY-MM-DD HH:mm");
}else{
item.end_time = moment(handleDateString(this.props.starttimesend)).format("YYYY-MM-DD HH:mm");
}
item.end_time = moment(moment(handleDateString(this.props.staytime)).add(1, 'week')).format("YYYY-MM-DD HH:mm");
newarr.push(item)
}else{
newarr.push(item)
@ -208,7 +205,7 @@ class OneSelfOrderModal extends Component{
if(moment(endtime,"YYYY-MM-DD HH:mm") <= moment(this.props.starttime,"YYYY-MM-DD HH:mm")){
this.setState({
endtimetype:true,
endtimetypevalue:"必须晚于发布时间"
endtimetypevalue:"必须晚于当前时间"
})
return
}
@ -236,7 +233,7 @@ class OneSelfOrderModal extends Component{
if(moment(items.end_time,"YYYY-MM-DD HH:mm") <= moment(this.props.starttime,"YYYY-MM-DD HH:mm")){
this.setState({
endtimetype:true,
endtimetypevalue:"必须晚于发布时间"
endtimetypevalue:"必须晚于当前时间"
})
return
}
@ -276,7 +273,7 @@ class OneSelfOrderModal extends Component{
render(){
let {group_ids,endtime,course_groups}=this.state;
// console.log(course_groups)
console.log(this.props.modaltype)
let course_groupstype=course_groups===undefined||course_groups.length===0;
// TODO course_groups为空时的处理
return(
@ -344,7 +341,7 @@ class OneSelfOrderModal extends Component{
{this.props.starttime===undefined||
this.props.starttime===""?""
: <p className="task-popup-text-center font-16 mt10 mb10">
: <p className="task-popup-text-center font-16 mt20 mb10">
{/*<span className={"font-14 mr20 color979797"}>*/}
{/*<span className={"mr10"}>发布时间:</span>*/}
{/*{this.props.starttime}</span>*/}
@ -366,16 +363,17 @@ class OneSelfOrderModal extends Component{
onChange={this.onChangeTimeend}
className={ this.state.endtimetype===true?"noticeTip":""}
/>
{this.state.endtimetype===true?<div className={"color-red fr mr90 mt5"}>{this.state.endtimetypevalue}</div>:""}
{/*<div className={"fr mr90 mt5"}>(仅支持半点和整点)</div>*/}
</span>:""}
</p>}
{/* usingCheckBeforePost 为true的时候 全选所有分班 */}
<style>
{
`
.ant-checkbox-wrapper {
.HomeworkModal .ant-checkbox-wrapper {
margin-top: 0px;
float: left;
}
@ -395,7 +393,7 @@ class OneSelfOrderModal extends Component{
<li style={{ width: '100%',padding: "0px 10px"}} className={"mb10"}>
<span style={{"float":"left","color":"#05101A"}} className="task-hide color-grey-name ml50">分班名称</span>
<span style={{"float":"right","color":"#05101A"}} className="task-hide color-grey-name mr20">截止时间</span>
<span style={{"float":"right","color":"#05101A"}} className="task-hide color-grey-name mr70">截止时间</span>
</li>
</div>}
{this.props.modaltype===undefined||this.props.modaltype===2
@ -407,7 +405,7 @@ class OneSelfOrderModal extends Component{
{ <Checkbox.Group style={{ width: '100%' }} value={group_ids} onChange={this.shixunhomeworkedit}>
{
course_groups===undefined?"":course_groups.map((item,key)=>{
course_groups===undefined||course_groups.length===0?"":course_groups.map((item,key)=>{
return(
<div className="clearfix edu-txt-center lineh-40 mb10" key={key}>
@ -444,8 +442,9 @@ class OneSelfOrderModal extends Component{
</ul>
}
{this.state.endtimetype===true&&course_groupstype===true?<div className={"color-red"} style={{'text-align': 'center'}}>{this.state.endtimetypevalue}</div>:""}
{this.state.endtimetypeid!=undefined&&this.state.endtimetype===true?<div className={"color-red fl ml10 mb20"}>{this.state.endtimetypevalue}</div>:""}
{course_groupstype===true?<div className="clearfix mt30 edu-txt-center mb10">
{course_groupstype===true?<div className={this.state.endtimetype===true&&course_groupstype===true?"clearfix mt10 edu-txt-center mb10":"clearfix mt20 edu-txt-center mb10"}>
<a className="task-btn color-white mr30" onClick={this.props.Cancel}>{this.props.Cancelname}</a>
<a className="task-btn task-btn-orange" onClick={()=>this.propsSaves(group_ids,this.state.endtime)}>{this.props.Savesname}</a>
</div>:<div className="clearfix mt30 edu-txt-center mb10">

@ -353,7 +353,7 @@ class GraduationTaskDetail extends Component{
modaltype={this.state.modaltype}
getcourse_groupslist={(id) => this.getcourse_groupslist(id)}
/>
<OneSelfOrderModal
{this.state.OneSelftype==true?<OneSelfOrderModal
{...this.props}
staytime={this.state.staytime}
starttimes={this.state.starttimes}
@ -376,7 +376,7 @@ class GraduationTaskDetail extends Component{
starttimes={this.state.starttimes}
starttimesend={this.state.starttimesend}
typs={this.state.typs}
/>
/>:""}

@ -367,7 +367,7 @@ class Immediatelypublish extends Component{
/>
{/*立即发布*/}
<OneSelfOrderModal
{this.state.OneSelftype===true?<OneSelfOrderModal
modaltype={this.state.modaltype}
modalname={this.state.modalname}
OneSelftype={this.state.OneSelftype}
@ -386,7 +386,7 @@ class Immediatelypublish extends Component{
starttimes={this.state.starttimes}
starttimesend={this.state.starttimesend}
typs={this.state.typs}
/>
/>:""}
{/* 公用的提示弹框 */}
<Modals

@ -3219,7 +3219,7 @@ class Listofworksstudentone extends Component {
/>
{/*立即发布*/}
<OneSelfOrderModal
{this.state.OneSelftype===true?<OneSelfOrderModal
modaltype={this.state.modaltype}
modalname={this.state.modalname}
OneSelftype={this.state.OneSelftype}
@ -3238,7 +3238,7 @@ class Listofworksstudentone extends Component {
starttimes={this.state.starttimes}
starttimesend={this.state.starttimesend}
typs={this.state.typs}
/>
/>:""}
{
homework_status&&homework_status.length===0?
<div className="edu-back-white">

@ -793,7 +793,7 @@ class ShixunStudentWork extends Component {
/>
{/*立即发布*/}
<OneSelfOrderModal
{this.state.OneSelftype===true?<OneSelfOrderModal
modaltype={this.state.modaltype}
modalname={this.state.modalname}
OneSelftype={this.state.OneSelftype}
@ -812,7 +812,7 @@ class ShixunStudentWork extends Component {
starttimes={this.state.starttimes}
starttimesend={this.state.starttimesend}
typs={this.state.typs}
/>
/>:""}
<div className={"educontent "}>

@ -414,7 +414,7 @@ class ShixunhomeWorkItem extends Component{
{
discussMessage && discussMessage.upper_category_name &&
<ConditionToolTip title={discussMessage.upper_category_name} condition={ discussMessage.upper_category_name.length > 22 }>
{ <div className=" color-grey9 task-hide fr" style={discussMessage.time_status===1||discussMessage.time_status===2||discussMessage.time_status===3||discussMessage.time_status===4||discussMessage.time_status===5||discussMessage.time_status===6?{"maxWidth":"268px"}:{"maxWidth":"625px"}} title={discussMessage.upper_category_name}>所属目录{discussMessage.upper_category_name}</div>}
{ <div className=" color-grey9 task-hide fr" style={discussMessage.time_status===1||discussMessage.time_status===2||discussMessage.time_status===3||discussMessage.time_status===4||discussMessage.time_status===5||discussMessage.time_status===6?{"maxWidth":"268px"}:{"maxWidth":"550px"}} title={discussMessage.upper_category_name}>所属目录{discussMessage.upper_category_name}</div>}
</ConditionToolTip>
}

@ -2163,7 +2163,7 @@ class Trainingjobsetting extends Component {
{/*立即发布*/}
<OneSelfOrderModal
{this.state.OneSelftype===true?<OneSelfOrderModal
modaltype={this.state.modaltype}
modalname={this.state.modalname}
OneSelftype={this.state.OneSelftype}
@ -2182,7 +2182,7 @@ class Trainingjobsetting extends Component {
starttimes={this.state.starttimes}
starttimesend={this.state.starttimesend}
typs={this.state.typs}
/>
/>:""}
<Modals
modalsType={modalsType}

@ -489,7 +489,7 @@ class Workquestionandanswer extends Component {
/>
{/*立即发布*/}
<OneSelfOrderModal
{this.state.OneSelftype===true?<OneSelfOrderModal
modaltype={this.state.modaltype}
modalname={this.state.modalname}
OneSelftype={this.state.OneSelftype}
@ -508,7 +508,7 @@ class Workquestionandanswer extends Component {
starttimes={this.state.starttimes}
starttimesend={this.state.starttimesend}
typs={this.state.typs}
/>
/>:""}
<div className={"educontent "}>
<div className="edu-back-white" >

@ -94,6 +94,7 @@ class OfficialAcademicTranscript extends Component {
challenge_id: {id: item.challenge_id},
challenge_comment: item.challenge_comment,
challenge_comment_hidden: item.challenge_comment_hidden,
view_answer: item.view_answer,
// adjustmentminute:asdasd
})
})
@ -172,15 +173,18 @@ class OfficialAcademicTranscript extends Component {
className: "edu-txt-center",
render: (text, record) => {
return (
<span style={{cursor: "default"}}>{record.view_answer === true ? <Tooltip placement="bottom" title={
<span style={{cursor: "default"}}>
{record.view_answer === true ? <Tooltip placement="bottom" title={
<pre>
学生在完成任务评测之前查是否看了参考答案
</pre>
}><span style={{cursor: "default"}}>已查看</span> </Tooltip> : <Tooltip placement="bottom" title={
}><span style={{cursor: "default"}}>已查看</span> </Tooltip>
: <Tooltip placement="bottom" title={
<pre>
学生在完成任务评测之前查是否看了参考答案
</pre>
}><span style={{cursor: "default"}}>未查看</span> </Tooltip>}</span>
</pre>
}><span style={{cursor: "default"}}>未查看</span> </Tooltip>}
</span>
)
}
},

Loading…
Cancel
Save