lrf402788946 4 years ago
parent
commit
1ad7879e67

+ 105 - 120
src/views/classes/attendance.vue

@@ -1,152 +1,137 @@
 <template>
-  <div id="attendance">
-    <listFrame :title="pageTitle" @query="skipsearch" :total="total" :needFilter="false" :returns="toreturn" :needAdd="false">
-      <!-- <attendanceInfo :tableData="tableData" :options="options" @filterDate="filterDate"></attendanceInfo> -->
-      <el-select v-model="value" placeholder="请选择" @change="filterDate">
-        <el-option v-for="(item, index) in options" :key="index" :label="item" :value="item"> </el-option>
-      </el-select>
-      <el-table :data="tableData" border style="width: 100%">
-        <el-table-column align="center" prop="date" label="日期"> </el-table-column>
-        <el-table-column align="center" prop="time" label="时间"> </el-table-column>
-        <el-table-column align="center" prop="name" label="姓名"> </el-table-column>
-        <el-table-column align="center" label="类型">
-          <template slot-scope="scope">
-            <span>{{ scope.row.type === '0' ? '上课考勤' : scope.row.type === '1' ? '寝室考勤' : '' }}</span>
-          </template>
-        </el-table-column>
-        <el-table-column align="center" label="状态">
-          <template slot-scope="scope">
-            <span>{{ scope.row.status === '0' ? '未签到' : scope.row.status === '1' ? '已签到' : scope.row.status === '2' ? '迟到' : '' }}</span>
-          </template>
-        </el-table-column>
-      </el-table>
-    </listFrame>
+  <div id="index">
+    <list-frame title="考勤管理" @query="onsearch" :total="total" :needFilter="false" :needAdd="false">
+      <el-form :inline="true" size="mini">
+        <el-form-item label="期">
+          <el-select v-model="form.termid" placeholder="请选择期数" @change="getClasses">
+            <el-option v-for="(i, index) in termList" :key="index" :label="`第${i.term}期`" :value="i._id"></el-option>
+          </el-select>
+        </el-form-item>
+        <el-form-item label="班级">
+          <el-select v-model="form.classid" placeholder="请先选择班级">
+            <el-option v-for="(i, index) in classList" :key="index" :label="i.name" :value="i._id"></el-option>
+          </el-select>
+        </el-form-item>
+        <el-form-item label="学生姓名">
+          <el-input v-model="form.name" placeholder="请输入学生姓名"></el-input>
+        </el-form-item>
+        <el-form-item label="">
+          <el-button type="primary" size="mini" @click="onsearch()"> 查询</el-button>
+        </el-form-item>
+      </el-form>
+      <data-table :fields="fields" :data="list"> </data-table>
+    </list-frame>
   </div>
 </template>
-
 <script>
 import _ from 'lodash';
-var moment = require('moment');
-import attendanceInfo from '@frame/parts/attendance';
 import listFrame from '@frame/layout/admin/list-frame';
+import dataTable from '@frame/components/data-table';
 import { mapState, createNamespacedHelpers } from 'vuex';
 const { mapActions: attendance } = createNamespacedHelpers('attendance');
+const { mapActions: student } = createNamespacedHelpers('student');
+const { mapActions: trainplan } = createNamespacedHelpers('trainplan');
 const { mapActions: classes } = createNamespacedHelpers('classes');
+
 export default {
+  metaInfo: { title: '考勤管理' },
   name: 'attendance',
   props: {},
-  components: { listFrame }, //attendanceInfo
+  components: {
+    listFrame,
+    dataTable,
+  },
   data: () => ({
+    classList: [],
+    batchList: [],
+    termList: [],
+    fields: [
+      { label: '学生姓名', prop: 'stuname' },
+      { label: '日期', prop: 'date' },
+      { label: '时间', prop: 'time' },
+
+      {
+        label: '类型',
+        prop: 'type',
+        format: item => {
+          return item === '0' ? '上课考勤' : item === '1' ? '上课考勤' : '';
+        },
+      },
+      {
+        label: '状态',
+        prop: 'status',
+        format: item => {
+          return item === '0' ? '未签到' : item === '1' ? '签到' : '迟到';
+        },
+      },
+    ],
+    form: {},
+    list: [],
     total: 0,
-    attendList: [],
-    tableData: [],
-    options: [],
-    dataList: [],
-    value: '',
   }),
-  created() {},
-  computed: {
-    ...mapState(['user', 'defaultOption']),
-    id() {
-      return this.defaultOption.classid;
-    },
-    pageTitle() {
-      return `${this.$route.meta.title}`;
-    },
+  created() {
+    this.searchinfo();
   },
+  computed: { ...mapState(['user', 'defaultOption']) },
   methods: {
-    ...attendance(['fetch', 'query']),
-    ...classes({ classFetch: 'fetch' }),
-    async search() {
-      const attendList = await this.query({ classid: this.id });
-      this.$set(this, `attendList`, attendList.data);
-      const classInfo = await this.classFetch(this.id);
-      const timeList = await this.getAllDays(classInfo.data.startdate, classInfo.data.enddate);
-      this.$set(this, `options`, timeList);
-    },
-    skipsearch({ skip = 0, limit = 10 } = {}) {
-      const data = _.slice(this.dataList, skip, skip + limit);
-      this.$set(this, `tableData`, data);
+    ...attendance(['query', 'delete']),
+    ...student({ stuquery: 'query' }),
+    ...trainplan({ planfetch: 'fetch' }),
+    ...classes({ classesquery: 'query' }),
+    async searchinfo() {
+      const res = await this.planfetch(this.defaultOption.planid);
+      let terms = res.data.termnum;
+      this.$set(this, `termList`, terms);
+      if (this.defaultOption.termid) {
+        this.form.termid = this.defaultOption.termid;
+        this.getClasses(this.form.termid);
+      }
     },
-    filterDate(time) {
-      const data = [];
-      for (const attendInfo of this.attendList) {
-        let dataInfo = {};
-        const attend = attendInfo.attend;
-        for (const _attend of attend) {
-          dataInfo.name = attendInfo.stuname;
-          if (moment(time).isSame(_attend.date)) {
-            dataInfo.date = time;
-            dataInfo.time = _attend.time;
-            dataInfo.status = _attend.status;
-            dataInfo.type = _attend.type;
-            data.push(dataInfo);
-          }
-          dataInfo = {};
-        }
+    getBatch(termid) {
+      let batchs = this.termList.filter(f => f._id === termid);
+      if (batchs.length > 0) {
+        let { batchnum } = batchs[0];
+        this.$set(this, `batchList`, batchnum);
       }
-      this.$set(this, `dataList`, data);
-      this.$set(this, `total`, data.length);
-      this.skipsearch();
     },
-    toreturn() {
-      window.history.go(-1);
+    async getClasses(termid) {
+      const res = await this.classesquery({ termid });
+      var arr = res.data.filter(item => item.type == '0');
+      this.$set(this, `classList`, arr);
     },
-    // 取得日期间所有日期
-    async getAllDays(begin_date, end_date) {
-      const errArr = [],
-        resultArr = [],
-        dateReg = /^[2]\d{3}-[01]\d-[0123]\d$/;
-      if (typeof begin_date !== 'string' || begin_date === '' || !dateReg.test(begin_date)) {
-        return errArr;
-      }
-      if (typeof end_date !== 'string' || end_date === '' || !dateReg.test(end_date)) {
-        return errArr;
-      }
-      try {
-        const beginTimestamp = Date.parse(new Date(begin_date)),
-          endTimestamp = Date.parse(new Date(end_date));
-        // 开始日期小于结束日期
-        if (beginTimestamp > endTimestamp) {
-          return errArr;
-        }
-        // 开始日期等于结束日期
-        if (beginTimestamp === endTimestamp) {
-          resultArr.push(begin_date);
-          return resultArr;
+    async onsearch({ skip = 0, limit = 10, ...info } = {}) {
+      const res = await this.query({ termid: this.form.termid, classid: this.form.classid, ...info });
+      const newdatas = [];
+      if (this.form.name) {
+        var arr = res.data.filter(item => item.stuname == this.form.name);
+        for (const data of arr) {
+          for (const attend of data.attend) {
+            let newdata = { stuname: data.stuname, ...attend };
+            newdatas.push(newdata);
+          }
         }
-        let tempTimestamp = beginTimestamp,
-          tempDate = begin_date;
-        // 新增日期是否和结束日期相等, 相等跳出循环
-        while (tempTimestamp !== endTimestamp) {
-          resultArr.push(tempDate);
-          // 增加一天
-          tempDate = moment(tempTimestamp)
-            .add(1, 'd')
-            .format('YYYY-MM-DD');
-          // 将增加时间变为时间戳
-          tempTimestamp = Date.parse(new Date(tempDate));
+      } else {
+        for (const data of res.data) {
+          for (const attend of data.attend) {
+            let newdata = { stuname: data.stuname, ...attend };
+            newdatas.push(newdata);
+          }
         }
-        // 将最后一天放入数组
-        resultArr.push(end_date);
-        return resultArr;
-      } catch (err) {
-        return errArr;
+      }
+      if (this.$checkRes(res)) {
+        this.$set(this, `total`, newdatas.length);
+        let _newdatas = newdatas.splice(skip, skip + limit);
+        this.$set(this, `list`, _newdatas);
       }
     },
   },
-  metaInfo() {
-    return { title: this.$route.meta.title };
-  },
   watch: {
-    id: {
+    defaultOption: {
       handler(val) {
-        this.$set(this, `options`, []);
-        this.$set(this, `value`, '');
-        if (val) this.search();
-        else this.$set(this, `tableData`, []);
+        this.form.termid = this.defaultOption.termid;
+        this.getBatch(this.form.termid);
       },
-      immediate: true,
+      deep: true,
     },
   },
 };

+ 17 - 2
src/views/classes/lesson.vue

@@ -1,7 +1,7 @@
 <template>
   <div id="lesson">
     <detail-frame title="班级课表">
-      <class-table ref="lesson" :classInfo="classInfo" @saveResult="getRes"></class-table>
+      <class-table ref="lesson" :classInfo="classInfo" @toConfirm="toConfirm" @saveResult="getRes"></class-table>
       <el-divider></el-divider>
       <info-class
         ref="classes"
@@ -11,6 +11,14 @@
         :headTeacherList="headTeacherList"
         @saveResult="getRes"
       ></info-class>
+      <el-row type="flex" align="middle" justify="center" class="btn_bar">
+        <!-- <el-col :span="2">
+          <el-button type="primary" @click="classSave">保存</el-button>
+        </el-col> -->
+        <el-col :span="2">
+          <el-button type="primary" @click="toStatus">确定课表</el-button>
+        </el-col>
+      </el-row>
     </detail-frame>
   </div>
 </template>
@@ -72,7 +80,6 @@ export default {
       } else {
         this.result.push({ from, result });
       }
-      console.log(this.result);
       if (this.result.length == 2) {
         let resR = this.result.every(e => e.result == true);
         if (resR) this.$message.success('保存成功');
@@ -116,6 +123,14 @@ export default {
         }
       }
     },
+    async toStatus() {
+      this.$refs.lesson.toConfirm();
+    },
+    async toConfirm(id) {
+      let lessonIds = [id];
+      const res = await this.confirmLesson(lessonIds);
+      this.$checkRes(res, '课表确定成功', res.errmsg || '课表确定失败');
+    },
   },
   computed: {
     ...mapState(['user', 'defaultOption']),

+ 1 - 1
src/views/classes/name-list.vue

@@ -2,7 +2,7 @@
   <div id="name-list">
     <list-frame :title="mainTitle" @query="search" :total="total" :needFilter="false" :needAdd="false">
       <el-col :span="24" class="printingBtn">
-        <el-button type="primary" size="mini" @click="toPrint()">打印名牌</el-button>
+        <!-- <el-button type="primary" size="mini" @click="toPrint()">打印名牌</el-button> -->
         <el-button type="primary" size="mini" @click="toComputIsFine()" :disabled="this.defaultOption.classid ? false : true">设置优秀学员</el-button>
       </el-col>
       <data-table :fields="fields" :data="list" :opera="opera" @edit="toEdit" @delete="toDelete" @post="toPost"></data-table>

+ 1 - 1
src/views/classes/parts/class-table.vue

@@ -121,7 +121,7 @@ export default {
       dayType: [{ label: '活动' }, { label: '课程' }],
       actList: [
         { label: '--' },
-        { label: '报+开班仪式' },
+        { label: '报+开班仪式' },
         { label: '午餐+休息' },
         { label: '晚餐' },
         { label: '团队组建' },

+ 1 - 1
src/views/classes/print.vue

@@ -12,7 +12,7 @@
         <el-tab-pane label="打印证书" name="cert" :lazy="true">
           <cert-card :list="studList" :startdate="startdate" :enddate="enddate"></cert-card>
         </el-tab-pane>
-        <el-tab-pane label="打印报表" name="sign" :lazy="true">
+        <el-tab-pane label="打印报表" name="sign" :lazy="true">
           <sign-card v-loading="loading" :list="studList"></sign-card>
         </el-tab-pane>
         <el-tab-pane label="打印班级课表" name="lesson" :lazy="true">