Просмотр исходного кода

登陆,其他修改,整体项目整理

lrf402788946 5 лет назад
Родитель
Сommit
332821a94b

+ 1 - 0
package.json

@@ -15,6 +15,7 @@
     "axios": "^0.19.1",
     "core-js": "^3.4.4",
     "element-ui": "^2.13.0",
+    "jsonwebtoken": "^8.5.1",
     "lodash": "^4.17.15",
     "naf-core": "^0.1.2",
     "vue": "^2.6.10",

+ 15 - 0
src/App.vue

@@ -4,9 +4,24 @@
   </div>
 </template>
 <script>
+import { createNamespacedHelpers } from 'vuex';
+import _ from 'lodash';
+const { mapActions } = createNamespacedHelpers('login');
 export default {
   name: 'App',
   components: {},
+  created() {
+    this.toLogin();
+  },
+  methods: {
+    ...mapActions(['login']),
+    async toLogin() {
+      let object = { mobile: '13333333333', passwd: '12345678' };
+      let res = await this.login(object);
+      if (_.isBoolean(res)) console.log('登陆成功');
+      else this.$message.warning(res.errmsg);
+    },
+  },
 };
 </script>
 

+ 8 - 12
src/router/index.js

@@ -1,5 +1,6 @@
 import Vue from 'vue';
 import VueRouter from 'vue-router';
+import store from '@/store/index';
 
 Vue.use(VueRouter);
 
@@ -117,18 +118,6 @@ const routes = [
         meta: { title: '作业题', sub: '管理' },
         component: () => import('@/views/work/look.vue'),
       },
-      {
-        path: '/work/lookdetail',
-        name: 'work_lookdetail',
-        meta: { title: '作业题', sub: '详情' },
-        component: () => import('@/views/work/lookdetail.vue'),
-      },
-      {
-        path: '/timeTable/index',
-        name: 'timeTable_index',
-        meta: { title: '课程表', sub: '管理' },
-        component: () => import('@/views/timeTable/index.vue'),
-      },
       {
         path: '/subject/index',
         name: 'subject_index',
@@ -270,5 +259,12 @@ const router = new VueRouter({
   base: process.env.NODE_ENV === 'development' ? '' : process.env.VUE_APP_ROOT_URL + 'center',
   routes,
 });
+router.beforeEach((to, form, next) => {
+  store.commit('setUser');
+  let user = store.state.user;
+  if (user) next();
+  //下面是没登录的情况,需要跳转页面到用户未登录页
+  else next();
+});
 
 export default router;

+ 23 - 2
src/store/index.js

@@ -20,6 +20,7 @@ import lesson from '@frame/store/lesson';
 import nation from '@frame/store/nation';
 import completion from '@frame/store/question-completion';
 import termquest from '@frame/store/termquest';
+import login from '@frame/store/login';
 
 Vue.use(Vuex);
 
@@ -45,8 +46,28 @@ export default new Vuex.Store({
     nation,
     completion,
     termquest,
+    login,
+  },
+  state: {
+    user: {},
+  },
+  mutations: {
+    setUser(state, payload) {
+      let res = true;
+      //登陆时
+      if (payload) state.user = payload;
+      else {
+        //已经登陆,切换路由时取出用户信息放在总store中
+        let user = sessionStorage.getItem('user');
+        if (user) state.user = user;
+        else {
+          res = false;
+          state.user = undefined;
+          console.warn('用户未登录');
+        }
+      }
+      return res;
+    },
   },
-  state: {},
-  mutations: {},
   actions: {},
 });

+ 0 - 2
src/views/classes/detail.vue

@@ -72,10 +72,8 @@ export default {
     async handleSave({ isNew, data }) {
       let res;
       let msg;
-      console.log(isNew);
       if (isNew) {
         res = await this.create(data);
-        console.log(res);
         msg = `${this.keyWord}添加成功`;
       } else {
         res = await this.update(data);

+ 3 - 1
src/views/index.vue

@@ -28,7 +28,9 @@ export default {
   data: () => ({
     devMenu,
   }),
-  created() {},
+  created() {
+    // this.login();
+  },
   computed: {},
   methods: {},
 };

+ 0 - 187
src/views/timeTable/index.vue

@@ -1,187 +0,0 @@
-<template>
-  <div id="index">
-    <list-frame title="课程表列表" :total="total" :needFilter="false" :needAdd="false">
-      <el-row>
-        <el-col :span="24" class="timeTable" v-for="(item, index) in list" :key="index">
-          <el-col :span="24" class="top">
-            <el-col :span="24" class="title"> 2020年第({{ item.term }})期高校大学生就业能力拓展训练课程表({{ item.class }}) </el-col>
-            <el-col :span="24" class="date">
-              (2月-12日—2月-18日)
-            </el-col>
-          </el-col>
-          <el-col :span="24" class="info">
-            <table border="1" class="table">
-              <tr>
-                <th colspan="2" class="th">
-                  <p style="text-align:left;padding:0 10px;color:#000;">星期</p>
-                  <p style="text-align:center;padding:0 10px;color:#000;">课程</p>
-                  <p style="text-align:right;padding:0 10px;color:#000;">时间</p>
-                </th>
-                <th class="th">
-                  <p>周三</p>
-                  <p>(2月12日)</p>
-                </th>
-                <th class="th">
-                  <p>周四</p>
-                  <p>(2月13日)</p>
-                </th>
-                <th class="th">
-                  <p>周五</p>
-                  <p>(2月14日)</p>
-                </th>
-                <th class="th">
-                  <p>周六</p>
-                  <p>(2月15日)</p>
-                </th>
-                <th class="th">
-                  <p>周日</p>
-                  <p>(2月16日)</p>
-                </th>
-                <th class="th">
-                  <p>周一</p>
-                  <p>(2月17日)</p>
-                </th>
-                <th class="th beizhu">备注</th>
-              </tr>
-              <tr>
-                <td rowspan="2">上午</td>
-                <td>8:30-11:30</td>
-                <td>--</td>
-                <td v-for="(tag, index) in item.lessons" :key="index">
-                  <p>{{ tag.name }}</p>
-                  <p class="teacherName">{{ tag.teacherName }}</p>
-                </td>
-                <td rowspan="5">
-                  <p>
-                    上课地点:<span>{{ item.address }}</span>
-                  </p>
-                  <p>
-                    班主任:<span class="teacherName">{{ item.banzhuren }}</span>
-                  </p>
-                  <p>
-                    礼仪课:<span class="teacherName">{{ item.liyike }}</span>
-                  </p>
-                </td>
-              </tr>
-              <tr>
-                <td>11:30-13:30</td>
-                <td>--</td>
-                <td colspan="5">午餐+休息</td>
-              </tr>
-              <tr class="fourth">
-                <td rowspan="3">下午</td>
-                <td>13:30-16:30</td>
-                <td>
-                  13:30开始报到 <br />(教育宾馆大厅)<br />
-                  15:30开班仪式 <br />(教育宾馆六楼)
-                </td>
-                <td v-for="(tag, index) in item.lessons" :key="index">
-                  <p>{{ tag.name }}</p>
-                  <p class="teacherName">{{ tag.teacherName }}</p>
-                </td>
-              </tr>
-              <tr>
-                <td>16:30-17:30</td>
-                <td colspan="5">晚餐</td>
-                <td>--</td>
-              </tr>
-              <tr>
-                <td>17:30-19:45</td>
-                <td>团队组建</td>
-                <td>拓展交流</td>
-                <td>课程作业<br />小组展示</td>
-                <td>课程作业</td>
-                <td>礼仪课<br />小组面试</td>
-                <td>结业仪式</td>
-              </tr>
-            </table>
-          </el-col>
-        </el-col>
-      </el-row>
-    </list-frame>
-  </div>
-</template>
-
-<script>
-import listFrame from '@frame/layout/admin/list-frame';
-export default {
-  name: 'index',
-  props: {},
-  components: {
-    listFrame,
-  },
-  data: () => ({
-    list: [
-      {
-        term: '1',
-        class: '一班',
-        address: '教学楼四楼',
-        banzhuren: '栾莹',
-        liyike: '史永姣',
-        lessons: [
-          {
-            name: '拓展训练',
-            teacherName: '测试人',
-          },
-          {
-            name: '职业探索',
-            teacherName: '测试人',
-          },
-          {
-            name: '优势挖掘',
-            teacherName: '测试人',
-          },
-          {
-            name: '简历制作',
-            teacherName: '测试人',
-          },
-          {
-            name: '模拟面试',
-            teacherName: '测试人',
-          },
-        ],
-      },
-    ],
-    total: 0,
-  }),
-  created() {},
-  computed: {},
-  methods: {},
-};
-</script>
-
-<style lang="less" scoped>
-@import '~@frame/style/timeTable.less';
-// .top .title {
-//   text-align: center;
-//   font-size: 30px;
-// }
-// .top .date {
-//   text-align: center;
-//   font-size: 25px;
-//   color: #ff0000;
-//   padding: 10px 0;
-// }
-// .th {
-//   width: 120px !important;
-//   height: 40px !important;
-// }
-// .th p {
-//   color: #ff0000;
-// }
-// .th .beizhu {
-//   color: #000;
-// }
-// .table tr td {
-//   text-align: center;
-//   padding: 15px 5px;
-//   font-size: 15px;
-//   color: #000;
-// }
-// .teacherName {
-//   color: #ff0000;
-// }
-// .fourth td:nth-child(8n) p {
-//   display: none;
-// }
-</style>

+ 3 - 3
src/views/work/look.vue

@@ -26,7 +26,7 @@
             <el-col :span="24">
               <el-table :data="info.option" border stripe size="mini">
                 <el-table-column align="center" label="序号" prop="number"></el-table-column>
-                <el-table-column align="center" label="内容" prop="option_name"></el-table-column>
+                <el-table-column align="center" label="内容" prop="opname"></el-table-column>
                 <el-table-column align="center" label="操作">
                   <template v-slot="{ row, $index }">
                     <el-tooltip effect="dark" content="编辑" placement="bottom">
@@ -139,11 +139,11 @@ export default {
     },
     oFields: [
       { label: '序号', required: true, model: 'number' },
-      { label: '内容', required: true, model: 'option_name' },
+      { label: '内容', required: true, model: 'opname' },
     ],
     oRules: {
       number: [{ required: true, message: '请输入序号' }],
-      option_name: [{ required: true, message: '请输入内容' }],
+      opname: [{ required: true, message: '请输入内容' }],
     },
     list: [],
     info: {},

+ 0 - 187
src/views/work/lookdetail.vue

@@ -1,187 +0,0 @@
-<template>
-  <div id="lookdetail">
-    <detail-frame :title="mainTitle" returns="./index">
-      <data-form :fields="fields" :rules="rules" @save="handleSave" :isNew="isNew">
-        <template #options="{item}">
-          <template v-if="item.model === 'state'">
-            <el-option label="弃用" value="0"></el-option>
-            <el-option label="正常" value="1"></el-option>
-          </template>
-        </template>
-        <template #custom="{ item, form, fieldChange }">
-          <el-button type="text" @click="dialogFormVisible = true">选择题类型</el-button>
-          <el-dialog title="选择题类型" :visible.sync="dialogFormVisible">
-            <el-form :model="form">
-              <template>
-                <el-tabs v-model="activeName" @tab-click="handleClick">
-                  <el-tab-pane label="单选" name="first">
-                    <el-button type="text" @click="dialogFormVisible1 = true">增加</el-button>
-
-                    <el-dialog title="增加页面" :visible.sync="dialogFormVisible1">
-                      <el-form :model="form" label-width="80px">
-                        <el-form-item label="序号" :label-width="formLabelWidth">
-                          <el-input v-model="form.zuoyeid" autocomplete="off" placeholder="请输入序号" prop="zuoyeid"></el-input>
-                        </el-form-item>
-                        <el-form-item label="名称" :label-width="formLabelWidth">
-                          <el-input v-model="form.zuoyename" autocomplete="off" placeholder="请输入名称" prop="zuoyename"></el-input>
-                        </el-form-item>
-                        <el-form-item label="答案" :label-width="formLabelWidth">
-                          <el-input v-model="form.answer" autocomplete="off" placeholder="请输入答案" prop="answer"></el-input>
-                        </el-form-item>
-                      </el-form>
-                      <div slot="footer" class="dialog-footer">
-                        <el-button @click="dialogFormVisible1 = false">取 消</el-button>
-                        <el-button type="primary" @click="dialogFormVisible1 = false">确 定</el-button>
-                      </div>
-                    </el-dialog>
-                    <data-table :fields="fieldss" :data="index" :opera="opera" @edit="toEdit"></data-table>
-                  </el-tab-pane>
-                  <el-tab-pane label="多选" name="first"></el-tab-pane>
-                  <el-tab-pane label="问答" name="third">
-                    <el-form ref="form" :model="form" label-width="80px">
-                      <el-form-item label="问答">
-                        <el-input v-model="form.duoxuan" placeholder="请输入问答题"></el-input>
-                      </el-form-item>
-                    </el-form>
-                  </el-tab-pane>
-                </el-tabs>
-              </template>
-            </el-form>
-            <div slot="footer" class="dialog-footer">
-              <el-button @click="dialogFormVisible = false">取 消</el-button>
-              <el-button type="primary" @click="dialogFormVisible = false">确 定</el-button>
-            </div>
-          </el-dialog>
-        </template>
-      </data-form>
-    </detail-frame>
-  </div>
-</template>
-
-<script>
-import dataTable from '@frame/components/data-table';
-import detailFrame from '@frame/layout/admin/detail-frame';
-import dataForm from '@frame/components/form';
-import upload from '@frame/components/upload';
-export default {
-  metaInfo: { title: '题库详情页' },
-  name: 'lookdetail',
-  props: {},
-  components: {
-    detailFrame,
-    dataForm,
-    dataTable,
-  },
-  data: () => ({
-    opera: [
-      {
-        label: '编辑',
-        icon: 'el-icon-edit',
-        method: 'edit',
-      },
-    ],
-
-    activeName: '',
-    dialogTableVisible: false,
-    dialogTableVisible1: false,
-    dialogFormVisible: false,
-    dialogFormVisible1: false,
-    form: {
-      duoxuan: '',
-      name: '',
-      region: '',
-      date1: '',
-      date2: '',
-      delivery: false,
-      type: [],
-      zuoyeid: '',
-      zuoyename: '',
-      answer: '',
-    },
-    formLabelWidth: '120px',
-    fieldss: [
-      { label: '序号', required: true, model: 'zuoyeid' },
-      { label: '名称', required: true, model: 'zuoyename' },
-      { label: '答案', required: true, model: 'answer' },
-    ],
-
-    index: [{ zuoyeid: '1' }],
-    fields: [
-      { label: '状态', required: true, model: 'state', type: `select` },
-      { label: '标题', required: true, model: 'title' },
-      { label: '题型', required: true, model: 'type', type: 'tixing', custom: true },
-    ],
-    rules: {
-      zuoyeid: [{ required: true, message: '请输入序号', trigger: 'blur' }],
-      zuoyename: [{ required: true, message: '请输入名称', trigger: 'blur' }],
-      answer: [{ required: true, message: '请输入答案', trigger: 'blur' }],
-      name: [{ required: true, message: '请输入作业姓名' }],
-      state: [{ required: true, message: '请选择状态' }],
-      tixing: [{ required: true, message: '请选择题类型' }],
-      title: [{ required: true, message: '请选择标题' }],
-    },
-  }),
-  created() {},
-  computed: {
-    isNew() {
-      return this.$route.query.id ? false : true;
-    },
-    mainTitle() {
-      let meta = this.$route.meta;
-      let main = meta.title || '';
-      let sub = meta.sub || '';
-      return `${main}${sub}`;
-    },
-    keyWord() {
-      let meta = this.$route.meta;
-      let main = meta.title || '';
-      return main;
-    },
-  },
-  methods: {
-    search({ skip = 0, limit = 10, ...info } = {}) {
-      console.log(`in search`);
-    },
-    toEdit({ data }) {
-      console.log(`in toEdit`);
-      console.log(data);
-    },
-    handleClick(tab, event) {
-      console.log(tab, event);
-    },
-
-    uploadSuccess() {},
-    async handleSave({ isNew, data }) {
-      console.log(isNew);
-      console.log(data);
-    },
-  },
-};
-</script>
-
-<style lang="less" scoped>
-/deep/.el-tabs__nav-wrap::after {
-  content: '';
-  position: absolute;
-  left: 0;
-  bottom: 0;
-  width: 100%;
-  height: 2px;
-  background-color: #ffffff;
-  z-index: 1;
-}
-
-/deep/.el-tabs__active-bar {
-  position: absolute;
-  bottom: 0;
-  left: 0;
-  height: 2px;
-  background-color: #ffffff;
-}
-/deep/.el-tabs__item.is-active {
-  color: #303133;
-}
-/deep/.el-input__inner {
-  margin: 0 0 20px 0;
-}
-</style>