commit
cab3a68719
@ -1,4 +0,0 @@
|
|||||||
class Curriculum < ApplicationRecord
|
|
||||||
belongs_to :curriculum_direction
|
|
||||||
has_many :knowledge_points, dependent: :destroy
|
|
||||||
end
|
|
@ -1,4 +0,0 @@
|
|||||||
class CurriculumDirection < ApplicationRecord
|
|
||||||
has_many :curriculums
|
|
||||||
has_many :knowledge_points
|
|
||||||
end
|
|
@ -1,5 +0,0 @@
|
|||||||
class KnowledgePoint < ApplicationRecord
|
|
||||||
belongs_to :curriculum_direction
|
|
||||||
belongs_to :curriculum
|
|
||||||
has_many :knowledge_point_containers, dependent: :destroy
|
|
||||||
end
|
|
@ -1,3 +0,0 @@
|
|||||||
class KnowledgePointContainer < ApplicationRecord
|
|
||||||
belongs_to :knowledge_point
|
|
||||||
end
|
|
@ -1,9 +0,0 @@
|
|||||||
class CreateCurriculumDirections < ActiveRecord::Migration[5.2]
|
|
||||||
def change
|
|
||||||
create_table :curriculum_directions do |t|
|
|
||||||
t.string :name
|
|
||||||
|
|
||||||
t.timestamps
|
|
||||||
end
|
|
||||||
end
|
|
||||||
end
|
|
@ -1,10 +0,0 @@
|
|||||||
class CreateCurriculums < ActiveRecord::Migration[5.2]
|
|
||||||
def change
|
|
||||||
create_table :curriculums do |t|
|
|
||||||
t.string :name
|
|
||||||
t.references :curriculum_direction, index: true
|
|
||||||
|
|
||||||
t.timestamps
|
|
||||||
end
|
|
||||||
end
|
|
||||||
end
|
|
@ -1,11 +0,0 @@
|
|||||||
class CreateKnowledgePoints < ActiveRecord::Migration[5.2]
|
|
||||||
def change
|
|
||||||
create_table :knowledge_points do |t|
|
|
||||||
t.string :name
|
|
||||||
t.references :curriculum_direction, index: true
|
|
||||||
t.references :curriculum, index: true
|
|
||||||
|
|
||||||
t.timestamps
|
|
||||||
end
|
|
||||||
end
|
|
||||||
end
|
|
@ -1,12 +0,0 @@
|
|||||||
class CreateKnowledgePointContainers < ActiveRecord::Migration[5.2]
|
|
||||||
def change
|
|
||||||
create_table :knowledge_point_containers do |t|
|
|
||||||
t.references :knowledge_point
|
|
||||||
t.integer :container_id
|
|
||||||
t.string :container_type
|
|
||||||
|
|
||||||
t.timestamps
|
|
||||||
end
|
|
||||||
add_index :knowledge_point_containers, [:knowledge_point_id, :container_id, :container_type], name: "container_index", unique: true
|
|
||||||
end
|
|
||||||
end
|
|
File diff suppressed because it is too large
Load Diff
@ -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: "{a} <br/>{b} : {c} ({d}%)"
|
||||||
|
},
|
||||||
|
legend: {
|
||||||
|
// orient: 'vertical',
|
||||||
|
// top: 'middle',
|
||||||
|
bottom: 40,
|
||||||
|
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 (
|
||||||
|
<div>
|
||||||
|
|
||||||
|
<div
|
||||||
|
style={{ width:'410px',height:'600px'}}
|
||||||
|
id="shixun_skill_chart">
|
||||||
|
</div>
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
</div>
|
||||||
|
|
||||||
|
)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
export default Colleagechart;
|
@ -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: '4%',
|
||||||
|
bottom: '10%',
|
||||||
|
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 (
|
||||||
|
<div>
|
||||||
|
|
||||||
|
<div
|
||||||
|
style={{ width:'410px',height:'600px'}}
|
||||||
|
id="shixun_skill_charts">
|
||||||
|
</div>
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
</div>
|
||||||
|
|
||||||
|
)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
export default Colleagechartzu;
|
@ -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: 200px;
|
||||||
|
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: 200px;
|
||||||
|
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;
|
||||||
|
}
|
@ -1,5 +0,0 @@
|
|||||||
require 'rails_helper'
|
|
||||||
|
|
||||||
RSpec.describe CurriculumDirection, type: :model do
|
|
||||||
pending "add some examples to (or delete) #{__FILE__}"
|
|
||||||
end
|
|
@ -1,5 +0,0 @@
|
|||||||
require 'rails_helper'
|
|
||||||
|
|
||||||
RSpec.describe Curriculum, type: :model do
|
|
||||||
pending "add some examples to (or delete) #{__FILE__}"
|
|
||||||
end
|
|
@ -1,5 +0,0 @@
|
|||||||
require 'rails_helper'
|
|
||||||
|
|
||||||
RSpec.describe KnowledgePointContainer, type: :model do
|
|
||||||
pending "add some examples to (or delete) #{__FILE__}"
|
|
||||||
end
|
|
@ -1,5 +0,0 @@
|
|||||||
require 'rails_helper'
|
|
||||||
|
|
||||||
RSpec.describe KnowledgePoint, type: :model do
|
|
||||||
pending "add some examples to (or delete) #{__FILE__}"
|
|
||||||
end
|
|
Loading…
Reference in new issue