提交 1b2e5eb5 authored 作者: wangjialong209's avatar wangjialong209

统计数据

上级 a8e19621
...@@ -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',
})
}
<!-- -->
<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>
<!-- -->
<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>
<!--
* @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>
<!--
* @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>
<!--
* @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>
<!--
* @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>
...@@ -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>
...@@ -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
/** /**
......
...@@ -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;
} }
/* 选框颜色 */
: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}
...@@ -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;
} }
} }
...@@ -319,3 +320,5 @@ aside { ...@@ -319,3 +320,5 @@ aside {
margin-left: 8px; margin-left: 8px;
margin-top: -3px; margin-top: -3px;
} }
/* 选框颜色 */
...@@ -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 + "%");// 小数点后两位百分比
}
...@@ -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;
......
...@@ -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="650"> <el-table v-loading="is_loading" :data="tableData" style="width: 100%;margin-bottom: 20px;" height="600">
<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%;
......
<!--
* @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>
<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>
<!--
* @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>
...@@ -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('请选择数据!');
}
}
},
}, },
......
...@@ -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 人 到此讨论。请谨慎行事。
请先完成此评论的编辑!
请 注册 或者 后发表评论