From 980aee35fd2e969de8b8b9ab9c3bb93fd3a05b1c Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E6=9D=A8=E6=A0=91=E6=9E=97?= <904079904@qq.com> Date: Wed, 14 Aug 2019 17:00:17 +0800 Subject: [PATCH 01/30] =?UTF-8?q?=E8=B0=83=E6=95=B4?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- public/react/src/modules/courses/Index.js | 12 +- .../src/modules/courses/ListPageIndex.js | 13 +- .../courses/coursesDetail/CoursesLeftNav.js | 11 +- .../modules/courses/gradinforms/Eduinforms.js | 174 ++++ .../src/modules/courses/new/Goldsubject.js | 814 ++++++++++++++++++ 5 files changed, 1021 insertions(+), 3 deletions(-) create mode 100644 public/react/src/modules/courses/gradinforms/Eduinforms.js create mode 100644 public/react/src/modules/courses/new/Goldsubject.js diff --git a/public/react/src/modules/courses/Index.js b/public/react/src/modules/courses/Index.js index 83f6679f7..78e839e5a 100644 --- a/public/react/src/modules/courses/Index.js +++ b/public/react/src/modules/courses/Index.js @@ -72,7 +72,11 @@ const WrappedCoursesNewApp= Loadable({ loader: () => import('./new/CoursesNew'), loading: Loading, }) - +//新建金品课堂 +const WrappedCoursesNewAppGoldclass= Loadable({ + loader: () => import('./new/Goldsubject'), + loading: Loading, +}) const ShixunHomeworkPage =Loadable({ loader: () => import('./shixunHomework/ShixunHomeworkPage'), loading: Loading, @@ -821,6 +825,12 @@ class CoursesIndex extends Component{ (props) => () } > + {/*新建金品课堂*/} + () + } + > {/*修改课堂*/} import('./members/studentsList'), loading: Loading, -}) +}); +const Eduinforms= Loadable({ + loader: () => import('./gradinforms/Eduinforms.js'), + loading: Loading, +}); // const Exercise= Loadable({ loader: () => import('./exercise/Exercise'), @@ -239,6 +243,13 @@ class ListPageIndex extends Component{ } > + {/*公告栏列表*/} + + () + } + > {/* 实训作业页面*/} { return (
+ {/*公告栏*/} {/*作业*/} {item.type==="shixun_homework"?
this.Navmodalnames(e,1,"shixun_homework",item.id)}>添加目录
:""} {/*资源*/} @@ -774,8 +775,12 @@ class Coursesleftnav extends Component{ // // console.log(item.category_url) // console.log(this.props.location.pathname) + console.log("778"); + console.log("CoursesLeftNav"); + console.log(this.props); + console.log(course_modules); - return( + return(
+ + {this.props.isAdmin()===true?
+ +
+ 已选 {checkBoxValues&&checkBoxValues.length} 个 +
+
  • 删除
  • +
  • 立即发布
  • + {/*onClick={this.homeworkstart}*/} +
  • 立即截止
  • +
  • + 设为公开 +
  • +
  • + {/*onClick={()=>this.selectBlank(4)}*/} + 移动到... +
      + { course_modules&&course_modules.homework_category.length > 10 &&

      + {this.setState({dirSearchValue: e.target.value})}}/> +

      } + + {course_modules&&course_modules.main_category.map((item,key)=>{ + return( + datas&&datas.category_id===null?"":
    • this.moveTos(item.main_category_id)}>{item.main_category_name}
    • + ) + })} + + + { course_modules&&course_modules.homework_category.filter((item,key)=> { + return (!this.state.dirSearchValue || item.category_name.indexOf(this.state.dirSearchValue) != -1) + }).map( (item,key) => { + if(datas&&datas.category_id!=null&&datas&&datas.category_id===item.category_id===false){ + return
    • this.moveTos(item.category_id )}>{item.category_name}
    • + } + if(datas&&datas.category_id===null){ + return
    • this.moveTos(item.category_id )}>{item.category_name}
    • + } + })} + + + + {course_modules&&course_modules.homework_category.length===0&&datas&&datas.category_id===null? +
      暂无数据
      :""} + + {/*{course_modules&&course_modules.homework_category.map((item,key)=>{*/} + {/*return(*/} + {/*
    • this.moveTos(item.category_id )}>{item.category_name}
    • */} + {/*)*/} + {/*})}*/} + + {this.props.isAdmin()?datas&&datas.category_name===undefined||datas&&datas.category_name===null? +

      + this.addDir()}>添加目录... +

      + :"":""} + +
    +
  • +
    +
    + +
    :""} + + + +
    + + + + ) + } +} +export default Eduinforms; diff --git a/public/react/src/modules/courses/new/Goldsubject.js b/public/react/src/modules/courses/new/Goldsubject.js new file mode 100644 index 000000000..5a02d54e8 --- /dev/null +++ b/public/react/src/modules/courses/new/Goldsubject.js @@ -0,0 +1,814 @@ +import React, {Component} from "React"; +import {Form, Select, Input, Button, Checkbox, DatePicker,Spin,Icon,AutoComplete,InputNumber} from "antd"; +import ApplyForAddOrgModal from '../../user/modal/ApplyForAddOrgModal'; +import axios from 'axios'; +import "../css/Courses.css"; +import locale from 'antd/lib/date-picker/locale/zh_CN'; +import moment from 'moment'; +import Modals from '../../modals/Modals'; + + + +const { Option } = Select; + + +const dateFormat = 'YYYY-MM-DD'; + +function range(start, end) { + const result = []; + for (let i = start; i < end; i++) { + result.push(i); + } + return result; +} + +function disabledDateTime() { + return { + disabledMinutes: () => range(1, 30).concat(range(31, 60)), + }; +} + +function disabledDate(current) { + return current && current < moment().endOf('day').subtract(1, 'days'); +} + +class Goldsubject extends Component { + + constructor(props) { + super(props) + this.state = { + coursedata: undefined, + searchlist: [], + searchlistscholl:[], + listvalue: undefined, + fetching:false, + subject_id:"", + start_date:"", + } + } + + componentDidMount() { + + + let coursesId = this.props.match.params.coursesId; + let user_school=this.props.current_user&&this.props.current_user.user_school; + // this.getschool("") + // this.Searchvalue("") + if (coursesId != undefined) { + let url = "/courses/" + coursesId + "/settings.json" + axios.get(url).then((result) => { + + let data = result.data; + this.props.form.setFieldsValue({ + course: data.course_list_name, + classroom: data.name, + period: data.class_period, + credit: data.credit, + checkboxgroup: data.course_module_types, + Realnamecertification: data.authentication, + Professionalcertification:data.professional_certification, + endtime: data.end_date === undefined ? "" : moment(data.end_date, dateFormat), + school:data.school + + }); + + this.setState({ + datatime: data.end_date, + datatimetwo: data.end_date, + is_public: 1, + Realnamecertification: data.authentication, + Professionalcertification:data.professional_certification, + }) + this.handleSearchschool(data.school); + }).catch((error) => { + console.log(error); + }) + }else{ + let url = "/courses/new.json" + axios.get(url).then((result) => { + console.log(result) + }).catch((error) => { + console.log(error); + }) + // console.log(user_school); + this.props.form.setFieldsValue({ + school:user_school, + }); + this.setState({ + school:user_school, + }); + + this.handleSearchschool(user_school); + + + } + + + } + componentDidUpdate(prevProps) { + if(prevProps.current_user !== this.props.current_user){ + let user_school=this.props.current_user&&this.props.current_user.user_school; + this.props.form.setFieldsValue({ + school:user_school, + }); + this.setState({ + school:user_school, + }); + + this.handleSearchschool(user_school); + } + } + onChangeTimepublishs = (date, dateString) => { + if(dateString===""){ + this.setState({ + datatime: undefined, + }) + }else{ + this.setState({ + datatime: dateString, + }) + } + }; + onChangeTimepublishstwo = (date, dateString) => { + if(dateString===""){ + this.setState({ + datatimetwo: undefined, + }) + }else{ + this.setState({ + datatimetwo: dateString, + }) + } + }; + cancelmodel = () => { + + this.setState({ + Modalstype: false, + Loadtype: false, + Modalstopval: "", + ModalCancel: "", + ModalSave: "", + }) + + } + + scrollToAnchor = (anchorName) => { + if (anchorName) { + // 找到锚点 + let anchorElement = document.getElementById(anchorName); + // 如果对应id的锚点存在,就跳转到锚点 + window.scrollTo(0, anchorElement.offsetTop - window.innerHeight / 2); + } + } + + //提交数据的地方 + handleSubmit = (e) => { + + e.preventDefault(); + let first_category_url=this.props.current_user.first_category_url; + let coursesId = this.props.match.params.coursesId; + let {is_public,datatime,datatimetwo} = this.state + // console.log(is_public) + if (coursesId != undefined) { + // 编辑 + + this.props.form.validateFields((err, values) => { + + // if(values.course===""||values.course===undefined){ + // this.scrollToAnchor("iscourse") + // return + // + // } + if(values.classroom===""||values.classroom===undefined){ + this.scrollToAnchor("isclassroom") + return + } + + if(values.school===""||values.school===undefined){ + // this.scrollToAnchor("isschool") + return + + } + + if(values.checkboxgroup.length===0){ + this.setState({ + Modalstype:true, + Modalstopval:"请您至少添加一个课堂模块,", + ModalsBottomval:"否则您将无法新建课堂。", + Loadtype:true, + ModalSave:()=>this.cancelmodel(), + }) + return + } + + + if (!err) { + + + + // console.log('Received values of form: ', values); + + let url = "/courses/" + coursesId + ".json"; + axios.put(url, { + // subject_id:128, //这是带过来的值 编辑就不要传值了 + name: values.classroom, + class_period: values.period, + credit: parseFloat(values.credit), + start_date:datatimetwo===undefined?"":datatimetwo, + end_date: datatime===undefined?"":datatime, + is_public: 1, //这是也是带过来的值 + course_module_types: values.checkboxgroup, + school:values.school + } + ).then((response) => { + // debugger + if (response.data.status === 0) { + // this.goback() + + window.location.href=first_category_url; + var yslGuideone = window.localStorage.getItem('yslGuideone'); + try { + if(yslGuideone=== null){ + window.localStorage.setItem('yslGuideone', "true"); + return + } + if(yslGuideone=== undefined){ + window.localStorage.setItem('yslGuideone', "true"); + return + } + }catch (e) { + + } + + } + }).catch((error) => { + console.log(error) + }) + } + }); + } else { + this.props.form.validateFields((err, values) => { + + // if(values.course===""||values.course===undefined){ + // this.scrollToAnchor("iscourse") + // return + // } + if(values.classroom===""||values.classroom===undefined){ + this.scrollToAnchor("isclassroom") + return + } + if(values.school===""||values.school===undefined){ + // this.scrollToAnchor("isschool") + return + + } + if (!err) { + // debugger + //新建 + // console.log('Received values of form: ', values); + + let url = "/courses.json"; + axios.post(url, { + subject_id:128, //这是带过来的值 + name: values.classroom, + class_period: values.period, + credit: parseFloat(values.credit), + start_date:datatimetwo===undefined?"":datatimetwo, + end_date: datatime===undefined?"":datatime, + is_public: 1, //这是也是带过来的值 + course_module_types: values.checkboxgroup, + school:values.school + } + ).then((response) => { + if (response.status === 200) { + // this.goback + window.location.href=response.data.first_category_url; + var yslGuideone = window.localStorage.getItem('yslGuideone'); + try { + if(yslGuideone=== null){ + window.localStorage.setItem('yslGuideone', "true"); + return + } + if(yslGuideone=== undefined){ + window.localStorage.setItem('yslGuideone', "true"); + return + } + }catch (e) { + + } + } + }).catch((error) => { + console.log(error) + }) + } + }); + } + + } + + goback = () => { + + // if(this.props.match.params.coursesId===undefined){ + // this.props.history.push("/courses"); + // }else{ + // this.props.history.push(this.props.current_user.first_category_url); + // } + // window.history.go(-1) + this.props.history.goBack() + } + + onCheckAllChange = (e) => { + // console.log(e.target.checked) + this.setState({ + is_public: e.target.checked == true ? 1 : 0, + }); + } + onchanges =(e)=>{ + this.setState({ + Realnamecertification:e.target.checked, + }) + // console.log(e.target.checked); + } + onchangess=(e)=>{ + this.setState({ + Professionalcertification:e.target.checked, + }) + // console.log(e.target.checked); + } + Searchvalue=(value)=>{ + + let url="/courses/search_course_list.json"; + axios.post(url,{ + search:value + }).then((result)=>{ + // console.log(result.data) + if (result.data.message===undefined) { + + this.setState({ + searchlist: result.data.course_lists, + // course:value, + + }) + } + // this.props.form.setFieldsValue({ + // course:value + // }) + }).catch((error)=>{ + console.log(error) + }) + } + handleSearch=(value)=>{ + + + if(value!=""){ + this.props.form.setFieldsValue({ + classroom:value, + // course:value + }); + this.Searchvalue(value) + } + + }; + + handleChange=(value)=>{ + + this.props.form.setFieldsValue({ + // course:value, + classroom:value + }) + }; + + handleSearchschool=(value)=>{ + + if(value!="") { + // this.props.form.setFieldsValue({ + // // school: value, + // fetching: true, + // }); + this.setState({ + fetching: true, + school: value + }) + this.getschool(value) + } + }; + + handleChangeschools=(value)=>{ + + // this.props.form.setFieldsValue({ + // // school: value, + // fetching: true, + // }); + // this.setState({ + // fetching: true + // }) + } + + handleChangeschool=(value)=>{ + + this.setState({ + school:value + }); + this.props.form.setFieldsValue({ + school:value, + }) + }; + + getschool=(value)=>{ + // this.props.form.setFieldsValue({ + // school: value + // }) + let url="/schools/school_list.json"; + axios.get(url,{ + params: { + search: value + } + }).then((result)=>{ + if (result.data.status===0) { + this.setState({ + searchlistscholl: result.data.school_names, + + }) + if(result.data.school_names.length!=0){ + this.setState({ + fetching: false + }) + } + } + }).catch((error)=>{ + console.log(error) + }) + } + showApplyForAddOrgModal = () => { + this.applyForAddOrgForm.setVisible(true) + } + render() { + let {datatime,datatimetwo,school,searchlistscholl} = this.state; + const {getFieldDecorator} = this.props.form; + const propsWithoutForm = Object.assign({}, this.props) + delete propsWithoutForm.form + const options = this.state.searchlist && this.state.searchlist.map(d => ); + const optionschool = this.state.searchlistscholl===undefined?"":this.state.searchlistscholl===null?"":this.state.searchlistscholl==="[]"?"":this.state.searchlistscholl.map(z => ); + // console.log(this.props.current_user.user_school) + // form合并了 + console.log("获取到的数据"); + console.log(this.state); + console.log(this.props); + console.log(this.props.current_user); + return ( + + +
    + + this.applyForAddOrgForm = form} schoolName={school} + {...propsWithoutForm}> + {/*提示*/} + +
    +
    +
    +

    {this.props.match.params.coursesId === undefined ? "新建课堂" : "编辑课堂"}

    + 返回 +
    + + +
    + {/*内容*/} + + + {/*
    */} + {/*
    */} + {/* */} + {/* {getFieldDecorator('course', {*/} + {/* rules: [{required: true, message: "不能为空"}],*/} + {/* })(*/} + + {/* */} + {/* {options}*/} + {/* */} + {/* )}*/} + {/* */} + {/* /!*(错误示例:数据结构2017本部;数据结构2017秋季;数据结构2017电子商务1班)*!/*/} + {/*

    */} + {/* */} + {/* 正确示例:数据结构*/} + {/*

    */} + {/*

    */} + {/* */} + {/* 错误示例:数据结构2019春*/} + {/*

    */} + {/*
    */} + {/*
    */} + {/*
    */} + {/*
    */} + + {/*
    */} + + +
    + + + {getFieldDecorator('classroom', { + rules: [{required: true, message: "不能为空"}], + })( + + + {options} + + )} + + {/*(如果本学期包含多个班级,只需创建一个课堂然后在课堂内部建立不同的分班)*/} +

    + + 正确示例:数据结构2019春季班级 +

    +

    + + 错误示例:2019春季班级数据结构 +

    +
    +
    +
    + + +
    + +
    + + + {getFieldDecorator("period", + { + rules:[{ + required:false, + pattern: new RegExp(/^[0-9]\d*$/, "g"), + message: '' + }], + getValueFromEvent: (event) => { + return event.target.value.replace(/\D/g,'') + }} + )( + + )} + + + + {getFieldDecorator("credit", + { + rules:[{ + required:false, + pattern: new RegExp(/^[0-9]\d*$/, "g"), + message: '' + }], + getValueFromEvent: (event) => { + return event.target.value.replace(/\D/g,'') + }} + )( + + )} + + + {getFieldDecorator("starttime")( + + + + )} + + + {getFieldDecorator("endtime")( + + + + )} + +
    + +
    + + + {getFieldDecorator("checkboxgroup", { + initialValue: [ + "announcement","online_learning","shixun_homework", "exercise", + ], + })( + + 公告栏 + 在线学习 + 实训作业 + 普通作业 + 试卷 + 问卷 + 资源 + 讨论 + 分班 + + )} + +
    + {/*
    */} + {/* */} + {/* */} + {/* {getFieldDecorator("Realnamecertification")(*/} + {/* 已实名认证*/} + {/* // */} + {/* // 已实名认证*/} + {/* // 已职业认证 (勾选,则通过邀请码加入课堂的用户,需要完成相关认证才能加入课堂)*/} + {/* // */} + {/* )}*/} + {/* */} + {/* */} + {/* */} + {/* */} + {/* {getFieldDecorator("Professionalcertification")(*/} + {/* 已职业认证 (勾选,则通过邀请码加入课堂的用户,需要完成相关认证才能加入课堂)*/} + {/* )}*/} + {/* */} + {/* */} + {/*
    */} + {/*
    */} + {/* */} + {/* {getFieldDecorator("publicclass")(*/} + {/* 公开课堂*/} + {/* )}*/} + {/* (选中后本课堂对所有用户可见,否则仅本课堂成员可见)*/} + {/* */} + {/*
    */} + +
    + + {getFieldDecorator('school', { + rules: [{required: true, message: "不能为空"}], + })( + + {optionschool} + + )} + + {/*(输入内容出现匹配的下拉菜单←同账号管理的单位信息填写)*/} + +
    +
    + + {searchlistscholl.length===0&&this.state.fetching===true?
    + + 未找到包含“{school}”的高校, + 申请新增 + +
    :""} + +
    + + + +
    + +
    + + {/*提交*/} + 取消 +
    +
    +
    +
    +
    +
    +
    + +
    + + ) + } +} + +const WrappedCoursesNewAppGoldclass = Form.create({name: 'goldsubject'})(Goldsubject); +export default WrappedCoursesNewAppGoldclass; \ No newline at end of file From 38b72f0d707078efb435256853f85a177e7a6b5c Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E6=9D=A8=E6=A0=91=E6=9E=97?= <904079904@qq.com> Date: Thu, 15 Aug 2019 11:15:33 +0800 Subject: [PATCH 02/30] =?UTF-8?q?=E8=B0=83=E6=95=B4?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../modules/courses/gradinforms/Eduinforms.js | 145 +++--------------- .../shixunHomework/Listofworksstudentone.js | 2 +- 2 files changed, 20 insertions(+), 127 deletions(-) diff --git a/public/react/src/modules/courses/gradinforms/Eduinforms.js b/public/react/src/modules/courses/gradinforms/Eduinforms.js index 01fb52cab..13c3c0545 100644 --- a/public/react/src/modules/courses/gradinforms/Eduinforms.js +++ b/public/react/src/modules/courses/gradinforms/Eduinforms.js @@ -4,8 +4,6 @@ import { WordsBtn,on, off, trigger } from 'educoder'; import '../css/members.css'; import '../css/busyWork.css' -const Search = Input.Search; - class Eduinforms extends Component{ constructor(props){ super(props); @@ -15,8 +13,18 @@ class Eduinforms extends Component{ } componentDidMount() { + console.log("获取到数据"); + console.log(this.props); + // let url = "/courses/:id/informs.json"; + // + // axios.get(url).then((response) => { + // if(response){ + // + // } + // }).catch((error) => { + // console.log(error) + // }); - on('updateNavSuccess', this.updateNavSuccess) } @@ -37,134 +45,19 @@ class Eduinforms extends Component{

    - {datas&&datas.category_name===undefined||datas&&datas.category_name===null?datas&&datas.main_category_name:datas&&datas.category_name+" 作业列表"} -

  • - {this.props.isAdmin()===true?datas&&datas.category_name===undefined||datas&&datas.category_name===null? - - this.addDir()} className={"mr30 font-16"}>添加目录 - {/*this.editname(datas&&datas.main_category_name)} className={"mr30"}>目录重命名*/} - : - this.editDir(datas&&datas.category_name)} className={"mr30 font-16"}>目录重命名:""} - {this.props.isAdmin()===true?datas&&datas.category_name===undefined||datas&&datas.category_name===null?选用实践课程:"":""} - {this.props.isAdmin()===true?this.createCommonWork()}>选用实训:""} + 公告栏 +
  • + 编辑
  • -
    -

    -

    - 共 {datas&&datas.all_count}个实训作业 - 已发布:{datas&&datas.published_count}个 - 未发布: {datas&&datas.unpublished_count}个 -
    -

    -
    - - 全部 - {this.props.isAdmin()?未发布:""} - 提交中 - 补交中 - 评阅中 - -
    -
    - this.SearchCoursename(value)} - > -
    -
    - - {this.props.isAdmin()===true?
    - -
    - 已选 {checkBoxValues&&checkBoxValues.length} 个 -
    -
  • 删除
  • -
  • 立即发布
  • - {/*onClick={this.homeworkstart}*/} -
  • 立即截止
  • -
  • - 设为公开 -
  • -
  • - {/*onClick={()=>this.selectBlank(4)}*/} - 移动到... -
      - { course_modules&&course_modules.homework_category.length > 10 &&

      - {this.setState({dirSearchValue: e.target.value})}}/> -

      } - - {course_modules&&course_modules.main_category.map((item,key)=>{ - return( - datas&&datas.category_id===null?"":
    • this.moveTos(item.main_category_id)}>{item.main_category_name}
    • - ) - })} - - - { course_modules&&course_modules.homework_category.filter((item,key)=> { - return (!this.state.dirSearchValue || item.category_name.indexOf(this.state.dirSearchValue) != -1) - }).map( (item,key) => { - if(datas&&datas.category_id!=null&&datas&&datas.category_id===item.category_id===false){ - return
    • this.moveTos(item.category_id )}>{item.category_name}
    • - } - if(datas&&datas.category_id===null){ - return
    • this.moveTos(item.category_id )}>{item.category_name}
    • - } - })} - - - - {course_modules&&course_modules.homework_category.length===0&&datas&&datas.category_id===null? -
      暂无数据
      :""} - - {/*{course_modules&&course_modules.homework_category.map((item,key)=>{*/} - {/*return(*/} - {/*
    • this.moveTos(item.category_id )}>{item.category_name}
    • */} - {/*)*/} - {/*})}*/} - - {this.props.isAdmin()?datas&&datas.category_name===undefined||datas&&datas.category_name===null? -

      - this.addDir()}>添加目录... -

      - :"":""} - -
    -
  • -
    -
    - -
    :""} - - - -
    + {/**/} + + + + {/**/} diff --git a/public/react/src/modules/courses/shixunHomework/Listofworksstudentone.js b/public/react/src/modules/courses/shixunHomework/Listofworksstudentone.js index 7f821bde4..6ef194380 100644 --- a/public/react/src/modules/courses/shixunHomework/Listofworksstudentone.js +++ b/public/react/src/modules/courses/shixunHomework/Listofworksstudentone.js @@ -2412,7 +2412,7 @@ class Listofworksstudentone extends Component { console.log(error) }); - } + }; // // setComputeTime=()=>{ // this.setState({ From cd3aecc8f18da84d41ac9a8f2f9dc47f53ea2de9 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E6=9D=A8=E6=A0=91=E6=9E=97?= <904079904@qq.com> Date: Thu, 15 Aug 2019 15:57:01 +0800 Subject: [PATCH 03/30] =?UTF-8?q?=E8=B0=83=E6=95=B4?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../modules/courses/gradinforms/Eduinforms.js | 158 +++++++++++++++--- .../courses/gradinforms/myysleduinforms.css | 6 + 2 files changed, 143 insertions(+), 21 deletions(-) create mode 100644 public/react/src/modules/courses/gradinforms/myysleduinforms.css diff --git a/public/react/src/modules/courses/gradinforms/Eduinforms.js b/public/react/src/modules/courses/gradinforms/Eduinforms.js index 13c3c0545..d23e77b1f 100644 --- a/public/react/src/modules/courses/gradinforms/Eduinforms.js +++ b/public/react/src/modules/courses/gradinforms/Eduinforms.js @@ -1,13 +1,19 @@ import React,{ Component } from "react"; -import { Input,Checkbox,Table, Pagination, Modal,Menu, Tooltip,Spin } from "antd"; -import { WordsBtn,on, off, trigger } from 'educoder'; -import '../css/members.css'; -import '../css/busyWork.css' +import { Input,Checkbox,Table, Pagination, Modal,Menu, Tooltip,Spin,Button,Form } from "antd"; +import { WordsBtn,on, off, trigger,markdownToHTML,getImageUrl} from 'educoder'; +import './myysleduinforms.css' +import axios from 'axios'; +import TPMMDEditor from "../../tpm/challengesnew/TPMMDEditor"; class Eduinforms extends Component{ constructor(props){ super(props); + this.messageRef = React.createRef(); + this.state={ + description:null, + isSpin:true, + whethertoedit:false, } } @@ -15,15 +21,37 @@ class Eduinforms extends Component{ componentDidMount() { console.log("获取到数据"); console.log(this.props); - // let url = "/courses/:id/informs.json"; - // - // axios.get(url).then((response) => { - // if(response){ + let url = `/courses/${this.props.match.params.id}/informs.json`; // - // } - // }).catch((error) => { - // console.log(error) - // }); + axios.get(url).then((response) => { + if(response){ + if(response.data){ + this.setState({ + description:response.data.description, + isSpin:false, + }) + }else { + this.setState({ + description:null, + isSpin:false, + + }) + + } + }else { + this.setState({ + description:null, + isSpin:false, + }) + + } + }).catch((error) => { + console.log(error) + this.setState({ + description:null, + isSpin:false, + }) + }); } @@ -33,35 +61,123 @@ class Eduinforms extends Component{ } + bianji = (bians)=>{ + this.setState({ + whethertoedit:bians, + }) + }; + handleSubmit=()=>{ + } render(){ + let{description,whethertoedit} =this.state; + const {getFieldDecorator} = this.props.form; return( -
    -
    +
    +

    公告栏 -

  • +
  • this.bianji(true)}> 编辑
  • - {/**/} - - - - {/**/} + + +
    + { + whethertoedit === false? +
    + { + description === null || description=== undefined ? +
    +
    +

    暂时还没有相关数据哦!

    +
    + :"" + } +
    + : +
    +
    + +
    +
    + + + {getFieldDecorator('description', { + rules: [{ + required: true, message: '请在此输入内容,最多5000个字符', + }, { + max: 5000, message: '最大限制为5000个字符', + }], + })( + + )} + +
    +
    + + +
    + 取消 + +
    +
    +
    +
    + } + + +
    + + + + +
    ) } } -export default Eduinforms; +const Eduinformss = Form.create({ name: 'eduinforms' })(Eduinforms); +export default Eduinformss; diff --git a/public/react/src/modules/courses/gradinforms/myysleduinforms.css b/public/react/src/modules/courses/gradinforms/myysleduinforms.css new file mode 100644 index 000000000..6fa1367d4 --- /dev/null +++ b/public/react/src/modules/courses/gradinforms/myysleduinforms.css @@ -0,0 +1,6 @@ +.yslmt16px{ + padding-top: 16px; + padding-left: 25px; + padding-right: 25px; + padding-bottom: 50px; +} From 2c94c246e8bc90947b6537cf0947bb18151699e7 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E6=9D=A8=E6=A0=91=E6=9E=97?= <904079904@qq.com> Date: Thu, 15 Aug 2019 16:25:26 +0800 Subject: [PATCH 04/30] =?UTF-8?q?=E8=B0=83=E6=95=B4?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- public/react/src/modules/courses/gradinforms/Eduinforms.js | 6 +++++- .../src/modules/courses/gradinforms/myysleduinforms.css | 2 +- public/react/src/modules/courses/shixunHomework/guide.css | 2 +- 3 files changed, 7 insertions(+), 3 deletions(-) diff --git a/public/react/src/modules/courses/gradinforms/Eduinforms.js b/public/react/src/modules/courses/gradinforms/Eduinforms.js index d23e77b1f..520a51c76 100644 --- a/public/react/src/modules/courses/gradinforms/Eduinforms.js +++ b/public/react/src/modules/courses/gradinforms/Eduinforms.js @@ -128,7 +128,11 @@ class Eduinforms extends Component{ bottom:-10px; left:0px; } - + .ant-form-vertical .ant-form-explain { + margin-top: 0px !important; + margin-bottom: 0px !important; + padding-left: 0px !important; + } ` } diff --git a/public/react/src/modules/courses/gradinforms/myysleduinforms.css b/public/react/src/modules/courses/gradinforms/myysleduinforms.css index 6fa1367d4..b72b99e78 100644 --- a/public/react/src/modules/courses/gradinforms/myysleduinforms.css +++ b/public/react/src/modules/courses/gradinforms/myysleduinforms.css @@ -2,5 +2,5 @@ padding-top: 16px; padding-left: 25px; padding-right: 25px; - padding-bottom: 50px; + padding-bottom: 20px; } diff --git a/public/react/src/modules/courses/shixunHomework/guide.css b/public/react/src/modules/courses/shixunHomework/guide.css index cd7ec9b0b..cc6fd8ee8 100755 --- a/public/react/src/modules/courses/shixunHomework/guide.css +++ b/public/react/src/modules/courses/shixunHomework/guide.css @@ -511,7 +511,7 @@ height: 53%; } .ysldiv71024{ - margin-top: 31%; + margin-top: 31% ; margin-left: 27%; margin-right: 0; height: 40%; From 8f202a7d5cba52714f27318f683a7c07dcd454b1 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E6=9D=A8=E6=A0=91=E6=9E=97?= <904079904@qq.com> Date: Fri, 16 Aug 2019 09:24:02 +0800 Subject: [PATCH 05/30] =?UTF-8?q?=E8=B0=83=E6=95=B4?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../modules/courses/gradinforms/Eduinforms.js | 91 +++++++++++++++++-- .../courses/gradinforms/myysleduinforms.css | 15 ++- 2 files changed, 92 insertions(+), 14 deletions(-) diff --git a/public/react/src/modules/courses/gradinforms/Eduinforms.js b/public/react/src/modules/courses/gradinforms/Eduinforms.js index 520a51c76..6cbbd6672 100644 --- a/public/react/src/modules/courses/gradinforms/Eduinforms.js +++ b/public/react/src/modules/courses/gradinforms/Eduinforms.js @@ -67,8 +67,46 @@ class Eduinforms extends Component{ }) }; - handleSubmit=()=>{ + handleSubmit=(e) => { + e.preventDefault(); + this.props.form.validateFields((err, values) => { + if (!err) { + console.log(values.description); + if(values.description === undefined|| values.description === "" || values.description ===null){ + this.props.showNotification(`请输入提交内容`); + return + + } + var id=this.props.match.params.id + + var url = `/courses/${id}/update_informs.json`; + axios.post(url,{ + description:values.description, + }).then((result) => { + if(result){ + if(result.data){ + if(result.data.status === 0){ + this.setState({ + description:values.description, + whethertoedit:false, + }) + + }else { + this.props.showNotification(result.data.message); + + } + } + + } + }).catch((error) => { + console.log(error) + }) + }else{ + console.log(err); + } + + }); } @@ -79,13 +117,19 @@ class Eduinforms extends Component{ return(
    -
    +

    公告栏 -

  • this.bianji(true)}> - 编辑 -
  • + { + this.props.isAdmin()===true? +
  • this.bianji(true)}> + 编辑 +
  • + :"" + } +

    @@ -97,13 +141,19 @@ class Eduinforms extends Component{ whethertoedit === false?
    { - description === null || description=== undefined ? + description === null || description=== undefined ||description === "" ?

    暂时还没有相关数据哦!

    - :"" + : +
    +
    + + +
    +
    }
    : @@ -132,13 +182,34 @@ class Eduinforms extends Component{ margin-top: 0px !important; margin-bottom: 0px !important; padding-left: 0px !important; + } + .chooseDes .ant-form-item-with-help { + margin-bottom: 24px !important; + } + + .courseMessageMD .ant-form-item-with-help { + margin-bottom: 24px !important; + } + .chooseDes .editormd-toolbar { + width: 100%; + min-height: 37px; + background: #fff; + display: none; + position: absolute; + left: 0; + z-index: 10; + border-bottom: 1px solid #ddd; + } + .yslmt16px .ant-form-item-with-help + { + margin-bottom: 24px !important; } ` } {getFieldDecorator('description', { rules: [{ @@ -149,7 +220,7 @@ class Eduinforms extends Component{ })( diff --git a/public/react/src/modules/courses/gradinforms/myysleduinforms.css b/public/react/src/modules/courses/gradinforms/myysleduinforms.css index b72b99e78..1d93ea426 100644 --- a/public/react/src/modules/courses/gradinforms/myysleduinforms.css +++ b/public/react/src/modules/courses/gradinforms/myysleduinforms.css @@ -1,6 +1,13 @@ .yslmt16px{ - padding-top: 16px; - padding-left: 25px; - padding-right: 25px; - padding-bottom: 20px; + padding-top: 16px !important; + padding-left: 25px !important; + padding-right: 25px !important; + padding-bottom: 1px !important; } + +.yslmtopcg +{ + padding: 25px !important; + + +} \ No newline at end of file From b22ac386fe3c963f610d8d821730df01ba768b4d Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E6=9D=A8=E6=A0=91=E6=98=8E?= <775174143@qq.com> Date: Fri, 16 Aug 2019 09:36:13 +0800 Subject: [PATCH 06/30] =?UTF-8?q?=E8=B0=83=E6=95=B4?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- public/react/public/css/iconfont.css | 36 +++++++++++++++---- .../courses/coursesDetail/CoursesLeftNav.js | 4 +-- 2 files changed, 32 insertions(+), 8 deletions(-) diff --git a/public/react/public/css/iconfont.css b/public/react/public/css/iconfont.css index a393f2b39..353a64fb0 100644 --- a/public/react/public/css/iconfont.css +++ b/public/react/public/css/iconfont.css @@ -1,10 +1,10 @@ @font-face {font-family: "iconfont"; - src: url('iconfont.eot?t=1563868936201'); /* IE9 */ - src: url('iconfont.eot?t=1563868936201#iefix') format('embedded-opentype'), /* IE6-IE8 */ - url('data:application/x-font-woff2;charset=utf-8;base64,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') format('woff2'), - url('iconfont.woff?t=1563868936201') format('woff'), - url('iconfont.ttf?t=1563868936201') format('truetype'), /* chrome, firefox, opera, Safari, Android, iOS 4.2+ */ - url('iconfont.svg?t=1563868936201#iconfont') format('svg'); /* iOS 4.1- */ + src: url('iconfont.eot?t=1565919034743'); /* IE9 */ + src: url('iconfont.eot?t=1565919034743#iefix') format('embedded-opentype'), /* IE6-IE8 */ + url('data:application/x-font-woff2;charset=utf-8;base64,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') format('woff2'), + url('iconfont.woff?t=1565919034743') format('woff'), + url('iconfont.ttf?t=1565919034743') format('truetype'), /* chrome, firefox, opera, Safari, Android, iOS 4.2+ */ + url('iconfont.svg?t=1565919034743#iconfont') format('svg'); /* iOS 4.1- */ } .iconfont { @@ -179,6 +179,10 @@ content: "\e67f"; } +.icon-xiaoxi1:before { + content: "\e6a4"; +} + .icon-xiazai1:before { content: "\e6ac"; } @@ -227,6 +231,10 @@ content: "\e602"; } +.icon-yonghujiaose_wushuju:before { + content: "\e69e"; +} + .icon-moban:before { content: "\e692"; } @@ -575,6 +583,10 @@ content: "\e64e"; } +.icon-xuexizhongxin:before { + content: "\e6a2"; +} + .icon-wenjian:before { content: "\e64f"; } @@ -763,7 +775,19 @@ content: "\e604"; } +.icon-bianji1:before { + content: "\e6a1"; +} + .icon-paixu1:before { content: "\e6aa"; } +.icon-renzhengshangjia:before { + content: "\e6ab"; +} + +.icon-shenfenzhenghaomaguizheng:before { + content: "\e6ad"; +} + diff --git a/public/react/src/modules/courses/coursesDetail/CoursesLeftNav.js b/public/react/src/modules/courses/coursesDetail/CoursesLeftNav.js index 40beb5313..cceade4f8 100644 --- a/public/react/src/modules/courses/coursesDetail/CoursesLeftNav.js +++ b/public/react/src/modules/courses/coursesDetail/CoursesLeftNav.js @@ -876,8 +876,8 @@ class Coursesleftnav extends Component{
  • this.showsandians(e,key,item.category_url,1)} className={this.props.mainurl===item.category_url&&key===this.props.indexs?"liactive":"clearfix active"} onMouseLeave={(e)=>this.hidesandian(e,key)} onMouseEnter={(e)=>this.showsandian(e,key)}> this.showsandians(e,key,item.category_url,1)} className={ item.second_category===undefined?"fl ml20 pd0":item.second_category.length===0?"fl ml20 pd0":this.state.sandiantypes===key?"fl ml20 pd0 ebebeb":"fl ml20 pd0"}> { - item.type==="announcement"?: - item.type==="online_learning"?: + item.type==="announcement"?: + item.type==="online_learning"?: item.type==="shixun_homework"?: item.type==="common_homework"?: item.type==="group_homework"?: From 12dd5b128ef27aa8229035adaaf7e682f076b14a Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E6=9D=A8=E6=A0=91=E6=98=8E?= <775174143@qq.com> Date: Fri, 16 Aug 2019 09:58:48 +0800 Subject: [PATCH 07/30] =?UTF-8?q?=E8=B0=83=E6=95=B4?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../courses/coursesDetail/CoursesLeftNav.js | 20 +++++++++++-------- 1 file changed, 12 insertions(+), 8 deletions(-) diff --git a/public/react/src/modules/courses/coursesDetail/CoursesLeftNav.js b/public/react/src/modules/courses/coursesDetail/CoursesLeftNav.js index cceade4f8..5a20e89b0 100644 --- a/public/react/src/modules/courses/coursesDetail/CoursesLeftNav.js +++ b/public/react/src/modules/courses/coursesDetail/CoursesLeftNav.js @@ -682,18 +682,22 @@ class Coursesleftnav extends Component{ if(result.source.droppableId==="shixun_homework"||result.source.droppableId==="graduation"||result.source.droppableId==="attachment"){ - let url ="/course_second_categories/"+result.draggableId+"/move_category.json" - this.droppablepost(url,result.destination.index+1) - + let url ="/course_second_categories/"+result.draggableId+"/move_category.json"; + if(result.destination.index!=null){ + this.droppablepost(url,result.destination.index+1) + } }else if(result.source.droppableId==="board"){ - let url ="/boards/"+result.draggableId+"/move_category.json" - this.droppablepost(url,result.destination.index+1) - + let url ="/boards/"+result.draggableId+"/move_category.json"; + if(result.destination.index!=null) { + this.droppablepost(url, result.destination.index + 1) + } }else if(result.source.droppableId==="course_group"){ if(result.draggableId!=1){ - let url ="/course_groups/"+result.draggableId+"/move_category.json" - this.droppablepost(url,result.destination.index+1) + let url ="/course_groups/"+result.draggableId+"/move_category.json"; + if(result.destination.index!=null) { + this.droppablepost(url, result.destination.index + 1) + } } } From a9c4049d33abbe10e941bffc9682756745a26c76 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E6=9D=A8=E6=A0=91=E6=98=8E?= <775174143@qq.com> Date: Fri, 16 Aug 2019 10:35:50 +0800 Subject: [PATCH 08/30] =?UTF-8?q?=E8=B0=83=E6=95=B4?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- public/react/public/css/edu-all.css | 2 ++ .../courses/coursesDetail/CoursesLeftNav.js | 16 ++++------------ .../react/src/modules/paths/ShixunPathCard.js | 19 +++++++++++++++++-- public/stylesheets/educoder/edu-all.css | 2 ++ 4 files changed, 25 insertions(+), 14 deletions(-) diff --git a/public/react/public/css/edu-all.css b/public/react/public/css/edu-all.css index b401dd24a..3b96cbf7f 100644 --- a/public/react/public/css/edu-all.css +++ b/public/react/public/css/edu-all.css @@ -114,6 +114,8 @@ em.vertical-line{display: inline-block;width: 2px;background: #999;height: 10px} /*块状列表上面的绿色标签*/ .tag-green{position: absolute;left: 0px;top:20px;} .tag-green .tag-name{display: block;width: auto;background-image: url("/images/educoder/tag1.png");background-size: 100% 100%;padding: 0px 8px;color: #fff;float: left;} +.tag-orange{position: absolute;right: 0px;top:20px;} +.tag-orange .tag-name{display: block;width: auto;background-color:#FF6800;background-size: 100% 100%;padding: 0px 8px;color: #fff;float: left;} /*发送至弹框里的下拉框*/ .downSelectOption{position: relative;height: 35px;} .downSelectOption .showOption{background-color: #F4F4F4;border: 1px solid #EAEAEA;width: 100%;padding: 5px 40px 5px 5px;outline: none;height: 100%;box-sizing: border-box;} diff --git a/public/react/src/modules/courses/coursesDetail/CoursesLeftNav.js b/public/react/src/modules/courses/coursesDetail/CoursesLeftNav.js index 5a20e89b0..3ad819533 100644 --- a/public/react/src/modules/courses/coursesDetail/CoursesLeftNav.js +++ b/public/react/src/modules/courses/coursesDetail/CoursesLeftNav.js @@ -565,7 +565,7 @@ class Coursesleftnav extends Component{ - + updatadeleteSecondary=(url)=>{ this.props.updataleftNavfun(); // this.setState({ @@ -648,7 +648,6 @@ class Coursesleftnav extends Component{ } onDragEnd=(result)=>{ - debugger // console.log(result) // let {course_modules}=this.props; // let newcourse_modules=course_modules; @@ -683,21 +682,14 @@ class Coursesleftnav extends Component{ if(result.source.droppableId==="shixun_homework"||result.source.droppableId==="graduation"||result.source.droppableId==="attachment"){ let url ="/course_second_categories/"+result.draggableId+"/move_category.json"; - if(result.destination.index!=null){ - this.droppablepost(url,result.destination.index+1) - } + this.droppablepost(url,result.destination.index+1) }else if(result.source.droppableId==="board"){ - let url ="/boards/"+result.draggableId+"/move_category.json"; - if(result.destination.index!=null) { - this.droppablepost(url, result.destination.index + 1) - } + this.droppablepost(url, result.destination.index + 1) }else if(result.source.droppableId==="course_group"){ if(result.draggableId!=1){ let url ="/course_groups/"+result.draggableId+"/move_category.json"; - if(result.destination.index!=null) { - this.droppablepost(url, result.destination.index + 1) - } + this.droppablepost(url, result.destination.index + 1) } } diff --git a/public/react/src/modules/paths/ShixunPathCard.js b/public/react/src/modules/paths/ShixunPathCard.js index 1b0759d1f..42e6873c7 100644 --- a/public/react/src/modules/paths/ShixunPathCard.js +++ b/public/react/src/modules/paths/ShixunPathCard.js @@ -29,9 +29,24 @@ class ShixunPathCard extends Component{
  • } - -
    + + + { + item.excellent === true ? "" : +
    + 开放课程 +
    + } + +

    非试用内容,需要授权

    diff --git a/public/stylesheets/educoder/edu-all.css b/public/stylesheets/educoder/edu-all.css index 6b156558f..d55fd3906 100644 --- a/public/stylesheets/educoder/edu-all.css +++ b/public/stylesheets/educoder/edu-all.css @@ -116,6 +116,8 @@ em.vertical-line{display: inline-block;width: 2px;background: #999;height: 10px} /*块状列表上面的绿色标签*/ .tag-green{position: absolute;left: 0px;top:20px;} .tag-green .tag-name{display: block;width: auto;background-image: url("/images/educoder/tag1.png");background-size: 100% 100%;padding: 0px 8px;color: #fff;float: left;} +.tag-orange{position: absolute;right: 0px;top:20px;} +.tag-orange .tag-name{display: block;width: auto;background-color:#FF6800;background-size: 100% 100%;padding: 0px 8px;color: #fff;float: left;} /*发送至弹框里的下拉框*/ .downSelectOption{position: relative;height: 35px;} .downSelectOption .showOption{background-color: #F4F4F4;border: 1px solid #EAEAEA;width: 100%;padding: 5px 40px 5px 5px;outline: none;height: 100%;box-sizing: border-box;} From c41aec0904a41cf9969a40e3630bf3932f5a1916 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E6=9D=A8=E6=A0=91=E6=98=8E?= <775174143@qq.com> Date: Fri, 16 Aug 2019 12:17:31 +0800 Subject: [PATCH 09/30] =?UTF-8?q?=E8=B0=83=E6=95=B4?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- public/react/public/css/edu-all.css | 13 +- public/react/src/modules/home/shixunsHome.js | 4 +- .../react/src/modules/paths/ShixunPathCard.js | 31 +- .../src/modules/tpm/TPMFork/TPMForklist.js | 2 +- .../src/modules/tpm/shixuns/ShixunCard.js | 2 +- .../src/modules/user/usersInfo/InfosPath.js | 4 +- .../src/modules/user/usersInfo/InfosShixun.js | 406 +++++++++--------- public/stylesheets/educoder/edu-all.css | 13 +- 8 files changed, 254 insertions(+), 221 deletions(-) diff --git a/public/react/public/css/edu-all.css b/public/react/public/css/edu-all.css index 3b96cbf7f..763f23c9c 100644 --- a/public/react/public/css/edu-all.css +++ b/public/react/public/css/edu-all.css @@ -112,8 +112,17 @@ em.vertical-line{display: inline-block;width: 2px;background: #999;height: 10px} .smallSquare:nth-child(3n+0){margin-right: 0px;} .partimg{height: 180px;width: 100%;border-radius: 6px 6px 0px 0px;} /*块状列表上面的绿色标签*/ -.tag-green{position: absolute;left: 0px;top:20px;} -.tag-green .tag-name{display: block;width: auto;background-image: url("/images/educoder/tag1.png");background-size: 100% 100%;padding: 0px 8px;color: #fff;float: left;} +.tag-green{ + position: absolute; + left: 15px; + bottom: 95px;} +.tag-green .tag-name{display: block;width: auto; + /*background-image: url("/images/educoder/tag1.png");*/ + background: #000000; + border: 1px solid #fff; + border-radius: 3px; + font-size: 14px; + background-size: 100% 100%;padding: 0px 8px;color: #fff;float: left;} .tag-orange{position: absolute;right: 0px;top:20px;} .tag-orange .tag-name{display: block;width: auto;background-color:#FF6800;background-size: 100% 100%;padding: 0px 8px;color: #fff;float: left;} /*发送至弹框里的下拉框*/ diff --git a/public/react/src/modules/home/shixunsHome.js b/public/react/src/modules/home/shixunsHome.js index 6abc71747..0a18492cd 100644 --- a/public/react/src/modules/home/shixunsHome.js +++ b/public/react/src/modules/home/shixunsHome.js @@ -230,7 +230,7 @@ class ShixunsHome extends Component {
    {item.tag_name} - + {/**/}
    @@ -301,7 +301,7 @@ class ShixunsHome extends Component {
    {item.tag_name} - + {/**/}
    diff --git a/public/react/src/modules/paths/ShixunPathCard.js b/public/react/src/modules/paths/ShixunPathCard.js index 42e6873c7..416cef28a 100644 --- a/public/react/src/modules/paths/ShixunPathCard.js +++ b/public/react/src/modules/paths/ShixunPathCard.js @@ -22,23 +22,34 @@ class ShixunPathCard extends Component{ return(
    + {/**/} { item.tag_name === null ? "" :
    {item.tag_name} - + {/**/}
    } - { item.excellent === true ? "" :
    @@ -53,7 +64,7 @@ class ShixunPathCard extends Component{
    {/*target="_blank"*/} - 13?1543211263 + 详情图片

    diff --git a/public/react/src/modules/tpm/TPMFork/TPMForklist.js b/public/react/src/modules/tpm/TPMFork/TPMForklist.js index b76683837..704cfad99 100644 --- a/public/react/src/modules/tpm/TPMFork/TPMForklist.js +++ b/public/react/src/modules/tpm/TPMFork/TPMForklist.js @@ -107,7 +107,7 @@ export default class TPMFork_listComponent extends Component {

    {item.tag_name} - + {/**/}
    diff --git a/public/react/src/modules/tpm/shixuns/ShixunCard.js b/public/react/src/modules/tpm/shixuns/ShixunCard.js index ae6aa696d..2bb6a670a 100644 --- a/public/react/src/modules/tpm/shixuns/ShixunCard.js +++ b/public/react/src/modules/tpm/shixuns/ShixunCard.js @@ -88,7 +88,7 @@ class ShixunCard extends Component { item.tag_name === null ? "":
    {item.tag_name} - + {/**/}
    }
    diff --git a/public/react/src/modules/user/usersInfo/InfosPath.js b/public/react/src/modules/user/usersInfo/InfosPath.js index 11f50ebf9..53e0fdf10 100644 --- a/public/react/src/modules/user/usersInfo/InfosPath.js +++ b/public/react/src/modules/user/usersInfo/InfosPath.js @@ -159,7 +159,9 @@ class InfosPath extends Component{ return(
    this.turnToCourses(`/paths/${item.id}`)}> { - item.tag &&
    {item.tag}
    + item.tag &&
    {item.tag} + {/**/} +
    } Subject12
    diff --git a/public/react/src/modules/user/usersInfo/InfosShixun.js b/public/react/src/modules/user/usersInfo/InfosShixun.js index 1550230ab..ce9e4d499 100644 --- a/public/react/src/modules/user/usersInfo/InfosShixun.js +++ b/public/react/src/modules/user/usersInfo/InfosShixun.js @@ -1,203 +1,205 @@ -import React, { Component } from 'react'; -import { SnackbarHOC } from 'educoder'; -import {BrowserRouter as Router,Route,Switch} from 'react-router-dom'; -import {Tooltip,Menu,Pagination,Spin} from 'antd'; -import Loadable from 'react-loadable'; -import Loading from '../../../Loading'; -import NoneData from '../../courses/coursesPublic/NoneData' -import axios from 'axios'; -import {getImageUrl,setImagesUrl} from 'educoder'; -import { TPMIndexHOC } from '../../tpm/TPMIndexHOC'; -import { CNotificationHOC } from '../../courses/common/CNotificationHOC' -import "./usersInfo.css" - -import Create from './publicCreatNew' - -class InfosShixun extends Component{ - constructor(props){ - super(props); - this.state={ - category:undefined, - page:1, - sort_by:'time', - status:undefined, - per_page:16, - isSpin:false, - - totalCount:undefined, - data:undefined - } - } - - componentDidMount=()=>{ - this.setState({ - isSpin:true - }) - let{category,status,sort_by,page}=this.state; - this.getCourses(category,status,sort_by,page); - } - - getCourses=(category,status,sort_by,page)=>{ - let url=`/users/${this.props.match.params.username}/shixuns.json`; - axios.get((url),{params:{ - category, - status, - sort_by, - page, - per_page:this.props.is_current && category && page ==1?17:16 - }}).then((result)=>{ - if(result){ - this.setState({ - totalCount:result.data.count, - data:result.data, - isSpin:false - }) - } - }).catch((error)=>{ - console.log(error); - }) - } - - //切换种类 - changeCategory=(cate)=>{ - this.setState({ - category:cate, - status:undefined, - page:1, - isSpin:true - }) - let{sort_by}=this.state; - this.getCourses(cate,undefined,sort_by,1); - } - // 切换状态 - changeStatus=(status)=>{ - this.setState({ - status, - page:1, - isSpin:true - }) - let{category,sort_by}=this.state; - this.getCourses(category,status,sort_by,1); - } - //切换页数 - changePage=(page)=>{ - this.setState({ - page, - isSpin:true - }) - let{category,sort_by,status}=this.state; - this.getCourses(category,status,sort_by,page); - } - - // 进入课堂 - turnToCourses=(url)=>{ - this.props.history.push(url); - } - - - // 切换排序方式 - changeOrder= (sort)=>{ - this.setState({ - sort_by:sort, - isSpin:true - }) - let{category,status,page}=this.state; - this.getCourses(category,status,sort,page); - } - - render(){ - let{ - category, - status, - sort_by, - page, - data, - totalCount, - isSpin - } = this.state; - let isStudent = this.props.isStudent(); - let is_current=this.props.is_current; - return( -
    - - - { - category && category == "manage" && is_current && - - } - { - category && category == "study" && is_current && - - } -
    - 共参与{totalCount}个{category?category=="manage"?"发布":"学习":"实训"} -
    -
  • - {sort_by=="time"?"时间最新":"语言类别"} -
      -
    • this.changeOrder("time")}>时间最新
    • -
    • this.changeOrder("language")}>语言类别
    • -
    -
  • -
    -
    -
    - { - page == 1 && is_current && this.props.current_user && this.props.current_user.user_identity != "学生" ? - :"" - } - { - (!data || data.shixuns.length==0) && (!is_current || (this.props.current_user && this.props.current_user.user_identity === "学生" )) && - } - { - data && data.shixuns && data.shixuns.map((item,key)=>{ - return( -
    this.turnToCourses(`/shixuns/${item.identifier}/challenges`)}> - { - item.tag &&
    {item.tag}
    - } - - - -
    -

    - {item.name} -

    -
    -

    -
    -

    - 已完成 {item.finished_challenges_count} / {item.challenges_count} -

    -
    -
    - ) - }) - } -
    - { - totalCount > 15 && -
    - -
    - } - -
    - ) - } -} +import React, { Component } from 'react'; +import { SnackbarHOC } from 'educoder'; +import {BrowserRouter as Router,Route,Switch} from 'react-router-dom'; +import {Tooltip,Menu,Pagination,Spin} from 'antd'; +import Loadable from 'react-loadable'; +import Loading from '../../../Loading'; +import NoneData from '../../courses/coursesPublic/NoneData' +import axios from 'axios'; +import {getImageUrl,setImagesUrl} from 'educoder'; +import { TPMIndexHOC } from '../../tpm/TPMIndexHOC'; +import { CNotificationHOC } from '../../courses/common/CNotificationHOC' +import "./usersInfo.css" + +import Create from './publicCreatNew' + +class InfosShixun extends Component{ + constructor(props){ + super(props); + this.state={ + category:undefined, + page:1, + sort_by:'time', + status:undefined, + per_page:16, + isSpin:false, + + totalCount:undefined, + data:undefined + } + } + + componentDidMount=()=>{ + this.setState({ + isSpin:true + }) + let{category,status,sort_by,page}=this.state; + this.getCourses(category,status,sort_by,page); + } + + getCourses=(category,status,sort_by,page)=>{ + let url=`/users/${this.props.match.params.username}/shixuns.json`; + axios.get((url),{params:{ + category, + status, + sort_by, + page, + per_page:this.props.is_current && category && page ==1?17:16 + }}).then((result)=>{ + if(result){ + this.setState({ + totalCount:result.data.count, + data:result.data, + isSpin:false + }) + } + }).catch((error)=>{ + console.log(error); + }) + } + + //切换种类 + changeCategory=(cate)=>{ + this.setState({ + category:cate, + status:undefined, + page:1, + isSpin:true + }) + let{sort_by}=this.state; + this.getCourses(cate,undefined,sort_by,1); + } + // 切换状态 + changeStatus=(status)=>{ + this.setState({ + status, + page:1, + isSpin:true + }) + let{category,sort_by}=this.state; + this.getCourses(category,status,sort_by,1); + } + //切换页数 + changePage=(page)=>{ + this.setState({ + page, + isSpin:true + }) + let{category,sort_by,status}=this.state; + this.getCourses(category,status,sort_by,page); + } + + // 进入课堂 + turnToCourses=(url)=>{ + this.props.history.push(url); + } + + + // 切换排序方式 + changeOrder= (sort)=>{ + this.setState({ + sort_by:sort, + isSpin:true + }) + let{category,status,page}=this.state; + this.getCourses(category,status,sort,page); + } + + render(){ + let{ + category, + status, + sort_by, + page, + data, + totalCount, + isSpin + } = this.state; + let isStudent = this.props.isStudent(); + let is_current=this.props.is_current; + return( +
    + + + { + category && category == "manage" && is_current && + + } + { + category && category == "study" && is_current && + + } +
    + 共参与{totalCount}个{category?category=="manage"?"发布":"学习":"实训"} +
    +
  • + {sort_by=="time"?"时间最新":"语言类别"} +
      +
    • this.changeOrder("time")}>时间最新
    • +
    • this.changeOrder("language")}>语言类别
    • +
    +
  • +
    +
    +
    + { + page == 1 && is_current && this.props.current_user && this.props.current_user.user_identity != "学生" ? + :"" + } + { + (!data || data.shixuns.length==0) && (!is_current || (this.props.current_user && this.props.current_user.user_identity === "学生" )) && + } + { + data && data.shixuns && data.shixuns.map((item,key)=>{ + return( +
    this.turnToCourses(`/shixuns/${item.identifier}/challenges`)}> + { + item.tag &&
    {item.tag} + {/**/} +
    + } + + + +
    +

    + {item.name} +

    +
    +

    +
    +

    + 已完成 {item.finished_challenges_count} / {item.challenges_count} +

    +
    +
    + ) + }) + } +
    + { + totalCount > 15 && +
    + +
    + } +
    +
    + ) + } +} export default InfosShixun; \ No newline at end of file diff --git a/public/stylesheets/educoder/edu-all.css b/public/stylesheets/educoder/edu-all.css index d55fd3906..e5f1469a9 100644 --- a/public/stylesheets/educoder/edu-all.css +++ b/public/stylesheets/educoder/edu-all.css @@ -114,8 +114,17 @@ em.vertical-line{display: inline-block;width: 2px;background: #999;height: 10px} .smallSquare:nth-child(3n+0){margin-right: 0px;} .partimg{height: 180px;width: 100%;border-radius: 6px 6px 0px 0px;} /*块状列表上面的绿色标签*/ -.tag-green{position: absolute;left: 0px;top:20px;} -.tag-green .tag-name{display: block;width: auto;background-image: url("/images/educoder/tag1.png");background-size: 100% 100%;padding: 0px 8px;color: #fff;float: left;} +.tag-green{ + position: absolute; + left: 15px; + bottom: 95px;} +.tag-green .tag-name{display: block;width: auto; + /*background-image: url("/images/educoder/tag1.png");*/ + background: #000000; + border: 1px solid #fff; + border-radius: 3px; + font-size: 14px; + background-size: 100% 100%;padding: 0px 8px;color: #fff;float: left;} .tag-orange{position: absolute;right: 0px;top:20px;} .tag-orange .tag-name{display: block;width: auto;background-color:#FF6800;background-size: 100% 100%;padding: 0px 8px;color: #fff;float: left;} /*发送至弹框里的下拉框*/ From f5a85e38f72c73a2f57319769ba2c5df19030096 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E6=9D=A8=E6=A0=91=E6=98=8E?= <775174143@qq.com> Date: Fri, 16 Aug 2019 14:53:06 +0800 Subject: [PATCH 10/30] =?UTF-8?q?=E8=B0=83=E6=95=B4?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../paths/PathDetail/PathDetailIndex.js | 25 ++++++++++- .../react/src/modules/paths/ShixunPathCard.js | 43 ++++++++++--------- 2 files changed, 47 insertions(+), 21 deletions(-) diff --git a/public/react/src/modules/paths/PathDetail/PathDetailIndex.js b/public/react/src/modules/paths/PathDetail/PathDetailIndex.js index 53eb566e6..98ae10a51 100644 --- a/public/react/src/modules/paths/PathDetail/PathDetailIndex.js +++ b/public/react/src/modules/paths/PathDetail/PathDetailIndex.js @@ -157,13 +157,36 @@ class PathDetailIndex extends Component{ if(result.data.allow_visit===true){ this.setState({ detailInfoList:result.data, - items: getItems(result.data.members.length), + // items: getItems(result.data.members.length), }) } }).catch((error)=>{ console.log(error); }) + + + let righturl="/paths/"+pathid+"right_banner.json"; + axios.get(righturl).then((result)=>{ + if (result.data.status === 407 || result.data.status === 401) { + debugger + return; + } + + if (result.data.status === 403) { + debugger + // window.location.href = "/403"; + return; + } + + this.setState({ + // detailInfoList:result.data, + items: getItems(result.data.members.length), + }) + + }).catch((error)=>{ + console.log(error); + }) } updatadetailInfoList=()=>{ diff --git a/public/react/src/modules/paths/ShixunPathCard.js b/public/react/src/modules/paths/ShixunPathCard.js index 416cef28a..f4fb61776 100644 --- a/public/react/src/modules/paths/ShixunPathCard.js +++ b/public/react/src/modules/paths/ShixunPathCard.js @@ -22,25 +22,7 @@ class ShixunPathCard extends Component{ return(
    - {/**/} + { item.tag_name === null ? "" :
    @@ -103,4 +85,25 @@ class ShixunPathCard extends Component{ ) } } -export default ShixunPathCard; \ No newline at end of file +export default ShixunPathCard; + +// +// {/**/} \ No newline at end of file From 6eff80ae47cf29e13543afde73e6e2208c636d83 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E6=9D=A8=E6=A0=91=E6=9E=97?= <904079904@qq.com> Date: Fri, 16 Aug 2019 15:29:15 +0800 Subject: [PATCH 11/30] =?UTF-8?q?=E8=B0=83=E6=95=B4?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- app/templates/shared/main.css | 1 + .../src/modules/courses/ListPageIndex.js | 14 +- .../courses/coursesDetail/CoursesBanner.js | 74 +++++++-- .../courses/coursesDetail/Jointheclass.js | 70 ++++++++ .../modules/courses/elearning/Elearning.js | 151 ++++++++++++++++++ .../modules/courses/elearning/myelearning.css | 0 .../courses/elearning/yslDetailCards.js | 139 ++++++++++++++++ .../modules/courses/gradinforms/Eduinforms.js | 8 +- public/stylesheets/educoder/edu-main.css | 2 +- 9 files changed, 444 insertions(+), 15 deletions(-) create mode 100644 public/react/src/modules/courses/coursesDetail/Jointheclass.js create mode 100644 public/react/src/modules/courses/elearning/Elearning.js create mode 100644 public/react/src/modules/courses/elearning/myelearning.css create mode 100644 public/react/src/modules/courses/elearning/yslDetailCards.js diff --git a/app/templates/shared/main.css b/app/templates/shared/main.css index 67d43dc6c..81b80cdf8 100644 --- a/app/templates/shared/main.css +++ b/app/templates/shared/main.css @@ -549,6 +549,7 @@ a:hover.task-btn-orange{background: #459BE6;} a.user_bluebg_btn{background-color:#4CACFF;color: #fff;} a.user_orangebg_btn{background-color:#FF6800;color: #fff;} a.user_greybg_btn{background-color:#747A7F;color: #fff;} +/*.user_white_btn{border: 1px solid #ffffff;color: #ffffff!important;}*/ .pointer{cursor: pointer} diff --git a/public/react/src/modules/courses/ListPageIndex.js b/public/react/src/modules/courses/ListPageIndex.js index ef9cbc737..ae52cd6b8 100644 --- a/public/react/src/modules/courses/ListPageIndex.js +++ b/public/react/src/modules/courses/ListPageIndex.js @@ -37,6 +37,10 @@ const Eduinforms= Loadable({ loader: () => import('./gradinforms/Eduinforms.js'), loading: Loading, }); +const Elearning= Loadable({ + loader: () => import('./elearning/Elearning.js'), + loading: Loading, +}); // const Exercise= Loadable({ loader: () => import('./exercise/Exercise'), @@ -245,11 +249,19 @@ class ListPageIndex extends Component{ {/*公告栏列表*/} - () } > + {/*在线学习*/} + () + } + > + {/* 实训作业页面*/} { + this.setState({ + yslJointhe:true + }) } showActionPoll=(i,s,ss)=>{ this.setState({ @@ -349,10 +358,21 @@ class CoursesBanner extends Component { this.setState({ AccountProfiletype:false }) - } + }; + ysljoinmodalCancel=()=>{ + this.setState({ + yslJointhe:false + }) + }; + ysljoinmodalCanceltwo=()=>{ + this.setState({ + yslJointhe:false + }) + window.location.reload(); + }; render() { - let { Addcoursestypes, coursedata, modalsType, modalsTopval, loadtype,modalsBottomval,antIcon,is_guide,AccountProfiletype} = this.state; + let { Addcoursestypes, coursedata,excellent, modalsType, modalsTopval, loadtype,modalsBottomval,antIcon,is_guide,AccountProfiletype} = this.state; return (
    @@ -383,6 +403,7 @@ class CoursesBanner extends Component { modalSave={this.ModalAction} antIcon={antIcon} > + this.ysljoinmodalCancel()} ysljoinmodalCanceltwo={()=>this.ysljoinmodalCanceltwo()}> - + {excellent===false?
    {coursedata.switch_to_student === true ? 退出课堂 :""}
    + : + +
    + + {coursedata.course_identity === 6&&coursedata.educoder_teacher===false? + this.myyslgradin()}>加入课堂: ""} + + {coursedata.course_identity === 6&&coursedata.educoder_teacher===true? + this.myyslgradin()}>加入课堂: ""} + {this.props.isStudent()? this.exitclass()} + > 退出课堂 :""} +
    + + } this.ActionPoll(1)}>删除
    :"":""} + : +
      +
      设置
      + {coursedata.is_admin===true?coursedata.course_identity <3?
      this.ActionPoll(1)}>删除
      + :"":""} +
    } trigger="hover"> diff --git a/public/react/src/modules/courses/coursesDetail/Jointheclass.js b/public/react/src/modules/courses/coursesDetail/Jointheclass.js new file mode 100644 index 000000000..9839e6472 --- /dev/null +++ b/public/react/src/modules/courses/coursesDetail/Jointheclass.js @@ -0,0 +1,70 @@ +import React, { Component } from 'react'; +import { Modal} from 'antd'; +import axios from 'axios'; +//加入金品课堂 +class Jointheclass extends Component { + + constructor(props) { + super(props); + } + + componentDidMount() { + // console.log("加入金品课堂"); + // console.log(this.props); + + } + + modalCancel=()=>{ + this.props.ysljoinmodalCancel(); + }; + + setDownload=()=>{ + var id=this.props.match.params.coursesId + + var url = `/courses/${id}/join_excellent_course.json`; + axios.post(url).then((result) => { + if(result){ + if(result.data){ + if(result.data.status === 0){ + this.props.showNotification(result.data.message); + this.props.ysljoinmodalCanceltwo(); + }else { + this.props.showNotification(result.data.message); + } + } + + } + }).catch((error) => { + console.log(error) + }) + + } + + + render() { + // console.log("加入金品课堂2"); + // console.log(this.props); + return( + +
    +

    是否确认加入课堂?

    + +
    +
    + ) + } +} + +export default Jointheclass; \ No newline at end of file diff --git a/public/react/src/modules/courses/elearning/Elearning.js b/public/react/src/modules/courses/elearning/Elearning.js new file mode 100644 index 000000000..867bab57e --- /dev/null +++ b/public/react/src/modules/courses/elearning/Elearning.js @@ -0,0 +1,151 @@ +import React,{ Component } from "react"; +import { Input,Checkbox,Table, Pagination, Modal,Menu, Tooltip,Spin,Button,Form } from "antd"; +import { WordsBtn,on, off, trigger,markdownToHTML,getImageUrl} from 'educoder'; +import './myelearning.css' +import axios from 'axios'; +//在线学习 +class Elearning extends Component{ + constructor(props){ + super(props); + + this.state={ + description:"", //简介 + isSpin:true, + start_learning:false, //是否要开始学习 没开始学习 点击第一个是开始学习 就是学习下面的从第一个开始 + learned:0, //学习进度 + last_shixun:"", //上次学习的实训 + stages:[], //实践课程的章节 + } + } + + componentDidMount() { + console.log("获取到数据"); + console.log(this.props); + 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, + isSpin:false, + }); + } + } + }).catch((error) => { + console.log(error); + this.setState({ + isSpin:false, + }) + }); + + } + + + componentDidUpdate = (prevProps) => { + + + + } + + + handleSubmit=(e) => { + e.preventDefault(); + // this.props.form.validateFields((err, values) => { + // if (!err) { + // console.log(values.description); + // if(values.description === undefined|| values.description === "" || values.description ===null){ + // this.props.showNotification(`请输入提交内容`); + // return + // + // } + // var coursesId=this.props.match.params.coursesId + // + // var url = `/courses/${coursesId}/update_informs.json`; + // axios.post(url,{ + // description:values.description, + // }).then((result) => { + // if(result){ + // if(result.data){ + // if(result.data.status === 0){ + // this.setState({ + // description:values.description, + // whethertoedit:false, + // }) + // + // }else { + // this.props.showNotification(result.data.message); + // + // } + // } + // + // } + // }).catch((error) => { + // console.log(error) + // }) + // }else{ + // console.log(err); + // } + // + // }); + } + + + render(){ + let{description,whethertoedit,isSpin} =this.state; + const isNotMembers=this.props.isNotMember();//非课堂成员 + return( + +
    +
    +
    +
    + 还未开始学习 + { + this.props.isAdmin()===true? + + + :"" + } + +
    + +
    + {/*简介*/} +
    +
    + 简介 +
    +
    +

    +

    +
    + +
    +
    + + + + +
    +
    + 在线学习 + +
    + +
    +
    + +
    +
    + ) + } +} +const Elearningss = Form.create({ name: 'elearning' })(Elearning); +export default Elearningss; diff --git a/public/react/src/modules/courses/elearning/myelearning.css b/public/react/src/modules/courses/elearning/myelearning.css new file mode 100644 index 000000000..e69de29bb diff --git a/public/react/src/modules/courses/elearning/yslDetailCards.js b/public/react/src/modules/courses/elearning/yslDetailCards.js new file mode 100644 index 000000000..382c56d4e --- /dev/null +++ b/public/react/src/modules/courses/elearning/yslDetailCards.js @@ -0,0 +1,139 @@ +import React, { Component } from 'react'; +import {getImageUrl} from 'educoder'; +import { Tooltip } from 'antd'; +import '../../paths/ShixunPaths.css'; +import axios from 'axios'; + +import { DragDropContext, Droppable, Draggable } from "react-beautiful-dnd"; +import DetailCardsEditAndEdit from "../../paths/PathDetail/DetailCardsEditAndEdit"; + +const reorder = (list, startIndex, endIndex) => { + const result = Array.from(list); + const [removed] = result.splice(startIndex, 1); + result.splice(endIndex, 0, removed); + + return result; +}; + +const $ = window.$ +class DetailCards extends Component{ + constructor(props){ + super(props) + this.state={ + pathCardsList:undefined + } + } + + getPathCardsList(){ + let pathid = this.props.match.params.PathId + // let pathid= 28; + let url=`/stages.json?subject_id=`+pathid; + axios.get(url).then((result)=>{ + if(result.status===200){ + this.setState({ + pathCardsList:result.data.stages + }) + } + }).catch((error)=>{ + console.log(error); + }) + } + + + for_paragraph = (index) =>{ + $("#detail_for_paragraph_"+index).slideToggle(500); + } + + componentDidMount(){ + this.getPathCardsList(); + } + onDragEnd = (result, shixunIndex) => { + // console.log(result) + + // dropped outside the list + if (!result.destination) { + console.log('dropped outside the list') + + return; + } + if (result.destination.index === result.source.index) { + console.log('the same') + return; + } + // TODO exchange axios request + + const shixuns_list = reorder( + this.state.pathCardsList[shixunIndex].shixuns_list, + result.source.index, + result.destination.index + ); + const pathCardsList = this.state.pathCardsList + pathCardsList[shixunIndex].shixuns_list = shixuns_list; + this.setState({ + pathCardsList + }); + } + render(){ + let { pathCardsList }=this.props; + return( +
    + { + pathCardsList && pathCardsList.map((item,key)=>{ + + return( +
    + { + idsum===key&&pathCardsedittype===true?'': +
    +

    {item.stage_description}

    + +
    + + { + item.shixuns_list && item.shixuns_list.map((line,index)=>{ + return( +
    this.showparagraph(key,index)} onMouseLeave={this.hideparagraph}> + +
  • + + + { + line.complete_status === 1 ? + : + } + + + {key+1}-{index+1}  {line.shixun_name} + + +
  • + { + this.props.current_user&&this.props.current_user.admin===false&&line.shixun_status==="暂未公开"? +
  • 暂未公开
  • + : +
  • + { + showparagraphkey===key&&showparagraphindex===index?:"" + } + +
  • + } +
    ) + }) + } +
    +
    + } + +
    + ) + }) + } +
    + ) + } +} +export default DetailCards; \ No newline at end of file diff --git a/public/react/src/modules/courses/gradinforms/Eduinforms.js b/public/react/src/modules/courses/gradinforms/Eduinforms.js index 6cbbd6672..810ac511e 100644 --- a/public/react/src/modules/courses/gradinforms/Eduinforms.js +++ b/public/react/src/modules/courses/gradinforms/Eduinforms.js @@ -4,7 +4,7 @@ import { WordsBtn,on, off, trigger,markdownToHTML,getImageUrl} from 'educoder'; import './myysleduinforms.css' import axios from 'axios'; import TPMMDEditor from "../../tpm/challengesnew/TPMMDEditor"; - + // 公告栏 class Eduinforms extends Component{ constructor(props){ super(props); @@ -21,7 +21,7 @@ class Eduinforms extends Component{ componentDidMount() { console.log("获取到数据"); console.log(this.props); - let url = `/courses/${this.props.match.params.id}/informs.json`; + let url = `/courses/${this.props.match.params.coursesId}/informs.json`; // axios.get(url).then((response) => { if(response){ @@ -78,7 +78,7 @@ class Eduinforms extends Component{ return } - var id=this.props.match.params.id + var id=this.props.match.params.coursesId var url = `/courses/${id}/update_informs.json`; axios.post(url,{ @@ -91,7 +91,7 @@ class Eduinforms extends Component{ description:values.description, whethertoedit:false, }) - + this.props.showNotification(result.data.message); }else { this.props.showNotification(result.data.message); diff --git a/public/stylesheets/educoder/edu-main.css b/public/stylesheets/educoder/edu-main.css index c23c3d350..4aa426192 100644 --- a/public/stylesheets/educoder/edu-main.css +++ b/public/stylesheets/educoder/edu-main.css @@ -551,7 +551,7 @@ a:hover.task-btn-orange{background: #459BE6;} a.user_bluebg_btn{background-color:#4CACFF;color: #fff;} a.user_orangebg_btn{background-color:#FF6800;color: #fff;} a.user_greybg_btn{background-color:#747A7F;color: #fff;} - +/*.user_white_btn{border: 1px solid #ffffff;color: #ffffff!important;}*/ .pointer{cursor: pointer} .cdefault{cursor: default} From 83b08d232d0e8347ba4c7ef2cf0051117dffa6fb Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E6=9D=A8=E6=A0=91=E6=98=8E?= <775174143@qq.com> Date: Fri, 16 Aug 2019 17:41:22 +0800 Subject: [PATCH 12/30] =?UTF-8?q?=E8=B0=83=E6=95=B4?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../react/src/modules/paths/ShixunPathCard.js | 41 ++++++++++--------- 1 file changed, 21 insertions(+), 20 deletions(-) diff --git a/public/react/src/modules/paths/ShixunPathCard.js b/public/react/src/modules/paths/ShixunPathCard.js index f4fb61776..8c0102fad 100644 --- a/public/react/src/modules/paths/ShixunPathCard.js +++ b/public/react/src/modules/paths/ShixunPathCard.js @@ -13,6 +13,27 @@ class ShixunPathCard extends Component{ let {pathList}=this.props; return(
    + + + { pathList && pathList.length > 0 ? ( @@ -87,23 +108,3 @@ class ShixunPathCard extends Component{ } export default ShixunPathCard; -// -// {/**/} \ No newline at end of file From 7414c7e4904e7c4196be7da8baca0c01e0537cf5 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E6=9D=A8=E6=A0=91=E6=98=8E?= <775174143@qq.com> Date: Sat, 17 Aug 2019 10:08:02 +0800 Subject: [PATCH 13/30] =?UTF-8?q?=E8=B0=83=E6=95=B4=E7=B2=BE=E5=93=81?= =?UTF-8?q?=E8=AF=BE=E5=A0=82?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- public/react/public/css/edu-all.css | 8 +++++++- public/react/src/modules/paths/ShixunPathCard.js | 8 +++++++- public/stylesheets/educoder/edu-all.css | 8 +++++++- 3 files changed, 21 insertions(+), 3 deletions(-) diff --git a/public/react/public/css/edu-all.css b/public/react/public/css/edu-all.css index 763f23c9c..abcc3a6da 100644 --- a/public/react/public/css/edu-all.css +++ b/public/react/public/css/edu-all.css @@ -124,7 +124,13 @@ em.vertical-line{display: inline-block;width: 2px;background: #999;height: 10px} font-size: 14px; background-size: 100% 100%;padding: 0px 8px;color: #fff;float: left;} .tag-orange{position: absolute;right: 0px;top:20px;} -.tag-orange .tag-name{display: block;width: auto;background-color:#FF6800;background-size: 100% 100%;padding: 0px 8px;color: #fff;float: left;} +.tag-orange .tag-name{display: block;width: auto;background-color:#FF6800; + background-size: 100% 100%;padding: 0px 8px;color: #fff;float: left; + height: 28px; + line-height: 28px; + border-top-left-radius: 4px; + border-bottom-left-radius: 4px; +} /*发送至弹框里的下拉框*/ .downSelectOption{position: relative;height: 35px;} .downSelectOption .showOption{background-color: #F4F4F4;border: 1px solid #EAEAEA;width: 100%;padding: 5px 40px 5px 5px;outline: none;height: 100%;box-sizing: border-box;} diff --git a/public/react/src/modules/paths/ShixunPathCard.js b/public/react/src/modules/paths/ShixunPathCard.js index 8c0102fad..9df1c7700 100644 --- a/public/react/src/modules/paths/ShixunPathCard.js +++ b/public/react/src/modules/paths/ShixunPathCard.js @@ -29,7 +29,13 @@ class ShixunPathCard extends Component{ font-size: 14px; background-size: 100% 100%;padding: 0px 8px;color: #fff;float: left;} .tag-orange{position: absolute;right: 0px;top:20px;} - .tag-orange .tag-name{display: block;width: auto;background-color:#FF6800;background-size: 100% 100%;padding: 0px 8px;color: #fff;float: left;} + .tag-orange .tag-name{display: block;width: auto;background-color:#FF6800; + background-size: 100% 100%;padding: 0px 8px;color: #fff;float: left; + height: 28px; + line-height: 28px; + border-top-left-radius: 4px; + border-bottom-left-radius: 4px; + } ` } diff --git a/public/stylesheets/educoder/edu-all.css b/public/stylesheets/educoder/edu-all.css index e5f1469a9..a07102d67 100644 --- a/public/stylesheets/educoder/edu-all.css +++ b/public/stylesheets/educoder/edu-all.css @@ -126,7 +126,13 @@ em.vertical-line{display: inline-block;width: 2px;background: #999;height: 10px} font-size: 14px; background-size: 100% 100%;padding: 0px 8px;color: #fff;float: left;} .tag-orange{position: absolute;right: 0px;top:20px;} -.tag-orange .tag-name{display: block;width: auto;background-color:#FF6800;background-size: 100% 100%;padding: 0px 8px;color: #fff;float: left;} +.tag-orange .tag-name{display: block;width: auto;background-color:#FF6800; + background-size: 100% 100%;padding: 0px 8px;color: #fff;float: left; + height: 28px; + line-height: 28px; + border-top-left-radius: 4px; + border-bottom-left-radius: 4px; +} /*发送至弹框里的下拉框*/ .downSelectOption{position: relative;height: 35px;} .downSelectOption .showOption{background-color: #F4F4F4;border: 1px solid #EAEAEA;width: 100%;padding: 5px 40px 5px 5px;outline: none;height: 100%;box-sizing: border-box;} From ad09458e3c2eba77705552a956f967fdbde7102b Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E6=9D=A8=E6=A0=91=E6=9E=97?= <904079904@qq.com> Date: Sat, 17 Aug 2019 10:19:14 +0800 Subject: [PATCH 14/30] =?UTF-8?q?=E8=B0=83=E6=95=B4?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- public/react/src/modules/courses/Index.js | 8 +- .../courses/coursesDetail/CoursesBanner.js | 47 +-- .../courses/coursesDetail/Jointheclass.js | 6 +- .../modules/courses/elearning/Elearning.js | 288 ++++++++++++++---- .../courses/elearning/YslDetailCards.js | 217 +++++++++++++ .../courses/elearning/yslDetailCards.js | 139 --------- .../src/modules/courses/new/Goldsubject.js | 12 +- 7 files changed, 483 insertions(+), 234 deletions(-) create mode 100644 public/react/src/modules/courses/elearning/YslDetailCards.js delete mode 100644 public/react/src/modules/courses/elearning/yslDetailCards.js diff --git a/public/react/src/modules/courses/Index.js b/public/react/src/modules/courses/Index.js index 78e839e5a..dce0de795 100644 --- a/public/react/src/modules/courses/Index.js +++ b/public/react/src/modules/courses/Index.js @@ -837,8 +837,12 @@ class CoursesIndex extends Component{ (props) => () } > - - + {/*修改金品课堂*/} + () + } + > {/* 实训作业子页面*/} { window.location.href = "/courses/" + this.props.match.params.coursesId + "/settings"; - } + }; + postsettingstwo=()=>{ + window.location.href = " /courses/" + this.props.match.params.coursesId + "/newgold/settings"; + }; - hideAccountProfile=()=>{ + + hideAccountProfile=()=>{ this.setState({ AccountProfiletype:false }) @@ -507,27 +511,28 @@ class CoursesBanner extends Component {
    : - -
    - - {coursedata.course_identity === 6&&coursedata.educoder_teacher===false? - this.myyslgradin()}>加入课堂: ""} - - {coursedata.course_identity === 6&&coursedata.educoder_teacher===true? - this.myyslgradin()}>加入课堂: ""} - {this.props.isStudent()? this.exitclass()} - > 退出课堂 :""} -
    + } + + {/*coursedata.course_identity === 6 是非课堂成员*/} + {coursedata.course_identity === 6&&coursedata.educoder_teacher===false? + this.myyslgradin()}>加入课堂: ""} + + {coursedata.course_identity === 6&&coursedata.educoder_teacher===true? + this.myyslgradin()}>加入课堂: ""} + + {this.props.isStudent()? this.exitclass()} + > 退出课堂 :""} +
    } @@ -698,7 +703,7 @@ class CoursesBanner extends Component { right: "-113px", top: "20px" }}> -
    设置
    +
    设置
    {coursedata.is_admin===true?coursedata.course_identity <3?
    this.ActionPoll(1)}>删除
    :"":""} diff --git a/public/react/src/modules/courses/coursesDetail/Jointheclass.js b/public/react/src/modules/courses/coursesDetail/Jointheclass.js index 9839e6472..f61b1cbbe 100644 --- a/public/react/src/modules/courses/coursesDetail/Jointheclass.js +++ b/public/react/src/modules/courses/coursesDetail/Jointheclass.js @@ -53,11 +53,11 @@ class Jointheclass extends Component { title="提示" centered={true} visible={this.props.yslJointhe===undefined?false:this.props.yslJointhe} - width="530px" + width="600px" >
    -

    是否确认加入课堂?

    -
    +

    是否确认该加入课堂?

    + diff --git a/public/react/src/modules/courses/elearning/Elearning.js b/public/react/src/modules/courses/elearning/Elearning.js index 867bab57e..bf6d53ce8 100644 --- a/public/react/src/modules/courses/elearning/Elearning.js +++ b/public/react/src/modules/courses/elearning/Elearning.js @@ -1,8 +1,10 @@ import React,{ Component } from "react"; -import { Input,Checkbox,Table, Pagination, Modal,Menu, Tooltip,Spin,Button,Form } from "antd"; +import { Input,Checkbox,Table, Pagination, Modal,Menu, Tooltip,Spin,Button,Form,Icon,message} from "antd"; import { WordsBtn,on, off, trigger,markdownToHTML,getImageUrl} from 'educoder'; import './myelearning.css' import axios from 'axios'; +import YslDetailCards from "./YslDetailCards.js"; +import Jointheclass from '../coursesDetail/Jointheclass' //在线学习 class Elearning extends Component{ constructor(props){ @@ -15,10 +17,18 @@ class Elearning extends Component{ learned:0, //学习进度 last_shixun:"", //上次学习的实训 stages:[], //实践课程的章节 + yslJointhe:false, + shixunsreplace:false, + hidestartshixunsreplacevalue:"", + shixunsmessage:"", + startshixunCombattype:false, + isSpins:false, + } } componentDidMount() { + // 记得删除退出课堂 console.log("获取到数据"); console.log(this.props); let url = `/courses/${this.props.match.params.coursesId}/online_learning.json`; @@ -33,10 +43,14 @@ class Elearning extends Component{ start_learning:response.data.start_learning, learned:response.data.learned, last_shixun:response.data.last_shixun, - isSpin:false, + stages:response.data.stages, + }); } } + this.setState({ + isSpin:false, + }) }).catch((error) => { console.log(error); this.setState({ @@ -51,79 +65,221 @@ class Elearning extends Component{ - } + }; + //开始学习 + Startlearning=()=>{ + if(this.props.isNotMember()===true){ + this.setState({ + yslJointhe:true + }) + }else { + let {stages}=this.state; + if(stages.length>0){ + for(var i=0;i { + if (response.data.status === -2) { + this.setState({ + + shixunsreplaces:true, + hidestartshixunsreplacevalues:response.data.message+".json" + }) + } else if (response.data.status === -1) { + console.log(response) + }else if(response.data.status===-3){ + this.setState({ + shixunsmessages:response.data.message, + startshixunCombattypes:true, + }) + } else { + console.log("开始学习了"); + window.open("/tasks/" + response.data.game_identifier,'_blank'); + //这个是传过来 调用刷新 + this.Myreload(); + // window.location.href = path + // let path="/tasks/"+response.data.game_identifier; + // this.props.history.push(path); + } + }).catch((error) => { + + }); + break; + } + console.log("这是"+i); + } + } - handleSubmit=(e) => { - e.preventDefault(); - // this.props.form.validateFields((err, values) => { - // if (!err) { - // console.log(values.description); - // if(values.description === undefined|| values.description === "" || values.description ===null){ - // this.props.showNotification(`请输入提交内容`); - // return - // - // } - // var coursesId=this.props.match.params.coursesId - // - // var url = `/courses/${coursesId}/update_informs.json`; - // axios.post(url,{ - // description:values.description, - // }).then((result) => { - // if(result){ - // if(result.data){ - // if(result.data.status === 0){ - // this.setState({ - // description:values.description, - // whethertoedit:false, - // }) - // - // }else { - // this.props.showNotification(result.data.message); - // - // } - // } - // - // } - // }).catch((error) => { - // console.log(error) - // }) - // }else{ - // console.log(err); - // } - // - // }); - } + + } + }; + + Startlearningtwo=()=>{ + this.setState({ + yslJointhe:true + }) + }; + ysljoinmodalCancel=()=>{ + this.setState({ + yslJointhe:false + }) + }; + ysljoinmodalCanceltwo=()=>{ + this.setState({ + yslJointhe:false + }) + window.location.reload(); + }; + + Myreload = ()=>{ + window.location.reload(); + }; + hidestartshixunsreplace=(url)=>{ + this.setState({ + isSpins:true, + }) + axios.get(url).then((response) => { + // debugger + if(response.status===200){ + // let path="/shixuns/"+response.data.shixun_identifier+"/challenges"; + // this.props.history.push(path); + message.success('重置成功,正在进入实训!'); + this.startgameid(response.data.shixun_identifier); + this.setState({ + shixunsreplaces:false, + isSpins:false, + }) + + // message.success('重置成功,正在进入实训!'); + // this.startshixunCombat(); + }} + ).catch((error) => { + this.setState({ + isSpins:false, + shixunsreplaces:false, + }) + }); + + }; + + startgameid=(id)=>{ + if(this.props.isNotMember()===true){ + //这个是外部传过来的 + this.Startlearningtwo(); + return + } + let url = "/shixuns/" + id + "/shixun_exec.json"; + axios.get(url).then((response) => { + + if (response.data.status === -2) { + this.setState({ + + shixunsreplaces:true, + hidestartshixunsreplacevalues:response.data.message+".json" + }) + } else if (response.data.status === -1) { + console.log(response) + }else if(response.data.status===-3){ + this.setState({ + shixunsmessages:response.data.message, + startshixunCombattypes:true, + }) + } else { + console.log("开始学习了"); + window.open("/tasks/" + response.data.game_identifier,'_blank'); + //这个是传过来 调用刷新 + this.Myreload(); + // window.location.href = path + // let path="/tasks/"+response.data.game_identifier; + // this.props.history.push(path); + } + }).catch((error) => { + + }); + + }; + hidestartshixunCombattype=()=>{ + this.setState({ + startshixunCombattypes:false + }) + } render(){ - let{description,whethertoedit,isSpin} =this.state; + let{description,whethertoedit,isSpin,start_learning} =this.state; const isNotMembers=this.props.isNotMember();//非课堂成员 + const antIcon = ; return(
    -
    -
    -
    - 还未开始学习 - { - this.props.isAdmin()===true? - - - :"" - } - + this.ysljoinmodalCancel()} ysljoinmodalCanceltwo={()=>this.ysljoinmodalCanceltwo()}> + +
    +

    本实训的开启时间:{this.state.shixunsmessages}
    开启时间之前不能挑战

    +
    +
    + {/*取消*/} + 知道了 +
    + {/*

    */} + {/*知道了*/} + {/*

    */} +
    + + +
    +

    实训已经更新了,正在为您重置!

    +
    + +
    +
    +
    + { + this.props.isAdmin()===true?"": +
    + { + start_learning===false? +
    +
    + 还未开始学习 + + +
    + +
    + :"" + } +
    + } -
    {/*简介*/} -
    -
    - 简介 +
    +
    + 简介
    -
    -

    +

    +

    @@ -133,11 +289,11 @@ class Elearning extends Component{ -
    +
    - 在线学习 - -
    + {/*开始学习*/} + this.Startlearningtwo()} Myreload={()=>this.Myreload()} > +
    diff --git a/public/react/src/modules/courses/elearning/YslDetailCards.js b/public/react/src/modules/courses/elearning/YslDetailCards.js new file mode 100644 index 000000000..2de927c07 --- /dev/null +++ b/public/react/src/modules/courses/elearning/YslDetailCards.js @@ -0,0 +1,217 @@ +import React, { Component } from 'react'; +import {getImageUrl} from 'educoder'; +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"; + +class YslDetailCards extends Component{ + constructor(props){ + super(props) + this.state={ + showparagraph:false, + showparagraphkey:"", + showparagraphindex:"", + shixunsreplace:false, + hidestartshixunsreplacevalue:"", + shixunsmessage:"", + startshixunCombattype:false, + isSpin:false, + } + } + + showparagraph =(key,index)=>{ + this.setState({ + showparagraph:true, + showparagraphkey:key, + showparagraphindex:index + }) + }; + hideparagraph=()=>{ + this.setState({ + showparagraph:false + }) + }; + startgameid=(id)=>{ + if(this.props.isNotMember()===true){ + //这个是外部传过来的 + this.props.Startlearningtwo(); + return + } + let url = "/shixuns/" + id + "/shixun_exec.json"; + axios.get(url).then((response) => { + + if (response.data.status === -2) { + this.setState({ + + shixunsreplace:true, + hidestartshixunsreplacevalue:response.data.message+".json" + }) + } else if (response.data.status === -1) { + console.log(response) + }else if(response.data.status===-3){ + this.setState({ + shixunsmessage:response.data.message, + startshixunCombattype:true, + }) + } else { + console.log("开始学习了"); + window.open("/tasks/" + response.data.game_identifier,'_blank'); + //这个是传过来 调用刷新 + this.props.Myreload(); + // window.location.href = path + // let path="/tasks/"+response.data.game_identifier; + // this.props.history.push(path); + } + }).catch((error) => { + + }); + + }; + + componentDidMount(){ + } + + + hidestartshixunsreplace=(url)=>{ + this.setState({ + isSpin:true, + }) + axios.get(url).then((response) => { + // debugger + if(response.status===200){ + // let path="/shixuns/"+response.data.shixun_identifier+"/challenges"; + // this.props.history.push(path); + message.success('重置成功,正在进入实训!'); + this.startgameid(response.data.shixun_identifier); + this.setState({ + shixunsreplace:false, + isSpin:false, + startbtn:false, + }) + + // message.success('重置成功,正在进入实训!'); + // this.startshixunCombat(); + }} + ).catch((error) => { + this.setState({ + isSpin:false, + shixunsreplace:false, + }) + }); + + } + hidestartshixunCombattype=()=>{ + this.setState({ + startshixunCombattype:false + }) + } + + render(){ + let{showparagraph,showparagraphkey,showparagraphindex,hidestartshixunsreplacevalue} =this.state; + let { stages }=this.props; + const antIcon = ; + return( +
    + +
    +

    本实训的开启时间:{this.state.shixunsmessage}
    开启时间之前不能挑战

    +
    +
    + {/*取消*/} + 知道了 +
    + {/*

    */} + {/*知道了*/} + {/*

    */} +
    + + +
    +

    实训已经更新了,正在为您重置!

    +
    + +
    +
    + { + stages && stages.map((item,key)=>{ + + return( +
    +

    + + + + + {item.stage_name} + +

    +
    +

    {item.stage_description}

    + +
    + + { + item.shixuns_list && item.shixuns_list.map((line,index)=>{ + return( +
    this.showparagraph(key,index)} onMouseLeave={this.hideparagraph}> + +
  • + + + { + line.complete_status === 1 ? + : + } + + + {key+1}-{index+1}  {line.shixun_name} + + +
  • + { + this.props.current_user&&this.props.current_user.admin===false&&line.shixun_status==="暂未公开"? +
  • 暂未公开
  • + : +
  • + { + showparagraphkey===key&&showparagraphindex===index?:"" + } + +
  • + } +
    ) + }) + } +
    +
    +
    + ) + }) + } +
    + ) + } +} +export default YslDetailCards; \ No newline at end of file diff --git a/public/react/src/modules/courses/elearning/yslDetailCards.js b/public/react/src/modules/courses/elearning/yslDetailCards.js deleted file mode 100644 index 382c56d4e..000000000 --- a/public/react/src/modules/courses/elearning/yslDetailCards.js +++ /dev/null @@ -1,139 +0,0 @@ -import React, { Component } from 'react'; -import {getImageUrl} from 'educoder'; -import { Tooltip } from 'antd'; -import '../../paths/ShixunPaths.css'; -import axios from 'axios'; - -import { DragDropContext, Droppable, Draggable } from "react-beautiful-dnd"; -import DetailCardsEditAndEdit from "../../paths/PathDetail/DetailCardsEditAndEdit"; - -const reorder = (list, startIndex, endIndex) => { - const result = Array.from(list); - const [removed] = result.splice(startIndex, 1); - result.splice(endIndex, 0, removed); - - return result; -}; - -const $ = window.$ -class DetailCards extends Component{ - constructor(props){ - super(props) - this.state={ - pathCardsList:undefined - } - } - - getPathCardsList(){ - let pathid = this.props.match.params.PathId - // let pathid= 28; - let url=`/stages.json?subject_id=`+pathid; - axios.get(url).then((result)=>{ - if(result.status===200){ - this.setState({ - pathCardsList:result.data.stages - }) - } - }).catch((error)=>{ - console.log(error); - }) - } - - - for_paragraph = (index) =>{ - $("#detail_for_paragraph_"+index).slideToggle(500); - } - - componentDidMount(){ - this.getPathCardsList(); - } - onDragEnd = (result, shixunIndex) => { - // console.log(result) - - // dropped outside the list - if (!result.destination) { - console.log('dropped outside the list') - - return; - } - if (result.destination.index === result.source.index) { - console.log('the same') - return; - } - // TODO exchange axios request - - const shixuns_list = reorder( - this.state.pathCardsList[shixunIndex].shixuns_list, - result.source.index, - result.destination.index - ); - const pathCardsList = this.state.pathCardsList - pathCardsList[shixunIndex].shixuns_list = shixuns_list; - this.setState({ - pathCardsList - }); - } - render(){ - let { pathCardsList }=this.props; - return( -
    - { - pathCardsList && pathCardsList.map((item,key)=>{ - - return( -
    - { - idsum===key&&pathCardsedittype===true?'': -
    -

    {item.stage_description}

    - -
    - - { - item.shixuns_list && item.shixuns_list.map((line,index)=>{ - return( -
    this.showparagraph(key,index)} onMouseLeave={this.hideparagraph}> - -
  • - - - { - line.complete_status === 1 ? - : - } - - - {key+1}-{index+1}  {line.shixun_name} - - -
  • - { - this.props.current_user&&this.props.current_user.admin===false&&line.shixun_status==="暂未公开"? -
  • 暂未公开
  • - : -
  • - { - showparagraphkey===key&&showparagraphindex===index?:"" - } - -
  • - } -
    ) - }) - } -
    -
    - } - -
    - ) - }) - } -
    - ) - } -} -export default DetailCards; \ No newline at end of file diff --git a/public/react/src/modules/courses/new/Goldsubject.js b/public/react/src/modules/courses/new/Goldsubject.js index 5a02d54e8..faa64e866 100644 --- a/public/react/src/modules/courses/new/Goldsubject.js +++ b/public/react/src/modules/courses/new/Goldsubject.js @@ -67,18 +67,24 @@ class Goldsubject extends Component { checkboxgroup: data.course_module_types, Realnamecertification: data.authentication, Professionalcertification:data.professional_certification, + starttime: data.start_date === undefined ? "" : moment(data.start_date, dateFormat), endtime: data.end_date === undefined ? "" : moment(data.end_date, dateFormat), school:data.school }); - + // starttime this.setState({ + datatimetwo: data.start_date, datatime: data.end_date, - datatimetwo: data.end_date, is_public: 1, Realnamecertification: data.authentication, Professionalcertification:data.professional_certification, - }) + name: data.name, + class_period: data.class_period, + credit: parseFloat(data.credit), + course_module_types: data.course_module_types, + school:data.school + }); this.handleSearchschool(data.school); }).catch((error) => { console.log(error); From 86ae7000241abbd6cfeb942c19451c3b399a75cf Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E6=9D=A8=E6=A0=91=E6=98=8E?= <775174143@qq.com> Date: Sat, 17 Aug 2019 11:11:33 +0800 Subject: [PATCH 15/30] =?UTF-8?q?=E8=B0=83=E6=95=B4?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../paths/PathDetail/PathDetailIndex.js | 59 +++++++++++-------- .../react/src/modules/paths/ShixunPathCard.js | 2 +- 2 files changed, 36 insertions(+), 25 deletions(-) diff --git a/public/react/src/modules/paths/PathDetail/PathDetailIndex.js b/public/react/src/modules/paths/PathDetail/PathDetailIndex.js index 98ae10a51..00594b921 100644 --- a/public/react/src/modules/paths/PathDetail/PathDetailIndex.js +++ b/public/react/src/modules/paths/PathDetail/PathDetailIndex.js @@ -69,6 +69,9 @@ class PathDetailIndex extends Component{ constructor(props){ super(props) this.state={ + progress:undefined, + tags:undefined, + members:undefined, detailInfoList:undefined, clickdetailInfoListtype:false, Modalstype:false, @@ -95,16 +98,17 @@ class PathDetailIndex extends Component{ } const items = reorder( - this.state.detailInfoList.members, + this.state.members, result.source.index, result.destination.index ); - this.state.detailInfoList.members=items; + this.setState({ detailInfoList:this.state.detailInfoList, + members:items, items }); - console.log(this.state.detailInfoList.members) + console.log(this.state.members) console.log("items 数组数组数组数组") console.log(items) } @@ -166,7 +170,7 @@ class PathDetailIndex extends Component{ }) - let righturl="/paths/"+pathid+"right_banner.json"; + let righturl="/paths/"+pathid+"/right_banner.json"; axios.get(righturl).then((result)=>{ if (result.data.status === 407 || result.data.status === 401) { debugger @@ -181,6 +185,9 @@ class PathDetailIndex extends Component{ this.setState({ // detailInfoList:result.data, + tags:result.data.tags, + progress:result.data.progress, + members:result.data.members, items: getItems(result.data.members.length), }) @@ -305,9 +312,10 @@ class PathDetailIndex extends Component{ console.log("上移"); // console.log(this.state.detailInfoList.members); // console.log(response); - this.state.detailInfoList.members=response.data.members; + this.setState({ detailInfoList:this.state.detailInfoList, + members:response.data.members }); // console.log(this.state.detailInfoList.members); @@ -330,9 +338,9 @@ class PathDetailIndex extends Component{ console.log("下移"); // console.log(this.state.detailInfoList.members); // console.log(response); - this.state.detailInfoList.members=response.data.members; this.setState({ detailInfoList:this.state.detailInfoList, + members:response.data.members }); // console.log(this.state.detailInfoList.members); } @@ -352,10 +360,13 @@ class PathDetailIndex extends Component{ Modalsbottomval, cardsModalcancel, cardsModalsave, - loadtype + loadtype, + progress, + members, + tags, } = this.state - + console.log(this.props.checkIfLogin()) return(
    + {this.props.courses===undefined?"": + + 开放课程 + } {detailInfoList===undefined?"":detailInfoList.allow_statistics===true? @@ -202,34 +224,47 @@ class DetailTop extends Component{ { detailInfoList.member_count!=0 ?
  • 学习人数{detailInfoList.member_count}
  • : ""} } -
    - {detailInfoList===undefined?"":detailInfoList.allow_delete===true?删除路径:""} - - { - detailInfoList.publish_status===0&&detailInfoList.allow_add_member===true? - 申请发布:"" - } - - - { - detailInfoList.publish_status===1 && detailInfoList.allow_statistics===true? - 撤销申请:"" - } - - { - detailInfoList.publish_status===2 && detailInfoList.allow_statistics===true? - 撤销发布:"" - } -
    + {/*
    */} + {/*{detailInfoList===undefined?"":detailInfoList.allow_delete===true?删除路径:""}*/} + + {/*{*/} + {/*detailInfoList.publish_status===0&&detailInfoList.allow_add_member===true?*/} + {/*申请发布:""*/} + {/*}*/} + + + {/*{*/} + {/*detailInfoList.publish_status===1 && detailInfoList.allow_statistics===true?*/} + {/*撤销申请:""*/} + {/*}*/} + + {/*{*/} + {/*detailInfoList.publish_status===2 && detailInfoList.allow_statistics===true?*/} + {/*撤销发布:""*/} + {/*}*/} + {/*
    */} + + +
    + + 开课 + 学习统计 + +
    +
    } diff --git a/public/react/src/modules/paths/PathDetail/PathDetailIndex.js b/public/react/src/modules/paths/PathDetail/PathDetailIndex.js index 00594b921..3dbd27992 100644 --- a/public/react/src/modules/paths/PathDetail/PathDetailIndex.js +++ b/public/react/src/modules/paths/PathDetail/PathDetailIndex.js @@ -81,6 +81,7 @@ class PathDetailIndex extends Component{ cardsModalsave:this.cardsModalsave, user_id:undefined, loadtype:false, + courses:undefined, items: getItems(10) } this.onDragEnd = this.onDragEnd.bind(this); @@ -161,6 +162,7 @@ class PathDetailIndex extends Component{ if(result.data.allow_visit===true){ this.setState({ detailInfoList:result.data, + courses:result.data.courses // items: getItems(result.data.members.length), }) } @@ -364,6 +366,7 @@ class PathDetailIndex extends Component{ progress, members, tags, + courses, } = this.state console.log(this.props.checkIfLogin()) From 0c193369b4b5d5f0618505130ca85904dba70dfd Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E6=9D=A8=E6=A0=91=E6=98=8E?= <775174143@qq.com> Date: Sat, 17 Aug 2019 15:54:40 +0800 Subject: [PATCH 19/30] Merge branches 'dev_Ysm' and 'dev_hjm_a' of https://bdgit.educoder.net/Hjqreturn/educoder into dev_Ysm # Conflicts: # public/react/public/css/iconfont.css # public/react/src/modules/user/usersInfo/InfosShixun.js --- .../src/modules/paths/PathDetail/DetailTop.css | 16 ++++++++++++++++ .../src/modules/paths/PathDetail/DetailTop.js | 13 +++++++++++++ .../modules/paths/PathDetail/PathDetailIndex.js | 2 +- 3 files changed, 30 insertions(+), 1 deletion(-) diff --git a/public/react/src/modules/paths/PathDetail/DetailTop.css b/public/react/src/modules/paths/PathDetail/DetailTop.css index d29161542..c5c79b468 100644 --- a/public/react/src/modules/paths/PathDetail/DetailTop.css +++ b/public/react/src/modules/paths/PathDetail/DetailTop.css @@ -16,3 +16,19 @@ border-radius: 4px; box-sizing: border-box; } +.userNavs{ + height: 54px; + line-height: 54px; + background: #fff; + -webkit-box-shadow: 0 9px 16px -1px #e6e6e6; + box-shadow: 0 9px 16px -1px #e6e6e6; + border-radius: 7px; + padding: 0 10px; +} + +.userNav li { + display: inline-block; + padding: 0 30px; + -webkit-box-sizing: border-box; + box-sizing: border-box; +} \ No newline at end of file diff --git a/public/react/src/modules/paths/PathDetail/DetailTop.js b/public/react/src/modules/paths/PathDetail/DetailTop.js index 5cc3c8241..766b466c0 100644 --- a/public/react/src/modules/paths/PathDetail/DetailTop.js +++ b/public/react/src/modules/paths/PathDetail/DetailTop.js @@ -268,8 +268,21 @@ class DetailTop extends Component{
    + + +
    } + + +
    ) diff --git a/public/react/src/modules/paths/PathDetail/PathDetailIndex.js b/public/react/src/modules/paths/PathDetail/PathDetailIndex.js index 3dbd27992..476b60f40 100644 --- a/public/react/src/modules/paths/PathDetail/PathDetailIndex.js +++ b/public/react/src/modules/paths/PathDetail/PathDetailIndex.js @@ -369,7 +369,7 @@ class PathDetailIndex extends Component{ courses, } = this.state - console.log(this.props.checkIfLogin()) + return(
    + {/*coursedata.course_identity === 6 是非课堂成员*/} + {coursedata.course_identity === 6&&coursedata.educoder_teacher===false? + this.myyslgradin()}>加入课堂: ""} + + {coursedata.course_identity === 6&&coursedata.educoder_teacher===true? + this.myyslgradin()}>加入课堂: ""} + + {this.props.isStudent()? this.exitclass()} + > 退出课堂 :""} +
    + + } this.ActionPoll(1)}>删除
    :"":""} + : +
      +
      设置
      + {coursedata.is_admin===true?coursedata.course_identity <3?
      this.ActionPoll(1)}>删除
      + :"":""} +
    } trigger="hover"> diff --git a/public/react/src/modules/courses/coursesDetail/Jointheclass.js b/public/react/src/modules/courses/coursesDetail/Jointheclass.js new file mode 100644 index 000000000..f61b1cbbe --- /dev/null +++ b/public/react/src/modules/courses/coursesDetail/Jointheclass.js @@ -0,0 +1,70 @@ +import React, { Component } from 'react'; +import { Modal} from 'antd'; +import axios from 'axios'; +//加入金品课堂 +class Jointheclass extends Component { + + constructor(props) { + super(props); + } + + componentDidMount() { + // console.log("加入金品课堂"); + // console.log(this.props); + + } + + modalCancel=()=>{ + this.props.ysljoinmodalCancel(); + }; + + setDownload=()=>{ + var id=this.props.match.params.coursesId + + var url = `/courses/${id}/join_excellent_course.json`; + axios.post(url).then((result) => { + if(result){ + if(result.data){ + if(result.data.status === 0){ + this.props.showNotification(result.data.message); + this.props.ysljoinmodalCanceltwo(); + }else { + this.props.showNotification(result.data.message); + } + } + + } + }).catch((error) => { + console.log(error) + }) + + } + + + render() { + // console.log("加入金品课堂2"); + // console.log(this.props); + return( + +
    +

    是否确认该加入课堂?

    + +
    +
    + ) + } +} + +export default Jointheclass; \ No newline at end of file diff --git a/public/react/src/modules/courses/elearning/Elearning.js b/public/react/src/modules/courses/elearning/Elearning.js new file mode 100644 index 000000000..0941de631 --- /dev/null +++ b/public/react/src/modules/courses/elearning/Elearning.js @@ -0,0 +1,322 @@ +import React,{ Component } from "react"; +import { Input,Checkbox,Table, Pagination, Modal,Menu, Tooltip,Spin,Button,Form,Icon,message,Progress} from "antd"; +import { WordsBtn,on, off, trigger,markdownToHTML,getImageUrl} from 'educoder'; +import './myelearning.css' +import axios from 'axios'; +import YslDetailCards from "./YslDetailCards.js"; +import Jointheclass from '../coursesDetail/Jointheclass' +//在线学习 +class Elearning extends Component{ + constructor(props){ + super(props); + + this.state={ + description:"", //简介 + isSpin:true, + start_learning:undefined, //是否要开始学习 没开始学习 点击第一个是开始学习 就是学习下面的从第一个开始 + learned:0, //学习进度 + last_shixun:"", //上次学习的实训 + stages:[], //实践课程的章节 + yslJointhe:false, + shixunsreplace:false, + hidestartshixunsreplacevalue:"", + shixunsmessage:"", + startshixunCombattype:false, + isSpins:false, + + } + } + + componentDidMount() { + // 记得删除退出课堂 + console.log("获取到数据"); + console.log(this.props); + 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, + + }); + } + } + this.setState({ + isSpin:false, + }) + }).catch((error) => { + console.log(error); + this.setState({ + isSpin:false, + }) + }); + + } + + + componentDidUpdate = (prevProps) => { + + + + }; + //开始学习 + Startlearning=()=>{ + if(this.props.isNotMember()===true){ + this.setState({ + yslJointhe:true + }) + }else { + let {stages}=this.state; + if(stages.length>0){ + for(var i=0;i { + + if (response.data.status === -2) { + this.setState({ + + shixunsreplaces:true, + hidestartshixunsreplacevalues:response.data.message+".json" + }) + } else if (response.data.status === -1) { + console.log(response) + }else if(response.data.status===-3){ + this.setState({ + shixunsmessages:response.data.message, + startshixunCombattypes:true, + }) + } else { + console.log("开始学习了"); + window.open("/tasks/" + response.data.game_identifier,'_blank'); + //这个是传过来 调用刷新 + this.Myreload(); + // window.location.href = path + // let path="/tasks/"+response.data.game_identifier; + // this.props.history.push(path); + } + }).catch((error) => { + + }); + break; + } + console.log("这是"+i); + } + } + + + } + }; + + Startlearningtwo=()=>{ + this.setState({ + yslJointhe:true + }) + }; + ysljoinmodalCancel=()=>{ + this.setState({ + yslJointhe:false + }) + }; + ysljoinmodalCanceltwo=()=>{ + this.setState({ + yslJointhe:false + }) + window.location.reload(); + }; + + Myreload = ()=>{ + window.location.reload(); + }; + + + hidestartshixunsreplace=(url)=>{ + this.setState({ + isSpins:true, + }) + axios.get(url).then((response) => { + // debugger + if(response.status===200){ + // let path="/shixuns/"+response.data.shixun_identifier+"/challenges"; + // this.props.history.push(path); + message.success('重置成功,正在进入实训!'); + this.startgameid(response.data.shixun_identifier); + this.setState({ + shixunsreplaces:false, + isSpins:false, + }) + + // message.success('重置成功,正在进入实训!'); + // this.startshixunCombat(); + }} + ).catch((error) => { + this.setState({ + isSpins:false, + shixunsreplaces:false, + }) + }); + + }; + + startgameid=(id)=>{ + if(this.props.isNotMember()===true){ + //这个是外部传过来的 + this.Startlearningtwo(); + return + } + let url = "/shixuns/" + id + "/shixun_exec.json"; + axios.get(url).then((response) => { + + if (response.data.status === -2) { + this.setState({ + + shixunsreplaces:true, + hidestartshixunsreplacevalues:response.data.message+".json" + }) + } else if (response.data.status === -1) { + console.log(response) + }else if(response.data.status===-3){ + this.setState({ + shixunsmessages:response.data.message, + startshixunCombattypes:true, + }) + } else { + console.log("开始学习了"); + window.open("/tasks/" + response.data.game_identifier,'_blank'); + //这个是传过来 调用刷新 + this.Myreload(); + // window.location.href = path + // let path="/tasks/"+response.data.game_identifier; + // this.props.history.push(path); + } + }).catch((error) => { + + }); + + }; + hidestartshixunCombattype=()=>{ + this.setState({ + startshixunCombattypes:false + }) + } + render(){ + let{description,whethertoedit,isSpin,start_learning,hidestartshixunsreplacevalues,learned,last_shixun} =this.state; + const isNotMembers=this.props.isNotMember();//非课堂成员 + const antIcon = ; + return( + +
    + this.ysljoinmodalCancel()} ysljoinmodalCanceltwo={()=>this.ysljoinmodalCanceltwo()}> + +
    +

    本实训的开启时间:{this.state.shixunsmessages}
    开启时间之前不能挑战

    +
    +
    + {/*取消*/} + 知道了 +
    + {/*

    */} + {/*知道了*/} + {/*

    */} +
    + + +
    +

    实训已经更新了,正在为您重置!

    +
    + +
    +
    +
    + { + this.props.isAdmin()===true?"": +
    + { + start_learning===undefined?"":start_learning===false? +
    +
    + 还未开始学习 + + +
    + +
    + : +
    +
    + 已学{learned}% +
    +
    + +
    +
    + 上次学至{last_shixun} +
    + + +
    + } +
    + } + + {/*简介*/} + +
    +
    + 简介 +
    +
    +

    +

    +
    + +
    + +
    + + + + +
    +
    + {/*开始学习*/} + this.Startlearningtwo()} Myreload={()=>this.Myreload()} > +
    + +
    +
    + +
    +
    + ) + } +} +const Elearningss = Form.create({ name: 'elearning' })(Elearning); +export default Elearningss; diff --git a/public/react/src/modules/courses/elearning/YslDetailCards.js b/public/react/src/modules/courses/elearning/YslDetailCards.js new file mode 100644 index 000000000..2de927c07 --- /dev/null +++ b/public/react/src/modules/courses/elearning/YslDetailCards.js @@ -0,0 +1,217 @@ +import React, { Component } from 'react'; +import {getImageUrl} from 'educoder'; +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"; + +class YslDetailCards extends Component{ + constructor(props){ + super(props) + this.state={ + showparagraph:false, + showparagraphkey:"", + showparagraphindex:"", + shixunsreplace:false, + hidestartshixunsreplacevalue:"", + shixunsmessage:"", + startshixunCombattype:false, + isSpin:false, + } + } + + showparagraph =(key,index)=>{ + this.setState({ + showparagraph:true, + showparagraphkey:key, + showparagraphindex:index + }) + }; + hideparagraph=()=>{ + this.setState({ + showparagraph:false + }) + }; + startgameid=(id)=>{ + if(this.props.isNotMember()===true){ + //这个是外部传过来的 + this.props.Startlearningtwo(); + return + } + let url = "/shixuns/" + id + "/shixun_exec.json"; + axios.get(url).then((response) => { + + if (response.data.status === -2) { + this.setState({ + + shixunsreplace:true, + hidestartshixunsreplacevalue:response.data.message+".json" + }) + } else if (response.data.status === -1) { + console.log(response) + }else if(response.data.status===-3){ + this.setState({ + shixunsmessage:response.data.message, + startshixunCombattype:true, + }) + } else { + console.log("开始学习了"); + window.open("/tasks/" + response.data.game_identifier,'_blank'); + //这个是传过来 调用刷新 + this.props.Myreload(); + // window.location.href = path + // let path="/tasks/"+response.data.game_identifier; + // this.props.history.push(path); + } + }).catch((error) => { + + }); + + }; + + componentDidMount(){ + } + + + hidestartshixunsreplace=(url)=>{ + this.setState({ + isSpin:true, + }) + axios.get(url).then((response) => { + // debugger + if(response.status===200){ + // let path="/shixuns/"+response.data.shixun_identifier+"/challenges"; + // this.props.history.push(path); + message.success('重置成功,正在进入实训!'); + this.startgameid(response.data.shixun_identifier); + this.setState({ + shixunsreplace:false, + isSpin:false, + startbtn:false, + }) + + // message.success('重置成功,正在进入实训!'); + // this.startshixunCombat(); + }} + ).catch((error) => { + this.setState({ + isSpin:false, + shixunsreplace:false, + }) + }); + + } + hidestartshixunCombattype=()=>{ + this.setState({ + startshixunCombattype:false + }) + } + + render(){ + let{showparagraph,showparagraphkey,showparagraphindex,hidestartshixunsreplacevalue} =this.state; + let { stages }=this.props; + const antIcon = ; + return( +
    + +
    +

    本实训的开启时间:{this.state.shixunsmessage}
    开启时间之前不能挑战

    +
    +
    + {/*取消*/} + 知道了 +
    + {/*

    */} + {/*知道了*/} + {/*

    */} +
    + + +
    +

    实训已经更新了,正在为您重置!

    +
    + +
    +
    + { + stages && stages.map((item,key)=>{ + + return( +
    +

    + + + + + {item.stage_name} + +

    +
    +

    {item.stage_description}

    + +
    + + { + item.shixuns_list && item.shixuns_list.map((line,index)=>{ + return( +
    this.showparagraph(key,index)} onMouseLeave={this.hideparagraph}> + +
  • + + + { + line.complete_status === 1 ? + : + } + + + {key+1}-{index+1}  {line.shixun_name} + + +
  • + { + this.props.current_user&&this.props.current_user.admin===false&&line.shixun_status==="暂未公开"? +
  • 暂未公开
  • + : +
  • + { + showparagraphkey===key&&showparagraphindex===index?:"" + } + +
  • + } +
    ) + }) + } +
    +
    +
    + ) + }) + } +
    + ) + } +} +export default YslDetailCards; \ No newline at end of file diff --git a/public/react/src/modules/courses/elearning/myelearning.css b/public/react/src/modules/courses/elearning/myelearning.css new file mode 100644 index 000000000..e69de29bb diff --git a/public/react/src/modules/courses/gradinforms/Eduinforms.js b/public/react/src/modules/courses/gradinforms/Eduinforms.js index 13c3c0545..810ac511e 100644 --- a/public/react/src/modules/courses/gradinforms/Eduinforms.js +++ b/public/react/src/modules/courses/gradinforms/Eduinforms.js @@ -1,13 +1,19 @@ import React,{ Component } from "react"; -import { Input,Checkbox,Table, Pagination, Modal,Menu, Tooltip,Spin } from "antd"; -import { WordsBtn,on, off, trigger } from 'educoder'; -import '../css/members.css'; -import '../css/busyWork.css' - +import { Input,Checkbox,Table, Pagination, Modal,Menu, Tooltip,Spin,Button,Form } from "antd"; +import { WordsBtn,on, off, trigger,markdownToHTML,getImageUrl} from 'educoder'; +import './myysleduinforms.css' +import axios from 'axios'; +import TPMMDEditor from "../../tpm/challengesnew/TPMMDEditor"; + // 公告栏 class Eduinforms extends Component{ constructor(props){ super(props); + this.messageRef = React.createRef(); + this.state={ + description:null, + isSpin:true, + whethertoedit:false, } } @@ -15,15 +21,37 @@ class Eduinforms extends Component{ componentDidMount() { console.log("获取到数据"); console.log(this.props); - // let url = "/courses/:id/informs.json"; - // - // axios.get(url).then((response) => { - // if(response){ + let url = `/courses/${this.props.match.params.coursesId}/informs.json`; // - // } - // }).catch((error) => { - // console.log(error) - // }); + axios.get(url).then((response) => { + if(response){ + if(response.data){ + this.setState({ + description:response.data.description, + isSpin:false, + }) + }else { + this.setState({ + description:null, + isSpin:false, + + }) + + } + }else { + this.setState({ + description:null, + isSpin:false, + }) + + } + }).catch((error) => { + console.log(error) + this.setState({ + description:null, + isSpin:false, + }) + }); } @@ -33,35 +61,198 @@ class Eduinforms extends Component{ } + bianji = (bians)=>{ + this.setState({ + whethertoedit:bians, + }) + }; + handleSubmit=(e) => { + e.preventDefault(); + this.props.form.validateFields((err, values) => { + if (!err) { + console.log(values.description); + if(values.description === undefined|| values.description === "" || values.description ===null){ + this.props.showNotification(`请输入提交内容`); + return + + } + var id=this.props.match.params.coursesId + + var url = `/courses/${id}/update_informs.json`; + axios.post(url,{ + description:values.description, + }).then((result) => { + if(result){ + if(result.data){ + if(result.data.status === 0){ + this.setState({ + description:values.description, + whethertoedit:false, + }) + this.props.showNotification(result.data.message); + }else { + this.props.showNotification(result.data.message); + + } + } + + } + }).catch((error) => { + console.log(error) + }) + }else{ + console.log(err); + } + + }); + } render(){ + let{description,whethertoedit} =this.state; + const {getFieldDecorator} = this.props.form; return( -
    +

    公告栏 -

  • - 编辑 -
  • + { + this.props.isAdmin()===true? +
  • this.bianji(true)}> + 编辑 +
  • + :"" + } +

    - {/**/} + + +
    + { + whethertoedit === false? +
    + { + description === null || description=== undefined ||description === "" ? +
    +
    +

    暂时还没有相关数据哦!

    +
    + : +
    +
    + + +
    +
    + } +
    + : +
    +
    + +
    +
    + + + {getFieldDecorator('description', { + rules: [{ + required: true, message: '请在此输入内容,最多5000个字符', + }, { + max: 5000, message: '最大限制为5000个字符', + }], + })( + + )} + +
    +
    + + +
    + this.bianji(false)}>取消 + +
    +
    +
    +
    + } + + +
    + - {/*
    */} +
    ) } } -export default Eduinforms; +const Eduinformss = Form.create({ name: 'eduinforms' })(Eduinforms); +export default Eduinformss; diff --git a/public/react/src/modules/courses/gradinforms/myysleduinforms.css b/public/react/src/modules/courses/gradinforms/myysleduinforms.css new file mode 100644 index 000000000..1d93ea426 --- /dev/null +++ b/public/react/src/modules/courses/gradinforms/myysleduinforms.css @@ -0,0 +1,13 @@ +.yslmt16px{ + padding-top: 16px !important; + padding-left: 25px !important; + padding-right: 25px !important; + padding-bottom: 1px !important; +} + +.yslmtopcg +{ + padding: 25px !important; + + +} \ No newline at end of file diff --git a/public/react/src/modules/courses/new/Goldsubject.js b/public/react/src/modules/courses/new/Goldsubject.js index 5a02d54e8..faa64e866 100644 --- a/public/react/src/modules/courses/new/Goldsubject.js +++ b/public/react/src/modules/courses/new/Goldsubject.js @@ -67,18 +67,24 @@ class Goldsubject extends Component { checkboxgroup: data.course_module_types, Realnamecertification: data.authentication, Professionalcertification:data.professional_certification, + starttime: data.start_date === undefined ? "" : moment(data.start_date, dateFormat), endtime: data.end_date === undefined ? "" : moment(data.end_date, dateFormat), school:data.school }); - + // starttime this.setState({ + datatimetwo: data.start_date, datatime: data.end_date, - datatimetwo: data.end_date, is_public: 1, Realnamecertification: data.authentication, Professionalcertification:data.professional_certification, - }) + name: data.name, + class_period: data.class_period, + credit: parseFloat(data.credit), + course_module_types: data.course_module_types, + school:data.school + }); this.handleSearchschool(data.school); }).catch((error) => { console.log(error); diff --git a/public/react/src/modules/courses/shixunHomework/guide.css b/public/react/src/modules/courses/shixunHomework/guide.css index cd7ec9b0b..cc6fd8ee8 100755 --- a/public/react/src/modules/courses/shixunHomework/guide.css +++ b/public/react/src/modules/courses/shixunHomework/guide.css @@ -511,7 +511,7 @@ height: 53%; } .ysldiv71024{ - margin-top: 31%; + margin-top: 31% ; margin-left: 27%; margin-right: 0; height: 40%; diff --git a/public/stylesheets/educoder/edu-main.css b/public/stylesheets/educoder/edu-main.css index c23c3d350..4aa426192 100644 --- a/public/stylesheets/educoder/edu-main.css +++ b/public/stylesheets/educoder/edu-main.css @@ -551,7 +551,7 @@ a:hover.task-btn-orange{background: #459BE6;} a.user_bluebg_btn{background-color:#4CACFF;color: #fff;} a.user_orangebg_btn{background-color:#FF6800;color: #fff;} a.user_greybg_btn{background-color:#747A7F;color: #fff;} - +/*.user_white_btn{border: 1px solid #ffffff;color: #ffffff!important;}*/ .pointer{cursor: pointer} .cdefault{cursor: default} From d87f33914303203f23c4c0ef9b5ef7742d614132 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E6=9D=A8=E6=A0=91=E6=9E=97?= <904079904@qq.com> Date: Sat, 17 Aug 2019 16:39:31 +0800 Subject: [PATCH 21/30] =?UTF-8?q?=E8=B0=83=E6=95=B4?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- public/react/src/modules/courses/Index.js | 13 +- .../courses/coursesDetail/CoursesBanner.js | 10 +- .../src/modules/courses/new/Goldsubject.js | 160 +++++++++++++----- 3 files changed, 132 insertions(+), 51 deletions(-) diff --git a/public/react/src/modules/courses/Index.js b/public/react/src/modules/courses/Index.js index 2d82c34b7..e0044bc34 100644 --- a/public/react/src/modules/courses/Index.js +++ b/public/react/src/modules/courses/Index.js @@ -832,6 +832,12 @@ class CoursesIndex extends Component{ render={ (props) => () } + > + {/*修改金品课堂*/} + () + } > {/*修改课堂*/} () } > - {/*修改金品课堂*/} - () - } - > + {/* 实训作业子页面*/} { - var id =1; + var ids =1; try { if(this.state.coursedata.is_public){ - id=1; + ids=1; }else { - id=0; + ids=0; } }catch (e) { } - - - window.location.href = " /courses/" + this.props.match.params.coursesId + "/newgold/settings"+id; + window.location.href = `/courses/${this.props.match.params.coursesId}/newgolds/settings/${ids}`; }; diff --git a/public/react/src/modules/courses/new/Goldsubject.js b/public/react/src/modules/courses/new/Goldsubject.js index faa64e866..40c4c4f1f 100644 --- a/public/react/src/modules/courses/new/Goldsubject.js +++ b/public/react/src/modules/courses/new/Goldsubject.js @@ -29,8 +29,13 @@ function disabledDateTime() { } function disabledDate(current) { + console.log(current); return current && current < moment().endOf('day').subtract(1, 'days'); } +function disabledDateysl(current) { + console.log(current); + return current && current < moment().endOf('day').add(1, 'days'); +} class Goldsubject extends Component { @@ -46,9 +51,56 @@ class Goldsubject extends Component { start_date:"", } } + // disabledEndDate= endValue => { + // const { datatimetwo } = this.state; + // var startValue =datatimetwo + // if (!endValue || !startValue) { + // return false; + // } + // return endValue.valueOf() < startValue.valueOf(); + // }; + + isabledStartDate = (startValue) => { + + const { datatime } = this.state; + var datatimes=""; + if(datatime!==undefined){ + datatimes=datatime; + datatimes=moment(datatimes, dateFormat).subtract(0, 'days');; + }else { + datatimes=datatime; + } + if (!startValue || !datatimes) { + return false; + } + return startValue.valueOf() > datatimes.valueOf(); + }; - componentDidMount() { + disabledEndDate = (endValue) => { + // console.log("---------------------------------") + // console.log(moment(new Date(), dateFormat).add(1, 'days')); + // console.log(moment(new Date(), dateFormat).add(2, 'days')); + const { datatimetwo } = this.state; + var startvalue=""; + if(datatimetwo!==undefined){ + startvalue=datatimetwo; + startvalue=moment(startvalue, dateFormat).add(1, 'days'); + }else { + startvalue=datatimetwo; + } + // console.log("结束时间"); + // console.log(endValue); + // console.log(startvalue); + // console.log(datatimetwo); + if (!endValue || !startvalue) { + return false; + } + return endValue.valueOf() < startvalue.valueOf(); + }; + componentDidMount() { + console.log("新建金品课堂的数据"); + console.log(this.props); let coursesId = this.props.match.params.coursesId; let user_school=this.props.current_user&&this.props.current_user.user_school; @@ -74,16 +126,16 @@ class Goldsubject extends Component { }); // starttime this.setState({ - datatimetwo: data.start_date, - datatime: data.end_date, - is_public: 1, + datatimetwo: data.start_date === undefined ? "" : moment(data.start_date, dateFormat), + datatime: data.end_date === undefined ? "" : moment(data.end_date, dateFormat), + is_public: this.props.match.params.id, Realnamecertification: data.authentication, Professionalcertification:data.professional_certification, name: data.name, class_period: data.class_period, credit: parseFloat(data.credit), course_module_types: data.course_module_types, - school:data.school + school:data.school, }); this.handleSearchschool(data.school); }).catch((error) => { @@ -125,25 +177,42 @@ class Goldsubject extends Component { } } onChangeTimepublishs = (date, dateString) => { + console.log("结束时间11111111111"); + console.log(dateString); + if(dateString===""){ this.setState({ datatime: undefined, }) + this.props.form.setFieldsValue({ + endtime: "", + }); }else{ this.setState({ datatime: dateString, - }) + }); + this.props.form.setFieldsValue({ + endtime:dateString, + }); } }; onChangeTimepublishstwo = (date, dateString) => { + console.log("结束时间22222222222"); + console.log(dateString); if(dateString===""){ this.setState({ datatimetwo: undefined, }) + this.props.form.setFieldsValue({ + starttime: "", + }); }else{ this.setState({ datatimetwo: dateString, }) + this.props.form.setFieldsValue({ + starttime: dateString, + }); } }; cancelmodel = () => { @@ -171,30 +240,34 @@ class Goldsubject extends Component { handleSubmit = (e) => { e.preventDefault(); + let first_category_url=this.props.current_user.first_category_url; let coursesId = this.props.match.params.coursesId; - let {is_public,datatime,datatimetwo} = this.state + var is_public =this.props.match.params.id; + let {datatime,datatimetwo} = this.state // console.log(is_public) if (coursesId != undefined) { // 编辑 this.props.form.validateFields((err, values) => { - + if (err) { + return; + } // if(values.course===""||values.course===undefined){ // this.scrollToAnchor("iscourse") // return // // } - if(values.classroom===""||values.classroom===undefined){ - this.scrollToAnchor("isclassroom") - return - } - - if(values.school===""||values.school===undefined){ - // this.scrollToAnchor("isschool") - return - - } + // if(values.classroom===""||values.classroom===undefined){ + // this.scrollToAnchor("isclassroom") + // return + // } + // + // if(values.school===""||values.school===undefined){ + // // this.scrollToAnchor("isschool") + // return + // + // } if(values.checkboxgroup.length===0){ this.setState({ @@ -220,9 +293,9 @@ class Goldsubject extends Component { name: values.classroom, class_period: values.period, credit: parseFloat(values.credit), - start_date:datatimetwo===undefined?"":datatimetwo, - end_date: datatime===undefined?"":datatime, - is_public: 1, //这是也是带过来的值 + start_date:values.starttime, + end_date: values.endtime, + is_public: is_public, //这是也是带过来的值 course_module_types: values.checkboxgroup, school:values.school } @@ -251,6 +324,9 @@ class Goldsubject extends Component { console.log(error) }) } + + console.log("错误信息信息信息"); + console.log(err); }); } else { this.props.form.validateFields((err, values) => { @@ -279,9 +355,9 @@ class Goldsubject extends Component { name: values.classroom, class_period: values.period, credit: parseFloat(values.credit), - start_date:datatimetwo===undefined?"":datatimetwo, - end_date: datatime===undefined?"":datatime, - is_public: 1, //这是也是带过来的值 + start_date:values.starttime, + end_date: values.endtime, + is_public: is_public, //这是也是带过来的值 course_module_types: values.checkboxgroup, school:values.school } @@ -430,15 +506,17 @@ class Goldsubject extends Component { search: value } }).then((result)=>{ - if (result.data.status===0) { - this.setState({ - searchlistscholl: result.data.school_names, - - }) - if(result.data.school_names.length!=0){ + if(result){ + if (result.data.status===0) { this.setState({ - fetching: false + searchlistscholl: result.data.school_names, + }) + if(result.data.school_names.length!=0){ + this.setState({ + fetching: false + }) + } } } }).catch((error)=>{ @@ -653,9 +731,10 @@ class Goldsubject extends Component { - {getFieldDecorator("starttime")( + {getFieldDecorator("starttime", { + rules: [{type: 'object',required: true, message: "开始时间不能为空"}], + })( @@ -675,9 +754,10 @@ class Goldsubject extends Component { - {getFieldDecorator("endtime")( + {getFieldDecorator("endtime", { + rules: [{type: 'object',required: true, message: "结束时间不能为空"}], + })( @@ -815,6 +895,8 @@ class Goldsubject extends Component { ) } } - const WrappedCoursesNewAppGoldclass = Form.create({name: 'goldsubject'})(Goldsubject); -export default WrappedCoursesNewAppGoldclass; \ No newline at end of file + +export default WrappedCoursesNewAppGoldclass; + + From 961e87ede15bca19748defaddbd145118a63c4a3 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E6=9D=A8=E6=A0=91=E6=98=8E?= <775174143@qq.com> Date: Sat, 17 Aug 2019 16:40:08 +0800 Subject: [PATCH 22/30] =?UTF-8?q?=E8=B0=83=E6=95=B4?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../src/modules/paths/PathDetail/DetailTop.css | 13 ++++++------- .../react/src/modules/paths/PathDetail/DetailTop.js | 12 ++++++------ 2 files changed, 12 insertions(+), 13 deletions(-) diff --git a/public/react/src/modules/paths/PathDetail/DetailTop.css b/public/react/src/modules/paths/PathDetail/DetailTop.css index c5c79b468..cc9f7b87b 100644 --- a/public/react/src/modules/paths/PathDetail/DetailTop.css +++ b/public/react/src/modules/paths/PathDetail/DetailTop.css @@ -17,16 +17,15 @@ box-sizing: border-box; } .userNavs{ - height: 54px; - line-height: 54px; + line-height: 96px; background: #fff; - -webkit-box-shadow: 0 9px 16px -1px #e6e6e6; - box-shadow: 0 9px 16px -1px #e6e6e6; - border-radius: 7px; - padding: 0 10px; + height:96px; + background:rgba(255,255,255,1); + box-shadow:3px 5px 11px 1px rgba(230,230,230,0.5); + border-radius:4px; } -.userNav li { +.userNavs li { display: inline-block; padding: 0 30px; -webkit-box-sizing: border-box; diff --git a/public/react/src/modules/paths/PathDetail/DetailTop.js b/public/react/src/modules/paths/PathDetail/DetailTop.js index 766b466c0..d7ca31867 100644 --- a/public/react/src/modules/paths/PathDetail/DetailTop.js +++ b/public/react/src/modules/paths/PathDetail/DetailTop.js @@ -151,7 +151,7 @@ class DetailTop extends Component{ }; return( -
    +
    { detailInfoList && -
    +
    {detailInfoList.name} @@ -254,7 +254,7 @@ class DetailTop extends Component{
    :""} -
    + {this.props.courses===undefined?"":detailInfoList.is_creator===true? +
    :""}
    - }
    } From 8ec18cb752391f383b79209afae2811d2b8b5e16 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E6=9D=A8=E6=A0=91=E6=9E=97?= <904079904@qq.com> Date: Sat, 17 Aug 2019 17:23:58 +0800 Subject: [PATCH 23/30] =?UTF-8?q?=E8=B0=83=E6=95=B4?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../src/modules/courses/new/Goldsubject.js | 54 ++++++++++++------- 1 file changed, 35 insertions(+), 19 deletions(-) diff --git a/public/react/src/modules/courses/new/Goldsubject.js b/public/react/src/modules/courses/new/Goldsubject.js index 40c4c4f1f..35ccea51f 100644 --- a/public/react/src/modules/courses/new/Goldsubject.js +++ b/public/react/src/modules/courses/new/Goldsubject.js @@ -184,36 +184,45 @@ class Goldsubject extends Component { this.setState({ datatime: undefined, }) + console.log("结束时间111111111116"); + this.props.form.setFieldsValue({ - endtime: "", + endtime:undefined, }); }else{ + console.log("结束时间111111111117"); + this.setState({ datatime: dateString, }); this.props.form.setFieldsValue({ - endtime:dateString, + endtime: moment(dateString, dateFormat), }); } + }; onChangeTimepublishstwo = (date, dateString) => { console.log("结束时间22222222222"); console.log(dateString); if(dateString===""){ + console.log("结束时间222222222223"); this.setState({ datatimetwo: undefined, }) this.props.form.setFieldsValue({ - starttime: "", + starttime: undefined, }); }else{ + console.log("结束时间222222222224"); + this.setState({ datatimetwo: dateString, }) this.props.form.setFieldsValue({ - starttime: dateString, + starttime: moment(dateString, dateFormat), }); } + }; cancelmodel = () => { @@ -325,25 +334,32 @@ class Goldsubject extends Component { }) } - console.log("错误信息信息信息"); + console.log("错误信息信息信息1"); console.log(err); + console.log(values.starttime); + console.log(values.endtime); + }); } else { this.props.form.validateFields((err, values) => { - + console.log("错误信息信息信息2"); + console.log(err); + if (err) { + return; + } // if(values.course===""||values.course===undefined){ // this.scrollToAnchor("iscourse") // return // } - if(values.classroom===""||values.classroom===undefined){ - this.scrollToAnchor("isclassroom") - return - } - if(values.school===""||values.school===undefined){ - // this.scrollToAnchor("isschool") - return - - } + // if(values.classroom===""||values.classroom===undefined){ + // this.scrollToAnchor("isclassroom") + // return + // } + // if(values.school===""||values.school===undefined){ + // // this.scrollToAnchor("isschool") + // return + // + // } if (!err) { // debugger //新建 @@ -535,10 +551,10 @@ class Goldsubject extends Component { const optionschool = this.state.searchlistscholl===undefined?"":this.state.searchlistscholl===null?"":this.state.searchlistscholl==="[]"?"":this.state.searchlistscholl.map(z => ); // console.log(this.props.current_user.user_school) // form合并了 - console.log("获取到的数据"); - console.log(this.state); - console.log(this.props); - console.log(this.props.current_user); + // console.log("获取到的数据"); + // console.log(this.state); + // console.log(this.props); + // console.log(this.props.current_user); return ( From a52819710fe93ccd4281683b1aa8d7ca34340067 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E6=9D=A8=E6=A0=91=E6=98=8E?= <775174143@qq.com> Date: Sat, 17 Aug 2019 17:24:27 +0800 Subject: [PATCH 24/30] =?UTF-8?q?=E8=B0=83=E6=95=B4?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../src/modules/paths/PathDetail/DetailTop.js | 11 +++++-- .../paths/PathDetail/PathDetailIndex.js | 29 +++++++++++++++++-- 2 files changed, 35 insertions(+), 5 deletions(-) diff --git a/public/react/src/modules/paths/PathDetail/DetailTop.js b/public/react/src/modules/paths/PathDetail/DetailTop.js index d7ca31867..7fd957be5 100644 --- a/public/react/src/modules/paths/PathDetail/DetailTop.js +++ b/public/react/src/modules/paths/PathDetail/DetailTop.js @@ -150,8 +150,11 @@ class DetailTop extends Component{ lineHeight: '30px', }; + console.log(this.props) + //
    return( -
    + +
    + {/*
    */} { detailInfoList && -
    +
    {detailInfoList.name} @@ -269,7 +273,8 @@ class DetailTop extends Component{
    - {this.props.courses===undefined?"":
    + {/*{this.props.courses===undefined||this.props.courses.length===0?"":
    */} + {this.props.courses===undefined?"":
  • 翻转课堂
  • 开发社区
  • 实践课程
  • diff --git a/public/react/src/modules/paths/PathDetail/PathDetailIndex.js b/public/react/src/modules/paths/PathDetail/PathDetailIndex.js index 476b60f40..43128e446 100644 --- a/public/react/src/modules/paths/PathDetail/PathDetailIndex.js +++ b/public/react/src/modules/paths/PathDetail/PathDetailIndex.js @@ -81,7 +81,32 @@ class PathDetailIndex extends Component{ cardsModalsave:this.cardsModalsave, user_id:undefined, loadtype:false, - courses:undefined, + courses:[ + { + course_id: 1309, + first_category_url: "/courses/1309/informs", + start_date: "2019-07-16", // 开始时间 + end_date: "2050-12-31", // 结束时间 + student_count: 112, // 学习人数 + course_identity: 5, // 当前用户在该课堂的身份 + course_status: { + status: 1, // status:0:即将开课 1:进行中 2:已结束 + time: "进行至第5周,共1642周" // time:当前进度 + } + }, + { + course_id: 1319, + first_category_url: "/courses/1319/shixun_homeworks/11549", + start_date:"2019-08-16", + end_date:"2050-12-31", + student_count: 112, + course_identity: 1, + course_status: { + status: 0, + time: "" + } + } + ], items: getItems(10) } this.onDragEnd = this.onDragEnd.bind(this); @@ -162,7 +187,7 @@ class PathDetailIndex extends Component{ if(result.data.allow_visit===true){ this.setState({ detailInfoList:result.data, - courses:result.data.courses + // courses:result.data.courses // items: getItems(result.data.members.length), }) } From 1ce41ff550edd434c72d184c6f6b3b8b8e7e6c77 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E6=9D=A8=E6=A0=91=E6=9E=97?= <904079904@qq.com> Date: Mon, 19 Aug 2019 10:26:54 +0800 Subject: [PATCH 25/30] =?UTF-8?q?=E8=B0=83=E6=95=B4?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- public/react/src/modules/courses/Index.js | 2 +- .../courses/coursesDetail/CoursesBanner.js | 28 +++++++++++++++++-- .../modules/courses/elearning/Elearning.js | 2 +- .../courses/elearning/YslDetailCards.js | 9 ++++++ .../modules/courses/gradinforms/Eduinforms.js | 3 +- .../courses/gradinforms/myysleduinforms.css | 2 +- 6 files changed, 39 insertions(+), 7 deletions(-) diff --git a/public/react/src/modules/courses/Index.js b/public/react/src/modules/courses/Index.js index e0044bc34..1409e8468 100644 --- a/public/react/src/modules/courses/Index.js +++ b/public/react/src/modules/courses/Index.js @@ -828,7 +828,7 @@ class CoursesIndex extends Component{ {/*新建金品课堂*/} {/*coursesId 课堂id */} {/*id 是否是私有或者公有*/} - () } diff --git a/public/react/src/modules/courses/coursesDetail/CoursesBanner.js b/public/react/src/modules/courses/coursesDetail/CoursesBanner.js index a136904d2..23360086f 100644 --- a/public/react/src/modules/courses/coursesDetail/CoursesBanner.js +++ b/public/react/src/modules/courses/coursesDetail/CoursesBanner.js @@ -442,6 +442,28 @@ class CoursesBanner extends Component { {/*私有:私有课堂,非课堂成员不能访问 公开:公开课堂,非课堂成员可以访问*/} + + {excellent===true? + 国家精品 + :""} this.myyslgradin()}>加入课堂: ""} - {this.props.isStudent()? this.exitclass()} - > 退出课堂 :""} + {/*{this.props.isStudent()? this.exitclass()}*/} + {/*> 退出课堂 :""}*/}
    } diff --git a/public/react/src/modules/courses/elearning/Elearning.js b/public/react/src/modules/courses/elearning/Elearning.js index 0941de631..36fea5b86 100644 --- a/public/react/src/modules/courses/elearning/Elearning.js +++ b/public/react/src/modules/courses/elearning/Elearning.js @@ -304,7 +304,7 @@ class Elearning extends Component{ -
    +
    {/*开始学习*/} this.Startlearningtwo()} Myreload={()=>this.Myreload()} > diff --git a/public/react/src/modules/courses/elearning/YslDetailCards.js b/public/react/src/modules/courses/elearning/YslDetailCards.js index 2de927c07..ed42f225b 100644 --- a/public/react/src/modules/courses/elearning/YslDetailCards.js +++ b/public/react/src/modules/courses/elearning/YslDetailCards.js @@ -151,6 +151,15 @@ class YslDetailCards extends Component{
    + { stages && stages.map((item,key)=>{ diff --git a/public/react/src/modules/courses/gradinforms/Eduinforms.js b/public/react/src/modules/courses/gradinforms/Eduinforms.js index 810ac511e..aef54ab13 100644 --- a/public/react/src/modules/courses/gradinforms/Eduinforms.js +++ b/public/react/src/modules/courses/gradinforms/Eduinforms.js @@ -195,10 +195,11 @@ class Eduinforms extends Component{ min-height: 37px; background: #fff; display: none; - position: absolute; + position: absolute !important; left: 0; z-index: 10; border-bottom: 1px solid #ddd; + } .yslmt16px .ant-form-item-with-help { diff --git a/public/react/src/modules/courses/gradinforms/myysleduinforms.css b/public/react/src/modules/courses/gradinforms/myysleduinforms.css index 1d93ea426..f3fa2fb1a 100644 --- a/public/react/src/modules/courses/gradinforms/myysleduinforms.css +++ b/public/react/src/modules/courses/gradinforms/myysleduinforms.css @@ -1,5 +1,5 @@ .yslmt16px{ - padding-top: 16px !important; + padding-top: 25px !important; padding-left: 25px !important; padding-right: 25px !important; padding-bottom: 1px !important; From d70bf4cfad985a9120204074299c48449bfd6c51 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E6=9D=A8=E6=A0=91=E6=9E=97?= <904079904@qq.com> Date: Mon, 19 Aug 2019 10:45:29 +0800 Subject: [PATCH 26/30] =?UTF-8?q?=E8=B0=83=E6=95=B4?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../src/modules/courses/exercise/Testpapersettinghomepage.js | 2 +- public/react/src/modules/courses/poll/PollDetailIndex.js | 4 +++- 2 files changed, 4 insertions(+), 2 deletions(-) diff --git a/public/react/src/modules/courses/exercise/Testpapersettinghomepage.js b/public/react/src/modules/courses/exercise/Testpapersettinghomepage.js index 65e48962a..cf7c70ac8 100644 --- a/public/react/src/modules/courses/exercise/Testpapersettinghomepage.js +++ b/public/react/src/modules/courses/exercise/Testpapersettinghomepage.js @@ -413,7 +413,7 @@ class Testpapersettinghomepage extends Component{ this.setgameexercise(`/courses/${this.props.match.params.coursesId}/exercises/${this.props.match.params.Id}/users/${this.props.current_user.login}`)}>开始答题: - {start_Value[Commonheadofthetestpaper&&Commonheadofthetestpaper.user_permission.current_status]} + {Commonheadofthetestpaper && Commonheadofthetestpaper.exercise_status===3?"":Commonheadofthetestpaper && Commonheadofthetestpaper.exercise_status===4?"":start_Value[Commonheadofthetestpaper&&Commonheadofthetestpaper.user_permission.current_status]} :""} diff --git a/public/react/src/modules/courses/poll/PollDetailIndex.js b/public/react/src/modules/courses/poll/PollDetailIndex.js index cdc6a5ae2..9400341e4 100644 --- a/public/react/src/modules/courses/poll/PollDetailIndex.js +++ b/public/react/src/modules/courses/poll/PollDetailIndex.js @@ -206,7 +206,9 @@ class PollDetailIndex extends Component{ { user_permission && user_permission.current_status!=3 ? - { user_permission && user_permission.current_status ==0 ? "继续答题" : user_permission.current_status == 1 ? "查看答题" : "开始答题" } + { user_permission && user_permission.current_status ==0 ? "继续答题" : user_permission.current_status == 1 ? + (pollDetail && pollDetail.polls_status===3?"":pollDetail && pollDetail.polls_status===4?"":"查看答题") + : "开始答题" } :"" } From 4d06b7a561a7411b9fb9f9a35c98e9b337f547a1 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E6=9D=A8=E6=A0=91=E6=9E=97?= <904079904@qq.com> Date: Mon, 19 Aug 2019 11:02:20 +0800 Subject: [PATCH 27/30] =?UTF-8?q?=E8=B0=83=E6=95=B4?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../src/modules/courses/shixunHomework/CommitSummary.js | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/public/react/src/modules/courses/shixunHomework/CommitSummary.js b/public/react/src/modules/courses/shixunHomework/CommitSummary.js index 8ee260ccd..8bbbcddc5 100644 --- a/public/react/src/modules/courses/shixunHomework/CommitSummary.js +++ b/public/react/src/modules/courses/shixunHomework/CommitSummary.js @@ -131,7 +131,7 @@ class CommitSummary extends Component{ height:'20px' }} >
    -

    +

    this.gotohome()}>{data === undefined ? "" :data.course_name===undefined?"": data.course_name} > {/* style="grey" */} @@ -143,9 +143,9 @@ class CommitSummary extends Component{

    -
    + {/*educontentbox*/}
    From fbd43b7c4f83c5a97116473c532b690679a5cb41 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E6=9D=A8=E6=A0=91=E6=9E=97?= <904079904@qq.com> Date: Mon, 19 Aug 2019 11:27:37 +0800 Subject: [PATCH 28/30] =?UTF-8?q?=E8=B0=83=E6=95=B4?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../courses/shixunHomework/CommitSummary.js | 22 ++++++++++++++++++- 1 file changed, 21 insertions(+), 1 deletion(-) diff --git a/public/react/src/modules/courses/shixunHomework/CommitSummary.js b/public/react/src/modules/courses/shixunHomework/CommitSummary.js index 8bbbcddc5..72729b77b 100644 --- a/public/react/src/modules/courses/shixunHomework/CommitSummary.js +++ b/public/react/src/modules/courses/shixunHomework/CommitSummary.js @@ -174,7 +174,27 @@ class CommitSummary extends Component{ )}
    - +