Bladeren bron

课程表

lrf402788946 5 jaren geleden
bovenliggende
commit
43b1047b5e
6 gewijzigde bestanden met toevoegingen van 110 en 135 verwijderingen
  1. 1 8
      src/router/index.js
  2. 1 1
      src/views/plan/index.vue
  3. 57 12
      src/views/plan/lesson-plan.vue
  4. 11 2
      src/views/plan/lesson.vue
  5. 7 80
      src/views/test/detail.vue
  6. 33 32
      src/views/timeTable/index.vue

+ 1 - 8
src/router/index.js

@@ -64,13 +64,6 @@ const routes = [
         component: () => import('@/views/certificaate/look.vue'),
       },
 
-      {
-        path: '/certificaate/index',
-        name: 'certificaate_index',
-        meta: { title: '证书', sub: '管理' },
-        component: () => import('@/views/certificaate/index.vue'),
-      },
-
       {
         path: '/questionnaire/index',
         name: 'questionnaire_index',
@@ -102,7 +95,7 @@ const routes = [
       },
       {
         path: '/teacher/verify',
-        name: 'teacher_index',
+        name: 'teacher_verify',
         meta: { title: '教师', sub: '审核页' },
         component: () => import('@/views/teacher/verify.vue'),
       },

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

@@ -36,7 +36,7 @@ export default {
       {
         label: '编辑',
         icon: 'el-icon-edit',
-        display: i => i.status === '0',
+        // display: i => i.status === '0',
         method: 'edit',
       },
       {

+ 57 - 12
src/views/plan/lesson-plan.vue

@@ -1,6 +1,6 @@
 <template>
   <div id="lesson-plan">
-    <el-collapse v-model="activeName" accordion>
+    <el-collapse v-model="activeName" accordion v-if="views === 'setting'">
       <template v-if="classList.length > 0">
         <el-collapse-item v-for="(item, index) in classList" :key="`coli${index}`" :name="`${index}`">
           <template slot="title">
@@ -49,6 +49,9 @@
               <el-col :span="5">
                 <el-button type="primary" @click="saveLessson(item.class)" size="mini">保存班级课程</el-button>
               </el-col>
+              <el-col :span="5">
+                <el-button type="primary" @click="toPreview(item.class)" plain size="mini">课表预览</el-button>
+              </el-col>
             </el-row>
           </el-form>
         </el-collapse-item>
@@ -57,6 +60,9 @@
         <el-collapse-item title="该批次未分班,无法继续排课!" name="none"></el-collapse-item>
       </template>
     </el-collapse>
+    <cards title="课表预览" :returns="toReturns" v-else>
+      <time-table :data="previews"></time-table>
+    </cards>
     <el-drawer :with-header="false" :visible.sync="drawer" direction="rtl" @close="drawerClose">
       <el-tabs>
         <el-tab-pane style="padding:10px">
@@ -70,7 +76,7 @@
             <el-form-item label="星期" prop="week">
               {{ form.week }}
             </el-form-item>
-            <el-form-item label="所授科目" prop="subid" required>
+            <el-form-item label="所授科目" prop="subid">
               <el-select v-model="form.subid">
                 <el-option v-for="(item, index) in subjectList" :key="`subject${index}`" :label="item.name" :value="item.id"></el-option>
               </el-select>
@@ -79,12 +85,13 @@
               <el-input v-model="form.teaname" :readonly="true" placeholder="点击选择教师" @click.native="toChooseTeacher"></el-input>
             </el-form-item>
             <el-form-item label="时长" prop="day" required>
-              <el-radio-group v-model="form.day">
-                <el-radio v-for="(i, index) in dayList" :key="index" :label="i.label"></el-radio>
+              <el-radio-group v-model="form.day" @change="$forceUpdate()">
+                <el-radio v-for="(i, index) in dayList" :key="`day${index}`" :label="i.label"></el-radio>
               </el-radio-group>
             </el-form-item>
             <el-form-item>
               <el-button type="primary" @click="toSaveDrawer">保存</el-button>
+              <el-button @click="resetDrawer">重置</el-button>
             </el-form-item>
           </el-form>
         </el-tab-pane>
@@ -134,6 +141,8 @@
 
 <script>
 import _ from 'lodash';
+import timeTable from '@frame/parts/time-table';
+import cards from '@frame/parts/cards';
 import dataTable from '@frame/components/data-table';
 import { createNamespacedHelpers } from 'vuex';
 const { mapActions: location } = createNamespacedHelpers('location'); //地点
@@ -146,12 +155,15 @@ const { mapActions: dept } = createNamespacedHelpers('dept'); //配合教师表
 export default {
   name: 'lesson-plan',
   props: {
-    start: { type: String, required: true },
-    end: { type: String, required: true },
+    startDate: { type: String, required: true },
+    endDate: { type: String, required: true },
     classes: { type: Array, default: () => [] },
   },
-  components: { dataTable },
+  components: { dataTable, timeTable, cards },
   data: () => ({
+    start: '',
+    end: '',
+    views: 'setting',
     activeName: '0',
     drawer: false,
     dialog: false,
@@ -185,7 +197,6 @@ export default {
     ],
     dayList: [{ label: '一天' }, { label: '半天' }],
     rules: {
-      subid: [{ required: true, message: '请选择科目' }],
       day: [{ required: true, message: '请选择时长' }],
     },
     form: {},
@@ -201,6 +212,7 @@ export default {
       cur: 1,
     },
     applyTeacherListPag: {},
+    previews: {},
   }),
   created() {
     this.setDateList();
@@ -215,11 +227,14 @@ export default {
     ...director({ getDirectorList: 'query' }),
     ...dept({ getDeptList: 'query' }),
     setDateList() {
-      let start = new Date(this.start);
-      let end = new Date(this.end);
+      let start = new Date(this.startDate);
+      let end = new Date(this.endDate);
+      this.$set(this, `start`, this.$fullDateString(new Date(start)));
       let day = (end.getTime() - start.getTime()) / (1 * 24 * 60 * 60 * 1000);
+      let endDate = this.$fullDateString(new Date(new Date(start).setDate(new Date(start).getDate() + day - 1)));
+      this.$set(this, `end`, endDate);
       let arr = [];
-      for (let index = 0; index <= day; index++) {
+      for (let index = 0; index < day; index++) {
         let s = new Date(JSON.parse(JSON.stringify(start)));
         let i = s.setDate(s.getDate() + index);
         i = this.$fullDateString(new Date(i));
@@ -255,6 +270,13 @@ export default {
       this.form.day ? '' : (this.form.day = '一天');
       this.drawer = true;
     },
+    resetDrawer() {
+      this.$set(this.form, `subid`);
+      this.$set(this.form, `subname`);
+      this.$set(this.form, `teaid`);
+      this.$set(this.form, `teaname`);
+      delete this.form.teaid, this.form.teaname, this.form.subid, this.form.subname;
+    },
     toChooseTeacher() {
       if (this.form.subid) {
         this.dialog = true;
@@ -279,7 +301,9 @@ export default {
     toSaveDrawer() {
       this.$refs['form'].validate(valid => {
         if (valid) {
-          this.form.subname = this.subjectList.find(f => f._id === this.form.subid).name;
+          if (this.subjectList.find(f => f._id === this.form.subid)) {
+            this.form.subname = this.subjectList.find(f => f._id === this.form.subid).name;
+          }
           let form = JSON.parse(JSON.stringify(this.form));
           let lesson = _.pick(form, ['day', 'subname', 'teaname', 'subid', 'teaid', 'date', 'week']);
           // 整理列表所需要的数据
@@ -360,9 +384,30 @@ export default {
     },
     saveLessson(id) {
       let tcc = this.classList.find(f => f.class === id);
+
       // // 礼仪课,开班地点,教师地点,拓展训练地点修改班级表
       this.$emit(`save`, tcc);
     },
+    toPreview(id) {
+      let tcc = this.classList.find(f => f.class === id);
+      let numArr = tcc.name.match(/\d+/g);
+      let term = numArr[0];
+      let classes = numArr[2];
+      let headteacher = {};
+      this.directorList.map(f => (headteacher = f.options.find(ff => ff.id === tcc.headteacherid)));
+      let lyTeacher = this.lyTeacherList.find(f => f.id === tcc.lyteacherid);
+      let js = this.locationList.find(f => f.id === tcc.jslocationid);
+      let kbys = this.locationList.find(f => f.id === tcc.kbyslocationid);
+      let tzxl = this.locationList.find(f => f.id === tcc.kzjhlocationid);
+      let yc = this.locationList.find(f => f.id === tcc.yclocationid);
+      let object = { term, class: classes, start: this.start, end: this.end, lessons: tcc.lessons, headteacher, lyTeacher, js, kbys, tzxl, yc };
+      console.log(object);
+      this.$set(this, `previews`, object);
+      this.views = 'table';
+    },
+    toReturns() {
+      this.views = 'setting';
+    },
   },
   computed: {
     mainTitle() {

+ 11 - 2
src/views/plan/lesson.vue

@@ -1,7 +1,16 @@
 <template>
   <div id="lesson">
     <transition name="el-zoom-in-center">
-      <list-frame v-if="view === 'list'" :title="mainTitle" @query="batchSearch" :total="total" :filter="filterFields" :needAdd="false" :needPag="false">
+      <list-frame
+        v-if="view === 'list'"
+        returns="/plan/index"
+        :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>
@@ -10,7 +19,7 @@
         <data-table ref="table" :fields="fields" :data="list" :opera="opera" @date="toDate"></data-table>
       </list-frame>
       <detail-frame v-else title="返回批次列表" :returns="returnList">
-        <lesson-plan :start="batch.startdate" :end="batch.enddate" :classes="classes" @save="handleSave"></lesson-plan>
+        <lesson-plan :startDate="batch.startdate" :endDate="batch.enddate" :classes="classes" @save="handleSave"></lesson-plan>
       </detail-frame>
     </transition>
   </div>

+ 7 - 80
src/views/test/detail.vue

@@ -1,93 +1,20 @@
 <template>
   <div id="detail">
-    <detail-frame :title="mainTitle" returns="/list">
-      <data-form :fields="fields" :rules="rules" @save="handleSave" :isNew="isNew">
-        <template #options="{item}">
-          <template v-if="item.model === 'gender'">
-            <el-option label="男" value="男"></el-option>
-            <el-option label="女" value="女"></el-option>
-          </template>
-        </template>
-        <template #radios="{item}">
-          <template v-if="item.model === 'genders'">
-            <el-radio label="男">男</el-radio>
-            <el-radio label="女">女</el-radio>
-          </template>
-        </template>
-        <template #checkboxs="{item}">
-          <template v-if="item.model === 'genderss'">
-            <el-checkbox label="女">女</el-checkbox>
-            <el-checkbox label="男">男</el-checkbox>
-          </template>
-        </template>
-      </data-form>
-    </detail-frame>
+    <time-table></time-table>
   </div>
 </template>
 
 <script>
-import detailFrame from '@frame/layout/admin/detail-frame';
-import dataForm from '@frame/components/form';
+import timeTable from '@frame/parts/time-table';
 export default {
-  metaInfo: { title: '测试详情页' },
+  metaInfo: { title: '' },
   name: 'detail',
   props: {},
-  components: {
-    detailFrame,
-    dataForm,
-  },
-  data: () => ({
-    fields: [
-      { label: '姓名', required: true, model: 'name' },
-      { label: '性别', required: true, model: 'gender', type: `select` },
-      { label: '性别2', model: 'genders', type: `radio` },
-      { label: '性别3', model: 'genderss', type: `checkbox` },
-      { label: '生日', required: true, model: 'birthday', type: 'date' },
-      { label: '地址', required: true, model: 'address' },
-      { label: '电话', required: true, model: 'tel', options: { maxlength: 11, minlength: 11 } },
-      { label: '紧急联系人', required: true, model: 'urgentname', type: 'textarea' },
-      { label: '紧急联系人电话', required: true, model: 'urgenttel', options: { maxlength: 11, minlength: 11 } },
-      { label: '个人简介', model: 'content', type: 'editor' },
-    ],
-    rules: {
-      // name: [{ required: true, message: '请输入姓名' }],
-      // sex: [{ required: true, message: '请选择性别' }],
-      // birthday: [{ required: true, message: '请填写生日' }],
-      // address: [{ required: true, message: '请输入地址' }],
-      // tel: [
-      //   { required: true, message: '请输入电话' },
-      //   { min: 11, max: 11, message: '请输入11位电话号码', trigger: 'blur' },
-      // ],
-      // aid: [{ required: true, message: '请输入紧急联系人' }],
-      // aid_tel: [
-      //   { required: true, message: '请输入紧急联系人电话' },
-      //   { min: 11, max: 11, message: '请输入11位电话号码', trigger: 'blur' },
-      // ],
-    },
-  }),
+  components: { timeTable },
+  data: () => ({}),
   created() {},
-  computed: {
-    isNew() {
-      return this.$route.query.id ? false : true;
-    },
-    mainTitle() {
-      let meta = this.$route.meta;
-      let main = meta.title || '';
-      let sub = meta.sub || '';
-      return `${main}${sub}`;
-    },
-    keyWord() {
-      let meta = this.$route.meta;
-      let main = meta.title || '';
-      return main;
-    },
-  },
-  methods: {
-    async handleSave({ isNew, data }) {
-      console.log(isNew);
-      console.log(data);
-    },
-  },
+  computed: {},
+  methods: {},
 };
 </script>
 

+ 33 - 32
src/views/timeTable/index.vue

@@ -151,36 +151,37 @@ export default {
 </script>
 
 <style lang="less" scoped>
-.top .title {
-  text-align: center;
-  font-size: 30px;
-}
-.top .date {
-  text-align: center;
-  font-size: 25px;
-  color: #ff0000;
-  padding: 10px 0;
-}
-.th {
-  width: 120px !important;
-  height: 40px !important;
-}
-.th p {
-  color: #ff0000;
-}
-.th .beizhu {
-  color: #000;
-}
-.table tr td {
-  text-align: center;
-  padding: 15px 5px;
-  font-size: 15px;
-  color: #000;
-}
-.teacherName {
-  color: #ff0000;
-}
-.fourth td:nth-child(8n) p {
-  display: none;
-}
+@import '~@frame/style/timeTable.less';
+// .top .title {
+//   text-align: center;
+//   font-size: 30px;
+// }
+// .top .date {
+//   text-align: center;
+//   font-size: 25px;
+//   color: #ff0000;
+//   padding: 10px 0;
+// }
+// .th {
+//   width: 120px !important;
+//   height: 40px !important;
+// }
+// .th p {
+//   color: #ff0000;
+// }
+// .th .beizhu {
+//   color: #000;
+// }
+// .table tr td {
+//   text-align: center;
+//   padding: 15px 5px;
+//   font-size: 15px;
+//   color: #000;
+// }
+// .teacherName {
+//   color: #ff0000;
+// }
+// .fourth td:nth-child(8n) p {
+//   display: none;
+// }
 </style>