lrf402788946 5 年 前
コミット
ececc02de1
2 ファイル変更97 行追加19 行削除
  1. 51 9
      src/views/plan/index.vue
  2. 46 10
      src/views/plan/lesson.vue

+ 51 - 9
src/views/plan/index.vue

@@ -1,7 +1,16 @@
 <template>
   <div id="index">
     <list-frame :title="mainTitle" @query="search" :total="total" :needFilter="false" @add="$router.push({ path: '/plan/detail' })">
-      <data-table :fields="fields" :data="list" :opera="opera" @edit="toEdit" @delete="toDelete"></data-table>
+      <data-table
+        :fields="fields"
+        :data="list"
+        :opera="opera"
+        @edit="toEdit"
+        @delete="toDelete"
+        @publish="toPublish"
+        @classes="toClasses"
+        @lesson="toLesson"
+      ></data-table>
     </list-frame>
   </div>
 </template>
@@ -25,25 +34,47 @@ export default {
       {
         label: '编辑',
         icon: 'el-icon-edit',
+        display: i => i.status === '0',
         method: 'edit',
       },
       {
         label: '删除',
         icon: 'el-icon-delete',
+        display: i => i.status === '0',
         method: 'delete',
         confirm: true,
       },
-      //TODO 需要判断
-      // {
-      //   label: '安排班级',
-      //   icon: 'el-icon-school',
-      //     methods: 'classes',
-      // },
+      {
+        label: '发布',
+        icon: 'el-icon-view',
+        method: 'publish',
+        methodZh: i => `您确认发布计划: ${i.title}`,
+        display: i => i.status === '0',
+        confirm: true,
+      },
+      {
+        label: '安排班级',
+        icon: 'el-icon-school',
+        display: i => i.status === '1',
+        method: 'classes',
+      },
+      {
+        label: '安排课程',
+        icon: 'el-icon-date',
+        display: i => i.status === '1',
+        method: 'lesson',
+      },
     ],
     fields: [
       { label: '计划标题', prop: 'title' },
       { label: '年度', prop: 'year' },
-      { label: '状态', prop: 'status' },
+      {
+        label: '状态',
+        prop: 'status',
+        format: i => {
+          return i === '0' ? '筹备中' : '其他状态';
+        },
+      },
     ],
     list: [],
     total: 0,
@@ -52,7 +83,7 @@ export default {
     this.search();
   },
   methods: {
-    ...mapActions(['query', 'delete']),
+    ...mapActions(['query', 'delete', 'update']),
     async search({ skip = 0, limit = 10, ...info } = {}) {
       const res = await this.query({ skip, limit, ...info });
       if (this.$checkRes(res)) {
@@ -68,6 +99,17 @@ export default {
       this.$checkRes(res, '删除成功', '删除失败');
       this.search();
     },
+    async toPublish({ data }) {
+      let { id } = data;
+      let res = await this.update({ id, status: '1' });
+      this.$checkRes(res, '发布成功', '发布失败');
+    },
+    toLesson({ data }) {
+      this.$router.push({ path: '/plan/lesson', query: { id: data.id } });
+    },
+    toClasses({ data }) {
+      this.$router.push({ path: '/plan/classes', query: { id: data.id } });
+    },
   },
   computed: {
     mainTitle() {

+ 46 - 10
src/views/plan/lesson.vue

@@ -1,11 +1,16 @@
 <template>
   <div id="lesson">
     <transition name="el-zoom-in-center">
-      <list-frame v-if="view === 'list'" :title="mainTitle" @query="search" :total="total" :filter="filterFields" :needAdd="false">
+      <list-frame v-if="view === 'list'" :title="mainTitle" @query="batchSearch" :total="total" :filter="filterFields" :needAdd="false" :needPag="false">
+        <template #options="{item}">
+          <template v-if="item.model === 'term'">
+            <el-option v-for="(i, index) in termList" :key="index" :label="`第${i.term}期`" :value="i._id"></el-option>
+          </template>
+        </template>
         <data-table ref="table" :fields="fields" :data="list" :opera="opera" @date="toDate"></data-table>
       </list-frame>
       <detail-frame v-else :title="detailTitle" :returns="returnList">
-        <lesson-plan start="2020-01-01" end="2020-01-07" :classes="classes"></lesson-plan>
+        <lesson-plan :start="batch.startdate" :end="batch.enddate" :classes="classes"></lesson-plan>
       </detail-frame>
     </transition>
   </div>
@@ -16,6 +21,10 @@ import lessonPlan from './lesson-plan';
 import listFrame from '@frame/layout/admin/list-frame';
 import detailFrame from '@frame/layout/admin/detail-frame';
 import dataTable from '@frame/components/data-table';
+import _ from 'lodash';
+import { createNamespacedHelpers } from 'vuex';
+const { mapActions: trainPlan } = createNamespacedHelpers('trainplan');
+const { mapActions: mapClasses } = createNamespacedHelpers('classes');
 export default {
   metaInfo: { title: '安排课程' },
   name: 'lesson',
@@ -24,6 +33,7 @@ export default {
   data: () => ({
     view: 'list',
     detailTitle: '',
+    termList: [],
     opera: [
       {
         label: '排课',
@@ -32,11 +42,12 @@ export default {
       },
     ],
     fields: [
-      { label: '期次', prop: 'term' },
+      { label: '', prop: 'name' },
       { label: '批数', prop: 'batch' },
     ],
-    filterFields: [{ label: '期数', model: 'term' }], //期数应该改成下拉,从计划里拿出来的
-    list: [{ term: 1, batch: 1 }],
+    filterFields: [{ label: '期数', model: 'term', type: 'select' }], //期数应该改成下拉,从计划里拿出来的
+    list: [],
+    batch: {},
     total: 0,
     classes: [
       {
@@ -59,12 +70,34 @@ export default {
       },
     ],
   }),
-  created() {},
+  created() {
+    this.search();
+  },
   methods: {
-    async search({ skip = 0, limit = 10, ...info } = {}) {},
-    toDate({ data }) {
-      this.view = 'lesson';
-      this.$set(this, `detailTitle`, `第${data.term}期 第${data.batch}批次`);
+    ...trainPlan({
+      getTrainPlan: 'fetch',
+    }),
+    ...mapClasses({
+      getClass: 'fetch',
+    }),
+    async search({ skip = 0, limit = 10, ...info } = {}) {
+      let res = await this.getTrainPlan(this.id);
+      if (this.$checkRes(res)) {
+        this.$set(this, `termList`, res.data.termnum);
+      }
+    },
+    batchSearch({ skip, limit, ...info }) {
+      let { term } = info;
+      let res = this.termList.find(f => f._id === term);
+      this.$set(this, `list`, _.sortBy(res.batchnum, ['batch']));
+    },
+    async toDate({ data }) {
+      // TODO 根据批id查班级
+      let res = await this.getClass({ batchid: data._id });
+      // this.view = 'lesson';
+      console.log(data);
+      let { type, classes } = data;
+      // this.$set(this, `detailTitle`, `第${data.term}期 第${data.batch}批次`);
     },
     returnList() {
       this.view = 'list';
@@ -82,6 +115,9 @@ export default {
       let main = meta.title || '';
       return main;
     },
+    id() {
+      return this.$route.query.id;
+    },
   },
 };
 </script>