导入学生信息添加校验&哈尔滨打包不再区分路由文件
This commit is contained in:
parent
be8821435b
commit
b248e69ffe
@ -11,7 +11,7 @@ import App from './App';
|
|||||||
import VueI18n from 'vue-i18n';
|
import VueI18n from 'vue-i18n';
|
||||||
|
|
||||||
import store from './store/index';
|
import store from './store/index';
|
||||||
import router from './router/index_APP_TARGET';
|
import router from './router/index';
|
||||||
import CancelMouseState from '@/mixin/CancelMouseState.js';
|
import CancelMouseState from '@/mixin/CancelMouseState.js';
|
||||||
Vue.mixin(CancelMouseState);
|
Vue.mixin(CancelMouseState);
|
||||||
|
|
||||||
|
@ -1,6 +1,6 @@
|
|||||||
import Vue from 'vue';
|
import Vue from 'vue';
|
||||||
import store from '@/store/index';
|
import store from '@/store/index';
|
||||||
import router from './router/index_APP_TARGET';
|
import router from './router/index';
|
||||||
import {loginInfo} from '@/scripts/ProjectConfig';
|
import {loginInfo} from '@/scripts/ProjectConfig';
|
||||||
import NProgress from 'nprogress';
|
import NProgress from 'nprogress';
|
||||||
import 'nprogress/nprogress.css';
|
import 'nprogress/nprogress.css';
|
||||||
|
@ -124,7 +124,6 @@ const UserRules = () => import('@/views/orderauthor/rules/index');
|
|||||||
const UserRulesDetail = () => import('@/views/orderauthor/rules/detail');
|
const UserRulesDetail = () => import('@/views/orderauthor/rules/detail');
|
||||||
|
|
||||||
const DeviceManage = () => import('@/views/system/deviceManage/index');
|
const DeviceManage = () => import('@/views/system/deviceManage/index');
|
||||||
const StudentManage = () => import('@/views/studentManage');
|
|
||||||
const BankManage = () => import('@/views/competitionManage/bankList/index');
|
const BankManage = () => import('@/views/competitionManage/bankList/index');
|
||||||
|
|
||||||
const Scene = () => import('@/views/drts/scene/index');
|
const Scene = () => import('@/views/drts/scene/index');
|
||||||
@ -1088,26 +1087,6 @@ export const asyncRouter = [
|
|||||||
/* merge 是否再路由处理中与asyncRouter进行合并 mergeIndex合并进入asyncRouter【mergeIndex】 慎重调整asyncRouter顺序 */
|
/* merge 是否再路由处理中与asyncRouter进行合并 mergeIndex合并进入asyncRouter【mergeIndex】 慎重调整asyncRouter顺序 */
|
||||||
export const projectRoute = {
|
export const projectRoute = {
|
||||||
designgzb: [
|
designgzb: [
|
||||||
{
|
|
||||||
path: '/design/student',
|
|
||||||
redirect: '/design/student/home',
|
|
||||||
component: Layout,
|
|
||||||
meta: {
|
|
||||||
i18n: 'router.studentManage',
|
|
||||||
roles: [admin, lessonCreater]
|
|
||||||
},
|
|
||||||
children: [
|
|
||||||
{
|
|
||||||
path: 'home',
|
|
||||||
component: StudentManage,
|
|
||||||
meta: {
|
|
||||||
i18n: 'router.studentManage',
|
|
||||||
icon: 'design',
|
|
||||||
hidden: true
|
|
||||||
}
|
|
||||||
}
|
|
||||||
]
|
|
||||||
},
|
|
||||||
{ // 系统管理
|
{ // 系统管理
|
||||||
path: '/system',
|
path: '/system',
|
||||||
component: Layout,
|
component: Layout,
|
@ -1,742 +0,0 @@
|
|||||||
import Vue from 'vue';
|
|
||||||
import VueRouter from 'vue-router';
|
|
||||||
// import VueRouter from 'vue-router';
|
|
||||||
|
|
||||||
Vue.use(VueRouter);
|
|
||||||
|
|
||||||
/* Layout */
|
|
||||||
const Layout = () => import('@/layout');
|
|
||||||
// const Login = () => import('@/views/login/hydLogin');
|
|
||||||
const Login = () => import('@/views/login/index');
|
|
||||||
|
|
||||||
const Jlmap3dedit = () => import('@/views/jlmap3d/edit/jlmap3dedit');
|
|
||||||
const Jlmap3d = () => import('@/views/jlmap3d/drive/jl3ddrive');
|
|
||||||
const Jlmap3dSandbox = () => import('@/views/jlmap3d/simulation/jl3dsimulation');
|
|
||||||
const Jlmap3dModel = () => import('@/views/jlmap3d/device/jl3ddevice');
|
|
||||||
const Jlmap3dPassFlow = () => import('@/views/jlmap3d/passflow/jl3dpassflow');
|
|
||||||
const DisplayNew = () => import('@/views/newMap/displayNew/index');
|
|
||||||
|
|
||||||
const JointTrainingNew = () => import('@/views/newMap/jointTrainingNew/index');
|
|
||||||
|
|
||||||
const Errpr404 = () => import('@/views/error-page/404');
|
|
||||||
|
|
||||||
const Dictionary = () => import('@/views/system/dictionary/index');
|
|
||||||
const DictionaryDetail = () => import('@/views/system/dictionaryDetail/index');
|
|
||||||
const UserControl = () => import('@/views/system/userControl/index');
|
|
||||||
const UserTraining = () => import('@/views/system/userTraining/index');
|
|
||||||
const UserExam = () => import('@/views/system/userExam/index');
|
|
||||||
const UserSimulation = () => import('@/views/system/userSimulation/index');
|
|
||||||
const ExistingSimulation = () => import('@/views/system/existingSimulation/index');
|
|
||||||
const CacheControl = () => import('@/views/system/cacheControl/index');
|
|
||||||
const SystemGenerate = () => import('@/views/system/systemGenerate/index');
|
|
||||||
const News = () => import('@/views/system/news/index');
|
|
||||||
const CommandDictionary = () => import('@/views/system/commandDictionary/index');
|
|
||||||
const CommandDictionaryDetail = () => import('@/views/system/commandDictionary/edit');
|
|
||||||
const configLine = () => import('@/views/system/configLine/index');
|
|
||||||
|
|
||||||
const IscsSystem = () => import('@/views/iscs/iscsSystem/index');
|
|
||||||
const IscsConfig = () => import('@/views/iscs/iscsSystem/config/index');
|
|
||||||
|
|
||||||
const Taskmanage = () => import('@/views/lesson/taskmanage/list');
|
|
||||||
const TrainingRuleList = () => import('@/views/lesson/trainingRule/list');
|
|
||||||
const TrainingRuleEdit = () => import('@/views/lesson/trainingRule/detail/index');
|
|
||||||
const Trainingmanage = () => import('@/views/lesson/trainingmanage/index');
|
|
||||||
const LessonEdit = () => import('@/views/lesson/lessoncategory/index');
|
|
||||||
const LessonHome = () => import('@/views/lesson/home');
|
|
||||||
const LessonDetail = () => import('@/views/lesson/details');
|
|
||||||
const BigScreen = () => import('@/views/designPlatform/bigScreen');
|
|
||||||
const BigSplitScreen = () => import('@/views/designPlatform/bigSplitScreen');
|
|
||||||
const TestRunplan = () => import('@/views/designPlatform/testRunplan');
|
|
||||||
|
|
||||||
const ScriptmanageHome = () => import('@/views/scriptManage/home');
|
|
||||||
|
|
||||||
const IbpHome = () => import('@/views/ibp/home');
|
|
||||||
const IbpDraw = () => import('@/views/ibp/ibpDraw/index');
|
|
||||||
|
|
||||||
const TeachDetail = () => import('@/views/teach/detail/index');
|
|
||||||
const TeachHome = () => import('@/views/teach/index');
|
|
||||||
const Pay = () => import('@/views/components/pay/index');
|
|
||||||
|
|
||||||
const ExamHome = () => import('@/views/exam/index');
|
|
||||||
const ExamResult = () => import('@/views/exam/result');
|
|
||||||
const ExamDetail = () => import('@/views/exam/detail/examDetail');
|
|
||||||
const ExamCourseDetail = () => import('@/views/exam/detail/courseDetail');
|
|
||||||
|
|
||||||
const DemonstrationDetail = () => import('@/views/demonstration/detail/index');
|
|
||||||
|
|
||||||
const PlanMonitorEditTool = () => import('@/views/planMonitor/editTool/index');
|
|
||||||
const PlanMonitorNewEditTool = () => import('@/views/planMonitor/newEditTool/index');
|
|
||||||
const PlanMonitorDetail = () => import('@/views/planMonitor/detail');
|
|
||||||
|
|
||||||
const DesignPlatformHome = () => import('@/views/designPlatform/home');
|
|
||||||
const DesignPlatform = () => import('@/views/designPlatform/index');
|
|
||||||
const MapPreviewNew = () => import('@/views/designPlatform/mapPreviewNew');
|
|
||||||
|
|
||||||
const Package = () => import('@/views/package/index');
|
|
||||||
|
|
||||||
const PublishMap = () => import('@/views/publish/publishMap/index');
|
|
||||||
const PublishMapDetail = () => import('@/views/publish/publishMap/list'); // 发布历史
|
|
||||||
const PublishLesson = () => import('@/views/publish/publishLesson/index');
|
|
||||||
const RunPlanTemplate = () => import('@/views/publish/runPlanTemplate/index');
|
|
||||||
const RunPlanCommon = () => import('@/views/publish/runPlanCommon/index');
|
|
||||||
const RunPlanCommonDraft = () => import('@/views/publish/runPlanCommon/draft');
|
|
||||||
const RunPlanEveryDay = () => import('@/views/publish/runPlanEveryDay/index');
|
|
||||||
const RunplanView = () => import('@/views/publish/runPlanEveryDay/runPlanView');
|
|
||||||
const PublishExamRule = () => import('@/views/publish/examRule/index');
|
|
||||||
const PublishExamRuleDraft = () => import('@/views/publish/examRule/draft/index');
|
|
||||||
|
|
||||||
const TrainingPlatform = () => import('@/views/trainingPlatform/index');
|
|
||||||
|
|
||||||
const Commodity = () => import('@/views/orderauthor/commodity/index');
|
|
||||||
const OrderList = () => import('@/views/orderauthor/order/list');
|
|
||||||
const OrderDraft = () => import('@/views/orderauthor/order/draft');
|
|
||||||
const Author = () => import('@/views/orderauthor/author/index');
|
|
||||||
const Permission = () => import('@/views/orderauthor/permission/index');
|
|
||||||
const PermissionDetail = () => import('@/views/orderauthor/permission/detail');
|
|
||||||
const PermissionCreate = () => import('@/views/orderauthor/permission/create/index');
|
|
||||||
const UserRules = () => import('@/views/orderauthor/rules/index');
|
|
||||||
const UserRulesDetail = () => import('@/views/orderauthor/rules/detail');
|
|
||||||
|
|
||||||
const DeviceManage = () => import('@/views/system/deviceManage/index');
|
|
||||||
const Approval = () => import('@/views/approval/index');
|
|
||||||
|
|
||||||
// import { loginInfo } from '@/scripts/ProjectConfig';
|
|
||||||
// import { getSessionStorage } from '@/utils/auth';
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Note: sub-menu only appear when route children.length >= 1
|
|
||||||
* Detail see: https://panjiachen.github.io/vue-element-admin-site/guide/essentials/router-and-nav.html
|
|
||||||
*
|
|
||||||
* hidden: true if set true, item will not show in the sidebar(default is false)
|
|
||||||
* alwaysShow: true if set true, will always show the root menu
|
|
||||||
* if not set alwaysShow, when item has more than one children route,
|
|
||||||
* it will becomes nested mode, otherwise not show the root menu
|
|
||||||
* redirect: noRedirect if set noRedirect will no redirect in the breadcrumb
|
|
||||||
* name:'router-name' the name is used by <keep-alive> (must set!!!)
|
|
||||||
* meta : {
|
|
||||||
roles: ['admin','editor'] control the page roles (you can set multiple roles)
|
|
||||||
title: 'title' the name show in sidebar and breadcrumb (recommend set)
|
|
||||||
icon: 'svg-name' the icon show in the sidebar
|
|
||||||
breadcrumb: false if set false, the item will hidden in breadcrumb(default is true)
|
|
||||||
activeMenu: '/example/list' if set path, the sidebar will highlight the path you set
|
|
||||||
}
|
|
||||||
*/
|
|
||||||
|
|
||||||
export const user = '01'; // 普通用户
|
|
||||||
export const mapCreater = '02'; // 地图创建权限
|
|
||||||
export const lessonCreater = '03'; // 课程创建权限
|
|
||||||
export const admin = '04'; // 管理员
|
|
||||||
export const superAdmin = '05'; // 超级管理员
|
|
||||||
|
|
||||||
export const projectTrain = '011'; // 城市轨道项目
|
|
||||||
export const projectXian = '012'; // 西安地铁项目
|
|
||||||
export const projectXty = '013'; // 西铁院
|
|
||||||
export const projectGzzb = '014'; // 贵州装备
|
|
||||||
export const projectJsxt = '015'; // 竞赛系统
|
|
||||||
export const projectJyd = '017'; // 竞业达
|
|
||||||
export const projectTky = '018'; // 铁科院
|
|
||||||
export const projectHeb = '019'; // 哈盈达
|
|
||||||
|
|
||||||
export const userTrainingPlatform = '016'; // 实训系统
|
|
||||||
// export const refereePlatform = '017'; // 裁判系统
|
|
||||||
|
|
||||||
/**
|
|
||||||
* constantRoutes
|
|
||||||
* a base page that does not have permission requirements
|
|
||||||
* all roles can be accessed
|
|
||||||
*/
|
|
||||||
export const constantRoutes = [
|
|
||||||
// 实训平台登录
|
|
||||||
{
|
|
||||||
path: '/login',
|
|
||||||
component: Login,
|
|
||||||
hidden: true
|
|
||||||
},
|
|
||||||
// 设计平台登录
|
|
||||||
{
|
|
||||||
path: '/design',
|
|
||||||
redirect: '/design/login',
|
|
||||||
hidden: true
|
|
||||||
},
|
|
||||||
{
|
|
||||||
path: '/design/login',
|
|
||||||
component: Login,
|
|
||||||
hidden: true
|
|
||||||
},
|
|
||||||
{
|
|
||||||
path: '/design/jlmap3d/edit',
|
|
||||||
component: Jlmap3dedit,
|
|
||||||
hidden: true
|
|
||||||
},
|
|
||||||
{
|
|
||||||
path: '/jlmap3d/sandbox',
|
|
||||||
component: Jlmap3dSandbox,
|
|
||||||
hidden: true
|
|
||||||
},
|
|
||||||
{
|
|
||||||
path: '/jlmap3d/devicemodel',
|
|
||||||
component: Jlmap3dModel,
|
|
||||||
hidden: true
|
|
||||||
},
|
|
||||||
{
|
|
||||||
path: '/jlmap3d/passengerflow',
|
|
||||||
component: Jlmap3dPassFlow,
|
|
||||||
hidden: true
|
|
||||||
},
|
|
||||||
{
|
|
||||||
path: '/404',
|
|
||||||
component: Errpr404,
|
|
||||||
hidden: true
|
|
||||||
},
|
|
||||||
{ path: '*', redirect: '/404', hidden: true }
|
|
||||||
];
|
|
||||||
// 公共路由不需要过滤 直接可以访问
|
|
||||||
export const publicAsyncRoute = [
|
|
||||||
{
|
|
||||||
path: '/displayNew/:mode',
|
|
||||||
component: DisplayNew,
|
|
||||||
hidden: true
|
|
||||||
},
|
|
||||||
{ // 剧本编辑 战场图
|
|
||||||
path: '/scriptDisplayNew/:mode',
|
|
||||||
component: DisplayNew,
|
|
||||||
hidden: true
|
|
||||||
},
|
|
||||||
{
|
|
||||||
path: '/jointTrainingNew',
|
|
||||||
component: JointTrainingNew,
|
|
||||||
hidden: true
|
|
||||||
},
|
|
||||||
{
|
|
||||||
path: '/displayBigScreen/:mapId',
|
|
||||||
component: BigScreen,
|
|
||||||
hidden: true
|
|
||||||
},
|
|
||||||
{ // 大屏切分
|
|
||||||
path: '/bigSplitScreen/:mapId',
|
|
||||||
component: BigSplitScreen,
|
|
||||||
hidden: true
|
|
||||||
},
|
|
||||||
{
|
|
||||||
path: '/jlmap3d',
|
|
||||||
component: Jlmap3d,
|
|
||||||
hidden: true
|
|
||||||
},
|
|
||||||
{ // 运行图编辑
|
|
||||||
path: '/plan/tool',
|
|
||||||
component: PlanMonitorEditTool,
|
|
||||||
hidden: true
|
|
||||||
},
|
|
||||||
{ // 哈尔滨运行图编辑
|
|
||||||
path: '/plan/newTool',
|
|
||||||
component: PlanMonitorNewEditTool,
|
|
||||||
hidden: true
|
|
||||||
},
|
|
||||||
{
|
|
||||||
path: '/displayIscs/system',
|
|
||||||
component: IscsSystem,
|
|
||||||
hidden: true,
|
|
||||||
children: [
|
|
||||||
{
|
|
||||||
path: 'config/:mode',
|
|
||||||
component: IscsConfig,
|
|
||||||
hidden: true
|
|
||||||
}
|
|
||||||
]
|
|
||||||
},
|
|
||||||
{
|
|
||||||
path: '/device/teachDetail',
|
|
||||||
component: TeachDetail,
|
|
||||||
hidden: true
|
|
||||||
},
|
|
||||||
{
|
|
||||||
path: '/device/course',
|
|
||||||
component: ExamCourseDetail,
|
|
||||||
hidden: true
|
|
||||||
},
|
|
||||||
{
|
|
||||||
path: '/device/examRule/manage',
|
|
||||||
component: PublishExamRule,
|
|
||||||
hidden: true
|
|
||||||
},
|
|
||||||
{
|
|
||||||
path: '/device/examRule/draft/:mode/:ruleId/:lessonId',
|
|
||||||
component: PublishExamRuleDraft,
|
|
||||||
hidden: true
|
|
||||||
},
|
|
||||||
{ // 试卷详情
|
|
||||||
path: '/device/exam/:examId',
|
|
||||||
component: ExamDetail,
|
|
||||||
hidden: true
|
|
||||||
},
|
|
||||||
{ // 考试结果
|
|
||||||
path: '/device/result/:userExamId',
|
|
||||||
component: ExamResult,
|
|
||||||
hidden: true
|
|
||||||
},
|
|
||||||
{
|
|
||||||
// 运行图测试(仿真,仅有按计划行车和初始化操作)
|
|
||||||
path: '/design/runPlan/testRunplan',
|
|
||||||
component: TestRunplan,
|
|
||||||
hidden: true
|
|
||||||
}
|
|
||||||
];
|
|
||||||
export const asyncRouter = [
|
|
||||||
{ // 公共地图
|
|
||||||
path: '/design',
|
|
||||||
component: Layout,
|
|
||||||
redirect: '/design/home',
|
|
||||||
meta: {
|
|
||||||
roles: [admin, user]
|
|
||||||
},
|
|
||||||
children: [
|
|
||||||
{
|
|
||||||
path: '',
|
|
||||||
redirect: '/design/home',
|
|
||||||
component: DesignPlatform,
|
|
||||||
meta: {
|
|
||||||
i18n: 'router.designhomePage',
|
|
||||||
icon: 'design'
|
|
||||||
},
|
|
||||||
children: [
|
|
||||||
{
|
|
||||||
path: 'home',
|
|
||||||
component: DesignPlatformHome,
|
|
||||||
meta: {
|
|
||||||
}
|
|
||||||
},
|
|
||||||
{ // 运行图设计
|
|
||||||
path: 'runPlan/detail/:mapId',
|
|
||||||
component: PlanMonitorDetail,
|
|
||||||
hidden: true
|
|
||||||
},
|
|
||||||
{ // 剧本
|
|
||||||
path: 'script/home/:mapId',
|
|
||||||
component: ScriptmanageHome,
|
|
||||||
meta: {
|
|
||||||
i18n: 'router.scriptManage'
|
|
||||||
},
|
|
||||||
hidden: true
|
|
||||||
},
|
|
||||||
{ // 课程列表
|
|
||||||
path: 'lesson/home/:mapId',
|
|
||||||
component: LessonHome,
|
|
||||||
hidden: true
|
|
||||||
},
|
|
||||||
{ // 操作定义
|
|
||||||
path: 'lesson/trainingRule',
|
|
||||||
component: TrainingRuleList,
|
|
||||||
hidden: true
|
|
||||||
},
|
|
||||||
{ // 操作定义步骤
|
|
||||||
path: 'lesson/trainingRule/detail',
|
|
||||||
hidden: true,
|
|
||||||
component: TrainingRuleEdit
|
|
||||||
},
|
|
||||||
{ // 任务管理
|
|
||||||
path: 'lesson/taskManage',
|
|
||||||
component: Taskmanage,
|
|
||||||
hidden: true
|
|
||||||
},
|
|
||||||
{ // 实训管理
|
|
||||||
path: 'lesson/trainingManage',
|
|
||||||
component: Trainingmanage,
|
|
||||||
hidden: true
|
|
||||||
},
|
|
||||||
{ // 创建课程
|
|
||||||
path: 'lesson/edit/:type',
|
|
||||||
component: LessonEdit,
|
|
||||||
hidden: true
|
|
||||||
},
|
|
||||||
{ // 课程详情
|
|
||||||
path: 'lesson/details',
|
|
||||||
component: LessonDetail,
|
|
||||||
hidden: true,
|
|
||||||
children: [
|
|
||||||
{
|
|
||||||
path: 'edit/:type',
|
|
||||||
component: LessonEdit,
|
|
||||||
hidden: true
|
|
||||||
}
|
|
||||||
]
|
|
||||||
},
|
|
||||||
{ // 新版地图预览
|
|
||||||
path: 'mapPreviewNew/:mapId',
|
|
||||||
component: MapPreviewNew,
|
|
||||||
hidden: true
|
|
||||||
},
|
|
||||||
{
|
|
||||||
path: 'bigScreen/:mapId',
|
|
||||||
component: BigScreen,
|
|
||||||
hidden: true
|
|
||||||
},
|
|
||||||
{ // ibp列表
|
|
||||||
path: 'ibp/home/:mapId',
|
|
||||||
component: IbpHome,
|
|
||||||
hidden: true
|
|
||||||
},
|
|
||||||
{
|
|
||||||
path: 'ibp/edit',
|
|
||||||
component: IbpDraw,
|
|
||||||
hidden: true
|
|
||||||
}
|
|
||||||
]
|
|
||||||
}
|
|
||||||
]
|
|
||||||
},
|
|
||||||
{ // 实训平台
|
|
||||||
path: '/trainingPlatform',
|
|
||||||
component: Layout,
|
|
||||||
hidden: true,
|
|
||||||
meta: {
|
|
||||||
roles: [admin, user, userTrainingPlatform]
|
|
||||||
},
|
|
||||||
children: [
|
|
||||||
{
|
|
||||||
path: '',
|
|
||||||
component: TrainingPlatform,
|
|
||||||
meta: {
|
|
||||||
},
|
|
||||||
children: [
|
|
||||||
{ // 仿真详情
|
|
||||||
path: 'detail/:subSystem',
|
|
||||||
component: DemonstrationDetail,
|
|
||||||
hidden: true
|
|
||||||
},
|
|
||||||
{ // 教学系统 课程列表
|
|
||||||
path: 'teachHome/:subSystem',
|
|
||||||
component: TeachHome,
|
|
||||||
hidden: true
|
|
||||||
},
|
|
||||||
{ // 课程详情
|
|
||||||
path: 'teach/:subSystem',
|
|
||||||
component: TeachDetail,
|
|
||||||
hidden: true
|
|
||||||
},
|
|
||||||
{ // 试卷列表
|
|
||||||
path: 'course/:subSystem',
|
|
||||||
component: ExamCourseDetail,
|
|
||||||
hidden: true
|
|
||||||
},
|
|
||||||
{ // 考试系统 课程列表
|
|
||||||
path: 'examHome/:subSystem',
|
|
||||||
component: ExamHome,
|
|
||||||
hidden: true
|
|
||||||
},
|
|
||||||
{ // 试卷详情
|
|
||||||
path: 'exam/:examId',
|
|
||||||
component: ExamDetail,
|
|
||||||
hidden: true
|
|
||||||
},
|
|
||||||
{ // 试卷列表
|
|
||||||
path: 'examRule/manage',
|
|
||||||
component: PublishExamRule,
|
|
||||||
hidden: true
|
|
||||||
},
|
|
||||||
{ // 创建试卷
|
|
||||||
path: 'examRule/draft/:mode/:ruleId/:lessonId',
|
|
||||||
component: PublishExamRuleDraft,
|
|
||||||
hidden: true
|
|
||||||
},
|
|
||||||
{ // 购买
|
|
||||||
path: 'pay/:lessonId',
|
|
||||||
component: Pay,
|
|
||||||
hidden: true
|
|
||||||
},
|
|
||||||
{ // 考试结果
|
|
||||||
path: 'result/:userExamId',
|
|
||||||
component: ExamResult,
|
|
||||||
hidden: true
|
|
||||||
},
|
|
||||||
{ // 线路权限列表
|
|
||||||
path: 'permission/:mapId',
|
|
||||||
component: Package,
|
|
||||||
hidden: true
|
|
||||||
}
|
|
||||||
]
|
|
||||||
}
|
|
||||||
]
|
|
||||||
},
|
|
||||||
{ // 发布内容管理
|
|
||||||
path: '/publish',
|
|
||||||
component: Layout,
|
|
||||||
meta: {
|
|
||||||
i18n: 'router.pulishManage',
|
|
||||||
roles: [admin]
|
|
||||||
},
|
|
||||||
children: [
|
|
||||||
{ // 发布地图
|
|
||||||
path: 'map',
|
|
||||||
component: PublishMap,
|
|
||||||
meta: {
|
|
||||||
i18n: 'router.publishMapManage'
|
|
||||||
}
|
|
||||||
},
|
|
||||||
{ // 发布历史
|
|
||||||
path: 'map/detail',
|
|
||||||
hidden: true,
|
|
||||||
component: PublishMapDetail
|
|
||||||
},
|
|
||||||
{ // 发布课程
|
|
||||||
path: 'lesson',
|
|
||||||
component: PublishLesson,
|
|
||||||
meta: {
|
|
||||||
i18n: 'router.publishLessonManage'
|
|
||||||
}
|
|
||||||
},
|
|
||||||
{ // 模板运行图
|
|
||||||
path: 'runPlan/template',
|
|
||||||
component: RunPlanTemplate,
|
|
||||||
meta: {
|
|
||||||
i18n: 'router.runPlanTemplateManage'
|
|
||||||
}
|
|
||||||
},
|
|
||||||
{ // 加载运行图管理
|
|
||||||
path: 'runPlan/common',
|
|
||||||
component: RunPlanCommon,
|
|
||||||
meta: {
|
|
||||||
i18n: 'router.runPlanCommonManage'
|
|
||||||
}
|
|
||||||
},
|
|
||||||
{ // 新增加载运行图
|
|
||||||
path: 'runPlan/common/:mode',
|
|
||||||
component: RunPlanCommonDraft,
|
|
||||||
hidden: true
|
|
||||||
},
|
|
||||||
{ // 运行图预览
|
|
||||||
path: 'runPlan/view/:mode',
|
|
||||||
component: RunplanView,
|
|
||||||
hidden: true
|
|
||||||
},
|
|
||||||
{ // 每日运行图
|
|
||||||
path: 'runPlan/everyDay',
|
|
||||||
component: RunPlanEveryDay,
|
|
||||||
meta: {
|
|
||||||
i18n: 'router.runPlanEveryDayManage'
|
|
||||||
}
|
|
||||||
},
|
|
||||||
{ // 考试规则列表
|
|
||||||
path: 'examRule/manage',
|
|
||||||
component: PublishExamRule,
|
|
||||||
meta: {
|
|
||||||
i18n: 'router.examRuleManage'
|
|
||||||
}
|
|
||||||
},
|
|
||||||
{
|
|
||||||
path: 'examRule/draft/:mode/:ruleId/:lessonId',
|
|
||||||
component: PublishExamRuleDraft,
|
|
||||||
hidden: true
|
|
||||||
}
|
|
||||||
]
|
|
||||||
},
|
|
||||||
{ // 订单权限管理
|
|
||||||
path: '/orderauthor',
|
|
||||||
component: Layout,
|
|
||||||
meta: {
|
|
||||||
i18n: 'router.orderAuthorityManage',
|
|
||||||
roles: [admin]
|
|
||||||
},
|
|
||||||
children: [
|
|
||||||
{
|
|
||||||
path: 'author/manage',
|
|
||||||
component: Author,
|
|
||||||
meta: {
|
|
||||||
i18n: 'router.authorityManage'
|
|
||||||
}
|
|
||||||
},
|
|
||||||
{
|
|
||||||
path: 'commodity/manage',
|
|
||||||
component: Commodity,
|
|
||||||
meta: {
|
|
||||||
i18n: 'router.commodityManage'
|
|
||||||
}
|
|
||||||
},
|
|
||||||
{
|
|
||||||
path: 'order/manage',
|
|
||||||
component: OrderList,
|
|
||||||
meta: {
|
|
||||||
i18n: 'router.orderManage'
|
|
||||||
}
|
|
||||||
},
|
|
||||||
{
|
|
||||||
path: 'transfer/manage',
|
|
||||||
component: Permission,
|
|
||||||
meta: {
|
|
||||||
i18n: 'router.authorityTransferManage'
|
|
||||||
}
|
|
||||||
},
|
|
||||||
{
|
|
||||||
path: 'rules/manage',
|
|
||||||
component: UserRules,
|
|
||||||
meta: {
|
|
||||||
i18n: 'router.userRulesManage'
|
|
||||||
}
|
|
||||||
},
|
|
||||||
{
|
|
||||||
path: 'rules/manage/detail/:id',
|
|
||||||
hidden: true,
|
|
||||||
component: UserRulesDetail,
|
|
||||||
meta: {
|
|
||||||
i18n: 'router.userRulesManage'
|
|
||||||
}
|
|
||||||
},
|
|
||||||
{
|
|
||||||
path: 'order/draft/:mode/:orderId',
|
|
||||||
hidden: true,
|
|
||||||
component: OrderDraft,
|
|
||||||
meta: {
|
|
||||||
i18n: 'router.addOrder'
|
|
||||||
}
|
|
||||||
},
|
|
||||||
{
|
|
||||||
path: 'transfer/detail/:permissionId',
|
|
||||||
component: PermissionDetail,
|
|
||||||
hidden: true
|
|
||||||
},
|
|
||||||
{
|
|
||||||
path: 'transfer/create',
|
|
||||||
component: PermissionCreate,
|
|
||||||
hidden: true
|
|
||||||
}
|
|
||||||
]
|
|
||||||
},
|
|
||||||
{ // 系统管理
|
|
||||||
path: '/system',
|
|
||||||
component: Layout,
|
|
||||||
meta: {
|
|
||||||
i18n: 'router.systemManage',
|
|
||||||
roles: [admin]
|
|
||||||
},
|
|
||||||
children: [
|
|
||||||
{
|
|
||||||
path: 'dictionary',
|
|
||||||
component: Dictionary,
|
|
||||||
meta: {
|
|
||||||
i18n: 'router.dataDictionary'
|
|
||||||
}
|
|
||||||
},
|
|
||||||
{
|
|
||||||
path: 'dictionary/detail',
|
|
||||||
hidden: true,
|
|
||||||
component: DictionaryDetail,
|
|
||||||
meta: {
|
|
||||||
i18n: 'router.dataDictionaryDetails'
|
|
||||||
}
|
|
||||||
},
|
|
||||||
{
|
|
||||||
// 用户管理
|
|
||||||
path: 'userManage',
|
|
||||||
component: UserControl,
|
|
||||||
meta: {
|
|
||||||
i18n: 'router.userManage'
|
|
||||||
}
|
|
||||||
},
|
|
||||||
{
|
|
||||||
// 缓存管理
|
|
||||||
path: 'cache',
|
|
||||||
component: CacheControl,
|
|
||||||
meta: {
|
|
||||||
i18n: 'router.cacheManage'
|
|
||||||
}
|
|
||||||
},
|
|
||||||
{
|
|
||||||
path: 'userTrainingManage',
|
|
||||||
component: UserTraining,
|
|
||||||
meta: {
|
|
||||||
i18n: 'router.userTrainingManage'
|
|
||||||
}
|
|
||||||
},
|
|
||||||
{
|
|
||||||
path: 'userExamManage',
|
|
||||||
component: UserExam,
|
|
||||||
meta: {
|
|
||||||
i18n: 'router.userExamManage'
|
|
||||||
}
|
|
||||||
},
|
|
||||||
{
|
|
||||||
path: 'userSimulationManage',
|
|
||||||
component: UserSimulation,
|
|
||||||
meta: {
|
|
||||||
i18n: 'router.userSimulationManage'
|
|
||||||
}
|
|
||||||
},
|
|
||||||
{
|
|
||||||
path: 'existingSimulation',
|
|
||||||
component: ExistingSimulation,
|
|
||||||
meta: {
|
|
||||||
i18n: 'router.existingSimulation'
|
|
||||||
}
|
|
||||||
},
|
|
||||||
{
|
|
||||||
// 子系统生成
|
|
||||||
path: 'systemGenerate',
|
|
||||||
component: SystemGenerate,
|
|
||||||
meta: {
|
|
||||||
i18n: 'router.subsystemGeneration'
|
|
||||||
}
|
|
||||||
},
|
|
||||||
{ // 消息公告
|
|
||||||
path: 'news',
|
|
||||||
component: News,
|
|
||||||
meta: {
|
|
||||||
i18n: 'router.newsBulletin'
|
|
||||||
}
|
|
||||||
},
|
|
||||||
{ // 命令管理
|
|
||||||
path: 'commands',
|
|
||||||
component: CommandDictionary,
|
|
||||||
meta: {
|
|
||||||
i18n: 'router.commandDictionary'
|
|
||||||
}
|
|
||||||
},
|
|
||||||
{
|
|
||||||
path: 'commands/Detail',
|
|
||||||
hidden: true,
|
|
||||||
component: CommandDictionaryDetail
|
|
||||||
},
|
|
||||||
{ // 线路管理
|
|
||||||
path: 'configLine',
|
|
||||||
component: configLine,
|
|
||||||
meta: {
|
|
||||||
i18n: 'router.configLine'
|
|
||||||
}
|
|
||||||
},
|
|
||||||
{
|
|
||||||
path: 'deviceManage',
|
|
||||||
component: DeviceManage,
|
|
||||||
meta: {
|
|
||||||
i18n: 'router.deviceManage'
|
|
||||||
}
|
|
||||||
},
|
|
||||||
{// 发布申请
|
|
||||||
path: 'approval',
|
|
||||||
component: Approval,
|
|
||||||
meta: {
|
|
||||||
i18n: 'router.releaseApplication'
|
|
||||||
}
|
|
||||||
}
|
|
||||||
]
|
|
||||||
}
|
|
||||||
];
|
|
||||||
|
|
||||||
const createRouter = () => new VueRouter({
|
|
||||||
mode: 'history', // require service support
|
|
||||||
scrollBehavior: () => ({ y: 0 }),
|
|
||||||
routes: constantRoutes
|
|
||||||
});
|
|
||||||
|
|
||||||
const router = createRouter();
|
|
||||||
|
|
||||||
// router.beforeEach((to, from, next) => {
|
|
||||||
// const project = getSessionStorage('project');
|
|
||||||
// document.title = loginInfo[project || 'login'].title;
|
|
||||||
// next();
|
|
||||||
// });
|
|
||||||
|
|
||||||
// 兼容 vue-router在3.1.0版本以上的路由跳转使用的是 promise 的方式
|
|
||||||
const originalPush = VueRouter.prototype.push;
|
|
||||||
VueRouter.prototype.push = function push(location) {
|
|
||||||
return originalPush.call(this, location).catch(err => err);
|
|
||||||
};
|
|
||||||
|
|
||||||
export default router;
|
|
@ -1,5 +1,5 @@
|
|||||||
import { sendCommandNew } from '@/api/jmap/training';
|
import { sendCommandNew } from '@/api/jmap/training';
|
||||||
import router from '@/router/index_APP_TARGET';
|
import router from '@/router/index';
|
||||||
import Command from './Command';
|
import Command from './Command';
|
||||||
import Handler from './Handler';
|
import Handler from './Handler';
|
||||||
|
|
||||||
|
@ -1,5 +1,5 @@
|
|||||||
import store from '@/store/index';
|
import store from '@/store/index';
|
||||||
import router from '@/router/index_APP_TARGET';
|
import router from '@/router/index';
|
||||||
import CommandHandler from './CommandHandler.js';
|
import CommandHandler from './CommandHandler.js';
|
||||||
import ValidateHandler from './ValidateHandler.js';
|
import ValidateHandler from './ValidateHandler.js';
|
||||||
import { State2SimulationMap } from './Config.js';
|
import { State2SimulationMap } from './Config.js';
|
||||||
|
@ -1,4 +1,4 @@
|
|||||||
import { publicAsyncRoute, asyncRouter, constantRoutes, user, projectTrain, projectXian, projectXty, projectGzzb, projectJsxt, projectJyd, projectTky, projectHeb, superAdmin, admin, userTrainingPlatform, JSXT, projectRoute, projectDrts, projectSdy } from '@/router/index_APP_TARGET';
|
import { publicAsyncRoute, asyncRouter, constantRoutes, user, projectTrain, projectXian, projectXty, projectGzzb, projectJsxt, projectJyd, projectTky, projectHeb, superAdmin, admin, userTrainingPlatform, JSXT, projectRoute, projectDrts, projectSdy } from '@/router/index';
|
||||||
import { loginInfo } from '@/scripts/ProjectConfig';
|
import { loginInfo } from '@/scripts/ProjectConfig';
|
||||||
import { getSessionStorage } from '@/utils/auth';
|
import { getSessionStorage } from '@/utils/auth';
|
||||||
|
|
||||||
|
@ -8,7 +8,7 @@ import { getBaseUrl } from '@/utils/baseUrl';
|
|||||||
import { EventBus } from '@/scripts/event-bus';
|
import { EventBus } from '@/scripts/event-bus';
|
||||||
import ConstConfig from '@/scripts/ConstConfig';
|
import ConstConfig from '@/scripts/ConstConfig';
|
||||||
import Vue from 'vue';
|
import Vue from 'vue';
|
||||||
import router from '../router/index_APP_TARGET';
|
import router from '../router/index';
|
||||||
|
|
||||||
const BASE_API = getBaseUrl();
|
const BASE_API = getBaseUrl();
|
||||||
|
|
||||||
|
@ -22,7 +22,7 @@
|
|||||||
<script>
|
<script>
|
||||||
import { listPublishMap, getMapListByProjectCode } from '@/api/jmap/map';
|
import { listPublishMap, getMapListByProjectCode } from '@/api/jmap/map';
|
||||||
import { UrlConfig } from '@/scripts/ConstDic';
|
import { UrlConfig } from '@/scripts/ConstDic';
|
||||||
import { superAdmin, admin, lessonCreater } from '@/router/index_APP_TARGET';
|
import { superAdmin, admin, lessonCreater } from '@/router/index';
|
||||||
import { getSessionStorage, setSessionStorage, removeSessionStorage } from '@/utils/auth';
|
import { getSessionStorage, setSessionStorage, removeSessionStorage } from '@/utils/auth';
|
||||||
import FilterCity from '@/views/components/filterCity';
|
import FilterCity from '@/views/components/filterCity';
|
||||||
import localStore from 'storejs';
|
import localStore from 'storejs';
|
||||||
|
@ -34,7 +34,7 @@ import { getSubSystemDetail } from '@/api/trainingPlatform';
|
|||||||
import { UrlConfig } from '@/scripts/ConstDic';
|
import { UrlConfig } from '@/scripts/ConstDic';
|
||||||
import { forceDeleteLesson } from '@/api/jmap/lesson';
|
import { forceDeleteLesson } from '@/api/jmap/lesson';
|
||||||
import { getSessionStorage } from '@/utils/auth';
|
import { getSessionStorage } from '@/utils/auth';
|
||||||
import { lessonCreater } from '@/router/index_APP_TARGET';
|
import { lessonCreater } from '@/router/index';
|
||||||
import localStore from 'storejs';
|
import localStore from 'storejs';
|
||||||
|
|
||||||
export default {
|
export default {
|
||||||
|
@ -85,7 +85,7 @@ export default {
|
|||||||
this.editModel = {
|
this.editModel = {
|
||||||
id: model.id,
|
id: model.id,
|
||||||
name: model.name,
|
name: model.name,
|
||||||
mapId: this.$route.query.mapId,
|
mapId: this.$route.query.mapId || this.$route.params.mapId,
|
||||||
prdType: model.prdType,
|
prdType: model.prdType,
|
||||||
cityCode: model.cityCode,
|
cityCode: model.cityCode,
|
||||||
classIdList: []
|
classIdList: []
|
||||||
|
@ -94,7 +94,7 @@ import lick_icon from '@/assets/like.png';
|
|||||||
import unlike_icon from '@/assets/unlike.png';
|
import unlike_icon from '@/assets/unlike.png';
|
||||||
import reply_icon from '@/assets/reply.png';
|
import reply_icon from '@/assets/reply.png';
|
||||||
import delete_icon from '@/assets/delete.png';
|
import delete_icon from '@/assets/delete.png';
|
||||||
import { superAdmin } from '@/router/index_APP_TARGET';
|
import { superAdmin } from '@/router/index';
|
||||||
import { ProjectCode } from '@/scripts/ProjectConfig';
|
import { ProjectCode } from '@/scripts/ProjectConfig';
|
||||||
export default {
|
export default {
|
||||||
name: 'MessageBoard',
|
name: 'MessageBoard',
|
||||||
|
@ -20,7 +20,7 @@ import MapPublish from './publish';
|
|||||||
import MapPublish3d from './publish3d';
|
import MapPublish3d from './publish3d';
|
||||||
import { mapGetters } from 'vuex';
|
import { mapGetters } from 'vuex';
|
||||||
import { saveMap, getBuildMapExport } from '@/api/jmap/mapdraft';
|
import { saveMap, getBuildMapExport } from '@/api/jmap/mapdraft';
|
||||||
import { superAdmin, admin } from '@/router/index_APP_TARGET';
|
import { superAdmin, admin } from '@/router/index';
|
||||||
|
|
||||||
export default {
|
export default {
|
||||||
name: 'MapOperateMenu',
|
name: 'MapOperateMenu',
|
||||||
|
@ -8,7 +8,7 @@
|
|||||||
</template>
|
</template>
|
||||||
|
|
||||||
<script>
|
<script>
|
||||||
import { admin } from '@/router/index_APP_TARGET';
|
import { admin } from '@/router/index';
|
||||||
import { listPackagePermission, restorePackagePermission, getPackageQrCode, setCommodityStatus } from '@/api/management/distribute';
|
import { listPackagePermission, restorePackagePermission, getPackageQrCode, setCommodityStatus } from '@/api/management/distribute';
|
||||||
import { UrlConfig } from '@/scripts/ConstDic';
|
import { UrlConfig } from '@/scripts/ConstDic';
|
||||||
import QrCode from '@/components/QrCode';
|
import QrCode from '@/components/QrCode';
|
||||||
|
@ -252,8 +252,25 @@ export default {
|
|||||||
studentData.depart = depart;
|
studentData.depart = depart;
|
||||||
studentData.parentDepart = parentDepart;
|
studentData.parentDepart = parentDepart;
|
||||||
for ( let i = 2; i <= dataList[0].length; i++) {
|
for ( let i = 2; i <= dataList[0].length; i++) {
|
||||||
if (dataList[2][i] && dataList[1][i]) {
|
const serialNumber = dataList[0][i];
|
||||||
|
const studentId = dataList[1][i];
|
||||||
|
const name = dataList[2][i];
|
||||||
|
const reg = new RegExp('[\\u4E00-\\u9FFF]+', 'g');
|
||||||
|
const studentIdJudge = !!studentId && !reg.test(studentId);
|
||||||
|
const serialNumberJudge = serialNumber == (i - 1);
|
||||||
|
console.log(studentIdJudge, serialNumberJudge);
|
||||||
|
if (studentIdJudge && serialNumberJudge && name) {
|
||||||
students.push({account:dataList[1][i], name: dataList[2][i]});
|
students.push({account:dataList[1][i], name: dataList[2][i]});
|
||||||
|
} else {
|
||||||
|
if (!serialNumber && !studentId && !name) {
|
||||||
|
break;
|
||||||
|
} else if (!name) {
|
||||||
|
throw new Error(`序号为:《${serialNumber}》,学号为:《${studentId}》的数据学生姓名为空!`);
|
||||||
|
} else if (!studentIdJudge) {
|
||||||
|
throw new Error(`序号为:《${serialNumber}》,学号为:《${studentId}》的数据学号格式不正确!`);
|
||||||
|
} else if (!serialNumberJudge) {
|
||||||
|
throw new Error(`序号为:《${serialNumber}》,学号为:《${studentId}》的数据序号顺序不正确!`);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -7,7 +7,7 @@
|
|||||||
|
|
||||||
<script>
|
<script>
|
||||||
import { listUserPermision } from '@/api/management/author';
|
import { listUserPermision } from '@/api/management/author';
|
||||||
import { superAdmin, admin } from '@/router/index_APP_TARGET';
|
import { superAdmin, admin } from '@/router/index';
|
||||||
import selectRole from './selectRole/list';
|
import selectRole from './selectRole/list';
|
||||||
import LangStorage from '@/utils/lang';
|
import LangStorage from '@/utils/lang';
|
||||||
|
|
||||||
|
@ -35,7 +35,7 @@ import CopyMap from './copy';
|
|||||||
import LocalMap from './localMap';
|
import LocalMap from './localMap';
|
||||||
import ExportMap from './exportMap';
|
import ExportMap from './exportMap';
|
||||||
import MapSort from './mapSort';
|
import MapSort from './mapSort';
|
||||||
import { superAdmin } from '@/router/index_APP_TARGET';
|
import { superAdmin } from '@/router/index';
|
||||||
import { ProjectList } from '@/scripts/ProjectConfig';
|
import { ProjectList } from '@/scripts/ProjectConfig';
|
||||||
import { getPermissionQuickly } from '@/api/management/author';
|
import { getPermissionQuickly } from '@/api/management/author';
|
||||||
|
|
||||||
|
@ -6,7 +6,7 @@
|
|||||||
</template>
|
</template>
|
||||||
|
|
||||||
<script>
|
<script>
|
||||||
import { superAdmin } from '@/router/index_APP_TARGET';
|
import { superAdmin } from '@/router/index';
|
||||||
import { getRunPlanLoadList, listAllTempLateRunPlan, deleteDailyRunPlanLoad, postDailyRunPlanLoadGenerate, postSchedulingCommonGenerate } from '@/api/runplan';
|
import { getRunPlanLoadList, listAllTempLateRunPlan, deleteDailyRunPlanLoad, postDailyRunPlanLoadGenerate, postSchedulingCommonGenerate } from '@/api/runplan';
|
||||||
import { UrlConfig } from '@/scripts/ConstDic';
|
import { UrlConfig } from '@/scripts/ConstDic';
|
||||||
import CopyMap from './copyMap';
|
import CopyMap from './copyMap';
|
||||||
|
@ -5,7 +5,7 @@
|
|||||||
</template>
|
</template>
|
||||||
|
|
||||||
<script>
|
<script>
|
||||||
import { superAdmin } from '@/router/index_APP_TARGET';
|
import { superAdmin } from '@/router/index';
|
||||||
import { getPublishMapListOnline } from '@/api/jmap/map';
|
import { getPublishMapListOnline } from '@/api/jmap/map';
|
||||||
import { runPlanEveryDayList, deleteRunPlanEveryDay } from '@/api/runplan';
|
import { runPlanEveryDayList, deleteRunPlanEveryDay } from '@/api/runplan';
|
||||||
import { UrlConfig } from '@/scripts/ConstDic';
|
import { UrlConfig } from '@/scripts/ConstDic';
|
||||||
|
@ -6,7 +6,7 @@
|
|||||||
</template>
|
</template>
|
||||||
|
|
||||||
<script>
|
<script>
|
||||||
import { superAdmin } from '@/router/index_APP_TARGET';
|
import { superAdmin } from '@/router/index';
|
||||||
import { getPublishMapListOnline } from '@/api/jmap/map';
|
import { getPublishMapListOnline } from '@/api/jmap/map';
|
||||||
import { runPlanTemplateList, deleteRunPlanTemplate, generateCommonRunPlanEveryDay, postRunPlanTemplate } from '@/api/runplan';
|
import { runPlanTemplateList, deleteRunPlanTemplate, generateCommonRunPlanEveryDay, postRunPlanTemplate } from '@/api/runplan';
|
||||||
import { UrlConfig } from '@/scripts/ConstDic';
|
import { UrlConfig } from '@/scripts/ConstDic';
|
||||||
|
@ -19,7 +19,7 @@
|
|||||||
import Cookies from 'js-cookie';
|
import Cookies from 'js-cookie';
|
||||||
import ConstConfig from '@/scripts/ConstConfig';
|
import ConstConfig from '@/scripts/ConstConfig';
|
||||||
import { UrlConfig } from '@/scripts/ConstDic';
|
import { UrlConfig } from '@/scripts/ConstDic';
|
||||||
import { admin, superAdmin} from '@/router/index_APP_TARGET';
|
import { admin, superAdmin} from '@/router/index';
|
||||||
import {retractScript, publishScript, updateScript, deleteScript, getScriptPageList, createScript, getScriptExport} from '@/api/script';
|
import {retractScript, publishScript, updateScript, deleteScript, getScriptPageList, createScript, getScriptExport} from '@/api/script';
|
||||||
import { launchFullscreen } from '@/utils/screen';
|
import { launchFullscreen } from '@/utils/screen';
|
||||||
import { scriptDraftRecordNotifyNew, scriptRecordNotifyNew } from '@/api/simulation';
|
import { scriptDraftRecordNotifyNew, scriptRecordNotifyNew } from '@/api/simulation';
|
||||||
|
@ -1,695 +0,0 @@
|
|||||||
<template>
|
|
||||||
<div class="joylink-card">
|
|
||||||
<div style="margin-top: 20px;width: 90%; position: absolute; left: 5%; height: 100%;">
|
|
||||||
<el-row>
|
|
||||||
<el-col :span="20">
|
|
||||||
<el-form ref="form" :model="form" :rules="rules" label-width="120px" size="mini" style="width: 100%;margin-top: 10px;">
|
|
||||||
<el-row>
|
|
||||||
<el-col :span="6">
|
|
||||||
<el-form-item label="班级:" prop="classId">
|
|
||||||
<el-select v-model="form.classId" placeholder="请选择" @change="getLessonByClassId">
|
|
||||||
<el-option
|
|
||||||
v-for="item in classList"
|
|
||||||
:key="item.id"
|
|
||||||
:label="item.name"
|
|
||||||
:value="item.id"
|
|
||||||
/>
|
|
||||||
</el-select>
|
|
||||||
</el-form-item>
|
|
||||||
</el-col>
|
|
||||||
<el-col :span="6">
|
|
||||||
<el-form-item label="考勤天数:" prop="attendanceDays">
|
|
||||||
<el-input-number v-model="form.attendanceDays" :min="1" />
|
|
||||||
</el-form-item>
|
|
||||||
</el-col>
|
|
||||||
<el-col :span="6">
|
|
||||||
<el-form-item label="学期起始日期:" prop="termBeginDate">
|
|
||||||
<el-date-picker
|
|
||||||
v-model="form.termBeginDate"
|
|
||||||
type="date"
|
|
||||||
value-format="yyyy-MM-dd"
|
|
||||||
placeholder="选择日期"
|
|
||||||
/>
|
|
||||||
</el-form-item>
|
|
||||||
</el-col>
|
|
||||||
<el-col :span="6">
|
|
||||||
<el-form-item label="学期结束日期:" prop="termEndDate">
|
|
||||||
<el-date-picker
|
|
||||||
v-model="form.termEndDate"
|
|
||||||
type="date"
|
|
||||||
value-format="yyyy-MM-dd"
|
|
||||||
placeholder="选择日期"
|
|
||||||
/>
|
|
||||||
</el-form-item>
|
|
||||||
</el-col>
|
|
||||||
</el-row>
|
|
||||||
<el-row>
|
|
||||||
<el-col :span="6">
|
|
||||||
<el-form-item label="教学类型:"><span>行调</span></el-form-item>
|
|
||||||
</el-col>
|
|
||||||
<el-col :span="6">
|
|
||||||
<el-form-item label="课程:" prop="centerLessonId">
|
|
||||||
<el-select v-model="form.centerLessonId" clearable placeholder="请选择" @change="centerLessonChange">
|
|
||||||
<el-option
|
|
||||||
v-for="item in centerLessonList"
|
|
||||||
:key="item.id"
|
|
||||||
:label="item.name"
|
|
||||||
:value="item.id"
|
|
||||||
/>
|
|
||||||
</el-select>
|
|
||||||
</el-form-item>
|
|
||||||
</el-col>
|
|
||||||
<el-col :span="6">
|
|
||||||
<el-form-item label="试卷:" prop="centerExamPaperId">
|
|
||||||
<el-select v-model="form.centerExamPaperId" clearable placeholder="请选择">
|
|
||||||
<el-option
|
|
||||||
v-for="item in centerExamPaperList"
|
|
||||||
:key="item.id"
|
|
||||||
:label="item.name"
|
|
||||||
:value="item.id"
|
|
||||||
/>
|
|
||||||
</el-select>
|
|
||||||
</el-form-item>
|
|
||||||
</el-col>
|
|
||||||
</el-row>
|
|
||||||
<el-row>
|
|
||||||
<el-col :span="6">
|
|
||||||
<el-form-item label="教学类型:"><span>现地</span></el-form-item>
|
|
||||||
</el-col>
|
|
||||||
<el-col :span="6">
|
|
||||||
<el-form-item label="课程:" prop="localLessonId">
|
|
||||||
<el-select v-model="form.localLessonId" clearable placeholder="请选择" @change="localLessonChange">
|
|
||||||
<el-option
|
|
||||||
v-for="item in localLessonList"
|
|
||||||
:key="item.id"
|
|
||||||
:label="item.name"
|
|
||||||
:value="item.id"
|
|
||||||
/>
|
|
||||||
</el-select>
|
|
||||||
</el-form-item>
|
|
||||||
</el-col>
|
|
||||||
<el-col :span="6">
|
|
||||||
<el-form-item label="试卷:" prop="localExamPaperId">
|
|
||||||
<el-select v-model="form.localExamPaperId" clearable placeholder="请选择">
|
|
||||||
<el-option
|
|
||||||
v-for="item in localExamPaperList"
|
|
||||||
:key="item.id"
|
|
||||||
:label="item.name"
|
|
||||||
:value="item.id"
|
|
||||||
/>
|
|
||||||
</el-select>
|
|
||||||
</el-form-item>
|
|
||||||
</el-col>
|
|
||||||
</el-row>
|
|
||||||
</el-form>
|
|
||||||
</el-col>
|
|
||||||
<el-col :span="4">
|
|
||||||
<el-button type="primary" size="mini" @click="query">查询</el-button>
|
|
||||||
<el-button :loading="loadingStudentInfo" type="primary" class="uploadDemo" size="mini" style="margin-top: 10px;">
|
|
||||||
<input
|
|
||||||
id="importResults"
|
|
||||||
ref="files"
|
|
||||||
type="file"
|
|
||||||
class="file_box"
|
|
||||||
accept=".json, application/json, .csv, application/vnd.openxmlformats-officedocument.spreadsheetml.sheet, application/vnd.ms-excel"
|
|
||||||
@change="importResults"
|
|
||||||
>
|
|
||||||
导入学生信息
|
|
||||||
</el-button>
|
|
||||||
<el-button type="primary" size="mini" style="margin-top: 10px;" @click="exportResults">成绩统计</el-button></el-col>
|
|
||||||
</el-row>
|
|
||||||
<div style="height: calc(100% - 270px);">
|
|
||||||
<el-scrollbar wrap-class="scrollbar-wrapper">
|
|
||||||
<el-table
|
|
||||||
:data="tableData"
|
|
||||||
border
|
|
||||||
>
|
|
||||||
<el-table-column prop="index" label="序号" />
|
|
||||||
<el-table-column
|
|
||||||
prop="studentID"
|
|
||||||
label="学号"
|
|
||||||
/>
|
|
||||||
<el-table-column
|
|
||||||
prop="name"
|
|
||||||
label="姓名"
|
|
||||||
/>
|
|
||||||
<el-table-column label="考勤(10分)" prop="attendance" width="180" />
|
|
||||||
<el-table-column label="技能操作(30分)">
|
|
||||||
<el-table-column v-if="showLocal" :label="'ATS现地('+ lessonSocre +'分)'" prop="localLessonPassRate" />
|
|
||||||
<el-table-column v-if="showCenter" :label="'ATS行调('+ lessonSocre+'分)'" prop="centerLessonPassRate" />
|
|
||||||
</el-table-column>
|
|
||||||
<el-table-column label="考试成绩(60分)">
|
|
||||||
<el-table-column v-if="showLocal" :label="'ATS现地('+ examSocre+'分)'" prop="localExamSocreRadio" />
|
|
||||||
<el-table-column v-if="showCenter" :label="'ATS行调('+ examSocre+'分)'" prop="centerExamSocreRadio" />
|
|
||||||
</el-table-column>
|
|
||||||
<el-table-column label="期末成绩(100分)" prop="totolScore" />
|
|
||||||
</el-table>
|
|
||||||
</el-scrollbar>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
</template>
|
|
||||||
|
|
||||||
<script>
|
|
||||||
import { getLessonDrftList } from '@/api/jmap/lessondraft';
|
|
||||||
import XLSX from 'xlsx';
|
|
||||||
import { convertSheetToList } from '@/utils/runPlan';
|
|
||||||
import { importStudentResults, exportStudentResults } from '@/api/management/user';
|
|
||||||
import { getSessionStorage } from '@/utils/auth';
|
|
||||||
import { ProjectCode } from '@/scripts/ProjectConfig';
|
|
||||||
import { getProjectClassList } from '@/api/management/user';
|
|
||||||
import { getLessonByClassId } from '@/api/jmap/lesson';
|
|
||||||
import { getExamList } from '@/api/management/exam';
|
|
||||||
|
|
||||||
export default {
|
|
||||||
name: 'StudentManage',
|
|
||||||
components: {
|
|
||||||
},
|
|
||||||
data() {
|
|
||||||
var validatePass = (rule, value, callback) => {
|
|
||||||
if (this.form.attendanceDays && this.form.termBeginDate && this.form.termEndDate) {
|
|
||||||
const timeDifference = new Date(this.form.termEndDate).valueOf() - new Date(this.form.termBeginDate).valueOf();
|
|
||||||
if (timeDifference < (this.form.attendanceDays - 1) * 24 * 3600 * 1000) {
|
|
||||||
callback(new Error('学期日期间隔不得小于考勤天数!'));
|
|
||||||
} else {
|
|
||||||
this.$refs.form.clearValidate('attendanceDays');
|
|
||||||
this.$refs.form.clearValidate('termBeginDate');
|
|
||||||
this.$refs.form.clearValidate('termEndDate');
|
|
||||||
callback();
|
|
||||||
}
|
|
||||||
} else {
|
|
||||||
callback();
|
|
||||||
}
|
|
||||||
};
|
|
||||||
var validatePrdParam = (rule, value, callback) => {
|
|
||||||
if ((this.form.localLessonId && this.form.localExamPaperId) || (this.form.centerLessonId && this.form.centerExamPaperId)) {
|
|
||||||
callback();
|
|
||||||
} else {
|
|
||||||
callback(new Error('至少选择一类课程试卷!'));
|
|
||||||
}
|
|
||||||
};
|
|
||||||
return {
|
|
||||||
loading: false,
|
|
||||||
loadingStudentInfo: false,
|
|
||||||
classList: [],
|
|
||||||
localLessonList: [],
|
|
||||||
centerLessonList: [],
|
|
||||||
localExamPaperList: [],
|
|
||||||
centerExamPaperList: [],
|
|
||||||
showLocal: false,
|
|
||||||
showCenter: false,
|
|
||||||
tableData: [],
|
|
||||||
props: { multiple: true, value: 'id', label: 'name' },
|
|
||||||
form: {
|
|
||||||
attendanceDays: 1,
|
|
||||||
classId: '',
|
|
||||||
termBeginDate: '',
|
|
||||||
termEndDate: '',
|
|
||||||
localLessonId: '',
|
|
||||||
centerLessonId: '',
|
|
||||||
localExamPaperId: '',
|
|
||||||
centerExamPaperId: ''
|
|
||||||
},
|
|
||||||
examDataList: [
|
|
||||||
{
|
|
||||||
id: '01',
|
|
||||||
name: '现地',
|
|
||||||
children: []
|
|
||||||
}, {
|
|
||||||
id: '02',
|
|
||||||
name: '行调',
|
|
||||||
children: []
|
|
||||||
}
|
|
||||||
],
|
|
||||||
rules: {
|
|
||||||
classId: [{ required: true, message: '请选择班级', trigger: 'change' }],
|
|
||||||
attendanceDays: [
|
|
||||||
{required: true, message: '请输入考勤天数', trigger: 'blur'},
|
|
||||||
{required: true, message: '请输入考勤天数', trigger: 'change'},
|
|
||||||
{validator: validatePass, trigger: 'blur' },
|
|
||||||
{validator: validatePass, trigger: 'change'}
|
|
||||||
],
|
|
||||||
termBeginDate: [{required: true, message: '请选择开始日期', trigger: 'change'}, {validator: validatePass, trigger: 'change' }],
|
|
||||||
termEndDate: [{required: true, message: '请选择结束日期', trigger: 'change'}, {validator: validatePass, trigger: 'change' }],
|
|
||||||
localExamPaperId: [{validator: validatePrdParam, trigger: 'change'}],
|
|
||||||
centerExamPaperId: [{validator: validatePrdParam, trigger: 'change'}]
|
|
||||||
},
|
|
||||||
pagerConfig: {
|
|
||||||
pageSize: 'pageSize',
|
|
||||||
pageIndex: 'pageNum'
|
|
||||||
},
|
|
||||||
queryForm: {
|
|
||||||
show: false
|
|
||||||
},
|
|
||||||
queryList: {
|
|
||||||
query: this.queryFunction,
|
|
||||||
selectCheckShow: false,
|
|
||||||
indexShow: true,
|
|
||||||
columns: [
|
|
||||||
|
|
||||||
]
|
|
||||||
},
|
|
||||||
exportData: {
|
|
||||||
classId: '',
|
|
||||||
localLessonId: ''
|
|
||||||
}
|
|
||||||
};
|
|
||||||
},
|
|
||||||
computed: {
|
|
||||||
mapId() {
|
|
||||||
return this.$route.params.mapId;
|
|
||||||
},
|
|
||||||
project() {
|
|
||||||
return getSessionStorage('project');
|
|
||||||
},
|
|
||||||
lessonSocre() {
|
|
||||||
return this.showLocal && this.showCenter ? 15 : 30;
|
|
||||||
},
|
|
||||||
examSocre() {
|
|
||||||
return this.showLocal && this.showCenter ? 30 : 60;
|
|
||||||
}
|
|
||||||
},
|
|
||||||
watch: {
|
|
||||||
$route() {
|
|
||||||
this.refresh();
|
|
||||||
}
|
|
||||||
},
|
|
||||||
mounted() {
|
|
||||||
this.classList = [];
|
|
||||||
getProjectClassList(ProjectCode[this.project]).then(resp => {
|
|
||||||
this.classList = resp.data;
|
|
||||||
}).catch(() =>{
|
|
||||||
this.$message.error('获取班级数据失败!');
|
|
||||||
});
|
|
||||||
},
|
|
||||||
methods: {
|
|
||||||
queryFunction(params) {
|
|
||||||
return getLessonDrftList(this.$route.params.mapId, params);
|
|
||||||
},
|
|
||||||
importResults(e) {
|
|
||||||
const obj = this.$refs.files;
|
|
||||||
if (obj.files) {
|
|
||||||
const file = obj.files[0];
|
|
||||||
this.handleImportResults(file);
|
|
||||||
obj.value = '';
|
|
||||||
}
|
|
||||||
},
|
|
||||||
query() {
|
|
||||||
this.$refs.form.validate((valid) => {
|
|
||||||
if (valid) {
|
|
||||||
if ((this.form.localLessonId && this.form.localExamPaperId) || (this.form.centerLessonId && this.form.centerExamPaperId)) {
|
|
||||||
const prdParams = [];
|
|
||||||
if (this.form.localLessonId && this.form.localExamPaperId) {
|
|
||||||
prdParams.push({prdType: '01', lessonId: this.form.localLessonId, examPaperId: this.form.localExamPaperId});
|
|
||||||
}
|
|
||||||
if (this.form.centerLessonId && this.form.centerExamPaperId) {
|
|
||||||
prdParams.push({prdType: '02', lessonId: this.form.centerLessonId, examPaperId: this.form.centerExamPaperId});
|
|
||||||
}
|
|
||||||
const params = {
|
|
||||||
attendanceDays: this.form.attendanceDays,
|
|
||||||
classId:this.form.classId,
|
|
||||||
termBeginDate: this.form.termBeginDate,
|
|
||||||
termEndDate: this.form.termEndDate,
|
|
||||||
prdParams: prdParams
|
|
||||||
};
|
|
||||||
this.exportData = {
|
|
||||||
classId: '',
|
|
||||||
localLessonId: ''
|
|
||||||
};
|
|
||||||
exportStudentResults(params).then(resp => {
|
|
||||||
this.tableData = [];
|
|
||||||
this.showLocal = false;
|
|
||||||
this.showCenter = false;
|
|
||||||
this.exportData = {
|
|
||||||
classId: params.classId
|
|
||||||
};
|
|
||||||
resp.data.forEach((item, index) => {
|
|
||||||
let localExamSocreRadio = -1;
|
|
||||||
let localLessonPassRate = -1;
|
|
||||||
let centerExamSocreRadio = -1;
|
|
||||||
let centerLessonPassRate = -1;
|
|
||||||
let totolScore = 0;
|
|
||||||
item.scores.forEach(elem => {
|
|
||||||
if (elem.prdType === '01') {
|
|
||||||
this.showLocal = true;
|
|
||||||
localExamSocreRadio = elem.examSocreRadio * 60 / item.scores.length;
|
|
||||||
localLessonPassRate = elem.lessonPassRate * 30 / item.scores.length;
|
|
||||||
totolScore += localExamSocreRadio * 100;
|
|
||||||
totolScore += localLessonPassRate * 100;
|
|
||||||
} else if (elem.prdType === '02') {
|
|
||||||
this.showCenter = true;
|
|
||||||
centerExamSocreRadio = elem.examSocreRadio * 60 / item.scores.length;
|
|
||||||
centerLessonPassRate = elem.lessonPassRate * 30 / item.scores.length;
|
|
||||||
totolScore += centerExamSocreRadio * 100;
|
|
||||||
totolScore += centerLessonPassRate * 100;
|
|
||||||
}
|
|
||||||
});
|
|
||||||
totolScore += item.attendance * 100 * 10;
|
|
||||||
this.tableData.push(
|
|
||||||
{
|
|
||||||
index: index + 1,
|
|
||||||
name: item.name,
|
|
||||||
studentID: item.studentID,
|
|
||||||
attendance: Math.round(item.attendance * 100) / 10,
|
|
||||||
localExamSocreRadio:Math.round(localExamSocreRadio * 10) / 10,
|
|
||||||
localLessonPassRate: Math.round(localLessonPassRate * 10) / 10,
|
|
||||||
centerExamSocreRadio: Math.round(centerExamSocreRadio * 10) / 10,
|
|
||||||
centerLessonPassRate: Math.round(centerLessonPassRate * 10) / 10,
|
|
||||||
totolScore: Math.round(totolScore) / 100
|
|
||||||
});
|
|
||||||
});
|
|
||||||
}).catch(() =>{
|
|
||||||
this.$message.error('获取学生考试成绩失败!');
|
|
||||||
});
|
|
||||||
} else {
|
|
||||||
this.$messageBox('您至少需选择一种产品类型下的课程与考试!');
|
|
||||||
}
|
|
||||||
}
|
|
||||||
});
|
|
||||||
|
|
||||||
},
|
|
||||||
localLessonChange(lessonId) {
|
|
||||||
this.localExamPaperList = [];
|
|
||||||
this.form.localExamPaperId = '';
|
|
||||||
if (lessonId) {
|
|
||||||
getExamList({lessonId:lessonId, pageSize:999, pageNum:1}).then(resp => {
|
|
||||||
this.localExamPaperList = resp.data.list;
|
|
||||||
}).catch(()=> {
|
|
||||||
this.$message.error('获取试卷列表失败!');
|
|
||||||
});
|
|
||||||
}
|
|
||||||
},
|
|
||||||
centerLessonChange(lessonId) {
|
|
||||||
this.centerExamPaperList = [];
|
|
||||||
this.form.centerExamPaperId = '';
|
|
||||||
if (lessonId) {
|
|
||||||
getExamList({lessonId:lessonId, pageSize:999, pageNum:1}).then(resp => {
|
|
||||||
this.centerExamPaperList = resp.data.list;
|
|
||||||
}).catch(()=> {
|
|
||||||
this.$message.error('获取试卷列表失败!');
|
|
||||||
});
|
|
||||||
}
|
|
||||||
},
|
|
||||||
getLessonByClassId(classId) {
|
|
||||||
this.localLessonList = [];
|
|
||||||
this.centerLessonList = [];
|
|
||||||
this.form.localLessonId = '';
|
|
||||||
this.form.centerLessonId = '';
|
|
||||||
this.localExamPaperList = [];
|
|
||||||
this.form.localExamPaperId = '';
|
|
||||||
this.centerExamPaperList = [];
|
|
||||||
this.form.centerExamPaperId = '';
|
|
||||||
if (classId) {
|
|
||||||
getLessonByClassId(classId).then(resp => {
|
|
||||||
this.lessonList = resp.data;
|
|
||||||
this.lessonList.forEach(item => {
|
|
||||||
if (item.prdType === '01') {
|
|
||||||
this.localLessonList.push(item);
|
|
||||||
} else if (item.prdType === '02') {
|
|
||||||
this.centerLessonList.push(item);
|
|
||||||
}
|
|
||||||
});
|
|
||||||
}).catch(()=> {
|
|
||||||
this.$message.error('获取课程列表失败!');
|
|
||||||
});
|
|
||||||
}
|
|
||||||
},
|
|
||||||
handleImportResults(file) {
|
|
||||||
const studentData = { className: '', students:[] };
|
|
||||||
if (file) {
|
|
||||||
setTimeout(() => {
|
|
||||||
const that = this;
|
|
||||||
const reader = new FileReader();
|
|
||||||
if (reader) {
|
|
||||||
reader.onload = function (e) {
|
|
||||||
let wb;
|
|
||||||
const data = e.target.result;
|
|
||||||
if (that.rABS) {
|
|
||||||
wb = XLSX.read(btoa(that.fixdata(data)), { // 手动转化
|
|
||||||
type: 'base64'
|
|
||||||
});
|
|
||||||
} else {
|
|
||||||
wb = XLSX.read(data, {
|
|
||||||
type: 'binary'
|
|
||||||
});
|
|
||||||
}
|
|
||||||
if (wb) {
|
|
||||||
try {
|
|
||||||
const students = [];
|
|
||||||
for (const index in wb.Sheets) {
|
|
||||||
const dataList = convertSheetToList(wb.Sheets[index], true);
|
|
||||||
if (dataList.length) {
|
|
||||||
const className = dataList[0][2].split(' ')[0].replace(/\s*/g, '').split(':')[1];
|
|
||||||
studentData.className = className;
|
|
||||||
for ( let i = 5; i <= dataList[0].length; i++) {
|
|
||||||
if (dataList[2][i] && dataList[1][i]) {
|
|
||||||
students.push({studentID:dataList[2][i], name: dataList[1][i]});
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
studentData.students = students;
|
|
||||||
}
|
|
||||||
that.loadingStudentInfo = true;
|
|
||||||
importStudentResults(ProjectCode[that.project], studentData).then(resp => {
|
|
||||||
that.classList = [];
|
|
||||||
getProjectClassList(ProjectCode[that.project]).then(respon => {
|
|
||||||
that.classList = respon.data;
|
|
||||||
that.loadingStudentInfo = false;
|
|
||||||
}).catch(() =>{
|
|
||||||
that.$message.error('获取班级数据失败!');
|
|
||||||
that.loadingStudentInfo = false;
|
|
||||||
});
|
|
||||||
that.$message.success('学生信息导入成功!');
|
|
||||||
|
|
||||||
}).catch((error) => {
|
|
||||||
that.$message.error('学生信息导入失败:' + error.message);
|
|
||||||
that.loadingStudentInfo = false;
|
|
||||||
});
|
|
||||||
} catch (error) {
|
|
||||||
that.$message.warning(`解析成绩单失败:${error}`);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
};
|
|
||||||
if (that.rABS) {
|
|
||||||
reader.readAsArrayBuffer(file);
|
|
||||||
} else {
|
|
||||||
reader.readAsBinaryString(file);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}, 200);
|
|
||||||
}
|
|
||||||
},
|
|
||||||
handelData() {
|
|
||||||
|
|
||||||
},
|
|
||||||
exportResults() {
|
|
||||||
if (!this.tableData || !this.tableData.length) {
|
|
||||||
this.$message.error('暂无导出数据!');
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
let className = '';
|
|
||||||
this.classList.forEach(item => {
|
|
||||||
if (item.id === this.exportData.classId) {
|
|
||||||
className = item.name;
|
|
||||||
}
|
|
||||||
});
|
|
||||||
const wb = XLSX.utils.book_new();
|
|
||||||
let cellNum = 0;
|
|
||||||
let data = [{A:'贵 州 装 备 制 造 职 业 学 院'}, {A:'实 训 成 绩 登 记 表'}, {A:`班级:${className} 实训课程名称: 20XX 学年 第 学期 `}];
|
|
||||||
const data1 = [{A: '序号', B: '姓名', C:'学号', D:'考勤(10分)', E: '技能操作(30分)', F: '', G: '考试成绩(60分)', H: '', I: '期末成绩', J: '备注'}, {E: 'ATS现地(15分)', F: 'ATS行调(15分)', G: 'ATS现地(30分)', H: 'ATS行调(30分)'}];
|
|
||||||
const data2 = [{A: '序号', B: '姓名', C:'学号', D:'考勤(10分)', E: '技能操作(30分)', F: '考试成绩(60分)', G: '期末成绩', H: '备注'}, { E: 'ATS现地(30分)', F: 'ATS现地(60分)'}];
|
|
||||||
const data3 = [{A: '序号', B: '姓名', C:'学号', D:'考勤(10分)', E: '技能操作(30分)', F: '考试成绩(60分)', G: '期末成绩', H: '备注'}, {E: 'ATS行调(30分)', F: 'ATS行调(60分)'}];
|
|
||||||
if (this.showCenter && this.showLocal) {
|
|
||||||
data = [...data, ...data1];
|
|
||||||
cellNum = 9;
|
|
||||||
this.tableData.forEach(item => {
|
|
||||||
data.push({
|
|
||||||
A: item.index,
|
|
||||||
B: item.name,
|
|
||||||
C: item.studentID,
|
|
||||||
D: item.attendance,
|
|
||||||
E: item.localLessonPassRate,
|
|
||||||
F: item.centerLessonPassRate,
|
|
||||||
G: item.localExamSocreRadio,
|
|
||||||
H: item.centerExamSocreRadio,
|
|
||||||
I: item.totolScore,
|
|
||||||
J: ''
|
|
||||||
});
|
|
||||||
});
|
|
||||||
} else if (this.showCenter) {
|
|
||||||
data = [...data, ...data3];
|
|
||||||
cellNum = 7;
|
|
||||||
this.tableData.forEach(item => {
|
|
||||||
data.push({
|
|
||||||
A: item.index,
|
|
||||||
B: item.name,
|
|
||||||
C: item.studentID,
|
|
||||||
D: item.attendance,
|
|
||||||
E: item.centerLessonPassRate,
|
|
||||||
F: item.centerExamSocreRadio,
|
|
||||||
G: item.totolScore,
|
|
||||||
H: ''
|
|
||||||
});
|
|
||||||
});
|
|
||||||
} else if (this.showLocal) {
|
|
||||||
data = [...data, ...data2];
|
|
||||||
cellNum = 7;
|
|
||||||
this.tableData.forEach(item => {
|
|
||||||
data.push({
|
|
||||||
A: item.index,
|
|
||||||
B: item.name,
|
|
||||||
C: item.studentID,
|
|
||||||
D: item.attendance,
|
|
||||||
E: item.localLessonPassRate,
|
|
||||||
F: item.localExamSocreRadio,
|
|
||||||
G: item.totolScore,
|
|
||||||
H: ''
|
|
||||||
});
|
|
||||||
});
|
|
||||||
}
|
|
||||||
const ws = XLSX.utils.json_to_sheet(data, {skipHeader:true});
|
|
||||||
ws['A1'].s = { // 设置副标题样式
|
|
||||||
font: {
|
|
||||||
name: '宋体',
|
|
||||||
sz: 20,
|
|
||||||
color: {rgb: '#000000'},
|
|
||||||
bold: true,
|
|
||||||
italic: false,
|
|
||||||
underline: false
|
|
||||||
},
|
|
||||||
alignment: {
|
|
||||||
horizontal: 'center',
|
|
||||||
vertical: 'center'
|
|
||||||
}
|
|
||||||
};
|
|
||||||
ws['A2'].s = { // 设置副标题样式
|
|
||||||
font: {
|
|
||||||
name: '宋体',
|
|
||||||
sz: 16,
|
|
||||||
color: {rgb: '#000000'},
|
|
||||||
bold: true,
|
|
||||||
italic: false,
|
|
||||||
underline: false
|
|
||||||
},
|
|
||||||
alignment: {
|
|
||||||
horizontal: 'center',
|
|
||||||
vertical: 'center'
|
|
||||||
}
|
|
||||||
};
|
|
||||||
ws['A3'].s = { // 设置副标题样式
|
|
||||||
font: {
|
|
||||||
name: '宋体',
|
|
||||||
sz: 12,
|
|
||||||
color: {rgb: '#000000'},
|
|
||||||
bold: false,
|
|
||||||
italic: false,
|
|
||||||
underline: false
|
|
||||||
},
|
|
||||||
alignment: {
|
|
||||||
horizontal: 'center',
|
|
||||||
vertical: 'center'
|
|
||||||
}
|
|
||||||
};
|
|
||||||
ws['!merges'] = [
|
|
||||||
{
|
|
||||||
s: {c: 0, r: 0},
|
|
||||||
e: {c: cellNum, r: 0}
|
|
||||||
},
|
|
||||||
{
|
|
||||||
s: {c: 0, r: 1},
|
|
||||||
e: {c: cellNum, r: 1}
|
|
||||||
},
|
|
||||||
{
|
|
||||||
s: {c: 0, r: 2},
|
|
||||||
e: {c: cellNum, r: 2}
|
|
||||||
},
|
|
||||||
{
|
|
||||||
s: {c: 0, r: 3},
|
|
||||||
e: {c: 0, r: 4}
|
|
||||||
},
|
|
||||||
{
|
|
||||||
s: {c: 1, r: 3},
|
|
||||||
e: {c: 1, r: 4}
|
|
||||||
},
|
|
||||||
{
|
|
||||||
s: {c: 2, r: 3},
|
|
||||||
e: {c: 2, r: 4}
|
|
||||||
},
|
|
||||||
{
|
|
||||||
s: {c: 3, r: 3},
|
|
||||||
e: {c: 3, r: 4}
|
|
||||||
}
|
|
||||||
];
|
|
||||||
if (this.showCenter && this.showLocal) {
|
|
||||||
ws['!merges'].push({
|
|
||||||
s: {c: 4, r: 3},
|
|
||||||
e: {c: 5, r: 3}
|
|
||||||
});
|
|
||||||
ws['!merges'].push({
|
|
||||||
s: {c: 6, r: 3},
|
|
||||||
e: {c: 7, r: 3}
|
|
||||||
});
|
|
||||||
ws['!merges'].push({
|
|
||||||
s: {c: 8, r: 3},
|
|
||||||
e: {c: 8, r: 4}
|
|
||||||
});
|
|
||||||
ws['!merges'].push({
|
|
||||||
s: {c: 9, r: 3},
|
|
||||||
e: {c: 9, r: 4}
|
|
||||||
});
|
|
||||||
} else {
|
|
||||||
ws['!merges'].push({
|
|
||||||
s: {c: 6, r: 3},
|
|
||||||
e: {c: 6, r: 4}
|
|
||||||
});
|
|
||||||
ws['!merges'].push({
|
|
||||||
s: {c: 7, r: 3},
|
|
||||||
e: {c: 7, r: 4}
|
|
||||||
});
|
|
||||||
}
|
|
||||||
ws['!cols'] = [
|
|
||||||
{width: 10},
|
|
||||||
{width: 10},
|
|
||||||
{width: 10},
|
|
||||||
{width: 15},
|
|
||||||
{width: 15},
|
|
||||||
{width: 15},
|
|
||||||
{width: 15},
|
|
||||||
{width: 15},
|
|
||||||
{width: 15},
|
|
||||||
{width: 15}
|
|
||||||
];
|
|
||||||
XLSX.utils.book_append_sheet(wb, ws, 'file');
|
|
||||||
XLSX.writeFile(wb, '成绩单' + '.xlsx');
|
|
||||||
},
|
|
||||||
refresh() {
|
|
||||||
this.$refs.queryListPage.refresh(true);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
};
|
|
||||||
</script>
|
|
||||||
<style rel="stylesheet/scss" lang="scss" scoped>
|
|
||||||
@import "src/styles/mixin.scss";
|
|
||||||
.joylink-card{
|
|
||||||
height: 100%;
|
|
||||||
overflow: auto;
|
|
||||||
}
|
|
||||||
.file_box {
|
|
||||||
width: 100%;
|
|
||||||
height: 100%;
|
|
||||||
position: absolute;
|
|
||||||
left: 0;
|
|
||||||
top: 0;
|
|
||||||
opacity: 0;
|
|
||||||
cursor: pointer;
|
|
||||||
z-index: 100;
|
|
||||||
}
|
|
||||||
.uploadDemo {
|
|
||||||
position: relative;
|
|
||||||
overflow: hidden;
|
|
||||||
margin-right: 3px;
|
|
||||||
cursor: pointer;
|
|
||||||
padding: 0 15px;
|
|
||||||
height: 28px;
|
|
||||||
}
|
|
||||||
</style>
|
|
@ -34,7 +34,7 @@ import { getSubSystemDetail } from '@/api/trainingPlatform';
|
|||||||
import { UrlConfig } from '@/scripts/ConstDic';
|
import { UrlConfig } from '@/scripts/ConstDic';
|
||||||
import { forceDeleteLesson } from '@/api/jmap/lesson';
|
import { forceDeleteLesson } from '@/api/jmap/lesson';
|
||||||
import { getSessionStorage } from '@/utils/auth';
|
import { getSessionStorage } from '@/utils/auth';
|
||||||
import { lessonCreater, superAdmin, admin } from '@/router/index_APP_TARGET';
|
import { lessonCreater, superAdmin, admin } from '@/router/index';
|
||||||
import { putLessonOffLine, updatePublishLesson } from '@/api/jmap/lesson';
|
import { putLessonOffLine, updatePublishLesson } from '@/api/jmap/lesson';
|
||||||
import UpdateOperate from '@/views/publish/publishLesson/draft.vue';
|
import UpdateOperate from '@/views/publish/publishLesson/draft.vue';
|
||||||
import localStore from 'storejs';
|
import localStore from 'storejs';
|
||||||
|
@ -65,12 +65,12 @@ module.exports = {
|
|||||||
// },
|
// },
|
||||||
// parallel: require('os').cpus().length > 1, // 是否为 Babel 或 TypeScript 使用 thread-loader。该选项在系统的 CPU 有多于一个内核时自动启用,仅作用于生产构建。
|
// parallel: require('os').cpus().length > 1, // 是否为 Babel 或 TypeScript 使用 thread-loader。该选项在系统的 CPU 有多于一个内核时自动启用,仅作用于生产构建。
|
||||||
configureWebpack: config => {
|
configureWebpack: config => {
|
||||||
const appTarget = process.env.VUE_APP_PRO == 'local' ? 'HEB' : 'Common'; // 其他环境变量 区分配置
|
// const appTarget = process.env.VUE_APP_PRO == 'local' ? 'HEB' : 'Common'; // 其他环境变量 区分配置
|
||||||
config.plugins.push(new webpack.NormalModuleReplacementPlugin(/(.*)_APP_TARGET(\.*)/,
|
// config.plugins.push(new webpack.NormalModuleReplacementPlugin(/(.*)_APP_TARGET(\.*)/,
|
||||||
function (resourse) {
|
// function (resourse) {
|
||||||
resourse.request = resourse.request.replace(/APP_TARGET/, `${appTarget}`);
|
// resourse.request = resourse.request.replace(/APP_TARGET/, `${appTarget}`);
|
||||||
})
|
// })
|
||||||
);
|
// );
|
||||||
if (process.env.NODE_ENV != 'development') {
|
if (process.env.NODE_ENV != 'development') {
|
||||||
config.mode = 'production';
|
config.mode = 'production';
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user