ソースを参照

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

guhongwei 5 年 前
コミット
4613a8abfa

+ 3 - 1
src/layout/class/classGroup.vue

@@ -7,8 +7,9 @@
       <el-col :span="24">
         <groupList :groupList="groupList" v-on="$listeners" :stuIdAndGroupId="stuIdAndGroupId"></groupList>
       </el-col>
+
       <el-col :span="24" class="foot">
-        <noGroup></noGroup>
+        <noGroup v-if="stuIdAndGroupId.type === '班长'" :noGroupStudentNames="noGroupStudentNames"></noGroup>
       </el-col>
     </el-row>
     <el-dialog class="createGroup" title="创建小组" :visible.sync="dialogFormVisible" width="100%">
@@ -39,6 +40,7 @@ export default {
   props: {
     groupList: null,
     stuIdAndGroupId: null, //登陆者id和小组id
+    noGroupStudentNames: null, //没有小组的学生
   },
   components: {
     groupList,

+ 2 - 1
src/layout/class/classList.vue

@@ -12,7 +12,7 @@
             </span>
           </van-tab>
           <van-tab title="班级分组">
-            <classGroup :groupList="groupList" v-on="$listeners" :stuIdAndGroupId="stuIdAndGroupId"></classGroup>
+            <classGroup :groupList="groupList" v-on="$listeners" :stuIdAndGroupId="stuIdAndGroupId" :noGroupStudentNames="noGroupStudentNames"></classGroup>
           </van-tab>
         </van-tabs>
       </el-col>
@@ -33,6 +33,7 @@ export default {
     stuNameList: null, //学生看班级学生名单
     groupList: null,
     stuIdAndGroupId: null, //登陆者id和小组id
+    noGroupStudentNames: null, //没有小组的学生
   },
   components: {
     // 显示班级学生名称(带有职务)

+ 8 - 8
src/layout/class/groupList.vue

@@ -5,19 +5,19 @@
         <el-collapse accordion>
           <el-collapse-item>
             <template slot="title">
-              <el-col :span="2" class="groupName">{{ index + 1 }}.</el-col>
-              <el-col :span="5" class="groupName"> {{ item.name }} </el-col>
-              <el-col :span="4" class="groupName">
+              <el-col :span="2">{{ index + 1 }}.</el-col>
+              <el-col :span="5"> {{ item.name }} {{ item.students.length }}人</el-col>
+              <el-col :span="4">
                 <el-button v-if="item.students.length >= 10" round plain type="danger" size="mini" disabled>已满员</el-button>
               </el-col>
-              <el-col :span="1" class="groupName"></el-col>
-              <el-col :span="4" class="groupName">
+              <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-col>
-              <el-col :span="1" class="groupName"></el-col>
-              <el-col :span="4" class="groupName">
+              <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
                 >
@@ -25,7 +25,7 @@
               </el-col>
             </template>
             <el-col :span="24" class="list" v-for="(itemStrudent, indexStudent) in item.students" :key="indexStudent">
-              <el-col :span="6" class="childName">{{ itemStrudent.stuname }}</el-col>
+              <el-col :span="6">{{ itemStrudent.stuname }}</el-col>
             </el-col>
           </el-collapse-item>
         </el-collapse>

+ 6 - 11
src/layout/class/noGroup.vue

@@ -1,16 +1,11 @@
 <template>
   <div id="noGroup">
     <el-row>
-      <el-col :span="24">未分组学生</el-col>
-      <el-col :span="6">顾宏伟</el-col>
-      <el-col :span="6">顾宏伟</el-col>
-      <el-col :span="6">顾宏伟</el-col>
-      <el-col :span="6">顾宏伟</el-col>
-      <el-col :span="6">顾宏伟</el-col>
-      <el-col :span="6">顾宏伟</el-col>
-      <el-col :span="6">顾宏伟</el-col>
-      <el-col :span="6">顾宏伟</el-col>
-      <el-col :span="6">顾宏伟</el-col>
+      <el-col :span="24"><el-link type="primary" :underline="false">未分组学生</el-link></el-col>
+
+      <el-col :span="6" class="list" v-for="(item, index) in noGroupStudentNames" :key="index">
+        {{ item }}
+      </el-col>
     </el-row>
   </div>
 </template>
@@ -19,7 +14,7 @@
 export default {
   name: 'noGroup',
   props: {
-    noGroupList: null,
+    noGroupStudentNames: null,
   },
   components: {},
   data: () => ({}),

+ 15 - 10
src/layout/index/mainData.vue

@@ -1,17 +1,22 @@
 6<template>
   <div id="mainData">
-    <el-row>
+    <el-row v-for="(item, index) in lessionclassInfo.lessons" :key="index">
       <el-col :span="24">
-        <el-col :span="24" class="info">
+        <!-- <el-col :span="24" class="info">
           <el-button type="primary">教师评分</el-button>
-        </el-col>
-        <el-col :span="24" class="beijing" v-for="(item, index) in lessionclassInfo.lessons" :key="index">
+        </el-col> -->
+        <el-col :span="24" class="beijing">
           <el-col :span="24" class="top">
             <el-col :span="12" class="time">时间</el-col
-            ><el-col :span="12" class="date"
+            ><el-col :span="6" class="date"
               ><el-col :span="24"> {{ item.date }}</el-col
               ><el-col :span="24">{{ week }}</el-col>
             </el-col>
+            <el-col :span="6" class="date"
+              ><el-col :span="24" class="info">
+                <el-button type="primary" @click="$router.push({ path: 'teacherscore/index', query: { id: item.teaid } })">教师评分</el-button></el-col
+              >
+            </el-col>
           </el-col>
           <el-col :span="24" class="context">
             <el-col :span="12" class="contexttime"><span>8:30 — 11:30</span></el-col
@@ -73,18 +78,18 @@ export default {
 <style lang="less" scoped>
 .info {
   text-align: center;
-  padding: 25px 0;
+  padding: 7px 0 0 0;
 }
 .beijing {
   background-color: #eee;
-  min-height: 640px;
+  min-height: 700px;
 }
 .top {
   margin: 20px 0 0 0;
 }
 /deep/.el-button {
   border-radius: 11px;
-  padding: 15px 21px 15px 20px;
+  padding: 10px 10px 10px 10px;
 }
 .time {
   background-color: #ffffff;
@@ -98,13 +103,13 @@ export default {
   background-color: #ffffff;
   height: 70px;
   font-size: 16px;
-  padding: 0px 0px 0 20px;
+
   line-height: 30px;
   color: #222222;
 }
 .context {
   background-color: #ffffff;
-  height: 90px;
+  height: 102px;
   width: 92%;
   margin: 15px 15px 0 15px;
   color: #bbbbbb;

+ 96 - 0
src/layout/teacherscore/mainData.vue

@@ -0,0 +1,96 @@
+<template>
+  <div id="mainData">
+    <el-row>
+      <el-col :span="24" class="info">
+        <el-form ref="form" :model="form">
+          <el-col :span="24" class="top">
+            <van-image round width="10rem" height="10rem" :src="srcurl" />
+            <el-col :span="24">{{ teacherinfo.name }}</el-col>
+          </el-col>
+
+          <el-col :span="24"></el-col>
+          <el-col :span="24" class="pingfen">
+            <el-form-item>
+              <el-rate v-model="form.score"></el-rate>
+            </el-form-item>
+          </el-col>
+
+          <el-col :span="24">
+            <el-col :span="16" class="title">工作量</el-col>
+            <el-col :span="8" class="fenshu">评分:10分</el-col>
+            <el-col :span="24" class="work">本周工作饱满</el-col>
+          </el-col>
+          <el-col :span="24" class="beizhu">
+            <span>备注</span>
+            <el-input type="textarea" v-model="form.remark"></el-input>
+          </el-col>
+          <el-col :span="24" class="anniu">
+            <el-form-item>
+              <el-button type="primary" @click="onSubmit">提交</el-button>
+            </el-form-item>
+          </el-col>
+        </el-form>
+      </el-col>
+    </el-row>
+  </div>
+</template>
+<script>
+export default {
+  name: 'mainData',
+  props: { teacherinfo: null, form: null },
+  components: {},
+  data: () => ({
+    srcurl: require('@/assets/circle.png'),
+  }),
+  created() {},
+  computed: {},
+  methods: {
+    onSubmit() {
+      this.$emit('onsave', { data: this.form });
+    },
+  },
+};
+</script>
+
+<style lang="less" scoped>
+.info {
+  background-color: #ffffff;
+}
+.top {
+  text-align: center;
+  padding: 30px 0 0 0;
+}
+.pingfen {
+  text-align: center;
+  padding: 10px 0 0 0;
+  border-bottom: 1px dashed #bbbbbb;
+}
+.context {
+  padding: 30px 0 0 0;
+  height: 120px;
+}
+.title {
+  padding: 10px 0 0 20px;
+}
+.fenshu {
+  padding: 10px 0 0 0;
+}
+.work {
+  color: #319ff7;
+  padding: 10px 0 0 20px;
+}
+.beizhu {
+  margin: 20px;
+}
+/deep/.beizhu .el-textarea__inner {
+  background-color: #f5f5f5;
+  width: 90%;
+  margin: 20px 0 0 0;
+  height: 100px;
+}
+
+.anniu {
+  padding: 20px 0 0 0;
+  text-align: center;
+}
+</style>

+ 42 - 0
src/layout/teacherscore/topInfo.vue

@@ -0,0 +1,42 @@
+<template>
+  <div id="topInfo">
+    <el-row>
+      <el-col :span="24" class="topInfos">
+        <van-nav-bar title="教师评分" left-text="返回" left-arrow fixed @click-left="onClickLeft" />
+      </el-col>
+    </el-row>
+  </div>
+</template>
+
+<script>
+export default {
+  name: 'topInfo',
+  props: {},
+  components: {},
+  data: () => ({}),
+  created() {},
+  computed: {},
+  methods: {
+    onClickLeft() {
+      Toast('返回');
+    },
+  },
+};
+</script>
+
+<style lang="less" scoped>
+.topInfos {
+}
+/deep/.van-nav-bar {
+  background: #2c69fe;
+}
+/deep/.van-nav-bar__title {
+  color: #fff;
+}
+/deep/.van-nav-bar__text {
+  color: #fff;
+}
+/deep/.van-nav-bar .van-icon {
+  color: #fff;
+}
+</style>

+ 8 - 0
src/router/index.js

@@ -11,6 +11,7 @@ const routes = [
     meta: { title: '日程安排', isleftarrow: true },
     component: () => import('../views/index.vue'),
   },
+
   // 班级信息
   {
     path: '/classinfo',
@@ -22,6 +23,13 @@ const routes = [
     meta: { title: '班級名单', isleftarrow: true },
     component: () => import('../views/class/index.vue'),
   },
+
+  // 教师评分
+  {
+    path: '/teacherscore/index',
+    meta: { title: '教师评分', isleftarrow: true },
+    component: () => import('../views/teacherscore/index.vue'),
+  },
   // 班级名单-上成绩
   {
     path: '/class/achieve',

+ 4 - 0
src/store/index.js

@@ -7,6 +7,8 @@ import question from './question';
 import questionnaire from './questionnaire';
 import student from './student';
 import lesson from './lesson';
+import teacher from './teacher';
+import score from './score';
 
 Vue.use(Vuex);
 
@@ -19,6 +21,8 @@ export default new Vuex.Store({
     questionnaire,
     student,
     lesson,
+    teacher,
+    score,
   },
   state: {}, //变量
   mutations: {}, //同步方法

+ 38 - 0
src/store/score.js

@@ -0,0 +1,38 @@
+import Vue from 'vue';
+import Vuex from 'vuex';
+import _ from 'lodash';
+Vue.use(Vuex);
+const api = {
+  scoreInfo: `/api/train/score`,
+};
+const state = () => ({});
+const mutations = {};
+
+const actions = {
+  async query({ commit }, { skip = 0, limit, ...info } = {}) {
+    const res = await this.$axios.$get(`${api.scoreInfo}`, { skip, limit, ...info });
+    return res;
+  },
+  async create({ commit }, payload) {
+    const res = await this.$axios.$post(`${api.scoreInfo}`, payload);
+    return res;
+  },
+  async fetch({ commit }, payload) {
+    const res = await this.$axios.$get(`${api.scoreInfo}/${payload}`);
+    return res;
+  },
+  async update({ commit }, { id, ...data }) {
+    const res = await this.$axios.$post(`${api.scoreInfo}/update/${id}`, data);
+    return res;
+  },
+  async delete({ commit }, payload) {
+    const res = await this.$axios.$delete(`${api.scoreInfo}/${payload}`);
+    return res;
+  },
+};
+export default {
+  namespaced: true,
+  state,
+  mutations,
+  actions,
+};

+ 38 - 0
src/store/teacher.js

@@ -0,0 +1,38 @@
+import Vue from 'vue';
+import Vuex from 'vuex';
+import _ from 'lodash';
+Vue.use(Vuex);
+const api = {
+  studentInfo: `/api/train/teacher`,
+};
+const state = () => ({});
+const mutations = {};
+
+const actions = {
+  async query({ commit }, { skip = 0, limit, ...info } = {}) {
+    const res = await this.$axios.$get(`${api.studentInfo}`, { skip, limit, ...info });
+    return res;
+  },
+  async create({ commit }, payload) {
+    const res = await this.$axios.$post(`${api.studentInfo}`, payload);
+    return res;
+  },
+  async fetch({ commit }, payload) {
+    const res = await this.$axios.$get(`${api.studentInfo}/${payload}`);
+    return res;
+  },
+  async update({ commit }, { id, ...data }) {
+    const res = await this.$axios.$post(`${api.studentInfo}/update/${id}`, data);
+    return res;
+  },
+  async delete({ commit }, payload) {
+    const res = await this.$axios.$delete(`${api.studentInfo}/${payload}`);
+    return res;
+  },
+};
+export default {
+  namespaced: true,
+  state,
+  mutations,
+  actions,
+};

+ 25 - 2
src/views/class/index.vue

@@ -21,6 +21,7 @@
             @deleteGroup="deleteGroup"
             @joinGroup="joinGroup"
             :stuIdAndGroupId="stuIdAndGroupId"
+            :noGroupStudentNames="noGroupStudentNames"
           ></classList>
         </el-col>
         <el-col :span="24" class="foot">
@@ -36,7 +37,8 @@ import NavBar from '@/layout/common/topInfo.vue';
 import footInfo from '@/layout/common/footInfo.vue';
 import classList from '@/layout/class/classList.vue';
 import { createNamespacedHelpers, mapGetters } from 'vuex';
-const { mapActions: mapQuestion } = createNamespacedHelpers('group');
+const { mapActions: mapGroup } = createNamespacedHelpers('group');
+const { mapActions: mapStudent } = createNamespacedHelpers('student');
 let site = JSON.parse(sessionStorage.getItem('site'));
 const termid = site.termid;
 const batchid = site.batchid;
@@ -94,6 +96,7 @@ export default {
     ],
     groupList: [],
     stuIdAndGroupId: '',
+    noGroupStudentNames: '',
     title: '',
     isleftarrow: '',
     transitionName: 'fade',
@@ -123,7 +126,8 @@ export default {
     outAssignShow() {
       this.assignShow = false;
     },
-    ...mapQuestion(['query', 'create', 'delete', 'insert', 'exit']),
+    ...mapGroup(['query', 'create', 'delete', 'insert', 'exit']),
+    ...mapStudent({ stuQery: 'query' }),
     // 查询小组列表
     async findList() {
       let data = {};
@@ -136,8 +140,11 @@ export default {
       // 找出登陆者在哪个组
       // 找出组id
       let groupId = '';
+      // 所有有组学生id
+      let studentIds = [];
       var i = groupList.findIndex(value => {
         var v = value.students.findIndex(value => {
+          studentIds.push(value.stuid);
           return stuid === value.stuid;
         });
         return v != -1;
@@ -153,6 +160,22 @@ export default {
       // 登陆者身份是否为班长
       stuIdAndGroupId.type = type;
       this.$set(this, 'stuIdAndGroupId', stuIdAndGroupId);
+      // 所有学生
+      let studentList = await this.stuQery(data);
+      studentList = studentList.data;
+      // 没有组的学生名字
+      let noGroupStudentNames = [];
+      // 循环所有学生id
+      for (let i = 0; i < studentList.length; i++) {
+        // 循环有组学生id
+        for (let j = 0; j < studentIds.length; j++) {
+          if (studentList[i].id != studentIds[j]) {
+            noGroupStudentNames.push(studentList[i].name);
+          }
+        }
+      }
+      // 未分组学生id(studentIds(有组学生id))(studentList所有学生)(noGroupStudentNames没有组的学生名字)
+      this.$set(this, 'noGroupStudentNames', noGroupStudentNames);
     },
     // 创建小组
     async saveGroup({ data }) {

+ 86 - 0
src/views/teacherscore/index.vue

@@ -0,0 +1,86 @@
+<template>
+  <div id="index">
+    <el-row>
+      <el-col :span="24" class="style">
+        <el-col :span="24" class="top">
+          <topInfo></topInfo>
+        </el-col>
+        <el-col :span="24" class="main">
+          <mainData :teacherinfo="teacherinfo" :form="form" @onsave="onsave"></mainData>
+        </el-col>
+        <el-col :span="24" class="foot">
+          <footInfo></footInfo>
+        </el-col>
+      </el-col>
+    </el-row>
+  </div>
+</template>
+
+<script>
+import topInfo from '@/layout/teacherscore/topInfo.vue';
+import footInfo from '@/layout/common/footInfo.vue';
+import mainData from '@/layout/teacherscore/mainData.vue';
+const { mapActions: teacher } = createNamespacedHelpers('teacher');
+import { createNamespacedHelpers, mapGetters } from 'vuex';
+const { mapActions: mapStudent } = createNamespacedHelpers('student');
+const { mapActions: mapScore } = createNamespacedHelpers('score');
+export default {
+  name: 'index',
+  props: {},
+  components: {
+    topInfo, //头部导航
+    footInfo, //底部导航
+    mainData, //课程安排主体
+  },
+  data: () => ({
+    teacherinfo: {},
+    form: {},
+  }),
+  created() {
+    this.searchInfo();
+  },
+  computed: {
+    id() {
+      return this.$route.query.id;
+    },
+  },
+  mounted() {},
+  watch: {},
+  methods: {
+    ...teacher({ columnList: 'query', teacherInfo: 'fetch' }),
+    ...mapScore(['fetch', 'create', 'update']),
+
+    async searchInfo() {
+      const res = await this.teacherInfo(this.id);
+      console.log(res);
+      this.$set(this, `teacherinfo`, res.data);
+    },
+    async onsave(form) {
+      let data = this.form;
+      let res = await this.create(data);
+      console.log('成功');
+      // res = await this.create(form);
+    },
+  },
+};
+</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;
+}
+.foot {
+  height: 50px;
+  overflow: hidden;
+}
+</style>