提交 75194a47 authored 作者: wangjialong209's avatar wangjialong209

功能完善

上级 9515b188
......@@ -23,7 +23,7 @@
"crypto-js": "^4.1.1",
"driver.js": "0.9.5",
"dropzone": "5.5.1",
"echarts": "4.2.1",
"echarts": "^4.2.1",
"element-ui": "2.13.2",
"file-saver": "2.0.1",
"fuse.js": "3.4.4",
......
......@@ -130,6 +130,16 @@ export function updata_examination_questions(id, data) {
data
})
}
//试题信息管理-试题发布(状态修改)
export function updata_examination_questions_status(id, params) {
return request({
url: `/api/examination_questions/publish/${id}`,
method: 'get',
params
})
}
//试题信息管理-详情
export function get_examination_questions_detail(id, params) {
return request({
......
......@@ -40,7 +40,8 @@
</el-card>
</div>
<el-dialog title="提示" :visible.sync="is_dialogVisible" width="60%" :before-close="handleClose">
<el-dialog title="提示" :visible.sync="is_dialogVisible" width="60%" :before-close="handleClose"
:close-on-click-modal="false">
<div>
</div>
......
<!-- -->
<template>
<div>
<!-- <el-menu :default-active="activeMenu" class="el-menu-demo" mode="horizontal" @select="handleSelect">
<menu-item v-for="(item, index) in permission_routes" :key="index" :item_data="item"
:base_path="item.path"></menu-item>
</el-menu> -->
<el-menu :default-active="activeMenu" class="el-menu-demo" mode="horizontal" @select="handleSelect">
<el-menu-item index="/dashboard">首页</el-menu-item>
<menu-item v-for="(item, index) in trends_routers" :key="index" :item_data="item" :base_path="item.path" class="menu_unit"></menu-item>
</el-menu>
<!-- <el-menu :default-active="activeMenu" class="el-menu-demo" mode="horizontal" @select="handleSelect">
<el-menu-item index="/dashboard">处理中心</el-menu-item>
<el-submenu index="/student">
<template slot="title">学员考试</template>
<el-menu-item index="/student/examination_questions/list">试题管理配置</el-menu-item>
<el-menu-item index="/student/test_results/list">考试结果</el-menu-item>
<el-menu-item index="/student/examination_questions_list">试题管理配置</el-menu-item>
<el-menu-item index="/student/test_results_list">考试结果</el-menu-item>
<el-menu-item index="/student/personnel">学员管理</el-menu-item>
<el-menu-item index="/student/area_breed">烟草区域与品种</el-menu-item>
<el-menu-item index="/student/tobacco_grades">烟草等级</el-menu-item>
</el-submenu>
<!-- <el-submenu index="/business">
<template slot="title">工商交接</template>
<el-menu-item index="/business/display_board">展板统计</el-menu-item>
<el-menu-item index="/business/raw_data">原始数据</el-menu-item>
<el-menu-item index="/business/road">渠道管理</el-menu-item>
</el-submenu> -->
<el-submenu index="/system">
<template slot="title">系统管理</template>
<el-menu-item index="/system/administrators">管理员</el-menu-item>
......@@ -29,7 +22,7 @@
<el-menu-item index="/system/department">部门区域</el-menu-item>
<el-menu-item index="/system/log">系统日志</el-menu-item>
</el-submenu>
</el-menu>
</el-menu> -->
</div>
</template>
......@@ -37,6 +30,9 @@
import { mapGetters } from 'vuex';
import MenuItem from './MenuItem.vue';
import path from 'path'
import { isExternal } from '@/utils/validate'
export default {
data() {
return {
......@@ -49,7 +45,8 @@ export default {
computed: {
...mapGetters([
'permission_routes',
'sidebar'
'sidebar',
'trends_routers'
]),
activeMenu() {
const route = this.$route;
......@@ -62,7 +59,8 @@ export default {
},
mounted() {
console.log('动态路由数据');
console.log(this.trends_routers);
},
methods: {
......@@ -72,9 +70,23 @@ export default {
this.$router.push({
path: key,
})
},
resolvePath(routePath) {
if (isExternal(routePath)) {
return routePath
}
if (isExternal(routePath)) {
return routePath
}
return path.resolve(routePath, routePath)
}
}
}
</script>
<style scoped></style>
<style scoped>
.menu_unit {
display: inline-block;
}
</style>
......@@ -6,13 +6,12 @@
-->
<!-- -->
<template>
<div v-if="!item_data.hidden" :class="item_data.children ? 'single_menu' : ''">
<template
v-if="hasOneShowingChild(item_data.children, item_data) && (!onlyOneChild.children || onlyOneChild.noShowingChildren) && !item_data.alwaysShow">
<el-menu-item :index="resolvePath(onlyOneChild.path)">
{{ onlyOneChild.meta.title }}
</el-menu-item>
</template>
<div v-if="item_data.is_show">
<el-menu-item
v-if="hasOneShowingChild(item_data.children, item_data) && (!onlyOneChild.children || onlyOneChild.noShowingChildren) && !item_data.alwaysShow"
:index="resolvePath(onlyOneChild.path)">
{{ onlyOneChild.meta.title }}
</el-menu-item>
<el-submenu v-else :index="resolvePath(item_data.path)">
<template slot="title">{{ item_data.meta.title }}</template>
<menu-item v-for="(item, index) in item_data.children" :key="index" :item_data="item"
......@@ -75,8 +74,7 @@ export default {
return false
},
resolvePath(routePath) {;
resolvePath(routePath) {
if (isExternal(routePath)) {
return routePath
}
......
......@@ -55,24 +55,24 @@ export const constantRoutes = [
{
path: '/login',
component: () => import('@/views/login/index'),
hidden: true,
is_show: false,
meta: { title: '登录' }
},
{
path: '/retrieve',
component: () => import('@/views/retrieve/index'),
hidden: true,
is_show: false,
meta: { title: '找回' }
},
{
path: '/404',
component: () => import('@/views/error-page/404'),
hidden: true
is_show: false
},
{
path: '/401',
component: () => import('@/views/error-page/401'),
hidden: true
is_show: false
},
]
......@@ -85,6 +85,7 @@ export const asyncRoutes = [
{
path: '/',
component: Layout,
is_show: false,
redirect: '/dashboard',
children: [
......@@ -92,148 +93,130 @@ export const asyncRoutes = [
{
path: 'dashboard',
component: () => import('@/views/dashboard/index'),
name: 'Dashboard',
meta: { title: '首页', icon: 'dashboard', affix: true }
},
{
path: 'student',
name: 'Studen',
component: () => import('@/views/student/index'),
meta: { title: '学员考试' },
redirect: '/student/examination_questions',
children: [
{
path: 'examination_questions',
name: 'Examination_questions',
component: () => import('@/views/student/examination_questions/index.vue'),
redirect: '/student/examination_questions/list',
meta: { title: '试题管理配置' },
children: [
{
path: 'list',
name: 'Examination_questions_list',
component: () => import('@/views/student/examination_questions/list/index.vue'),
meta: { title: '试题列表' },
},
{
path: 'detail',
name: 'Examination_questions_detail',
component: () => import('@/views/student/examination_questions/detail/index.vue'),
meta: { title: '试题详情' },
},
]
},
{
path: 'test_results',
name: 'Test_results',
component: () => import('@/views/student/test_results/index.vue'),
meta: { title: '考试结果' },
redirect: '/student/test_results/list',
children: [
{
path: 'list',
name: 'Test_results_list',
component: () => import('@/views/student/test_results/list/index.vue'),
meta: { title: '结果列表' },
},
{
path: 'detail',
name: 'Test_results_detail',
component: () => import('@/views/student/test_results/detail/index.vue'),
meta: { title: '结果详情' },
},
],
},
{
path: 'personnel',
name: 'Personnel',
component: () => import('@/views/student/personnel/index.vue'),
meta: { title: '学员管理' },
},
{
path: 'area_breed',
name: 'Area_breed',
component: () => import('@/views/student/area_breed/index.vue'),
meta: { title: '烟草区域与品种' },
},
{
path: 'tobacco_grades',
name: 'Tobacco_grades',
component: () => import('@/views/student/tobacco_grades/index.vue'),
meta: { title: '烟草等级' },
}
],
},
{
path: 'business',
name: 'Business',
component: () => import('@/views/business/index.vue'),
meta: { title: '工商交接' },
redirect: '/business/display_board',
children: [
{
path: 'display_board',
name: 'Display_board',
component: () => import('@/views/business/display_board/index.vue'),
meta: { title: '展板统计' },
},
{
path: 'raw_data',
name: 'Raw_data',
component: () => import('@/views/business/raw_data/index.vue'),
meta: { title: '原始数据' },
},
{
path: 'road',
name: 'Road',
component: () => import('@/views/business/road/index.vue'),
meta: { title: '渠道管理' },
},
]
},
{
path: 'system',
component: () => import('@/views/system/index'),
name: 'System',
meta: { title: '系统管理' },
redirect: '/system/administrators',
children: [
{
path: 'administrators',
component: () => import('@/views/system/administrators/index'),
name: 'Administrators',
meta: { title: '管理员' },
},
{
path: 'roles',
component: () => import('@/views/system/roles/index'),
name: 'Roles',
meta: { title: '权限配置' },
},
{
path: 'menu',
component: () => import('@/views/system/menu/index'),
name: 'Menu',
meta: { title: '菜单查看' },
},
{
path: 'department',
component: () => import('@/views/system/department/index'),
name: 'Department',
meta: { title: '部门区域' },
},
{
path: 'log',
component: () => import('@/views/system/log/index'),
name: 'Log',
meta: { title: '系统日志' },
},
]
}
// {
// path: 'dashboard',
// component: () => import('@/views/dashboard/index'),
// name: 'Dashboard',
// meta: { title: '首页', icon: 'dashboard', affix: true }
// },
// {
// path: 'student',
// name: 'Student',
// component: () => import('@/views/student/index'),
// meta: { title: '学员考试' },
// redirect: '/student/examination_questions_list',
// children: [
// {
// path: 'examination_questions_list',
// name: 'Examination_questions_list',
// component: () => import('@/views/student/examination_questions/list/index.vue'),
// meta: { title: '试题管理配置' },
// },
// {
// path: 'examination_questions_detail',
// name: 'Examination_questions_detail',
// component: () => import('@/views/student/examination_questions/detail/index.vue'),
// meta: { title: '试题详情' },
// },
// {
// path: 'test_results_list',
// name: 'Test_results_list',
// component: () => import('@/views/student/test_results/list/index.vue'),
// meta: { title: '考试结果' },
// },
// {
// path: 'test_results_detail',
// name: 'Test_results_detail',
// component: () => import('@/views/student/test_results/detail/index.vue'),
// meta: { title: '结果详情' },
// },
// {
// path: 'personnel',
// name: 'Personnel',
// component: () => import('@/views/student/personnel/index.vue'),
// meta: { title: '学员管理' },
// },
// {
// path: 'area_breed',
// name: 'Area_breed',
// component: () => import('@/views/student/area_breed/index.vue'),
// meta: { title: '烟草区域与品种' },
// },
// {
// path: 'tobacco_grades',
// name: 'Tobacco_grades',
// component: () => import('@/views/student/tobacco_grades/index.vue'),
// meta: { title: '烟草等级' },
// }
// ],
// },
// {
// path: 'business',
// name: 'Business',
// component: () => import('@/views/business/index.vue'),
// meta: { title: '工商交接' },
// redirect: '/business/display_board',
// children: [
// {
// path: 'display_board',
// name: 'Display_board',
// component: () => import('@/views/business/display_board/index.vue'),
// meta: { title: '展板统计' },
// },
// {
// path: 'raw_data',
// name: 'Raw_data',
// component: () => import('@/views/business/raw_data/index.vue'),
// meta: { title: '原始数据' },
// },
// {
// path: 'road',
// name: 'Road',
// component: () => import('@/views/business/road/index.vue'),
// meta: { title: '渠道管理' },
// },
// ]
// },
// {
// path: 'system',
// component: () => import('@/views/system/index'),
// name: 'System',
// meta: { title: '系统管理' },
// redirect: '/system/administrators',
// children: [
// {
// path: 'administrators',
// component: () => import('@/views/system/administrators/index'),
// name: 'Administrators',
// meta: { title: '管理员' },
// },
// {
// path: 'roles',
// component: () => import('@/views/system/roles/index'),
// name: 'Roles',
// meta: { title: '权限配置' },
// },
// {
// path: 'menu',
// component: () => import('@/views/system/menu/index'),
// name: 'Menu',
// meta: { title: '菜单查看' },
// },
// {
// path: 'department',
// component: () => import('@/views/system/department/index'),
// name: 'Department',
// meta: { title: '部门区域' },
// },
// {
// path: 'log',
// component: () => import('@/views/system/log/index'),
// name: 'Log',
// meta: { title: '系统日志' },
// },
// ]
// }
......@@ -242,7 +225,7 @@ export const asyncRoutes = [
},
// 404 page must be placed at the end !!!
{ path: '*', redirect: '/404', hidden: true }
{ path: '*', redirect: '/404', is_show: false }
]
const createRouter = () => new Router({
......
......@@ -18,5 +18,6 @@ const getters = {
permission_routes: state => state.permission.routes,
errorLogs: state => state.errorLog.logs,
hasUser: state => state.user.hasUser,
trends_routers: state => state.permission.trends_routers,
}
export default getters
......@@ -38,45 +38,29 @@ export function filterAsyncRoutes(routes, roles) {
const state = {
routes: [],
addRoutes: []
addRoutes: [],
trends_routers: [],//
}
const mutations = {
SET_ROUTES: (state, routes) => {
state.addRoutes = routes
state.routes = constantRoutes.concat(routes)
},
SET_TRENDS_ROUTES: (state, routes) => {
state.trends_routers = routes;
}
}
/*
1. // component: (resolve) => require([`${element.component}`], resolve) // // 变量component: '@/pages/drawSvg/index.vue', // 会报错
2.// component: (resolve) => require([`@/pages/${element.component}/index.vue`], resolve)//变量 component: 'drawSvg',//ok
*/
//处理路由地址 不能用 import。使用require,异步
function routerCom(view_path) {//不支持全路径,支持拼接路径
return (resolve) => require([`@/${view_path}`], resolve);
}
//过滤数据 /转为树结构
function filterRouterData(list) {
console.log('路由处理的原始数据@@@');
console.log(list);
let result = []
let map = {}
if (!Array.isArray(list)) return [];
function transListToTreeData(list, rootValue) {
let arr = []
list.forEach(item => {
map[item.id] = {
id: item.id,
father_id: item.father_id,
is_show: item.is_show,
path: item.path,
name: item.name,
component: routerCom(item.view_path),
meta: { title: item.name_zh }
}
});
list.forEach(item => {
let parent = map[item.father_id], elememt = {
let elememt = {
id: item.id,
father_id: item.father_id,
is_show: item.is_show,
......@@ -85,34 +69,41 @@ function filterRouterData(list) {
component: routerCom(item.view_path),
meta: { title: item.name_zh }
};
if (parent) {
// console.log('进入判断');
// console.log((parent.children || (parent.children = [])));
(parent.children || (parent.children = [])).push(elememt)
} else {
result.push(elememt)
if (item.father_id === rootValue) {
const children = transListToTreeData(list, item.id)
if (children.length > 0) {
elememt.children = children
}
arr.push(elememt)
}
})
return result
return arr
}
const actions = {
generateRoutes({ commit }) {
return new Promise(async resolve => {
let response = await get_permission_btn_menu()
let response = await get_permission_btn_menu();
console.log('从接口获取的路由数据');
console.log(response);
/* route_tree_all(permission); //转为树结构 */
// let route_list = filterRouterData(response.permission);
// console.log('<<<<<<<<<<<<<组装好的路由列表>>>>>>>>>>>>>');
// console.log(route_list);
// console.log('权限菜单数据>>>>>>>>>>');
// console.log(response);
// console.log('本地路由数据@@@@@@@@@@');
// console.log(asyncRoutes);
// asyncRoutes[0].children = route_list;
let route_list = transListToTreeData(response.permission, -1);
console.log('<<<<<<<<<<<<<组装好的路由列表>>>>>>>>>>>>>');
console.log(route_list);
console.log('权限菜单数据>>>>>>>>>>');
console.log(response);
console.log('本地路由数据@@@@@@@@@@');
console.log(asyncRoutes);
/**
* //layout为统一的视图入口,在asyncRoutes[0]下,
* 具体可查看router/index.js
*/
asyncRoutes[0].children = route_list;
let accessedRoutes = asyncRoutes || [];
console.log('处理好的路由数据');
console.log(accessedRoutes);
commit('SET_ROUTES', accessedRoutes)
commit('SET_ROUTES', accessedRoutes)//存储路由数据
commit('SET_TRENDS_ROUTES', route_list);
resolve(accessedRoutes)
})
}
......
......@@ -121,6 +121,17 @@
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;
......@@ -687,19 +698,19 @@ aside a:hover {
.module_container {
position: relative;
width: 100%;
height: calc(100% - 50px);
height: calc(100% - 55px);
box-sizing: border-box;
overflow-y: auto;
}
.module_container .module_container_left {
position: absolute;
left: 0;
top: -50px;
bottom: 0;
top: 0;
bottom: -5px;
width: 300px;
background-color: #fff;
box-sizing: border-box;
padding: 15px;
}
.crumbs_box {
......@@ -746,3 +757,21 @@ aside a:hover {
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}#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% - 50px);box-sizing:border-box}.module_container .module_container_left{position:absolute;left:0;top:-50px;bottom:0;width:300px;background-color:#fff;box-sizing:border-box;padding:15px}.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}
: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}
......@@ -234,18 +234,19 @@ aside {
.module_container {
position: relative;
width: 100%;
height: calc(100% - 50px); //减去面包屑的高度
height: calc(100% - 55px); //减去面包屑的高度
box-sizing: border-box;
overflow-y: auto;
.module_container_left {
position: absolute;
left: 0;
top: -50px;
bottom: 0;
top: 0;
bottom: -5px;
width: 300px;
background-color: #fff;
box-sizing: border-box;
padding: 15px;
// padding: 15px;
}
}
......@@ -299,3 +300,22 @@ aside {
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;
}
\ No newline at end of file
......@@ -7,10 +7,10 @@
<template>
<div class="module_container">
<div class="module_container_left">
<el-card class="module_container_left">
<el-tree :data="left_terr_data" :props="defaultProps" :expand-on-click-node="false" :filter-node-method="filterNode"
ref="tree" :default-expand-all="false" @node-click="handleNodeClick" style="margin-top: 45px;" />
</div>
ref="tree" :default-expand-all="false" @node-click="handleNodeClick" />
</el-card>
<div class="right_container">
<div class="card_container">
<el-card class="box-card">
......@@ -18,11 +18,18 @@
@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="编号">
<el-table-column prop="id" label="编号" width="80">
</el-table-column>
<el-table-column prop="name" label="烟草产地">
<template slot-scope="scope">
<div v-for="(item, index) in scope.row.tobacco_breed_place" :key="index">
{{ item.place_of_production }};
</div>
</template>
</el-table-column>
<el-table-column prop="name" label="品种名称">
<el-table-column prop="name" label="品种名称" width="150">
</el-table-column>
<el-table-column prop="appearance_characteristics" label="外观特征">
<el-table-column prop="appearance_characteristics" label="外观特征" width="120">
<template slot-scope="scope">
<div v-for="(e, key, i) in scope.row.appearance_characteristics" :key="i">
<span>{{ key }}</span>
......@@ -30,7 +37,7 @@
</div>
</template>
</el-table-column>
<el-table-column prop="image" label="图片信息">
<el-table-column prop="image" label="图片信息" width="100">
<template slot-scope="scope">
<el-popover placement="right" trigger="click">
<div class="amplify_img_box">
......
......@@ -54,10 +54,15 @@
<el-dialog :title="is_updata_type == 'add' ? '新增' : '修改'" :visible.sync="is_dialogVisible" width="60%"
:before-close="handleClose">
<div>
<table-moudel v-if="is_dialogVisible" ref="detail_info" :table_data="detailed_information"
:position_datas="position_data" :province_datas="province_data" :tobacco_all_lists="tobacco_all_lists"
:tobacco_grades_all_lists="tobacco_grades_all_lists" :is_updata_type="is_updata_type"
<table-moudel v-if="is_dialogVisible && Object.keys(province_data).length == 3" ref="detail_info"
:table_data="detailed_information" :position_datas="position_data" :province_datas="province_data"
:tobacco_all_lists="tobacco_all_lists" :tobacco_grades_all_lists="tobacco_grades_all_lists"
:is_updata_type="is_updata_type"
:examination_questions_all_lists="examination_questions_all_list"></table-moudel>
<div v-else style="text-align: center;">
<p><i class="el-icon-loading"></i></p>
<p>加载中...</p>
</div>
</div>
<span slot="footer" class="dialog-footer">
<el-button @click="handleClose">取 消</el-button>
......
......@@ -51,12 +51,29 @@
<!-- <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="试题复制"
@click="examinationQuestionsCopy(scope.row)">复制</el-button>
<el-button v-if="scope.row.status != '6'" size="mini" type="text" style="color: #000;"
<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>
<el-button v-if="scope.row.status == '1'" size="mini" type="text" style="color: #000;"
<!-- <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>
@click="deleteInformation(scope.row)">停用</el-button> -->
<el-popover placement="right" width="160">
<div>
<el-radio-group v-model="status_params.status">
<el-radio label="1" style="margin: 5px 0;">试题配置中</el-radio>
<el-radio label="2" style="margin: 5px 0;">试题配置完成</el-radio>
<el-radio label="3" style="margin: 5px 0;">开始考试</el-radio>
<el-radio label="4" style="margin: 5px 0;">考试完成</el-radio>
<el-radio label="5" style="margin: 5px 0;">已点评</el-radio>
<el-radio label="6" style="margin: 5px 0;">停止使用</el-radio>
</el-radio-group>
</div>
<div style="text-align: right; margin: 0">
<el-button type="primary" size="mini" @click="updataExaminationQuestionsStatus">确定</el-button>
</div>
<el-button slot="reference" type="text" size="mini" @click="setStatusParams(scope.row)">设置状态</el-button>
</el-popover>
</template>
</el-table-column>
</el-table>
......@@ -178,7 +195,7 @@
<script>
import TableHead from '@/components/TableHead/index';
import { get_examination_questions_list, add_examination_questions, updata_examination_questions, create_answer_card, examination_questions_copy, examination_questions_publish, delete_examination_questions, get_examination_questions_all, get_student_all, examination_reservation, examination_batch_reservation } from '@/api/student';
import { get_examination_questions_list, add_examination_questions, updata_examination_questions, create_answer_card, examination_questions_copy, examination_questions_publish, delete_examination_questions, get_examination_questions_all, get_student_all, examination_reservation, examination_batch_reservation, updata_examination_questions_status } from '@/api/student';
import { exportText } from '@/utils/tool';
const standard_template = {
title: "河南把烟测试2",
......@@ -213,10 +230,7 @@ export default {
text: '预约',
event: 'reservation',
},
// {
// text: '批量预约',
// event: 'batch_reservation',
// }
],
},
//初始化请求参数
......@@ -248,6 +262,13 @@ export default {
},
//批量预约文件
batch_reservation_file: {},
is_popover_show: false,
status_params: {
id: null,
status: null,
},
};
},
......@@ -370,7 +391,7 @@ export default {
commentJump(item) {
let id = item.id;
this.$router.push({
path: "/student/examination_questions/detail",
path: "/student/examination_questions_detail",
query: { id: id },
});
},
......@@ -413,6 +434,30 @@ export default {
}
})
},
//点击修改状态
setStatusParams(item) {
console.log('点击');
console.log(item);
let data = JSON.parse(JSON.stringify(item));
const { id, status } = data;
this.status_params = { id, status };
},
//修改状态
updataExaminationQuestionsStatus() {
let id = this.status_params.id;
let params = {
status: this.status_params.status
}
updata_examination_questions_status(id, params).then(res => {
console.log('修改状态');
if (res.code == 200) {
this.$message.success(res.message);
document.body.click();
this.getListData();
}
})
},
//预约点击
......
<!-- -->
<template>
<div class="analyse_container">
<div class="header_box">易错题分析</div>
<div class="content_container">
<table class="table_box">
<tr>
<th>序号</th>
<th>题目(编号)</th>
<th>结果</th>
<th>错误率</th>
<th>错误结果</th>
</tr>
<tr v-for="(item, index) in 5" :key="index">
<td>1</td>
<td>34</td>
<td>C4F</td>
<td>14%</td>
<td>c4d(10人)</td>
</tr>
</table>
</div>
<div class="content_container" id="charts_container">
</div>
</div>
</template>
<script>
import echarts from 'echarts';
export default {
data() {
return {
};
},
components: {},
computed: {},
mounted() {
this.initChart();
},
methods: {
initChart() {
let dom = document.getElementById('charts_container');
let myChart = 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 lang="scss" scoped>
.analyse_container {
border-radius: 6px;
border: 1px solid #F56C6C;
overflow: hidden;
.header_box {
height: 40px;
line-height: 40px;
background-color: #F56C6C;
padding: 0 10px;
color: #fff;
}
.content_container {
width: 100%;
height: 285px;
margin: 0;
padding: 0;
overflow-y: auto;
.table_box {
width: 100%;
min-height: 100%;
text-align: center;
}
}
}
.table_box {
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>
\ No newline at end of file
<!--
* @Author: czj
* @Date: 2023-03-14 17:41:55
* @Description:
* @FilePath: \AdministrationHome\src\views\student\test_results\components\AnswerCard.vue
-->
<!-- -->
<template>
<div class="table_container">
<div class="header_box">
<div class="row_box" v-for="(item, index) in 5" :key="index">
<div class="left">序号</div>
<div class="right">结果</div>
</div>
</div>
<div class="lin_box" v-for="(items, index) in questions_list" :key="index">
<div class="row_box" v-for="(e, i) in items" :key="i">
<div class="left">{{ e.index_number + 1 }}</div>
<div class="right" :class="e.grades_code && test_results_list[e.id] != e.grades_code ? 'wrong_answer' : ''">
<el-popover placement="right" trigger="click">
<div class="table_box">
<table border="1" cellspacing="0">
<tr>
<td class="title_box">
<div class="left_box">
我的结果
</div>
</td>
<td>
<div class="right_box"
:class="e.grades_code && test_results_list[e.id] != e.grades_code ? 'wrong_answer' : ''">
{{ test_results_list[e.id] || '暂无' }}
</div>
</td>
</tr>
<tr>
<td class="title_box">
<div class="left_box">
烟草区域
</div>
</td>
<td>
<div class="right_box">{{ e.place_of_production || '暂无' }}</div>
</td>
</tr>
<tr>
<td class="title_box">
<div class="left_box">
试题结论
</div>
</td>
<td>
<div class="right_box">{{ e.grades_code || '暂无' }}</div>
</td>
</tr>
<tr>
<td class="title_box">
<div class="left_box">
烟草品种
</div>
</td>
<td>
<div class="right_box">{{ e.breed_name || "暂无" }}</div>
</td>
</tr>
<tr>
<td class="title_box">
<div class="left_box">
试题详解
</div>
</td>
<td>
<div class="right_box">{{ e.explain_in_detail || '暂无' }}</div>
</td>
</tr>
<tr>
<td class="title_box">
<div class="left_box">
烟草实物
</div>
</td>
<td>
<div class="right_box">
<div v-if="e.image && e.image != '/'" class="image_box">
<img :src="IP + e.image" alt="">
</div>
<div v-else>暂无</div>
</div>
</td>
</tr>
</table>
</div>
<!-- <span slot="reference"> {{ e.grades_code || '暂无' }}</span> -->
<span slot="reference"> {{ test_results_list[e.id] || '暂无' }}</span>
</el-popover>
</div>
</div>
</div>
</div>
</template>
<script>
export default {
props: ['questions_lists', 'test_results_lists'],
data() {
return {
IP: process.env.VUE_APP_BASE_API,
questions_list: [],
test_results_list: [],
};
},
components: {},
computed: {},
created() {
this.questions_list = [...this.questions_lists];
this.test_results_list = [...this.test_results_lists];
},
mounted() { },
methods: {}
}
</script>
<style lang="scss" scoped>
@import '@/styles/variables.scss';
.table_container {
width: 80%;
margin: 0 auto;
border: 1px solid #EBEEF5;
border-radius: 8px;
overflow: hidden;
.header_box {
background-color: $themeColor;
.row_box {
.left,
.right {
color: #fff !important;
}
}
}
.lin_box {
border-bottom: 1px solid #EBEEF5;
}
.row_box {
width: 20%;
float: left;
display: flex;
font-size: 14px;
color: #303133;
justify-content: space-between;
align-items: center;
box-sizing: border-box;
border-right: 1px solid #EBEEF5;
.left {
width: 60px;
text-align: center;
padding: 15px 0;
}
.right {
width: calc(100% - 60px);
text-align: center;
padding: 15px 0;
border-right: 1px solid #EBEEF5;
}
}
}
.header_box::after,
.lin_box::after {
display: block;
content: "";
clear: both;
}
.lin_box .row_box .left {
border-right: 1px solid #EBEEF5;
}
.table_container .lin_box:last-child,
.lin_box .row_box:last-child,
.header_box .row_box:last-child {
border: none;
}
.table_box {
width: 100%;
table {
width: 100%;
border-top: 1px solid #E4E7ED;
border-left: 1px solid #E4E7ED;
border-collapse: collapse;
td {
margin: 0;
padding: 0;
border-bottom: 1px solid #E4E7ED;
border-right: 1px solid #E4E7ED;
}
.title_box {
width: 100px;
}
}
}
.left_box {
padding: 10px 10px;
color: #606266;
text-align: center;
}
.right_box {
width: 400px;
padding: 10px 10px;
color: #303133;
}
.image_box {
width: 100%;
height: 400px;
img {
max-width: 100%;
max-height: 100%;
}
}
.wrong_answer {
background-color: #fdf0f0;
}
</style>
\ No newline at end of file
......@@ -2,102 +2,44 @@
<template>
<div class="module_container">
<div class="card_container">
<el-card class="box-card" style="margin-bottom: 10px;">
<el-card class="box-card">
<examination-header v-if="student_brief_introduction" :examination_questions="student_brief_introduction"
:key="new Date().getTime()"></examination-header>
</el-card>
<el-card class="box-card" v-if="questions_list.length > 0">
<div class="table_container">
<div class="header_box">
<div class="row_box" v-for="(item, index) in 5" :key="index">
<div class="left">序号</div>
<div class="right">结果</div>
</div>
</div>
<div class="lin_box" v-for="(items, index) in questions_list" :key="index">
<div class="row_box" v-for="(e, i) in items" :key="i">
<div class="left">{{ e.index_number + 1 }}</div>
<div class="right"
:class="e.grades_code && detailed_information.test_results[e.id] != e.grades_code ? 'wrong_answer' : ''">
<el-popover placement="right" trigger="click">
<div class="table_box">
<table border="1" cellspacing="0">
<tr>
<td class="title_box">
<div class="left_box">
我的结果
</div>
</td>
<td>
<div class="right_box"
:class="e.grades_code && detailed_information.test_results[e.id] != e.grades_code ? 'wrong_answer' : ''">
{{ detailed_information.test_results[e.id] || '暂无' }}
</div>
</td>
</tr>
<tr>
<td class="title_box">
<div class="left_box">
烟草区域
</div>
</td>
<td>
<div class="right_box">{{ e.place_of_production || '暂无' }}</div>
</td>
</tr>
<tr>
<td class="title_box">
<div class="left_box">
试题结论
</div>
</td>
<td>
<div class="right_box">{{ e.grades_code || '暂无' }}</div>
</td>
</tr>
<tr>
<td class="title_box">
<div class="left_box">
烟草品种
</div>
</td>
<td>
<div class="right_box">{{ e.breed_name || "暂无" }}</div>
</td>
</tr>
<tr>
<td class="title_box">
<div class="left_box">
试题详解
</div>
</td>
<td>
<div class="right_box">{{ e.explain_in_detail || '暂无' }}</div>
</td>
</tr>
<tr>
<td class="title_box">
<div class="left_box">
烟草实物
</div>
</td>
<td>
<div class="right_box">
<div v-if="e.image && e.image != '/'" class="image_box">
<img :src="IP + e.image" alt="">
</div>
<div v-else>暂无</div>
</div>
</td>
</tr>
</table>
</div>
<!-- <span slot="reference"> {{ e.grades_code || '暂无' }}</span> -->
<span slot="reference"> {{ detailed_information.test_results[e.id] || '暂无' }}</span>
</el-popover>
<answer-card :questions_lists="questions_list" :test_results_lists="test_results_list"></answer-card>
</el-card>
<el-card class="box-card">
<div>
<div class="line_header">易错、对等级分析</div>
<el-row>
<el-col :span="12">
<div style="width: calc(100% - 20px);">
<analyse-module></analyse-module>
</div>
</el-col>
<el-col :span="12">
<analyse-module></analyse-module>
</el-col>
</el-row>
</div>
<div>
<div class="line_header">易错、对等级分析</div>
<el-row>
<el-col :span="8">
<div style="width: calc(100% - 20px);">
<analyse-module></analyse-module>
</div>
</div>
</div>
</el-col>
<el-col :span="16">
<analyse-module></analyse-module>
</el-col>
</el-row>
</div>
<div>
<div class="line_header">老师点评</div>
<el-input type="textarea" :rows="6" placeholder="请输入内容" v-model="test_text" style="widows: 100%;">
</el-input>
</div>
</el-card>
</div>
......@@ -117,6 +59,8 @@
<script>
import ExaminationHeader from '@/components/ExaminationHeader/index';
import AnswerCard from '../components/AnswerCard.vue';
import AnalyseModule from '../components/AnalyseModule.vue';
import { get_test_results_detail } from '@/api/student';
import { array_conversion } from '@/utils/tool';
const standard_template = {
......@@ -157,11 +101,14 @@ export default {
//试题结果
questions_list: [],
questions_list: [],//试题列表
test_results_list: [],//答题列表
test_text: '针对你在本次烟草知识考试中的表现,我认为你已经做得非常出色。你的答案准确地回答了考试中的问题,而且展现出了对烟草知识的全面了解。'
};
},
components: { ExaminationHeader },
components: { ExaminationHeader, AnswerCard, AnalyseModule },
computed: {},
created() {
......@@ -196,19 +143,13 @@ export default {
],
};
this.questions_list = [];
// if (res.examination_questions) this.questions_list = || [];
res.examination_questions.examination_question_detail.forEach((element, index) => {
let obj = JSON.parse(JSON.stringify(element))
element['index_number'] = index;//用来记录在原始数据中的索引
});
console.log('表格数据源');
console.log(res.examination_questions.examination_question_detail);
let new_arr = array_conversion(res.examination_questions.examination_question_detail, 5);
console.log('二维数据@@@');
console.log(new_arr);
this.test_results_list = res.test_results;
this.questions_list = new_arr;
this.detailed_information = res;
})
},
......@@ -219,123 +160,15 @@ export default {
<style lang="scss" scoped>
@import '@/styles/variables.scss';
.table_container {
width: 80%;
margin: 0 auto;
border: 1px solid #EBEEF5;
border-radius: 8px;
overflow: hidden;
.header_box {
background-color: $themeColor;
.row_box {
.left,
.right {
color: #fff !important;
}
}
}
.lin_box {
border-bottom: 1px solid #EBEEF5;
}
.row_box {
width: 20%;
float: left;
display: flex;
font-size: 14px;
color: #303133;
justify-content: space-between;
align-items: center;
box-sizing: border-box;
border-right: 1px solid #EBEEF5;
.left {
width: 60px;
text-align: center;
padding: 15px 0;
}
.right {
width: calc(100% - 60px);
text-align: center;
padding: 15px 0;
border-right: 1px solid #EBEEF5;
}
}
.box-card {
margin-bottom: 15px;
}
.header_box::after,
.lin_box::after {
display: block;
content: "";
clear: both;
}
.lin_box .row_box .left {
border-right: 1px solid #EBEEF5;
}
.table_container .lin_box:last-child,
.lin_box .row_box:last-child,
.header_box .row_box:last-child {
border: none;
}
.table_box {
width: 100%;
table {
width: 100%;
border-top: 1px solid #E4E7ED;
border-left: 1px solid #E4E7ED;
border-collapse: collapse;
td {
margin: 0;
padding: 0;
border-bottom: 1px solid #E4E7ED;
border-right: 1px solid #E4E7ED;
}
.title_box {
width: 100px;
}
}
}
.left_box {
padding: 10px 10px;
color: #606266;
text-align: center;
}
.right_box {
width: 400px;
padding: 10px 10px;
color: #303133;
}
.image_box {
width: 100%;
height: 400px;
img {
max-width: 100%;
max-height: 100%;
}
.card_container {
margin-bottom: 50px;
}
.wrong_answer {
background-color: #fdf0f0;
.line_header {
padding: 15px 0;
}
</style>
......@@ -228,7 +228,7 @@ export default {
console.log('跳转详情');
let id = item.id;
this.$router.push({
path: '/student/test_results/detail',
path: '/student/test_results_detail',
query: {
id: id
},
......
......@@ -48,7 +48,7 @@
<el-row>
<el-col :span="12">
<el-form-item label="部位+颜色(二等级)">
<el-form-item label="组别">
<el-input v-model="tobacco_grades_info.grade2"></el-input>
</el-form-item>
</el-col>
......
......@@ -34,6 +34,8 @@
<el-table-column prop="price3" label="三价区" width="100">
<template slot-scope="scope"><span>¥{{ scope.row.price3 }}</span></template>
</el-table-column>
<el-table-column prop="grade2" label="组别">
</el-table-column>
<el-table-column prop="remark" label="备注">
</el-table-column>
<el-table-column prop="adjacent_grade" label="同组别紧邻等级">
......@@ -70,7 +72,7 @@
</el-card>
</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="60%"
top="50px" :before-close="handleClose">
<div>
<Dialog v-if="is_dialogVisible" :tobacco_grades_infos="tobacco_grades_info" @handleClose="handleClose"
......
Markdown 格式
0% 或
您添加了 0 人 到此讨论。请谨慎行事。
请先完成此评论的编辑!
请 注册 或者 后发表评论