Merge branch 'dev_cs' into dev_aliyun_beta

dev_aliyun_beta
caicai8 5 years ago
commit 4eba9d27d4

@ -74,6 +74,7 @@ class ChallengesController < ApplicationController
ChallengeTag.create(:name => tag, :challenge_choose_id => @challenge_choose.id, :challenge_id => @challenge.id) ChallengeTag.create(:name => tag, :challenge_choose_id => @challenge_choose.id, :challenge_id => @challenge.id)
end end
end end
@challenge.update_column(:score, @challenge.challenge_chooses.sum(:score))
end end
rescue Exception => e rescue Exception => e
raise ActiveRecord::Rollback raise ActiveRecord::Rollback
@ -95,6 +96,7 @@ class ChallengesController < ApplicationController
@challenge.update_column(:modify_time, Time.now) @challenge.update_column(:modify_time, Time.now)
end end
@challenge_choose.update_attributes(chooce_params) @challenge_choose.update_attributes(chooce_params)
@challenge.update_column(:score, @challenge.challenge_chooses.sum(:score))
# 单选多选题的更新 # 单选多选题的更新
category = @challenge_choose.standard_answer.length > 1 ? 2 : 1 category = @challenge_choose.standard_answer.length > 1 ? 2 : 1
@challenge_choose.update_column(:category, category) @challenge_choose.update_column(:category, category)
@ -208,6 +210,9 @@ class ChallengesController < ApplicationController
# 测试集的 # 测试集的
@shixun.myshixuns.update_all(:system_tip => 0) @shixun.myshixuns.update_all(:system_tip => 0)
end end
if params[:challenge][:show_type].to_i == -1
@challenge.update_attributes(picture_path: nil, web_route: nil, expect_picture_path: nil, original_picture_path: nil)
end
# 关卡评测执行文件如果被修改,需要修改脚本内容 # 关卡评测执行文件如果被修改,需要修改脚本内容
script = modify_shixun_script @shixun, @shixun.evaluate_script script = modify_shixun_script @shixun, @shixun.evaluate_script
@shixun.shixun_info.update_column(:evaluate_script, script) @shixun.shixun_info.update_column(:evaluate_script, script)

@ -739,7 +739,7 @@ class GamesController < ApplicationController
experience = 0 experience = 0
game_status = @game.status game_status = @game.status
had_done = @game.had_done had_done = @game.had_done
game_challenge = Challenge.select([:id, :score, :position, :shixun_id, :web_route]).find(@game.challenge_id) game_challenge = Challenge.select([:id, :score, :position, :shixun_id, :web_route, :show_type]).find(@game.challenge_id)
if params[:resubmit].blank? # 非重新评测 if params[:resubmit].blank? # 非重新评测
if game_status == 2 # 通关 if game_status == 2 # 通关
@ -768,6 +768,7 @@ class GamesController < ApplicationController
picture = (@game.picture_path.nil? ? 0 : @game.id) picture = (@game.picture_path.nil? ? 0 : @game.id)
# 针对web类型的实训 # 针对web类型的实训
web_route = game_challenge.try(:web_route) web_route = game_challenge.try(:web_route)
mirror_name = @shixun.mirror_name mirror_name = @shixun.mirror_name
e_record = EvaluateRecord.where(:identifier => sec_key).first e_record = EvaluateRecord.where(:identifier => sec_key).first

@ -101,8 +101,9 @@ class SubjectsController < ApplicationController
@tags = ChallengeTag.where(challenge_id: challenge_ids).pluck(:name).uniq @tags = ChallengeTag.where(challenge_id: challenge_ids).pluck(:name).uniq
# 用户获取的实训标签 # 用户获取的实训标签
# @user_tags = @subject.shixuns.map(&:user_tags_name).flatten.uniq # @user_tags = @subject.shixuns.map(&:user_tags_name).flatten.uniq
@user_tags = user_shixun_tags challenge_ids, @user.id
@my_subject_progress = @subject.my_subject_progress # 用户进展
user_subject_progress(challenge_ids)
end end
def new def new
@ -436,4 +437,33 @@ class SubjectsController < ApplicationController
tip_exception("403", "") tip_exception("403", "")
end end
end end
# 用户进展和获取的标签
def user_subject_progress challenge_ids
pass_games = Game.select(:id, :cost_time, :challenge_id).where(status: 2, user_id: current_user.id, challenge_id: challenge_ids) if current_user.logged?
@all_score = Challenge.where(id: challenge_ids).sum(:score)
# 如果没有通关的,没必要再继续统计了
if pass_games.blank?
@my_score = 0
@learned = 0
@time = 0
@user_tags = []
else
pass_challenge_ids = pass_games.map(&:challenge_id)
subject_challenge_count = @subject.shixuns.sum(:challenges_count)
# 用户通关获得的标签
@user_tags = ChallengeTag.where(challenge_id: pass_challenge_ids).pluck(:name)
# 用户学习进度
@learned =
subject_challenge_count == 0 ? 0 :
((pass_challenge_ids.size.to_f / subject_challenge_count).round(2) * 100).to_i
# 用户通关分数
@my_score = Challenge.where(id: pass_challenge_ids).pluck(:score).sum
@time = pass_games.map(&:cost_time).sum
end
end
end end

@ -13,13 +13,8 @@ module SubjectsHelper
# 实训路径的所有用户获得的标签 # 实训路径的所有用户获得的标签
def user_shixun_tags challenge_ids, user_id def user_shixun_tags challenge_ids, user_id
logger.info("#####################")
ChallengeTag.joins("join games on challenge_tags.challenge_id = games.challenge_id"). ChallengeTag.joins("join games on challenge_tags.challenge_id = games.challenge_id").
where(challenge_id: challenge_ids, games: {status: 2, user_id: user_id}).pluck("challenge_tags.name").uniq where(challenge_id: challenge_ids, games: {status: 2, user_id: user_id}).pluck("challenge_tags.name").uniq
logger.info("#####################")
pass_challenge_ids = Game.where(status: 2, user_id: user_id, challenge_id: challenge_ids).pluck(:challenge_id)
ChallengeTag.where(challenge_id: pass_challenge_ids).pluck(:name).uniq
logger.info("#####################")
end end
# 金课的课堂状态 0未开课1进行中2已结束 # 金课的课堂状态 0未开课1进行中2已结束

@ -82,16 +82,9 @@ class Subject < ApplicationRecord
end end
def my_subject_progress def my_subject_progress
logger.info("#-----------")
my_challenge_count = Game.joins(:challenge).where(user_id: User.current.id, status: 2, challenges: {shixun_id: shixuns.published_closed}). my_challenge_count = Game.joins(:challenge).where(user_id: User.current.id, status: 2, challenges: {shixun_id: shixuns.published_closed}).
pluck(:challenge_id).uniq.size pluck(:challenge_id).uniq.size
logger.info("#-----------") count = self.subject_challenge_count == 0 ? 0 : ((my_challenge_count.to_f / self.subject_challenge_count).round(2) * 100).to_i
new_challenge_count = Challenge.left_joins(:games)
.where(games: {user_id: User.current.id, status: 2}, shixun_id: shixuns.published_closed)
.uniq.count
logger.info("#-----------")
subject_challenge_count = shixuns.sum(:challenges_count)
subject_challenge_count == 0 ? 0 : ((my_challenge_count.to_f / subject_challenge_count).round(2) * 100).to_i
end end
def my_consume_time def my_consume_time

@ -20,10 +20,20 @@ if question.question_type <= 2 #当为选择题或判断题时,只显示选
#TODO: 旧版本来一个题只有一个标准答案的新版又做成了一个题有多个标准答案exercise_choice_id存放的是标准答案的位置.. #TODO: 旧版本来一个题只有一个标准答案的新版又做成了一个题有多个标准答案exercise_choice_id存放的是标准答案的位置..
standard_answer_b = standard_answers_array.join("").include?(a.choice_position.to_s) standard_answer_b = standard_answers_array.join("").include?(a.choice_position.to_s)
user_answer_b = user_answer.include?(a.id) user_answer_b = user_answer.include?(a.id)
choice_text = a.choice_text
if question.question_type == 2
if choice_text == "对"
choice_text = "正确"
end
if choice_text == "错"
choice_text = "错误"
end
end
json.c_position (index+1) if ex_choice_random_boolean #当选项随机时,选项位置以此为准,否则不出现 json.c_position (index+1) if ex_choice_random_boolean #当选项随机时,选项位置以此为准,否则不出现
json.choice_id a.id json.choice_id a.id
# json.choice_text (edit_type.present? || question.question_type == 2) ? a.choice_text : "#{(index+65).chr}.#{a.choice_text}" # json.choice_text (edit_type.present? || question.question_type == 2) ? a.choice_text : "#{(index+65).chr}.#{a.choice_text}"
json.choice_text a.choice_text
json.choice_text choice_text
json.choice_position a.choice_position json.choice_position a.choice_position
if exercise_type == 1 || exercise_type == 4 #1为教师编辑/预览 试卷或问题2为空白试卷即标准答案和用户答案都不显示3为用户开始答题的显示4为老师评阅试卷或学生在截止后查看试卷 if exercise_type == 1 || exercise_type == 4 #1为教师编辑/预览 试卷或问题2为空白试卷即标准答案和用户答案都不显示3为用户开始答题的显示4为老师评阅试卷或学生在截止后查看试卷
json.standard_boolean standard_answer_b json.standard_boolean standard_answer_b
@ -36,6 +46,14 @@ if question.question_type <= 2 #当为选择题或判断题时,只显示选
if exercise_type == 1 || exercise_type == 4 #1为老师4为试卷截止且答案公开的情况 if exercise_type == 1 || exercise_type == 4 #1为老师4为试卷截止且答案公开的情况
json.standard_answer standard_answers_array json.standard_answer standard_answers_array
if question.question_type == 2 #返回答案的文字
standard_text = standard_answers_array.first.to_i == 1 ? "正确" : "错误"
else
array_text_answer = []
standard_answers_array.each{|a| array_text_answer.push((a+64).chr)}
standard_text = array_text_answer.join("")
end
json.standard_answer_show standard_text
end end
if exercise_type == 3 || exercise_type == 4 if exercise_type == 3 || exercise_type == 4
json.user_answer user_answer json.user_answer user_answer

@ -14,8 +14,8 @@ end
# 我的进展 # 我的进展
json.progress do json.progress do
json.my_score @subject.my_subject_score json.my_score @my_score
json.all_score @subject.all_score json.all_score @all_score
json.learned @subject.my_subject_progress json.learned @learned
json.time @subject.my_consume_time json.time @time
end end

@ -50,12 +50,11 @@ Rails.application.configure do
# Debug mode disables concatenation and preprocessing of assets. # Debug mode disables concatenation and preprocessing of assets.
# This option may cause significant delays in view rendering with a large # This option may cause significant delays in view rendering with a large
# number of complex assets. # number of complex assets.
config.assets.debug = false config.assets.debug = true
# Suppress logger output for asset requests. # Suppress logger output for asset requests.
config.assets.quiet = true config.assets.quiet = true
config.assets.compile = true
# config.assets.prefix = '/dev-assets' # config.assets.prefix = '/dev-assets'
# Raises error for missing translations # Raises error for missing translations

Binary file not shown.

Before

Width:  |  Height:  |  Size: 53 KiB

After

Width:  |  Height:  |  Size: 137 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 53 KiB

@ -446,7 +446,7 @@ table.text-file{}
/*-------------------------------实训路径-------------------------------*/ /*-------------------------------实训路径-------------------------------*/
.path-head{width: 100%;height: 300px;background-image: url("/images/educoder/path.png"); .path-head{width: 100%;height: 300px;background-image: url("/images/educoder/path.png");
background-color: #131b39; background-color: #000a4f;
/*background-size: cover;*/ /*background-size: cover;*/
background-position: center; background-position: center;
background-repeat: no-repeat; background-repeat: no-repeat;

@ -236,8 +236,7 @@ $(function(){
if(dragging) { if(dragging) {
clickX = e.pageX || e.originalEvent.touches[0].pageX;; clickX = e.pageX || e.originalEvent.touches[0].pageX;;
if(clickX > leftOffset+0&&clickX<leftOffset+1600) { if(clickX > leftOffset+0&&clickX<leftOffset+1600) {
console.log('resize') // console.log('resize')
//console.log(1);
lab.css('left', clickX - 7 - leftOffset + 'px'); lab.css('left', clickX - 7 - leftOffset + 'px');
$("#game_left_contents").width( clickX-leftOffset + 'px'); $("#game_left_contents").width( clickX-leftOffset + 'px');
nextW2 = clickX-leftOffset; nextW2 = clickX-leftOffset;
@ -314,10 +313,16 @@ $(function(){
window.top.__updateWebsshRows && window.top.__updateWebsshRows(rows) window.top.__updateWebsshRows && window.top.__updateWebsshRows(rows)
} }
window.refresh_editor_monaco = function(height) { window.refresh_editor_monaco = function(height) {
console.log('refresh_editor_monaco')
if (window.editor_monaco) { if (window.editor_monaco) {
height && $('#codetab_con_1').height(height) height && $('#codetab_con_1').height(height)
window.editor_monaco.layout(); window.editor_monaco.layout();
} }
// if ($('#game_operate_action').width() < 720) {
// $('#game_operate_action .time_limit').hide()
// } else {
// $('#game_operate_action .time_limit').show()
// }
} }
// end; // end;
//解決IE瀏覽器大小改變時webssh佈局變亂。 //解決IE瀏覽器大小改變時webssh佈局變亂。

@ -207,7 +207,7 @@ function generateNewIndexJsp() {
if (window.location.host == 'pre-newweb.educoder.net') { if (window.location.host == 'pre-newweb.educoder.net') {
_host = 'https://testali-cdn.educoder.net/react/build/' _host = 'https://testali-cdn.educoder.net/react/build/'
} else if (window.location.host == 'www.educoder.net') { } else if (window.location.host == 'www.educoder.net') {
_host = 'https://ali-newweb.educoder.net/react/build/' _host = 'https://ali-cdn.educoder.net/react/build/'
} }
document.write('<script type="text/javascript" src="' + _host + 'js/js_min_all.js"><\\/script>'); document.write('<script type="text/javascript" src="' + _host + 'js/js_min_all.js"><\\/script>');
document.write('<script type="text/javascript" src="' + _host + 'static/js/main.${matchResult[1]}.js"><\\/script>'); document.write('<script type="text/javascript" src="' + _host + 'static/js/main.${matchResult[1]}.js"><\\/script>');

@ -177,6 +177,7 @@ class CommonWorkItem extends Component{
} */} } */}
</p> </p>
<p className="color-grey-9 clearfix"> <p className="color-grey-9 clearfix">
{ item.author && <span className="mr20 fl">{item.author}</span> }
{item.commit_count===undefined?"":<span className="mr20 fl">{item.commit_count} 已交</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>} {item.uncommit_count===undefined?"":<span className="mr20 fl">{item.uncommit_count} 未交</span>}
{ {

@ -134,6 +134,7 @@ class ExerciseListItem extends Component{
{/*</li>*/} {/*</li>*/}
</p> </p>
<p className="color-grey-9 clearfix"> <p className="color-grey-9 clearfix">
{ item.author && <span className="mr20 fl">{item.author}</span> }
{item.exercise_status===1?"":<span className="mr20 fl">{item.exercise_answer} 已答</span>} {item.exercise_status===1?"":<span className="mr20 fl">{item.exercise_answer} 已答</span>}
{item.exercise_status===1?"":<span className="mr20 fl">{item.exercise_unanswer} 未答</span>} {item.exercise_status===1?"":<span className="mr20 fl">{item.exercise_unanswer} 未答</span>}
{item.unreview_count===null||item.exercise_status===1?"":<span className="mr20 fl">{item.unreview_count} 未评数</span> } {item.unreview_count===null||item.exercise_status===1?"":<span className="mr20 fl">{item.unreview_count} 未评数</span> }

@ -553,6 +553,9 @@ class ExerciseReviewAndAnswer extends Component{
height:16px; height:16px;
margin-top:2px; margin-top:2px;
} }
.standardAnswer.editormd-html-preview,.answerStyle.editormd-html-preview{
width:100%!important
}
`}</style> `}</style>
{/*<p style={{height:"60px"}}></p>*/} {/*<p style={{height:"60px"}}></p>*/}
<Modals <Modals
@ -716,7 +719,7 @@ class ExerciseReviewAndAnswer extends Component{
<span className="fr"> <span className="fr">
{ {
// 填空(一直都有调分),和简答题调分:老师身份 已经评分的才能出现调分按钮 // 填空(一直都有调分),和简答题调分:老师身份 已经评分的才能出现调分按钮
isAdmin && ((parseInt(item.answer_status) == 1 && item.question_type == 4) || item.question_type == 3) ? isAdmin && ((parseInt(item.answer_status) != 0 && item.question_type == 4) || item.question_type == 3) ?
<WordsBtn style="blue" className="mr20 font-16 fl" onClick={()=>this.showSetScore(key,item.setScore,item.q_position+"_"+item.question_type)}>调分</WordsBtn>:"" <WordsBtn style="blue" className="mr20 font-16 fl" onClick={()=>this.showSetScore(key,item.setScore,item.q_position+"_"+item.question_type)}>调分</WordsBtn>:""
} }
{ {
@ -724,11 +727,17 @@ class ExerciseReviewAndAnswer extends Component{
isAdmin && parseInt(item.answer_status) == 0 && item.question_type == 4 ? isAdmin && parseInt(item.answer_status) == 0 && item.question_type == 4 ?
<span className="color-red fl mr20">未批</span>:"" <span className="color-red fl mr20">未批</span>:""
} }
{
// 客观题:老师||学生(试卷已截止且答案公开)显示正确答案
item.question_type < 3 && item.standard_answer_show ?
<span className="font-16 ml20">
正确答案{ item.standard_answer_show }
</span>:""
}
{ {
//(老师身份且除实训题外) || (学生身份且试卷已经截止)就显示用户当前题目所得分数 //(老师身份且除实训题外) || (学生身份且试卷已经截止)就显示用户当前题目所得分数
( isAdmin || (isStudent && exercise.exercise_status == 3)) && item.question_type != 5 && item.user_score ? ( isAdmin || (isStudent && exercise.exercise_status == 3)) && item.question_type != 5 && item.user_score ?
<span className="font-16 ml20"> <span className="font-16 ml20">
<i className={parseInt(item.answer_status) ==0 ? "iconfont icon-htmal5icon19 color-red font-20 fl":parseInt(item.answer_status) ==1 ? "fl iconfont icon-wancheng font-20 color-green" :"iconfont icon-htmal5icon19 color-orange-tip font-20 fl"}></i>
<span><span className={parseInt(item.answer_status) == 0 ?"color-red":parseInt(item.answer_status) == 1 ?"color-green":"color-orange-tip"}>{item.user_score}</span> </span> <span><span className={parseInt(item.answer_status) == 0 ?"color-red":parseInt(item.answer_status) == 1 ?"color-green":"color-orange-tip"}>{item.user_score}</span> </span>
</span> : "" </span> : ""
} }

@ -195,8 +195,8 @@ class SingleEditor extends Component{
<div> <div>
<RadioGroup onChange={this.onOptionClick} value={standard_answers[0]}> <RadioGroup onChange={this.onOptionClick} value={standard_answers[0]}>
{/* disabled={exerciseIsPublish} */} {/* disabled={exerciseIsPublish} */}
<Radio value={true} ></Radio> <Radio value={true} >正确</Radio>
<Radio value={false} ></Radio> <Radio value={false} ></Radio>
</RadioGroup> </RadioGroup>
{/* not work */} {/* not work */}
{/* <Radio value={standard_answers[0]} onClick={() => this.onOptionClick(0)} disabled={exerciseIsPublish}></Radio> {/* <Radio value={standard_answers[0]} onClick={() => this.onOptionClick(0)} disabled={exerciseIsPublish}></Radio>

@ -108,7 +108,7 @@ class fillEmpty extends Component{
array.map((item,key)=>{ array.map((item,key)=>{
return( return(
<li className="df mb10 emptyPanel"> <li className="df mb10 emptyPanel">
<span className="mr10 lineh-35 font-16">答案(填空{key+1})</span> <span className="mr10 lineh-35 font-16">答案填空{key+1}:</span>
<div className="flex1" style={{width:"0"}}> <div className="flex1" style={{width:"0"}}>
{ {
user_exercise_status == 1 ? user_exercise_status == 1 ?
@ -135,7 +135,7 @@ class fillEmpty extends Component{
{ questionType.standard_answer && questionType.standard_answer.map((item,k)=>{ { questionType.standard_answer && questionType.standard_answer.map((item,k)=>{
return( return(
<ul className="df font-16"> <ul className="df font-16">
<span className="mr10">填空{k+1}:</span> <span className="mr10">答案填空{k+1}:</span>
<li className="flex1"> <li className="flex1">
{ {
item.answer_text && item.answer_text.map((i,index)=>{ item.answer_text && item.answer_text.map((i,index)=>{

@ -167,7 +167,7 @@ class Bullsubdirectory extends Component{
<div> <div>
<div> <div>
<div className="fudonyingxiangysl"> <div className="fudonyingxiangysl">
<div style={{marginRight:"59px"}}> <div style={{marginRight:"60px"}}>
<span className="ysltitbt">{myname}</span> <span className="ysltitbt">{myname}</span>
</div> </div>
<div> <div>

@ -103,11 +103,11 @@ class Poll extends Component{
this.InitList(e.key,StudentList_value,page); this.InitList(e.key,StudentList_value,page);
} }
// 获取列表数据 // 获取列表数据
InitList=(type,search,page)=>{ InitList=(type,search,page,bank_checkValue)=>{
this.setState({ this.setState({
isSpin:true isSpin:true
}) })
let {pageSize}=this.state let { pageSize,checkBoxValues }=this.state
let coursesId=this.props.match.params.coursesId; let coursesId=this.props.match.params.coursesId;
let url='/courses/'+coursesId+'/polls.json?limit='+pageSize+'&page='+page let url='/courses/'+coursesId+'/polls.json?limit='+pageSize+'&page='+page
if(type!="0"){ if(type!="0"){
@ -123,7 +123,7 @@ class Poll extends Component{
course_types:result.data.course_types, course_types:result.data.course_types,
polls_counts:result.data.polls_counts, polls_counts:result.data.polls_counts,
isSpin:false, isSpin:false,
checkBoxValues:[] checkBoxValues: bank_checkValue ? bank_checkValue : []
}) })
} }
}).catch((error)=>{ }).catch((error)=>{
@ -209,12 +209,6 @@ class Poll extends Component{
//判断是否有选中数据 //判断是否有选中数据
if(this.state.checkBoxValues.length==0){ if(this.state.checkBoxValues.length==0){
this.props.showNotification("请先在列表中选择数据"); this.props.showNotification("请先在列表中选择数据");
// this.setState({
// modalsType:true,
// modalsTopval:"请先在列表中选择数据",
// modalsBottomval:'',
// loadtype:true
// })
}else{ }else{
if(value != "bank"){ if(value != "bank"){
this.setState({ this.setState({
@ -325,15 +319,13 @@ class Poll extends Component{
} }
// 题库选用成功后,立即发布,刷新页面 // 题库选用成功后,立即发布,刷新页面
useBankSuccess=(checkValue,value)=>{ useBankSuccess=(checkValue,value)=>{
debugger;
this.setState({ this.setState({
isSpin:true isSpin:true
}) })
let{type,StudentList_value,page}=this.state let{type,StudentList_value,page}=this.state
this.InitList(type,StudentList_value,page); this.InitList(type,StudentList_value,page,value);
this.setState({
checkBoxValues:[]
})
let coursesId=this.props.match.params.coursesId; let coursesId=this.props.match.params.coursesId;
let url=`/courses/${coursesId}/polls/publish_modal.json`; let url=`/courses/${coursesId}/polls/publish_modal.json`;
axios.get(url,{ axios.get(url,{
@ -351,10 +343,6 @@ class Poll extends Component{
}) })
} }
} }
this.setState({
course_groups:list,
checkBoxValues:value
})
this.setState({ this.setState({
modalname:"立即发布", modalname:"立即发布",
modaltype:response.data.un_publish > 0 ? 1 : 2, modaltype:response.data.un_publish > 0 ? 1 : 2,
@ -369,6 +357,8 @@ class Poll extends Component{
Savesname:"立即发布", Savesname:"立即发布",
Cancel:this.homeworkhide, Cancel:this.homeworkhide,
Saves:this.homeworkstartend, Saves:this.homeworkstartend,
course_groups:list,
checkBoxValues:value
}) })
} }
}).catch((error) => { }).catch((error) => {
@ -425,7 +415,7 @@ class Poll extends Component{
addname:undefined, addname:undefined,
addnametype:false, addnametype:false,
addnametab:undefined, addnametab:undefined,
checkBoxValues:[] // checkBoxValues:[]
}) })
} }

@ -54,6 +54,7 @@ class PollListItem extends Component{
} }
</p> </p>
<p className="color-grey-9 clearfix"> <p className="color-grey-9 clearfix">
{ item.author && <span className="mr20 fl">{item.author}</span> }
{ {
item.polls_status !=1 && item.polls_status !=1 &&
<span className="fl mt3"> <span className="fl mt3">

@ -333,7 +333,7 @@ class ShixunhomeWorkItem extends Component{
<p className="color-grey panel-lightgrey mt16 fl"> <p className="color-grey panel-lightgrey mt16 fl">
<span className="mr50"> <span className="mr50">
{/* <a href="/users/innov" className="panel-name-small hide fl mr15 mr30 color-grey3">{discussMessage.author.name}</a> */} {/* <a href="/users/innov" className="panel-name-small hide fl mr15 mr30 color-grey3">{discussMessage.author.name}</a> */}
{ discussMessage.author && <span className="mr15 color-grey-3">{discussMessage.author}</span> }
{discussMessage.commit_count===undefined?"":<span className="mr15 color-grey9">{discussMessage.commit_count} 已交</span>} {discussMessage.commit_count===undefined?"":<span className="mr15 color-grey9">{discussMessage.commit_count} 已交</span>}
{discussMessage.uncommit_count===undefined?"":<span className="mr15 color-grey9">{discussMessage.uncommit_count} 未交</span>} {discussMessage.uncommit_count===undefined?"":<span className="mr15 color-grey9">{discussMessage.uncommit_count} 未交</span>}
{/*<span className="mr15 color-grey9">{discussMessage.replies_count} 3 未评</span>*/} {/*<span className="mr15 color-grey9">{discussMessage.replies_count} 3 未评</span>*/}

@ -52,11 +52,18 @@ class ActionView extends Component {
componentDidMount() { componentDidMount() {
// request // request
window._tpiWidthResize = () => { window._tpiWidthResize = () => {
if (window.$('#actionView').width() < 580) { const _w = window.$('#actionView').width();
window.$('.time_limit').hide() // if (_w < 446) {
} else { // window.$('#time-consuming').hide()
window.$('.time_limit').show() // // window.$('#time-consuming').hide()
} // } else if (_w < 746) {
// // 文字放出来之前是 580
// window.$('#time-consuming').show()
// window.$('.time_limit').hide()
// } else {
// window.$('#time-consuming').show()
// window.$('.time_limit').show()
// }
} }
} }
@ -70,24 +77,50 @@ class ActionView extends Component {
return ( return (
<div className="-flex -layout-h" id="game_operate_action"> <div className="-flex -layout-h" id="game_operate_action">
<style>{` <style>{`
#game_operate_action {
width: 100%;
}
.time_limit { .time_limit {
margin-right: 16px; margin-right: 0px;
}
.spliter {
border-right: 1px solid;
padding-right: 8px;
margin-right: 8px;
height: 14px;
display: inline-block;
position: relative;
top: 3px;
}
#time-consuming {
flex: auto;
overflow: hidden;
white-space: nowrap;
}
#game_operate_action .act_btn {
flex: 0 0 90px;
} }
`}</style> `}</style>
<span className="mt10 -flex c_grey ml15" id="time-consuming"> <span className="mt10 -flex c_grey ml15" id="time-consuming">
{!!time_limit && {!!time_limit &&
<span className="time_limit">{`本关最大执行时间:${real_time_limit}`}</span>} <span className="time_limit">{`本关最大执行时间:${real_time_limit}`}
{!gameBuilding && record && <span className="spliter"></span>}
</span>}
{!gameBuilding && record ? {!gameBuilding && record ?
<Tooltip title={ "本次评测耗时(编译、运行总时间)" }> // <Tooltip title={ "本次评测耗时(编译、运行总时间)" }></Tooltip>
<span>{ record } </span> <span>本次评测耗时(编译运行总时间){ record } </span>
</Tooltip>
: ""} : ""}
</span> </span>
{/*将第一个按钮改为visibility方式隐藏不然加载时测评按钮会出现没有垂直居中的情况*/} {/*将第一个按钮改为visibility方式隐藏不然加载时测评按钮会出现没有垂直居中的情况*/}
<Tooltip title={ "倒计时为0时服务将被关闭" }> <Tooltip title={ "倒计时为0时服务将被关闭" }>
<Button size="small" className={classes.button + ' actionViewfirstButton'} onClick={()=>this.showWebDisplay(challenge)} <Button size="small" className={classes.button + ' actionViewfirstButton'} onClick={()=>this.showWebDisplay(challenge)}
style={{ visibility: challenge.showWebDisplayButton ? '': 'hidden'}} style={{ visibility: challenge.showWebDisplayButton ? '': 'hidden',
minWidth: challenge.showWebDisplayButton ? '': '1px',
width: challenge.showWebDisplayButton ? '': '1px',
flex: `0 0 ${challenge.showWebDisplayButton ? '110px': '1px'}`
}}
id="showWebDisplayButton" id="showWebDisplayButton"
// style={{ display: challenge.showWebDisplayButton ? 'flex': 'none'}} // style={{ display: challenge.showWebDisplayButton ? 'flex': 'none'}}
> >
@ -98,7 +131,7 @@ class ActionView extends Component {
{ {
!gameBuilding && !gameBuilding &&
(game && !!game.prev_game) ? (game && !!game.prev_game) ?
<Link to={`/tasks/${game.prev_game}`} className={classes.buttonText}> <Link to={`/tasks/${game.prev_game}`} className={classes.buttonText + ' act_btn'}>
<Button size="small" className={classes.button}> <Button size="small" className={classes.button}>
上一关 上一关
</Button> </Button>
@ -108,7 +141,7 @@ class ActionView extends Component {
{/*未发布的都能跳转*/} {/*未发布的都能跳转*/}
{ !gameBuilding && { !gameBuilding &&
((game && (game.status === 2 || shixun.status < 2) || shixun && shixun.task_pass ) && !!game.next_game) ? ((game && (game.status === 2 || shixun.status < 2) || shixun && shixun.task_pass ) && !!game.next_game) ?
<Link to={`/tasks/${game.next_game}`} className={classes.buttonText}> <Link to={`/tasks/${game.next_game}`} className={classes.buttonText + ' act_btn'}>
<Button size="small" className={classes.button}> <Button size="small" className={classes.button}>
下一关 下一关
</Button> </Button>
@ -117,7 +150,7 @@ class ActionView extends Component {
<div id="code_test"> <div id="code_test" className="act_btn">
{ {
st === 1 && game.status === 2 ? st === 1 && game.status === 2 ?
<Tooltip title={ "已通关的选择题任务无法再次测评" }> <Tooltip title={ "已通关的选择题任务无法再次测评" }>

@ -14,13 +14,16 @@
min-width: 280px; min-width: 280px;
} }
#time-consuming .time_limit {
display: none;
}
.actionViewfirstButton { .actionViewfirstButton {
display: none !important; display: none !important;
} }
} }
@media (max-width: 800px) {
#time-consuming .time_limit {
display: none;
}
}
@media (max-width: 628px) { @media (max-width: 628px) {
.-header-right { display: none } .-header-right { display: none }
.exitBtn span { display: none } .exitBtn span { display: none }

@ -297,8 +297,13 @@ class DetailCardsEditAndAdd extends Component{
contentViewScrolladd=(e)=>{ contentViewScrolladd=(e)=>{
const {ChooseShixunList}=this.state;
//滑动到底判断 //滑动到底判断
if(e.currentTarget.scrollHeight-e.currentTarget.scrollTop===e.currentTarget.clientHeight){ if(e.currentTarget.scrollHeight-e.currentTarget.scrollTop===e.currentTarget.clientHeight){
if(ChooseShixunList.shixun_list.length===0){
return
}else{
// console.log("到达底部"); // console.log("到达底部");
this.setState({ this.setState({
hometypepvisible:true hometypepvisible:true
@ -334,6 +339,7 @@ class DetailCardsEditAndAdd extends Component{
console.log(error); console.log(error);
}) })
}
} }

@ -338,8 +338,12 @@ class DetailCardsEditAndEdit extends Component{
contentViewScrolledit=(e)=>{ contentViewScrolledit=(e)=>{
//滑动到底判断 //滑动到底判断
const {ChooseShixunList}=this.state;
if(e.currentTarget.scrollHeight-e.currentTarget.scrollTop===e.currentTarget.clientHeight){ if(e.currentTarget.scrollHeight-e.currentTarget.scrollTop===e.currentTarget.clientHeight){
if(ChooseShixunList.shixun_list.length===0){
return
}else{
this.setState({ this.setState({
hometypepvisible:true hometypepvisible:true
}) })
@ -383,6 +387,11 @@ class DetailCardsEditAndEdit extends Component{
console.log(error); console.log(error);
}) })
}
} }
} }

@ -475,7 +475,10 @@ export default class TPMevaluation extends Component {
} }
handpathoptionvalue=(value)=>{ handpathoptionvalue=(value)=>{
this.setState({ this.setState({
pathoptionvalue:value pathoptionvalue:value,
shixunfileexpectpicturepath:undefined,
shixunfilestandardpicturepath:undefined,
shixunfilepicturepath:undefined
}) })
} }
showrepositoryurltip=(type)=>{ showrepositoryurltip=(type)=>{
@ -640,19 +643,20 @@ export default class TPMevaluation extends Component {
let id = this.props.match.params.shixunId; let id = this.props.match.params.shixunId;
let{checkpointId}=this.state; let{checkpointId}=this.state;
let url = "/shixuns/"+id+"/challenges/"+checkpointId+".json"; let url = "/shixuns/"+id+"/challenges/"+checkpointId+".json";
axios.put(url,{ let newchallenge={
tab:1,
challenge:{
path:shixunfilepath, path:shixunfilepath,
exec_path:shixunfilepathplay, exec_path:shixunfilepathplay,
show_type:pathoptionvalue, show_type:pathoptionvalue,
original_picture_path:shixunfileexpectpicturepath, original_picture_path:pathoptionvalue===-1?undefined:shixunfileexpectpicturepath===undefined?null:shixunfileexpectpicturepath,
expect_picture_path:shixunfilestandardpicturepath, expect_picture_path:pathoptionvalue===-1?undefined:shixunfilestandardpicturepath===undefined?null:shixunfilestandardpicturepath,
picture_path:shixunfilepicturepath, picture_path:pathoptionvalue===-1?undefined:shixunfilepicturepath===undefined?null:shixunfilepicturepath,
test_set_score:newscorevalue, test_set_score:newscorevalue,
test_set_average:markvalue, test_set_average:markvalue,
web_route:web_route===null?undefined:web_route web_route:web_route===null?undefined:web_route
}, }
axios.put(url,{
tab:1,
challenge:newchallenge,
test_set:evaluationlist test_set:evaluationlist
} }
).then((response) => { ).then((response) => {

@ -2,5 +2,5 @@
if ( window.location.host == 'pre-newweb.educoder.net') { if ( window.location.host == 'pre-newweb.educoder.net') {
__webpack_public_path__ = 'https://testali-cdn.educoder.net/react/build/' __webpack_public_path__ = 'https://testali-cdn.educoder.net/react/build/'
} else if ( window.location.host == 'www.educoder.net') { } else if ( window.location.host == 'www.educoder.net') {
__webpack_public_path__ = 'https://ali-newweb.educoder.net/react/build/' __webpack_public_path__ = 'https://ali-cdn.educoder.net/react/build/'
} }

@ -448,7 +448,7 @@ table.text-file{}
/*-------------------------------实训路径-------------------------------*/ /*-------------------------------实训路径-------------------------------*/
.path-head{width: 100%;height: 300px;background-image: url("/images/educoder/path.png"); .path-head{width: 100%;height: 300px;background-image: url("/images/educoder/path.png");
background-color: #131b39; background-color: #000a4f;
/*background-size: cover;*/ /*background-size: cover;*/
background-position: center; background-position: center;
background-repeat: no-repeat; background-repeat: no-repeat;

Loading…
Cancel
Save