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

dev_cs_new
杨树林 6 years ago
commit 0919202427

@ -1,5 +1,5 @@
class ChallengesController < ApplicationController class ChallengesController < ApplicationController
before_action :require_login, :check_auth before_action :require_login, :check_auth, except: [:index]
before_action :find_shixun, only: [:new, :create, :index] before_action :find_shixun, only: [:new, :create, :index]
skip_before_action :verify_authenticity_token, only: [:create, :update, :create_choose_question, :crud_answer] skip_before_action :verify_authenticity_token, only: [:create, :update, :create_choose_question, :crud_answer]
before_action :find_challenge, only: [:edit, :show, :update, :create_choose_question, :index_down, :index_up, before_action :find_challenge, only: [:edit, :show, :update, :create_choose_question, :index_down, :index_up,

@ -49,30 +49,12 @@ class CoursesController < ApplicationController
@user = current_user @user = current_user
# 根据分类查询课堂(全部,我的,最新,最热) # 根据分类查询课堂(全部,我的,最新,最热)
@order = params[:order].present? ? params[:order] : "all" @order = params[:order].present? ? params[:order] : "all"
order_str = @order != "course_members_count" && @order != "created_at" ? "updated_at" : @order if @order == "visits"
order_str = "courses.id = 1309 DESC, courses.visits DESC"
# if @order == "all" @courses = Course.where(is_delete: 0, is_hidden: 0)
# @course = Course.where(is_delete: 0, is_hidden: 0).select("select c.name, c.id, s.name, u.login, ifnull(concat(u.lastname,u.firstname),
# u.login), s.name from courses c, users u, user_extensions ue, schools s where c.is_delete=0 and
# c.tea_id=u.id and u.id=ue.user_id and ue.school_id=s.id")
# @courses = Course.where(is_delete: 0, is_hidden: 0)
# .order("courses.id = 1309 desc, courses.created_at desc")
# @courses = Course.where(is_delete: 0, is_hidden: 0).select("courses.id, courses.tea_id, courses.name, courses.exercises_count, courses.polls_count,
# courses.is_public, courses.is_end, courses.visits, courses.course_members_count,courses.homework_commons_count,(SELECT MAX(created_at)
# FROM `course_activities` WHERE course_activities.course_id = courses.id) AS a")
# .order("courses.id = 1309 desc, a desc")
if @order == "mine"
tip_exception(401, "..") unless current_user.logged?
@courses = Course.joins(:course_members)
.where("is_delete = 0 AND is_hidden = 0 AND course_members.user_id = ?", @user.id).distinct
elsif @order == "created_at"
# REDO:Extension
@courses = Course.where(is_delete: 0, is_hidden: 0, is_end: 0).distinct
else else
# REDO:Extension order_str = "courses.id = 1309 DESC, courses.homepage_show DESC, courses.created_at desc"
@courses = Course.where(is_delete: 0, is_hidden: 0).distinct @courses = Course.where(is_delete: 0, is_hidden: 0, is_end: 0)
end end
# 根据搜索关键字进一步筛选 # 根据搜索关键字进一步筛选
@ -92,7 +74,7 @@ class CoursesController < ApplicationController
.where("#{sql}", keyword: "%#{params[:search]}%").distinct .where("#{sql}", keyword: "%#{params[:search]}%").distinct
end end
@courses_count = @courses.count("courses.id") @courses_count = @courses.count("courses.id")
@courses = @courses.order("courses.id = 1309 DESC, courses.#{order_str} DESC") @courses = @courses.order(order_str)
# 分页 # 分页
page = params[:page] || 1 page = params[:page] || 1

@ -1,5 +1,6 @@
class DiscussesController < ApplicationController class DiscussesController < ApplicationController
LIMIT = 10 LIMIT = 10
before_action :require_login, only: [:create, :reply, :hidden, :reward_code, :plus, :destroy]
before_action :find_container, only: [:index, :hidden] before_action :find_container, only: [:index, :hidden]
before_action :find_discuss, except: [:create, :index, :new_message, :reward_code, :forum_discusses, :plus] before_action :find_discuss, except: [:create, :index, :new_message, :reward_code, :forum_discusses, :plus]

@ -2,7 +2,8 @@ class ShixunsController < ApplicationController
include ShixunsHelper include ShixunsHelper
include ApplicationHelper include ApplicationHelper
before_action :require_login, :check_auth, except: [:download_file, :index, :menus] before_action :require_login, :check_auth, except: [:download_file, :index, :menus, :show, :show_right, :ranking_list,
:discusses, :collaborators, :fork_list, :propaedeutics]
before_action :check_account, only: [:new, :create, :shixun_exec] before_action :check_account, only: [:new, :create, :shixun_exec]

@ -1,5 +1,5 @@
class StagesController < ApplicationController class StagesController < ApplicationController
before_action :require_login, :check_auth before_action :require_login, :check_auth, except: [:index]
before_action :find_subject, only: [:create, :index] before_action :find_subject, only: [:create, :index]
before_action :find_stage, only: [:update, :destroy, :edit, :up_position, :down_position] before_action :find_stage, only: [:update, :destroy, :edit, :up_position, :down_position]
before_action :allowed, except: [:index] before_action :allowed, except: [:index]

@ -1,7 +1,7 @@
class SubjectsController < ApplicationController class SubjectsController < ApplicationController
before_action :require_login, :check_auth, except: [:index] before_action :require_login, :check_auth, except: [:index, :show]
# before_action :check_auth, except: [:index] # before_action :check_auth, except: [:index]
before_action :check_account, only: [:new, :create] before_action :check_account, except: [:index, :show]
before_action :find_subject, except: [:index, :create, :new, :append_to_stage] before_action :find_subject, except: [:index, :create, :new, :append_to_stage]
before_action :allowed, only: [:update, :edit, :destroy, :publish, :cancel_publish, :cancel_has_publish, before_action :allowed, only: [:update, :edit, :destroy, :publish, :cancel_publish, :cancel_has_publish,
:search_members, :add_subject_members, :statistics, :shixun_report, :school_report, :search_members, :add_subject_members, :statistics, :shixun_report, :school_report,

@ -16,7 +16,7 @@ class CoursesHome extends Component{
this.state = { this.state = {
limit:16, limit:16,
page:1, page:1,
order:"all", order:"created_at",
coursesHomelist:undefined, coursesHomelist:undefined,
search:"", search:"",
} }
@ -118,25 +118,25 @@ class CoursesHome extends Component{
</div> </div>
<div className="mt20 educontent mb20 clearfix"> <div className="mt20 educontent mb20 clearfix">
<a className={ order == "all" ? "fl mr20 font-16 bestChoose active" : "fl mr20 font-16 bestChoose"} {/*<a className={ order == "all" ? "fl mr20 font-16 bestChoose active" : "fl mr20 font-16 bestChoose"}*/}
onClick={ () => this.changeStatus("all")}>全部</a> {/*onClick={ () => this.changeStatus("all")}>全部</a>*/}
<a className={ order == "mine" ? "fl mr20 font-16 bestChoose active" : "fl mr20 font-16 bestChoose"} {/*<a className={ order == "mine" ? "fl mr20 font-16 bestChoose active" : "fl mr20 font-16 bestChoose"}*/}
onClick={ () => this.changeStatus("mine")}>我的</a> {/*onClick={ () => this.changeStatus("mine")}>我的</a>*/}
<a className={ order == "created_at" ? "fl mr20 font-16 bestChoose active" : "fl mr20 font-16 bestChoose"} <a className={ order == "created_at" ? "fl mr20 font-16 bestChoose active" : "fl mr20 font-16 bestChoose"}
onClick={ () => this.changeStatus("created_at")}>最新</a> onClick={ () => this.changeStatus("created_at")}>最新</a>
<a className={ order == "course_members_count" ? "fl mr20 font-16 bestChoose active" : "fl mr20 font-16 bestChoose"} <a className={ order == "visits" ? "fl mr20 font-16 bestChoose active" : "fl mr20 font-16 bestChoose"}
onClick={ () => this.changeStatus("course_members_count")}>最热</a> onClick={ () => this.changeStatus("visits")}>最热</a>
<div className="fr mr5 search-new"> {/*<div className="fr mr5 search-new">*/}
{/* <Search {/*/!* <Search*/}
placeholder="课堂名称/教师姓名/学校名称" {/*placeholder="课堂名称/教师姓名/学校名称"*/}
id="subject_search_input" {/*id="subject_search_input"*/}
value={search} {/*value={search}*/}
onInput={this.inputSearchValue} {/*onInput={this.inputSearchValue}*/}
onSearch={this.searchValue} {/*onSearch={this.searchValue}*/}
autoComplete="off" {/*autoComplete="off"*/}
></Search> */} {/*></Search> *!/*/}
</div> {/*</div>*/}
</div> </div>

@ -122,16 +122,20 @@ class PathModal extends Component{
contentViewScrolledit=(e)=>{ contentViewScrolledit=(e)=>{
//滑动到底判断 //滑动到底判断
const {shixunmodallist} = this.state;
if(e.currentTarget.scrollHeight-e.currentTarget.scrollTop===e.currentTarget.clientHeight){ if(e.currentTarget.scrollHeight-e.currentTarget.scrollTop===e.currentTarget.clientHeight){
let {Searchvalue,type,page,shixunpathlist}=this.state; if(shixunmodallist.subject_list.length===0){
let newpage=page+1 return;
this.funshixunpathlist(Searchvalue,type,true,newpage) }else{
this.setState({ let {Searchvalue,type,page,shixunpathlist}=this.state;
page:newpage let newpage=page+1
}) this.funshixunpathlist(Searchvalue,type,true,newpage)
this.setState({
page:newpage
})
}
} }
} }

@ -100,17 +100,21 @@ class ShixunModal extends Component{
} }
contentViewScrolledit=(e)=>{ contentViewScrolledit=(e)=>{
const {shixunmodallist}=this.state;
//滑动到底判断 //滑动到底判断
if(e.currentTarget.scrollHeight-e.currentTarget.scrollTop===e.currentTarget.clientHeight){ if(e.currentTarget.scrollHeight-e.currentTarget.scrollTop===e.currentTarget.clientHeight) {
let {Searchvalue,type,page}=this.state;
let newpage=page+1 if (shixunmodallist.shixun_list.length === 0) {
this.setupdatalist(Searchvalue,type,true,newpage) return;
this.setState({ } else {
page:newpage let {Searchvalue, type, page} = this.state;
}) let newpage = page + 1
} this.setupdatalist(Searchvalue, type, true, newpage)
this.setState({
page: newpage
})
}
}
} }
//搜索 //搜索

@ -477,9 +477,9 @@ a.white-btn.use_scope-btn:hover{
} }
.pathInfobox li{ .pathInfobox li{
margin-right: 20px; margin-right: 20px;
height: 15px; height: 20px;
/*overflow: hidden;*/ /*overflow: hidden;*/
line-height: 15px; line-height: 20px;
} }
.width70f{ .width70f{
width: 70px; width: 70px;

@ -783,7 +783,9 @@ class ShixunStudentWork extends Component {
<CheckboxGroup onChange={this.groupgroup} <CheckboxGroup onChange={this.groupgroup}
value={this.state.group_infolist} value={this.state.group_infolist}
style={{paddingTop: '4px'}}> style={{paddingTop: '4px',float: 'left',
maxWidth: '1020px'}}
>
{data&&data.group_info === undefined ? "" : data&&data.group_info.map((item, key) => { {data&&data.group_info === undefined ? "" : data&&data.group_info.map((item, key) => {
return ( return (
<span key={key}> <span key={key}>

@ -75,10 +75,15 @@ class ShixunWorkReport extends Component {
let homeworkid=this.props.match.params.homeworkid; let homeworkid=this.props.match.params.homeworkid;
let url = `/student_works/${homeworkid}/shixun_work_report.json` let url = `/student_works/${homeworkid}/shixun_work_report.json`
axios.get(url).then((result) => { axios.get(url).then((result) => {
if (result.data.status === 403||result.data.status === 401||result.data.status === 407||result.data.status === 408) {
}else{
this.setState({ this.setState({
data:result.data, data:result.data,
spinning:false spinning:false
}) })
}
}).catch((error) => { }).catch((error) => {
console.log(error) console.log(error)
this.setState({ this.setState({
@ -111,6 +116,8 @@ class ShixunWorkReport extends Component {
} }
render() { render() {
let{data} =this.state; let{data} =this.state;
console.log(data)
console.log(this.props)
let category_id=data===undefined?"":data.category===null?"":data.category.category_id; let category_id=data===undefined?"":data.category===null?"":data.category.category_id;
let homework_common_id=data===undefined?"":data.homework_common_id; let homework_common_id=data===undefined?"":data.homework_common_id;
let homeworkid=this.props.match.params.homeworkid; let homeworkid=this.props.match.params.homeworkid;

@ -195,7 +195,7 @@ class ShixunWorkModal extends Component{
// message:"提示", // message:"提示",
// description: response.data.message // description: response.data.message
// }); // });
this.props.history.replace(`/courses/${this.props.match.params.coursesId}/shixun_homeworks/${this.props.match.params.homeworkid}/student_work?tab=2`); window.location.href=`/courses/${this.props.match.params.coursesId}/shixun_homeworks/${this.props.match.params.homeworkid}/student_work?tab=2`;
}else if(response.data.status === -1){ }else if(response.data.status === -1){
notification.open({ notification.open({
message:"提示", message:"提示",

@ -193,12 +193,20 @@ class DetailCards extends Component{
} }
startgameid=(id)=>{ startgameid=(id)=>{
if(this.props.checkIfLogin()===false){
this.props.showLoginDialog()
return
}
if(this.props.current_user&&this.props.current_user.profile_completed===false){ if(this.props.current_user&&this.props.current_user.profile_completed===false){
this.setState({ this.setState({
AccountProfiletype:true AccountProfiletype:true
}) })
return return
} }
let url = "/shixuns/" + id + "/shixun_exec.json"; let url = "/shixuns/" + id + "/shixun_exec.json";
axios.get(url).then((response) => { axios.get(url).then((response) => {

@ -326,6 +326,15 @@ class PathDetailIndex extends Component{
return( return(
<div className="newContainer"> <div className="newContainer">
<style>
{
`
.head-right{
line-height: 30px;
}
`
}
</style>
<Modals <Modals
modalsType={Modalstype} modalsType={Modalstype}
modalsTopval={Modalstopval} modalsTopval={Modalstopval}
@ -417,7 +426,7 @@ class PathDetailIndex extends Component{
</div> </div>
} }
{ {
detailInfoList === undefined ? "" : detailInfoList.progress === null ? "" : this.props.checkIfLogin()===false?"":detailInfoList === undefined ? "" : detailInfoList.progress === null ? "" :
<div className="edu-back-white myProgress padding40-20 mb10"> <div className="edu-back-white myProgress padding40-20 mb10">
<p className="mb20"> <p className="mb20">
<span className="font-16 mr10">我的进展</span> <span className="font-16 mr10">我的进展</span>

@ -1,216 +1,213 @@
import React, { Component } from 'react'; import React, { Component } from 'react';
import { Modal,Checkbox,Input } from "antd"; import { Modal,Checkbox,Input } from "antd";
import axios from 'axios'; import axios from 'axios';
const Search = Input.Search; const Search = Input.Search;
const CheckboxGroup = Checkbox.Group; const CheckboxGroup = Checkbox.Group;
class addCollaborators extends Component{ class addCollaborators extends Component{
constructor(props){ constructor(props){
super(props); super(props);
this.state = { this.state = {
addPartner:false, addPartner:false,
page:1, page:1,
partnerList:undefined, partnerList:undefined,
search:'', search:'',
partnerListid:[], partnerListid:[],
checkAll: false, checkAll: false,
optionss:[] optionss:[]
} }
} }
addBox=()=>{ addBox=()=>{
this.setState({ this.setState({
addPartner:true, addPartner:true,
search:"", search:"",
page:1, page:1,
partnerList:undefined, partnerList:undefined,
optionss:[] optionss:[]
}) })
this.searchList("") this.searchList("")
} }
hideAddBox=()=>{ hideAddBox=()=>{
this.setState({ this.setState({
addPartner:false, addPartner:false,
optionss:[], optionss:[],
partnerListid:[] partnerListid:[]
}) })
} }
// 搜索框输入 // 搜索框输入
changeSearchValue=(e)=>{ changeSearchValue=(e)=>{
this.setState({ this.setState({
search: e.target.value search: e.target.value
}) })
} }
// 回车搜索--搜索成功后page为1 // 回车搜索--搜索成功后page为1
searchList=()=>{ searchList=()=>{
let id=this.props.match.params.pathId; let id=this.props.match.params.pathId;
let {search,page}=this.state; let {search,page}=this.state;
let url='/paths/'+id+'/search_members.json?search='+search+"&page="+page; let url='/paths/'+id+'/search_members.json?search='+search+"&page="+page;
axios.post(url).then((result)=>{ axios.post(url).then((result)=>{
if(result.status==200){ if(result.status==200){
let list=result.data.users; let list=result.data.users;
let optionss=[] let optionss=[]
for(var i=0; i<list.length;i++){ for(var i=0; i<list.length;i++){
optionss.push(list[i].user_id) optionss.push(list[i].user_id)
} }
this.setState({ this.setState({
partnerList:result.data.users, partnerList:result.data.users,
page:1, page:1,
optionss:optionss optionss:optionss
}) })
} }
}).catch((error)=>{ }).catch((error)=>{
console.log(error); console.log(error);
}) })
} }
SaveAddBox=()=>{ SaveAddBox=()=>{
let {partnerListid} =this.state; let {partnerListid} =this.state;
let id=this.props.match.params.pathId; let id=this.props.match.params.pathId;
let url="/paths/"+id+"/add_subject_members.json" let url="/paths/"+id+"/add_subject_members.json"
axios.post(url,{ axios.post(url,{
user_ids:partnerListid user_ids:partnerListid
}).then((response) => { }).then((response) => {
if(response.status==200){ if(response.status==200){
this.setState({ this.setState({
addPartner:false, addPartner:false,
optionss:[], optionss:[],
partnerListid:[] partnerListid:[]
}) })
this.props.updatadetailInfoLists(); this.props.updatadetailInfoLists();
} }
}).catch((error) => { }).catch((error) => {
console.log(error) console.log(error)
}); });
} }
addCollaboratorsid=(id)=>{ addCollaboratorsid=(id)=>{
this.setState({ this.setState({
partnerListid:id partnerListid:id
}) })
} }
onCheckAllChange = (e) => { onCheckAllChange = (e) => {
let {optionss} =this.state; let {optionss} =this.state;
if(e.target.checked===true){ if(e.target.checked===true){
this.setState({ this.setState({
checkAll: e.target.checked, checkAll: e.target.checked,
partnerListid:optionss partnerListid:optionss
}); });
}else{ }else{
this.setState({ this.setState({
checkAll: e.target.checked, checkAll: e.target.checked,
partnerListid:[] partnerListid:[]
}); });
} }
} }
contentViewScroll=(e)=>{ contentViewScroll=(e)=>{
//滑动到底判断 //滑动到底判断
if(e.currentTarget.scrollHeight-e.currentTarget.scrollTop===e.currentTarget.clientHeight){ if(e.currentTarget.scrollHeight-e.currentTarget.scrollTop===e.currentTarget.clientHeight){
// console.log("到达底部"); // console.log("到达底部");
let id=this.props.match.params.pathId; let id=this.props.match.params.pathId;
let {search,page,partnerList,optionss}=this.state; let {search,page,partnerList,optionss}=this.state;
let newpage=page+1; let newpage=page+1;
let url='/paths/'+id+'/search_members.json?search='+search+"&page="+newpage; let url='/paths/'+id+'/search_members.json?search='+search+"&page="+newpage;
axios.post(url).then((result)=>{ axios.post(url).then((result)=>{
if(result.status==200){ if(result.status==200){
let list=result.data.users; let list=result.data.users;
let newlist=partnerList; let newlist=partnerList;
for(var j=0; j<list.length;j++){ for(var j=0; j<list.length;j++){
newlist.push(list[j]) newlist.push(list[j])
} }
let newoptionss=optionss let newoptionss=optionss
for(var i=0; i<list.length;i++){ for(var i=0; i<list.length;i++){
newoptionss.push(list[i].user_id) newoptionss.push(list[i].user_id)
} }
this.setState({ this.setState({
partnerList:newlist, partnerList:newlist,
page:newpage, page:newpage,
optionss:optionss optionss:optionss
}) })
} }
}).catch((error)=>{ }).catch((error)=>{
console.log(error); console.log(error);
}) })
} }
} }
render(){ render(){
let {addPartner,search,partnerList,optionss,checkAll,partnerListid} = this.state; let {addPartner,search,partnerList,optionss,checkAll,partnerListid} = this.state;
return( return(
<div className="edu-back-white bor-top-greyE addTeamMember"> this.props.detailInfoList===undefined?"":this.props.detailInfoList.allow_add_member===true?
{ <div className="edu-back-white bor-top-greyE addTeamMember">
this.props.detailInfoList===undefined?"":this.props.detailInfoList.allow_add_member===true? <a onClick = {this.addBox} className="color-blue">+ 添加合作者</a>
<a onClick = {this.addBox} className="color-blue">+ 添加合作者</a> <Modal
:"" keyboard={false}
} title="添加合作者"
visible={addPartner}
<Modal closable={false}
keyboard={false} footer={null}
title="添加合作者" destroyOnClose={true}
visible={addPartner} >
closable={false} <div className="newupload_conbox clearfix">
footer={null} <div className="mb20">
destroyOnClose={true} <Search placeholder="输入用户的真实姓名进行搜索" id="search_not_collaborators" style={{"width":"100%"}}
> autocomplete="off"
<div className="newupload_conbox clearfix"> value={search}
<div className="mb20"> onInput={this.changeSearchValue}
<Search placeholder="输入用户的真实姓名进行搜索" id="search_not_collaborators" style={{"width":"100%"}} onSearch={search => this.searchList(search)} />
autocomplete="off" </div>
value={search} <p className="clearfix pt10 pl10 pr10" style={{"background":"#F4FAFF","marginBottom":"0px"}}>
onInput={this.changeSearchValue} <Checkbox className="fl"
onSearch={search => this.searchList(search)} /> onChange={this.onCheckAllChange}
</div> checked={this.state.checkAll}
<p className="clearfix pt10 pl10 pr10" style={{"background":"#F4FAFF","marginBottom":"0px"}}> ></Checkbox>
<Checkbox className="fl" <span className="span1 fl edu-txt-w80 task-hide font-bd">姓名</span>
onChange={this.onCheckAllChange} <span className="span3 fl edu-txt-w80 task-hide font-bd">昵称</span>
checked={this.state.checkAll} <span className="span2 fl edu-txt-w80 task-hide font-bd">职位</span>
></Checkbox> <span className="span3 fl edu-txt-w260 task-hide font-bd">单位</span>
<span className="span1 fl edu-txt-w80 task-hide font-bd">姓名</span> </p>
<span className="span3 fl edu-txt-w80 task-hide font-bd">昵称</span> <ul className="upload_select_box fl clearfix mb15"
<span className="span2 fl edu-txt-w80 task-hide font-bd">职位</span> style={{"overflow-y":"auto"}}
<span className="span3 fl edu-txt-w260 task-hide font-bd">单位</span> id="search_not_members_list"
</p>
<ul className="upload_select_box fl clearfix mb15" onScroll={this.contentViewScroll}
style={{"overflow-y":"auto"}} >
id="search_not_members_list" <CheckboxGroup style={{ width: '100%' }} value={checkAll===true?optionss:partnerListid} onChange={this.addCollaboratorsid}>
{
onScroll={this.contentViewScroll} partnerList && partnerList.map((item,key)=>{
> return(
<CheckboxGroup style={{ width: '100%' }} value={checkAll===true?optionss:partnerListid} onChange={this.addCollaboratorsid}> <li className="clearfix">
{ <Checkbox value={item.user_id} key={key} className="fl"></Checkbox>
partnerList && partnerList.map((item,key)=>{ <a target="_blank" className="task-hide color-grey3 fl span1 edu-txt-w80">{item.user_name}</a>
return( <span className="task-hide fl color-grey edu-txt-w80 span2">{item.nickname}</span>
<li className="clearfix"> <span className="task-hide fl color-grey edu-txt-w80 span2">{item.identity}</span>
<Checkbox value={item.user_id} key={key} className="fl"></Checkbox> <span className="span3 color-grey fl edu-txt-w260 task-hide">{item.school_name}</span>
<a target="_blank" className="task-hide color-grey3 fl span1 edu-txt-w80">{item.user_name}</a> </li>
<span className="task-hide fl color-grey edu-txt-w80 span2">{item.nickname}</span> )
<span className="task-hide fl color-grey edu-txt-w80 span2">{item.identity}</span> })
<span className="span3 color-grey fl edu-txt-w260 task-hide">{item.school_name}</span> }
</li> </CheckboxGroup>
) </ul>
}) <div className="mt20 marginauto clearfix edu-txt-center">
} <a onClick={this.hideAddBox} className="pop_close task-btn mr30">取消</a>
</CheckboxGroup> <a className="task-btn task-btn-orange" onClick={this.SaveAddBox} id="submit_send_shixun">确定</a>
</ul> </div>
<div className="mt20 marginauto clearfix edu-txt-center"> </div>
<a onClick={this.hideAddBox} className="pop_close task-btn mr30">取消</a> </Modal>
<a className="task-btn task-btn-orange" onClick={this.SaveAddBox} id="submit_send_shixun">确定</a> </div>:""
</div>
</div> )
</Modal> }
</div> }
)
}
}
export default addCollaborators; export default addCollaborators;

@ -14,7 +14,7 @@ class ShixunPathSearch extends Component{
constructor(props) { constructor(props) {
super(props) super(props)
this.state = { this.state = {
order:"publish_time", order:"updated_at",
select:0, select:0,
search:"", search:"",
page:1, page:1,
@ -126,20 +126,20 @@ class ShixunPathSearch extends Component{
</div> </div>
</div> </div>
<div className="mt20 educontent mb20 clearfix"> <div className="mt20 educontent mb20 clearfix">
<a href="javascript:void(0)" className={ order == "publish_time" ? "fl mr20 font-16 bestChoose active" : "fl mr20 font-16 bestChoose"} onClick={ () => this.changeStatus("publish_time")}>全部</a> {/*<a href="javascript:void(0)" className={ order == "publish_time" ? "fl mr20 font-16 bestChoose active" : "fl mr20 font-16 bestChoose"} onClick={ () => this.changeStatus("publish_time")}>全部</a>*/}
<a href="javascript:void(0)" className={ order == "mine" ? "fl mr20 font-16 bestChoose active" : "fl mr20 font-16 bestChoose"} onClick={ () => this.changeStatus("mine")}>我的</a> {/*<a href="javascript:void(0)" className={ order == "mine" ? "fl mr20 font-16 bestChoose active" : "fl mr20 font-16 bestChoose"} onClick={ () => this.changeStatus("mine")}>我的</a>*/}
<a href="javascript:void(0)" className={ order == "updated_at" ? "fl mr20 font-16 bestChoose active" : "fl mr20 font-16 bestChoose"} onClick={ () => this.changeStatus("updated_at")}>最新</a> <a className={ order == "updated_at" ? "fl mr20 font-16 bestChoose active" : "fl mr20 font-16 bestChoose"} onClick={ () => this.changeStatus("updated_at")}>最新</a>
<a href="javascript:void(0)" className={ order == "myshixun_count" ? "fl mr20 font-16 bestChoose active" : "fl mr20 font-16 bestChoose"} onClick={ () => this.changeStatus("myshixun_count")}>最热</a> <a className={ order == "myshixun_count" ? "fl mr20 font-16 bestChoose active" : "fl mr20 font-16 bestChoose"} onClick={ () => this.changeStatus("myshixun_count")}>最热</a>
<div className="fr mr5 search-new"> {/*<div className="fr mr5 search-new">*/}
{/* <Search {/*/!* <Search*/}
placeholder="请输入路径名称进行搜索" {/*placeholder="请输入路径名称进行搜索"*/}
id="subject_search_input" {/*id="subject_search_input"*/}
value={search} {/*value={search}*/}
onInput={this.inputSearchValue} {/*onInput={this.inputSearchValue}*/}
onSearch={this.searchValue} {/*onSearch={this.searchValue}*/}
autoComplete="off" {/*autoComplete="off"*/}
></Search> */} {/*></Search> *!/*/}
</div> {/*</div>*/}
</div> </div>
<PathCard {...this.props} {...this.state}></PathCard> <PathCard {...this.props} {...this.state}></PathCard>
{ {

@ -8,7 +8,7 @@ import PropTypes from 'prop-types';
// /images/educoder/icon/search.svg // /images/educoder/icon/search.svg
import { getImageUrl, toPath } from 'educoder' import { getImageUrl, toPath ,trigger,broadcastChannelPostMessage} from 'educoder'
import axios from 'axios'; import axios from 'axios';
@ -30,8 +30,6 @@ import 'antd/lib/input/style/index.css';
import './TPMIndex.css'; import './TPMIndex.css';
import { trigger, broadcastChannelPostMessage } from 'educoder';
const $ = window.$ const $ = window.$
// TODO 这部分脚本从公共脚本中直接调用 // TODO 这部分脚本从公共脚本中直接调用
@ -316,6 +314,7 @@ class NewHeader extends Component {
// this.setState({ // this.setState({
// isRender:true // isRender:true
// }) // })
broadcastChannelPostMessage('refreshPage')
window.location.href = "/"; window.location.href = "/";
} }
}).catch((error) => { }).catch((error) => {

@ -172,7 +172,17 @@ class TPMBanner extends Component {
* 发送至按钮 * 发送至按钮
* */ * */
Senttothe=()=>{ Senttothe=()=>{
let id = this.props.match.params.shixunId; if(this.props.checkIfLogin()===false){
this.props.showLoginDialog()
return
}
if(this.props.current_user&&this.props.current_user.profile_completed===false){
this.setState({
AccountProfiletype:true
})
return
}
let id = this.props.match.params.shixunId;
let url="/shixuns/" + id +"/search_user_courses.json"; let url="/shixuns/" + id +"/search_user_courses.json";
this.setState({ this.setState({
Senttothetype:true Senttothetype:true
@ -384,6 +394,11 @@ class TPMBanner extends Component {
//开始实战按钮 //开始实战按钮
startshixunCombat=(id, reset)=>{ startshixunCombat=(id, reset)=>{
if(this.props.checkIfLogin()===false){
this.props.showLoginDialog()
return
}
if(this.props.current_user&&this.props.current_user.profile_completed===false){ if(this.props.current_user&&this.props.current_user.profile_completed===false){
this.setState({ this.setState({
AccountProfiletype:true AccountProfiletype:true

@ -220,6 +220,13 @@ class Challenges extends Component {
//开始实战按钮 //开始实战按钮
startshixunCombat = (type, ids, id) => { startshixunCombat = (type, ids, id) => {
if(this.props.checkIfLogin()===false){
this.props.showLoginDialog()
return
}
if(this.props.current_user&&this.props.current_user.profile_completed===false){ if(this.props.current_user&&this.props.current_user.profile_completed===false){
this.setState({ this.setState({
AccountProfiletype:true AccountProfiletype:true
@ -227,7 +234,7 @@ class Challenges extends Component {
return return
} }
debugger
let { ChallengesDataList } = this.state; let { ChallengesDataList } = this.state;
// let id = this.props.match.params.shixunId; // let id = this.props.match.params.shixunId;
this.setState({ this.setState({

@ -166,16 +166,16 @@ class ShixunCardList extends Component {
<div className="educontent mt20"> <div className="educontent mt20">
<div className="clearfix"> <div className="clearfix">
<div className="fl mr20 font-16 bestChoose shixun_repertoire active" {/*<div className="fl mr20 font-16 bestChoose shixun_repertoire active"*/}
id={"all"} {/*id={"all"}*/}
onClick={(e)=>this.latestHot(e,1)}>全部 {/*onClick={(e)=>this.latestHot(e,1)}>全部*/}
</div> {/*</div>*/}
<div className="fl mr20 font-16 bestChoose shixun_repertoire" {/*<div className="fl mr20 font-16 bestChoose shixun_repertoire"*/}
id={mine} {/*id={mine}*/}
onClick={(e)=>this.onSwitchChange(e,2)}>我的 {/*onClick={(e)=>this.onSwitchChange(e,2)}>我的*/}
</div> {/*</div>*/}
<div className="fl mr20 font-16 bestChoose shixun_repertoire" <div className="fl mr20 font-16 bestChoose shixun_repertoire active"
id="new" id="new"
onClick={(e)=>this.latestHot(e,4)}>最新 onClick={(e)=>this.latestHot(e,4)}>最新
</div> </div>
@ -186,26 +186,26 @@ class ShixunCardList extends Component {
</div> </div>
<div className="fl font-16 bestChoose shixun_repertoire ml20 mt1" {/*<div className="fl font-16 bestChoose shixun_repertoire ml20 mt1"*/}
style={{display:upcircle===true?"block":"none"}} {/*style={{display:upcircle===true?"block":"none"}}*/}
// onClick={()=>this.upcircles("asc")} {/*// onClick={()=>this.upcircles("asc")}*/}
> {/*>*/}
<Tooltip placement="bottom" title={"升序"}> {/*<Tooltip placement="bottom" title={"升序"}>*/}
<Icon type="up-circle" theme="twoTone" /> {/*<Icon type="up-circle" theme="twoTone" />*/}
{/*<Icon type="sort-descending" />*/} {/*/!*<Icon type="sort-descending" />*!/*/}
</Tooltip> {/*</Tooltip>*/}
</div> {/*</div>*/}
<div className="fl font-16 bestChoose shixun_repertoire ml20 mt1" {/*<div className="fl font-16 bestChoose shixun_repertoire ml20 mt1"*/}
// onClick={()=>this.upcircles("desc")} {/*// onClick={()=>this.upcircles("desc")}*/}
style={{display:upcircle===true?"none":"block"}} {/*style={{display:upcircle===true?"none":"block"}}*/}
> {/*>*/}
<Tooltip placement="bottom" title={"降序"}> {/*<Tooltip placement="bottom" title={"降序"}>*/}
<Icon type="down-circle" theme="twoTone" /> {/*<Icon type="down-circle" theme="twoTone" />*/}
{/*<Icon type="sort-ascending" />*/} {/*/!*<Icon type="sort-ascending" />*!/*/}
</Tooltip> {/*</Tooltip>*/}
</div> {/*</div>*/}
<div className="fr mt3"> {/*<div className="fr mt3">*/}
{/*<Search*/} {/*<Search*/}
{/*style={{ width: 300 }}*/} {/*style={{ width: 300 }}*/}
{/*className="search-new-input fl"*/} {/*className="search-new-input fl"*/}
@ -225,11 +225,11 @@ class ShixunCardList extends Component {
onSearch={value => this.Input_search(value)} onSearch={value => this.Input_search(value)}
autoComplete="off" autoComplete="off"
></Search> */} ></Search> */}
</div> {/*</div>*/}
<div className="fr"> {/*<div className="fr">*/}
<span className="fl color-grey-6 mr30 font-16 mt5" id="search_name">{ {/*<span className="fl color-grey-6 mr30 font-16 mt5" id="search_name">{*/}
this.props.search_tags === null ? "" : this.props.search_tags {/*this.props.search_tags === null ? "" : this.props.search_tags*/}
}</span> {/*}</span>*/}
{/*<div className="fl mr5" style={{marginTop:'1px'}}>*/} {/*<div className="fl mr5" style={{marginTop:'1px'}}>*/}
{/*/!* <div className="controlblue"></div>*/} {/*/!* <div className="controlblue"></div>*/}
{/*<span className="controlring"></span> *!/*/} {/*<span className="controlring"></span> *!/*/}
@ -242,8 +242,8 @@ class ShixunCardList extends Component {
{/*</div>*/} {/*</div>*/}
{/*<span className="fl font-16 cdefault" data-tip-down="隐藏我学习的实训">隐藏我的</span>*/} {/*<span className="fl font-16 cdefault" data-tip-down="隐藏我学习的实训">隐藏我的</span>*/}
</div> {/*</div>*/}
<span className="fr color-grey-6 mr30 font-16" id="search_name"></span> {/*<span className="fr color-grey-6 mr30 font-16" id="search_name"></span>*/}
</div> </div>
</div> </div>
); );

@ -28,7 +28,7 @@ class ShixunsIndex extends Component {
constructor(props) { constructor(props) {
super(props) super(props)
this.state={ this.state={
order_by: "publish_time", order_by: "new",
page:1, page:1,
limit:16, limit:16,
keyword:"", keyword:"",

Loading…
Cancel
Save