Explorar o código

寝室,班级添加ibeacon字段--蓝牙id;
修改计划的班级管理为单独菜单

lrf402788946 %!s(int64=5) %!d(string=hai) anos
pai
achega
d185c38330

+ 9 - 3
src/router/index.js

@@ -25,10 +25,16 @@ const newPlan = [
     component: () => import('@/views/new-plan/arrange.vue'),
   },
   {
-    path: '/newPlan/classes',
-    name: 'newPlan_classes',
+    path: '/newPlan/classes/index',
+    name: 'newPlan_classes_index',
+    meta: { title: '班级管理' },
+    component: () => import('@/views/new-plan/class/index-class.vue'),
+  },
+  {
+    path: '/newPlan/classes/detail',
+    name: 'newPlan_classes_detail',
     meta: { title: '班级安排' },
-    component: () => import('@/views/new-plan/classes.vue'),
+    component: () => import('@/views/new-plan/class/classes.vue'),
   },
 ];
 

+ 1 - 0
src/views/bedroom/detail.vue

@@ -38,6 +38,7 @@ export default {
       { label: '男女限制', model: 'gender', type: 'radio' },
       { label: '状态', model: 'status', type: 'radio' },
       { label: '楼层', required: true, model: 'floor', type: 'radio' },
+      { label: '蓝牙id', required: true, model: 'ibeacon' },
     ],
     rules: {
       code: [{ required: true, message: '请输入寝室号' }],

+ 1 - 0
src/views/lesson/detail.vue

@@ -152,6 +152,7 @@ export default {
         this.$set(this, `info`, res.data);
         let { lessons } = res.data;
         lessons = JSON.parse(lessons);
+        console.log(lessons);
         this.$set(this, `lessons`, lessons);
       }
       this.loading = false;

+ 4 - 1
src/views/location/detail.vue

@@ -21,7 +21,10 @@ export default {
   },
   data: () => ({
     info: {},
-    fields: [{ label: '地点', required: true, model: 'name' }],
+    fields: [
+      { label: '地点', required: true, model: 'name' },
+      { label: '蓝牙id', required: true, model: 'ibeacon' },
+    ],
     rules: {
       name: [{ required: true, message: '请输入地点' }],
     },

+ 5 - 1
src/views/new-plan/arrange.vue

@@ -201,12 +201,15 @@ export default {
               i.end = JSON.parse(JSON.stringify(i.enddate));
               i.title = JSON.parse(JSON.stringify(i.name));
               delete i.startdate, delete i.enddate;
-              i.index = index;
               return i;
             });
             return item.batchnum;
           })
         );
+        events = events.map((i, index) => {
+          i.index = index;
+          return i;
+        });
         this.$set(this, `events`, events);
         this.$set(this, `selectList`, events);
       }
@@ -326,6 +329,7 @@ export default {
     },
     //列表删除事件
     toDelete({ data, index }) {
+      console.log(data, index);
       this.$set(
         this,
         `events`,

+ 40 - 32
src/views/new-plan/classes.vue

@@ -7,7 +7,7 @@
           <el-option v-for="(i, index) in termList" :key="index" :label="`第${i.term}期`" :value="i._id"></el-option>
         </template>
       </template>
-      <el-card>
+      <el-card style="padding:10px">
         <el-row type="flex" justify="space-around" :gutter="10" align="middle" style="padding:10px 0;">
           <el-col :span="7">班级需求:{{ selectInfo.personReq }}人</el-col>
           <el-col :span="7">已选择学生:{{ selected.length }}人</el-col>
@@ -22,8 +22,8 @@
               </el-select>
             </el-form-item>
             <el-form-item label="班级">
-              <el-select v-model="selectInfo.classname" placeholder="请先选择批次">
-                <el-option v-for="(i, index) in classList" :key="index" :label="i.name" :value="i.name"></el-option>
+              <el-select v-model="selectInfo.classname" placeholder="请先选择批次" @change="getLimit">
+                <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>
@@ -31,18 +31,18 @@
             </el-form-item>
           </el-form>
         </el-row>
+        <data-table
+          ref="table"
+          :fields="fields"
+          :data="list"
+          :opera="opera"
+          :select="true"
+          :selected="selected"
+          @edit="toEdit"
+          @delete="toDelete"
+          @handleSelect="toSelect"
+        ></data-table>
       </el-card>
-      <data-table
-        ref="table"
-        :fields="fields"
-        :data="list"
-        :opera="opera"
-        :select="true"
-        :selected="selected"
-        @edit="toEdit"
-        @delete="toDelete"
-        @handleSelect="toSelect"
-      ></data-table>
     </list-frame>
   </div>
 </template>
@@ -124,27 +124,31 @@ export default {
     },
     //根据批次id,查询下面的班级
     async getClasses(data) {
-      //查询班级
-      if (!data) return;
       const res = await this.getClassesList({ batchid: data });
-      // gc1 因为已经限制了分班人数,所以不允许出现班级人数不够的情况,查出来的班级就不应该生成,可以使用name过滤掉选项
-      let classList = [];
       if (this.$checkRes(res)) {
-        if (res.data.length > 0) classList = res.data;
+        this.$set(this, `classList`, res.data);
       }
-      //整理班级数据,根据批次中的class数量,人数,创建班级
-      let batch = this.batchList.find(f => f._id === data);
-      let { name, class: classnum = 1, type, number } = batch;
-      this.selectInfo.type = type;
-      this.$set(this.selectInfo, `personReq`, number);
-      let arr = [];
-      for (let i = 1; i <= classnum; i++) {
-        let object = { name: `${name}${type === '0' ? `${i}班` : ''}` };
-        arr.push(object);
-      }
-      // gc1 过滤掉
-      arr = arr.filter(f => !classList.find(c => c.name == f.name));
-      this.$set(this, `classList`, arr);
+      // //查询班级
+      // if (!data) return;
+      // const res = await this.getClassesList({ batchid: data });
+      // // gc1 因为已经限制了分班人数,所以不允许出现班级人数不够的情况,查出来的班级就不应该生成,可以使用name过滤掉选项
+      // let classList = [];
+      // if (this.$checkRes(res)) {
+      //   if (res.data.length > 0) classList = res.data;
+      // }
+      // //整理班级数据,根据批次中的class数量,人数,创建班级
+      // let batch = this.batchList.find(f => f._id === data);
+      // let { name, class: classnum = 1, type, number } = batch;
+      // this.selectInfo.type = type;
+      // this.$set(this.selectInfo, `personReq`, number);
+      // let arr = [];
+      // for (let i = 1; i <= classnum; i++) {
+      //   let object = { name: `${name}${type === '0' ? `${i}班` : ''}` };
+      //   arr.push(object);
+      // }
+      // // gc1 过滤掉
+      // arr = arr.filter(f => !classList.find(c => c.name == f.name));
+      // this.$set(this, `classList`, arr);
     },
     toEdit({ data }) {
       this.$router.push({ path: '/dept/detail', query: { id: data.id } });
@@ -189,6 +193,10 @@ export default {
       else res = false;
       return res;
     },
+    getLimit(selected) {
+      let res = this.classList.find(f => f._id == selected);
+      this.$set(this.selectInfo, `personReq`, res.number);
+    },
   },
   computed: {
     mainTitle() {

+ 92 - 0
src/views/new-plan/class/index-class.vue

@@ -0,0 +1,92 @@
+<template>
+  <div id="index">
+    <list-frame :title="pageTitle" @query="search" :total="total" :needFilter="false">
+      <data-table :fields="fields" :data="list" :opera="opera" @classes="toClasses" @lesson="lesson"></data-table>
+    </list-frame>
+  </div>
+</template>
+
+<script>
+var moment = require('moment');
+import _ from 'lodash';
+import Vue from 'vue';
+import listFrame from '@frame/layout/admin/list-frame';
+import dataTable from '@frame/components/data-table';
+import { mapState, createNamespacedHelpers } from 'vuex';
+const { mapActions: trainplan } = createNamespacedHelpers('trainplan');
+export default {
+  name: 'index',
+  props: {},
+  components: { listFrame, dataTable },
+  data: () => {
+    return {
+      dialog: false,
+      drawer: false,
+      opera: [
+        {
+          label: '排班',
+          icon: 'el-icon-school',
+          method: 'classes',
+        },
+        {
+          label: '排课',
+          icon: 'el-icon-date',
+          method: 'lesson',
+        },
+      ],
+      fields: [
+        { label: '年度', prop: 'year' },
+        { label: '标题', prop: 'title' },
+        { label: '状态', prop: 'status', format: i => (i === '0' ? '筹备中' : i === '1' ? '进行中' : '已结束') },
+      ],
+      festFields: [
+        { label: '节假日', prop: 'name', model: 'name', options: { readonly: true } },
+        { label: '开始时间', prop: 'begindate', model: 'begindate', type: 'date' },
+        { label: '结束时间', prop: 'finishdate', model: 'finishdate', type: 'date' },
+      ],
+      info: {},
+      form: {},
+      Ffields: [
+        { label: '年度', model: 'year' },
+        { label: '标题', model: 'title' },
+        { label: '假期', model: 'festivals', custom: true },
+        { label: '状态', model: 'status', type: 'radio' },
+      ],
+      rules: {},
+      list: [],
+      holiday: [],
+      total: 0,
+    };
+  },
+  created() {
+    this.search();
+  },
+  methods: {
+    ...trainplan(['query', 'create', 'delete', 'update']),
+    async search({ skip = 0, limit = 10, ...info } = {}) {
+      const res = await this.query({ skip, limit, ...info });
+      if (this.$checkRes(res)) {
+        this.$set(this, `list`, res.data);
+        this.$set(this, `total`, res.total);
+      }
+    },
+    toClasses({ data }) {
+      this.$router.push({ path: './detail', query: { id: data.id } });
+    },
+    lesson({ data }) {
+      this.$router.push({ path: './lesson', query: { id: data.id } });
+    },
+  },
+  computed: {
+    ...mapState(['user']),
+    pageTitle() {
+      return `${this.$route.meta.title}`;
+    },
+  },
+  metaInfo() {
+    return { title: this.$route.meta.title };
+  },
+};
+</script>
+
+<style lang="less" scoped></style>

+ 1 - 10
src/views/new-plan/index.vue

@@ -1,7 +1,7 @@
 <template>
   <div id="index">
     <list-frame :title="pageTitle" @query="search" :total="total" :needFilter="false" @add="toAdd">
-      <data-table :fields="fields" :data="list" :opera="opera" @edit="toEdit" @delete="toDelete" @date="date" @classes="toClasses"></data-table>
+      <data-table :fields="fields" :data="list" :opera="opera" @edit="toEdit" @delete="toDelete" @date="date"></data-table>
     </list-frame>
     <el-dialog title="年度信息" width="30%" :visible.sync="dialog" center :destroy-on-close="true" @close="handleClose" :reset="false">
       <data-form :data="info" :fields="Ffields" :rules="rules" @save="handleSave" :isNew="!info.id" :styles="{ padding: 0 }" labelWidth="60px">
@@ -52,12 +52,6 @@ export default {
           icon: 'el-icon-date',
           method: 'date',
         },
-        {
-          label: '安排班级',
-          icon: 'el-icon-school',
-          display: i => i.status === '1',
-          method: 'classes',
-        },
         {
           label: '删除',
           icon: 'el-icon-delete',
@@ -176,9 +170,6 @@ export default {
     date({ data }) {
       this.$router.push({ path: './arrange', query: { id: data.id } });
     },
-    toClasses({ data }) {
-      this.$router.push({ path: './classes', query: { id: data.id } });
-    },
   },
   computed: {
     ...mapState(['user']),

+ 2 - 1
src/views/new-plan/parts/event.vue

@@ -73,6 +73,7 @@ export default {
         if (valid) {
           let data = JSON.parse(JSON.stringify(this.form));
           this.resetForm();
+          if (data.type == '1') data.class = `1`;
           this.$emit('save', { isNew: this.isNew, data });
         } else {
           console.warn('form validate error!!!');
@@ -85,7 +86,7 @@ export default {
     },
     //删除
     toDelete() {
-      this.$emit('delete', { index: this.form.index, data: { index: this.form.index } });
+      this.$emit('delete', { index: this.form.index, data: this.form });
     },
     //禁用时间
     setDisabledDate(time) {