dev_forum
杨树明 5 years ago
parent 78678a68ba
commit b350b0f1a6

@ -1,5 +1,6 @@
import React, { Component } from 'react';
import {getImageUrl} from 'educoder';
import { Tooltip } from 'antd';
import '../../paths/ShixunPaths.css';
import DetailCardsEditAndAdd from './DetailCardsEditAndAdd';
import axios from 'axios';
@ -85,16 +86,26 @@ class DetailCards extends Component{
<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">{item.stage_name}</span>
<a className="fr mtf3">
<i className="iconfont icon-bianjidaibeijing font-22 color-green" data-tip-down="编辑"></i>
</a>
<a href="" className="fr ring-op-green mr20">
<img src={getImageUrl("images/educoder/icon/movedown.svg")} data-tip-down="向下移动" className="fl mt2 ml4"/>
</a>
<Tooltip placement="bottom" title={"编辑"}>
<a className="fr mtf3">
<i className="iconfont icon-bianjidaibeijing font-22 color-green"></i>
</a>
</Tooltip>
<Tooltip placement="bottom" title={"向下移动"}>
<a href="" className="fr ring-op-green mr20">
<img src={getImageUrl("images/educoder/icon/moveup.svg")} data-tip-down="向上移动" className="fl mt2 ml4"/>
<img src={getImageUrl("images/educoder/icon/movedown.svg")} className="fl mt2 ml4"/>
</a>
</Tooltip>
<Tooltip placement="bottom" title={"向上移动"}>
<a href="" className="fr ring-op-green mr20">
<img src={getImageUrl("images/educoder/icon/moveup.svg")} className="fl mt2 ml4"/>
</a>
</Tooltip>
</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>

@ -1,238 +1,241 @@
import React,{ Component } from "react";
import { Modal,Radio,Input,Tooltip } from "antd";
import { BrowserRouter as Router, Route, Link } from "react-router-dom";
import SendPanel from "./sendPanel.js";
import { getImageUrl } from 'educoder';
import axios from 'axios';
import Modals from '../../modals/Modals';
import './DetailTop.css';
const Search = Input.Search;
const RadioGroup = Radio.Group;
class DetailTop extends Component{
constructor(props){
super(props)
this.state={
cardsModalcancel:this.cardsModalcancel,
cardsModalsave:this.cardsModalsave,
Modalstype:false,
Modalstopval:"",
Modalsbottomval:'',
loadtype:false,
deletepathtype:false,
cardsModalsavetype:false
}
}
allow_deletepath=()=>{
this.setState({
Modalstype:true,
Modalstopval:"是否删除路径?",
deletepathtype:true
})
}
applyissuePath=()=>{
this.setState({
Modalstype:true,
Modalstopval:"发布申请已提交,请等待管理员的审核",
Modalsbottomval:"• 我们将在1-2个工作日内完成审核",
loadtype:true
})
}
cancelissuePath=()=>{
let pathId=this.props.match.params.pathId;
let url ="/paths/"+pathId+"/cancel_publish.json";
axios.get(url).then((result)=>{
if(result.status===200){
if(result.data.status===0){
}else if(result.data.status===1){
window.location.href = "/paths/" + result.data.subject_id
}
}
}).catch((error)=>{
console.log(error);
})
}
reovkissuePath=()=>{
this.setState({
Modalstype:true,
Modalstopval:"是否确认撤销发布",
Modalsbottomval:"确认后,回退到编辑状态",
cardsModalsavetype:true,
})
}
reovkissuePaths=()=>{
let pathId=this.props.match.params.pathId;
let url ="/paths/"+pathId+"/cancel_has_publish.json";
axios.get(url).then((result)=>{
if(result.status===200){
if(result.data.status===0){
}else if(result.data.status===1){
this.setState({
cardsModalsavetype:false,
loadtype:false,
deletepathtype:false
})
window.location.href = "/paths/" + result.data.subject_id
}
}
}).catch((error)=>{
console.log(error);
})
}
cardsModalcancel=()=>{
this.setState({
Modalstype:false,
Modalsbottomval:'',
loadtype:false,
deletepathtype:false
})
}
cardsModalsave=()=>{
let {loadtype,deletepathtype}=this.state;
//删除路径
if(deletepathtype===true){
let pathid=this.props.match.params.pathId;
const deleteUrl = `/paths/`+pathid+`.json`;
axios.delete(deleteUrl).then((response) => {
const status = response.data.status
if (status === 1) {
window.location.href = "/paths";
}
}).catch((error) => {
console.log(error)
})
}
//申请发布
if(loadtype===true){
let pathid=this.props.match.params.pathId;
let url ="/paths/"+pathid+"/publish.json";
axios.get(url).then((result)=>{
if(result.status===200){
if(result.data.status===0){
this.setState({
Modalstype:true,
Modalstopval: result.data.message,
})
}else if(result.data.status===1){
window.location.reload();
}
}
}).catch((error)=>{
console.log(error);
})
}
this.setState({
Modalstype:false,
Modalsbottomval:''
})
}
render(){
let{detailInfoList}=this.props;
let{Modalstype,Modalstopval,cardsModalcancel,cardsModalsave,Modalsbottomval,cardsModalsavetype,loadtype}=this.state;
const radioStyle = {
display: 'block',
height: '30px',
lineHeight: '30px',
};
return(
<div className="subhead">
<Modals
modalsType={Modalstype}
modalsTopval={Modalstopval}
modalsBottomval={Modalsbottomval}
modalCancel={cardsModalcancel}
modalSave={cardsModalsavetype===true?this.reovkissuePaths:this.cardsModalsave}
loadtype={loadtype}
>
</Modals>
{
detailInfoList &&
<div className="subhead_content">
<div className="font-28 color-white clearfix">
<span className="fl lineh-40">
{detailInfoList.name}
</span>
{detailInfoList===undefined?"":detailInfoList.allow_statistics===true?
<Link to={"/paths/"+this.props.match.params.pathId+"/edit"} className="ml10 ring-green fl mt10" data-tip-down="编辑">
<img src={getImageUrl("images/educoder/icon/edit.svg")} className="fl mt3 ml2" />
</Link>:""
}
{detailInfoList===undefined?"":detailInfoList.allow_statistics===true?
<Link to={"/paths/"+this.props.match.params.pathId+"/statistics"} className="user_default_btn edu-greenback-btn fr font-18"
>
学习统计
</Link>:""
}
{ detailInfoList.allow_send === true &&
<SendPanel {...this.props} {...this.state}></SendPanel>
}
</div>
<div className="clearfix mt20">
{
detailInfoList &&
<ul className="fl color-grey-eb pathInfo">
{ detailInfoList.stages_count!=0 ? <li><span>章节</span><span className="ml5">{detailInfoList.stages_count}</span></li> : ""}
{ detailInfoList.stage_shixuns_count!=0 ? <li><span>实训</span><span className="ml5">{ detailInfoList.stage_shixuns_count}</span></li> : ""}
{ detailInfoList.challenge_choose_count!=0 ? <li><span>选择题任务</span><span>{detailInfoList.challenge_choose_count}</span></li> : ""}
{ detailInfoList.challenges_count!=0 ? <li><span>实践任务</span><span>{detailInfoList.challenges_count}</span></li> : ""}
{ detailInfoList.subject_score!=0 ? <li><span>经验值</span><span>{detailInfoList.subject_score}</span></li> : ""}
{ detailInfoList.member_count!=0 ? <li><span>学习人数</span><span>{detailInfoList.member_count}</span></li> : ""}
</ul>
}
<div className="fr pr">
{detailInfoList===undefined?"":detailInfoList.allow_delete===true?<a
className={detailInfoList.publish_status===-1?"fl font-18 color-white mt5 mr20":"fl font-18 color-white mt5"}
style={{opacity: '0.6'}} onClick={this.allow_deletepath}
>删除路径</a>:""}
{
detailInfoList.publish_status===0&&detailInfoList.allow_statistics===true?
<a className="user_default_btn user_bluebg_btn font-18 fl ml40 userbluebgfont"
onClick={this.applyissuePath}
>申请发布</a>:""
}
{
detailInfoList.publish_status===1 && detailInfoList.allow_statistics===true?
<a className="user_default_btn user_grey_btn font-18 fl pointer ml40"
onClick={this.cancelissuePath}
>撤销申请</a>:""
}
{
detailInfoList.publish_status===2 && detailInfoList.allow_statistics===true?
<a className="user_default_btn user_grey_btn font-18 fl pointer ml40"
onClick={this.reovkissuePath}
>撤销发布</a>:""
}
</div>
</div>
</div>
}
</div>
)
}
}
import React,{ Component } from "react";
import { Modal,Radio,Input,Tooltip } from "antd";
import { BrowserRouter as Router, Route, Link } from "react-router-dom";
import SendPanel from "./sendPanel.js";
import { getImageUrl } from 'educoder';
import axios from 'axios';
import Modals from '../../modals/Modals';
import './DetailTop.css';
const Search = Input.Search;
const RadioGroup = Radio.Group;
class DetailTop extends Component{
constructor(props){
super(props)
this.state={
cardsModalcancel:this.cardsModalcancel,
cardsModalsave:this.cardsModalsave,
Modalstype:false,
Modalstopval:"",
Modalsbottomval:'',
loadtype:false,
deletepathtype:false,
cardsModalsavetype:false
}
}
allow_deletepath=()=>{
this.setState({
Modalstype:true,
Modalstopval:"是否删除路径?",
deletepathtype:true
})
}
applyissuePath=()=>{
this.setState({
Modalstype:true,
Modalstopval:"发布申请已提交,请等待管理员的审核",
Modalsbottomval:"• 我们将在1-2个工作日内完成审核",
loadtype:true
})
}
cancelissuePath=()=>{
let pathId=this.props.match.params.pathId;
let url ="/paths/"+pathId+"/cancel_publish.json";
axios.get(url).then((result)=>{
if(result.status===200){
if(result.data.status===0){
}else if(result.data.status===1){
window.location.href = "/paths/" + result.data.subject_id
}
}
}).catch((error)=>{
console.log(error);
})
}
reovkissuePath=()=>{
this.setState({
Modalstype:true,
Modalstopval:"是否确认撤销发布",
Modalsbottomval:"确认后,回退到编辑状态",
cardsModalsavetype:true,
})
}
reovkissuePaths=()=>{
let pathId=this.props.match.params.pathId;
let url ="/paths/"+pathId+"/cancel_has_publish.json";
axios.get(url).then((result)=>{
if(result.status===200){
if(result.data.status===0){
}else if(result.data.status===1){
this.setState({
cardsModalsavetype:false,
loadtype:false,
deletepathtype:false
})
window.location.href = "/paths/" + result.data.subject_id
}
}
}).catch((error)=>{
console.log(error);
})
}
cardsModalcancel=()=>{
this.setState({
Modalstype:false,
Modalsbottomval:'',
loadtype:false,
deletepathtype:false
})
}
cardsModalsave=()=>{
let {loadtype,deletepathtype}=this.state;
//删除路径
if(deletepathtype===true){
let pathid=this.props.match.params.pathId;
const deleteUrl = `/paths/`+pathid+`.json`;
axios.delete(deleteUrl).then((response) => {
const status = response.data.status
if (status === 1) {
window.location.href = "/paths";
}
}).catch((error) => {
console.log(error)
})
}
//申请发布
if(loadtype===true){
let pathid=this.props.match.params.pathId;
let url ="/paths/"+pathid+"/publish.json";
axios.get(url).then((result)=>{
if(result.status===200){
if(result.data.status===0){
this.setState({
Modalstype:true,
Modalstopval: result.data.message,
})
}else if(result.data.status===1){
window.location.reload();
}
}
}).catch((error)=>{
console.log(error);
})
}
this.setState({
Modalstype:false,
Modalsbottomval:''
})
}
render(){
let{detailInfoList}=this.props;
let{Modalstype,Modalstopval,cardsModalcancel,cardsModalsave,Modalsbottomval,cardsModalsavetype,loadtype}=this.state;
const radioStyle = {
display: 'block',
height: '30px',
lineHeight: '30px',
};
return(
<div className="subhead">
<Modals
modalsType={Modalstype}
modalsTopval={Modalstopval}
modalsBottomval={Modalsbottomval}
modalCancel={cardsModalcancel}
modalSave={cardsModalsavetype===true?this.reovkissuePaths:this.cardsModalsave}
loadtype={loadtype}
>
</Modals>
{
detailInfoList &&
<div className="subhead_content">
<div className="font-28 color-white clearfix">
<span className="fl lineh-40">
{detailInfoList.name}
</span>
{detailInfoList===undefined?"":detailInfoList.allow_statistics===true?
<Tooltip placement="bottom" title={"编辑"}>
<Link to={"/paths/"+this.props.match.params.pathId+"/edit"} className="ml10 ring-green fl mt10" >
<img src={getImageUrl("images/educoder/icon/edit.svg")} className="fl mt3 ml2" />
</Link>
</Tooltip>
:""
}
{detailInfoList===undefined?"":detailInfoList.allow_statistics===true?
<Link to={"/paths/"+this.props.match.params.pathId+"/statistics"} className="user_default_btn edu-greenback-btn fr font-18"
>
学习统计
</Link>:""
}
{ detailInfoList.allow_send === true &&
<SendPanel {...this.props} {...this.state}></SendPanel>
}
</div>
<div className="clearfix mt20">
{
detailInfoList &&
<ul className="fl color-grey-eb pathInfo">
{ detailInfoList.stages_count!=0 ? <li><span>章节</span><span className="ml5">{detailInfoList.stages_count}</span></li> : ""}
{ detailInfoList.stage_shixuns_count!=0 ? <li><span>实训</span><span className="ml5">{ detailInfoList.stage_shixuns_count}</span></li> : ""}
{ detailInfoList.challenge_choose_count!=0 ? <li><span>选择题任务</span><span>{detailInfoList.challenge_choose_count}</span></li> : ""}
{ detailInfoList.challenges_count!=0 ? <li><span>实践任务</span><span>{detailInfoList.challenges_count}</span></li> : ""}
{ detailInfoList.subject_score!=0 ? <li><span>经验值</span><span>{detailInfoList.subject_score}</span></li> : ""}
{ detailInfoList.member_count!=0 ? <li><span>学习人数</span><span>{detailInfoList.member_count}</span></li> : ""}
</ul>
}
<div className="fr pr">
{detailInfoList===undefined?"":detailInfoList.allow_delete===true?<a
className={detailInfoList.publish_status===-1?"fl font-18 color-white mt5 mr20":"fl font-18 color-white mt5"}
style={{opacity: '0.6'}} onClick={this.allow_deletepath}
>删除路径</a>:""}
{
detailInfoList.publish_status===0&&detailInfoList.allow_statistics===true?
<a className="user_default_btn user_bluebg_btn font-18 fl ml40 userbluebgfont"
onClick={this.applyissuePath}
>申请发布</a>:""
}
{
detailInfoList.publish_status===1 && detailInfoList.allow_statistics===true?
<a className="user_default_btn user_grey_btn font-18 fl pointer ml40"
onClick={this.cancelissuePath}
>撤销申请</a>:""
}
{
detailInfoList.publish_status===2 && detailInfoList.allow_statistics===true?
<a className="user_default_btn user_grey_btn font-18 fl pointer ml40"
onClick={this.reovkissuePath}
>撤销发布</a>:""
}
</div>
</div>
</div>
}
</div>
)
}
}
export default DetailTop;

@ -369,9 +369,11 @@ class PathDetailIndex extends Component{
<p className="clearfix mb30">
<span className="font-16">课程须知</span>
{detailInfoList===undefined?"":detailInfoList.allow_statistics===true?
<Tooltip placement="bottom" title={"编辑"}>
<Link to={"/paths/"+this.props.match.params.pathId+"/edit"} className="fr mtf5">
<i className="iconfont icon-bianjidaibeijing font-20 color-green" data-tip-down="编辑"></i>
<i className="iconfont icon-bianjidaibeijing font-20 color-green"></i>
</Link>
</Tooltip>
:""
}
</p>
@ -397,16 +399,18 @@ class PathDetailIndex extends Component{
</div>
</div>
<Tooltip placement="bottom" title={"显示全部"}>
<div className={detailInfoList.tags.length>15&&clickdetailInfoListtype===false?"newsubscript mb9 color-grey-9 fr":"newsubscript mb9 color-grey-9 none"}
data-tip-down="显示全部"
onClick={()=>this.clickNewsubscript(0)}
><span className="mr8">...</span><Icon type="caret-down" />
</div>
</Tooltip>
<Tooltip placement="bottom" title={"收起"}>
<div className={clickdetailInfoListtype===false?"newsubscript mb9 color-grey-9 none":"newsubscript mb9 color-grey-9 fr"}
data-tip-down="收起"
onClick={()=>this.clickNewsubscript(1)}><Icon type="caret-up" />
</div>
</Tooltip>
</div>
}

@ -293,11 +293,12 @@ class Challenges extends Component {
<p className="clearfix mb30">
<span className="font-16 fl">简介</span>
<Tooltip placement="bottom" title={"编辑"}>
<a style={{ display: this.props.identity < 5 && ChallengesDataList&&ChallengesDataList.shixun_status < 3 ? "block" : 'none' }}
href={"/shixuns/" + id + "/settings?edit=1"} className="ring-green fr"
data-tip-down="编辑">
href={"/shixuns/" + id + "/settings?edit=1"} className="ring-green fr">
<img src={getImageUrl("images/educoder/icon/edit.svg")} className="fl mt3 ml2" />
</a>
</Tooltip>
</p>
<div className="justify break_full_word new_li markdown-body"
@ -378,11 +379,13 @@ class Challenges extends Component {
<div className="clearfix mb20">
<span className="fl ring-blue mr10 mt8">
{item.st === 0 ?
<img src={getImageUrl("images/educoder/icon/code.svg")} data-tip-down="实训任务"
className="fl mt2 ml2" />
<Tooltip placement="bottom" title={"实训任务"}>
<img src={getImageUrl("images/educoder/icon/code.svg")} className="fl mt2 ml2" />
</Tooltip>
:
<img src={getImageUrl("images/educoder/icon/choose.svg")} data-tip-down="选择题任务"
className="fl mt2 ml3" />
<Tooltip placement="bottom" title={"选择题任务"}>
<img src={getImageUrl("images/educoder/icon/choose.svg")} className="fl mt2 ml3" />
</Tooltip>
}
</span>
<span className="mr15 font-16 fl">{key+1}</span>

@ -10,6 +10,8 @@ import classNames from 'classnames';
import { getImageUrl, toPath } from 'educoder';
import { Tooltip } from 'antd';
import axios from 'axios';
import { CircularProgress } from 'material-ui/Progress';
@ -76,8 +78,10 @@ class Propaedeutics extends Component {
return (
<React.Fragment>
<p className="clearfix mb10 pl20 pr20" style={{display:this.props.identity<5&&this.props.status<3?"block":'none'}} >
<a href={"/shixuns/"+shixunId +"/update_propaedeutics"}className="ring-green fr mt8" id="edit_propaedeutics"
data-tip-down="编辑"><img src={getImageUrl("images/educoder/icon/edit.svg")} className="fl mt3 ml2" /></a>
<Tooltip placement="bottom" title={"编辑"}>
<a href={"/shixuns/"+shixunId +"/update_propaedeutics"}className="ring-green fr mt8" id="edit_propaedeutics">
<img src={getImageUrl("images/educoder/icon/edit.svg")} className="fl mt3 ml2" /></a>
</Tooltip>
</p>
{
loadingContent ?

Loading…
Cancel
Save