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

dev_cs
cxt 5 years ago
commit 04990ec0ba

Binary file not shown.

Before

Width:  |  Height:  |  Size: 22 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 22 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 22 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 22 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 22 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 19 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 867 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 867 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 867 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 867 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 867 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 867 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 1.0 MiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 1.0 MiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 1.0 MiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 1.0 MiB

1
.gitignore vendored

@ -59,6 +59,7 @@ vendor/bundle/
.ruby-version
.ruby-gemset
/Users
/files
/public/images/avatars
/public/files

@ -21,9 +21,9 @@ module GitHelper
content = Base64.decode64(content)
cd = CharDet.detect(content)
Rails.logger.info "encoding: #{cd['encoding']} confidence: #{cd['confidence']}"
# 字符编码问题GB18030编码识别率不行
decode_content =
if cd["encoding"] == 'GB18030' && cd['confidence'] > 0.8
if cd["encoding"] == 'GB18030' && cd['confidence'] == 1.0
content.encode('UTF-8', 'GBK', {:invalid => :replace, :undef => :replace, :replace => ' '})
else
content.force_encoding('UTF-8')

@ -474,10 +474,12 @@ class ShixunsController < ApplicationController
ShixunSchool.create!(arr)
end
# 超级管理员和运营人员才能保存 中间层服务器pod信息的配置
if current_user.admin? || current_user.business?
# 如果镜像改动了,则也需要更改
mirror = @shixun.shixun_service_configs.map(&:mirror_repository_id).sort
new_mirror = params[:shixun_service_configs].map{|c| c[:mirror_repository_id]}.sort
if current_user.admin? || current_user.business? || (mirror != new_mirror)
@shixun.shixun_service_configs.destroy_all
service_config_params[:shixun_service_configs].each do |config|
logger.info("####{config[:mirror_repository_id]}")
name = MirrorRepository.find_by_id(config[:mirror_repository_id])&.name
# 不保存没有镜像的配置
@shixun.shixun_service_configs.create!(config) if name.present?

@ -106,7 +106,7 @@ a.decoration{text-decoration: underline}
.mr3{margin-right: 3px}.mr4{margin-right: 4px}.mr5{ margin-right: 5px;}.mr8{ margin-right: 8px;}.mr10{ margin-right: 10px;}.mr12{ margin-right:12px!important;}.mr15{ margin-right: 15px;}.mr18{ margin-right: 18px;}.mr20{ margin-right: 20px;}.mr24{ margin-right: 24px;}.mr25{ margin-right: 25px;}.mr30{ margin-right:30px;}.mr35{margin-right:35px;}.mr40{margin-right:40px;}.mr45{margin-right:45px;}.mr50{ margin-right: 50px;}.mr60{ margin-right:60px;}.mr70{ margin-right: 70px;}.mr75{ margin-right: 75px;}.mr80{ margin-right:80px;}.mr90{ margin-right:90px;}.mr100{ margin-right: 100px;}.mr110{ margin-right:110px;}.mr350{ margin-right:350px;}
.pt1{ padding-top:1px;}.pt3{ padding-top:3px!important;}.pt5{ padding-top:5px!important;}.pt10{ padding-top:10px;}.pt15{ padding-top:15px;}.pt17{ padding-top:17px;}.pt20{ padding-top:20px!important;}.pt25{ padding-top:25px;}.pt30{ padding-top:30px;}.pt35{ padding-top:35px;}.pt37{ padding-top:37px;}.pt40{ padding-top:40px;}.pt47{ padding-top:47px;}.pt49{ padding-top:49px;}.pt50{ padding-top:50px;}.pt60{ padding-top:60px;}.pt70{ padding-top:70px;}.pt80{ padding-top:80px;}.pt90{ padding-top:90px;}.pt100{padding-top:100px;}.pt110{ padding-top:110px;}.pt120{ padding-top:120px;}.pt130{padding-top:130px;}
.pb3{ padding-bottom:3px!important;}.pb5{ padding-bottom:5px!important;}.pb10{ padding-bottom:10px;}.pb15{ padding-bottom:15px;}.pb20{ padding-bottom:20px;}.pb25{ padding-bottom:20px;}.pb25{ padding-bottom:20px;}.pb30{ padding-bottom:30px;}.pb35{ padding-bottom:35px;}.pb40{ padding-bottom:40px;}.pb47{ padding-bottom:47px;}.pb50{ padding-bottom:50px;}.pb60{ padding-bottom:60px;}.pb70{ padding-bottom:70px;}.pb80{ padding-bottom:80px;}.pb90{ padding-bottom:90px;}.pb100{ padding-bottom:100px;}.pb110{ padding-bottom:110px;}.pb155{ padding-bottom:155px;}
.pb3{ padding-bottom:3px!important;}.pb5{ padding-bottom:5px!important;}.pb10{ padding-bottom:10px;}.pb15{ padding-bottom:15px;}.pb20{ padding-bottom:20px;}.pb25{ padding-bottom:20px;}.pb25{ padding-bottom:20px;}.pb28{ padding-bottom:28px;}.pb30{ padding-bottom:30px;}.pb35{ padding-bottom:35px;}.pb40{ padding-bottom:40px;}.pb47{ padding-bottom:47px;}.pb50{ padding-bottom:50px;}.pb60{ padding-bottom:60px;}.pb70{ padding-bottom:70px;}.pb80{ padding-bottom:80px;}.pb90{ padding-bottom:90px;}.pb100{ padding-bottom:100px;}.pb110{ padding-bottom:110px;}.pb155{ padding-bottom:155px;}
.pr2{ paddding-right:2px;}.pr5{ padding-right:5px;}.pr10{ padding-right:10px;}.pr15{ padding-right:15px;}.pr20{ padding-right:20px!important;}.pr30{ padding-right:30px!important;}.pr35{ padding-right:35px!important;}.pr42{ padding-right:42px;}.pr45{ padding-right:45px;}.pr48{ padding-right:48px;}.pr57{ padding-right:57px;}.pr60{ padding-right:60px;}.pr70{ padding-right:70px;}.pr72{ padding-right:72px;}.pr75{ padding-right:75px;}.pr88{ padding-right:88px;}
.pl0{ padding-left:0px!important;}.pl2{ padding-left:2px;}.pl5{ padding-left:5px;}.pl7{ padding-left:7px;}.pl8{ padding-left:8px;}.pl10{ padding-left:10px;}.pl15{ padding-left:15px;}.pl20{ padding-left:20px;}.pl22{ padding-left:22px;}.pl25{ padding-left:25px;}.pl28{ padding-left:28px;}.pl30{ padding-left:30px !important;}.pl33{padding-left: 33px}.pl35{ padding-left:35px;}.pl40{ padding-left:40px;}.pl42{ padding-left:42px;}.pl45{ padding-left:45px;}.pl50{ padding-left:50px;}.pl60{ padding-left:60px;}.pl70{padding-left:70px;}.pl75{padding-left:75px;}.pl80{padding-left:80px;}.pl88{ padding-left:88px;}.pl92{padding-left:92px;}.pl100{ padding-left:100px;}

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

@ -116,7 +116,7 @@ a:hover.link-color-grey03{color:#3498db!important;}
.mr3{margin-right: 3px}.mr4{margin-right: 4px}.mr5{ margin-right: 5px;}.mr8{ margin-right: 8px;}.mr10{ margin-right: 10px;}.mr12{ margin-right:12px!important;}.mr15{ margin-right: 15px;}.mr18{ margin-right: 18px;}.mr20{ margin-right: 20px;}.mr25{ margin-right: 25px;}.mr30{ margin-right:30px;}.mr35{margin-right:35px;}.mr40{margin-right:40px;}.mr45{margin-right:45px;}.mr50{ margin-right: 50px;}.mr60{ margin-right:60px;}.mr350{ margin-right:350px;}.pt5{ padding-top:5px;}.pt10{ padding-top:10px;}.pt15{ padding-top:15px;}.pt20{ padding-top:20px;}.pt30{ padding-top:30px;}.pt40{ padding-top:40px;}.pt47{ padding-top:47px;}.pt100{padding-top:100px;}.pt130{padding-top:130px;}
.pt1{ padding-top:1px;}.pt5{ padding-top:5px;}.pt10{ padding-top:10px;}.pt15{ padding-top:15px;}.pt20{ padding-top:20px;}.pt30{ padding-top:30px;}.pt40{ padding-top:40px;}
.pb5{ padding-bottom:5px;}.pb10{ padding-bottom:10px;}.pb15{ padding-bottom:15px;}.pb20{ padding-bottom:20px;}.pb30{ padding-bottom:30px;}.pb40{ padding-bottom:40px;}.pb47{ padding-bottom:47px;}.pb50{ padding-bottom:50px;}.pb155{ padding-bottom:155px;}
.pb5{ padding-bottom:5px;}.pb10{ padding-bottom:10px;}.pb15{ padding-bottom:15px;}.pb20{ padding-bottom:20px;}.pb28{ padding-bottom:28px;}.pb30{ padding-bottom:30px;}.pb40{ padding-bottom:40px;}.pb47{ padding-bottom:47px;}.pb50{ padding-bottom:50px;}.pb155{ padding-bottom:155px;}
.pl2{ padding-left:2px;}.pl5{ padding-left:5px;}.pl8{ padding-left:8px;}.pl10{ padding-left:10px;}.pl15{ padding-left:15px;}.pl20{ padding-left:20px;}.pl28{ padding-left:28px;}.pl30{ padding-left:30px;}.pl33{padding-left: 33px}.pl40{ padding-left:40px;}.pl42{ padding-left:42px;}.pl45{ padding-left:45px;}.pl50{ padding-left:50px;}.pl100{ padding-left:100px;}.pl35{ padding-left:35px;}.pl50{padding-left:50px;}.pl70{padding-left:70px;}.pl80{padding-left:80px;}.pl92{padding-left:92px;}
.pr2{ paddding-right:2px;}.pr5{ padding-right:5px;}.pr10{ padding-right:10px;}.pr15{ padding-right:15px;}.pr20{ padding-right:20px!important;}.pr30{ padding-right:30px!important;}.pr42{ padding-right:42px;}.pr45{ padding-right:45px;}

@ -116,7 +116,7 @@ a:hover.link-color-grey03{color:#3498db!important;}
.mr3{margin-right: 3px}.mr4{margin-right: 4px}.mr5{ margin-right: 5px;}.mr8{ margin-right: 8px;}.mr10{ margin-right: 10px;}.mr12{ margin-right:12px!important;}.mr15{ margin-right: 15px;}.mr18{ margin-right: 18px;}.mr20{ margin-right: 20px;}.mr25{ margin-right: 25px;}.mr30{ margin-right:30px;}.mr35{margin-right:35px;}.mr40{margin-right:40px;}.mr45{margin-right:45px;}.mr50{ margin-right: 50px;}.mr60{ margin-right:60px;}.mr350{ margin-right:350px;}.pt5{ padding-top:5px;}.pt10{ padding-top:10px;}.pt15{ padding-top:15px;}.pt20{ padding-top:20px;}.pt30{ padding-top:30px;}.pt40{ padding-top:40px;}.pt47{ padding-top:47px;}.pt100{padding-top:100px;}.pt130{padding-top:130px;}
.pt1{ padding-top:1px;}.pt5{ padding-top:5px;}.pt10{ padding-top:10px;}.pt15{ padding-top:15px;}.pt20{ padding-top:20px;}.pt30{ padding-top:30px;}.pt40{ padding-top:40px;}
.pb5{ padding-bottom:5px;}.pb10{ padding-bottom:10px;}.pb15{ padding-bottom:15px;}.pb20{ padding-bottom:20px;}.pb30{ padding-bottom:30px;}.pb40{ padding-bottom:40px;}.pb47{ padding-bottom:47px;}.pb50{ padding-bottom:50px;}.pb155{ padding-bottom:155px;}
.pb5{ padding-bottom:5px;}.pb10{ padding-bottom:10px;}.pb15{ padding-bottom:15px;}.pb20{ padding-bottom:20px;}.pb28{ padding-bottom:28px;}.pb30{ padding-bottom:30px;}.pb40{ padding-bottom:40px;}.pb47{ padding-bottom:47px;}.pb50{ padding-bottom:50px;}.pb155{ padding-bottom:155px;}
.pl2{ padding-left:2px;}.pl5{ padding-left:5px;}.pl8{ padding-left:8px;}.pl10{ padding-left:10px;}.pl15{ padding-left:15px;}.pl20{ padding-left:20px;}.pl28{ padding-left:28px;}.pl30{ padding-left:30px;}.pl33{padding-left: 33px}.pl40{ padding-left:40px;}.pl42{ padding-left:42px;}.pl45{ padding-left:45px;}.pl50{ padding-left:50px;}.pl100{ padding-left:100px;}.pl35{ padding-left:35px;}.pl50{padding-left:50px;}.pl70{padding-left:70px;}.pl80{padding-left:80px;}.pl92{padding-left:92px;}
.pr2{ paddding-right:2px;}.pr5{ padding-right:5px;}.pr10{ padding-right:10px;}.pr15{ padding-right:15px;}.pr20{ padding-right:20px!important;}.pr30{ padding-right:30px!important;}.pr42{ padding-right:42px;}.pr45{ padding-right:45px;}

@ -54,6 +54,7 @@ html, body {
/* md多空格 */
.markdown-body p {
white-space: pre-wrap;
font-size: 16px!important
}
.markdown-body > p {
line-height: 25px;

@ -1,10 +1,10 @@
const isDev = window.location.port == 3007;
export const TEST_HOST = "https://pre-newweb.educoder.net"
export const TEST_HOST = "https://test-newweb.educoder.net"
export function getImageUrl(path) {
// https://www.educoder.net
// https://testbdweb.trustie.net
// const local = 'http://localhost:3000'
const local = 'https://pre-newweb.educoder.net'
const local = 'https://test-newweb.educoder.net'
if (isDev) {
return `${local}/${path}`
}
@ -12,7 +12,7 @@ export function getImageUrl(path) {
}
export function setImagesUrl(path){
const local = 'https://pre-newweb.educoder.net'
const local = 'https://test-newweb.educoder.net'
let firstStr=path.substr(0,1);
// console.log(firstStr);
if(firstStr=="/"){
@ -31,7 +31,7 @@ export function getUrl(path, goTest) {
// testbdweb.educoder.net testbdweb.trustie.net
// const local = goTest ? 'https://testeduplus2.educoder.net' : 'http://localhost:3000'
// const local = 'https://testeduplus2.educoder.net'
const local = 'https://pre-newweb.educoder.net'
const local = 'https://test-newweb.educoder.net'
if (isDev) {
return `${local}${path?path:''}`
}

@ -296,11 +296,11 @@ class CoursesIndex extends Component{
componentDidMount(){
// this.updataleftNav()
this.historyArray = [location.pathname];
this.historyArray = [window.location.pathname];
this.props.history.listen( location => {
console.log(location);
this.historyArray.unshift(location.pathname);
this.historyArray.unshift(window.location.pathname);
this.historyArray.length = 2;
//Do your stuff here
});

@ -77,9 +77,21 @@ class ListPageIndex extends Component{
super(props);
this.state={
yslGuideone:undefined,
yslElearning:false,
}
}
comyslElearning(bool){
if(bool===true){
this.setState({
yslElearning:true,
})
}else {
this.setState({
yslElearning:false,
})
}
}
componentDidMount(){
console.log("77");
var yslGuideone = window.localStorage.getItem('yslGuideone');
@ -175,7 +187,7 @@ class ListPageIndex extends Component{
{/*left_nav*/}
<div className={"with22 fl setleft"} style={{width:'264px',minHeight:'500px'}}>
<Coursesleftnav {...this.props} {...this.state}/>
<Coursesleftnav {...this.props} {...this.state} comyslElearning={(i)=>this.comyslElearning(i)}/>
</div>
{/*right_concent*/}
@ -258,7 +270,7 @@ class ListPageIndex extends Component{
<Route
path="/courses/:coursesId/online_learning"
render={
(props) => (<Elearning {...this.props} {...props} {...this.state} />)
(props) => (<Elearning {...this.props} {...props} {...this.state} comyslElearning={(i)=>this.comyslElearning(i)} />)
}
>
</Route>

@ -6,6 +6,7 @@ import { DragDropContext,Draggable, Droppable} from 'react-beautiful-dnd';
import Modals from '../../modals/Modals';
import { on, off, trigger } from 'educoder';
import './MainLeftNav.css';
import MyEduChapterupdate from './MyEduChapterupdate';
const CheckboxGroup = Checkbox.Group;
@ -57,7 +58,8 @@ class Coursesleftnav extends Component{
toopvisible:false,
toopvisibleindex:undefined,
sandiantypes:undefined,
antIcon:false
antIcon:false,
chapterupdate:false,
}
}
@ -755,7 +757,15 @@ class Coursesleftnav extends Component{
{/*分班*/}
{/*{item.type==="course_group"? :""}*/}
<div onClick={e=>this.Navmodalnames(e,3,"editname",item.id,item.name)}>重命名</div>
{/*online_learning*/}
{/*{*/}
{/* this.props.isClassManagement()===true?*/}
{/* (*/}
{/* item.type==="online_learning"?*/}
{/* <div onClick={e=>this.Chapterediting(e,item.id,item.url)}>章节编辑</div>*/}
{/* :""*/}
{/* )*/}
{/* :""}*/}
<div onClick={e=>this.edithidden(e,item.id)}>隐藏</div>
<div onClick={e=>this.editSetup(e,item.id)}>置顶</div>
</div>)
@ -773,10 +783,25 @@ class Coursesleftnav extends Component{
{item.type==="board"?<div onClick={e=>this.Navmodalnames(e,7,"editSecondname",iem.category_id,iem.category_name)}>重命名</div>:""}
{item.type==="board"?<div onClick={e=>this.deleteSecondary(e,3,iem.category_id,item.category_url)}>删除</div>:""}
</div>)
}
};
//章节编辑
Chapterediting=(e,id,url)=> {
e.stopPropagation();//阻止冒泡
console.log(url);
console.log(id);
//页面刷新
this.setState({
chapterupdate:true,
})
// this.props.history.replace( url );
// this.props.comyslElearning(true);
};
setchapterupdatefalse =()=>{
this.setState({
chapterupdate:false,
})
}
render(){
let {
twosandiantype,
@ -815,6 +840,27 @@ class Coursesleftnav extends Component{
>
</Modals>
{/*{*/}
{/* this.state.chapterupdate===true?*/}
{/* <div>*/}
{/* <style>*/}
{/* {*/}
{/* `*/}
{/* .ant-modal-body{*/}
{/* padding-left: 33px !important;*/}
{/* padding-right: 33px !important;*/}
{/* padding-top: 27px !important;*/}
{/* padding-bottom: 21px !important;*/}
{/* }*/}
{/* `*/}
{/* }*/}
{/* </style>*/}
{/* <MyEduChapterupdate {...this.props} {...this.state} chapterupdate={this.state.chapterupdate} setchapterupdatefalse={this.setchapterupdatefalse}>*/}
{/* </MyEduChapterupdate>*/}
{/* </div>*/}
{/* :*/}
{/* ""*/}
{/*}*/}
{
Navmodalnametype===true?<style>

@ -0,0 +1,211 @@
import React, { Component } from 'react';
import {getImageUrl} from 'educoder';
import { Modal,Checkbox,Tree} from 'antd';
import axios from 'axios';
import './chapterupdate.css'
const { TreeNode } = Tree;
//立即章节选择
const treeData = [
{
title: '0-0',
key: '0-0',
children: [
{
title: '0-0-0',
key: '0-0-0',
children: [
{ title: '0-0-0-0', key: '0-0-0-0' },
{ title: '0-0-0-1', key: '0-0-0-1' },
{ title: '0-0-0-2', key: '0-0-0-2' },
],
},
{
title: '0-0-1',
key: '0-0-1',
children: [
{ title: '0-0-1-0', key: '0-0-1-0' },
{ title: '0-0-1-1', key: '0-0-1-1' },
{ title: '0-0-1-2', key: '0-0-1-2' },
],
},
{
title: '0-0-2',
key: '0-0-2',
},
],
},
{
title: '0-1',
key: '0-1',
children: [
{ title: '0-1-0-0', key: '0-1-0-0' },
{ title: '0-1-0-1', key: '0-1-0-1' },
{ title: '0-1-0-2', key: '0-1-0-2' },
{ title: '0-1-0-3', key: '0-1-0-3' },
{ title: '0-1-0-4', key: '0-1-0-4' },
{ title: '0-1-0-5', key: '0-1-0-5' },
{ title: '0-1-0-6', key: '0-1-0-6' },
{ title: '0-1-0-7', key: '0-1-0-7' },
{ title: '0-1-0-8', key: '0-1-0-8' },
{ title: '0-1-0-9', key: '0-1-0-9' },
{ title: '0-1-0-10', key: '0-1-0-10' },
{ title: '0-1-0-11', key: '0-1-0-11' },
{ title: '0-1-0-12', key: '0-1-0-12' },
{ title: '0-1-0-13', key: '0-1-0-13' },
{ title: '0-1-0-14', key: '0-1-0-15' },
{ title: '0-1-0-16', key: '0-1-0-16' },
{ title: '0-1-0-17', key: '0-1-0-17' },
{ title: '0-1-0-18', key: '0-1-0-18' },
],
},
{
title: '0-2',
key: '0-2',
},
];
class MyEduChapterupdate extends Component {
//树状图
constructor(props) {
super(props);
this.state={
myeduchecked:false,
expandedKeys: ['0-0-0', '0-0-1'],
autoExpandParent: true,
checkedKeys:[],
selectedKeys: [],
}
}
//取消按钮
modalCancel=()=>{
//外部传进来的参数
this.props.setchapterupdatefalse();
}
//确认按钮
setDownload=()=>{
//外部传进来的参数
this.props.setchapterupdatefalse();
}
//点击了选项
onChange=(e)=> {
this.setState({
myeduchecked:e.target.checked,
})
// console.log(`checked = ${e.target.checked}`);
if(e.target.checked===true){
this.setState({
checkedKeys:['0-0','0-1','0-2'],
})
}else {
this.setState({
checkedKeys:[],
})
}
}
onExpand =(expandedKeys) => {
console.log('onExpand', expandedKeys);
// if not set autoExpandParent to false, if children expanded, parent can not collapse.
// or, you can remove all expanded children keys.
this.setState({
expandedKeys,
autoExpandParent: false,
});
};
onCheck = (checkedKeys) => {
console.log('onCheck', checkedKeys);
this.setState({ checkedKeys });
};
onSelect = (selectedKeys, info) => {
console.log('onSelect', info);
this.setState({ selectedKeys });
};
renderTreeNodes = (data) =>
data.map(item => {
if (item.children) {
return (
<TreeNode title={item.title} key={item.key} dataRef={item}>
{this.renderTreeNodes(item.children)}
</TreeNode>
);
}
return <TreeNode key={item.key} {...item} />;
});
render() {
return(
<Modal
keyboard={false}
closable={false}
footer={null}
destroyOnClose={true}
title={"章节编辑"}
centered={true}
visible={this.props.chapterupdate}
width="600px"
heigth="658px"
>
<div className="educouddiv" style={{
heigth:"578px",
width:"100%"
}}>
<div style={{
width:"100%",
}}
className="private-listtwo heigth459px"
>
<style>
{
`
span {
max-width: 500px;
overflow:hidden;
text-overflow:ellipsis;
white-space:nowrap;
cursor: default;
}
`
}
</style>
<Tree
checkable
onExpand={this.onExpand}
expandedKeys={this.state.expandedKeys}
autoExpandParent={this.state.autoExpandParent}
onCheck={this.onCheck}
checkedKeys={this.state.checkedKeys}
onSelect={this.onSelect}
selectedKeys={this.state.selectedKeys}
>
{this.renderTreeNodes(treeData)}
</Tree>
</div>
</div>
<div className="yslcheckbox mt40">
<div className="mr15"><Checkbox onChange={(e) => this.onChange(e)} checked={this.state.myeduchecked}></Checkbox></div>
<div style={{
width:"100%"
}}><span style={{color:"#999999"}}>已选择</span><span style={{color:"#E65656"}}>3</span><span style={{color:"#999999"}}> </span><span style={{color:"#E65656"}}>5</span><span style={{color:"#999999"}}></span></div>
<div className="yslcheckbox2" style={{ width:"100%"}}><span className="font-14" style={{
color:"#A3A3A3",
}}>勾选则在课堂中显示否则不显示</span></div>
</div>
<div className="clearfix edu-txt-center pt37 pb28" >
<a className="task-btn mr30" style={{width:"100px",heigth:"38px"}} onClick={()=>this.modalCancel()}>取消</a>
<a className="task-btn task-btn-orange"style={{width:"100px",heigth:"38px"}} onClick={()=>this.setDownload()}>确定</a>
</div>
</Modal>
)
}
}
export default MyEduChapterupdate;

@ -0,0 +1,34 @@
.yslcheckbox{
display: flex;
flex-direction: row;
}
.yslcheckbox2{
display: flex;
flex-direction: row-reverse;
}
.heigth459px{
max-height:459px;
}
.private-listtwo{
overflow-y: auto;
overflow-x: hidden;
}
/*滚动条*/
.private-listtwo::-webkit-scrollbar {
width: 8px;
height: 8px;
}
.private-listtwo::-webkit-scrollbar-thumb {
background-color: #E3EBF4;
box-shadow: 0px 0px black;
}
.private-listtwo::-webkit-scrollbar-track {
border-radius:3px;
-webkit-box-shadow: inset 0 0 6px rgba(0, 0, 0, 0);
background-color: white;
}

@ -28,29 +28,36 @@ class Elearning extends Component{
isSpins:false,
userlogin:"",
isRender:false,
subject_id:0,
}
}
componentDidMount() {
// 记得删除退出课堂
console.log("获取到数据");
console.log(this.props);
// console.log("获取到数据");
// console.log(this.props);
this.getdata();
}
getdata=()=>{
console.log("更新了数据了");
let url = `/courses/${this.props.match.params.coursesId}/online_learning.json`;
// //
axios.get(url).then((response) => {
if(response){
if(response.data){
console.log("获取到到数据");
console.log(response);
this.setState({
description: response.data.description,
start_learning:response.data.start_learning,
learned:response.data.learned,
last_shixun:response.data.last_shixun,
stages:response.data.stages,
});
}
// console.log("获取到到数据");
// console.log(response);
this.setState({
description: response.data.description,
start_learning:response.data.start_learning,
learned:response.data.learned,
last_shixun:response.data.last_shixun,
stages:response.data.stages,
subject_id:response.data.subject_id,
});
}
}
this.setState({
isSpin:false,
@ -71,13 +78,11 @@ class Elearning extends Component{
console.log("12312312312")
console.log(e);
}
}
componentDidUpdate = (prevProps) => {
console.log("componentDidUpdate");
console.log(prevProps);
console.log(this.props);
console.log("componentDidUpdate");
// console.log(prevProps);
// console.log(this.props);
if(prevProps.current_user!=this.props.current_user){
if(this.props.current_user!==undefined){
// console.log(this.props.current_user.login);
@ -87,6 +92,17 @@ class Elearning extends Component{
})
}
}
if(prevProps.yslElearning===this.props.yslElearning) {
if(prevProps.yslElearning===true && this.props.yslElearning===true){
// console.log("=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-");
// console.log(prevProps.yslElearning);
// console.log(this.props.yslElearning);
this.getdata();
this.props.comyslElearning(false);
}
}
}
@ -274,6 +290,8 @@ class Elearning extends Component{
};
render(){
console.log("Elearning++++++++");
// console.log(this.props.Chapterupdate);
let{description,whethertoedit,isSpin,start_learning,hidestartshixunsreplacevalues,learned,last_shixun,stages,isRender} =this.state;
const isNotMembers=this.props.isNotMember();//非课堂成员
const antIcon = <Icon type="loading" style={{ fontSize: 24 }} spin />;
@ -376,16 +394,13 @@ class Elearning extends Component{
<Spin size="large" spinning={isSpin} id={"cdiv"}>
<div className=" clearfix" style={this.props.isAdmin()===true?{marginTop:"0px"}:{marginTop:"20px"}}>
{
stages===undefined||stages===JSON.stringify("[]")||stages.length===0?
<NoneData></NoneData>
:
<div>
{/*开始学习*/}
<YslDetailCards {...this.state} {...this.props} Startlearningtwo={()=>this.Startlearningtwo()} Myreload={()=>this.Myreload()} Tojoinclass={()=>this.Tojoinclass()}></YslDetailCards>
<YslDetailCards {...this.state} {...this.props} Startlearningtwo={()=>this.Startlearningtwo()} Myreload={()=>this.Myreload()} Tojoinclass={()=>this.Tojoinclass()} getPathCardsList={()=>this.getdata()}></YslDetailCards>
</div>
}
</div>
</Spin>

@ -4,7 +4,10 @@ import { Tooltip,Modal,Icon,Spin,message} from 'antd';
import '../../paths/ShixunPaths.css';
import axios from 'axios';
import { BrowserRouter as Router, Route, Link } from "react-router-dom";
import DetailCardsEditAndEdit from '../../paths/PathDetail/DetailCardsEditAndEdit';
import DetailCardsEditAndAdd from "../../paths/PathDetail/DetailCardsEditAndAdd";
import Modals from "../../modals/Modals";
import NoneData from "../coursesPublic/NoneData";
class YslDetailCards extends Component{
constructor(props){
super(props)
@ -17,7 +20,23 @@ class YslDetailCards extends Component{
shixunsmessage:"",
startshixunCombattype:false,
isSpin:false,
idsum:undefined,
pathCardsedittype:false,
pathid:undefined,
editbuttomtype:false,
editbuttomtypeadd:false,
pathlistedit:undefined,
delecttype:false,
Modalstype:false,
Modalstopval:'',
Modalsbottomval:'',
}
//idsum 是否点击这个
//pathCardsedittype 是否是在编辑模式
//editbuttomtypeadd 是否已经是编辑模式
//pathid课堂id
//pathlistedit 编辑返回的数据
}
showparagraph =(key,index)=>{
@ -90,6 +109,10 @@ class YslDetailCards extends Component{
};
componentDidMount(){
let pathid=this.props.match.params.coursesId;
this.setState({
pathid:pathid
})
}
@ -125,14 +148,192 @@ class YslDetailCards extends Component{
this.setState({
startshixunCombattype:false
})
};
// 关卡的上移下移操作
operations = (url) => {
let newurl = url+".json"
axios.get(newurl).then((response) => {
if(response.data.status===1){
this.props.getPathCardsList();
}
}).catch((error) => {
console.log(error);
})
};
//章节下移
chapterdown=(id)=>{
let url=`/course_stages/${id}/down_position.json`;
axios.post(url).then((response) => {
if(response){
if(response.data){
if(response.data.status===0){
this.props.showNotification(`下移成功`);
this.props.getPathCardsList();
}else{
this.props.showNotification(`下移失败`);
}
}else{
this.props.showNotification(`下移失败`);
}
}else {
this.props.showNotification(`下移失败`);
}
}).catch((error) => {
console.log(error)
});
};
//章节上移
chapterup=(id)=>{
let url=`/course_stages/${id}/up_position.json`;
axios.post(url).then((response) => {
if(response){
if(response.data){
if(response.data.status===0){
this.props.showNotification(`上移成功`);
this.props.getPathCardsList();
}else{
this.props.showNotification(`上移失败`);
}
}else{
this.props.showNotification(`上移失败`);
}
}else{
this.props.showNotification(`上移失败`);
}
}).catch((error) => {
console.log(error)
});
};
//取消的
updatapathCardsedit=()=>{
this.setState({
idsum:undefined,
pathCardsedittype:false,
editbuttomtype:false,
editbuttomtypeadd:false
})
this.props.getPathCardsList();
// this.props.updatadetailInfoLists();
};
//确认的
editeditbuttomtypecanle=()=>{
this.setState({
editbuttomtype:true,
editbuttomtypeadd:false
})
}
//编辑用
pathCardsedit=(key,pathid)=>{
let url=`/course_stages/${pathid}/edit.json`;
axios.get(url).then((result)=>{
if(result){
if(result.status===200){
this.setState({
idsum:key,
pathCardsedittype:true,
pathlistedit:result.data,
editbuttomtype:true,
editbuttomtypeadd:true
})
}
}
}).catch((error)=>{
console.log(error);
})
};
//删除用的
delectpathCardsedit=(id)=>{
this.setState({
Modalstype:true,
Modalstopval:'是否删除该章节?',
Modalsbottomval:'',
editdelectid:id,
delecttype:true,
})
}
cardsModalcancel=()=>{
this.setState({
Modalstype:false,
Modalstopval:'',
Modalsbottomval:'',
editdelectid:undefined
})
}
cardsModalsave=()=>{
debugger
this.setState({
Modalstype:false,
Modalstopval:'',
Modalsbottomval:'',
editdelectid:undefined
})
}
delectpathCardseditfun=()=>{
let {delecttype,editdelectid}=this.state;
let id=editdelectid;
if(delecttype===true){
let url =`/course_stages/${id}.json`
axios.delete(url).then((response) => {
if(response){
if(response.data){
if(response.data.status===0){
this.setState({
idsum:undefined,
pathCardsedittype:false,
Modalstype:false,
Modalstopval:'',
Modalsbottomval:'',
delecttype:false,
editdelectid:undefined
})
this.updatapathCardsedit()
this.props.showNotification(`删除成功`);
}else {
this.props.showNotification(`删除失败`);
}
}else{
this.props.showNotification(`删除失败`);
}
}else {
this.props.showNotification(`删除失败`);
}
}).catch((error) => {
console.log(error)
})
}
}
render(){
let{showparagraph,showparagraphkey,showparagraphindex,hidestartshixunsreplacevalue} =this.state;
let { stages }=this.props;
let{showparagraph,showparagraphkey,showparagraphindex,hidestartshixunsreplacevalue,idsum,pathCardsedittype,pathid,Modalstype,Modalstopval,Modalsbottomval,delecttype,pathlistedit,editbuttomtypeadd,editbuttomtype} =this.state;
let { stages ,subject_id}=this.props;
const antIcon = <Icon type="loading" style={{ fontSize: 24 }} spin />;
// console.log("pathCardsedittype");
// console.log(pathCardsedittype);
// console.log(editbuttomtype);
// console.log("this.props.isAdmin");
// console.log(this.props.isAdmin());
// console.log(this.state.delecttype);
return(
<div className="lesson-saved-list">
<div>
{
stages===undefined||stages===JSON.stringify("[]")||stages.length===0?
""
:
<div className="lesson-saved-list">
<Modal
keyboard={false}
title="提示"
@ -171,6 +372,15 @@ class YslDetailCards extends Component{
</div>
</Spin>
</Modal>
<Modals
modalsType={Modalstype}
modalsTopval={Modalstopval}
modalsBottomval={Modalsbottomval}
modalCancel={this.cardsModalcancel}
modalSave={delecttype===true?this.delectpathCardseditfun:this.cardsModalsave}
>
</Modals>
<style>{
`
.lesson-saved-list-item {
@ -180,30 +390,84 @@ class YslDetailCards extends Component{
}
`
}</style>
{
stages && stages.map((item,key)=>{
return(
<div className={"lesson-saved-list-item"} key={key} id={"stage_div_"+key} >
<p className="clearfix title-line">
<a className="fl ring-blue mr10 mt2">
<img src={getImageUrl("images/educoder/icon/charpter-white.svg")} className="fl ml3 mt3"/>
</a>
<span className="font-18 font-bd lessonvalue" title={item.stage_name}>{item.stage_name}</span>
{
this.props.isStudent()===true&&(stages===undefined||stages===JSON.stringify("[]")||stages.length===0)?
<NoneData></NoneData>
:
""
}
{
stages && stages.map((item,key)=>{
return(
<div className={"lesson-saved-list-item"} key={key} id={"stage_div_"+key} >
<p className="clearfix title-line">
</p>
<div className="detail_for_paragraph clearfix" id={"detail_for_paragraph_"+key}>
<p className="color-dark-grey mt20 mb25 ml20 mr20 pl28 justify font-15">{item.stage_description}</p>
<a className="fl ring-blue mr10 mt2">
<img src={getImageUrl("images/educoder/icon/charpter-white.svg")} className="fl ml3 mt3"/>
</a>
<span className="font-18 font-bd lessonvalue" title={item.stage_name}>{item.stage_name}</span>
{
idsum===key&&pathCardsedittype===true?'':
this.props.isAdmin()==true?
<a>
<a className="fr mtf3">
{ editbuttomtype===true?'':
<Tooltip placement="bottom" title="编辑"
onClick={() => this.pathCardsedit(key, item.stage_id)}>
<i className="iconfont icon-bianjidaibeijing font-22 color-green"></i>
</Tooltip>
}
</a>
{
stages.length=== key+1?"":<a className="fr ring-op-green mr20" onClick={()=>this.chapterdown(item.stage_id)}>
<Tooltip placement="bottom" title="向下移动">
<img src={getImageUrl("images/educoder/icon/movedown.svg")} className="fl mt2 ml4"/>
</Tooltip>
</a>
}
{key===0?"":
<a className="fr ring-op-green mr20" onClick={()=>this.chapterup(item.stage_id)}>
<Tooltip placement="bottom" title="向上移动">
<img src={getImageUrl("images/educoder/icon/moveup.svg")} className="fl mt2 ml4"/>
</Tooltip>
</a>}
<div>
</a>:""
}
{
item.shixuns_list && item.shixuns_list.map((line,index)=>{
return(
<div className="clearfix paragraph lineh-30" key={index} onMouseEnter={()=>this.showparagraph(key,index)} onMouseLeave={this.hideparagraph}>
idsum === key && pathCardsedittype === true ?
this.props.isAdmin()===true?
<a className="fr" onClick={()=>this.delectpathCardsedit(item.stage_id)}>
<Tooltip placement="bottom" title="删除">
<i className="iconfont icon-shanchu color-grey-c font-14 font-n"></i>
</Tooltip>
</a>:""
: ''
}
</p>
{
idsum===key&&pathCardsedittype===true?'':
<div className="detail_for_paragraph clearfix" id={"detail_for_paragraph_"+key}>
<p className="color-dark-grey mt20 mb25 ml20 mr20 pl28 justify font-15">{item.stage_description}</p>
<li className="fl li-width63">
<div>
{
item.shixuns_list && item.shixuns_list.map((line,index)=>{
return(
<div className="clearfix paragraph lineh-30" key={index} onMouseEnter={()=>this.showparagraph(key,index)} onMouseLeave={this.hideparagraph}>
<li className="fl li-width63">
<span className="progressRing mr10">
{
@ -211,36 +475,70 @@ class YslDetailCards extends Component{
:<i className="iconfont icon-bofang progressRing-part font-18 mt10"></i>
}
</span>
<span className={this.props.current_user&&this.props.current_user.admin===false&&line.shixun_status==="暂未公开"?"paragraph_name color204":"paragraph_name color-grey3"}>
<span className={this.props.current_user&&this.props.current_user.admin===false&&line.shixun_status==="暂未公开"?"paragraph_name color204":"paragraph_name color-grey3"}>
<span className="subject_stage_shixun_index">{key+1}</span>-{index+1}&nbsp;&nbsp;{line.shixun_name}
</span>
</li>
{
this.props.current_user&&this.props.current_user.admin===false&&line.shixun_status==="暂未公开"?
<li className="fr status_li"><span className="fr color204">暂未公开</span></li>
:
<li className={showparagraph===false?"none":"fr status_li"}>
</li>
{
showparagraphkey===key&&showparagraphindex===index?<div>
<Link to={'/shixuns/'+line.identifier+'/challenges'} className="mr30 color-blue_4C shixun_detail pointer fl" target="_blank">查看详情</Link>
{line.shixun_status==="暂未公开"?"":<a onClick={()=>this.startgameid(line.identifier)} className="btn_auto user_bluebg_btn fl" id="shixun_operation" >开始学习</a>}
</div>:""
this.props.current_user&&this.props.current_user.admin===false&&line.shixun_status==="暂未公开"?
<li className="fr status_li"><span className="fr color204">暂未公开</span></li>
:
<li className={showparagraph===false?"none":"fr status_li"}>
{
showparagraphkey===key&&showparagraphindex===index?<div>
<Link to={'/shixuns/'+line.identifier+'/challenges'} className="mr30 color-blue_4C shixun_detail pointer fl" target="_blank">查看详情</Link>
{line.shixun_status==="暂未公开"?"":<a onClick={()=>this.startgameid(line.identifier)} className="btn_auto user_bluebg_btn fl" id="shixun_operation" >开始学习</a>}
</div>:""
}
</li>
}
</div>)
})
}
</div>
</div>
}
{
this.props.isAdmin()===true?
<DetailCardsEditAndEdit
idsum={idsum}
keys={key}
pathCardsedittype={pathCardsedittype}
updatapathCardsedits={this.updatapathCardsedit}
pathlisteditlist={pathlistedit}
stageid={item.stage_id}
ysldetailcards={"ysldetailcards"}
pathid={subject_id}
coursesId={pathid}
></DetailCardsEditAndEdit>
:""
}
</li>
}
</div>)
})
}
</div>
</div>
</div>
)
})
}
)
})
}
</div>
}
{ editbuttomtypeadd===true?'':this.props.isAdmin()===true?
<DetailCardsEditAndAdd
{...this.props}
sum={stages && stages.length+1}
pathid={subject_id}
coursesId={pathid}
detailInfoList={this.props.detailInfoList}
getPathCardsLists={this.updatapathCardsedit}
editeditbuttomtypes={this.editeditbuttomtypecanle}
ysldetailcards={"ysldetailcards"}
></DetailCardsEditAndAdd>
:""
}
</div>
)
}
}
export default YslDetailCards;
export default YslDetailCards;
// detailInfoList以前实训课堂做权限判断的作用 this.props.subject_id

@ -85,28 +85,28 @@ class Groupjobbandetails extends Component {
{/* )*/}
{/*})}*/}
{datas.attachments === undefined ?
(datas.description === undefined || datas.description === undefined || datas.description === "" ?
(datas.description === undefined || datas.description === null || datas.description === "" ?
<NoneData></NoneData>
:
""
)
:
datas.attachments=== "" ?
(datas.description === undefined || datas.description === undefined || datas.description === "" ?
(datas.description === undefined || datas.description === null || datas.description === "" ?
<NoneData></NoneData>
:
""
)
:
datas.attachments=== null ?
(datas.description === undefined || datas.description === undefined || datas.description === "" ?
(datas.description === undefined || datas.description === null || datas.description === "" ?
<NoneData></NoneData>
:
""
)
:
datas.attachments.length === 0 ?
(datas.description === undefined || datas.description === undefined || datas.description === "" ?
(datas.description === undefined || datas.description === null || datas.description === "" ?
<NoneData></NoneData>
:
""

@ -97,28 +97,28 @@ class Generaljobanswer extends Component {
}
{datas.reference_attachments === undefined ?
(datas.reference_answer===undefined || datas.reference_answer===undefined|| datas.reference_answer===""?
(datas.reference_answer===undefined || datas.reference_answer===null|| datas.reference_answer===""?
<NoneData></NoneData>
:
""
)
:
datas.reference_attachments === "" ?
(datas.reference_answer===undefined || datas.reference_answer===undefined|| datas.reference_answer===""?
(datas.reference_answer===undefined || datas.reference_answer===null|| datas.reference_answer===""?
<NoneData></NoneData>
:
""
)
:
datas.reference_attachments === null ?
(datas.reference_answer===undefined || datas.reference_answer===undefined|| datas.reference_answer===""?
(datas.reference_answer===undefined || datas.reference_answer===null|| datas.reference_answer===""?
<NoneData></NoneData>
:
""
)
:
datas.reference_attachments.length === 0 ?
(datas.reference_answer===undefined || datas.reference_answer===undefined|| datas.reference_answer===""?
(datas.reference_answer===undefined || datas.reference_answer===null|| datas.reference_answer===""?
<NoneData></NoneData>
:
""

@ -73,28 +73,28 @@ class Generaljobdetails extends Component {
// <div id="MakedownHTML "className="markdown-body yslquesHeigth yslquesmarkdowntext" dangerouslySetInnerHTML={{__html: markdownToHTML(datas.description).replace(/▁/g, "▁▁▁")}}/>
}
{datas.attachments === undefined ?
(datas.description === undefined || datas.description === undefined || datas.description === "" ?
(datas.description === undefined || datas.description === null || datas.description === "" ?
<NoneData></NoneData>
:
""
)
:
datas.attachments=== "" ?
(datas.description === undefined || datas.description === undefined || datas.description === "" ?
(datas.description === undefined || datas.description === null || datas.description === "" ?
<NoneData></NoneData>
:
""
)
:
datas.attachments=== null ?
(datas.description === undefined || datas.description === undefined || datas.description === "" ?
(datas.description === undefined || datas.description === null || datas.description === "" ?
<NoneData></NoneData>
:
""
)
:
datas.attachments.length === 0 ?
(datas.description === undefined || datas.description === undefined || datas.description === "" ?
(datas.description === undefined || datas.description === null || datas.description === "" ?
<NoneData></NoneData>
:
""

@ -1489,6 +1489,11 @@ class Listofworksstudentone extends Component {
// this.Gettitleinformation(homeworkid);
this.Getalistofworks(homeworkid);
}
Isupdatass = () => {
var homeworkid = this.props.match.params.homeworkid;
// this.Gettitleinformation(homeworkid);
this.Getalistofworks(homeworkid);
}
/////////老师操作
// tearchar=()=>{
// var homeworkid = this.props.match.params.homeworkid;

@ -113,10 +113,21 @@ class ShixunHomeworkPage extends Component {
}
/// 重做的确认
ModalSaves=()=>{
this.setState({
ModalsType:false,
Modalstopval:""
})
});
if(this.state.teacherdatapage){
this.resetshixunCombat(this.state.teacherdatapage.myshixun_identifier);
}
try {
console.log("this.child");
console.log(this.child);
}catch (e) {
}
};
//取消重做
ModalCancels=()=>{
@ -133,6 +144,18 @@ class ShixunHomeworkPage extends Component {
ModalsType:true,
})
}
//重置按钮
resetshixunCombat=(id)=>{
console.log(id);
let zrl=`/myshixuns/${id}/reset_my_game.json`;
axios.get(zrl).then((response) => {
// window.location.href = "/shixuns/" + response.data.shixun_identifier + "/challenges";
this.child.Isupdatass();
this.props.showNotification("重置成功");
}).catch((error) => {
console.log(error)
});
}
bindRef = ref => { this.child = ref }
///////////////教师截止
gotohome=()=>{
@ -151,15 +174,15 @@ class ShixunHomeworkPage extends Component {
return (
<div className="newMain clearfix ">
{/*<Modals*/}
{/* modalsType={this.state.ModalsType}*/}
{/* modalsTopval={this.state.Modalstopval}*/}
{/* modalsBottomval={this.state.ModalsBottomval}*/}
{/* modalSave={this.ModalSaves}*/}
{/* modalCancel={this.ModalCancels}*/}
{/* loadtype={false}*/}
{/*>*/}
{/*</Modals>*/}
<Modals
modalsType={this.state.ModalsType}
modalsTopval={this.state.Modalstopval}
modalsBottomval={this.state.ModalsBottomval}
modalSave={this.ModalSaves}
modalCancel={this.ModalCancels}
loadtype={false}
>
</Modals>
<div className={"educontent mt10 mb20"} style={{width: "1200px"}}>
@ -278,13 +301,18 @@ class ShixunHomeworkPage extends Component {
<a className="fr color-blue font-16"
href={`/courses/${this.props.match.params.coursesId}/${jobsettingsdatapage === undefined ? "" : jobsettingsdatapage.data.category.main === 1 ? "shixun_homeworks" :"shixun_homework"}/${teacherdatapage === undefined ? "" : teacherdatapage.id}/commitsummary/${this.props.match.params.homeworkid}`}>{teacherdatapage.commit_des}</a>
}
{this.props.isStudent() ?
(
teacherdatapage&&teacherdatapage.redo_work===true?
<a className="fr color-blue font-16" onClick={()=>this.Modalcancelss()}>重做</a>
:""
)
: "" }
{teacherdatapage === undefined ? "" : <Startshixuntask
{...this.props}
data={teacherdatapage}
/>}
{/*{this.props.isStudent() ?*/}
{/* <a className="fr color-blue font-16" onClick={()=>this.Modalcancelss()}>重做</a>*/}
{/* : "" }*/}
</div>
</div>
</div>

@ -48,7 +48,11 @@ function startechart(data){
xAxis: [
{
type : 'value',
name: '学生效率位置',
name: '学生效率',
nameTextStyle: {
color: '#000',
fontSize: 12
},
scale:true,
axisLabel : {
formatter: ' ',

@ -254,9 +254,13 @@ class CodeRepositoryViewContainer extends Component {
}
})
}
if (isCurrentFile) {
if (challenge.pathIndex == cur_index) {
showSnackbar(`当前编辑文件已经是${nodePath}`)
}
onPathChange(cur_index)
showSnackbar(`当前编辑文件已经是${nodePath}`)
// showSnackbar(`当前编辑文件已经是${nodePath}`)
} else {
onPathChange(-1)
}

@ -531,6 +531,7 @@ class DetailCards extends Component{
{ editbuttomtypeadd===true?'':
<DetailCardsEditAndAdd
{...this.props}
sum={ pathCardsList && pathCardsList.length+1}
pathid={pathid}
detailInfoList={this.props.detailInfoList}

@ -94,21 +94,27 @@ class DetailCardsEditAndAdd extends Component{
axios.post(url,{
shixun_id:patheditarry
}).then((response) => {
let newshixun_lists=response.data.shixun_lists;
if(response){
if(response.data){
let newshixun_lists=response.data.shixun_lists;
for(var z=0; z<newshixun_lists.length; z++){
newshixuns_listedit.push(newshixun_lists[z]);
}
for(var i=0; i<newshixun_lists.length; i++){
list.push(newshixun_lists[i].shixun_id);
}
this.setState({
shixuns_listedit:newshixuns_listedit,
shixuns_listeditlist:list,
patheditarry:[],
selectShixun:false,
page:1,
})
}
for(var z=0; z<newshixun_lists.length; z++){
newshixuns_listedit.push(newshixun_lists[z]);
}
for(var i=0; i<newshixun_lists.length; i++){
list.push(newshixun_lists[i].shixun_id);
}
this.setState({
shixuns_listedit:newshixuns_listedit,
shixuns_listeditlist:list,
patheditarry:[],
selectShixun:false,
page:1,
})
}).catch((error) => {
console.log(error)
});
@ -276,7 +282,12 @@ class DetailCardsEditAndAdd extends Component{
let pathId=this.props.pathid;
let url='/stages.json?subject_id='+pathId
let url;
if(this.props.ysldetailcards===undefined){
url='/stages.json?subject_id='+pathId;
}else{
url=`/courses/${this.props.coursesId}/course_stages.json`;
}
axios.post(url, {
name:stage_names,
description:newstage_descriptions,
@ -400,7 +411,7 @@ class DetailCardsEditAndAdd extends Component{
{ editPanel &&
<div className="lesson-edit-content mb10">
<div className="clearfix edu-back-white pt30">
<div className="clearfix edu-back-white pt30 pb30">
<p className="clearfix mb30 font-18 font-bd pl25 pr25">
<a className="fl ring-blue mr10 mt2">
<img src={getImageUrl("images/educoder/icon/charpter-white.svg")} className="fl ml3 mt3"/>
@ -632,6 +643,9 @@ class DetailCardsEditAndAdd extends Component{
{this.props.detailInfoList===undefined?"":this.props.detailInfoList.allow_statistics===true?editPanel===false?<div className="click_add color-grey-9" onClick={this.addStage}>
<span className="color-blue_4C" >+点击新建阶段</span>1
</div>:'':''}
{this.props.detailInfoList===undefined&&this.props.isAdmin()&&editPanel===false?<div className="click_add color-grey-9" onClick={this.addStage}>
<span className="color-blue_4C" >+点击新建阶段</span>1
</div>:''}
</div>
)
}

@ -236,10 +236,12 @@ class DetailCardsEditAndEdit extends Component{
}else{
newstage_descriptions=""
}
let url='/stages/'+stageid+'.json'
let url;
if(this.props.ysldetailcards===undefined){
url='/stages/'+stageid+'.json';
}else{
url=`/course_stages/${stageid}.json`;
}
axios.put(url, {
name:stage_name,
description:newstage_descriptions,

@ -166,7 +166,7 @@ class DetailCards extends Component{
})
}
</div>
<DetailCardsEditAndAdd></DetailCardsEditAndAdd>
<DetailCardsEditAndAdd {...this.props}></DetailCardsEditAndAdd>
</div>
)
}

@ -459,8 +459,8 @@ class PathDetailIndex extends Component{
this.props.checkIfLogin()===false?"":progress === undefined ? "" : progress === null ? "" :
<div className="edu-back-white myProgress padding40-20 mb10">
<p className="mb20">
<span className="font-16 mr10">我的进展</span>
<Tooltip placement="bottom" title="获得经验值/总经验值">
<span className="font-16 mr10">关卡数</span>
<Tooltip placement="bottom" title="已通关数/关卡总数">
<span className="color-green" >{progress.my_score} / {progress.all_score}</span>
</Tooltip>
</p>

@ -11,7 +11,7 @@ if(window.wx) {
title: ' title', // 分享标题
desc: 'hello world', // 分享描述
link: 'https://www.educoder.net', // 分享链接该链接域名或路径必须与当前页面对应的公众号JS安全域名一致
imgUrl: 'https://pre-newweb.educoder.net/images/educoder/headNavLogo.png', // 分享图标
imgUrl: 'https://test-newweb.educoder.net/images/educoder/headNavLogo.png', // 分享图标
success: function () {
// 设置成功
}

@ -121,7 +121,7 @@ a:hover.link-color-grey03{color:#3498db!important;}
.mr3{margin-right: 3px}.mr4{margin-right: 4px}.mr5{ margin-right: 5px;}.mr8{ margin-right: 8px;}.mr10{ margin-right: 10px;}.mr12{ margin-right:12px!important;}.mr15{ margin-right: 15px;}.mr18{ margin-right: 18px;}.mr20{ margin-right: 20px;}.mr25{ margin-right: 25px;}.mr30{ margin-right:30px;}.mr35{margin-right:35px;}.mr40{margin-right:40px;}.mr45{margin-right:45px;}.mr50{ margin-right: 50px;}.mr60{ margin-right:60px;}.mr350{ margin-right:350px;}.pt5{ padding-top:5px;}.pt10{ padding-top:10px;}.pt15{ padding-top:15px;}.pt20{ padding-top:20px;}.pt30{ padding-top:30px;}.pt40{ padding-top:40px;}.pt47{ padding-top:47px;}.pt100{padding-top:100px;}.pt130{padding-top:130px;}
.pt1{ padding-top:1px;}.pt5{ padding-top:5px;}.pt10{ padding-top:10px;}.pt15{ padding-top:15px;}.pt20{ padding-top:20px;}.pt30{ padding-top:30px;}.pt40{ padding-top:40px;}
.pb5{ padding-bottom:5px;}.pb10{ padding-bottom:10px;}.pb15{ padding-bottom:15px;}.pb20{ padding-bottom:20px;}.pb30{ padding-bottom:30px;}.pb40{ padding-bottom:40px;}.pb47{ padding-bottom:47px;}.pb50{ padding-bottom:50px;}.pb155{ padding-bottom:155px;}
.pb5{ padding-bottom:5px;}.pb10{ padding-bottom:10px;}.pb15{ padding-bottom:15px;}.pb20{ padding-bottom:20px;}.pb28{ padding-bottom:28px;}.pb30{ padding-bottom:30px;}.pb40{ padding-bottom:40px;}.pb47{ padding-bottom:47px;}.pb50{ padding-bottom:50px;}.pb155{ padding-bottom:155px;}
.pl2{ padding-left:2px;}.pl5{ padding-left:5px;}.pl8{ padding-left:8px;}.pl10{ padding-left:10px;}.pl15{ padding-left:15px;}.pl20{ padding-left:20px;}.pl28{ padding-left:28px;}.pl30{ padding-left:30px;}.pl33{padding-left: 33px}.pl40{ padding-left:40px;}.pl42{ padding-left:42px;}.pl45{ padding-left:45px;}.pl50{ padding-left:50px;}.pl100{ padding-left:100px;}.pl35{ padding-left:35px;}.pl50{padding-left:50px;}.pl70{padding-left:70px;}.pl80{padding-left:80px;}.pl92{padding-left:92px;}
.pr2{ paddding-right:2px;}.pr5{ padding-right:5px;}.pr10{ padding-right:10px;}.pr15{ padding-right:15px;}.pr20{ padding-right:20px!important;}.pr30{ padding-right:30px!important;}.pr42{ padding-right:42px;}.pr45{ padding-right:45px;}

@ -109,7 +109,7 @@ a.decoration{text-decoration: underline}
}
.pt1{ padding-top:1px;}.pt3{ padding-top:3px!important;}.pt5{ padding-top:5px!important;}.pt10{ padding-top:10px;}.pt15{ padding-top:15px;}.pt17{ padding-top:17px;}.pt20{ padding-top:20px!important;}.pt25{ padding-top:25px;}.pt30{ padding-top:30px;}.pt35{ padding-top:35px;}.pt37{ padding-top:37px;}.pt40{ padding-top:40px;}.pt47{ padding-top:47px;}.pt49{ padding-top:49px;}.pt50{ padding-top:50px;}.pt60{ padding-top:60px;}.pt70{ padding-top:70px;}.pt80{ padding-top:80px;}.pt90{ padding-top:90px;}.pt100{padding-top:100px;}.pt110{ padding-top:110px;}.pt120{ padding-top:120px;}.pt130{padding-top:130px;}
.pb3{ padding-bottom:3px!important;}.pb5{ padding-bottom:5px!important;}.pb10{ padding-bottom:10px;}.pb15{ padding-bottom:15px;}.pb20{ padding-bottom:20px;}.pb25{ padding-bottom:20px;}.pb25{ padding-bottom:20px;}.pb30{ padding-bottom:30px;}.pb35{ padding-bottom:35px;}.pb40{ padding-bottom:40px;}.pb47{ padding-bottom:47px;}.pb50{ padding-bottom:50px;}.pb60{ padding-bottom:60px;}.pb70{ padding-bottom:70px;}.pb80{ padding-bottom:80px;}.pb90{ padding-bottom:90px;}.pb100{ padding-bottom:100px;}.pb110{ padding-bottom:110px;}.pb155{ padding-bottom:155px;}
.pb3{ padding-bottom:3px!important;}.pb5{ padding-bottom:5px!important;}.pb10{ padding-bottom:10px;}.pb15{ padding-bottom:15px;}.pb20{ padding-bottom:20px;}.pb25{ padding-bottom:20px;}.pb25{ padding-bottom:20px;}.pb28{ padding-bottom:28px;}.pb30{ padding-bottom:30px;}.pb35{ padding-bottom:35px;}.pb40{ padding-bottom:40px;}.pb47{ padding-bottom:47px;}.pb50{ padding-bottom:50px;}.pb60{ padding-bottom:60px;}.pb70{ padding-bottom:70px;}.pb80{ padding-bottom:80px;}.pb90{ padding-bottom:90px;}.pb100{ padding-bottom:100px;}.pb110{ padding-bottom:110px;}.pb155{ padding-bottom:155px;}
.pr2{ paddding-right:2px;}.pr5{ padding-right:5px;}.pr10{ padding-right:10px;}.pr15{ padding-right:15px;}.pr20{ padding-right:20px!important;}.pr30{ padding-right:30px!important;}.pr35{ padding-right:35px!important;}.pr42{ padding-right:42px;}.pr45{ padding-right:45px;}.pr48{ padding-right:48px;}.pr57{ padding-right:57px;}.pr60{ padding-right:60px;}.pr70{ padding-right:70px;}.pr72{ padding-right:72px;}.pr75{ padding-right:75px;}.pr88{ padding-right:88px;}
.pl0{ padding-left:0px!important;}.pl2{ padding-left:2px;}.pl5{ padding-left:5px;}.pl7{ padding-left:7px;}.pl8{ padding-left:8px;}.pl10{ padding-left:10px;}.pl15{ padding-left:15px;}.pl20{ padding-left:20px;}.pl22{ padding-left:22px;}.pl25{ padding-left:25px;}.pl28{ padding-left:28px;}.pl30{ padding-left:30px !important;}.pl33{padding-left: 33px}.pl35{ padding-left:35px;}.pl40{ padding-left:40px;}.pl42{ padding-left:42px;}.pl45{ padding-left:45px;}.pl50{ padding-left:50px;}.pl60{ padding-left:60px;}.pl70{padding-left:70px;}.pl75{padding-left:75px;}.pl80{padding-left:80px;}.pl88{ padding-left:88px;}.pl92{padding-left:92px;}.pl100{ padding-left:100px;}
@ -582,9 +582,10 @@ a.user_greybg_btn{background-color:#747A7F;color: #fff;}
/*md编辑器恢复被覆盖样式*/
.new_li .markdown-body ul > li{ list-style-type: disc!important;margin-bottom: 0!important; }
.new_li .markdown-body ol > li{ list-style-type: decimal!important; }
.new_li .markdown-body ul > li,.markdown-body ul > li{ list-style-type: disc!important;margin-bottom: 0!important; }
.new_li .markdown-body ol > li,.markdown-body ol > li{ list-style-type: decimal!important; }
.new_li li{ margin-bottom: 0!important; }
.markdown-body p{font-size: 16px!important;}
/*搜索框*/
#pollingPanel{position: relative;width: 248px;height: 32px;}

Loading…
Cancel
Save