Browse Source

Merge branch 'master' of http://git.cc-lotus.info/new_train/train-student

wuhongyuq 5 years ago
parent
commit
3ed4a1dd6c

BIN
src/assets/class.png


BIN
src/assets/index.png


BIN
src/assets/questions.png


BIN
src/assets/user.png


+ 26 - 30
src/layout/class/classGroup.vue

@@ -2,43 +2,38 @@
   <div id="classGroup">
     <el-row>
       <el-col :span="24" class="button_class">
-        <van-button v-if="stuIdAndGroupId.type === '班长'" round type="info" icon="smile" @click="dialogFormVisible = true">创建小组</van-button>
+        <van-button round icon="smile" type="info" v-if="this.user.job === '班长'" @click="createGroup()">创建小组</van-button>
       </el-col>
       <el-col :span="24">
         <groupList :groupList="groupList" v-on="$listeners" :stuIdAndGroupId="stuIdAndGroupId"></groupList>
       </el-col>
-
       <el-col :span="24" class="foot">
-        <noGroup v-if="stuIdAndGroupId.type === '班长'" :noGroupStudentNames="noGroupStudentNames"></noGroup>
+        <noGroup v-if="this.user.job === '班长'" :noGroupStudentNames="noGroupStudentNames"></noGroup>
       </el-col>
     </el-row>
-    <el-dialog class="createGroup" title="创建小组" :visible.sync="dialogFormVisible" width="100%">
-      <el-form :model="form">
-        <el-form-item label="名称" prop="name" :label-width="formLabelWidth" :rules="[{ required: true, message: '小组名称不能为空' }]">
-          <el-input v-model="form.name" autocomplete="off"></el-input>
+    <el-dialog class="createGroup" title="创建小组" :visible.sync="createGroupDialog" width="90%">
+      <el-form :model="groupForm">
+        <el-form-item label="名称" :label-width="formLabelWidth">
+          <el-input v-model="groupForm.name" placeholder="请输入小组名称"></el-input>
         </el-form-item>
       </el-form>
       <div slot="footer" class="dialog-footer">
-        <el-button
-          type="primary"
-          @click="
-            saveGroup();
-            dialogFormVisible = false;
-          "
-          >提 交</el-button
-        >
+        <el-button @click="saveGroup()" type="primary">提 交</el-button>
       </div>
     </el-dialog>
   </div>
 </template>
 
 <script>
+import { mapState, createNamespacedHelpers, mapGetters } from 'vuex';
 import groupList from '@/layout/class/groupList.vue';
 import noGroup from '@/layout/class/noGroup.vue';
 export default {
   name: 'classGroup',
   props: {
     groupList: null,
+    createGroupDialog: null,
+    groupForm: null,
     stuIdAndGroupId: null, //登陆者id和小组id
     noGroupStudentNames: null, //没有小组的学生
   },
@@ -47,19 +42,19 @@ export default {
     noGroup,
   },
   data: () => ({
-    dialogTableVisible: false,
-    dialogFormVisible: false,
-    form: {
-      name: '',
-    },
-    formLabelWidth: '80px',
+    formLabelWidth: '50px',
   }),
   created() {},
-  computed: {},
+  computed: {
+    ...mapState(['user']),
+  },
   methods: {
+    // 创建分组
+    createGroup() {
+      this.$emit('createGroup');
+    },
     saveGroup() {
-      this.$emit('saveGroup', { data: this.form });
-      dialogFormVisible: false;
+      this.$emit('saveGroup', { data: this.groupForm });
     },
     // createGroup() {
     //   this.$emit('createGroup');
@@ -70,13 +65,14 @@ export default {
 
 <style lang="less" scoped>
 .button_class {
-  padding: 0 100px;
-  line-height: 100px;
+  text-align: center;
+  padding: 20px 0px;
 }
-button {
-  width: 100%;
+/deep/.el-dialog__body {
+  padding: 15px 20px;
 }
-.createGroup {
-  width: 100%;
+/deep/.el-dialog__footer {
+  padding: 10px 20px 20px;
+  text-align: center;
 }
 </style>

+ 12 - 28
src/layout/class/classList.vue

@@ -4,23 +4,17 @@
       <el-col :span="24">
         <van-tabs v-model="active">
           <van-tab title="班级名单">
-            <span v-if="role === '1'">
-              <headNameList
-                v-on="$listeners"
-                :headNameList="headNameList"
-                :assignShow="assignShow"
-                :assignForm="assignForm"
-                :name="name"
-                :job="job"
-                :job_list="job_list"
-              ></headNameList>
-            </span>
-            <span v-else>
-              <stuNameList :stuNameList="stuNameList"></stuNameList>
-            </span>
+            <stuNameList :stuNameList="stuNameList"></stuNameList>
           </van-tab>
           <van-tab title="班级分组">
-            <classGroup :groupList="groupList" v-on="$listeners" :stuIdAndGroupId="stuIdAndGroupId" :noGroupStudentNames="noGroupStudentNames"></classGroup>
+            <classGroup
+              v-on="$listeners"
+              :groupList="groupList"
+              :createGroupDialog="createGroupDialog"
+              :groupForm="groupForm"
+              :stuIdAndGroupId="stuIdAndGroupId"
+              :noGroupStudentNames="noGroupStudentNames"
+            ></classGroup>
           </van-tab>
         </van-tabs>
       </el-col>
@@ -29,35 +23,25 @@
 </template>
 
 <script>
-import headNameList from '@/layout/class/nameList/headNameList.vue';
 import stuNameList from '@/layout/class/nameList/stuNameList.vue';
 import classGroup from '@/layout/class/classGroup.vue';
 export default {
   name: 'classList',
   props: {
-    headNameList: null, //班主任看班級學生名單
-    assignShow: null, //指派职务弹窗
-    assignForm: null, //指派职务form表单
     stuNameList: null, //学生看班级学生名单
+    // 班級分組列表
     groupList: null,
+    createGroupDialog: null, //创建分组显示dialog
+    groupForm: null, //分組form
     stuIdAndGroupId: null, //登陆者id和小组id
     noGroupStudentNames: null, //没有小组的学生
-    name: null,
-    job: null,
-    job_list: null,
   },
   components: {
-    // 显示班级学生名称(带有职务)
-    // 班主任:点击学生指派学生担任职务。
-    // 学委:给学生上分(平时成绩只有一个,课程作业成绩,都要显示)
-    headNameList, //班主任班级学生名单
     stuNameList, //学生班级学生名单
     classGroup, //班级分组
   },
   data: () => ({
     active: 0,
-    role: '4',
-    // groupList: [],
   }),
   created() {},
   computed: {},

+ 15 - 10
src/layout/class/groupList.vue

@@ -6,22 +6,20 @@
           <el-collapse-item>
             <template slot="title">
               <el-col :span="2">{{ index + 1 }}.</el-col>
-              <el-col :span="5"> {{ item.name }} {{ item.students.length }}人</el-col>
-              <el-col :span="4">
+              <el-col :span="6" class="groupName"> {{ item.name }} {{ item.students.length }}人</el-col>
+              <el-col :span="3">
                 <el-button v-if="item.students.length >= 10" round plain type="danger" size="mini" disabled>已满员</el-button>
               </el-col>
               <el-col :span="1"></el-col>
               <el-col :span="4">
-                <el-button v-if="stuIdAndGroupId.type === '班长' && item.students.length === 0" round type="danger" size="mini" @click="deleteGroup(item.id)"
-                  >删除</el-button
-                >
+                <el-button round type="danger" size="mini" @click="deleteGroup(item.id)">删除</el-button>
               </el-col>
               <el-col :span="1"></el-col>
               <el-col :span="4">
-                <el-button v-if="stuIdAndGroupId.groupId === '' && item.students.length <= 10" round type="success" size="mini" @click="joinGroup(item.id)"
+                <el-button round type="success" size="mini" v-if="stuIdAndGroupId.groupId === '' && item.students.length <= 10" @click="joinGroup(item.id)"
                   >加入</el-button
                 >
-                <el-button v-if="stuIdAndGroupId.groupId === item.id" round type="danger" size="mini" @click="exitGroup(item.id)">退出</el-button>
+                <el-button round type="danger" size="mini" v-if="stuIdAndGroupId.groupId === item.id" @click="exitGroup(item.id)">退出</el-button>
               </el-col>
             </template>
             <el-col :span="24" class="list" v-for="(itemStrudent, indexStudent) in item.students" :key="indexStudent">
@@ -35,6 +33,7 @@
 </template>
 
 <script>
+import { mapState, createNamespacedHelpers, mapGetters } from 'vuex';
 import Vue from 'vue';
 import { Dialog } from 'vant';
 // 全局注册
@@ -48,7 +47,12 @@ export default {
   components: {},
   data: () => ({}),
   created() {},
-  computed: {},
+  computed: {
+    userid() {
+      return this.user.userid;
+    },
+    ...mapState(['user']),
+  },
   methods: {
     // 进组
     joinGroup(groupId) {
@@ -106,8 +110,9 @@ p {
   border-radius: 15px;
 }
 .list .groupName {
-  padding: 15px 0;
-  font-size: 18px;
+  overflow: hidden;
+  text-overflow: ellipsis;
+  white-space: nowrap;
 }
 .childName {
   padding: 15px 0;

+ 56 - 0
src/layout/class/headClassList.vue

@@ -0,0 +1,56 @@
+<template>
+  <div id="headClassList">
+    <el-row>
+      <el-col :span="24">
+        <el-col :span="24" class="list" v-for="(item, index) in headClassList" :key="index">
+          <el-col :span="16" class="mess">
+            <p>班级:{{ item.name }}</p>
+            <p>班级人数:{{ item.number }}</p>
+          </el-col>
+          <el-col :span="8" class="btn">
+            <el-button type="primary" @click="clickStu(item.id)" round>班级信息</el-button>
+          </el-col>
+        </el-col>
+      </el-col>
+    </el-row>
+  </div>
+</template>
+
+<script>
+export default {
+  name: 'headClassList',
+  props: {
+    headClassList: null,
+  },
+  components: {},
+  data: () => ({}),
+  created() {},
+  computed: {},
+  methods: {
+    clickStu(id) {
+      this.$emit('clickStu', id);
+    },
+  },
+};
+</script>
+
+<style lang="less" scoped>
+p {
+  padding: 0;
+  margin: 0;
+}
+.list {
+  background: #fff;
+  margin: 10px;
+  width: 94%;
+  padding: 10px;
+  border-radius: 20px;
+}
+.list .mess p {
+  padding: 5px 0;
+}
+.list .btn {
+  padding: 20px 0;
+  text-align: center;
+}
+</style>

+ 16 - 22
src/layout/class/nameList/headNameList.vue

@@ -1,18 +1,18 @@
 <template>
-  <div id="headNameList">
+  <div id="headStuList">
     <el-row>
       <el-col :span="24" class="info">
-        <el-col :span="6" class="list" v-for="(item, index) in headNameList" :key="index" @click.native="clickAssign(item.id, item.name, item.job)">
+        <el-col :span="6" class="list" v-for="(item, index) in headStuList" :key="index" @click.native="clickAssign(item.id)">
           <p class="name">{{ item.name }}</p>
           <p class="job" v-if="item.job">{{ item.job }}<i class="el-icon-circle-check"></i></p>
         </el-col>
       </el-col>
     </el-row>
-    <el-dialog title="指派职务" width="90%" :visible.sync="assignShow">
+    <el-dialog title="指派职务" width="90%" :visible.sync="assignShow" :before-close="handleClose">
       <el-form :model="assignForm">
         <el-form-item label="学生姓名">
           <!-- <el-input v-model="assignForm.name" :disabled="true"></el-input> -->
-          {{ name }}
+          {{ assignForm.name }}
         </el-form-item>
         <el-form-item label="学生职务">
           <el-select v-model="assignForm.job" placeholder="请选择学生职务">
@@ -30,13 +30,11 @@
 
 <script>
 export default {
-  name: 'headNameList',
+  name: 'headStuList',
   props: {
-    headNameList: null,
+    headStuList: null,
     assignForm: null,
     assignShow: null,
-    name: null,
-    job: null,
     job_list: null,
   },
   components: {},
@@ -44,8 +42,8 @@ export default {
   created() {},
   computed: {},
   methods: {
-    clickAssign(id, name, job) {
-      this.$emit('assign', { id, name, job });
+    clickAssign(id) {
+      this.$emit('assign', id);
     },
     outAssignShow() {
       this.$emit('outForm');
@@ -53,6 +51,9 @@ export default {
     onAssignShow(id) {
       this.$emit('onForm', { data: this.assignForm });
     },
+    handleClose() {
+      this.$emit('handleClose');
+    },
   },
 };
 </script>
@@ -62,22 +63,15 @@ p {
   padding: 0;
   margin: 0;
 }
+.info {
+  margin: 15px 0 0 0;
+}
 .list {
   text-align: center;
-  padding: 15px 0 0 0;
-}
-.list .name {
-  font-size: 14px;
+  min-height: 50px;
 }
 .list .job {
-  font-size: 12px;
+  font-size: 10px;
   color: #405ffe;
-  padding: 5px 0 0 0;
-}
-/deep/.el-dialog__headerbtn {
-  display: none;
-}
-/deep/.el-dialog__footer {
-  text-align: center;
 }
 </style>

+ 37 - 6
src/layout/common/footInfo.vue

@@ -3,10 +3,22 @@
     <el-row>
       <el-col :span="24">
         <van-tabbar route>
-          <van-tabbar-item to="/" icon="home-o">首页</van-tabbar-item>
-          <van-tabbar-item to="/class/index" icon="friends-o">班级名单</van-tabbar-item>
-          <van-tabbar-item to="/question/index" icon="question-o">问卷调查</van-tabbar-item>
-          <van-tabbar-item to="/user/index" icon="user-o">个人信息</van-tabbar-item>
+          <van-tabbar-item to="/">
+            <van-image width="60" height="60" :src="index" />
+            <p class="text">首页</p>
+          </van-tabbar-item>
+          <van-tabbar-item to="/class/index">
+            <van-image width="60" height="60" :src="classes" />
+            <p class="text">班级名单</p>
+          </van-tabbar-item>
+          <van-tabbar-item to="/question/index">
+            <van-image width="60" height="60" :src="question" />
+            <p class="text">问卷调查</p>
+          </van-tabbar-item>
+          <van-tabbar-item to="/user/index">
+            <van-image width="60" height="60" :src="user" />
+            <p class="text">个人信息</p>
+          </van-tabbar-item>
         </van-tabbar>
       </el-col>
     </el-row>
@@ -18,11 +30,30 @@ export default {
   name: 'footInfo',
   props: {},
   components: {},
-  data: () => ({}),
+  data: () => ({
+    index: require('@/assets/index.png'),
+    classes: require('@/assets/class.png'),
+    question: require('@/assets/questions.png'),
+    user: require('@/assets/user.png'),
+  }),
   created() {},
   computed: {},
   methods: {},
 };
 </script>
 
-<style lang="less" scoped></style>
+<style lang="less" scoped>
+p {
+  padding: 0;
+  margin: 0;
+}
+/deep/.van-tabbar {
+  height: 90px;
+}
+/deep/.van-tabbar-item {
+  text-align: center;
+}
+.text {
+  padding: 5px 0;
+}
+</style>

+ 4 - 3
src/layout/index/mainData.vue

@@ -5,9 +5,9 @@
         <el-col :span="24" class="beijing">
           <el-row type="flex">
             <el-col :span="4" v-for="(i, index) in arrange" :key="index" @click.native="changeLesson(i)">
-              <el-row>
-                <el-col :span="24">{{ i.date | getMD }}</el-col>
+              <el-row style="text-align:center">
                 <el-col :span="24">{{ i.day }}</el-col>
+                <el-col :span="24">{{ i.date | getMD }}</el-col>
               </el-row>
             </el-col>
           </el-row>
@@ -87,7 +87,8 @@ export default {
   filters: {
     getMD(date) {
       let arr = date.split('-');
-      return `${arr[1]}-${arr[2]}`;
+      //${arr[1]}-
+      return `${arr[2]}`;
     },
   },
 };

+ 0 - 17
src/layout/question/quesProgress.vue

@@ -12,23 +12,6 @@
         </el-col>
       </el-col>
     </el-row>
-    <!-- <van-overlay :show="show" @click="closeBtn">
-      <div class="wrapper" @click="closeBtn">
-        <el-col :span="24" class="center">
-          <el-col :span="24" class="top">
-            <span>问卷进度:{{ progressInfo.answertotal }}/{{ progressInfo.alltotal }}</span>
-          </el-col>
-          <el-col :span="24" v-for="(item, index) in progressInfo.data" :key="index">
-            <el-col :span="12">
-              <span>{{ item.name }}</span>
-            </el-col>
-            <el-col :span="12">
-              {{ item.completion }}
-            </el-col>
-          </el-col>
-        </el-col>
-      </div>
-    </van-overlay> -->
   </div>
 </template>
 

+ 7 - 2
src/layout/question/teaClass.vue

@@ -8,7 +8,7 @@
             <p>班级人数:{{ item.number }}</p>
           </el-col>
           <el-col :span="7" class="btn">
-            <el-link :underline="false" @click="$router.push({ path: '/question/teaProgress', query: { classid: item.id } })">班级问卷进度</el-link>
+            <el-link :underline="false" @click="turnto(item)">{{ title }}</el-link>
           </el-col>
         </el-col>
       </el-col>
@@ -21,12 +21,17 @@ export default {
   name: 'teaClass',
   props: {
     classList: null,
+    title: null,
   },
   components: {},
   data: () => ({}),
   created() {},
   computed: {},
-  methods: {},
+  methods: {
+    turnto(data) {
+      this.$emit('turnto', data);
+    },
+  },
 };
 </script>
 

+ 6 - 1
src/router/index.js

@@ -35,7 +35,12 @@ const routes = [
     meta: { title: '班級名单', isleftarrow: true },
     component: () => import('../views/class/index.vue'),
   },
-
+  // 班主任查看班级学生信息-指派学生职位
+  {
+    path: '/class/classStuList',
+    meta: { title: '班级信息', isleftarrow: true },
+    component: () => import('../views/class/classStuList.vue'),
+  },
   // 教师评分
   {
     path: '/teacherscore/index',

+ 0 - 4
src/views/class/achieve.vue

@@ -134,9 +134,7 @@ export default {
       const result = await this.uploadtasklist({ classid });
       const res = await this.list({ classid });
       for (const accc of res.data) {
-        console.log(accc.id);
         var arr = result.data.filter(item => item.studentid === accc.id);
-        // console.log(arr);
       }
       let lessons = [];
       let stus = [];
@@ -184,13 +182,11 @@ export default {
     },
     async opensave({ id, name, score }) {
       this.show = true;
-      console.log(id, name, score);
       this.$set(this, `names`, name);
       this.$set(this.form, `score`, score);
       this.$set(this, `taskid`, id);
     },
     async onsave(form) {
-      console.log(this.form);
       this.form.id = this.taskid;
       let res = await this.uploadtaskupdate(this.form);
       this.show = false;

+ 125 - 0
src/views/class/classStuList.vue

@@ -0,0 +1,125 @@
+<template>
+  <div id="classStuList">
+    <el-row>
+      <el-col :span="24" class="style">
+        <el-col :span="24" class="top">
+          <NavBar v-show="navShow" :title="title" :isleftarrow="isleftarrow"> </NavBar>
+        </el-col>
+        <el-col :span="24" class="main">
+          <headStuList
+            :headStuList="headStuList"
+            :assignShow="assignShow"
+            :assignForm="assignForm"
+            :job_list="job_list"
+            @assign="clickAssign"
+            @outForm="outAssignShow"
+            @onForm="onAssignShow"
+            @handleClose="handleClose"
+          ></headStuList>
+        </el-col>
+      </el-col>
+    </el-row>
+  </div>
+</template>
+
+<script>
+import NavBar from '@/layout/common/topInfo.vue';
+import headStuList from '@/layout/class/headStuList.vue';
+import { mapState, createNamespacedHelpers, mapGetters } from 'vuex';
+const { mapActions: mapStudent } = createNamespacedHelpers('student');
+export default {
+  name: 'classStuList',
+  props: {},
+  components: {
+    NavBar, //头部导航
+    headStuList, //学生列表
+  },
+  data: () => ({
+    headStuList: [],
+    assignShow: false,
+    assignForm: {},
+    job_list: [
+      {
+        name: '班长',
+      },
+      {
+        name: '学委',
+      },
+    ],
+    title: '',
+    isleftarrow: '',
+    navShow: true,
+  }),
+  created() {
+    this.searchInfo();
+  },
+  computed: {
+    id() {
+      return this.$route.query.id;
+    },
+    ...mapState(['user']),
+  },
+  mounted() {
+    this.title = this.$route.meta.title;
+    this.isleftarrow = this.$route.meta.isleftarrow;
+  },
+  watch: {
+    $route(to, from) {
+      this.title = to.meta.title;
+      this.isleftarrow = to.meta.isleftarrow;
+    },
+  },
+  methods: {
+    ...mapStudent({ list: 'query', add: 'create', fet: 'fetch', updates: 'update' }),
+    // 查询学生列表-并带有职务
+    async searchInfo() {
+      let classid = this.id;
+      const res = await this.list({ classid });
+      if (this.$checkRes(res)) {
+        this.$set(this, `headStuList`, res.data);
+      }
+    },
+    //点击派遣
+    async clickAssign(id) {
+      this.assignShow = true;
+      const res = await this.fet(id);
+      this.$set(this, `assignForm`, res.data);
+    },
+    //指派职务
+    async onAssignShow(assignForm) {
+      let data = this.assignForm;
+      let res = await this.updates(data);
+      if (this.$checkRes(res)) {
+        this.$message({
+          message: '成功',
+          type: 'success',
+        });
+      }
+      this.outAssignShow();
+      this.searchInfo();
+    },
+    outAssignShow() {
+      this.assignShow = false;
+    },
+    handleClose() {
+      this.assignShow = false;
+    },
+  },
+};
+</script>
+
+<style lang="less" scoped>
+.style {
+  width: 100%;
+  min-height: 667px;
+  position: relative;
+  background-color: #f9fafc;
+}
+.top {
+  height: 46px;
+  overflow: hidden;
+}
+.main {
+  min-height: 570px;
+}
+</style>

+ 76 - 123
src/views/class/index.vue

@@ -3,29 +3,34 @@
     <el-row>
       <el-col :span="24" class="style">
         <el-col :span="24" class="top">
-          <!-- <topInfo></topInfo> -->
           <NavBar v-show="navShow" :title="title" :isleftarrow="isleftarrow"> </NavBar>
         </el-col>
         <el-col :span="24" class="main">
-          <classList
-            :job="job"
-            :name="name"
-            :job_list="job_list"
-            :headNameList="headNameList"
-            @assign="clickAssign"
-            :assignShow="assignShow"
-            :assignForm="assignForm"
-            @outForm="outAssignShow"
-            @onForm="onAssignShow"
-            :stuNameList="stuNameList"
-            :groupList="groupList"
-            @saveGroup="saveGroup"
-            @exitGroup="exitGroup"
-            @deleteGroup="deleteGroup"
-            @joinGroup="joinGroup"
-            :stuIdAndGroupId="stuIdAndGroupId"
-            :noGroupStudentNames="noGroupStudentNames"
-          ></classList>
+          <span v-if="this.user.type === '1'">
+            <headClassList :headClassList="headClassList" @clickStu="clickStu"></headClassList>
+          </span>
+          <span v-else>
+            <classList
+              :stuNameList="stuNameList"
+              :groupList="groupList"
+              @createGroup="createGroup"
+              :createGroupDialog="createGroupDialog"
+              :groupForm="groupForm"
+              @saveGroup="saveGroup"
+              @deleteGroup="deleteGroup"
+              @exitGroup="exitGroup"
+              @joinGroup="joinGroup"
+              :stuIdAndGroupId="stuIdAndGroupId"
+              :noGroupStudentNames="noGroupStudentNames"
+            ></classList>
+            <!-- :groupList="groupList"
+              @saveGroup="saveGroup"
+              @exitGroup="exitGroup"
+              @deleteGroup="deleteGroup"
+              @joinGroup="joinGroup"
+              :stuIdAndGroupId="stuIdAndGroupId"
+              :noGroupStudentNames="noGroupStudentNames" -->
+          </span>
         </el-col>
         <el-col :span="24" class="foot">
           <footInfo></footInfo>
@@ -38,52 +43,40 @@
 <script>
 import NavBar from '@/layout/common/topInfo.vue';
 import footInfo from '@/layout/common/footInfo.vue';
+import headClassList from '@/layout/class/headClassList.vue';
 import classList from '@/layout/class/classList.vue';
-// import { createNamespacedHelpers, mapGetters } from 'vuex';
 import { mapState, createNamespacedHelpers, mapGetters } from 'vuex';
 const { mapActions: mapGroup } = createNamespacedHelpers('group');
 const { mapActions: mapStudent } = createNamespacedHelpers('student');
 const { mapActions: mapclasses } = createNamespacedHelpers('classes');
-const type = '班长';
 export default {
   name: 'index',
   props: {},
   components: {
     NavBar, //头部导航
-    footInfo, //底部导航
+    headClassList, //班主任中管理的学生列表
     classList, //班级名单
+    footInfo, //底部导航
   },
   data: () => ({
-    job_list: [
-      {
-        name: '班长',
-      },
-      {
-        name: '学委',
-      },
-    ],
-    name: '',
-    xsid: '',
-    // 班主任看学生名单
-    headNameList: [],
-    assignShow: false,
-    assignForm: {},
+    // 班主任看班级名单
+    headClassList: [],
     // 学生看学生名单
     stuNameList: [],
+    // 班级分组
     groupList: [],
-    stuIdAndGroupId: '',
-    // noGroupStudentNames: '',
+    createGroupDialog: false,
+    groupForm: {},
+    stuIdAndGroupId: {},
     noGroupStudentNames: [],
     title: '',
     isleftarrow: '',
-    transitionName: 'fade',
     navShow: true,
-    job: '',
   }),
   created() {
-    this.findList();
-    this.search();
+    this.searchInfo();
     this.searchstu();
+    this.findGroup();
   },
   computed: {
     ...mapState(['user']),
@@ -99,75 +92,37 @@ export default {
     },
   },
   methods: {
-    ...mapStudent({ list: 'query', add: 'create', fet: 'fetch', updates: 'update' }),
-    //班主任
-    async search() {
-      let termid = this.user.termid;
-      let batchid = this.user.batchid;
-      let stuid = this.user.userid;
-      let classid = this.user.classid;
-      const res = await this.list({ classid });
-      console.log(res);
-      this.$set(this, `headNameList`, res.data);
+    ...mapclasses({ classList: 'query', classFetch: 'fetch' }),
+    ...mapStudent({ stuQery: 'query', add: 'create', fet: 'fetch', updates: 'update' }),
+    ...mapGroup(['query', 'create', 'delete', 'insert', 'exit']),
+    // 班主任查询管理班级列表
+    async searchInfo() {
+      const res = await this.classList(this.user.userid);
+      if (this.$checkRes(res)) {
+        this.$set(this, `headClassList`, res.data);
+      }
+    },
+    // 班主任跳转到班级信息
+    clickStu(id) {
+      this.$router.push({ path: '/class/classStuList', query: { id: id } });
     },
     //学生
     async searchstu() {
-      let termid = this.user.termid;
-      let batchid = this.user.batchid;
-      let stuid = this.user.userid;
       let classid = this.user.classid;
-      const res = await this.list({ classid });
-      console.log(res);
-
+      const res = await this.stuQery({ classid });
       this.$set(this, `stuNameList`, res.data);
     },
-
-    //点击派遣
-    async clickAssign({ id, name, job }) {
-      this.assignShow = true;
-      this.$set(this, `xsid`, id);
-      this.$set(this, `name`, name);
-      this.$set(this.assignForm, `job`, job);
-    },
-    //指派职务
-    async onAssignShow(assignForm) {
-      this.assignShow = false;
-      this.assignForm.id = this.xsid;
-      let data = this.assignForm;
-      let res = await this.updates(data);
-      let classid = this.user.classid;
-      const ress = await this.list({ classid });
-      this.$set(this, `headNameList`, ress.data);
-      this.$message({
-        message: '成功',
-        type: 'success',
-      });
-    },
-    outAssignShow() {
-      this.assignShow = false;
-    },
-    ...mapGroup(['query', 'create', 'delete', 'insert', 'exit']),
-    ...mapStudent({ stuQery: 'query' }),
-    // 查询小组列表
-    async findList() {
-      let data = {};
-      data.termid = this.user.termid;
-      data.batchid = this.user.batchid;
-      data.classid = this.user.classid;
+    // 查询组
+    async findGroup() {
       let stuid = this.user.userid;
-      // data.termid = termid;
-      // data.batchid = batchid;
-      // data.classid = classid;
-      const result = await this.query(data);
+      const result = await this.query();
       const groupList = result.data;
-      console.log(noGroupStudentNames);
       this.$set(this, 'groupList', groupList);
       // 找出登陆者在哪个组
       // 找出组id
       let groupId = '';
       // 所有有组学生id
       let studentIds = [];
-
       var i = groupList.findIndex(value => {
         var v = value.students.findIndex(value => {
           studentIds.push(value.stuid);
@@ -178,6 +133,7 @@ export default {
       if (i != -1) {
         groupId = groupList[i].id;
       }
+      // 學生id+組id
       let stuIdAndGroupId = {};
       // 登陆者id
       stuIdAndGroupId.stuid = stuid;
@@ -187,12 +143,8 @@ export default {
       // let job = this.user.job;
       // console.log(stuIdAndGroupId.job);
       //   stuIdAndGroupId.job = job;
-      stuIdAndGroupId.type = type;
-
       this.$set(this, 'stuIdAndGroupId', stuIdAndGroupId);
-      // 所有学生
-      let studentList = await this.stuQery(data);
-      studentList = studentList.data;
+      let studentList = this.stuNameList;
       // 没有组的学生名字
       let noGroupStudentNames = [];
       // 循环所有学生id
@@ -207,26 +159,23 @@ export default {
       // 未分组学生id(studentIds(有组学生id))(studentList所有学生)(noGroupStudentNames没有组的学生名字)
       this.$set(this, 'noGroupStudentNames', noGroupStudentNames);
     },
-    // 创建小组
+    // 创建分组-打開dialog
+    createGroup() {
+      this.createGroupDialog = true;
+    },
+    // 提交创建分组-班长职责
     async saveGroup({ data }) {
-      data.termid = this.user.termid;
-      data.batchid = this.user.batchid;
-      data.classid = this.user.classid;
-
       const result = await this.create(data);
       if (result.errcode == 0) {
-        this.findList();
+        this.createGroupDialog = false;
+        this.findGroup();
       }
     },
-    // 加入小组
-    async joinGroup({ groupId }) {
-      let data = {};
-      data.groupid = groupId;
-      data.stuid = this.user.userid;
-      data.stuname = this.user.name;
-      const result = await this.insert(data);
+    // 删除分组-班长职责
+    async deleteGroup({ groupId }) {
+      const result = await this.delete(groupId);
       if (result.errcode == 0) {
-        this.findList();
+        this.findGroup();
       }
     },
     // 退出小组
@@ -236,14 +185,18 @@ export default {
       data.stuid = this.user.userid;
       const result = await this.exit(data);
       if (result.errcode == 0) {
-        this.findList();
+        this.findGroup();
       }
     },
-    // 删除小组
-    async deleteGroup({ groupId }) {
-      const result = await this.delete(groupId);
+    // 加入小组
+    async joinGroup({ groupId }) {
+      let data = {};
+      data.groupid = groupId;
+      data.stuid = this.user.userid;
+      data.stuname = this.user.name;
+      const result = await this.insert(data);
       if (result.errcode == 0) {
-        this.findList();
+        this.findGroup();
       }
     },
   },
@@ -265,7 +218,7 @@ export default {
   min-height: 570px;
 }
 .foot {
-  height: 50px;
+  height: 90px;
   overflow: hidden;
 }
 </style>

+ 33 - 7
src/views/index.vue

@@ -5,9 +5,12 @@
         <el-col :span="24" class="top">
           <NavBar v-show="navShow" :title="title" :isleftarrow="isleftarrow"> </NavBar>
         </el-col>
-        <el-col :span="24" class="main">
+        <el-col :span="24" class="main" v-if="view === 'arrange'">
           <mainData :lesson="lesson" :today="today" :arrange="arrange" @getLesson="getLesson"></mainData>
         </el-col>
+        <el-col :span="24" class="main" v-if="view === 'class'">
+          <teaClass :classList="classList" @turnto="turnto" title="查看班级"></teaClass>
+        </el-col>
         <el-col :span="24" class="foot">
           <footInfo></footInfo>
         </el-col>
@@ -19,6 +22,7 @@
 <script>
 import NavBar from '@/layout/common/topInfo.vue';
 import footInfo from '@/layout/common/footInfo.vue';
+import teaClass from '@/layout/question/teaClass.vue';
 import mainData from '@/layout/index/mainData.vue';
 import { mapState, createNamespacedHelpers, mapGetters } from 'vuex';
 const { mapActions: lesson } = createNamespacedHelpers('lesson');
@@ -31,8 +35,10 @@ export default {
     NavBar, //头部导航
     footInfo, //底部导航
     mainData, //课程安排主体
+    teaClass,
   },
   data: () => ({
+    view: 'class',
     lesson: {},
     originLesson: [],
     arrange: [],
@@ -40,13 +46,22 @@ export default {
     title: '日程安排',
     isleftarrow: '',
     navShow: true,
+    classid: undefined,
+    classList: [],
   }),
   created() {
     let today = this.getDay();
     let todate = this.getDate();
     this.$set(this.today, `date`, todate);
     this.$set(this.today, `day`, today);
-    this.searchInfo();
+    if (this.user.type === '1') {
+      this.view = 'class';
+      this.getClass();
+    } else {
+      this.$set(this, `classid`, this.user.classid);
+      this.searchInfo();
+      this.view = 'arrange';
+    }
   },
   computed: {
     ...mapState(['user']),
@@ -66,7 +81,7 @@ export default {
     ...classes({ classesInfo: 'fetch', classeslist: 'query' }),
     // 查询课程详情
     async searchInfo() {
-      const res = await this.classesInfo(this.user.classid);
+      const res = await this.classesInfo(this.classid);
       const result = await this.lessionInfo(res.data.lessonid);
       var ahh = result.data.lessons.map((i, index) => {
         let word = '';
@@ -82,11 +97,11 @@ export default {
       var lesson = result.data.lessons.find(item => item.date === this.getDate());
       this.$set(this, `lesson`, lesson);
       // 获取课程开始-结束日期
-      let ltime = result.data.lessons.map(i => {
+      let ltime = result.data.lessons.map((i, index) => {
         let object = { date: i.date, day: this.getDay(i.date) };
-        return object;
+        if (index !== 0) return object;
       });
-      this.$set(this, `arrange`, ltime);
+      this.$set(this, `arrange`, _.compact(ltime));
     },
     // 获取时间
     getDay(date = new Date()) {
@@ -105,9 +120,20 @@ export default {
     },
     //点击日期获取课程
     getLesson(date) {
+      console.log(date);
       let res = this.originLesson.find(f => f.date === date.date);
       this.$set(this, `lesson`, res);
     },
+    //班主任获取班级列表
+    async getClass() {
+      const res = await this.classeslist({ headteacherid: this.user.userid });
+      this.$set(this, `classList`, res.data);
+    },
+    turnto(data) {
+      this.$set(this, `classid`, data._id);
+      this.searchInfo();
+      this.view = 'arrange';
+    },
   },
 };
 </script>
@@ -127,7 +153,7 @@ export default {
   min-height: 570px;
 }
 .foot {
-  height: 50px;
+  height: 90px;
   overflow: hidden;
 }
 </style>

+ 7 - 5
src/views/question/index.vue

@@ -7,7 +7,7 @@
         </el-col>
         <el-col :span="24" class="main">
           <span v-if="this.user.type === '1'">
-            <teaClass :classList="classList"></teaClass>
+            <teaClass :classList="classList" @turnto="turnto" title="班级问卷进度"></teaClass>
           </span>
           <span v-else>
             <questionnaire-info :questionnaireList="questionnaireList"></questionnaire-info>
@@ -48,8 +48,8 @@ export default {
     navShow: true,
   }),
   created() {
-    this.search();
     this.searchInfo();
+    this.search();
   },
   computed: {
     ...mapState(['user']),
@@ -80,9 +80,11 @@ export default {
     },
     // 班主任查询管理班级列表
     async searchInfo({ ...info } = {}) {
-      const res = await this.classinfo({ ...info });
-      var result = res.data.filter(item => item.headteacherid === this.user.userid);
-      this.$set(this, `classList`, result);
+      const res = await this.classinfo({ headteacherid: this.user.userid });
+      this.$set(this, `classList`, res.data);
+    },
+    turnto(data) {
+      this.$router.push({ path: '/question/teaProgress', query: { classid: data.id } });
     },
   },
 };

+ 1 - 1
src/views/teacherscore/index.vue

@@ -103,7 +103,7 @@ export default {
   min-height: 570px;
 }
 .foot {
-  height: 50px;
+  height: 90px;
   overflow: hidden;
 }
 </style>

+ 1 - 1
src/views/user/index.vue

@@ -99,7 +99,7 @@ export default {
   min-height: 570px;
 }
 .foot {
-  height: 50px;
+  height: 90px;
   overflow: hidden;
 }
 </style>