lrf402788946 5 年之前
父節點
當前提交
f51f6be4e8

+ 3 - 4
src/views/director/index.vue

@@ -2,9 +2,8 @@
   <div id="index">
     <list-frame :title="mainTitle" @query="search" :total="total" :filter="filFields" @add="$router.push({ path: '/director/detail' })">
       <template #options="{item}">
-        <template v-if="item.model === 'dept'">
-          <el-option label="信息部" value="1"></el-option>
-          <el-option label="办公室" value="0"></el-option>
+        <template v-if="item.model === 'department'">
+          <el-option v-for="(i, index) in deptList" :key="index" :label="i.name" :value="i._id"></el-option>
         </template>
       </template>
       <data-table :fields="fields" :data="list" :opera="opera" @edit="toEdit" @delete="toDelete" :toFormat="toFormat"></data-table>
@@ -43,7 +42,7 @@ export default {
     ],
     filFields: [
       { label: '姓名', model: 'name' },
-      { label: '所属部门', model: 'dept', type: 'select' },
+      { label: '所属部门', model: 'department', type: 'select' },
     ],
     fields: [
       { label: '姓名', prop: 'name' },

+ 1 - 1
src/views/new-plan/class/classes.vue

@@ -173,7 +173,7 @@ export default {
       // 整理数据生成班级;将学生列表重新查询=>为了将已经有班级的学生剔除,以便继续分班(重新查询)
       let info = JSON.parse(JSON.stringify(_.omit(this.selectInfo, ['male', 'female', 'personReq'])));
       let stuList = JSON.parse(JSON.stringify(this.selected));
-      if (this.isOutRange(stuList)) return;
+      // if (this.isOutRange(stuList)) return;
       info.students = stuList;
       let res = await this.createClass(info);
       if (this.$checkRes(res, '分班成功', '分班失败')) this.$router.push({ path: '/plan/index' });

+ 69 - 9
src/views/new-plan/parts/director-arrange.vue

@@ -8,39 +8,64 @@
         <el-button type="primary" size="mini" @click="toArrange">一键分配</el-button>
       </el-col>
     </el-row>
-    <data-table :fields="fields" :data="classList" :opera="opera"></data-table>
+    <data-table :fields="fields" :data="classList" :opera="opera" @edit="toEdit" :toFormat="toFormat"></data-table>
+    <el-dialog title="选择班主任" :visible.sync="dialog" width="20%">
+      <data-form :data="form" :fields="fields" :rules="{}" @save="handleSave">
+        <template #options="{item,form}">
+          <template v-if="item.model == 'headteacherid'">
+            <el-option-group v-for="(dept, index) in htList" :label="dept.name" :key="index">
+              <el-option v-for="(i, tIndex) in dept.list" :key="`${index}-${tIndex}`" :label="i.name" :value="i._id"></el-option>
+            </el-option-group>
+          </template>
+        </template>
+      </data-form>
+    </el-dialog>
   </div>
 </template>
 
 <script>
 import _ from 'lodash';
 import dataTable from '@frame/components/data-table';
+import dataForm from '@frame/components/form';
 import { mapState, createNamespacedHelpers } from 'vuex';
 const { mapActions } = createNamespacedHelpers('teaPlan');
 const { mapActions: classes } = createNamespacedHelpers('classes');
+const { mapActions: mapDept } = createNamespacedHelpers('dept');
 export default {
   name: 'director-arrange',
   props: {
     events: { type: Array, default: () => [] },
   },
-  components: { dataTable },
+  components: { dataTable, dataForm },
   data: function() {
     return {
+      dialog: false,
+      form: {},
       classList: [],
+      htList: [],
+      deptList: [],
       fields: [
-        { label: '期', prop: 'term' },
-        { label: '批', prop: 'batch' },
-        { label: '班级', prop: 'name' },
-        { label: '班主任', prop: 'headteacherid' },
+        { label: '期', prop: 'term', model: 'term', type: 'text' },
+        { label: '批', prop: 'batch', model: 'batch', type: 'text' },
+        { label: '班级', prop: 'name', model: 'name', type: 'text' },
+        { label: '班主任', prop: 'headteacherid', model: 'headteacherid', type: 'select', format: true }, //
+      ],
+      opera: [
+        {
+          label: '选择班主任',
+          icon: 'el-icon-edit',
+          method: 'edit',
+        },
       ],
-      opera: [],
     };
   },
-  created() {
+  async created() {
+    await this.getOtherList();
     this.search();
   },
   methods: {
-    ...mapActions(['divide']),
+    ...mapDept({ getDept: 'query' }),
+    ...mapActions(['divide', 'findTeacher']),
     ...classes(['query']),
     async search() {
       let res = await this.query({ planid: this.id });
@@ -69,7 +94,42 @@ export default {
         this.$set(this, `classList`, arr);
       }
     },
+    async toEdit({ data, index }) {
+      let res = await this.findTeacher({ planid: data.planid, termid: data.termid, batchid: data.batchid });
+      if (this.$checkRes(res)) {
+        let group = _.groupBy(res.data, 'department');
+        let keys = Object.keys(group);
+        let arr = keys.map(key => {
+          let r = this.deptList.find(f => f.id == key);
+          let obj = {};
+          if (r) {
+            obj.name = r.name;
+            obj.list = group[key];
+          }
+          return obj;
+        });
+        this.$set(this, `htList`, arr);
+      }
+      this.dialog = true;
+      this.$set(this, `form`, { ...JSON.parse(JSON.stringify(data)), index });
+    },
+    handleSave({ data }) {
+      let { index, ...info } = data;
+      this.$set(this.classList, index, info);
+      this.dialog = false;
+    },
     async toSave() {},
+    async getOtherList() {
+      let res = await this.getDept();
+      if (this.$checkRes(res)) this.$set(this, `deptList`, res.data);
+    },
+    toFormat({ model, value }) {
+      if (model == 'headteacherid') {
+        let arr = _.flatten(this.htList.map(i => i.list));
+        let r = arr.find(f => f._id == value);
+        if (r) return r.name;
+      }
+    },
   },
   computed: {
     ...mapState(['user']),

+ 4 - 0
src/views/new-plan/parts/school-arrange.vue

@@ -184,6 +184,7 @@ export default {
           else i.remaining = 0;
           return i;
         });
+        console.log(school);
         this.$set(this, `list`, school);
         await this.getSchoolPlan();
         await this.getTotal();
@@ -244,6 +245,7 @@ export default {
         for (const key of keys) {
           let object = {};
           object.termnum = key.match(/\d+(.\d+)?/g)[0];
+          object._id = i[`_id_term${object.termnum}`];
           object.number = i[`term${object.termnum}`];
           object.termid = i[`id_term${object.termnum}`];
           if (i.carTerm) {
@@ -259,6 +261,7 @@ export default {
         i.term = this.checkTerm(i.term);
         return i;
       });
+      console.log(schPlan);
       this.$emit('toSave', schPlan);
     },
     //手动更改
@@ -341,6 +344,7 @@ export default {
               for (const t of term) {
                 i[`term${t.termnum}`] = t.number;
                 i[`id_term${t.termnum}`] = t.termid;
+                i[`_id_term${t.termnum}`] = t._id;
                 i.carTerm.push({ term: t.termnum, num: t.carnum });
               }
               i.remaining = i.remaining - term.reduce((prev, next) => prev + (next.number * 1 || 0), 0);