Procházet zdrojové kódy

Merge branch 'master' of http://git.qmth.com.cn/ExamCloud-3/examcloud-web-admin

weiwenhai před 6 roky
rodič
revize
075ebdead5

+ 5 - 0
src/modules/basic/routes/routes.js

@@ -1,4 +1,5 @@
 import Home from "../../portal/views/home/Home.vue";
+import Tips from "../../portal/views/tips/Tips.vue";
 import school from "../view/school.vue";
 import campus from "../view/campus.vue";
 import user from "../view/user.vue";
@@ -16,6 +17,10 @@ export default [
     meta: { auth: false },
     component: Home,
     children: [
+      {
+        path: "tips", //模块说明
+        component: Tips
+      },
       {
         path: "course", //课程管理
         meta: { pageName: "课程管理" },

+ 3 - 1
src/modules/examwork/view/offlineExam.vue

@@ -254,7 +254,9 @@ export default {
                 type: "success",
                 message: "新增成功"
               });
-              this.back();
+              this.$router.push({
+                path: "/examwork/offlineExam/" + response.data.id
+              });
             });
           }
         } else {

+ 103 - 33
src/modules/examwork/view/onlineExam.vue

@@ -436,7 +436,10 @@ let validateName = (rule, value, callback) => {
   let name = _this.form.name;
   if (name == "") {
     callback(new Error("请输入考试名称"));
-    _this.activeName = "tab1";
+    if (!_this.toActiveName) {
+      _this.toActiveName = "tab1";
+      _this.activeName = "tab1";
+    }
   } else {
     callback();
   }
@@ -446,7 +449,10 @@ let validateExamDatetimeRange = (rule, value, callback) => {
   let examDatetimeRange = _this.examDatetimeRange;
   if (!examDatetimeRange) {
     callback(new Error("请输入考试时间"));
-    _this.activeName = "tab1";
+    if (!_this.toActiveName) {
+      _this.toActiveName = "tab1";
+      _this.activeName = "tab1";
+    }
   } else {
     callback();
   }
@@ -454,12 +460,18 @@ let validateExamDatetimeRange = (rule, value, callback) => {
 
 let validateDuration = (rule, value, callback) => {
   let duration = _this.form.duration;
-  if (duration == "") {
+  if (duration === "") {
     callback(new Error("请输入考试时长"));
-    _this.activeName = "tab2";
-  } else if (!duration.toString().match(/^[1-9]\d*|0$/)) {
+    if (!_this.toActiveName) {
+      _this.toActiveName = "tab2";
+      _this.activeName = "tab2";
+    }
+  } else if (0 > duration || !duration.toString().match(/^[1-9]\d*|0$/)) {
     callback(new Error("只能是非负整数"));
-    _this.activeName = "tab2";
+    if (!_this.toActiveName) {
+      _this.toActiveName = "tab2";
+      _this.activeName = "tab2";
+    }
   } else {
     callback();
   }
@@ -467,12 +479,18 @@ let validateDuration = (rule, value, callback) => {
 
 let validateExamTimes = (rule, value, callback) => {
   let examTimes = _this.form.examTimes;
-  if (examTimes == "") {
+  if (examTimes === "") {
     callback(new Error("请输入考试次数"));
-    _this.activeName = "tab2";
-  } else if (!examTimes.toString().match(/^[1-9]\d*$/)) {
+    if (!_this.toActiveName) {
+      _this.toActiveName = "tab2";
+      _this.activeName = "tab2";
+    }
+  } else if (0 >= examTimes || !examTimes.toString().match(/^[1-9]\d*$/)) {
     callback(new Error("只能是正整数"));
-    _this.activeName = "tab2";
+    if (!_this.toActiveName) {
+      _this.toActiveName = "tab2";
+      _this.activeName = "tab2";
+    }
   } else {
     callback();
   }
@@ -481,15 +499,24 @@ let validateExamTimes = (rule, value, callback) => {
 let validateFreezeTime = (rule, value, callback) => {
   let freezeTime = _this.form.properties.FREEZE_TIME;
   let duration = _this.form.duration;
-  if (freezeTime == "") {
+  if (freezeTime === "") {
     callback(new Error("请输入交卷冻结时长"));
-    _this.activeName = "tab2";
-  } else if (!freezeTime.toString().match(/^[1-9]\d*|0$/)) {
+    if (!_this.toActiveName) {
+      _this.toActiveName = "tab2";
+      _this.activeName = "tab2";
+    }
+  } else if (0 > freezeTime || !freezeTime.toString().match(/^[1-9]\d*|0$/)) {
     callback(new Error("只能是非负整数"));
-    _this.activeName = "tab2";
+    if (!_this.toActiveName) {
+      _this.toActiveName = "tab2";
+      _this.activeName = "tab2";
+    }
   } else if (duration != "" && freezeTime > duration) {
     callback(new Error("交卷冻结时长不能大于考试时长"));
-    _this.activeName = "tab2";
+    if (!_this.toActiveName) {
+      _this.toActiveName = "tab2";
+      _this.activeName = "tab2";
+    }
   } else {
     callback();
   }
@@ -497,12 +524,21 @@ let validateFreezeTime = (rule, value, callback) => {
 
 let validateExamReconnectTime = (rule, value, callback) => {
   let examReconnectTime = _this.form.properties.EXAM_RECONNECT_TIME;
-  if (examReconnectTime == "") {
+  if (examReconnectTime === "") {
     callback(new Error("请输入断点续考时间"));
-    _this.activeName = "tab2";
-  } else if (!examReconnectTime.toString().match(/^[1-9]\d*$/)) {
+    if (!_this.toActiveName) {
+      _this.toActiveName = "tab2";
+      _this.activeName = "tab2";
+    }
+  } else if (
+    0 >= examReconnectTime ||
+    !examReconnectTime.toString().match(/^[1-9]\d*$/)
+  ) {
     callback(new Error("只能是正整数"));
-    _this.activeName = "tab2";
+    if (!_this.toActiveName) {
+      _this.toActiveName = "tab2";
+      _this.activeName = "tab2";
+    }
   } else {
     callback();
   }
@@ -513,15 +549,27 @@ let validateSnapshotInterval = (rule, value, callback) => {
   let snapshotnterval = _this.form.properties.SNAPSHOT_INTERVAL;
   let duration = _this.form.duration;
   if (isFaceEnable == "true") {
-    if (snapshotnterval == "") {
+    if (snapshotnterval === "") {
       callback(new Error("请输入抓拍间隔"));
-      _this.activeName = "tab4";
-    } else if (!snapshotnterval.toString().match(/^[1-9]\d*$/)) {
+      if (!_this.toActiveName) {
+        _this.toActiveName = "tab4";
+        _this.activeName = "tab4";
+      }
+    } else if (
+      0 >= snapshotnterval ||
+      !snapshotnterval.toString().match(/^[1-9]\d*$/)
+    ) {
       callback(new Error("只能是正整数"));
-      _this.activeName = "tab4";
+      if (!_this.toActiveName) {
+        _this.toActiveName = "tab4";
+        _this.activeName = "tab4";
+      }
     } else if (duration != "" && snapshotnterval > duration) {
       callback(new Error("抓拍间隔不能大于考试时长"));
-      _this.activeName = "tab4";
+      if (!_this.toActiveName) {
+        _this.toActiveName = "tab4";
+        _this.activeName = "tab4";
+      }
     } else {
       callback();
     }
@@ -533,12 +581,21 @@ let validateWarnThreshold = (rule, value, callback) => {
   let isFaceEnable = _this.form.properties.IS_FACE_ENABLE;
   let warnThreshold = _this.form.properties.WARN_THRESHOLD;
   if (isFaceEnable == "true") {
-    if (warnThreshold == "") {
+    if (warnThreshold === "") {
       callback(new Error("请输入预警阀值"));
-      _this.activeName = "tab4";
-    } else if (!warnThreshold.toString().match(/^[1-9]\d*$/)) {
+      if (!_this.toActiveName) {
+        _this.toActiveName = "tab4";
+        _this.activeName = "tab4";
+      }
+    } else if (
+      0 >= warnThreshold ||
+      !warnThreshold.toString().match(/^[1-9]\d*$/)
+    ) {
       callback(new Error("只能是正整数"));
-      _this.activeName = "tab4";
+      if (!_this.toActiveName) {
+        _this.toActiveName = "tab4";
+        _this.activeName = "tab4";
+      }
     } else {
       callback();
     }
@@ -550,12 +607,21 @@ let validateLivingWarnThreshold = (rule, value, callback) => {
   let isFaceEnable = _this.form.properties.IS_FACE_ENABLE;
   let livingWarnThreshold = _this.form.properties.LIVING_WARN_THRESHOLD;
   if (isFaceEnable == "true") {
-    if (livingWarnThreshold == "") {
+    if (livingWarnThreshold === "") {
       callback(new Error("请输入真实性预警阀值"));
-      _this.activeName = "tab4";
-    } else if (!livingWarnThreshold.toString().match(/^[1-9]\d*$/)) {
+      if (!_this.toActiveName) {
+        _this.toActiveName = "tab4";
+        _this.activeName = "tab4";
+      }
+    } else if (
+      0 >= livingWarnThreshold ||
+      !livingWarnThreshold.toString().match(/^[1-9]\d*$/)
+    ) {
       callback(new Error("只能是正整数"));
-      _this.activeName = "tab4";
+      if (!_this.toActiveName) {
+        _this.toActiveName = "tab4";
+        _this.activeName = "tab4";
+      }
     } else {
       callback();
     }
@@ -580,6 +646,7 @@ export default {
         label_width_tab6: "120px"
       },
       activeName: "tab1",
+      toActiveName: null,
       examDatetimeRange: [],
       show_ckeditor: false,
       form: {
@@ -707,6 +774,7 @@ export default {
       }
     },
     saveExam: function() {
+      this.toActiveName = null;
       this.form.beginTime = this.examDatetimeRange[0];
       this.form.endTime = this.examDatetimeRange[1];
       console.log(this.form);
@@ -734,7 +802,9 @@ export default {
                 type: "success",
                 message: "新增成功"
               });
-              this.back();
+              this.$router.push({
+                path: "/examwork/onlineExam/" + response.data.id
+              });
             });
           }
         } else {

+ 60 - 20
src/modules/examwork/view/practiceExam.vue

@@ -218,7 +218,10 @@ let validateName = (rule, value, callback) => {
   let name = _this.form.name;
   if (name == "") {
     callback(new Error("请输入考试名称"));
-    _this.activeName = "tab1";
+    if (!_this.toActiveName) {
+      _this.toActiveName = "tab1";
+      _this.activeName = "tab1";
+    }
   } else {
     callback();
   }
@@ -228,7 +231,10 @@ let validateExamDatetimeRange = (rule, value, callback) => {
   let examDatetimeRange = _this.examDatetimeRange;
   if (!examDatetimeRange) {
     callback(new Error("请输入考试时间"));
-    _this.activeName = "tab1";
+    if (!_this.toActiveName) {
+      _this.toActiveName = "tab1";
+      _this.activeName = "tab1";
+    }
   } else {
     callback();
   }
@@ -236,12 +242,18 @@ let validateExamDatetimeRange = (rule, value, callback) => {
 
 let validateDuration = (rule, value, callback) => {
   let duration = _this.form.duration;
-  if (duration == "") {
+  if (duration === "") {
     callback(new Error("请输入考试时长"));
-    _this.activeName = "tab2";
-  } else if (!duration.toString().match(/^[1-9]\d*|0$/)) {
+    if (!_this.toActiveName) {
+      _this.toActiveName = "tab2";
+      _this.activeName = "tab2";
+    }
+  } else if (0 > duration || !duration.toString().match(/^[1-9]\d*|0$/)) {
     callback(new Error("只能是非负整数"));
-    _this.activeName = "tab2";
+    if (!_this.toActiveName) {
+      _this.toActiveName = "tab2";
+      _this.activeName = "tab2";
+    }
   } else {
     callback();
   }
@@ -249,12 +261,18 @@ let validateDuration = (rule, value, callback) => {
 
 let validateExamTimes = (rule, value, callback) => {
   let examTimes = _this.form.examTimes;
-  if (examTimes == "") {
+  if (examTimes === "") {
     callback(new Error("请输入考试次数"));
-    _this.activeName = "tab2";
-  } else if (!examTimes.toString().match(/^[1-9]\d*$/)) {
+    if (!_this.toActiveName) {
+      _this.toActiveName = "tab2";
+      _this.activeName = "tab2";
+    }
+  } else if (0 >= examTimes || !examTimes.toString().match(/^[1-9]\d*$/)) {
     callback(new Error("只能是正整数"));
-    _this.activeName = "tab2";
+    if (!_this.toActiveName) {
+      _this.toActiveName = "tab2";
+      _this.activeName = "tab2";
+    }
   } else {
     callback();
   }
@@ -263,15 +281,24 @@ let validateExamTimes = (rule, value, callback) => {
 let validateFreezeTime = (rule, value, callback) => {
   let freezeTime = _this.form.properties.FREEZE_TIME;
   let duration = _this.form.duration;
-  if (freezeTime == "") {
+  if (freezeTime === "") {
     callback(new Error("请输入交卷冻结时长"));
-    _this.activeName = "tab2";
-  } else if (!freezeTime.toString().match(/^[1-9]\d*|0$/)) {
+    if (!_this.toActiveName) {
+      _this.toActiveName = "tab2";
+      _this.activeName = "tab2";
+    }
+  } else if (0 > freezeTime || !freezeTime.toString().match(/^[1-9]\d*|0$/)) {
     callback(new Error("只能是非负整数"));
-    _this.activeName = "tab2";
+    if (!_this.toActiveName) {
+      _this.toActiveName = "tab2";
+      _this.activeName = "tab2";
+    }
   } else if (duration != "" && freezeTime > duration) {
     callback(new Error("交卷冻结时长不能大于考试时长"));
-    _this.activeName = "tab2";
+    if (!_this.toActiveName) {
+      _this.toActiveName = "tab2";
+      _this.activeName = "tab2";
+    }
   } else {
     callback();
   }
@@ -279,12 +306,21 @@ let validateFreezeTime = (rule, value, callback) => {
 
 let validateExamReconnectTime = (rule, value, callback) => {
   let examReconnectTime = _this.form.properties.EXAM_RECONNECT_TIME;
-  if (examReconnectTime == "") {
+  if (examReconnectTime === "") {
     callback(new Error("请输入断点续考时间"));
-    _this.activeName = "tab2";
-  } else if (!examReconnectTime.toString().match(/^[1-9]\d*$/)) {
+    if (!_this.toActiveName) {
+      _this.toActiveName = "tab2";
+      _this.activeName = "tab2";
+    }
+  } else if (
+    0 >= examReconnectTime ||
+    !examReconnectTime.toString().match(/^[1-9]\d*$/)
+  ) {
     callback(new Error("只能是正整数"));
-    _this.activeName = "tab2";
+    if (!_this.toActiveName) {
+      _this.toActiveName = "tab2";
+      _this.activeName = "tab2";
+    }
   } else {
     callback();
   }
@@ -303,6 +339,7 @@ export default {
         label_width_tab3: "120px"
       },
       activeName: "tab1",
+      toActiveName: null,
       examDatetimeRange: [],
       show_ckeditor: false,
       form: {
@@ -384,6 +421,7 @@ export default {
       }
     },
     saveExam: function() {
+      this.toActiveName = null;
       this.form.beginTime = this.examDatetimeRange[0];
       this.form.endTime = this.examDatetimeRange[1];
       console.log(this.form);
@@ -411,7 +449,9 @@ export default {
                 type: "success",
                 message: "新增成功"
               });
-              this.back();
+              this.$router.push({
+                path: "/examwork/practiceExam/" + response.data.id
+              });
             });
           }
         } else {

+ 3 - 1
src/modules/examwork/view/printExam.vue

@@ -214,7 +214,9 @@ export default {
                 type: "success",
                 message: "新增成功"
               });
-              this.back();
+              this.$router.push({
+                path: "/examwork/printExam/" + response.data.id
+              });
             });
           }
         } else {

+ 3 - 1
src/modules/examwork/view/traditionExam.vue

@@ -214,7 +214,9 @@ export default {
                 type: "success",
                 message: "新增成功"
               });
-              this.back();
+              this.$router.push({
+                path: "/examwork/traditionExam/" + response.data.id
+              });
             });
           }
         } else {

+ 6 - 0
src/modules/portal/routes/routes.js

@@ -2,6 +2,7 @@ import Login from "../views/Login.vue";
 import Access from "../views/Access.vue";
 import Home from "../views/home/Home.vue";
 import HomeMain from "../views/home/HomeMain.vue";
+import Component404 from "../views/Component404.vue";
 
 export default [
   {
@@ -30,6 +31,11 @@ export default [
         component: HomeMain
       }
     ]
+  },
+  {
+    // will match everything
+    path: "*",
+    component: Component404
   }
   // {
   //   path: "/about",

+ 3 - 0
src/modules/portal/views/Component404.vue

@@ -0,0 +1,3 @@
+<template>
+  <div>找不到该页面!请联系管理员。</div>
+</template>

+ 30 - 28
src/modules/portal/views/Login.vue

@@ -1,11 +1,11 @@
 <template>
   <div class="bg">
     <!-- <header class="login-header">
-      <img v-if="!jwptCustomize" src="../assets/images/login_footer_logo.jpg" />
-      <img v-else src="../assets/images/new_login_logo.png" />
-      <span class="qm-logo-text" v-if="!jwptCustomize">考试云平台</span>
-      <span class="qm-logo-text" v-else>{{ title }}</span>
-    </header> -->
+          <img v-if="!jwptCustomize" src="../assets/images/login_footer_logo.jpg" />
+          <img v-else src="../assets/images/new_login_logo.png" />
+          <span class="qm-logo-text" v-if="!jwptCustomize">考试云平台</span>
+          <span class="qm-logo-text" v-else>{{ title }}</span>
+        </header> -->
 
     <main class="login-main">
       <!-- <img class="left_tree" src="../assets/images/login_main_left_tree.png" /> -->
@@ -181,15 +181,15 @@ export default {
   background-size: cover;
 }
 /* .login-header {
-  font-family: "Microsoft YaHei";
-  width: 990px;
-  height: 80px;
-  background-color: #fff;
-  margin: 0 auto;
-  display: flex;
-  align-items: center;
-  justify-items: center;
-} */
+      font-family: "Microsoft YaHei";
+      width: 990px;
+      height: 80px;
+      background-color: #fff;
+      margin: 0 auto;
+      display: flex;
+      align-items: center;
+      justify-items: center;
+    } */
 
 .qm-logo-text {
   font-size: 36px;
@@ -202,23 +202,25 @@ export default {
 
 .logo-text {
   font-family: "Xingkai SC", "STXingkai", "KaiTi";
-  width: 200px;
+  width: 100%;
   height: 40px;
   font-size: 40px;
+  margin-bottom: 30px;
   font-weight: bold;
   font-stretch: normal;
   line-height: 48px;
   letter-spacing: 0px;
   color: #3968d7;
   text-shadow: 0px 7px 4px rgba(77, 124, 196, 0.3);
-  margin-bottom: 30px;
+
+  text-align: center;
 }
 
 .login-main {
   width: 100%;
   height: 100vh;
   /* min-width: 990px;
-  min-height: 550px; */
+        min-height: 550px; */
   /* background-image: url("../assets/images/login_main_bg_full.png"); */
 
   display: flex;
@@ -228,17 +230,17 @@ export default {
   /* justify-content: space-evenly; */
 }
 /*
-.left_tree {
-  height: 500px;
-} */
+    .left_tree {
+      height: 500px;
+    } */
 
 .right_login {
   /* width: 420px;
-  background-color: #fff;
-  border-radius: 16px; */
+        background-color: #fff;
+        border-radius: 16px; */
   /* box-shadow: 0 13px 29px #0d3b5d; */
 
-  width: 520px;
+  width: 480px;
   height: 350px;
   background-color: #ffffff;
   box-shadow: 0px 7px 20px 0px rgba(77, 124, 196, 0.1);
@@ -250,7 +252,7 @@ export default {
 
 .right_login h1 {
   /* font-size: 34px;
-  color: #fff; */
+        color: #fff; */
   /* text-shadow: 0 8px 13px #0d72ac; */
   text-align: center;
 
@@ -266,10 +268,10 @@ export default {
   margin: 40px 0;
 
   /* border-top: 16px solid #3c8dbc;
-  border-radius: 16px 16px 0 0; */
+        border-radius: 16px 16px 0 0; */
   /* background-color: #3c8dbc; */
   /* padding: 10px;
-  margin: 0; */
+        margin: 0; */
 }
 
 .right_login .username {
@@ -289,7 +291,7 @@ export default {
   height: 46px;
   /* border-bottom: 1px solid #999; */
   /* margin: 30px 0 0 50px;
-  padding-bottom: 5px; */
+        padding-bottom: 5px; */
 
   display: flex;
   align-items: center;
@@ -320,7 +322,7 @@ export default {
   margin-bottom: 20px;
   width: 100%;
   /* width: 320px;
-  height: 60px; */
+        height: 60px; */
   background-color: #4d7cc4;
   font-size: 25px;
   color: #fff;

+ 1 - 1
src/modules/portal/views/home/Home.vue

@@ -5,7 +5,7 @@
         <el-menu-item index="1">
           <router-link
             to="/home/overview"
-            style="text-decoration-line: none"
+            style="font-size: 20px; line-height: 24px; text-decoration-line: none"
             title="回到主页"
           >
             云平台主页

+ 8 - 6
src/modules/portal/views/home/HomeMain.vue

@@ -1,11 +1,11 @@
 <template>
-  <el-main style="display: flex; align-items: center">
+  <el-main style="display: flex; align-items: center; margin-bottom: 20px;">
     <div class="main-content">
       <div
         class="module-card"
         v-for="menu in menuList.filter(m => m.parentId === null)"
         :key="menu.id"
-        @click="() => $router.push('/' + menu.ext4)"
+        @click="() => $router.push('/' + menu.ext4 + '/tips')"
       >
         {{ menu.name }}
       </div>
@@ -63,6 +63,8 @@ export default {
   align-items: center;
   justify-items: center;
 
+  /* min-width: 100%; */
+
   /* height: 100%; */
 }
 
@@ -86,12 +88,12 @@ export default {
   box-shadow: 0 14px 28px rgba(0, 0, 0, 0.25), 0 10px 10px rgba(0, 0, 0, 0.22);
 
   font-size: 30px;
-  color: #fff;
+  /* color: #fff; */
   text-align: center;
-  animation: glow 1s ease-in-out infinite alternate;
+  /* animation: glow 1s ease-in-out infinite alternate; */
 }
 
-@keyframes glow {
+/* @keyframes glow {
   from {
     text-shadow: 0 0 10px #fff, 0 0 20px #fff, 0 0 30px #e60073,
       0 0 40px #e60073, 0 0 50px #e60073, 0 0 60px #e60073, 0 0 70px #e60073;
@@ -100,5 +102,5 @@ export default {
     text-shadow: 0 0 20px #fff, 0 0 30px #ff4da6, 0 0 40px #ff4da6,
       0 0 50px #ff4da6, 0 0 60px #ff4da6, 0 0 70px #ff4da6, 0 0 80px #ff4da6;
   }
-}
+} */
 </style>

+ 110 - 0
src/modules/portal/views/tips/Tips.vue

@@ -0,0 +1,110 @@
+<template>
+  <section class="content">
+    <div class=""><img src="./tips.jpg" /></div>
+    <div class="text">
+      <div v-for="(menu1, index) in instructions" :key="index" class="menu1">
+        <h4>{{ menu1.menu1Name }}</h4>
+        <div v-for="(menu2, index) in menu1.menu2" :key="index" class="menu1">
+          <span class="link">{{ menu2.name }}</span> {{ menu2.detail }}
+        </div>
+      </div>
+      <!-- <div class="menu1">
+        <h4>学习中心查询</h4>
+        <div>
+          <span class="link">机构管理——中心列表</span>
+          查询学校下属所有学习中心编码及名称,可按学习中心设置学习中心平台权限,即A学习中心只能查询A中心的相关考试数据。
+        </div>
+      </div>
+      <div>
+        <h4>课程查询</h4>
+        <div>
+          <span class="link">课程管理——课程列表</span>
+          查看所有课程名称及代码,如一门课程即有专科又有本科,课程对应在的教材、试卷不一样时,需要建立专科课程及本科课程。
+        </div>
+      </div> -->
+    </div>
+  </section>
+</template>
+
+<script>
+const ALL_INSTRUCTIONS = {
+  "/basic/tips": [
+    {
+      menu1Name: "学习中心查询",
+      menu2: [
+        {
+          name: "机构管理——中心列表",
+          // link: "/basic/campus",
+          detail:
+            "查询学校下属所有学习中心编码及名称,可按学习中心设置学习中心平台权限,即A学习中心只能查询A中心的相关考试数据。"
+        }
+      ]
+    },
+    {
+      menu1Name: "课程查询",
+      menu2: [
+        {
+          name: "课程管理——课程列表",
+          // link: "/basic/campus",
+          detail:
+            "查看所有课程名称及代码,如一门课程即有专科又有本科,课程对应在的教材、试卷不一样时,需要建立专科课程及本科课程。"
+        }
+      ]
+    },
+    {
+      menu1Name: "用户查询",
+      menu2: [
+        {
+          name: "用户管理——普通用户管理",
+          // link: "/basic/campus",
+          detail:
+            "添加、查询、禁用管理平台用户,并可以针对不同用户设置不同的平台模块权限。"
+        }
+      ]
+    }
+  ]
+};
+export default {
+  name: "Tips",
+  data() {
+    return {
+      instructions: []
+    };
+  },
+  computed: {},
+  methods: {},
+  created() {
+    this.instructions = ALL_INSTRUCTIONS[this.$route.path];
+  }
+};
+</script>
+
+<style scoped>
+.content {
+  display: flex;
+  align-items: center;
+  justify-content: center;
+
+  height: 100%;
+  width: 100%;
+
+  /* margin: 100px; */
+}
+
+.text {
+  max-width: 600px;
+  margin: 0 20px;
+}
+
+.menu1 {
+  margin-bottom: 20px;
+}
+
+.link {
+  padding: 0em 1em;
+  background-color: #dbe7ef;
+  border-radius: 12px;
+
+  color: #3c8dbd;
+}
+</style>

binární
src/modules/portal/views/tips/tips.jpg


+ 5 - 0
src/modules/print/routes/routes.js

@@ -1,4 +1,5 @@
 import Home from "../../portal/views/home/Home.vue";
+import Tips from "../../portal/views/tips/Tips.vue";
 import Project from "../view/Project.vue";
 import ProjectStatistic from "../view/ProjectStatistic.vue";
 import CourseStatistic from "../view/CourseStatistic.vue";
@@ -11,6 +12,10 @@ export default [
     meta: { auth: false },
     component: Home,
     children: [
+      {
+        path: "tips" /* 模块说明 */,
+        component: Tips
+      },
       {
         path: "/print/project/list" /* 项目列表 */,
         component: Project