From 0a34988f409da02fed284eca16afb6daeba5decb Mon Sep 17 00:00:00 2001
From: jingquan huang
Date: Thu, 19 Dec 2019 17:05:57 +0800
Subject: [PATCH 1/9] =?UTF-8?q?=E5=AE=9E=E9=AA=8C=E7=8E=AF=E5=A2=83?=
=?UTF-8?q?=E4=B8=BA=E7=A9=BA=E7=9A=84=E6=8F=90=E9=86=92=E9=94=99=E8=AF=AF?=
=?UTF-8?q?=E9=97=AE=E9=A2=98?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
---
app/controllers/myshixuns_controller.rb | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/app/controllers/myshixuns_controller.rb b/app/controllers/myshixuns_controller.rb
index 987f4873a..0e9ba477a 100644
--- a/app/controllers/myshixuns_controller.rb
+++ b/app/controllers/myshixuns_controller.rb
@@ -247,7 +247,7 @@ class MyshixunsController < ApplicationController
def update_file
begin
@hide_code = Shixun.where(id: @myshixun.shixun_id).pluck(:hide_code).first
- tip_exception("技术平台为空!") if @myshixun.mirror_name.blank?
+ tip_exception("实验环境不能为空,请查看实训模板的环境配置项是否正确!") if (@myshixun.mirror_name.blank? || @myshixun.mirror_name.first.to_s == "-1")
path = params[:path].strip unless params[:path].blank?
game_id = params[:game_id]
game = Game.find(game_id)
From c69f06b746b1e41c577530df9d33357073210aed 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, 19 Dec 2019 18:24:30 +0800
Subject: [PATCH 2/9] =?UTF-8?q?=E6=96=B0=E7=89=88=E5=AD=A6=E9=99=A2?=
=?UTF-8?q?=E7=BB=9F=E8=AE=A1=E8=B0=83=E6=95=B4?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
---
public/react/src/App.js | 10 +-
public/react/src/college/College.js | 1259 +++++++++++++++++
.../college/colleagechart/Colleagechart.js | 84 ++
.../college/colleagechart/Colleagechartzu.js | 149 ++
.../src/college/colleagecss/colleage.css | 213 +++
5 files changed, 1714 insertions(+), 1 deletion(-)
create mode 100644 public/react/src/college/College.js
create mode 100644 public/react/src/college/colleagechart/Colleagechart.js
create mode 100644 public/react/src/college/colleagechart/Colleagechartzu.js
create mode 100644 public/react/src/college/colleagecss/colleage.css
diff --git a/public/react/src/App.js b/public/react/src/App.js
index 4694d57da..03cad7110 100644
--- a/public/react/src/App.js
+++ b/public/react/src/App.js
@@ -71,6 +71,11 @@ const Otherlogin=Loadable({
loader: () => import('./modules/login/Otherlogin'),
loading: Loading,
})
+// 学院统计
+const College = Loadable({
+ loader: () => import('./college/College'),
+ loading: Loading
+})
const Otherloginstart=Loadable({
loader: () => import('./modules/login/Otherloginstart'),
@@ -614,7 +619,10 @@ class App extends Component {
{/*/>*/}
-
+ ()
+ }/>
{/* jupyter */}
(
+ {
+ record.name
+ }
+ )
+ },
+ {
+ title: '管理教师',
+ dataIndex: 'teachers',
+ key: 'teachers',
+ align: 'center',
+ className: "edu-txt-center font-14 maxnamewidth340",
+ render: (text, record) => (
+
+ {
+ record.teachers
+ }
+
+ )
+ },
+ {
+ title: '评测次数',
+ dataIndex: 'times',
+ key: 'times',
+ align: 'center',
+ className: "edu-txt-center font-14 maxnamewidth175",
+ render: (text, record) => (
+
+ {
+ record.evaluating_count
+ }
+
+ ),
+ },
+ {
+ title: '学生',
+ key: 'student',
+ dataIndex: 'student',
+ align: 'center',
+ className: "edu-txt-center font-14 maxnamewidth255",
+ render: (text, record) => (
+
+ {
+ record.student_count
+ }
+
+ )
+ },
+ {
+ title: '实训作业',
+ dataIndex: 'training',
+ key: 'training',
+ align: 'center',
+ className: "edu-txt-center font-14",
+ render: (text, record) => (
+
+ {
+ record.shixun_work_count
+ }
+
+ )
+
+ },
+ {
+ title: '资源',
+ dataIndex: 'resources',
+ key: 'resources',
+ align: 'center',
+ className: "edu-txt-center font-14",
+ render: (text, record) => (
+
+ {
+ record.attachment_count
+ }
+
+ ),
+ },
+ {
+ title: '帖子',
+ dataIndex: 'posts',
+ key: 'posts',
+ align: 'center',
+ className: "edu-txt-center font-14",
+ render: (text, record) => (
+ {
+ record.message_count
+ }
+ )
+ },
+ {
+ title: '其它任务',
+ dataIndex: 'othertasks',
+ key: 'othertasks',
+ align: 'center',
+ className: "edu-txt-center font-14",
+ render: (text, record) => (
+
+ {
+ record.other_work_count
+ }
+
+ )
+ },
+ {
+ title: '状态',
+ dataIndex: 'states',
+ key: 'states',
+ align: 'center',
+ className: "edu-txt-center font-14",
+ render: (text, record) => (
+
+ {
+ record.is_end?
+ "已结束"
+ :
+ "正在进行"
+ }
+
+ )
+ },
+ {
+ title: '时间',
+ dataIndex: 'timemy',
+ key: 'timemy',
+ align: 'center',
+ className: "edu-txt-center font-14",
+ render: (text, record) => (
+
+ {
+ record.activity_time
+ }
+
+ )
+ },
+ ],
+ page:1,
+ limit:10,
+ total_users:50,
+ teachersloading:false,
+ teacherranking:[
+ {
+ title: '排名',
+ dataIndex: 'ranking',
+ key: 'ranking',
+ align: 'center',
+ className: "edu-txt-center font-14",
+ render: (text, record) => (
+
+ {
+ record.id
+ }
+
+ )
+ },
+ {
+ title: '姓名',
+ dataIndex: 'name',
+ key: 'name',
+ align: 'center',
+ className: "edu-txt-center font-14 maxnamewidth105",
+ render: (text, record) => (
+ {
+ record.name
+ }
+
+ )
+ },
+ {
+ title: '管理课堂',
+ dataIndex: 'classroom',
+ key: 'classroom',
+ align: 'center',
+ className: "edu-txt-center font-14 maxnamewidth175",
+ render: (text, record) => (
+
+ {
+ record.course_count
+ }
+
+ ),
+ },
+ {
+ title: '已发布实训作业',
+ key: 'assignment',
+ dataIndex: 'assignment',
+ align: 'center',
+ className: "edu-txt-center font-14 maxnamewidth255",
+ render: (text, record) => (
+
+ {
+ record.shixun_work_count
+ }
+
+ )
+ },
+ {
+ title: '未发布实训作业',
+ dataIndex: 'released',
+ key: 'released',
+ align: 'center',
+ className: "edu-txt-center font-14",
+ render: (text, record) => (
+
+ {
+ record.un_shixun_work_count
+ }
+
+ )
+
+ },
+ {
+ title: '学生数',
+ dataIndex: 'studentnumber',
+ key: 'studentnumber',
+ align: 'center',
+ className: "edu-txt-center font-14",
+ render: (text, record) => (
+
+ {
+ record.student_count
+ }
+
+ ),
+ },
+ {
+ title: '完成率',
+ dataIndex: 'completionrate',
+ key: 'completionrate',
+ align: 'center',
+ className: "edu-txt-center font-14",
+ render: (text, record) => (
+
+ {
+ record.complete_rate+"%"
+ }
+
+ )
+ },
+ {
+ title: '发布实训',
+ dataIndex: 'releasetraining',
+ key: 'releasetraining',
+ align: 'center',
+ className: "edu-txt-center font-14",
+ render: (text, record) => (
+
+ {
+ record.publish_shixun_count
+ }
+
+ )
+ }
+ ],
+ studentranking:[
+ {
+ title: '排名',
+ dataIndex: 'ranking',
+ key: 'ranking',
+ align: 'center',
+ className: "edu-txt-center font-14",
+ width:'100px',
+ render: (text, record) => (
+
+ {
+ record.id===1?
+ :record.id===2?
+
+ :record.id===3?
+
+ :record.id
+ }
+
+ )
+ },
+ {
+ title: '姓名',
+ dataIndex: 'name',
+ key: 'name',
+ align: 'center',
+ className: "edu-txt-center font-14 maxnamewidth105",
+ width:'100px',
+ render: (text, record) => (
+ {
+ record.name
+ }
+
+ )
+ },
+ {
+ title: '学号',
+ dataIndex: 'studentid',
+ key: 'studentid',
+ align: 'center',
+ className: "edu-txt-center font-14 maxnamewidth175",
+ render: (text, record) => (
+
+ {
+ record.student_id
+ }
+
+ ),
+ },
+ {
+ title: '完成实训',
+ key: 'training',
+ dataIndex: 'training',
+ align: 'center',
+ className: "edu-txt-center font-14 maxnamewidth255",
+ render: (text, record) => (
+
+ {
+ record.shixun_count
+ }
+
+ )
+ },
+ {
+ title: '在学实训',
+ dataIndex: 'learning',
+ key: 'learning',
+ align: 'center',
+ className: "edu-txt-center font-14",
+ render: (text, record) => (
+
+ {
+ record.study_shixun_count
+ }
+
+ )
+
+ },
+ {
+ title: '金币',
+ dataIndex: 'goldcoin',
+ key: 'goldcoin',
+ align: 'center',
+ className: "edu-txt-center font-14",
+ render: (text, record) => (
+
+ {
+ record.grade
+ }
+
+ ),
+ },
+ {
+ title: '经验值',
+ dataIndex: 'empirical',
+ key: 'empirical',
+ align: 'center',
+ className: "edu-txt-center font-14",
+ render: (text, record) => (
+
+ {
+ record.experience
+ }
+
+ )
+ },
+ ],
+ school:"",
+ teachers_count:null,
+ students_count:null,
+ courses_count:null,
+ shixuns_count:null,
+ shixun_report_count:null,
+ shixun_time:null,
+ courses:null,
+ course_count:0,
+ pages:1,
+ limits:10,
+ teachers:null,
+ teacher_count:0,
+ students:null,
+ student_count:0,
+ shixun_chart_data:null,
+ shixun_chart_datanames:null,
+ studentionsnames:null,
+ studentionsvalues:null
+ }
+
+ }
+
+
+ componentDidMount(){
+ console.log("College");
+ console.log(this.props.match.params.id);
+ this.gettop();
+ this.Numberofinternshipreports();
+ this.Actualcombattimeoftrainees();
+ this.Classnumber(1,10);
+ this.Teacherranking(1,10);
+ this.Studentranking(1,10);
+ this.Onlinetraining();
+ this.Hottest();
+ }
+ //头部
+ gettop=()=>{
+ const id =this.props.match.params.id;
+ const url=`/colleges/${id}/statistics.json`;
+ axios.get(url).then((response) => {
+ if(response===null||response===undefined){
+ this.setState({
+ teachers_count:0,
+ students_count:0,
+ courses_count:0,
+ shixuns_count:0,
+ school:"",
+ })
+ return
+ }
+ if (response.data.status === 403||response.data.status === 401||response.data.status === 500) {
+ this.setState({
+ teachers_count:0,
+ students_count:0,
+ courses_count:0,
+ shixuns_count:0,
+ school:"",
+ })
+ }else{
+ this.setState({
+ teachers_count:response.data.teachers_count,
+ students_count:response.data.students_count,
+ courses_count:response.data.courses_count,
+ shixuns_count:response.data.shixuns_count,
+ school:response.data.school,
+ })
+ }
+ }).catch((error) => {
+ console.log(error)
+ this.setState({
+ teachers_count:0,
+ students_count:0,
+ courses_count:0,
+ shixuns_count:0,
+ school:"",
+ })
+ });
+ }
+
+ //获取实训报告数
+ Numberofinternshipreports=()=>{
+ const id =this.props.match.params.id;
+ const url=`/colleges/${id}/shixun_report_count.json`;
+ axios.get(url).then((response) => {
+ if(response===null||response===undefined){
+ this.setState({
+ shixun_report_count:0,
+ })
+ return
+ }
+ if (response.data.status === 403||response.data.status === 401||response.data.status === 500) {
+ this.setState({
+ shixun_report_count:0,
+ })
+ }else{
+ if (response.data.status === -1){
+ this.setState({
+ shixun_report_count:0,
+ })
+ return
+ }
+ this.setState({
+ shixun_report_count:response.data.shixun_report_count,
+ })
+ }
+ }).catch((error) => {
+ console.log(error)
+ this.setState({
+ shixun_report_count:0,
+ })
+ });
+ }
+
+ //学员实战时间
+ Actualcombattimeoftrainees=()=>{
+ const id =this.props.match.params.id;
+ const url=`/colleges/${id}/shixun_time.json`;
+ axios.get(url).then((response) => {
+ if(response===null||response===undefined){
+ this.setState({
+ shixun_time:0,
+ })
+ return
+ }
+ if (response.data.status === 403||response.data.status === 401||response.data.status === 500) {
+ this.setState({
+ shixun_time:0,
+ })
+ }else{
+ if (response.data.status === -1){
+ this.setState({
+ shixun_time:0,
+ })
+ return
+ }
+ this.setState({
+ shixun_time:response.data.shixun_time,
+ })
+ }
+ }).catch((error) => {
+ console.log(error)
+ this.setState({
+ shixun_time:0,
+ })
+ });
+ }
+
+ //课堂信息
+ Classnumber=(page,per_page)=>{
+ const id =this.props.match.params.id;
+ const url=`/colleges/${id}/course_statistics.json`;
+ this.setState({
+ coursesloading:true
+ })
+ axios.get(url,{params:{
+ page:page,
+ per_page:per_page,
+ }
+ }).then((response) => {
+ if(response===null||response===undefined){
+ this.setState({
+ courses:[],
+ course_count:0
+ })
+ return
+ }
+ if (response.data.status === 403||response.data.status === 401||response.data.status === 500) {
+ this.setState({
+ courses:[],
+ course_count:0
+ })
+ }else{
+ if (response.data.status === -1){
+ this.setState({
+ courses:[],
+ course_count:0
+ })
+ return
+ }
+ this.setState({
+ courses:response.data.courses,
+ course_count:response.data.course_count,
+ page:page,
+ limit:per_page
+ })
+ }
+ this.setState({
+ coursesloading:false
+ })
+ }).catch((error) => {
+ this.setState({
+ courses:[],
+ course_count:0,
+ coursesloading:false
+ })
+ });
+ }
+
+ //教师排名
+ Teacherranking=(page,per_page)=>{
+ const id =this.props.match.params.id;
+ const url=`/colleges/${id}/teachers.json`;
+ this.setState({
+ teachersloading:true
+ })
+ axios.get(url,{params:{
+ page:page,
+ per_page:per_page,
+ }
+ }).then((response) => {
+ if(response===null||response===undefined){
+ this.setState({
+ teachers:[],
+ teacher_count:0
+ })
+ return
+ }
+ if (response.data.status === 403||response.data.status === 401||response.data.status === 500) {
+ this.setState({
+ teachers:[],
+ teacher_count:0
+ })
+ }else{
+ if (response.data.status === -1){
+ this.setState({
+ teachers:[],
+ teacher_count:0
+ })
+ return
+ }
+ let teachers=[];
+ if(response.data.teachers){
+ for(let i=0;i {
+ this.setState({
+ teachers:[],
+ teacher_count:0,
+ teachersloading:false
+ })
+ });
+ }
+ //学生排名
+
+ Studentranking=(page,per_page)=>{
+ const id =this.props.match.params.id;
+ const url=`/colleges/${id}/student_shixun.json`;
+ this.setState({
+ studentsloading:true
+ })
+ axios.get(url,{params:{
+ page:page,
+ per_page:per_page,
+ }
+ }).then((response) => {
+ if(response===null||response===undefined){
+ this.setState({
+ students:[],
+ student_count:0,
+ })
+ return
+ }
+ if (response.data.status === 403||response.data.status === 401||response.data.status === 500) {
+ this.setState({
+ students:[],
+ student_count:0,
+ })
+ }else{
+ if (response.data.status === -1){
+ this.setState({
+ students:[],
+ student_count:0,
+ })
+ return
+ }
+ let students=[];
+ if(response.data.teachers){
+ for(let i=0;i {
+ this.setState({
+ students:[],
+ student_count:0,
+ studentsloading:false
+ })
+ });
+ }
+
+ //在线实训情况
+ Onlinetraining=()=>{
+ const id =this.props.match.params.id;
+ const url=`/colleges/${id}/shixun_chart_data.json`;
+ axios.get(url).then((response) => {
+ if (response.data.status === 403||response.data.status === 401||response.data.status === 500) {
+ this.setState({
+ shixun_chart_data:[],
+ shixun_chart_datanames:[]
+ })
+ }else{
+ if (response.data.status === -1){
+ this.setState({
+ shixun_chart_data:[],
+ shixun_chart_datanames:[]
+ })
+ return
+ }
+
+ this.setState({
+ shixun_chart_data:response.data.data,
+ shixun_chart_datanames:response.data.names
+ })
+ }
+ }).catch((error) => {
+ this.setState({
+ shixun_chart_data:[],
+ shixun_chart_datanames:[]
+ })
+ });
+ }
+ //最热测评
+ Hottest=()=>{
+ const id =this.props.match.params.id;
+ const url=`/colleges/${id}/student_hot_evaluations.json`;
+ axios.get(url).then((response) => {
+ if (response.data.status === 403||response.data.status === 401||response.data.status === 500) {
+ this.setState({
+ studentionsnames: [],
+ studentionsvalues: []
+ })
+ }else {
+ if (response.data.status === -1) {
+ this.setState({
+ studentionsnames: [],
+ studentionsvalues: []
+ })
+ return
+ }
+ this.setState({
+ studentionsnames: response.data.names,
+ studentionsvalues: response.data.values
+ })
+ }
+ }).catch((error) => {
+ this.setState({
+ studentionsnames: [],
+ studentionsvalues: []
+ })
+ });
+ }
+
+ table1handleChange(){
+
+ }
+
+ //塞选
+ paginationonChange=(pageNumber)=>{
+ this.Classnumber(pageNumber,10);
+ }
+
+ paginationonChanges=(pageNumber)=>{
+ this.Teacherranking(pageNumber,10);
+ }
+ paginationonChangess=(pageNumber)=>{
+ this.Studentranking(pageNumber,10);
+ }
+ render() {
+ let {columns,page,limit,total_users,teacherranking,studentranking,
+ teachers_count,students_count, courses_count, shixuns_count,shixun_report_count,shixun_time,courses,course_count,school,teachers,
+ pages,limits, teacher_count,teachersloading,coursesloading,pagess,limitss,studentsloading,students,student_count,shixun_chart_data,
+ shixun_chart_datanames, studentionsnames,studentionsvalues
+ } = this.state;
+
+ return (
+
+
+
+
{school}
+
+
+ {/*//教师1*/}
+
+ 教师
+
+
+ {teachers_count?teachers_count:0}
+
+
+
+
+
+ 学生
+
+
+ {students_count?students_count:0}
+
+
+
+
+
+ 课堂
+
+
+ {courses_count?courses_count:0}
+
+
+
+
+
+ 共建实训
+
+
+ {shixuns_count?shixuns_count:0}
+
+
+ {/*//教师2*/}
+
+
+
+
+
+
+
+
+
+ 基本使用情况
+
+ {/*基本使用情况1*/}
+
+
+ 教师
+
+
+ 学生
+
+
+ 课堂
+
+
+ 共建实训
+
+
+ 实习报告
+
+
+ 学员实战时间
+
+
+
+
+ {/*基本使用情况2*/}
+
+
+ {
+ teachers_count?
+
{teachers_count}人
+ :
+
+ }
+
+
+ {
+ students_count?
+
{students_count}人
+ :
+
+ }
+
+
+ {
+ courses_count?
+
{courses_count}个
+ :
+
+ }
+
+
+ {
+ shixuns_count?
+
{shixuns_count}个
+ :
+
+ }
+
+
+ {
+ shixun_report_count?
+
{shixun_report_count}个
+ :
+
+ }
+
+
+ {
+ shixun_time?
+
{shixun_time}天
+ :
+
+ }
+
+
+ {/*基本使用情况3结束*/}
+
+
+
+
+
+ 课堂
+
+ {
+ courses===null?
+
+
+
+
+ :
+ JSON.stringify(courses) === "[]" ?
+
+
+
+ :
+
+
+
+
+ {courses === undefined ? "" :
}
+
+
+ {
+ course_count>=11?
+
+ :""
+ }
+
+
+ }
+
+
+
+
+
+
+
+
+ 教师排名
+
+ {
+ teachers===null?
+
+
+
+
+ :
+ JSON.stringify(teachers) === "[]" ?
+
+
+
+ :
+
+
+
+ {teachers === undefined ? "" :
}
+
+
+ }
+
+
+
+ {/*
*/}
+
+
+
+
+ 在线实训情况
+
+ {
+ shixun_chart_data===null?
+
+
+
+
+ :
+ JSON.stringify(shixun_chart_data) === "[]" ?
+
+
+
+ :
+
+
+
+ }
+
+
+
+
+
+
+
+
+
+ 学生排名
+
+ {
+ students === null ?
+
+
+
+
+ :
+ JSON.stringify(students) === "[]" ?
+
+
+
+ :
+
+
+
+ {students === undefined ? "" :
}
+
+
+ }
+ {/*
*/}
+
+
+
+
+
+
+
+
+ 最热评测
+
+ {
+ studentionsnames===null?
+
+
+
+
+ :
+ JSON.stringify(studentionsnames) === "[]" ?
+
+
+
+ :
+
+
+
+ }
+
+
+
+
+
+
+ )
+ }
+}
+export default SnackbarHOC() (TPMIndexHOC ( College ));
+
+
diff --git a/public/react/src/college/colleagechart/Colleagechart.js b/public/react/src/college/colleagechart/Colleagechart.js
new file mode 100644
index 000000000..fca01280a
--- /dev/null
+++ b/public/react/src/college/colleagechart/Colleagechart.js
@@ -0,0 +1,84 @@
+import React, {Component} from "react";
+import {WordsBtn} from 'educoder';
+import {Table} from "antd";
+import {Link,Switch,Route,Redirect} from 'react-router-dom';
+const echarts = require('echarts');
+
+
+
+function startechart(data,datanane){
+ var effChart = echarts.init(document.getElementById('shixun_skill_chart'));
+
+ var option = {
+
+ tooltip : {
+ trigger: 'item',
+ formatter: "{d}%
"
+ },
+ legend: {
+ // orient: 'vertical',
+ // top: 'middle',
+ bottom: 50,
+ left: 'center',
+ data: datanane
+ },
+ series : [
+ {
+ type: 'pie',
+ radius : '65%',
+ center: ['50%', '35%'],
+ selectedMode: 'single',
+ data:data,
+ itemStyle: {
+ emphasis: {
+ shadowBlur: 10,
+ shadowOffsetX: 0,
+ shadowColor: 'rgba(0, 0, 0, 0.5)'
+ }
+ }
+ }
+ ]
+ };
+ effChart.setOption(option);
+}
+class Colleagechart extends Component {
+
+ constructor(props) {
+ super(props);
+ this.state = {
+ }
+ }
+
+ componentDidMount() {
+ startechart(this.props.data,this.props.datanane)
+ }
+
+
+ componentDidUpdate = (prevProps) => {
+ if (prevProps.data!= this.props.data) {
+ startechart(this.props.data,this.props.datanane)
+ }
+ }
+
+
+ render() {
+ let {data}=this.props;
+
+ return (
+
+
+ )
+ }
+}
+
+export default Colleagechart;
diff --git a/public/react/src/college/colleagechart/Colleagechartzu.js b/public/react/src/college/colleagechart/Colleagechartzu.js
new file mode 100644
index 000000000..5c0269700
--- /dev/null
+++ b/public/react/src/college/colleagechart/Colleagechartzu.js
@@ -0,0 +1,149 @@
+import React, {Component} from "react";
+import {WordsBtn} from 'educoder';
+import {Table} from "antd";
+import {Link,Switch,Route,Redirect} from 'react-router-dom';
+const echarts = require('echarts');
+
+
+
+function startechart(names, values){
+ var effChart = echarts.init(document.getElementById('shixun_skill_charts'));
+
+ var Color = ['#962e66', '#623363', '#CCCCCC', '#9A9A9A', '#FF8080', '#FF80C2', '#B980FF', '#80B9FF', '#6FE9FF', '#4DE8B4', '#F8EF63', '#FFB967'];
+
+ var option = {
+ backgroundColor: '#fff',
+ grid: {
+ left: '3%',
+ right: '8%',
+ bottom: '15%',
+ containLabel: true
+ },
+
+ tooltip: {
+ show: "true",
+ trigger: 'item',
+ formatter: '{c0}',
+ backgroundColor: 'rgba(0,0,0,0.7)', // 背景
+ padding: [8, 10], //内边距
+ extraCssText: 'box-shadow: 0 0 3px rgba(255, 255, 255, 0.4);', //添加阴影
+ axisPointer: { // 坐标轴指示器,坐标轴触发有效
+ type: 'shadow' // 默认为直线,可选为:'line' | 'shadow'
+ }
+ },
+ xAxis: {
+ type: 'value',
+ axisTick: {
+ show: false
+ },
+ axisLine: {
+ show: true,
+ lineStyle: {
+ color: '#CCCCCC'
+ }
+ },
+ splitLine: {
+ show: false,
+ lineStyle: {
+ color: '#CCCCCC'
+ }
+ },
+ axisLabel: {
+ textStyle: {
+ color: '#656565',
+ fontWeight: 'normal',
+ fontSize: '12'
+ },
+ formatter: '{value}'
+ }
+ },
+ yAxis: {
+ type: 'category',
+ axisLine: {
+ lineStyle: {
+ color: '#cccccc'
+ }
+ },
+ splitLine: {
+ show: false
+ },
+ axisTick: {
+ show: false
+ },
+ splitArea: {
+ show: false
+ },
+ axisLabel: {
+ inside: false,
+ textStyle: {
+ color: '#656565',
+ fontWeight: 'normal',
+ fontSize: '12'
+ }
+ },
+ data: names
+ },
+ series: [{
+ name: '',
+ type: 'bar',
+ itemStyle: {
+ normal: {
+ show: true,
+ color: function(params) {
+ return Color[params.dataIndex]
+ },
+ barBorderRadius: 50,
+ borderWidth: 0,
+ borderColor: '#333'
+ }
+ },
+ barGap: '0%',
+ barCategoryGap: '50%',
+ data: values
+ }
+
+ ]
+ };
+ effChart.setOption(option);
+}
+class Colleagechartzu extends Component {
+
+ constructor(props) {
+ super(props);
+ this.state = {
+ }
+ }
+
+ componentDidMount() {
+ startechart(this.props.data,this.props.datavule)
+ }
+
+
+ componentDidUpdate = (prevProps) => {
+ if (prevProps.data!= this.props.data) {
+ startechart(this.props.data,this.props.datavule)
+ }
+ }
+
+
+ render() {
+ let {data}=this.props;
+
+ return (
+
+
+ )
+ }
+}
+
+export default Colleagechartzu;
diff --git a/public/react/src/college/colleagecss/colleage.css b/public/react/src/college/colleagecss/colleage.css
new file mode 100644
index 000000000..801b86603
--- /dev/null
+++ b/public/react/src/college/colleagecss/colleage.css
@@ -0,0 +1,213 @@
+.yslstatistic-header {
+ width: 100%;
+ height: 240px;
+ background-image: url('/images/educoder/statistics.jpg');
+ background-size: 100% 100%;
+}
+.yslborder{
+ border: 1px solid;
+}
+.yslstatistic-header-title{
+ flex: 1;
+ display: flex;
+ align-items: center;
+ color: #4CACFF;
+ font-size: 32px;
+}
+.yslstatistic-header-content{
+ width: 100%;
+ display: flex;
+ justify-content: space-around;
+}
+.yslstatistic-header-item{
+ margin-bottom: 22px;
+ display: flex;
+ flex-direction: column;
+ align-items: center;
+ color: #fff;
+}
+.yslstatistic-header-item-label{
+ color: #989898;
+}
+
+.yslstatistic-base-item-label{
+ width: 217px;
+ text-align: center;
+ font-size: 16px;
+ height: 48px;
+ line-height: 48px;
+ color: #686868;
+ background: #F5F5F5;
+ border-top: 1px solid #EBEBEB;
+}
+.yslstatistic-base-item-labels{
+ width: 217px;
+ text-align: center;
+ height: 100px;
+ line-height: 100px;
+ background: #ffffff;
+ border-top: 1px solid #EBEBEB;
+ border-bottom: 1px solid #EBEBEB;
+}
+.yslstatistic-base-item-labelsp{
+ color: #000000;
+ font-size: 24px;
+}
+.yslstatistic-base-item-labelsspan{
+ color: #000000;
+ margin-left: 5px;
+ font-size: 16px;
+}
+.jibenshiyong100{
+ width: 100%;
+}
+
+.yslstatistic-header-item-content{
+ font-size: 24px;
+}
+/* 中间居中 */
+.intermediatecenter{
+ display: flex;
+ flex-direction: column;
+ align-items: center;
+ justify-content: center;
+}
+/* 简单居中 */
+.intermediatecenterysls{
+ display: flex;
+ align-items: center;
+}
+.spacearound{
+ display: flex;
+ justify-content: space-around;
+
+}
+.spacebetween{
+ display: flex;
+ justify-content: space-between;
+}
+/* 头顶部居中 */
+.topcenter{
+ display: -webkit-flex;
+ flex-direction: column;
+ align-items: center;
+
+}
+
+
+/* x轴正方向排序 */
+/* 一 二 三 四 五 六 七 八 */
+.sortinxdirection{
+ display: flex;
+ flex-direction:row;
+}
+/* x轴反方向排序 */
+/* 八 七 六 五 四 三 二 一 */
+.xaxisreverseorder{
+ display: flex;
+ flex-direction:row-reverse;
+}
+/* 垂直布局 正方向*/
+/* 一
+ 二
+ 三
+ 四
+ 五
+ 六
+ 七
+ 八 */
+.verticallayout{
+ display: flex;
+ flex-direction:column;
+}
+/* 垂直布局 反方向*/
+.reversedirection{
+ display: flex;
+ flex-direction:column-reverse;
+}
+
+.h4{
+ font-size: 1.5rem;
+ font-weight: 500 !important;
+}
+.ysllinjibenshiyong{
+ font-weight: 500;
+ line-height: 1.2;
+ padding: 2rem 1.25rem;
+ border-bottom: unset;
+ background:#fff;
+}
+.linjibenshiyong{
+ font-weight: 500;
+ line-height: 1.2;
+ padding: 2rem 1.25rem;
+ border-bottom: unset;
+ background:#fff;
+ box-shadow:0px 6px 12px 0px rgba(0,0,0,0.1);
+ border-radius:2px;
+}
+.yslslinjibenshiyong{
+ font-weight: 500;
+ line-height: 1.2;
+ border-bottom: unset;
+ box-shadow:0px 6px 12px 0px rgba(0,0,0,0.1);
+ border-radius:2px;
+}
+.yinyin{
+ background: #fff;
+ box-shadow:0px 6px 12px 0px rgba(0,0,0,0.1);
+ border-radius:2px;
+}
+.edu-back-eeee{
+ background:#EEEEEE !important;
+}
+.mt-4{
+ margin-top: 1.5rem !important;
+}
+
+.statistic-label{
+ padding: 2rem 1.25rem;
+ font-size: 1.5rem;
+ font-weight: 400 !important;
+}
+.mb50{
+ padding-bottom: 50px !important;
+}
+.mt40{
+ margin-top: 40px;
+}
+.mb80{
+ margin-bottom: 80px;
+}
+.task-hide{overflow:hidden; white-space: nowrap; text-overflow:ellipsis;}
+a:hover{
+ color:#0056b3;
+}
+.color-blue{
+ color: #4CACFF;
+}
+
+.color-huang{
+ color:#ffc107 !important
+}
+.maxnamewidth105{
+ max-width: 105px;
+ overflow:hidden;
+ text-overflow:ellipsis;
+ white-space:nowrap;
+ cursor: default;
+}
+.maxnamewidth247{
+ max-width: 247px;
+ overflow:hidden;
+ text-overflow:ellipsis;
+ white-space:nowrap;
+ cursor: default;
+}
+.maxnamewidth340{
+ max-width: 340px;
+ overflow:hidden;
+ text-overflow:ellipsis;
+ white-space:nowrap;
+ cursor: default;
+}
From 893c4840f77c29288819cd6f2e5ed51ec9f8525b Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?=E6=9D=A8=E6=A0=91=E6=98=8E?= <775174143@qq.com>
Date: Thu, 19 Dec 2019 18:55:19 +0800
Subject: [PATCH 3/9] =?UTF-8?q?=E5=AE=9E=E8=AE=AD=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/tpm/TPMBanner.js | 16 ++++++----------
public/react/src/modules/tpm/TPMIndex.js | 8 +-------
2 files changed, 7 insertions(+), 17 deletions(-)
diff --git a/public/react/src/modules/tpm/TPMBanner.js b/public/react/src/modules/tpm/TPMBanner.js
index 141bd87d9..77b82c6c6 100644
--- a/public/react/src/modules/tpm/TPMBanner.js
+++ b/public/react/src/modules/tpm/TPMBanner.js
@@ -58,15 +58,6 @@ class TPMBanner extends Component {
}
}
- // star_info:[0, 0, 0, 0, 0, 0],
- // star_infos:[0, 0, 0, 0, 0, 0],
- // shixunsDetails:{},
- // shixunId: undefined,
- // componentWillReceiveProps(newProps, newContext){
- // this.setState({
- // shixunsDetails: newProps.shixunsDetails
- // });
- // }
IEVersion = () => {
var userAgent = navigator.userAgent; //取得浏览器的userAgent字符串
@@ -141,8 +132,11 @@ class TPMBanner extends Component {
})
}
}
+
}
}
+
+
componentDidMount() {
let thiisie = this.IEVersion();
@@ -155,6 +149,7 @@ class TPMBanner extends Component {
isIE: false
})
}
+
}
/*
@@ -784,7 +779,8 @@ class TPMBanner extends Component {
};
//
// console.log(this.props.shixunsDetails&&this.props.shixunsDetails.is_jupyter)
-
+ console.log(this.props)
+ console.log(this.state)
return (
shixunsDetails === undefined ? "" :
diff --git a/public/react/src/modules/tpm/TPMIndex.js b/public/react/src/modules/tpm/TPMIndex.js
index e032bb91f..c44d8ce51 100644
--- a/public/react/src/modules/tpm/TPMIndex.js
+++ b/public/react/src/modules/tpm/TPMIndex.js
@@ -207,6 +207,7 @@ class TPMIndex extends Component {
propaedeutics:response.data.propaedeutics,
status: response.data.shixun_status,
secret_repository: response.data.secret_repository,
+ public:response.data.public,
is_jupyter:response.data.is_jupyter=== undefined||response.data.is_jupyter===null?false:response.data.is_jupyter,
});
@@ -295,10 +296,6 @@ class TPMIndex extends Component {
// this.getnavdatas()
}
- // componentDidUpdate=()=>{
- // this.getnavdatas()
- // }
-
setLoadingContent = (isLoadingContent) => {
this.setState({ loadingContent: isLoadingContent })
}
@@ -307,9 +304,6 @@ class TPMIndex extends Component {
getnavdatas=()=>{
let selectedKeys;
const {location} = this.props;
-
- console.log(location.pathname)
-
if(location.pathname.indexOf('/challenges')!=-1){
selectedKeys="1"
}else if(location.pathname.indexOf('/propaedeutics')!=-1){
From 8fb90e6e20dca4f7d4176d5202c4f564045c2a6e Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?=E6=9D=A8=E6=A0=91=E6=98=8E?= <775174143@qq.com>
Date: Thu, 19 Dec 2019 18:56:56 +0800
Subject: [PATCH 4/9] =?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/App.js | 6 +-----
1 file changed, 1 insertion(+), 5 deletions(-)
diff --git a/public/react/src/App.js b/public/react/src/App.js
index 07c68e5e0..07fd13e49 100644
--- a/public/react/src/App.js
+++ b/public/react/src/App.js
@@ -71,11 +71,7 @@ const Otherlogin=Loadable({
loader: () => import('./modules/login/Otherlogin'),
loading: Loading,
})
-// 学院统计
-const College = Loadable({
- loader: () => import('./college/College'),
- loading: Loading
-})
+
const Otherloginstart=Loadable({
loader: () => import('./modules/login/Otherloginstart'),
From ae415cf38249725235db370da0eb3d593ad1d7ce Mon Sep 17 00:00:00 2001
From: daiao <358551898@qq.com>
Date: Thu, 19 Dec 2019 19:29:54 +0800
Subject: [PATCH 5/9] 1
---
app/controllers/hacks_controller.rb | 1 +
1 file changed, 1 insertion(+)
diff --git a/app/controllers/hacks_controller.rb b/app/controllers/hacks_controller.rb
index cab952a04..dbddd9105 100644
--- a/app/controllers/hacks_controller.rb
+++ b/app/controllers/hacks_controller.rb
@@ -12,6 +12,7 @@ class HacksController < ApplicationController
user_hack = @hack.hack_user_lastest_codes.mine(current_user.id)
identifier =
if user_hack.present?
+ logger.info("#####user_hack_id:#{user_hack.id}")
user_hack.identifier
else
user_identifier = generate_identifier HackUserLastestCode, 12
From 992045a5cffc9571f7d311d2b86cd56cd2ef607c Mon Sep 17 00:00:00 2001
From: daiao <358551898@qq.com>
Date: Thu, 19 Dec 2019 19:34:54 +0800
Subject: [PATCH 6/9] 1
---
app/models/hack_user_lastest_code.rb | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/app/models/hack_user_lastest_code.rb b/app/models/hack_user_lastest_code.rb
index b4a707603..830f16dde 100644
--- a/app/models/hack_user_lastest_code.rb
+++ b/app/models/hack_user_lastest_code.rb
@@ -8,7 +8,7 @@ class HackUserLastestCode < ApplicationRecord
belongs_to :user
has_many :hack_user_codes, dependent: :destroy
has_one :hack_user_debug
- scope :mine, ->(author_id){ find_by(user_id: author_id) }
+ scope :mine, ->(author_id){ where(user_id: author_id).first }
scope :mine_hack, ->(author_id){ where(user_id: author_id) }
scope :passed, -> {where(status: 1)}
From 0074b6d183e5b3a293f341b9ad73196bf79e947e Mon Sep 17 00:00:00 2001
From: daiao <358551898@qq.com>
Date: Thu, 19 Dec 2019 19:36:18 +0800
Subject: [PATCH 7/9] 1
---
app/controllers/hacks_controller.rb | 1 +
1 file changed, 1 insertion(+)
diff --git a/app/controllers/hacks_controller.rb b/app/controllers/hacks_controller.rb
index dbddd9105..a2ca85f34 100644
--- a/app/controllers/hacks_controller.rb
+++ b/app/controllers/hacks_controller.rb
@@ -10,6 +10,7 @@ class HacksController < ApplicationController
# 未发布的编程题,只能作者、或管理员访问
start_hack_auth
user_hack = @hack.hack_user_lastest_codes.mine(current_user.id)
+ logger.info("#user_hack: #{user_hack}")
identifier =
if user_hack.present?
logger.info("#####user_hack_id:#{user_hack.id}")
From a0deef9d09a42d4388a0ba8340e43b5bf2156603 Mon Sep 17 00:00:00 2001
From: daiao <358551898@qq.com>
Date: Thu, 19 Dec 2019 19:38:05 +0800
Subject: [PATCH 8/9] 1
---
app/controllers/hacks_controller.rb | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/app/controllers/hacks_controller.rb b/app/controllers/hacks_controller.rb
index a2ca85f34..b7f6a30a2 100644
--- a/app/controllers/hacks_controller.rb
+++ b/app/controllers/hacks_controller.rb
@@ -9,7 +9,7 @@ class HacksController < ApplicationController
def start
# 未发布的编程题,只能作者、或管理员访问
start_hack_auth
- user_hack = @hack.hack_user_lastest_codes.mine(current_user.id)
+ user_hack = @hack.hack_user_lastest_codes.where(user_id: current_user.id).first
logger.info("#user_hack: #{user_hack}")
identifier =
if user_hack.present?
From b7db555654fa0f7122c23e950c4396ca0e90cac8 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?=E6=9D=A8=E6=A0=91=E6=98=8E?= <775174143@qq.com>
Date: Thu, 19 Dec 2019 20:08:59 +0800
Subject: [PATCH 9/9] =?UTF-8?q?=E8=B0=83=E6=95=B4?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
---
.../tpm/shixunchild/Challenges/Challenges.js | 23 +++++++++--
.../Challenges/Challengesjupyter.js | 39 ++++++++++++++-----
.../Collaborators/Collaborators.js | 2 +-
3 files changed, 50 insertions(+), 14 deletions(-)
diff --git a/public/react/src/modules/tpm/shixunchild/Challenges/Challenges.js b/public/react/src/modules/tpm/shixunchild/Challenges/Challenges.js
index e7b7ef261..0480c208a 100644
--- a/public/react/src/modules/tpm/shixunchild/Challenges/Challenges.js
+++ b/public/react/src/modules/tpm/shixunchild/Challenges/Challenges.js
@@ -53,6 +53,13 @@ class Challenges extends Component {
ChallengesDataList: response.data,
sumidtype: false,
});
+
+ if(response.data.description=== ""||response.data.description===null||response.data.description===undefined){
+ this.setState({
+ isopentitletype:"Less",
+ })
+ }
+
}
}
}).catch((error) => {
@@ -72,7 +79,7 @@ class Challenges extends Component {
let box=document.getElementById("shixunchallengesid");
if(box){
boxoffsetHeigh=box.offsetHeight
- if(boxoffsetHeigh<260){
+ if(boxoffsetHeigh<300){
this.setState({
isopentitletype:"Less",
boxoffsetHeigh:boxoffsetHeigh
@@ -338,6 +345,7 @@ class Challenges extends Component {
}
let id = this.props.match.params.shixunId;
const antIcon = ;
+
return (
{AccountProfiletype===true?
-
+ {ChallengesDataList === undefined || ChallengesDataList&&ChallengesDataList.description=== ""||ChallengesDataList&&ChallengesDataList.description===null||ChallengesDataList&&ChallengesDataList.description===undefined?
+
+ {this.props.identity < 5?
:
}
+
暂时还没有相关数据哦!
+
+ :
{ChallengesDataList === undefined ? "" :ChallengesDataList&&ChallengesDataList.description===null?"":
}
-
+ }
diff --git a/public/react/src/modules/tpm/shixunchild/Challenges/Challengesjupyter.js b/public/react/src/modules/tpm/shixunchild/Challenges/Challengesjupyter.js
index fcdbed408..c8cbc2fbc 100644
--- a/public/react/src/modules/tpm/shixunchild/Challenges/Challengesjupyter.js
+++ b/public/react/src/modules/tpm/shixunchild/Challenges/Challengesjupyter.js
@@ -1,6 +1,6 @@
import React, { Component } from 'react';
import { Link } from "react-router-dom";
-import { markdownToHTML, configShareForCustom} from 'educoder'
+import { markdownToHTML, configShareForCustom,getImageUrl} from 'educoder'
import { Divider, Tooltip } from 'antd';
import LoadingSpin from '../../../../common/LoadingSpin';
import 'antd/lib/pagination/style/index.css';
@@ -23,7 +23,8 @@ class Challengesjupyter extends Component {
booljupyterurls:false,
loading:false,
boxoffsetHeigh:0,
- opentitletype:true
+ opentitletype:true,
+ isopentitletype:"Less",
}
}
@@ -41,6 +42,11 @@ class Challengesjupyter extends Component {
ChallengesDataList: response.data,
sumidtype: false,
});
+ if(response.data.description=== ""||response.data.description===null||response.data.description===undefined){
+ this.setState({
+ isopentitletype:"Less",
+ })
+ }
}
}
}).catch((error) => {
@@ -55,13 +61,15 @@ class Challengesjupyter extends Component {
let box=document.getElementById("shixunchallengesid");
if(box){
boxoffsetHeigh=box.offsetHeight
- if(boxoffsetHeigh<260){
+ if(boxoffsetHeigh<300){
this.setState({
- opentitletype:false,
+ isopentitletype:"Less",
boxoffsetHeigh:boxoffsetHeigh
})
}else{
this.setState({
+ isopentitletype:"greater",
+ opentitletype:true,
boxoffsetHeigh:boxoffsetHeigh
})
}
@@ -229,7 +237,7 @@ class Challengesjupyter extends Component {
{
`
#shixunchallengesid{
- max-height: 260px;
+ max-height: 300px;
overflow: hidden;
}
`
@@ -239,9 +247,22 @@ class Challengesjupyter extends Component {
- {ChallengesDataList === undefined ? "" :ChallengesDataList&&ChallengesDataList.description===null?"":
-
- }
+ {/*{ChallengesDataList === undefined ? "" :ChallengesDataList&&ChallengesDataList.description===null?"":*/}
+ {/*
*/}
+ {/*}*/}
+
+ {ChallengesDataList === undefined || ChallengesDataList&&ChallengesDataList.description=== ""||ChallengesDataList&&ChallengesDataList.description===null||ChallengesDataList&&ChallengesDataList.description===undefined?
+
+ {this.props.identity < 5?
:
}
+
暂时还没有相关数据哦!
+
+ :
+ {ChallengesDataList === undefined ? "" :ChallengesDataList&&ChallengesDataList.description===null?"":
+
+ }
+ }
{
booljupyterurls===true?
@@ -259,7 +280,7 @@ class Challengesjupyter extends Component {
}
- {this.state.opentitletype===true?this.opentitle()} className={"pointer Breadcrumbfont color-grey-9 "}>
+ {this.state.isopentitletype==="Less"?"":this.state.opentitletype===true?this.opentitle()} className={"pointer Breadcrumbfont color-grey-9 "}>
阅读全文
:this.opentitle()} className={"pointer Breadcrumbfont color-grey-9 "}>
收起全文
diff --git a/public/react/src/modules/tpm/shixunchild/Collaborators/Collaborators.js b/public/react/src/modules/tpm/shixunchild/Collaborators/Collaborators.js
index 17b083cf7..9799d060c 100644
--- a/public/react/src/modules/tpm/shixunchild/Collaborators/Collaborators.js
+++ b/public/react/src/modules/tpm/shixunchild/Collaborators/Collaborators.js
@@ -656,7 +656,7 @@ class Collaborators extends Component {
-
{item.user.shixun_manager === true ? "创建者" : ""}