Skip to content
项目
群组
代码片段
帮助
当前项目
正在载入...
登录 / 注册
切换导航面板
Q
qualityTesting_adminHome
项目
项目
详情
活动
周期分析
仓库
仓库
文件
提交
分支
标签
贡献者
图表
比较
统计图
议题
0
议题
0
列表
看板
标记
里程碑
合并请求
0
合并请求
0
CI / CD
CI / CD
流水线
作业
日程
统计图
Wiki
Wiki
代码片段
代码片段
成员
成员
折叠边栏
关闭边栏
活动
图像
聊天
创建新问题
作业
提交
问题看板
Open sidebar
tobacco
qualityTesting_adminHome
Commits
1b2e5eb5
提交
1b2e5eb5
authored
3月 23, 2023
作者:
wangjialong209
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
统计数据
上级
a8e19621
隐藏空白字符变更
内嵌
并排
正在显示
20 个修改的文件
包含
2257 行增加
和
39 行删除
+2257
-39
student.js
src/api/student.js
+57
-0
BarChart.vue
src/components/AnalyseModule/components/BarChart.vue
+152
-0
LineChart.vue
src/components/AnalyseModule/components/LineChart.vue
+71
-0
SimpleTable.vue
src/components/AnalyseModule/components/SimpleTable.vue
+74
-0
table.vue
src/components/AnalyseModule/components/table.vue
+91
-0
index.vue
src/components/AnalyseModule/index.vue
+106
-0
succinct.vue
src/components/ExaminationHeader/succinct.vue
+121
-0
Logo.vue
src/layout/components/Headerbar/Logo.vue
+7
-2
main.js
src/main.js
+5
-0
index.css
src/styles/index.css
+4
-1
index.min.css
src/styles/index.min.css
+1
-1
index.scss
src/styles/index.scss
+5
-3
tool.js
src/utils/tool.js
+5
-0
index.vue
src/views/login/index.vue
+7
-6
index.vue
src/views/student/area_breed/index.vue
+5
-4
detail.vue
src/views/student/display_board/detail.vue
+556
-0
index.vue
src/views/student/display_board/index.vue
+234
-0
index.vue
src/views/student/examination_questions/comment/index.vue
+707
-0
index.vue
src/views/student/examination_questions/list/index.vue
+38
-18
index.vue
src/views/student/personnel/index.vue
+11
-4
没有找到文件。
src/api/student.js
浏览文件 @
1b2e5eb5
...
@@ -243,6 +243,8 @@ export function get_image_path(id) {
...
@@ -243,6 +243,8 @@ export function get_image_path(id) {
/**
/**
* 烟草等级
* 烟草等级
* */
* */
...
@@ -409,3 +411,58 @@ export function get_test_results_detail(id) {
...
@@ -409,3 +411,58 @@ export function get_test_results_detail(id) {
method
:
'get'
,
method
:
'get'
,
})
})
}
}
/**
* 统计板块
*
* */
//获取试题统计结果
export
function
get_test_results_count
(
data
)
{
return
request
({
url
:
`/api/test_results_count`
,
method
:
'post'
,
data
})
}
//批阅试题列表-分页
export
function
get_read_over_list
(
params
)
{
return
request
({
url
:
`/api/read_over`
,
method
:
'get'
,
params
})
}
//批阅试题列表-保存(和统计参数一致)
export
function
save_read_over_data
(
data
)
{
return
request
({
url
:
`/api/read_over`
,
method
:
'post'
,
data
})
}
//批阅试题列表-详情
export
function
get_read_over_detail
(
id
)
{
return
request
({
url
:
`/api/read_over/
${
id
}
`
,
method
:
'get'
,
})
}
//批阅试题列表-修改(状态设置)
export
function
updata_read_over
(
id
,
data
)
{
return
request
({
url
:
`/api/read_over/
${
id
}
`
,
method
:
'put'
,
data
})
}
//批阅试题列表-删除
export
function
delete_read_over
(
id
)
{
return
request
({
url
:
`/api/read_over/
${
id
}
`
,
method
:
'delete'
,
})
}
src/components/AnalyseModule/components/BarChart.vue
0 → 100644
浏览文件 @
1b2e5eb5
<!-- -->
<
template
>
<div
class=
"chart_container"
:id=
"chart_id"
></div>
</
template
>
<
script
>
export
default
{
props
:
[
'chart_data'
,
'chart_id'
],
data
()
{
return
{
};
},
components
:
{},
computed
:
{},
created
()
{
},
mounted
()
{
this
.
initChart
();
},
methods
:
{
initChart
()
{
let
series
=
this
.
changData
(
this
.
chart_data
);
let
legend_data
=
this
.
chart_data
.
labers
.
map
(
item
=>
{
return
item
.
key
})
let
dom
=
document
.
getElementById
(
`
${
this
.
chart_id
}
`
);
let
myChart
=
this
.
$echarts
.
init
(
dom
,
null
,
{
renderer
:
'canvas'
,
useDirtyRect
:
false
});
let
option
;
option
=
{
tooltip
:
{
trigger
:
'axis'
,
axisPointer
:
{
type
:
'shadow'
}
},
legend
:
{
// data: ['Forest', 'Steppe', 'Desert', 'Wetland']
data
:
legend_data
},
toolbox
:
{
show
:
false
,
orient
:
'vertical'
,
left
:
'right'
,
top
:
'center'
,
feature
:
{
mark
:
{
show
:
true
},
dataView
:
{
show
:
true
,
readOnly
:
false
},
magicType
:
{
show
:
true
,
type
:
[
'line'
,
'bar'
,
'stack'
]
},
restore
:
{
show
:
true
},
saveAsImage
:
{
show
:
true
}
}
},
xAxis
:
[
{
type
:
'category'
,
axisTick
:
{
show
:
false
},
// data: ['2012', '2013', '2014', '2015', '2016']
data
:
this
.
chart_data
.
keys
}
],
yAxis
:
[
{
type
:
'value'
}
],
// series: [
// {
// name: 'Forest',
// type: 'bar',
// barGap: 0,
// // label: labelOption,
// emphasis: {
// focus: 'series'
// },
// data: [320, 332, 301, 334, 390]
// },
// {
// name: 'Steppe',
// type: 'bar',
// // label: labelOption,
// emphasis: {
// focus: 'series'
// },
// data: [220, 182, 191, 234, 290]
// },
// {
// name: 'Desert',
// type: 'bar',
// // label: labelOption,
// emphasis: {
// focus: 'series'
// },
// data: [150, 232, 201, 154, 190]
// },
// {
// name: 'Wetland',
// type: 'bar',
// // label: labelOption,
// emphasis: {
// focus: 'series'
// },
// data: [98, 77, 101, 99, 40]
// }
// ]
series
:
series
};
if
(
option
&&
typeof
option
===
'object'
)
{
myChart
.
setOption
(
option
);
}
window
.
addEventListener
(
'resize'
,
myChart
.
resize
);
},
//处理数据
changData
(
data
)
{
let
list
=
[];
data
.
labers
.
forEach
((
item
,
index
)
=>
{
let
obj
=
{
name
:
item
.
key
,
type
:
'bar'
,
barGap
:
0
,
emphasis
:
{
focus
:
'series'
},
data
:
[]
}
data
.
keys
.
forEach
(
element
=>
{
obj
.
data
.
push
(
data
.
raw_data
[
element
][
item
.
key
]);
});
list
.
push
(
obj
)
});
return
list
},
}
}
</
script
>
<
style
scoped
>
.chart_container
{
width
:
100%
;
height
:
100%
;
}
</
style
>
src/components/AnalyseModule/components/LineChart.vue
0 → 100644
浏览文件 @
1b2e5eb5
<!-- -->
<
template
>
<div
class=
"chart_container"
:id=
"chart_id"
></div>
</
template
>
<
script
>
export
default
{
props
:
[
'chart_data'
,
'chart_id'
],
data
()
{
return
{
};
},
components
:
{},
computed
:
{},
mounted
()
{
this
.
initChart
();
},
methods
:
{
initChart
()
{
let
dom
=
document
.
getElementById
(
`
${
this
.
chart_id
}
`
);
let
myChart
=
this
.
$echarts
.
init
(
dom
,
null
,
{
renderer
:
'canvas'
,
useDirtyRect
:
false
});
let
app
=
{};
let
option
;
option
=
{
xAxis
:
{
type
:
'category'
,
data
:
[
'Mon'
,
'Tue'
,
'Wed'
,
'Thu'
,
'Fri'
,
'Sat'
,
'Sun'
]
},
yAxis
:
{
type
:
'value'
},
series
:
[
{
data
:
[
820
,
932
,
901
,
934
,
1290
,
1330
,
1320
],
type
:
'line'
,
smooth
:
true
,
areaStyle
:
{}
},
{
data
:
[
1290
,
1330
,
1320
,
820
,
932
,
901
,
934
,],
type
:
'line'
,
smooth
:
true
,
areaStyle
:
{}
},
]
};
if
(
option
&&
typeof
option
===
'object'
)
{
myChart
.
setOption
(
option
);
}
window
.
addEventListener
(
'resize'
,
myChart
.
resize
);
},
}
}
</
script
>
<
style
scoped
>
.chart_container
{
width
:
100%
;
height
:
100%
;
}
</
style
>
src/components/AnalyseModule/components/SimpleTable.vue
0 → 100644
浏览文件 @
1b2e5eb5
<!--
* @Author: czj
* @Date: 2023-03-21 10:14:46
* @Description:
* @FilePath: \AdministrationHome\src\components\AnalyseModule\components\SimpleTable.vue
-->
<!-- -->
<
template
>
<div
class=
"container_box"
>
<table
class=
"table_box"
>
<!--
<tr>
<th
v-for=
"(e, i) in labers"
:key=
"i"
>
{{
e
.
label
}}
</th>
</tr>
-->
<tr
v-for=
"(item, index) in table_data.labers"
:key=
"index"
>
<th>
{{
item
.
label
}}
</th>
<th>
{{
table_data
.
data
[
item
.
key
]
}}
</th>
<th></th>
</tr>
</table>
</div>
</
template
>
<
script
>
export
default
{
props
:
[
'table_data'
,],
data
()
{
return
{
};
},
components
:
{},
computed
:
{},
created
()
{
},
mounted
()
{
},
methods
:
{}
}
</
script
>
<
style
lang=
"scss"
scoped
>
.container_box
{
width
:
100%
;
height
:
100%
;
}
.table_box
{
width
:
100%
;
min-height
:
100%
;
text-align
:
center
;
font-size
:
14px
;
border-top
:
1px
solid
#E4E7ED
;
border-left
:
1px
solid
#E4E7ED
;
border-collapse
:
collapse
;
th
,
td
{
margin
:
0
;
padding
:
0
;
font-size
:
14px
;
border-bottom
:
1px
solid
#E4E7ED
;
border-right
:
1px
solid
#E4E7ED
;
}
th
{
color
:
#909399
;
}
td
{
color
:
#303133
;
}
}
</
style
>
src/components/AnalyseModule/components/table.vue
0 → 100644
浏览文件 @
1b2e5eb5
<!--
* @Author: czj
* @Date: 2023-03-21 10:14:46
* @Description:
* @FilePath: \AdministrationHome\src\components\AnalyseModule\components\table.vue
-->
<!-- -->
<
template
>
<div
class=
"container_box"
>
<table
class=
"table_box"
>
<tr>
<th
v-for=
"(e, i) in labers"
:key=
"i"
>
{{
e
.
label
}}
</th>
</tr>
<tr
v-for=
"(item, index) in table_data"
:key=
"index"
>
<td
v-for=
"(e, i) in labers"
:key=
"i"
>
<div
v-if=
"e.key == 'distribute'"
>
<div
v-if=
"item['distribute'].length > 3"
>
<el-popover
placement=
"right"
title=
"标题"
width=
"200"
trigger=
"click"
>
<div
v-for=
"(h, key, j) in item['distribute']"
:key=
"j"
>
{{
key
}}
(
{{
item
[
'distribute'
][
key
]
}}
人)
</div>
<el-button
slot=
"reference"
type=
"text"
size=
"mini"
>
...
</el-button>
</el-popover>
</div>
<div
v-else
>
<div
v-for=
"(h, key, j) in item['distribute']"
:key=
"j"
>
{{
key
}}
(
{{
item
[
'distribute'
][
key
]
}}
人)
</div>
</div>
</div>
<div
v-else
>
{{
item
[
e
.
key
]
}}
</div>
</td>
</tr>
</table>
</div>
</
template
>
<
script
>
export
default
{
props
:
[
'table_data'
,
'labers'
],
data
()
{
return
{
};
},
components
:
{},
computed
:
{},
mounted
()
{
},
methods
:
{}
}
</
script
>
<
style
lang=
"scss"
scoped
>
.container_box
{
width
:
100%
;
height
:
100%
;
}
.table_box
{
width
:
100%
;
// min-height: 100%;
text-align
:
center
;
font-size
:
14px
;
border-top
:
1px
solid
#E4E7ED
;
border-left
:
1px
solid
#E4E7ED
;
border-collapse
:
collapse
;
th
,
td
{
margin
:
0
;
padding
:
0
;
font-size
:
14px
;
border-bottom
:
1px
solid
#E4E7ED
;
border-right
:
1px
solid
#E4E7ED
;
}
th
{
padding
:
15px
0
;
color
:
#909399
;
}
td
{
padding
:
5px
0
;
color
:
#303133
;
}
}
</
style
>
src/components/AnalyseModule/index.vue
0 → 100644
浏览文件 @
1b2e5eb5
<!--
* @Author: czj
* @Date: 2023-03-20 16:02:07
* @Description:
* @FilePath: \AdministrationHome\src\components\AnalyseModule\index.vue
-->
<!--
* @Author: czj
* @Date: 2023-03-20 16:02:07
* @Description:
* @FilePath: \AdministrationHome\src\components\AnalyseModule\index.vue
-->
<!-- -->
<
template
>
<div
class=
"analyse_container"
:style=
"
{ '--color': original_data.color }">
<div
class=
"header_box"
>
<el-row>
<el-col
:span=
"12"
>
<div
class=
"title_box"
:title=
"original_data.title"
>
{{
original_data
.
title
}}
</div>
</el-col>
<el-col
:span=
"12"
style=
"text-align: right;"
>
<el-checkbox
v-if=
"original_data.is_show"
v-model=
"original_data.is_show.value"
@
change=
"changeSelect"
>
{{
original_data
.
is_show
.
value
?
'显示'
:
'隐藏'
}}
</el-checkbox>
</el-col>
</el-row>
</div>
<div
class=
"content_container"
v-if=
"original_data.type == 'table'"
>
<Table
:table_data=
"original_data.list"
:labers=
"original_data.labers"
></Table>
</div>
<div
class=
"content_container"
v-if=
"false"
>
<line-chart
:chart_data=
"original_data.data"
:chart_id=
"original_data.chart_id"
></line-chart>
</div>
<div
class=
"content_container"
v-if=
"original_data.type == 'bar'"
>
<bar-chart
:chart_data=
"
{ raw_data: original_data.raw_data, keys: original_data.keys, labers: original_data.labers }"
:chart_id="original_data.chart_id">
</bar-chart>
</div>
<div
class=
"content_container"
v-if=
"original_data.type == 'simple_table'"
>
<simple-table
:table_data=
"original_data"
></simple-table>
</div>
</div>
</
template
>
<
script
>
import
Table
from
'./components/table'
;
import
LineChart
from
'./components/LineChart.vue'
;
import
BarChart
from
'./components/BarChart.vue'
;
import
SimpleTable
from
'./components/SimpleTable.vue'
;
export
default
{
props
:
[
'module_data'
],
data
()
{
return
{
original_data
:
{},
};
},
components
:
{
Table
,
LineChart
,
BarChart
,
SimpleTable
},
computed
:
{},
created
()
{
this
.
original_data
=
{
...
this
.
module_data
};
},
mounted
()
{
},
methods
:
{
//选择框监听
changeSelect
()
{
this
.
$emit
(
'changeSelect'
,
this
.
original_data
.
is_show
);
},
}
}
</
script
>
<
style
lang=
"scss"
scoped
>
.analyse_container
{
border-radius
:
6px
;
border
:
1px
solid
var
(
--
color
);
overflow
:
hidden
;
.header_box
{
height
:
40px
;
line-height
:
40px
;
background-color
:
var
(
--
color
);
padding
:
0
10px
;
color
:
#fff
;
font-size
:
14px
;
}
.content_container
{
width
:
100%
;
height
:
285px
;
margin
:
0
;
padding
:
0
;
overflow-y
:
auto
;
}
}
.title_box
{
overflow
:
hidden
;
//超出的文本隐藏
text-overflow
:
ellipsis
;
//溢出用省略号显示
white-space
:
nowrap
;
// 默认不换行;
}
</
style
>
src/components/ExaminationHeader/succinct.vue
0 → 100644
浏览文件 @
1b2e5eb5
<!--
* @Author: czj
* @Date: 2023-03-08 15:31:58
* @Description:
* @FilePath: \AdministrationHome\src\components\ExaminationHeader\succinct.vue
-->
<!-- -->
<
template
>
<div>
<el-row>
<el-col
:span=
"12"
>
<div>
<el-button
type=
"text"
icon=
"el-icon-arrow-left"
size=
"mini"
class=
"back_btn"
@
click=
"back"
>
返回
</el-button>
<h2
class=
"title_box"
>
<div
v-if=
"Array.isArray(info_data.title)"
>
<span>
{{
info_data
.
title
[
0
]
}}
</span>
<el-popover
placement=
"bottom"
title=
"多个标题"
width=
"200"
trigger=
"hover"
>
<div>
<el-tag
type=
"info"
v-for=
"(item, index) in info_data.title"
:key=
"index"
style=
"margin-bottom: 10px;"
>
{{
item
}}
</el-tag>
</div>
<el-button
slot=
"reference"
type=
"text"
>
...
</el-button>
</el-popover>
</div>
<div
v-else
>
{{
info_data
.
title
}}
</div>
</h2>
</div>
</el-col>
<el-col
:span=
"12"
style=
"text-align: right;"
>
<el-button
type=
"primary"
v-for=
"(item, index) in info_data.right_buttons"
:key=
"index"
:icon=
"item.icon"
@
click=
"btnClick(item.event)"
>
{{
item
.
text
}}
</el-button>
</el-col>
</el-row>
</div>
</
template
>
<
script
>
import
{
secondsToMinutes
}
from
'@/utils/tool'
;
export
default
{
props
:
[
'examination_questions'
],
data
()
{
return
{
info_data
:
{},
strong_keys
:
[
'user_name'
,
'score'
],
};
},
components
:
{},
computed
:
{},
created
()
{
this
.
info_data
=
{
...
this
.
examination_questions
};
console
.
log
(
'头部接受到的数据'
);
console
.
log
(
this
.
examination_questions
);
},
mounted
()
{
},
methods
:
{
back
()
{
this
.
$router
.
go
(
-
1
);
},
seconds_to_minutes
(
str
)
{
if
(
str
)
{
return
secondsToMinutes
(
str
)
}
else
{
return
'暂无'
}
},
btnClick
(
val
)
{
this
.
$emit
(
'btnClick'
,
val
);
},
}
}
</
script
>
<
style
lang=
"scss"
scoped
>
.back_btn
{
/* font-size: 16px; */
color
:
#303133
;
border-right
:
1px
solid
#DCDFE6
;
padding
:
3px
10px
3px
0
;
border-radius
:
none
;
}
.title_box
{
display
:
inline-block
;
vertical-align
:
middle
;
margin
:
0
20px
;
}
.person_attribute_box
{
display
:
inline-block
;
vertical-align
:
middle
;
margin-right
:
50px
;
font-size
:
14px
;
.label
{
color
:
#303133
;
vertical-align
:
middle
;
margin-right
:
12px
;
}
.value
{
color
:
#606266
;
vertical-align
:
middle
;
}
.strong
{
color
:
#000
;
font-size
:
20px
;
font-weight
:
800
;
}
}
</
style
>
src/layout/components/Headerbar/Logo.vue
浏览文件 @
1b2e5eb5
...
@@ -7,7 +7,7 @@
...
@@ -7,7 +7,7 @@
<!-- -->
<!-- -->
<
template
>
<
template
>
<div>
<div>
<img
src=
"/image/log.svg"
alt=
""
class=
"object_logo"
>
<img
src=
"/image/log.svg"
alt=
""
class=
"object_logo"
@
click=
"toHomePage"
>
</div>
</div>
</
template
>
</
template
>
...
@@ -24,7 +24,11 @@ export default {
...
@@ -24,7 +24,11 @@ export default {
mounted
()
{
},
mounted
()
{
},
methods
:
{}
methods
:
{
toHomePage
()
{
this
.
$router
.
push
(
'/dashboard'
);
},
}
}
}
</
script
>
</
script
>
...
@@ -32,5 +36,6 @@ export default {
...
@@ -32,5 +36,6 @@ export default {
.object_logo
{
.object_logo
{
width
:
95px
;
width
:
95px
;
height
:
30px
;
height
:
30px
;
cursor
:
pointer
;
}
}
</
style
>
</
style
>
src/main.js
浏览文件 @
1b2e5eb5
...
@@ -27,10 +27,15 @@ import './utils/error-log' // error log
...
@@ -27,10 +27,15 @@ import './utils/error-log' // error log
import
*
as
filters
from
'./filters'
// global filters
import
*
as
filters
from
'./filters'
// global filters
import
{
Aesencrypt
,
Aesdecrypt
,
removeProperty
,
handleParams
}
from
'@/utils/cryptoJS'
;
import
{
Aesencrypt
,
Aesdecrypt
,
removeProperty
,
handleParams
}
from
'@/utils/cryptoJS'
;
import
echarts
from
'echarts'
;
//加密方法
Vue
.
prototype
.
$Aesencrypt
=
Aesencrypt
;
//加密
Vue
.
prototype
.
$Aesencrypt
=
Aesencrypt
;
//加密
Vue
.
prototype
.
$Aesdecrypt
=
Aesdecrypt
;
//揭秘
Vue
.
prototype
.
$Aesdecrypt
=
Aesdecrypt
;
//揭秘
Vue
.
prototype
.
$removeProperty
=
removeProperty
;
//清除空值
Vue
.
prototype
.
$removeProperty
=
removeProperty
;
//清除空值
Vue
.
prototype
.
$handleParams
=
handleParams
;
//封装机密格式的参数
Vue
.
prototype
.
$handleParams
=
handleParams
;
//封装机密格式的参数
//全局echarts
Vue
.
prototype
.
$echarts
=
echarts
/**
/**
...
...
src/styles/index.css
浏览文件 @
1b2e5eb5
...
@@ -707,10 +707,11 @@ aside a:hover {
...
@@ -707,10 +707,11 @@ aside a:hover {
position
:
absolute
;
position
:
absolute
;
left
:
0
;
left
:
0
;
top
:
0
;
top
:
0
;
bottom
:
-5px
;
width
:
300px
;
width
:
300px
;
height
:
750px
;
background-color
:
#fff
;
background-color
:
#fff
;
box-sizing
:
border-box
;
box-sizing
:
border-box
;
overflow-y
:
auto
;
}
}
.crumbs_box
{
.crumbs_box
{
...
@@ -775,3 +776,5 @@ aside a:hover {
...
@@ -775,3 +776,5 @@ aside a:hover {
margin-left
:
8px
;
margin-left
:
8px
;
margin-top
:
-3px
;
margin-top
:
-3px
;
}
}
/* 选框颜色 */
src/styles/index.min.css
浏览文件 @
1b2e5eb5
:export
{
menuText
:
#bfcbd9
;
menuActiveText
:
#409EFF
;
subMenuActiveText
:
#f4f4f5
;
menuBg
:
#304156
;
menuHover
:
#263445
;
subMenuBg
:
#1f2d3d
;
subMenuHover
:
#001528
;
sideBarWidth
:
210px
}
.fade-enter-active
,
.fade-leave-active
{
transition
:
opacity
0.28s
}
.fade-enter
,
.fade-leave-active
{
opacity
:
0
}
.fade-transform-leave-active
,
.fade-transform-enter-active
{
transition
:
all
.5s
}
.fade-transform-enter
{
opacity
:
0
;
transform
:
translateX
(
-30px
)}
.fade-transform-leave-to
{
opacity
:
0
;
transform
:
translateX
(
30px
)}
.breadcrumb-enter-active
,
.breadcrumb-leave-active
{
transition
:
all
.5s
}
.breadcrumb-enter
,
.breadcrumb-leave-active
{
opacity
:
0
;
transform
:
translateX
(
20px
)}
.breadcrumb-move
{
transition
:
all
.5s
}
.breadcrumb-leave-active
{
position
:
absolute
}
.el-breadcrumb__inner
,
.el-breadcrumb__inner
a
{
font-weight
:
400
!important
}
.el-upload
input
[
type
=
"file"
]
{
display
:
none
!important
}
.el-upload__input
{
display
:
none
}
.cell
.el-tag
{
margin-right
:
0px
}
.small-padding
.cell
{
padding-left
:
5px
;
padding-right
:
5px
}
.fixed-width
.el-button--mini
{
padding
:
7px
10px
;
min-width
:
60px
}
.status-col
.cell
{
padding
:
0
10px
;
text-align
:
center
}
.status-col
.cell
.el-tag
{
margin-right
:
0px
}
.el-dialog
{
transform
:
none
;
left
:
0
;
position
:
relative
;
margin
:
0
auto
}
.upload-container
.el-upload
{
width
:
100%
}
.upload-container
.el-upload
.el-upload-dragger
{
width
:
100%
;
height
:
200px
}
.el-dropdown-menu
a
{
display
:
block
}
.el-range-editor.el-input__inner
{
display
:
inline-flex
!important
}
.el-range-separator
{
box-sizing
:
content-box
}
:export
{
menuText
:
#bfcbd9
;
menuActiveText
:
#409EFF
;
subMenuActiveText
:
#f4f4f5
;
menuBg
:
#304156
;
menuHover
:
#263445
;
subMenuBg
:
#1f2d3d
;
subMenuHover
:
#001528
;
sideBarWidth
:
210px
}
#app
.main-container
{
min-height
:
100%
;
transition
:
margin-left
.28s
;
margin-left
:
210px
;
position
:
relative
}
#app
.sidebar-container
{
transition
:
width
0.28s
;
width
:
210px
!important
;
background-color
:
#304156
;
height
:
100%
;
position
:
fixed
;
font-size
:
0px
;
top
:
0
;
bottom
:
0
;
left
:
0
;
z-index
:
1001
;
overflow
:
hidden
}
#app
.sidebar-container
.horizontal-collapse-transition
{
transition
:
0s
width
ease-in-out
,
0s
padding-left
ease-in-out
,
0s
padding-right
ease-in-out
}
#app
.sidebar-container
.scrollbar-wrapper
{
overflow-x
:
hidden
!important
}
#app
.sidebar-container
.el-scrollbar__bar.is-vertical
{
right
:
0px
}
#app
.sidebar-container
.el-scrollbar
{
height
:
100%
}
#app
.sidebar-container.has-logo
.el-scrollbar
{
height
:
calc
(
100%
-
50px
)}
#app
.sidebar-container
.is-horizontal
{
display
:
none
}
#app
.sidebar-container
a
{
display
:
inline-block
;
width
:
100%
;
overflow
:
hidden
}
#app
.sidebar-container
.svg-icon
{
margin-right
:
16px
}
#app
.sidebar-container
.sub-el-icon
{
margin-right
:
12px
;
margin-left
:
-2px
}
#app
.sidebar-container
.el-menu
{
border
:
none
;
height
:
100%
;
width
:
100%
!important
}
#app
.sidebar-container
.submenu-title-noDropdown
:hover
,
#app
.sidebar-container
.el-submenu__title
:hover
{
background-color
:
#263445
!important
}
#app
.sidebar-container
.is-active
>
.el-submenu__title
{
color
:
#f4f4f5
!important
}
#app
.sidebar-container
.nest-menu
.el-submenu
>
.el-submenu__title
,
#app
.sidebar-container
.el-submenu
.el-menu-item
{
min-width
:
210px
!important
;
background-color
:
#1f2d3d
!important
}
#app
.sidebar-container
.nest-menu
.el-submenu
>
.el-submenu__title
:hover
,
#app
.sidebar-container
.el-submenu
.el-menu-item
:hover
{
background-color
:
#001528
!important
}
#app
.hideSidebar
.sidebar-container
{
width
:
54px
!important
}
#app
.hideSidebar
.main-container
{
margin-left
:
54px
}
#app
.hideSidebar
.submenu-title-noDropdown
{
padding
:
0
!important
;
position
:
relative
}
#app
.hideSidebar
.submenu-title-noDropdown
.el-tooltip
{
padding
:
0
!important
}
#app
.hideSidebar
.submenu-title-noDropdown
.el-tooltip
.svg-icon
{
margin-left
:
20px
}
#app
.hideSidebar
.submenu-title-noDropdown
.el-tooltip
.sub-el-icon
{
margin-left
:
19px
}
#app
.hideSidebar
.el-submenu
{
overflow
:
hidden
}
#app
.hideSidebar
.el-submenu
>
.el-submenu__title
{
padding
:
0
!important
}
#app
.hideSidebar
.el-submenu
>
.el-submenu__title
.svg-icon
{
margin-left
:
20px
}
#app
.hideSidebar
.el-submenu
>
.el-submenu__title
.sub-el-icon
{
margin-left
:
19px
}
#app
.hideSidebar
.el-submenu
>
.el-submenu__title
.el-submenu__icon-arrow
{
display
:
none
}
#app
.hideSidebar
.el-menu--collapse
.el-submenu
>
.el-submenu__title
>
span
{
height
:
0
;
width
:
0
;
overflow
:
hidden
;
visibility
:
hidden
;
display
:
inline-block
}
#app
.el-menu--collapse
.el-menu
.el-submenu
{
min-width
:
210px
!important
}
#app
.mobile
.main-container
{
margin-left
:
0px
}
#app
.mobile
.sidebar-container
{
transition
:
transform
.28s
;
width
:
210px
!important
}
#app
.mobile.hideSidebar
.sidebar-container
{
pointer-events
:
none
;
transition-duration
:
0.3s
;
transform
:
translate3d
(
-210px
,
0
,
0
)}
#app
.withoutAnimation
.main-container
,
#app
.withoutAnimation
.sidebar-container
{
transition
:
none
}
.el-menu--vertical
>
.el-menu
.svg-icon
{
margin-right
:
16px
}
.el-menu--vertical
>
.el-menu
.sub-el-icon
{
margin-right
:
12px
;
margin-left
:
-2px
}
.el-menu--vertical
.nest-menu
.el-submenu
>
.el-submenu__title
:hover
,
.el-menu--vertical
.el-menu-item
:hover
{
background-color
:
#263445
!important
}
.el-menu--vertical
>
.el-menu--popup
{
max-height
:
100vh
;
overflow-y
:
auto
}
.el-menu--vertical
>
.el-menu--popup
::-webkit-scrollbar-track-piece
{
background
:
#d3dce6
}
.el-menu--vertical
>
.el-menu--popup
::-webkit-scrollbar
{
width
:
6px
}
.el-menu--vertical
>
.el-menu--popup
::-webkit-scrollbar-thumb
{
background
:
#99a9bf
;
border-radius
:
20px
}
:export
{
menuText
:
#bfcbd9
;
menuActiveText
:
#409EFF
;
subMenuActiveText
:
#f4f4f5
;
menuBg
:
#304156
;
menuHover
:
#263445
;
subMenuBg
:
#1f2d3d
;
subMenuHover
:
#001528
;
sideBarWidth
:
210px
}
.blue-btn
{
background
:
#324157
}
.blue-btn
:hover
{
color
:
#324157
}
.blue-btn
:hover:before
,
.blue-btn
:hover:after
{
background
:
#324157
}
.light-blue-btn
{
background
:
#3A71A8
}
.light-blue-btn
:hover
{
color
:
#3A71A8
}
.light-blue-btn
:hover:before
,
.light-blue-btn
:hover:after
{
background
:
#3A71A8
}
.red-btn
{
background
:
#C03639
}
.red-btn
:hover
{
color
:
#C03639
}
.red-btn
:hover:before
,
.red-btn
:hover:after
{
background
:
#C03639
}
.pink-btn
{
background
:
#E65D6E
}
.pink-btn
:hover
{
color
:
#E65D6E
}
.pink-btn
:hover:before
,
.pink-btn
:hover:after
{
background
:
#E65D6E
}
.green-btn
{
background
:
#30B08F
}
.green-btn
:hover
{
color
:
#30B08F
}
.green-btn
:hover:before
,
.green-btn
:hover:after
{
background
:
#30B08F
}
.tiffany-btn
{
background
:
#4AB7BD
}
.tiffany-btn
:hover
{
color
:
#4AB7BD
}
.tiffany-btn
:hover:before
,
.tiffany-btn
:hover:after
{
background
:
#4AB7BD
}
.yellow-btn
{
background
:
#FEC171
}
.yellow-btn
:hover
{
color
:
#FEC171
}
.yellow-btn
:hover:before
,
.yellow-btn
:hover:after
{
background
:
#FEC171
}
.pan-btn
{
font-size
:
14px
;
color
:
#fff
;
padding
:
14px
36px
;
border-radius
:
8px
;
border
:
none
;
outline
:
none
;
transition
:
600ms
ease
all
;
position
:
relative
;
display
:
inline-block
}
.pan-btn
:hover
{
background
:
#fff
}
.pan-btn
:hover:before
,
.pan-btn
:hover:after
{
width
:
100%
;
transition
:
600ms
ease
all
}
.pan-btn
:before
,
.pan-btn
:after
{
content
:
''
;
position
:
absolute
;
top
:
0
;
right
:
0
;
height
:
2px
;
width
:
0
;
transition
:
400ms
ease
all
}
.pan-btn
::after
{
right
:
inherit
;
top
:
inherit
;
left
:
0
;
bottom
:
0
}
.custom-button
{
display
:
inline-block
;
line-height
:
1
;
white-space
:
nowrap
;
cursor
:
pointer
;
background
:
#fff
;
color
:
#fff
;
-webkit-appearance
:
none
;
text-align
:
center
;
box-sizing
:
border-box
;
outline
:
0
;
margin
:
0
;
padding
:
10px
15px
;
font-size
:
14px
;
border-radius
:
4px
}
p
,
h1
{
margin
:
0
}
body
{
height
:
100%
;
-moz-osx-font-smoothing
:
grayscale
;
-webkit-font-smoothing
:
antialiased
;
text-rendering
:
optimizeLegibility
;
font-family
:
Helvetica
Neue
,
Helvetica
,
PingFang
SC
,
Hiragino
Sans
GB
,
Microsoft
YaHei
,
Arial
,
sans-serif
}
label
{
font-weight
:
700
}
html
{
height
:
100%
;
box-sizing
:
border-box
}
#app
{
height
:
100%
}
*,*
:before
,*
:after
{
box-sizing
:
inherit
}
.no-padding
{
padding
:
0px
!important
}
.padding-content
{
padding
:
4px
0
}
a
:focus
,
a
:active
{
outline
:
none
}
a
,
a
:focus
,
a
:hover
{
cursor
:
pointer
;
color
:
inherit
;
text-decoration
:
none
}
div
:focus
{
outline
:
none
}
.fr
{
float
:
right
}
.fl
{
float
:
left
}
.pr-5
{
padding-right
:
5px
}
.pl-5
{
padding-left
:
5px
}
.block
{
display
:
block
}
.pointer
{
cursor
:
pointer
}
.inlineBlock
{
display
:
block
}
.clearfix
:after
{
visibility
:
hidden
;
display
:
block
;
font-size
:
0
;
content
:
" "
;
clear
:
both
;
height
:
0
}
aside
{
background
:
#eef1f6
;
padding
:
8px
24px
;
margin-bottom
:
20px
;
border-radius
:
2px
;
display
:
block
;
line-height
:
32px
;
font-size
:
16px
;
font-family
:
-apple-system
,
BlinkMacSystemFont
,
"Segoe UI"
,
Roboto
,
Oxygen
,
Ubuntu
,
Cantarell
,
"Fira Sans"
,
"Droid Sans"
,
"Helvetica Neue"
,
sans-serif
;
color
:
#2c3e50
;
-webkit-font-smoothing
:
antialiased
;
-moz-osx-font-smoothing
:
grayscale
}
aside
a
{
color
:
#337ab7
;
cursor
:
pointer
}
aside
a
:hover
{
color
:
#20a0ff
}
.app-container
{
padding
:
20px
}
.components-container
{
margin
:
30px
50px
;
position
:
relative
}
.pagination-container
{
margin-top
:
30px
}
.text-center
{
text-align
:
center
}
.sub-navbar
{
height
:
50px
;
line-height
:
50px
;
position
:
relative
;
width
:
100%
;
text-align
:
right
;
padding-right
:
20px
;
transition
:
600ms
ease
position
;
background
:
linear-gradient
(
90deg
,
#20b6f9
0%
,
#20b6f9
0%
,
#2178f1
100%
,
#2178f1
100%
)}
.sub-navbar
.subtitle
{
font-size
:
20px
;
color
:
#fff
}
.sub-navbar.draft
{
background
:
#d0d0d0
}
.sub-navbar.deleted
{
background
:
#d0d0d0
}
.link-type
,
.link-type
:focus
{
color
:
#337ab7
;
cursor
:
pointer
}
.link-type
:hover
,
.link-type
:focus:hover
{
color
:
#20a0ff
}
.filter-container
{
padding-bottom
:
10px
}
.filter-container
.filter-item
{
display
:
inline-block
;
vertical-align
:
middle
;
margin-bottom
:
10px
}
.multiselect
{
line-height
:
16px
}
.multiselect--active
{
z-index
:
1000
!important
}
.add_dialog
.el-dialog
.el-dialog__header
{
background-color
:
#E6A23C
}
.el-dialog
{
border-radius
:
8px
;
overflow
:
hidden
}
.el-dialog
.el-dialog__header
{
text-align
:
center
;
background-color
:
#34a575
;
border-radius
:
8px
8px
0
0
}
.el-dialog
.el-dialog__header
.el-dialog__title
,
.el-dialog
.el-dialog__header
.el-dialog__headerbtn
.el-dialog__close
{
color
:
#fff
}
.el-table--enable-row-hover
.el-table__body
tr
:hover
>
td
{
background-color
:
#fbf6ec
!important
}
.table_container
{
margin-top
:
20px
}
.module_container
{
position
:
relative
;
width
:
100%
;
height
:
calc
(
100%
-
55px
);
box-sizing
:
border-box
;
overflow-y
:
auto
}
.module_container
.module_container_left
{
position
:
absolute
;
left
:
0
;
top
:
0
;
bottom
:
-5px
;
width
:
300px
;
background-color
:
#fff
;
box-sizing
:
border-box
}
.crumbs_box
{
position
:
relative
;
z-index
:
10
;
width
:
1260px
;
height
:
50px
;
line-height
:
50px
;
margin
:
0
auto
}
.card_container
{
position
:
relative
;
z-index
:
1
;
width
:
1260px
;
margin
:
0
auto
}
.el-tree-node__content
:hover
{
background-color
:
#b5e7db
}
.el-tree-node.is-current
>
.el-tree-node__content
{
background-color
:
#b5e7db
}
.el-card
{
border-radius
:
8px
}
.select_container
.el-input__inner
{
border
:
none
}
.select_container
.el-textarea__inner
{
border
:
none
}
.upload_picture_container
.el-upload-list
{
max-height
:
400px
;
overflow-y
:
auto
}
.el-menu--horizontal
.menu_unit
>
.el-submenu.is-active
.el-submenu__title
{
border-bottom
:
2px
solid
#038D6E
;
color
:
#303133
}
.el-menu--horizontal
.menu_unit
>
.el-menu-item.is-active
{
border-bottom
:
2px
solid
#038D6E
;
color
:
#303133
}
.el-menu--horizontal
.menu_unit
>
.el-submenu
.el-submenu__icon-arrow
{
position
:
static
;
vertical-align
:
middle
;
margin-left
:
8px
;
margin-top
:
-3px
}
:export
{
menuText
:
#bfcbd9
;
menuActiveText
:
#409EFF
;
subMenuActiveText
:
#f4f4f5
;
menuBg
:
#304156
;
menuHover
:
#263445
;
subMenuBg
:
#1f2d3d
;
subMenuHover
:
#001528
;
sideBarWidth
:
210px
}
.fade-enter-active
,
.fade-leave-active
{
transition
:
opacity
0.28s
}
.fade-enter
,
.fade-leave-active
{
opacity
:
0
}
.fade-transform-leave-active
,
.fade-transform-enter-active
{
transition
:
all
.5s
}
.fade-transform-enter
{
opacity
:
0
;
transform
:
translateX
(
-30px
)}
.fade-transform-leave-to
{
opacity
:
0
;
transform
:
translateX
(
30px
)}
.breadcrumb-enter-active
,
.breadcrumb-leave-active
{
transition
:
all
.5s
}
.breadcrumb-enter
,
.breadcrumb-leave-active
{
opacity
:
0
;
transform
:
translateX
(
20px
)}
.breadcrumb-move
{
transition
:
all
.5s
}
.breadcrumb-leave-active
{
position
:
absolute
}
.el-breadcrumb__inner
,
.el-breadcrumb__inner
a
{
font-weight
:
400
!important
}
.el-upload
input
[
type
=
"file"
]
{
display
:
none
!important
}
.el-upload__input
{
display
:
none
}
.cell
.el-tag
{
margin-right
:
0px
}
.small-padding
.cell
{
padding-left
:
5px
;
padding-right
:
5px
}
.fixed-width
.el-button--mini
{
padding
:
7px
10px
;
min-width
:
60px
}
.status-col
.cell
{
padding
:
0
10px
;
text-align
:
center
}
.status-col
.cell
.el-tag
{
margin-right
:
0px
}
.el-dialog
{
transform
:
none
;
left
:
0
;
position
:
relative
;
margin
:
0
auto
}
.upload-container
.el-upload
{
width
:
100%
}
.upload-container
.el-upload
.el-upload-dragger
{
width
:
100%
;
height
:
200px
}
.el-dropdown-menu
a
{
display
:
block
}
.el-range-editor.el-input__inner
{
display
:
inline-flex
!important
}
.el-range-separator
{
box-sizing
:
content-box
}
:export
{
menuText
:
#bfcbd9
;
menuActiveText
:
#409EFF
;
subMenuActiveText
:
#f4f4f5
;
menuBg
:
#304156
;
menuHover
:
#263445
;
subMenuBg
:
#1f2d3d
;
subMenuHover
:
#001528
;
sideBarWidth
:
210px
}
#app
.main-container
{
min-height
:
100%
;
transition
:
margin-left
.28s
;
margin-left
:
210px
;
position
:
relative
}
#app
.sidebar-container
{
transition
:
width
0.28s
;
width
:
210px
!important
;
background-color
:
#304156
;
height
:
100%
;
position
:
fixed
;
font-size
:
0px
;
top
:
0
;
bottom
:
0
;
left
:
0
;
z-index
:
1001
;
overflow
:
hidden
}
#app
.sidebar-container
.horizontal-collapse-transition
{
transition
:
0s
width
ease-in-out
,
0s
padding-left
ease-in-out
,
0s
padding-right
ease-in-out
}
#app
.sidebar-container
.scrollbar-wrapper
{
overflow-x
:
hidden
!important
}
#app
.sidebar-container
.el-scrollbar__bar.is-vertical
{
right
:
0px
}
#app
.sidebar-container
.el-scrollbar
{
height
:
100%
}
#app
.sidebar-container.has-logo
.el-scrollbar
{
height
:
calc
(
100%
-
50px
)}
#app
.sidebar-container
.is-horizontal
{
display
:
none
}
#app
.sidebar-container
a
{
display
:
inline-block
;
width
:
100%
;
overflow
:
hidden
}
#app
.sidebar-container
.svg-icon
{
margin-right
:
16px
}
#app
.sidebar-container
.sub-el-icon
{
margin-right
:
12px
;
margin-left
:
-2px
}
#app
.sidebar-container
.el-menu
{
border
:
none
;
height
:
100%
;
width
:
100%
!important
}
#app
.sidebar-container
.submenu-title-noDropdown
:hover
,
#app
.sidebar-container
.el-submenu__title
:hover
{
background-color
:
#263445
!important
}
#app
.sidebar-container
.is-active
>
.el-submenu__title
{
color
:
#f4f4f5
!important
}
#app
.sidebar-container
.nest-menu
.el-submenu
>
.el-submenu__title
,
#app
.sidebar-container
.el-submenu
.el-menu-item
{
min-width
:
210px
!important
;
background-color
:
#1f2d3d
!important
}
#app
.sidebar-container
.nest-menu
.el-submenu
>
.el-submenu__title
:hover
,
#app
.sidebar-container
.el-submenu
.el-menu-item
:hover
{
background-color
:
#001528
!important
}
#app
.hideSidebar
.sidebar-container
{
width
:
54px
!important
}
#app
.hideSidebar
.main-container
{
margin-left
:
54px
}
#app
.hideSidebar
.submenu-title-noDropdown
{
padding
:
0
!important
;
position
:
relative
}
#app
.hideSidebar
.submenu-title-noDropdown
.el-tooltip
{
padding
:
0
!important
}
#app
.hideSidebar
.submenu-title-noDropdown
.el-tooltip
.svg-icon
{
margin-left
:
20px
}
#app
.hideSidebar
.submenu-title-noDropdown
.el-tooltip
.sub-el-icon
{
margin-left
:
19px
}
#app
.hideSidebar
.el-submenu
{
overflow
:
hidden
}
#app
.hideSidebar
.el-submenu
>
.el-submenu__title
{
padding
:
0
!important
}
#app
.hideSidebar
.el-submenu
>
.el-submenu__title
.svg-icon
{
margin-left
:
20px
}
#app
.hideSidebar
.el-submenu
>
.el-submenu__title
.sub-el-icon
{
margin-left
:
19px
}
#app
.hideSidebar
.el-submenu
>
.el-submenu__title
.el-submenu__icon-arrow
{
display
:
none
}
#app
.hideSidebar
.el-menu--collapse
.el-submenu
>
.el-submenu__title
>
span
{
height
:
0
;
width
:
0
;
overflow
:
hidden
;
visibility
:
hidden
;
display
:
inline-block
}
#app
.el-menu--collapse
.el-menu
.el-submenu
{
min-width
:
210px
!important
}
#app
.mobile
.main-container
{
margin-left
:
0px
}
#app
.mobile
.sidebar-container
{
transition
:
transform
.28s
;
width
:
210px
!important
}
#app
.mobile.hideSidebar
.sidebar-container
{
pointer-events
:
none
;
transition-duration
:
0.3s
;
transform
:
translate3d
(
-210px
,
0
,
0
)}
#app
.withoutAnimation
.main-container
,
#app
.withoutAnimation
.sidebar-container
{
transition
:
none
}
.el-menu--vertical
>
.el-menu
.svg-icon
{
margin-right
:
16px
}
.el-menu--vertical
>
.el-menu
.sub-el-icon
{
margin-right
:
12px
;
margin-left
:
-2px
}
.el-menu--vertical
.nest-menu
.el-submenu
>
.el-submenu__title
:hover
,
.el-menu--vertical
.el-menu-item
:hover
{
background-color
:
#263445
!important
}
.el-menu--vertical
>
.el-menu--popup
{
max-height
:
100vh
;
overflow-y
:
auto
}
.el-menu--vertical
>
.el-menu--popup
::-webkit-scrollbar-track-piece
{
background
:
#d3dce6
}
.el-menu--vertical
>
.el-menu--popup
::-webkit-scrollbar
{
width
:
6px
}
.el-menu--vertical
>
.el-menu--popup
::-webkit-scrollbar-thumb
{
background
:
#99a9bf
;
border-radius
:
20px
}
:export
{
menuText
:
#bfcbd9
;
menuActiveText
:
#409EFF
;
subMenuActiveText
:
#f4f4f5
;
menuBg
:
#304156
;
menuHover
:
#263445
;
subMenuBg
:
#1f2d3d
;
subMenuHover
:
#001528
;
sideBarWidth
:
210px
}
.blue-btn
{
background
:
#324157
}
.blue-btn
:hover
{
color
:
#324157
}
.blue-btn
:hover:before
,
.blue-btn
:hover:after
{
background
:
#324157
}
.light-blue-btn
{
background
:
#3A71A8
}
.light-blue-btn
:hover
{
color
:
#3A71A8
}
.light-blue-btn
:hover:before
,
.light-blue-btn
:hover:after
{
background
:
#3A71A8
}
.red-btn
{
background
:
#C03639
}
.red-btn
:hover
{
color
:
#C03639
}
.red-btn
:hover:before
,
.red-btn
:hover:after
{
background
:
#C03639
}
.pink-btn
{
background
:
#E65D6E
}
.pink-btn
:hover
{
color
:
#E65D6E
}
.pink-btn
:hover:before
,
.pink-btn
:hover:after
{
background
:
#E65D6E
}
.green-btn
{
background
:
#30B08F
}
.green-btn
:hover
{
color
:
#30B08F
}
.green-btn
:hover:before
,
.green-btn
:hover:after
{
background
:
#30B08F
}
.tiffany-btn
{
background
:
#4AB7BD
}
.tiffany-btn
:hover
{
color
:
#4AB7BD
}
.tiffany-btn
:hover:before
,
.tiffany-btn
:hover:after
{
background
:
#4AB7BD
}
.yellow-btn
{
background
:
#FEC171
}
.yellow-btn
:hover
{
color
:
#FEC171
}
.yellow-btn
:hover:before
,
.yellow-btn
:hover:after
{
background
:
#FEC171
}
.pan-btn
{
font-size
:
14px
;
color
:
#fff
;
padding
:
14px
36px
;
border-radius
:
8px
;
border
:
none
;
outline
:
none
;
transition
:
600ms
ease
all
;
position
:
relative
;
display
:
inline-block
}
.pan-btn
:hover
{
background
:
#fff
}
.pan-btn
:hover:before
,
.pan-btn
:hover:after
{
width
:
100%
;
transition
:
600ms
ease
all
}
.pan-btn
:before
,
.pan-btn
:after
{
content
:
''
;
position
:
absolute
;
top
:
0
;
right
:
0
;
height
:
2px
;
width
:
0
;
transition
:
400ms
ease
all
}
.pan-btn
::after
{
right
:
inherit
;
top
:
inherit
;
left
:
0
;
bottom
:
0
}
.custom-button
{
display
:
inline-block
;
line-height
:
1
;
white-space
:
nowrap
;
cursor
:
pointer
;
background
:
#fff
;
color
:
#fff
;
-webkit-appearance
:
none
;
text-align
:
center
;
box-sizing
:
border-box
;
outline
:
0
;
margin
:
0
;
padding
:
10px
15px
;
font-size
:
14px
;
border-radius
:
4px
}
p
,
h1
{
margin
:
0
}
body
{
height
:
100%
;
-moz-osx-font-smoothing
:
grayscale
;
-webkit-font-smoothing
:
antialiased
;
text-rendering
:
optimizeLegibility
;
font-family
:
Helvetica
Neue
,
Helvetica
,
PingFang
SC
,
Hiragino
Sans
GB
,
Microsoft
YaHei
,
Arial
,
sans-serif
}
label
{
font-weight
:
700
}
html
{
height
:
100%
;
box-sizing
:
border-box
}
#app
{
height
:
100%
}
*,*
:before
,*
:after
{
box-sizing
:
inherit
}
.no-padding
{
padding
:
0px
!important
}
.padding-content
{
padding
:
4px
0
}
a
:focus
,
a
:active
{
outline
:
none
}
a
,
a
:focus
,
a
:hover
{
cursor
:
pointer
;
color
:
inherit
;
text-decoration
:
none
}
div
:focus
{
outline
:
none
}
.fr
{
float
:
right
}
.fl
{
float
:
left
}
.pr-5
{
padding-right
:
5px
}
.pl-5
{
padding-left
:
5px
}
.block
{
display
:
block
}
.pointer
{
cursor
:
pointer
}
.inlineBlock
{
display
:
block
}
.clearfix
:after
{
visibility
:
hidden
;
display
:
block
;
font-size
:
0
;
content
:
" "
;
clear
:
both
;
height
:
0
}
aside
{
background
:
#eef1f6
;
padding
:
8px
24px
;
margin-bottom
:
20px
;
border-radius
:
2px
;
display
:
block
;
line-height
:
32px
;
font-size
:
16px
;
font-family
:
-apple-system
,
BlinkMacSystemFont
,
"Segoe UI"
,
Roboto
,
Oxygen
,
Ubuntu
,
Cantarell
,
"Fira Sans"
,
"Droid Sans"
,
"Helvetica Neue"
,
sans-serif
;
color
:
#2c3e50
;
-webkit-font-smoothing
:
antialiased
;
-moz-osx-font-smoothing
:
grayscale
}
aside
a
{
color
:
#337ab7
;
cursor
:
pointer
}
aside
a
:hover
{
color
:
#20a0ff
}
.app-container
{
padding
:
20px
}
.components-container
{
margin
:
30px
50px
;
position
:
relative
}
.pagination-container
{
margin-top
:
30px
}
.text-center
{
text-align
:
center
}
.sub-navbar
{
height
:
50px
;
line-height
:
50px
;
position
:
relative
;
width
:
100%
;
text-align
:
right
;
padding-right
:
20px
;
transition
:
600ms
ease
position
;
background
:
linear-gradient
(
90deg
,
#20b6f9
0%
,
#20b6f9
0%
,
#2178f1
100%
,
#2178f1
100%
)}
.sub-navbar
.subtitle
{
font-size
:
20px
;
color
:
#fff
}
.sub-navbar.draft
{
background
:
#d0d0d0
}
.sub-navbar.deleted
{
background
:
#d0d0d0
}
.link-type
,
.link-type
:focus
{
color
:
#337ab7
;
cursor
:
pointer
}
.link-type
:hover
,
.link-type
:focus:hover
{
color
:
#20a0ff
}
.filter-container
{
padding-bottom
:
10px
}
.filter-container
.filter-item
{
display
:
inline-block
;
vertical-align
:
middle
;
margin-bottom
:
10px
}
.multiselect
{
line-height
:
16px
}
.multiselect--active
{
z-index
:
1000
!important
}
.add_dialog
.el-dialog
.el-dialog__header
{
background-color
:
#E6A23C
}
.el-dialog
{
border-radius
:
8px
;
overflow
:
hidden
}
.el-dialog
.el-dialog__header
{
text-align
:
center
;
background-color
:
#34a575
;
border-radius
:
8px
8px
0
0
}
.el-dialog
.el-dialog__header
.el-dialog__title
,
.el-dialog
.el-dialog__header
.el-dialog__headerbtn
.el-dialog__close
{
color
:
#fff
}
.el-table--enable-row-hover
.el-table__body
tr
:hover
>
td
{
background-color
:
#fbf6ec
!important
}
.table_container
{
margin-top
:
20px
}
.module_container
{
position
:
relative
;
width
:
100%
;
height
:
calc
(
100%
-
55px
);
box-sizing
:
border-box
;
overflow-y
:
auto
}
.module_container
.module_container_left
{
position
:
absolute
;
left
:
0
;
top
:
0
;
width
:
300px
;
height
:
750px
;
background-color
:
#fff
;
box-sizing
:
border-box
;
overflow-y
:
auto
}
.crumbs_box
{
position
:
relative
;
z-index
:
10
;
width
:
1260px
;
height
:
50px
;
line-height
:
50px
;
margin
:
0
auto
}
.card_container
{
position
:
relative
;
z-index
:
1
;
width
:
1260px
;
margin
:
0
auto
}
.el-tree-node__content
:hover
{
background-color
:
#b5e7db
}
.el-tree-node.is-current
>
.el-tree-node__content
{
background-color
:
#b5e7db
}
.el-card
{
border-radius
:
8px
}
.select_container
.el-input__inner
{
border
:
none
}
.select_container
.el-textarea__inner
{
border
:
none
}
.upload_picture_container
.el-upload-list
{
max-height
:
400px
;
overflow-y
:
auto
}
.el-menu--horizontal
.menu_unit
>
.el-submenu.is-active
.el-submenu__title
{
border-bottom
:
2px
solid
#038D6E
;
color
:
#303133
}
.el-menu--horizontal
.menu_unit
>
.el-menu-item.is-active
{
border-bottom
:
2px
solid
#038D6E
;
color
:
#303133
}
.el-menu--horizontal
.menu_unit
>
.el-submenu
.el-submenu__icon-arrow
{
position
:
static
;
vertical-align
:
middle
;
margin-left
:
8px
;
margin-top
:
-3px
}
src/styles/index.scss
浏览文件 @
1b2e5eb5
...
@@ -242,11 +242,12 @@ aside {
...
@@ -242,11 +242,12 @@ aside {
position
:
absolute
;
position
:
absolute
;
left
:
0
;
left
:
0
;
top
:
0
;
top
:
0
;
bottom
:
-5px
;
width
:
300px
;
width
:
300px
;
height
:
750px
;
background-color
:
#fff
;
background-color
:
#fff
;
box-sizing
:
border-box
;
box-sizing
:
border-box
;
// padding: 15px;
// padding: 15px;
overflow-y
:
auto
;
}
}
}
}
...
@@ -318,4 +319,6 @@ aside {
...
@@ -318,4 +319,6 @@ aside {
vertical-align
:
middle
;
vertical-align
:
middle
;
margin-left
:
8px
;
margin-left
:
8px
;
margin-top
:
-3px
;
margin-top
:
-3px
;
}
}
\ No newline at end of file
/* 选框颜色 */
src/utils/tool.js
浏览文件 @
1b2e5eb5
...
@@ -52,3 +52,8 @@ export function secondsToMinutes(s) {
...
@@ -52,3 +52,8 @@ export function secondsToMinutes(s) {
let
result
=
`
${
padTo2Digits
(
minutes
)}
分
${
padTo2Digits
(
seconds
)}
秒`
;
let
result
=
`
${
padTo2Digits
(
minutes
)}
分
${
padTo2Digits
(
seconds
)}
秒`
;
return
result
return
result
}
}
//两个数,求百分比
export
function
toPercent
(
num
,
total
)
{
return
(
Math
.
round
(
num
/
total
*
10000
)
/
100.00
+
"%"
);
// 小数点后两位百分比
}
src/views/login/index.vue
浏览文件 @
1b2e5eb5
...
@@ -87,11 +87,11 @@
...
@@ -87,11 +87,11 @@
<span>
Password : any
</span>
<span>
Password : any
</span>
</div>
</div>
<el-button
class=
"thirdparty-button"
type=
"primary"
@
click=
"showDialog = true"
>
<el-button
class=
"thirdparty-button"
type=
"primary"
@
click=
"showDialog = true"
>
Or connect with
Or connect with
</el-button>
</el-button>
</div>
</div>
</el-form>
-->
</el-form>
-->
</div>
</div>
</div>
</div>
</div>
</div>
...
@@ -462,7 +462,8 @@ $light_gray: #eee;
...
@@ -462,7 +462,8 @@ $light_gray: #eee;
}
}
.content_body_right
{
.content_body_right
{
width
:
400px
;
min-width
:
350px
;
max-width
:
350px
;
box-sizing
:
border-box
;
box-sizing
:
border-box
;
padding
:
40px
;
padding
:
40px
;
background-color
:
#fff
;
background-color
:
#fff
;
...
...
src/views/student/area_breed/index.vue
浏览文件 @
1b2e5eb5
...
@@ -17,7 +17,7 @@
...
@@ -17,7 +17,7 @@
<table-head
:head_data=
"head_data"
@
search=
"searchEvent"
@
change=
"searchChange"
@
resetting=
"resetting"
<table-head
:head_data=
"head_data"
@
search=
"searchEvent"
@
change=
"searchChange"
@
resetting=
"resetting"
@
btnClick=
"btnClick"
></table-head>
@
btnClick=
"btnClick"
></table-head>
<div
class=
"table_container"
>
<div
class=
"table_container"
>
<el-table
v-loading=
"is_loading"
:data=
"tableData"
style=
"width: 100%;margin-bottom: 20px;"
height=
"6
5
0"
>
<el-table
v-loading=
"is_loading"
:data=
"tableData"
style=
"width: 100%;margin-bottom: 20px;"
height=
"6
0
0"
>
<el-table-column
prop=
"id"
label=
"编号"
width=
"80"
>
<el-table-column
prop=
"id"
label=
"编号"
width=
"80"
>
</el-table-column>
</el-table-column>
<el-table-column
prop=
"name"
label=
"烟草产地"
>
<el-table-column
prop=
"name"
label=
"烟草产地"
>
...
@@ -355,9 +355,10 @@ export default {
...
@@ -355,9 +355,10 @@ export default {
}
}
.right_container
{
.right_container
{
/* position: absolute;
// position: absolute;
left: 320px;
// left: 0;
top: 0; */
// top: 0;
// bottom: 0;
margin-left
:
320px
;
margin-left
:
320px
;
width
:
80%
;
width
:
80%
;
height
:
100%
;
height
:
100%
;
...
...
src/views/student/display_board/detail.vue
0 → 100644
浏览文件 @
1b2e5eb5
<!--
* @Author: czj
* @Date: 2023-03-22 16:47:13
* @Description:
* @FilePath: \AdministrationHome\src\views\student\display_board\detail.vue
-->
<!-- -->
<
template
>
<div
class=
"module_container"
>
<div
class=
"card_container"
>
<el-card
class=
"box-card"
>
<Header
v-if=
"!is_loading"
:examination_questions=
"head_data"
></Header>
</el-card>
<el-card
class=
"box-card"
>
<div>
<div
class=
"module_header"
>
得分情况
</div>
<div>
<el-row
class=
"row_container"
>
<el-col
:span=
"8"
v-if=
"review_conditions && review_conditions.is_ScoreScore"
class=
"unit_container"
>
<div
class=
"centenr_container"
>
<AnalyseModule
:module_data=
"result_section"
v-if=
"result_section"
>
</AnalyseModule>
</div>
</el-col>
<el-col
:span=
"8"
v-if=
"review_conditions && review_conditions.is_AreaScore"
class=
"unit_container"
>
<div
class=
"centenr_container"
>
<AnalyseModule
:module_data=
"area_score"
v-if=
"area_score"
>
</AnalyseModule>
</div>
</el-col>
<el-col
:span=
"8"
v-if=
"review_conditions && review_conditions.is_ProvinceScore"
class=
"unit_container"
>
<div
class=
"centenr_container"
>
<AnalyseModule
:module_data=
"province_score"
v-if=
"province_score"
>
</AnalyseModule>
</div>
</el-col>
<el-col
:span=
"8"
v-if=
"review_conditions && review_conditions.is_breedScore"
class=
"unit_container"
>
<div
class=
"centenr_container"
>
<AnalyseModule
:module_data=
"breed_score"
v-if=
"breed_score"
>
</AnalyseModule>
</div>
</el-col>
<el-col
:span=
"8"
v-if=
"review_conditions && review_conditions.is_getHighesLowesttScore"
class=
"unit_container"
>
<div
class=
"centenr_container"
>
<AnalyseModule
:module_data=
"get_highes_lowestt_score_data"
v-if=
"get_highes_lowestt_score_data"
>
</AnalyseModule>
</div>
</el-col>
</el-row>
<!--
<el-row
class=
"row_container"
>
<el-col
:span=
"8"
v-if=
"review_conditions && review_conditions.is_breedScore"
>
<div
class=
"centenr_container"
>
<AnalyseModule
:module_data=
"breed_score"
v-if=
"breed_score"
>
</AnalyseModule>
</div>
</el-col>
<el-col
:span=
"8"
v-if=
"review_conditions && review_conditions.is_getHighesLowesttScore"
>
<div
class=
"centenr_container"
>
<AnalyseModule
:module_data=
"get_highes_lowestt_score_data"
v-if=
"get_highes_lowestt_score_data"
>
</AnalyseModule>
</div>
</el-col>
</el-row>
-->
</div>
</div>
<div
v-if=
"review_conditions && review_conditions.is_top_data"
>
<div
class=
"module_header"
>
易错、对等级分析
</div>
<div>
<el-row
class=
"row_container"
>
<el-col
:span=
"12"
>
<div
class=
"centenr_container"
>
<AnalyseModule
:module_data=
"wrong_question_data"
v-if=
"wrong_question_data"
></AnalyseModule>
</div>
</el-col>
<el-col
:span=
"12"
>
<div
class=
"centenr_container"
>
<AnalyseModule
:module_data=
"exactness_question_data"
v-if=
"exactness_question_data"
></AnalyseModule>
</div>
</el-col>
</el-row>
</div>
</div>
<div>
<div>
<el-row
class=
"row_container"
>
<el-col
:span=
"12"
v-if=
"review_conditions && review_conditions.is_WrongPosition"
>
<div
class=
"module_header"
>
错误部位
</div>
<div
class=
"centenr_container"
>
<AnalyseModule
:module_data=
"wrong_position_data"
v-if=
"wrong_position_data"
></AnalyseModule>
</div>
</el-col>
<el-col
:span=
"12"
v-if=
"review_conditions && review_conditions.is_ErrorLevel"
>
<div
class=
"module_header"
>
错误等级
</div>
<div
class=
"centenr_container"
>
<AnalyseModule
:module_data=
"error_level_data"
v-if=
"error_level_data"
>
</AnalyseModule>
</div>
</el-col>
<el-col
:span=
"12"
v-if=
"review_conditions && review_conditions.is_WrongColor"
>
<div
class=
"module_header"
>
错误颜色
</div>
<div
class=
"centenr_container"
>
<AnalyseModule
:module_data=
"wrong_color_data"
v-if=
"wrong_color_data"
>
</AnalyseModule>
</div>
</el-col>
<el-col
:span=
"12"
v-if=
"review_conditions && review_conditions.is_WrongGroup"
>
<div
class=
"module_header"
>
错误组别
</div>
<div
class=
"centenr_container"
>
<AnalyseModule
:module_data=
"wrongG_group_data"
v-if=
"wrongG_group_data"
>
</AnalyseModule>
</div>
</el-col>
</el-row>
</div>
</div>
<div>
<div
class=
"module_header"
>
老师点评
</div>
<div
style=
"padding: 0 10px;box-sizing: border-box;"
>
<el-input
type=
"textarea"
:rows=
"6"
placeholder=
"暂无内容"
disabled
>
</el-input>
</div>
</div>
</el-card>
</div>
</div>
</
template
>
<
script
>
import
Header
from
'@/components/ExaminationHeader/succinct.vue'
;
import
{
toPercent
}
from
'@/utils/tool'
;
import
{
get_read_over_detail
}
from
'@/api/student'
;
import
AnalyseModule
from
'@/components/AnalyseModule/index.vue'
;
export
default
{
data
()
{
return
{
is_loading
:
false
,
//头部数据
head_data
:
{
title
:
'测试体贴'
,
right_buttons
:
[
// {
// text: '审核通过',
// icon: 'el-icon-document-checked',
// event: 'check',
// },
// {
// text: '保存',
// icon: 'el-icon-plus',
// event: 'save',
// }
],
},
examination_questions_id
:
null
,
//批阅条件
review_conditions
:
null
,
//成绩分段
result_section
:
null
,
//区域得分
area_score
:
null
,
//省区得分情况
province_score
:
null
,
//品种得分
breed_score
:
null
,
//最高成绩..
get_highes_lowestt_score_data
:
null
,
//对错题分析
wrong_question_data
:
null
,
exactness_question_data
:
null
,
//错误部位
wrong_position_data
:
null
,
//错误等级
error_level_data
:
null
,
//错误颜色
wrong_color_data
:
null
,
//错误组别
wrongG_group_data
:
null
,
};
},
components
:
{
Header
,
AnalyseModule
},
computed
:
{},
created
()
{
this
.
examination_questions_id
=
this
.
$route
.
query
.
id
;
},
mounted
()
{
this
.
getReadOverDetail
();
},
methods
:
{
//获取批阅试题列表-详情
getReadOverDetail
()
{
this
.
is_loading
=
true
;
get_read_over_detail
(
this
.
examination_questions_id
).
then
(
res
=>
{
console
.
log
(
'获取试题详情'
);
console
.
log
(
res
);
this
.
head_data
.
title
=
res
.
review_content
.
EyeStability
.
title
;
//标题
this
.
is_loading
=
false
;
this
.
review_conditions
=
res
.
review_conditions
;
//审阅条件
if
(
res
.
review_content
)
{
this
.
result_section
=
this
.
changeScore
(
res
.
review_content
.
ScoreScore
);
//成绩分段
this
.
area_score
=
this
.
changeAreaScore
(
res
.
review_content
.
AreaScore
);
//南北方得分
this
.
province_score
=
this
.
changeProvinceScore
(
res
.
review_content
.
ProvinceScore
);
//省区得分
this
.
breed_score
=
this
.
changeBreedScore
(
res
.
review_content
.
breedScore
);
//品种得分
//最高分、最低分、平均分,中位数、众数、离散(变异系数)
this
.
get_highes_lowestt_score_data
=
this
.
getHighesLowesttScore
(
res
.
review_content
.
getHighesLowesttScore
);
//对错题分析
if
(
res
.
review_content
.
top_data
)
this
.
wrong_question_data
=
this
.
changeWrong
(
res
.
review_content
.
top_data
.
datadesc
);
//错题分析
if
(
res
.
review_content
.
top_data
)
this
.
exactness_question_data
=
this
.
changeRight
(
res
.
review_content
.
top_data
.
dataasc
);
//对题分析
this
.
wrong_position_data
=
this
.
changeWrongPosition
(
res
.
review_content
.
WrongPosition
);
//错误部位
this
.
error_level_data
=
this
.
changeErrorLevel
(
res
.
review_content
.
ErrorLevel
);
//错误等级
this
.
wrong_color_data
=
this
.
changeWrongColor
(
res
.
review_content
.
WrongColor
);
//错误颜色
this
.
wrongG_group_data
=
this
.
changeWrongGroup
(
res
.
review_content
.
WrongGroup
);
//错误组别
}
})
},
//计算百分比
toPercent
,
//处理分段值
changeScore
(
datas
)
{
if
(
!
datas
)
return
false
;
let
keys
=
Object
.
keys
(
datas
);
let
list
=
[];
let
data
=
[];
let
num
=
0
;
for
(
const
key
in
datas
)
{
num
+=
datas
[
key
];
}
let
labers
=
[
{
label
:
'分类'
,
key
:
'classify'
},
{
label
:
'分数段'
,
key
:
'score'
},
{
label
:
'人数'
,
key
:
'people'
},
{
label
:
'占比'
,
key
:
'proportion'
},
];
keys
.
forEach
(
element
=>
{
let
scores
=
element
.
split
(
'~'
);
data
.
push
(
datas
[
element
]);
let
obj
=
{
classify
:
element
,
score
:
scores
[
0
],
people
:
datas
[
element
],
proportion
:
this
.
toPercent
(
datas
[
element
],
num
)
}
list
.
push
(
obj
);
});
return
{
type
:
'table'
,
chart_id
:
'result_section'
,
color
:
'#39c183f0'
,
title
:
'成绩分段值'
,
labers
,
list
,
data
,
};
},
//南方烟北方烟得分情况
changeAreaScore
(
datas
)
{
if
(
!
datas
)
return
false
;
let
keys
=
Object
.
keys
(
datas
);
let
labers
=
[
{
label
:
'分数'
,
key
:
'ScoreScore'
},
{
label
:
'总分'
,
key
:
'assemble'
},
{
label
:
'人数'
,
key
:
'student_num'
},
];
return
{
type
:
"bar"
,
chart_id
:
'bar_chart'
,
color
:
'#E6A23C'
,
title
:
'南方北方烟得分情况'
,
labers
,
keys
,
raw_data
:
datas
,
};
},
//省区得分数据处理
changeProvinceScore
(
datas
)
{
if
(
!
datas
)
return
false
;
let
keys
=
Object
.
keys
(
datas
);
let
labers
=
[
{
label
:
'分数'
,
key
:
'ScoreScore'
},
{
label
:
'总分'
,
key
:
'assemble'
},
{
label
:
'人数'
,
key
:
'student_num'
},
];
return
{
type
:
"bar"
,
chart_id
:
'province_bar_chart'
,
color
:
'#505F79'
,
title
:
'省级产区得分情况'
,
labers
,
keys
,
raw_data
:
datas
,
};
},
//品种得分情况
changeBreedScore
(
datas
)
{
if
(
!
datas
)
return
false
;
let
keys
=
Object
.
keys
(
datas
);
let
labers
=
[
{
label
:
'分数'
,
key
:
'ScoreScore'
},
{
label
:
'总分'
,
key
:
'assemble'
},
{
label
:
'人数'
,
key
:
'student_num'
},
];
return
{
type
:
"bar"
,
chart_id
:
'breed_bar_chart'
,
color
:
'#39c183f0'
,
title
:
'品种得分情况'
,
labers
,
keys
,
raw_data
:
datas
,
};
},
//最高分、最低分、平均分,中位数、众数、离散(变异系数)
getHighesLowesttScore
(
datas
)
{
if
(
!
datas
)
return
false
;
let
labers
=
[
{
label
:
'最高成绩'
,
key
:
'max'
},
{
label
:
'最低成绩'
,
key
:
'min'
},
{
label
:
'平均成绩'
,
key
:
'average'
},
{
label
:
'中位数'
,
key
:
'median'
},
{
label
:
'众数'
,
key
:
'mode'
},
{
label
:
'变异系数'
,
key
:
'cov'
},
];
return
{
type
:
'simple_table'
,
chart_id
:
'HighesLowesttScore_table'
,
color
:
'#99A9BF'
,
title
:
'最高分、最低分、平均分,中位数、众数、离散(变异系数)'
,
labers
,
data
:
datas
,
}
},
//易错/易对 等级分析
changeWrong
(
datas
)
{
if
(
!
datas
)
return
false
;
let
list
=
[];
let
labers
=
[
{
label
:
'序号'
,
key
:
'index'
},
{
label
:
'题目'
,
key
:
'title'
},
{
label
:
'结果'
,
key
:
'result'
},
{
label
:
'错误率'
,
key
:
'errorRate'
},
{
label
:
'错误结果'
,
key
:
'distribute'
},
];
datas
.
forEach
((
element
,
index
)
=>
{
list
.
push
({
index
:
index
+
1
,
title
:
element
.
title
,
result
:
element
.
result
,
errorRate
:
`
${
element
.
errorRate
}
%`
,
distribute
:
element
.
distribute
});
});
return
{
type
:
'table'
,
chart_id
:
'wrong_table'
,
color
:
'#F56C6C'
,
title
:
'易错题分析'
,
labers
,
list
,
};
},
//易对题分析
changeRight
(
datas
)
{
if
(
!
datas
)
return
false
;
let
list
=
[];
let
labers
=
[
{
label
:
'序号'
,
key
:
'index'
},
{
label
:
'题目'
,
key
:
'title'
},
{
label
:
'结果'
,
key
:
'result'
},
{
label
:
'正确率'
,
key
:
'errorRate'
},
];
datas
.
forEach
((
element
,
index
)
=>
{
list
.
push
({
index
:
index
+
1
,
title
:
element
.
title
,
result
:
element
.
result
,
errorRate
:
`
${
100
-
element
.
errorRate
}
%`
,
});
});
return
{
type
:
'table'
,
chart_id
:
'wrong_table'
,
color
:
'#529B2E'
,
title
:
'易对题分析'
,
labers
,
list
};
},
//错误部位
changeWrongPosition
(
datas
)
{
if
(
!
datas
)
return
false
;
let
keys
=
Object
.
keys
(
datas
);
let
list
=
[];
let
labers
=
[
{
label
:
'部位'
,
key
:
'position'
},
{
label
:
'正确答案'
,
key
:
'answer'
},
{
label
:
'错题数量'
,
key
:
'wrong_num'
},
{
label
:
'错误答案内容'
,
key
:
'distribute'
},
];
keys
.
forEach
((
element
,
index
)
=>
{
list
.
push
({
position
:
element
,
answer
:
datas
[
element
].
answer
,
wrong_num
:
datas
[
element
].
wrong_num
,
distribute
:
datas
[
element
].
distribute
,
});
});
return
{
type
:
'table'
,
chart_id
:
'wrong_position'
,
color
:
'#E6A23C'
,
title
:
'错误部位'
,
labers
,
list
,
};
},
//错误等级
changeErrorLevel
(
datas
)
{
if
(
!
datas
)
return
false
;
let
keys
=
Object
.
keys
(
datas
);
let
list
=
[];
let
labers
=
[
{
label
:
'等级'
,
key
:
'level'
},
{
label
:
'正确答案'
,
key
:
'answer'
},
{
label
:
'错题数量'
,
key
:
'wrong_num'
},
{
label
:
'错误答案内容'
,
key
:
'distribute'
},
];
keys
.
forEach
((
element
,
index
)
=>
{
list
.
push
({
level
:
element
,
answer
:
datas
[
element
].
answer
,
wrong_num
:
datas
[
element
].
wrong_num
,
distribute
:
datas
[
element
].
distribute
,
});
});
return
{
type
:
'table'
,
chart_id
:
'wrong_position'
,
color
:
'#505F79'
,
title
:
'错误等级'
,
labers
,
list
,
};
},
//错误颜色
changeWrongColor
(
datas
)
{
if
(
!
datas
)
return
false
;
let
keys
=
Object
.
keys
(
datas
);
let
list
=
[];
let
labers
=
[
{
label
:
'颜色'
,
key
:
'color'
},
{
label
:
'正确答案'
,
key
:
'answer'
},
{
label
:
'错题数量'
,
key
:
'wrong_num'
},
{
label
:
'错误答案内容'
,
key
:
'distribute'
},
];
keys
.
forEach
((
element
,
index
)
=>
{
list
.
push
({
color
:
element
,
answer
:
datas
[
element
].
answer
,
wrong_num
:
datas
[
element
].
wrong_num
,
distribute
:
datas
[
element
].
distribute
,
});
});
return
{
type
:
'table'
,
chart_id
:
'wrong_color'
,
color
:
'#99A9BF'
,
title
:
'错误颜色'
,
labers
,
list
,
};
},
//错误组别
changeWrongGroup
(
datas
)
{
if
(
!
datas
)
return
false
;
let
keys
=
Object
.
keys
(
datas
);
let
list
=
[];
let
labers
=
[
{
label
:
'组别'
,
key
:
'group'
},
{
label
:
'正确答案'
,
key
:
'answer'
},
{
label
:
'错题数量'
,
key
:
'wrong_num'
},
{
label
:
'错误答案内容'
,
key
:
'distribute'
},
];
keys
.
forEach
((
element
,
index
)
=>
{
list
.
push
({
group
:
element
,
answer
:
datas
[
element
].
answer
,
wrong_num
:
datas
[
element
].
wrong_num
,
distribute
:
datas
[
element
].
distribute
,
});
});
return
{
type
:
'table'
,
chart_id
:
'wrong_group'
,
color
:
'#529B2E'
,
title
:
'错误组别'
,
labers
,
list
,
};
},
}
}
</
script
>
<
style
lang=
"scss"
scoped
>
.box-card
{
margin-bottom
:
15px
;
}
.centenr_container
{
width
:
calc
(
100%
-
20px
);
margin
:
0
auto
;
}
.module_header
{
width
:
100%
;
box-sizing
:
border-box
;
padding
:
15px
0
15px
10px
;
font-size
:
20px
;
color
:
#333
;
}
.row_container
{
margin-bottom
:
15px
;
}
.unit_container
{
margin-bottom
:
15px
;
}
</
style
>
src/views/student/display_board/index.vue
0 → 100644
浏览文件 @
1b2e5eb5
<
template
>
<div
class=
"module_container"
>
<div
class=
"card_container"
>
<el-card
class=
"box-card"
>
<table-head
:head_data=
"head_data"
@
search=
"searchEvent"
@
resetting=
"resetting"
@
btnClick=
"btnClick"
></table-head>
<div
class=
"table_container"
>
<el-table
v-loading=
"is_loading"
:data=
"tableData"
style=
"width: 100%;margin-bottom: 20px;"
height=
"650"
>
<el-table-column
prop=
"id"
label=
"编号"
width=
"50"
></el-table-column>
<!--
<el-table-column
prop=
"remarks"
label=
"备注"
></el-table-column>
-->
<el-table-column
prop=
"found_user.name"
label=
"创建人"
width=
"110"
></el-table-column>
<el-table-column
prop=
"found_remark"
label=
"创建备注"
></el-table-column>
<el-table-column
prop=
"auditor_user.name"
label=
"审核人"
></el-table-column>
<el-table-column
prop=
"release_date"
label=
"发布日期"
></el-table-column>
<el-table-column
prop=
"created_at"
label=
"创建时间"
></el-table-column>
<el-table-column
prop=
"remarks"
label=
"备注"
></el-table-column>
<el-table-column
prop=
"status"
label=
"状态"
width=
"80"
>
<template
slot-scope=
"scope"
>
<el-tag
v-if=
"scope.row.status == 1"
type=
"success"
>
批阅完成
</el-tag>
<el-tag
v-if=
"scope.row.status == 2"
type=
"success"
>
审核通过
</el-tag>
<el-tag
v-if=
"scope.row.status == 3"
type=
"danger"
>
撤销发布
</el-tag>
</
template
>
</el-table-column>
<el-table-column
label=
"操作"
width=
"120"
>
<
template
slot-scope=
"scope"
>
<el-button
size=
"mini"
type=
"text"
style=
"color: #000;"
@
click=
"toDetail(scope.row)"
>
详情
</el-button>
<el-button
size=
"mini"
type=
"text"
style=
"color: #000;"
@
click=
"updateInformation(scope.row)"
>
编辑
</el-button>
<el-button
size=
"mini"
type=
"text"
style=
"color: #F56C6C;"
@
click=
"deleteInformation(scope.row)"
>
删除
</el-button>
</
template
>
</el-table-column>
</el-table>
</div>
<div
style=
"text-align: right;"
>
<el-pagination
@
current-change=
"handleCurrentChange"
:current-page
.
sync=
"request_params.page"
:page-size=
"request_params.limit"
layout=
"total, prev, pager, next"
:total=
"request_params.total"
>
</el-pagination>
</div>
</el-card>
</div>
<el-dialog
:title=
"is_updata_type == 'add' ? '新增' : '修改'"
:visible
.
sync=
"is_dialogVisible"
width=
"500px"
:before-close=
"handleClose"
:close-on-click-modal=
"false"
>
<div>
<el-form
label-width=
"80px"
>
<el-form-item
label=
"状态"
>
<el-radio-group
v-model=
"detailed_information.status"
>
<el-radio
:label=
"'1'"
>
<el-tag
type=
"success"
>
批阅完成
</el-tag>
</el-radio>
<el-radio
:label=
"'2'"
>
<el-tag
type=
"success"
>
审核通过
</el-tag>
</el-radio>
<el-radio
:label=
"'3'"
>
<el-tag
type=
"danger"
>
撤销发布
</el-tag>
</el-radio>
</el-radio-group>
</el-form-item>
<el-form-item
label=
"备注"
>
<el-input
type=
"textarea"
:rows=
"2"
placeholder=
"请输入内容"
v-model=
"detailed_information.remarks"
>
</el-input>
</el-form-item>
</el-form>
</div>
<span
slot=
"footer"
class=
"dialog-footer"
>
<el-button
@
click=
"handleClose"
>
取 消
</el-button>
<el-button
type=
"primary"
@
click=
"submitData"
>
确 定
</el-button>
</span>
</el-dialog>
</div>
</template>
<
script
>
import
TableHead
from
'@/components/TableHead/index'
;
import
{
get_student_list
,
add_student
,
delete_student
,
updat_student
,
get_student_detail
,
download_student_info
,
upload_student_info
}
from
'@/api/student'
;
import
{
get_read_over_list
,
updata_read_over
,
delete_read_over
}
from
'@/api/student'
;
const
standard_template
=
{
status
:
null
,
remarks
:
null
,
}
export
default
{
data
()
{
return
{
IP
:
process
.
env
.
VUE_APP_BASE_API
,
//头部按钮
head_data
:
{
search_placeholder
:
""
,
right_buttons
:
[
// {
// text: '新增',
// icon: 'el-icon-document-add',
// event: 'add',
// }
],
},
//初始化请求参数
request_params
:
{
val
:
''
,
page
:
1
,
limit
:
10
,
total
:
null
,
},
is_loading
:
false
,
tableData
:
[],
is_dialogVisible
:
false
,
is_updata_type
:
'add'
,
//详细信息
detailed_information
:
{},
};
},
components
:
{
TableHead
},
computed
:
{},
mounted
()
{
this
.
init
()
},
methods
:
{
searchEvent
(
val
)
{
this
.
request_params
.
val
=
val
;
this
.
getListData
();
},
resetting
(
val
)
{
this
.
request_params
.
val
=
''
;
this
.
getListData
();
},
btnClick
(
val
)
{
if
(
val
==
'add'
)
this
.
addInformation
();
},
init
()
{
this
.
getListData
();
},
//取消
handleClose
()
{
this
.
is_dialogVisible
=
false
;
},
//提交
submitData
()
{
console
.
log
(
'提交'
);
//updata_read_over
if
(
this
.
is_updata_type
==
'add'
)
{
}
else
{
let
id
=
this
.
detailed_information
.
id
;
let
data
=
this
.
$removeProperty
({
status
:
this
.
detailed_information
.
status
,
remarks
:
this
.
detailed_information
.
remarks
,
});
updata_read_over
(
id
,
data
).
then
(
res
=>
{
console
.
log
(
'修改'
);
console
.
log
(
res
);
if
(
res
.
code
==
200
)
{
this
.
is_dialogVisible
=
false
;
this
.
init
();
}
})
}
},
//获取列表数据
getListData
()
{
let
params
=
this
.
$removeProperty
(
this
.
request_params
);
this
.
is_loading
=
true
;
get_read_over_list
(
params
).
then
(
res
=>
{
console
.
log
(
'列表数据'
);
console
.
log
(
res
);
this
.
tableData
=
res
.
data
||
[];
this
.
request_params
.
total
=
res
.
total
;
this
.
is_loading
=
false
;
})
},
//分页
handleCurrentChange
(
val
)
{
this
.
request_params
.
page
=
val
;
this
.
getListData
();
},
//新增信息
addInformation
()
{
this
.
is_updata_type
=
'add'
;
this
.
detailed_information
=
{
...
standard_template
};
this
.
is_dialogVisible
=
true
;
},
//修改信息
updateInformation
(
item
)
{
this
.
is_updata_type
=
'edit'
;
let
id
=
item
.
id
;
//获取详情
this
.
detailed_information
=
{
...
item
};
this
.
is_dialogVisible
=
true
;
},
//删除
deleteInformation
(
item
)
{
let
id
=
item
.
id
;
this
.
$confirm
(
'此操作将永久删除该数据, 是否继续?'
,
'提示'
,
{
confirmButtonText
:
'确定'
,
cancelButtonText
:
'取消'
,
type
:
'warning'
}).
then
(()
=>
{
delete_read_over
(
id
).
then
(
res
=>
{
if
(
res
.
code
==
200
)
{
this
.
$message
.
success
(
res
.
message
);
this
.
init
();
}
})
}).
catch
(()
=>
{
this
.
$message
({
type
:
'info'
,
message
:
'已取消删除'
});
});
},
//跳转详情
toDetail
(
item
)
{
let
id
=
item
.
id
;
this
.
$router
.
push
({
path
:
'/student/display_board_detail'
,
query
:
{
id
:
id
}
})
}
},
}
</
script
>
<
style
lang=
"scss"
scoped
></
style
>
src/views/student/examination_questions/comment/index.vue
0 → 100644
浏览文件 @
1b2e5eb5
<!--
* @Author: czj
* @Date: 2023-03-20 16:23:53
* @Description:
* @FilePath: \AdministrationHome\src\views\student\examination_questions\comment\index.vue
-->
<
template
>
<div
class=
"module_container"
>
<div
class=
"card_container"
>
<el-card
class=
"box-card"
>
<Header
v-if=
"!is_loading"
:examination_questions=
"head_data"
@
btnClick=
"btnClick"
></Header>
</el-card>
<el-card
class=
"box-card"
>
<div>
<div
class=
"module_header"
>
得分情况
</div>
<div>
<el-row
class=
"row_container"
>
<el-col
:span=
"8"
>
<div
class=
"centenr_container"
>
<AnalyseModule
:module_data=
"result_section"
v-if=
"result_section"
@
changeSelect=
"changeSelects"
>
</AnalyseModule>
</div>
</el-col>
<el-col
:span=
"8"
>
<div
class=
"centenr_container"
>
<AnalyseModule
:module_data=
"area_score"
v-if=
"area_score"
@
changeSelect=
"changeSelects"
>
</AnalyseModule>
</div>
</el-col>
<el-col
:span=
"8"
>
<div
class=
"centenr_container"
>
<AnalyseModule
:module_data=
"province_score"
v-if=
"province_score"
@
changeSelect=
"changeSelects"
>
</AnalyseModule>
</div>
</el-col>
</el-row>
<el-row
class=
"row_container"
>
<el-col
:span=
"8"
>
<div
class=
"centenr_container"
>
<AnalyseModule
:module_data=
"breed_score"
v-if=
"breed_score"
@
changeSelect=
"changeSelects"
>
</AnalyseModule>
</div>
</el-col>
<el-col
:span=
"8"
>
<div
class=
"centenr_container"
>
<AnalyseModule
:module_data=
"get_highes_lowestt_score_data"
v-if=
"get_highes_lowestt_score_data"
@
changeSelect=
"changeSelects"
>
</AnalyseModule>
</div>
</el-col>
</el-row>
</div>
</div>
<div>
<div
class=
"module_header"
>
<el-row>
<el-col
:span=
"12"
>
<div>
易错、对等级分析
</div>
</el-col>
<el-col
:span=
"12"
style=
"text-align: right;"
>
<el-checkbox
v-model=
"request_params.is_top_data"
>
{{
request_params
.
is_top_data
?
'显示'
:
'隐藏'
}}
</el-checkbox>
</el-col>
</el-row>
</div>
<div>
<el-row
class=
"row_container"
>
<el-col
:span=
"12"
>
<div
class=
"top_input_box"
@
keyup
.
enter=
"enterSearch"
>
<el-input
class=
"input_box"
v-model=
"request_params.top.error_top"
></el-input>
<el-input
class=
"input_box"
v-model=
"request_params.top.error_region_max"
></el-input>
<el-input
class=
"input_box"
v-model=
"request_params.top.error_region_min"
></el-input>
</div>
<div
class=
"centenr_container"
>
<AnalyseModule
:module_data=
"wrong_question_data"
v-if=
"wrong_question_data"
></AnalyseModule>
</div>
</el-col>
<el-col
:span=
"12"
>
<div
class=
"top_input_box"
@
keyup
.
enter=
"enterSearch"
>
<el-input
class=
"input_box"
v-model=
"request_params.top.success_top"
></el-input>
<el-input
class=
"input_box"
v-model=
"request_params.top.success_region_max"
></el-input>
<el-input
class=
"input_box"
v-model=
"request_params.top.success_region_min"
></el-input>
</div>
<div
class=
"centenr_container"
>
<AnalyseModule
:module_data=
"exactness_question_data"
v-if=
"exactness_question_data"
></AnalyseModule>
</div>
</el-col>
</el-row>
</div>
</div>
<div>
<div>
<el-row
class=
"row_container"
>
<el-col
:span=
"12"
>
<div
class=
"module_header"
>
错误部位
</div>
<div
class=
"centenr_container"
>
<AnalyseModule
:module_data=
"wrong_position_data"
v-if=
"wrong_position_data"
@
changeSelect=
"changeSelects"
></AnalyseModule>
</div>
</el-col>
<el-col
:span=
"12"
>
<div
class=
"module_header"
>
错误等级
</div>
<div
class=
"centenr_container"
>
<AnalyseModule
:module_data=
"error_level_data"
v-if=
"error_level_data"
@
changeSelect=
"changeSelects"
>
</AnalyseModule>
</div>
</el-col>
</el-row>
</div>
</div>
<div>
<div>
<el-row
class=
"row_container"
>
<el-col
:span=
"12"
>
<div
class=
"module_header"
>
错误颜色
</div>
<div
class=
"centenr_container"
>
<AnalyseModule
:module_data=
"wrong_color_data"
v-if=
"wrong_color_data"
@
changeSelect=
"changeSelects"
>
</AnalyseModule>
</div>
</el-col>
<el-col
:span=
"12"
>
<div
class=
"module_header"
>
错误组别
</div>
<div
class=
"centenr_container"
>
<AnalyseModule
:module_data=
"wrongG_group_data"
v-if=
"wrongG_group_data"
@
changeSelect=
"changeSelects"
>
</AnalyseModule>
</div>
</el-col>
</el-row>
</div>
</div>
<div>
<div
class=
"module_header"
>
老师点评
</div>
<div
style=
"padding: 0 10px;box-sizing: border-box;"
>
<el-input
type=
"textarea"
:rows=
"6"
placeholder=
"请输入内容"
>
</el-input>
</div>
</div>
</el-card>
</div>
</div>
</
template
>
<
script
>
import
Header
from
'@/components/ExaminationHeader/succinct.vue'
;
import
AnalyseModule
from
'@/components/AnalyseModule/index.vue'
;
import
{
get_test_results_count
,
save_read_over_data
}
from
'@/api/student'
;
import
{
toPercent
}
from
'@/utils/tool'
;
import
{
Level
}
from
'chalk'
;
const
standard_template
=
{
}
export
default
{
data
()
{
return
{
IP
:
process
.
env
.
VUE_APP_BASE_API
,
is_loading
:
false
,
//头部数据
head_data
:
{
title
:
null
,
right_buttons
:
[
{
text
:
'审核通过'
,
icon
:
'el-icon-document-checked'
,
event
:
'check'
,
},
{
text
:
'保存'
,
icon
:
'el-icon-plus'
,
event
:
'save'
,
}
],
},
//初始化请求参数
request_params
:
{
is_StudentStatistics
:
true
,
is_ScoreScore
:
true
,
is_AreaScore
:
true
,
is_ProvinceScore
:
true
,
is_breedScore
:
true
,
is_getHighesLowesttScore
:
true
,
is_top_data
:
true
,
is_WrongPosition
:
true
,
is_ErrorLevel
:
true
,
is_WrongColor
:
true
,
is_WrongGroup
:
true
,
is_EyeStability
:
true
,
id
:
[
14
,
16
],
ScoreScore
:
[
"100"
,
"80"
,
"70"
,
"60"
],
is_top
:
true
,
top
:
{
error_top
:
10
,
error_region_max
:
101
,
error_region_min
:
0
,
success_top
:
10
,
success_region_max
:
100
,
success_region_min
:
10
}
},
is_loading
:
false
,
tableData
:
[],
is_dialogVisible
:
false
,
is_updata_type
:
'add'
,
//详细信息
detailed_information
:
{},
//成绩分段
result_section
:
null
,
//区域得分
area_score
:
null
,
//省区得分情况
province_score
:
null
,
//品种得分
breed_score
:
null
,
//最高成绩..
get_highes_lowestt_score_data
:
null
,
//对错题分析
wrong_question_data
:
null
,
exactness_question_data
:
null
,
//错误部位
wrong_position_data
:
null
,
//错误等级
error_level_data
:
null
,
//错误颜色
wrong_color_data
:
null
,
//错误组别
wrongG_group_data
:
null
,
};
},
components
:
{
Header
,
AnalyseModule
},
computed
:
{},
created
()
{
let
ids
=
localStorage
.
getItem
(
'examination_questions_ids'
);
console
.
log
(
ids
);
this
.
request_params
.
id
=
ids
.
split
(
","
);
},
mounted
()
{
this
.
init
()
},
destroyed
()
{
// localStorage.removeItem("examination_questions_ids");
},
methods
:
{
init
()
{
this
.
getListData
();
},
btnClick
(
val
)
{
console
.
log
(
'右侧按钮'
);
console
.
log
(
val
);
//saveExaminationQuestions
if
(
val
==
'save'
)
this
.
saveExaminationQuestions
();
},
getListData
()
{
let
keys
=
[
'result_section'
,
'area_score'
,
'province_score'
,
'breed_score'
,
'get_highes_lowestt_score_data'
,
'wrong_question_data'
,
'exactness_question_data'
,
'wrong_position_data'
,
'error_level_data'
,
'wrong_color_data'
,
'wrongG_group_data'
];
keys
.
forEach
(
element
=>
{
this
[
element
]
=
null
;
});
this
.
is_loading
=
true
;
get_test_results_count
(
this
.
request_params
).
then
(
res
=>
{
console
.
log
(
'统计数据'
);
console
.
log
(
res
);
this
.
is_loading
=
false
;
this
.
head_data
.
title
=
res
.
EyeStability
.
title
;
//标题
this
.
result_section
=
this
.
changeScore
(
res
.
ScoreScore
);
//成绩分段
this
.
area_score
=
this
.
changeAreaScore
(
res
.
AreaScore
);
//南北方得分
this
.
province_score
=
this
.
changeProvinceScore
(
res
.
ProvinceScore
);
//省区得分
this
.
breed_score
=
this
.
changeBreedScore
(
res
.
breedScore
);
//品种得分
//最高分、最低分、平均分,中位数、众数、离散(变异系数)
this
.
get_highes_lowestt_score_data
=
this
.
getHighesLowesttScore
(
res
.
getHighesLowesttScore
);
//对错题分析
if
(
res
.
top_data
)
this
.
wrong_question_data
=
this
.
changeWrong
(
res
.
top_data
.
datadesc
);
//错题分析
if
(
res
.
top_data
)
this
.
exactness_question_data
=
this
.
changeRight
(
res
.
top_data
.
dataasc
);
//对题分析
this
.
wrong_position_data
=
this
.
changeWrongPosition
(
res
.
WrongPosition
);
//错误部位
this
.
error_level_data
=
this
.
changeErrorLevel
(
res
.
ErrorLevel
);
//错误等级
this
.
wrong_color_data
=
this
.
changeWrongColor
(
res
.
WrongColor
);
//错误颜色
this
.
wrongG_group_data
=
this
.
changeWrongGroup
(
res
.
WrongGroup
);
//错误组别
})
},
//百分比
toPercent
,
//处理分段值
changeScore
(
datas
)
{
if
(
!
datas
)
return
false
;
let
keys
=
Object
.
keys
(
datas
);
let
list
=
[];
let
data
=
[];
let
num
=
0
;
for
(
const
key
in
datas
)
{
num
+=
datas
[
key
];
}
let
labers
=
[
{
label
:
'分类'
,
key
:
'classify'
},
{
label
:
'分数段'
,
key
:
'score'
},
{
label
:
'人数'
,
key
:
'people'
},
{
label
:
'占比'
,
key
:
'proportion'
},
];
keys
.
forEach
(
element
=>
{
let
scores
=
element
.
split
(
'~'
);
data
.
push
(
datas
[
element
]);
let
obj
=
{
classify
:
element
,
score
:
scores
[
0
],
people
:
datas
[
element
],
proportion
:
this
.
toPercent
(
datas
[
element
],
num
)
}
list
.
push
(
obj
);
});
return
{
type
:
'table'
,
chart_id
:
'result_section'
,
color
:
'#39c183f0'
,
title
:
'成绩分段值'
,
labers
,
list
,
data
,
is_show
:
{
key
:
'is_ScoreScore'
,
value
:
this
.
request_params
.
is_ScoreScore
}
};
},
//南方烟北方烟得分情况
changeAreaScore
(
datas
)
{
if
(
!
datas
)
return
false
;
let
keys
=
Object
.
keys
(
datas
);
let
labers
=
[
{
label
:
'分数'
,
key
:
'ScoreScore'
},
{
label
:
'总分'
,
key
:
'assemble'
},
{
label
:
'人数'
,
key
:
'student_num'
},
];
return
{
type
:
"bar"
,
chart_id
:
'bar_chart'
,
color
:
'#E6A23C'
,
title
:
'南方北方烟得分情况'
,
labers
,
keys
,
raw_data
:
datas
,
is_show
:
{
key
:
'is_AreaScore'
,
value
:
this
.
request_params
.
is_AreaScore
}
// keys: ['南方', '北方', '西部'],
// raw_data: {
// '南方': {
// ScoreScore: 11,
// assemble: 106,
// student_num: 3,
// },
// '北方': {
// ScoreScore: 30,
// assemble: 126,
// student_num: 21,
// },
// '西部': {
// ScoreScore: 25,
// assemble: 116,
// student_num: 7,
// },
// }
};
},
//省区得分数据处理
changeProvinceScore
(
datas
)
{
if
(
!
datas
)
return
false
;
let
keys
=
Object
.
keys
(
datas
);
let
labers
=
[
{
label
:
'分数'
,
key
:
'ScoreScore'
},
{
label
:
'总分'
,
key
:
'assemble'
},
{
label
:
'人数'
,
key
:
'student_num'
},
];
return
{
type
:
"bar"
,
chart_id
:
'province_bar_chart'
,
color
:
'#505F79'
,
title
:
'省级产区得分情况'
,
labers
,
keys
,
raw_data
:
datas
,
is_show
:
{
key
:
'is_ProvinceScore'
,
value
:
this
.
request_params
.
is_ProvinceScore
}
};
},
//品种得分情况
changeBreedScore
(
datas
)
{
if
(
!
datas
)
return
false
;
let
keys
=
Object
.
keys
(
datas
);
let
labers
=
[
{
label
:
'分数'
,
key
:
'ScoreScore'
},
{
label
:
'总分'
,
key
:
'assemble'
},
{
label
:
'人数'
,
key
:
'student_num'
},
];
return
{
type
:
"bar"
,
chart_id
:
'breed_bar_chart'
,
color
:
'#39c183f0'
,
title
:
'品种得分情况'
,
labers
,
keys
,
raw_data
:
datas
,
is_show
:
{
key
:
'is_breedScore'
,
value
:
this
.
request_params
.
is_breedScore
}
};
},
//最高分、最低分、平均分,中位数、众数、离散(变异系数)
getHighesLowesttScore
(
datas
)
{
if
(
!
datas
)
return
false
;
let
labers
=
[
{
label
:
'最高成绩'
,
key
:
'max'
},
{
label
:
'最低成绩'
,
key
:
'min'
},
{
label
:
'平均成绩'
,
key
:
'average'
},
{
label
:
'中位数'
,
key
:
'median'
},
{
label
:
'众数'
,
key
:
'mode'
},
{
label
:
'变异系数'
,
key
:
'cov'
},
];
return
{
type
:
'simple_table'
,
chart_id
:
'HighesLowesttScore_table'
,
color
:
'#99A9BF'
,
title
:
'最高分、最低分、平均分,中位数、众数、离散(变异系数)'
,
labers
,
data
:
datas
,
is_show
:
{
key
:
'is_getHighesLowesttScore'
,
value
:
this
.
request_params
.
is_getHighesLowesttScore
}
}
},
//易错/易对 等级分析
changeWrong
(
datas
)
{
if
(
!
datas
)
return
false
;
let
list
=
[];
let
labers
=
[
{
label
:
'序号'
,
key
:
'index'
},
{
label
:
'题目'
,
key
:
'title'
},
{
label
:
'结果'
,
key
:
'result'
},
{
label
:
'错误率'
,
key
:
'errorRate'
},
{
label
:
'错误结果'
,
key
:
'distribute'
},
];
datas
.
forEach
((
element
,
index
)
=>
{
list
.
push
({
index
:
index
+
1
,
title
:
element
.
title
,
result
:
element
.
result
,
errorRate
:
`
${
element
.
errorRate
}
%`
,
distribute
:
element
.
distribute
});
});
return
{
type
:
'table'
,
chart_id
:
'wrong_table'
,
color
:
'#F56C6C'
,
title
:
'易错题分析'
,
labers
,
list
,
// is_show: {
// key: 'is_top_data',
// value: this.request_params.is_top_data
// }
};
},
//易对题分析
changeRight
(
datas
)
{
if
(
!
datas
)
return
false
;
let
list
=
[];
let
labers
=
[
{
label
:
'序号'
,
key
:
'index'
},
{
label
:
'题目'
,
key
:
'title'
},
{
label
:
'结果'
,
key
:
'result'
},
{
label
:
'正确率'
,
key
:
'errorRate'
},
];
datas
.
forEach
((
element
,
index
)
=>
{
list
.
push
({
index
:
index
+
1
,
title
:
element
.
title
,
result
:
element
.
result
,
errorRate
:
`
${
100
-
element
.
errorRate
}
%`
,
});
});
return
{
type
:
'table'
,
chart_id
:
'wrong_table'
,
color
:
'#529B2E'
,
title
:
'易对题分析'
,
labers
,
list
};
},
//错误部位
changeWrongPosition
(
datas
)
{
if
(
!
datas
)
return
false
;
let
keys
=
Object
.
keys
(
datas
);
let
list
=
[];
let
labers
=
[
{
label
:
'部位'
,
key
:
'position'
},
{
label
:
'正确答案'
,
key
:
'answer'
},
{
label
:
'错题数量'
,
key
:
'wrong_num'
},
{
label
:
'错误答案内容'
,
key
:
'distribute'
},
];
keys
.
forEach
((
element
,
index
)
=>
{
list
.
push
({
position
:
element
,
answer
:
datas
[
element
].
answer
,
wrong_num
:
datas
[
element
].
wrong_num
,
distribute
:
datas
[
element
].
distribute
,
});
});
return
{
type
:
'table'
,
chart_id
:
'wrong_position'
,
color
:
'#E6A23C'
,
title
:
'错误部位'
,
labers
,
list
,
is_show
:
{
key
:
'is_WrongPosition'
,
value
:
this
.
request_params
.
is_WrongPosition
}
};
},
//错误等级
changeErrorLevel
(
datas
)
{
if
(
!
datas
)
return
false
;
let
keys
=
Object
.
keys
(
datas
);
let
list
=
[];
let
labers
=
[
{
label
:
'等级'
,
key
:
'level'
},
{
label
:
'正确答案'
,
key
:
'answer'
},
{
label
:
'错题数量'
,
key
:
'wrong_num'
},
{
label
:
'错误答案内容'
,
key
:
'distribute'
},
];
keys
.
forEach
((
element
,
index
)
=>
{
list
.
push
({
level
:
element
,
answer
:
datas
[
element
].
answer
,
wrong_num
:
datas
[
element
].
wrong_num
,
distribute
:
datas
[
element
].
distribute
,
});
});
return
{
type
:
'table'
,
chart_id
:
'wrong_position'
,
color
:
'#505F79'
,
title
:
'错误等级'
,
labers
,
list
,
is_show
:
{
key
:
'is_ErrorLevel'
,
value
:
this
.
request_params
.
is_ErrorLevel
}
};
},
//错误颜色
changeWrongColor
(
datas
)
{
if
(
!
datas
)
return
false
;
let
keys
=
Object
.
keys
(
datas
);
let
list
=
[];
let
labers
=
[
{
label
:
'颜色'
,
key
:
'color'
},
{
label
:
'正确答案'
,
key
:
'answer'
},
{
label
:
'错题数量'
,
key
:
'wrong_num'
},
{
label
:
'错误答案内容'
,
key
:
'distribute'
},
];
keys
.
forEach
((
element
,
index
)
=>
{
list
.
push
({
color
:
element
,
answer
:
datas
[
element
].
answer
,
wrong_num
:
datas
[
element
].
wrong_num
,
distribute
:
datas
[
element
].
distribute
,
});
});
return
{
type
:
'table'
,
chart_id
:
'wrong_color'
,
color
:
'#99A9BF'
,
title
:
'错误颜色'
,
labers
,
list
,
is_show
:
{
key
:
'is_WrongColor'
,
value
:
this
.
request_params
.
is_WrongColor
}
};
},
//错误组别
changeWrongGroup
(
datas
)
{
if
(
!
datas
)
return
false
;
let
keys
=
Object
.
keys
(
datas
);
let
list
=
[];
let
labers
=
[
{
label
:
'组别'
,
key
:
'group'
},
{
label
:
'正确答案'
,
key
:
'answer'
},
{
label
:
'错题数量'
,
key
:
'wrong_num'
},
{
label
:
'错误答案内容'
,
key
:
'distribute'
},
];
keys
.
forEach
((
element
,
index
)
=>
{
list
.
push
({
group
:
element
,
answer
:
datas
[
element
].
answer
,
wrong_num
:
datas
[
element
].
wrong_num
,
distribute
:
datas
[
element
].
distribute
,
});
});
return
{
type
:
'table'
,
chart_id
:
'wrong_group'
,
color
:
'#529B2E'
,
title
:
'错误组别'
,
labers
,
list
,
is_show
:
{
key
:
'is_WrongGroup'
,
value
:
this
.
request_params
.
is_WrongGroup
}
};
},
//过滤
enterSearch
(
event
)
{
console
.
log
(
'触发回车'
);
console
.
log
(
event
);
this
.
getListData
();
},
//保存
saveExaminationQuestions
()
{
let
params
=
this
.
$removeProperty
(
this
.
request_params
);
save_read_over_data
(
params
).
then
(
res
=>
{
console
.
log
(
'保存回调'
);
console
.
log
(
res
);
if
(
res
.
code
==
200
)
{
this
.
$message
.
success
(
res
.
message
);
}
})
},
//是否显示模块
changeSelects
(
val
)
{
this
.
request_params
[
val
.
key
]
=
val
.
value
;
},
},
}
</
script
>
<
style
lang=
"scss"
scoped
>
.centenr_container
{
width
:
calc
(
100%
-
20px
);
margin
:
0
auto
;
}
.box-card
{
margin-bottom
:
15px
;
}
.row_container
{
margin-bottom
:
15px
;
}
.module_header
{
width
:
100%
;
box-sizing
:
border-box
;
padding
:
15px
0
15px
10px
;
font-size
:
20px
;
color
:
#333
;
}
.top_input_box
{
padding
:
0
10px
;
box-sizing
:
border-box
;
display
:
flex
;
justify-content
:
space-between
;
align-items
:
center
;
margin-bottom
:
10px
;
.input_box
{
width
:
30%
;
}
}
</
style
>
src/views/student/examination_questions/list/index.vue
浏览文件 @
1b2e5eb5
...
@@ -5,7 +5,9 @@
...
@@ -5,7 +5,9 @@
<el-card
class=
"box-card"
>
<el-card
class=
"box-card"
>
<table-head
:head_data=
"head_data"
@
search=
"searchEvent"
@
resetting=
"resetting"
@
btnClick=
"btnClick"
></table-head>
<table-head
:head_data=
"head_data"
@
search=
"searchEvent"
@
resetting=
"resetting"
@
btnClick=
"btnClick"
></table-head>
<div
class=
"table_container"
>
<div
class=
"table_container"
>
<el-table
v-loading=
"is_loading"
:data=
"tableData"
style=
"width: 100%;margin-bottom: 20px;"
height=
"650"
>
<el-table
v-loading=
"is_loading"
:data=
"tableData"
style=
"width: 100%;margin-bottom: 20px;"
height=
"650"
@
selection-change=
"handleSelectionChange"
>
<el-table-column
type=
"selection"
width=
"55"
></el-table-column>
<el-table-column
prop=
"id"
label=
"编号"
width=
"50"
>
<el-table-column
prop=
"id"
label=
"编号"
width=
"50"
>
</el-table-column>
</el-table-column>
<el-table-column
prop=
"title"
label=
"考试标题"
>
<el-table-column
prop=
"title"
label=
"考试标题"
>
...
@@ -48,16 +50,10 @@
...
@@ -48,16 +50,10 @@
<
template
slot-scope=
"scope"
>
<
template
slot-scope=
"scope"
>
<el-button
size=
"mini"
type=
"text"
style=
"color: #000;"
v-if=
"scope.row.status != '6'"
<el-button
size=
"mini"
type=
"text"
style=
"color: #000;"
v-if=
"scope.row.status != '6'"
@
click=
"updateInformation(scope.row)"
>
修改
</el-button>
@
click=
"updateInformation(scope.row)"
>
修改
</el-button>
<!--
<el-button
size=
"mini"
type=
"text"
style=
"color: #000;"
@
click=
"commentJump(scope.row)"
>
配置
</el-button>
-->
<el-button
size=
"mini"
type=
"text"
style=
"color: #000;"
title=
"试题复制"
<el-button
size=
"mini"
type=
"text"
style=
"color: #000;"
title=
"试题复制"
@
click=
"examinationQuestionsCopy(scope.row)"
>
复制
</el-button>
@
click=
"examinationQuestionsCopy(scope.row)"
>
复制
</el-button>
<el-button
v-if=
"scope.row.status != '6'"
size=
"mini"
type=
"text"
style=
"color: #000;margin-right: 15px;"
<el-button
v-if=
"scope.row.status != '6'"
size=
"mini"
type=
"text"
style=
"color: #000;margin-right: 15px;"
@
click=
"createAnswerCard(scope.row)"
title=
"生成答题卡"
>
下载
</el-button>
@
click=
"createAnswerCard(scope.row)"
title=
"生成答题卡"
>
下载
</el-button>
<!--
<el-button
v-if=
"scope.row.status == '1'"
size=
"mini"
type=
"text"
style=
"color: #000;"
@
click=
"examinationQuestionsPublish(scope.row)"
title=
"试题发布"
>
发布
</el-button>
<el-button
v-if=
"scope.row.status != '6'"
size=
"mini"
type=
"text"
style=
"color: #F56C6C;"
@
click=
"deleteInformation(scope.row)"
>
停用
</el-button>
-->
<el-popover
placement=
"right"
width=
"160"
>
<el-popover
placement=
"right"
width=
"160"
>
<div>
<div>
<el-radio-group
v-model=
"status_params.status"
>
<el-radio-group
v-model=
"status_params.status"
>
...
@@ -74,6 +70,9 @@
...
@@ -74,6 +70,9 @@
</div>
</div>
<el-button
slot=
"reference"
type=
"text"
size=
"mini"
@
click=
"setStatusParams(scope.row)"
>
设置状态
</el-button>
<el-button
slot=
"reference"
type=
"text"
size=
"mini"
@
click=
"setStatusParams(scope.row)"
>
设置状态
</el-button>
</el-popover>
</el-popover>
<el-button
type=
"text"
size=
"mini"
style=
"color: #000;margin-left: 15px;"
@
click=
"comment(scope.row)"
>
批阅
</el-button>
</
template
>
</
template
>
</el-table-column>
</el-table-column>
</el-table>
</el-table>
...
@@ -86,7 +85,7 @@
...
@@ -86,7 +85,7 @@
</el-card>
</el-card>
</div>
</div>
<el-dialog
:title=
"is_updata_type == 'add' ? '新增考试' : '修改考试'"
:visible
.
sync=
"is_dialogVisible"
width=
"
60%
"
<el-dialog
:title=
"is_updata_type == 'add' ? '新增考试' : '修改考试'"
:visible
.
sync=
"is_dialogVisible"
width=
"
900px
"
:before-close=
"handleClose"
>
:before-close=
"handleClose"
>
<div>
<div>
<el-form
label-width=
"100px"
>
<el-form
label-width=
"100px"
>
...
@@ -222,7 +221,7 @@ export default {
...
@@ -222,7 +221,7 @@ export default {
event
:
'add'
,
event
:
'add'
,
},
},
{
{
text
:
'
总评
'
,
text
:
'
批阅
'
,
icon
:
'el-icon-data-analysis'
,
icon
:
'el-icon-data-analysis'
,
event
:
'analysis'
,
event
:
'analysis'
,
},
},
...
@@ -248,7 +247,6 @@ export default {
...
@@ -248,7 +247,6 @@ export default {
//详细信息
//详细信息
detailed_information
:
{},
detailed_information
:
{},
//预约
//预约
is_reservation
:
false
,
is_reservation
:
false
,
//全部学生
//全部学生
...
@@ -262,20 +260,23 @@ export default {
...
@@ -262,20 +260,23 @@ export default {
},
},
//批量预约文件
//批量预约文件
batch_reservation_file
:
{},
batch_reservation_file
:
{},
is_popover_show
:
false
,
is_popover_show
:
false
,
status_params
:
{
status_params
:
{
id
:
null
,
id
:
null
,
status
:
null
,
status
:
null
,
},
},
//多选ids
select_ids
:
[],
};
};
},
},
components
:
{
TableHead
},
components
:
{
TableHead
},
computed
:
{},
computed
:
{},
created
()
{
localStorage
.
removeItem
(
"examination_questions_ids"
);
},
mounted
()
{
mounted
()
{
this
.
init
()
this
.
init
()
},
},
...
@@ -298,6 +299,7 @@ export default {
...
@@ -298,6 +299,7 @@ export default {
console
.
log
(
val
);
console
.
log
(
val
);
if
(
val
==
'add'
)
this
.
addInformation
();
if
(
val
==
'add'
)
this
.
addInformation
();
if
(
val
==
'reservation'
)
this
.
reservationFun
();
if
(
val
==
'reservation'
)
this
.
reservationFun
();
if
(
val
==
'analysis'
)
this
.
comment
(
null
);
},
},
init
()
{
init
()
{
...
@@ -442,7 +444,6 @@ export default {
...
@@ -442,7 +444,6 @@ export default {
const
{
id
,
status
}
=
data
;
const
{
id
,
status
}
=
data
;
this
.
status_params
=
{
id
,
status
};
this
.
status_params
=
{
id
,
status
};
},
},
//修改状态
//修改状态
updataExaminationQuestionsStatus
()
{
updataExaminationQuestionsStatus
()
{
let
id
=
this
.
status_params
.
id
;
let
id
=
this
.
status_params
.
id
;
...
@@ -458,10 +459,7 @@ export default {
...
@@ -458,10 +459,7 @@ export default {
}
}
})
})
},
},
//预约点击
//预约点击
//is_reservation
reservationFun
()
{
reservationFun
()
{
//获取全部试题
//获取全部试题
get_examination_questions_all
().
then
(
res
=>
{
get_examination_questions_all
().
then
(
res
=>
{
...
@@ -509,7 +507,29 @@ export default {
...
@@ -509,7 +507,29 @@ export default {
this
.
$message
.
warning
(
'请选择试题!'
);
this
.
$message
.
warning
(
'请选择试题!'
);
}
}
},
},
//表格多选监听
handleSelectionChange
(
val
)
{
console
.
log
(
'val'
);
console
.
log
(
val
);
this
.
select_ids
=
val
.
map
(
e
=>
{
return
e
.
id
;
})
},
//行 点评 点击
comment
(
item
)
{
if
(
item
)
{
let
ids
=
[
item
.
id
];
localStorage
.
setItem
(
'examination_questions_ids'
,
ids
);
this
.
$router
.
push
({
path
:
'/student/examination_questions_comment'
,
})
}
else
{
if
(
this
.
select_ids
.
length
>
0
)
{
localStorage
.
setItem
(
'examination_questions_ids'
,
this
.
select_ids
);
this
.
$router
.
push
({
path
:
'/student/examination_questions_comment'
,
})
}
else
{
this
.
$message
.
warning
(
'请选择数据!'
);
}
}
},
},
},
...
...
src/views/student/personnel/index.vue
浏览文件 @
1b2e5eb5
...
@@ -116,7 +116,7 @@
...
@@ -116,7 +116,7 @@
<el-row>
<el-row>
<el-col
:span=
"12"
>
<el-col
:span=
"12"
>
<el-form-item
label=
"证件号"
>
<el-form-item
label=
"证件号"
>
<el-input
v-model=
"detailed_information.idcard"
placeholder=
"证件号"
type=
"number"
<el-input
v-model=
"detailed_information.idcard"
placeholder=
"证件号"
:disabled=
"is_updata_type == 'view'"
></el-input>
:disabled=
"is_updata_type == 'view'"
></el-input>
</el-form-item>
</el-form-item>
</el-col>
</el-col>
...
@@ -153,14 +153,20 @@
...
@@ -153,14 +153,20 @@
</el-form-item>
</el-form-item>
</el-col>
</el-col>
<el-col
:span=
"12"
>
<el-col
:span=
"12"
>
<el-form-item
label=
"
备注
"
>
<el-form-item
label=
"
密码
"
>
<el-input
v-model=
"detailed_information.
remark"
placeholder=
"备注"
type=
"textarea"
:rows=
"2
"
<el-input
v-model=
"detailed_information.
password"
placeholder=
"密码
"
:disabled=
"is_updata_type == 'view'"
></el-input>
:disabled=
"is_updata_type == 'view'"
></el-input>
</el-form-item>
</el-form-item>
</el-col>
</el-col>
</el-row>
</el-row>
<el-row>
<el-row>
<el-col
:span=
"24"
>
<el-col
:span=
"12"
>
<el-form-item
label=
"备注"
>
<el-input
v-model=
"detailed_information.remark"
placeholder=
"备注"
type=
"textarea"
:rows=
"2"
:disabled=
"is_updata_type == 'view'"
></el-input>
</el-form-item>
</el-col>
<el-col
:span=
"12"
>
<el-form-item
label=
"简介"
>
<el-form-item
label=
"简介"
>
<el-input
v-model=
"detailed_information.brief_introduction"
placeholder=
"简介"
type=
"textarea"
:rows=
"2"
<el-input
v-model=
"detailed_information.brief_introduction"
placeholder=
"简介"
type=
"textarea"
:rows=
"2"
:disabled=
"is_updata_type == 'view'"
></el-input>
:disabled=
"is_updata_type == 'view'"
></el-input>
...
@@ -183,6 +189,7 @@ import { get_province_list, get_student_list, add_student, delete_student, updat
...
@@ -183,6 +189,7 @@ import { get_province_list, get_student_list, add_student, delete_student, updat
import
{
exportText
}
from
'@/utils/tool.js'
;
import
{
exportText
}
from
'@/utils/tool.js'
;
const
standard_template
=
{
const
standard_template
=
{
name
:
""
,
name
:
""
,
password
:
''
,
sex
:
null
,
sex
:
null
,
age
:
null
,
age
:
null
,
native_place
:
null
,
native_place
:
null
,
...
...
编写
预览
Markdown
格式
0%
重试
或
添加新文件
添加附件
取消
您添加了
0
人
到此讨论。请谨慎行事。
请先完成此评论的编辑!
取消
请
注册
或者
登录
后发表评论