Prechádzať zdrojové kódy

Merge branch 'master' of http://git.cc-lotus.info/new_train/train-center

lrf 9 mesiacov pred
rodič
commit
9005e23fe6

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

@@ -89,6 +89,7 @@ export default {
         label: '删除',
         icon: 'el-icon-delete',
         method: 'delete',
+        confirm: true,
       },
     ],
     form: {},

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

@@ -30,6 +30,7 @@ export default {
         label: '删除',
         icon: 'el-icon-delete',
         method: 'delete',
+        confirm: true,
       },
       {
         label: '禁用',

+ 1 - 0
src/views/centerTeaching/afterClass.vue

@@ -60,6 +60,7 @@ export default {
           label: '删除',
           icon: 'el-icon-delete',
           method: 'delete',
+          confirm: true,
         },
       ],
       fields: [

+ 1 - 0
src/views/centerTeaching/index.vue

@@ -53,6 +53,7 @@ export default {
           label: '删除',
           icon: 'el-icon-delete',
           method: 'delete',
+          confirm: true,
         },
       ],
       fields: [

+ 1 - 0
src/views/certificaate/index.vue

@@ -59,6 +59,7 @@ export default {
         label: '删除',
         icon: 'el-icon-delete',
         method: 'delete',
+        confirm: true,
       },
     ],
     fields: [

+ 1 - 0
src/views/certificaate/look.vue

@@ -92,6 +92,7 @@ export default {
         label: '删除',
         icon: 'el-icon-delete',
         method: 'delete',
+        confirm: true,
       },
     ],
     fields: [

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

@@ -28,6 +28,7 @@ export default {
           label: '删除',
           icon: 'el-icon-delete',
           method: 'delete',
+          confirm: true,
         },
       ],
       fields: [

+ 105 - 93
src/views/new-plan/arrange/arrange/new-table.vue

@@ -18,10 +18,15 @@
         <!-- 根据批次循环行,不再根据班级:  -->
         <tr v-for="(batch, bi) in getMonthBatch(month)" :key="`${month}-${batch}`">
           <template v-for="(item, ci) in makeCalendar(month)">
-            <td v-if="cellDisplay(item, batch, month, bi)" :colspan="cellColSpan(item, batch, month, bi)"
-              :rowspan="cellRowSpan(item, batch, month, bi)" @click="cellClick(item, batch, month, bi)"
-              :key="`${month}-${ci}`" :style="setStyle(item, batch, month, bi)"
-              :title="renderCell(item, batch, month, bi)">
+            <td
+              v-if="cellDisplay(item, batch, month, bi)"
+              :colspan="cellColSpan(item, batch, month, bi)"
+              :rowspan="cellRowSpan(item, batch, month, bi)"
+              @click="cellClick(item, batch, month, bi)"
+              :key="`${month}-${ci}`"
+              :style="setStyle(item, batch, month, bi)"
+              :title="renderCell(item, batch, month, bi)"
+            >
               {{ renderCell(item, batch, month, bi) }}
             </td>
           </template>
@@ -30,7 +35,6 @@
             <td :rowspan="getRowNumber(month)">{{ getRemark(month, 'number') }}</td>
           </template>
         </tr>
-
       </template>
     </table>
   </div>
@@ -41,7 +45,7 @@
 /**
  * 表格与渲染的处理思路:
  * 是不是跨月:
- *     不跨月: 
+ *     不跨月:
  *        再查看是不是第一天:
  *            是:显示内容,计算合并值: 合并值 = 结束时间 - 开始时间
  *            不是:不显示,等着被合并
@@ -56,7 +60,7 @@
  *                不是:不显示,等着被合并
  */
 import { mapState, createNamespacedHelpers } from 'vuex';
-import { format, coreResult, getDays, getMonthLastDay, getMonthFirstDay, outPutCore, toRegularDate, inDateRange, checkIsSame } from './util'
+import { format, coreResult, getDays, getMonthLastDay, getMonthFirstDay, outPutCore, toRegularDate, inDateRange, checkIsSame } from './util';
 const _ = require('lodash');
 const moment = require('moment');
 export default {
@@ -65,28 +69,28 @@ export default {
     year: { type: String },
     events: { type: Array },
     vacation: { type: Array },
-    remark: { type: Array, default: () => { } },
+    remark: { type: Array, default: () => {} },
     placeList: { type: Array },
   },
   components: {},
-  data: function () {
+  data: function() {
     return {
       /**
        * 用于渲染每个月的表格行数
        * {月份: {}批次分组, 有多少批次: 该月表格的行数 }
        * 开始时间,结束时间 其中一个和该月有交集的,就列入本月中
-       * { 1: 
+       * { 1:
        *      {
        *         1: [
        *              {批次数据带期数}
        *            ],
-       *         2: [],  
-       * 
+       *         2: [],
+       *
        *      }
        * }
        */
       batchList: {},
-      viewKey: undefined
+      viewKey: undefined,
     };
   },
   computed: {
@@ -103,7 +107,7 @@ export default {
     // console.log(this.vacation)
     // console.log('remark')
     // console.log(this.remark)
-    console.log(this.batchList)
+    console.log(this.batchList);
   },
   methods: {
     rerender() {
@@ -111,22 +115,22 @@ export default {
     },
     // 单元格内容
     renderCell(date, batch, month, lineIndex) {
-      if (!date) return ''
-      const rd = toRegularDate(this.year, date)
+      if (!date) return '';
+      const rd = toRegularDate(this.year, date);
       let result = '';
       // 1.需要查看是不是节日
       if (lineIndex === 0) {
-        const r1 = this.checkVacation(rd)
+        const r1 = this.checkVacation(rd);
         if (r1) {
-          const r = outPutCore(r1.start, r1.end, rd, month)
+          const r = outPutCore(r1.start, r1.end, rd, month);
           if (r === coreResult.SMFD) {
-            const isFirstDay = checkIsSame(r1.start, rd)
+            const isFirstDay = checkIsSame(r1.start, rd);
             if (isFirstDay) result = _.get(r1, 'title');
           } else if (r === coreResult.STMFD) {
-            const isFirstDay = checkIsSame(r1.start, rd)
+            const isFirstDay = checkIsSame(r1.start, rd);
             if (isFirstDay) result = _.get(r1, 'title');
           } else if (r === coreResult.ENDMFD) {
-            const firstDay = moment(`${moment(r1.end).year()}-${moment(r1.end).month() + 1}-01`).format(format)
+            const firstDay = moment(`${moment(r1.end).year()}-${moment(r1.end).month() + 1}-01`).format(format);
             if (moment(rd).isSame(firstDay)) result = _.get(r1, 'title');
           }
           return result;
@@ -134,12 +138,12 @@ export default {
       }
 
       // 2.查看有没有安排
-      const v2s = _.get(this.batchList, `${month}.${batch}`)
+      const v2s = _.get(this.batchList, `${month}.${batch}`);
       if (v2s) {
-        const v2 = v2s.find(f => inDateRange(f.startdate, f.enddate, rd))
+        const v2 = v2s.find(f => inDateRange(f.startdate, f.enddate, rd));
         if (v2) {
           const { term, batch, class: cla = [], startdate, enddate } = v2;
-          const r = outPutCore(startdate, enddate, rd, month)
+          const r = outPutCore(startdate, enddate, rd, month);
           if (r === coreResult.SMFD) {
             result = `第${term}期-第${batch}批-共${cla.length}班`;
           } else if (r === coreResult.STMFD) {
@@ -149,61 +153,62 @@ export default {
           }
         }
       }
-      return result
+      return result;
     },
     // 单元格列合并
     cellColSpan(date, batch, month) {
       // 没有日期的为站位格子
-      if (!date) return 1
-      const rd = toRegularDate(this.year, date)
+      if (!date) return 1;
+      const rd = toRegularDate(this.year, date);
       // 先判断是不是假期, 假期的第一个单元格是合并,其余的全是0
-      const r1 = this.checkVacation(rd)
+      const r1 = this.checkVacation(rd);
       if (r1) {
-        const r = outPutCore(r1.start, r1.end, rd, month)
+        const r = outPutCore(r1.start, r1.end, rd, month);
         let colspan = 0;
         // 列合并,不是第一列不要管
         if (r === coreResult.SMFD) {
           // 同月第一天,需要知道后面几天,然后合并
-          const diff = getDays(r1.start, r1.end)
+          const diff = getDays(r1.start, r1.end);
           if (diff <= 0) colspan = 1;
           colspan = diff + 1;
         } else if (r === coreResult.STMFD) {
           // 开始时间同月第一天: 需要计算出开始时间到月末差几天
-          const lastDay = getMonthLastDay(r1.start)
-          const diff = getDays(r1.start, lastDay)
+          const lastDay = getMonthLastDay(r1.start);
+          const diff = getDays(r1.start, lastDay);
           if (diff <= 0) colspan = 1;
           colspan = diff + 1;
         } else if (r === coreResult.ENDMFD) {
-          const firstDay = getMonthFirstDay(r1.end)
-          const diff = getDays(firstDay, r1.end)
+          const firstDay = getMonthFirstDay(r1.end);
+          const diff = getDays(firstDay, r1.end);
           if (diff <= 0) colspan = 1;
           colspan = diff + 1;
         }
+        console.log(r1, date, colspan);
         return colspan;
       }
       // 查看安排
-      const v2s = _.get(this.batchList, `${month}.${batch}`)
+      const v2s = _.get(this.batchList, `${month}.${batch}`);
       if (v2s) {
         let colspan = 0;
-        const v2 = v2s.find(f => inDateRange(f.startdate, f.enddate, rd))
+        const v2 = v2s.find(f => inDateRange(f.startdate, f.enddate, rd));
         if (v2) {
           const { startdate, enddate } = v2;
-          const r = outPutCore(startdate, enddate, rd, month)
+          const r = outPutCore(startdate, enddate, rd, month);
           if (r === coreResult.SMFD) {
             // 直接计算多少天作为合并列数
-            const diff = getDays(startdate, enddate)
+            const diff = getDays(startdate, enddate);
             if (diff > 0) colspan = diff + 1;
-            else if (diff === 0) colspan = 1
+            else if (diff === 0) colspan = 1;
           } else if (r === coreResult.STMFD) {
-            const lastDay = getMonthLastDay(startdate)
-            const diff = getDays(startdate, lastDay)
+            const lastDay = getMonthLastDay(startdate);
+            const diff = getDays(startdate, lastDay);
             if (diff > 0) colspan = diff + 1;
-            else if (diff === 0) colspan = 1
+            else if (diff === 0) colspan = 1;
           } else if (r === coreResult.ENDMFD) {
-            const firstDay = getMonthFirstDay(enddate)
-            const diff = getDays(firstDay, enddate)
+            const firstDay = getMonthFirstDay(enddate);
+            const diff = getDays(firstDay, enddate);
             if (diff > 0) colspan = diff + 1;
-            else if (diff === 0) colspan = 1
+            else if (diff === 0) colspan = 1;
           }
           return colspan;
         }
@@ -213,21 +218,21 @@ export default {
     // 单元格行合并
     cellRowSpan(date, batch, month, lineIndex) {
       // 没有日期的为站位格子
-      if (!date) return 1
-      const rd = toRegularDate(this.year, date)
+      if (!date) return 1;
+      const rd = toRegularDate(this.year, date);
       // 先判断是不是假期
-      const r1 = this.checkVacation(rd)
+      const r1 = this.checkVacation(rd);
       if (r1) {
         let rowspan = 1;
         // 行合并,不是第一行不要管
         if (lineIndex !== 0) rowspan = 0;
         else {
           // 同月第一天: 获取该月批次列表的长度+2即为总行数
-          const v2s = _.get(this.batchList, `${month}`, {})
-          const keys = Object.keys(v2s)
-          rowspan = keys.length + 1
+          const v2s = _.get(this.batchList, `${month}`, {});
+          const keys = Object.keys(v2s);
+          rowspan = keys.length + 1;
         }
-        return rowspan
+        return rowspan;
       }
       // 一个批次一行,不需要处理安排的行
 
@@ -235,28 +240,27 @@ export default {
     },
     // 单元格点击事件
     cellClick(date, batch, month, lineIndex) {
-      if (!date) return ''
-      const rd = toRegularDate(this.year, date)
-      const v2s = _.get(this.batchList, `${month}.${batch}`)
+      if (!date) return '';
+      const rd = toRegularDate(this.year, date);
+      const v2s = _.get(this.batchList, `${month}.${batch}`);
       if (v2s) {
-        const v2 = v2s.find(f => inDateRange(f.startdate, f.enddate, rd))
-        if (v2) this.$emit('cellClick', v2)
-        else this.$emit('cellClick', rd)
-      } else this.$emit('cellClick', rd)
+        const v2 = v2s.find(f => inDateRange(f.startdate, f.enddate, rd));
+        if (v2) this.$emit('cellClick', v2);
+        else this.$emit('cellClick', rd);
+      } else this.$emit('cellClick', rd);
     },
 
-
     /**
      * 整理一维的批次列表,将term加进去并按月份整理成object
      */
     setBatchList() {
       let batchList = this.events.map(i => {
-        const { term, batchnum } = i
+        const { term, batchnum } = i;
         let bl = _.cloneDeep(batchnum);
-        bl = bl.map(i => ({ ...i, term }))
+        bl = bl.map(i => ({ ...i, term }));
         return bl;
-      })
-      batchList = _.flattenDeep(batchList)
+      });
+      batchList = _.flattenDeep(batchList);
       /**
        * 1.月为key; value为在该月显示的安排
        * 2.value: 批次为key, v2为按月分完后,同一批次下的所有数据
@@ -264,30 +268,30 @@ export default {
       const monthObject = {};
       // 为每个月都创建下
       for (let i = 1; i <= 12; i++) {
-        monthObject[i] = {}
+        monthObject[i] = {};
       }
       for (const i of batchList) {
         const { startdate, enddate, batch } = i;
         // 必须2个时间和批次名都要有
         if (!startdate || !enddate || !batch) continue;
         // 开始时间所在月份,和结束时间所在月份
-        const sm = moment(startdate).month() + 1
-        const em = moment(enddate).month() + 1
+        const sm = moment(startdate).month() + 1;
+        const em = moment(enddate).month() + 1;
         // 如果是同一个月那就放1个,如果不同月,就各方各的
         if (sm === em) {
-          const v2 = _.get(monthObject, `${sm}.${batch}`, [])
+          const v2 = _.get(monthObject, `${sm}.${batch}`, []);
           v2.push(i);
           monthObject[sm][batch] = v2;
         } else {
-          const sv2 = _.get(monthObject, `${sm}.${batch}`, [])
-          sv2.push(i)
+          const sv2 = _.get(monthObject, `${sm}.${batch}`, []);
+          sv2.push(i);
           monthObject[sm][batch] = sv2;
-          const ev2 = _.get(monthObject, `${em}.${batch}`, [])
-          ev2.push(i)
+          const ev2 = _.get(monthObject, `${em}.${batch}`, []);
+          ev2.push(i);
           monthObject[em][batch] = ev2;
         }
       }
-      this.$set(this, 'batchList', monthObject)
+      this.$set(this, 'batchList', monthObject);
     },
 
     // #region 时间处理函数
@@ -316,23 +320,29 @@ export default {
     // 单元格样式
     setStyle(date, batch, month, bi) {
       let style = { cursor: 'pointer' };
-      const rd = toRegularDate(this.year, date)
+      const rd = toRegularDate(this.year, date);
       // 先判断是不是假期
-      const r1 = this.checkVacation(rd)
+      const r1 = this.checkVacation(rd);
       if (r1) {
         style = { cursor: 'not-allowed' };
         style['pointer-events'] = 'none';
-        if (date !== '') style['background'] = 'red';
+        if (date !== '') {
+          style['background'] = 'red';
+          style.color = '#fff';
+        }
       }
 
-      const v2s = _.get(this.batchList, `${month}.${batch}`)
+      const v2s = _.get(this.batchList, `${month}.${batch}`);
       if (v2s) {
-        const v2 = v2s.find(f => inDateRange(f.startdate, f.enddate, rd))
+        const v2 = v2s.find(f => inDateRange(f.startdate, f.enddate, rd));
         if (v2) {
-          const place = _.get(v2, 'place')
+          const place = _.get(v2, 'place');
           if (place) {
-            const p = this.placeList.find(f => f._id === place)
-            if (p) style.background = _.get(p, 'color', '#ffffff')
+            const p = this.placeList.find(f => f._id === place);
+            if (p) {
+              style.background = _.get(p, 'color', '#ffffff');
+              style.color = '#fff';
+            }
           }
         }
       }
@@ -341,18 +351,18 @@ export default {
     },
     // 单元格是否显示(需要被合并的不显示)
     cellDisplay(date, batch, month, bi) {
-      const colspan = this.cellColSpan(date, batch, month, bi)
-      const rowspan = this.cellRowSpan(date, batch, month, bi)
+      const colspan = this.cellColSpan(date, batch, month, bi);
+      const rowspan = this.cellRowSpan(date, batch, month, bi);
       if (colspan > 0 && rowspan > 0) return true;
     },
 
     // 获取本月批次列表
     getMonthBatch(month) {
       const v1 = this.batchList[month];
-      const keys = Object.keys(v1)
+      const keys = Object.keys(v1);
       // 多留出一行
-      keys.push({})
-      return keys
+      keys.push({});
+      return keys;
     },
     // 获取一个月的天数列表
     getDayList(month, days) {
@@ -368,8 +378,8 @@ export default {
     },
     // 获取该月有几行
     getRowNumber(month) {
-      const v1 = this.batchList[month]
-      const keys = Object.keys(v1)
+      const v1 = this.batchList[month];
+      const keys = Object.keys(v1);
       // 因为多留出一行,所以+2,否则加1
       return keys.length + 2;
     },
@@ -402,8 +412,6 @@ export default {
       return _.inRange(month, 1, 13);
     },
     // #endregion
-
-
   },
   filters: {
     getWord(month) {
@@ -417,8 +425,8 @@ export default {
       deep: true,
       handler(oval, nval) {
         this.setBatchList();
-      }
-    }
+      },
+    },
   },
   metaInfo() {
     return { title: this.$route.meta.title };
@@ -438,12 +446,16 @@ tr {
 }
 
 table {
+  width: 100%;
   table-layout: fixed;
-  zoom:0.8;
+  zoom: 0.8;
   td {
     text-align: center;
     width: 30px;
     height: 10px;
+    text-overflow: ellipsis;
+    overflow: hidden;
+    white-space: nowrap;
   }
 }
 </style>

+ 36 - 1
src/views/new-plan/arrange/director-arrange.vue

@@ -12,7 +12,11 @@
       <el-row>
         <el-table :data="list" border :span-method="objectSpanMethod" @row-click="rowBtn">
           <el-table-column label="期数" prop="term" align="center"> </el-table-column>
-          <el-table-column label="场地设置" prop="address" align="center"> </el-table-column>
+          <el-table-column label="场地设置" prop="place" align="center">
+            <template v-slot="{ row }">
+              {{ getPlace(row) }}
+            </template>
+          </el-table-column>
           <el-table-column label="班级名称" prop="name" align="center"> </el-table-column>
           <el-table-column label="时间" prop="date" align="center">
             <template slot-scope="scope"> {{ ptc(scope.row.startdate) }}-{{ ptc(scope.row.enddate) }} </template>
@@ -52,6 +56,19 @@
         <el-button type="primary" @click="onSubmit">保 存</el-button>
       </el-col>
     </el-drawer>
+    <el-drawer :visible.sync="place" direction="rtl" title="选择培训场地" @close="toClose">
+      <el-form :model="form">
+        <el-form-item label="培训场地" prop="place" label-width="120px">
+          <el-select v-model="form.place" placeholder="请选择培训场地">
+            <el-option v-for="i in placeList" :key="i._id" :label="i.name" :value="i._id"></el-option>
+          </el-select>
+        </el-form-item>
+      </el-form>
+      <el-col :span="24" style="text-align:center">
+        <el-button @click="toClose">取 消</el-button>
+        <el-button type="primary" @click="onSubmit">保 存</el-button>
+      </el-col>
+    </el-drawer>
   </div>
 </template>
 
@@ -66,6 +83,7 @@ const { mapActions: trainplan } = createNamespacedHelpers('trainplan');
 const { mapActions: classes } = createNamespacedHelpers('classes');
 const { mapActions: mapDept } = createNamespacedHelpers('dept');
 const { mapActions: director } = createNamespacedHelpers('director');
+const { mapActions: location } = createNamespacedHelpers('location');
 var moment = require('moment');
 export default {
   name: 'director-arrange',
@@ -91,6 +109,8 @@ export default {
       rightHeaderList: [],
       // 督导值班
       reteacherData: {},
+      place: false,
+      placeList: [],
     };
   },
   async created() {
@@ -102,6 +122,7 @@ export default {
     ...mapDept({ getDept: 'query', getDeptFetch: 'fetch' }),
     ...mapActions(['divide', 'findTeacher', 'fetch']),
     ...classes(['query', 'upHeadTea']),
+    ...location({ getLocation: 'query' }),
     ...trainplan({ trainplanFetch: 'fetch', trainplanUpdate: 'update', updateclass: 'updateclass', updatereteacher: 'updatereteacher' }),
     // 查询部门加班主任
     async getOtherList() {
@@ -109,6 +130,8 @@ export default {
       if (this.$checkRes(res)) this.$set(this, `rightHeader`, res.data);
       res = await this.getDirList();
       if (this.$checkRes(res)) this.$set(this, `dirList`, res.data);
+      res = await this.getLocation({ type: '4' });
+      if (this.$checkRes(res)) this.$set(this, `placeList`, res.data);
     },
     async search() {
       let planid = _.get(this.defaultOption, 'planid');
@@ -150,6 +173,13 @@ export default {
       let data = dir.find(i => i.department == id);
       if (data) return data.name;
     },
+    // 转化场地名称
+    getPlace(row) {
+      if (row.place) {
+        let data = this.placeList.find(i => i._id == row.place);
+        if (data) return data.name;
+      }
+    },
     // 计算班级数
     classNum(month) {
       month = moment(month).month() + 1;
@@ -259,6 +289,9 @@ export default {
           termid: row.termid,
         };
         this.$set(this, `reteacherData`, reteacherData);
+      } else if (prop === 'place') {
+        this.$set(this, `form`, row);
+        this.place = true;
       } else {
         row.deptid = prop;
         this.$set(this, `form`, row);
@@ -278,12 +311,14 @@ export default {
       if (res.errcode === 0) {
         this.form = {};
         this.drawer = false;
+        this.place = false;
         this.search();
       }
     },
     //关闭抽屉函数
     toClose() {
       this.form = {};
+      this.place = false;
       this.drawer = false;
     },
   },

+ 40 - 27
src/views/new-plan/arrange/parts/event.vue

@@ -1,34 +1,46 @@
 <template>
-  <div id="event" v-loading="loading" element-loading-text="加载中,请稍后..." element-loading-spinner="el-icon-loading"
-    element-loading-background="rgba(0, 0, 0, 0.8)">
-    <el-form :model="form" ref="form" :rules="formRules" label-width="80px" size="small" @submit.native.prevent
-      style="padding: 15px;">
+  <div
+    id="event"
+    v-loading="loading"
+    element-loading-text="加载中,请稍后..."
+    element-loading-spinner="el-icon-loading"
+    element-loading-background="rgba(0, 0, 0, 0.8)"
+  >
+    <el-form :model="form" ref="form" :rules="formRules" label-width="80px" size="small" @submit.native.prevent style="padding: 15px;">
       <el-form-item label="开始时间" prop="startdate">
-        <el-date-picker :readonly="!isNew" v-model="form.startdate" type="date" format="yyyy-MM-dd"
-          value-format="yyyy-MM-dd" :disabled="true"> </el-date-picker>
+        <el-date-picker :readonly="!isNew" v-model="form.startdate" type="date" format="yyyy-MM-dd" value-format="yyyy-MM-dd" :disabled="true"> </el-date-picker>
       </el-form-item>
       <el-form-item label="结束时间" prop="enddate">
-        <el-date-picker :readonly="!isNew" v-model="form.enddate" type="date" format="yyyy-MM-dd"
-          value-format="yyyy-MM-dd" :picker-options="pickerOptions" :default-value="getEndTimeDefault()">
+        <el-date-picker
+          :readonly="!isNew"
+          v-model="form.enddate"
+          type="date"
+          format="yyyy-MM-dd"
+          value-format="yyyy-MM-dd"
+          :picker-options="pickerOptions"
+          :default-value="getEndTimeDefault()"
+        >
         </el-date-picker>
       </el-form-item>
-      <el-form-item label="期数" prop="term" required> <el-input v-model="form.term" :readonly="!isNew"></el-input>
+      <el-form-item label="期数" prop="term">
+        <el-input v-model="form.term" :readonly="!isNew" placeholder="请输入期数"></el-input>
       </el-form-item>
       <!-- <el-form-item label="班级类型(需要请求)" prop="type" required>
         <el-select v-model="form.type">
           <el-option v-for="(i, index) in classTypeList" :key="index" :label="i.name" :value="i.code"></el-option>
         </el-select>
       </el-form-item> -->
-      <el-form-item label="批次" prop="batch" required> <el-input v-model="form.batch"
-          :readonly="!isNew"></el-input></el-form-item>
-      <el-form-item label="培训场地" prop="place" required>
-        <el-select v-model="form.place" placeholder="请选择本批次的培训场地">
+      <el-form-item label="批次" prop="batch">
+        <el-input v-model="form.batch" :readonly="!isNew" placeholder="请输入批次"></el-input>
+      </el-form-item>
+      <el-form-item label="培训场地" prop="place">
+        <el-select v-model="form.place" clearable placeholder="请选择本批次的培训场地">
           <el-option v-for="i in placeList" :key="i._id" :label="i.name" :value="i._id"></el-option>
         </el-select>
       </el-form-item>
       <el-form-item label="班级">
         <el-row>
-          <el-col :span="24">
+          <el-col :span="24" style="margin: 0 0 10px 0;">
             <el-button type="primary" icon="el-icon-plus" @click="addClass()">添加班级</el-button>
           </el-col>
           <el-alert :closable="false" title="班级名称在同一期不可重复;(不论特殊班级,还是正常班级)" type="warning" show-icon center></el-alert>
@@ -46,8 +58,7 @@
             <el-table-column align="center" label="类型">
               <template v-slot="{ row }">
                 <el-select v-model="row.type">
-                  <el-option v-for="(i, index) in classTypeList" :key="index" :label="i.name"
-                    :value="i.code"></el-option>
+                  <el-option v-for="(i, index) in classTypeList" :key="index" :label="i.name" :value="i.code"></el-option>
                 </el-select>
               </template>
             </el-table-column>
@@ -88,14 +99,14 @@ const moment = require('moment');
 export default {
   name: 'event',
   props: {
-    data: { type: Object, default: () => { } }, //数据
+    data: { type: Object, default: () => {} }, //数据
     isNew: { type: Boolean, default: true }, //是不是修改
     predefineColors: { type: Array, default: () => [] }, //颜色列表
     year: { type: null, default: new Date().getFullYear() },
     vacation: { type: Array, default: () => [] },
     classTypeList: { type: Array, default: () => [] },
     loading: { type: Boolean, default: false },
-    placeList: { type: Array, default: () => [] },// 培训场地
+    placeList: { type: Array, default: () => [] }, // 培训场地
   },
   components: {},
   data() {
@@ -114,7 +125,7 @@ export default {
       },
     };
   },
-  created() { },
+  created() {},
   methods: {
     //保存表单函数
     saveForm() {
@@ -149,19 +160,21 @@ export default {
     // 设置结束时间默认时间
     getEndTimeDefault() {
       let result = new Date();
-      const startTime = _.get(this.form, 'startdate')
-      if (!startTime) result = moment().toDate()
-      result = moment(startTime).add(1, 'd').toDate()
-      return result
+      const startTime = _.get(this.form, 'startdate');
+      if (!startTime) result = moment().toDate();
+      result = moment(startTime)
+        .add(1, 'd')
+        .toDate();
+      return result;
     },
     //禁用时间
     setDisabledDate(time) {
       let thisTime = time.getTime();
-      let startTime = _.get(this.form, 'startdate')
+      let startTime = _.get(this.form, 'startdate');
       if (startTime) {
         // 开始时间之前的全都不能选
-        let sb = moment(thisTime).isSameOrBefore(startTime)
-        if(sb) return true;
+        let sb = moment(thisTime).isSameOrBefore(startTime);
+        if (sb) return true;
       }
       // 限制在今年范围内
       let start = new Date(`${this.year}-01-01`).getTime();
@@ -170,7 +183,7 @@ export default {
       else if (thisTime > end) return true;
       else {
         // 假期不能选
-        const res = this.vacation.find(f => moment(thisTime).isBetween(f.start, f.end, null, '[]'))
+        const res = this.vacation.find(f => moment(thisTime).isBetween(f.start, f.end, null, '[]'));
         return res;
       }
     },

+ 55 - 22
src/views/new-plan/arrange/plan-arrange.vue

@@ -24,16 +24,36 @@
         </el-tooltip>
       </el-col>
     </el-row>
-
-
-    <table-cal v-if="dataReady" :year="info.year" :events="events" :vacation="vacation" :remark="remark"
-      :placeList="placeList" @cellClick="eventClick"></table-cal>
-    <div style="height:800px" v-else v-loading="!dataReady" element-loading-text="加载中,请稍后..."
-      element-loading-spinner="el-icon-loading" element-loading-background="rgba(0, 0, 0, 0.8)"></div>
+    <table-cal
+      v-if="dataReady"
+      :year="info.year"
+      :events="events"
+      :vacation="vacation"
+      :remark="remark"
+      :placeList="placeList"
+      @cellClick="eventClick"
+    ></table-cal>
+    <div
+      style="height:800px"
+      v-else
+      v-loading="!dataReady"
+      element-loading-text="加载中,请稍后..."
+      element-loading-spinner="el-icon-loading"
+      element-loading-background="rgba(0, 0, 0, 0.8)"
+    ></div>
     <el-drawer :visible.sync="drawer" direction="rtl" title="安排计划" @close="toClose">
-      <event :data="form" :year="info.year" :vacation="vacation" :isNew="formIsNew" :predefineColors="template.color"
-        :classTypeList="classTypeList" :loading.sync="eventLoading" :placeList="placeList" @save="setEvent"
-        @delete="toDelete"></event>
+      <event
+        :data="form"
+        :year="info.year"
+        :vacation="vacation"
+        :isNew="formIsNew"
+        :predefineColors="template.color"
+        :classTypeList="classTypeList"
+        :loading.sync="eventLoading"
+        :placeList="placeList"
+        @save="setEvent"
+        @delete="toDelete"
+      ></event>
     </el-drawer>
     <el-dialog :visible.sync="dialog" title="模板计划" width="40%" :close-on-click-modal="false">
       <el-form>
@@ -48,8 +68,9 @@
                   <span>;每批需要 {{ template.day }} 天</span>
                 </el-col>
                 <el-col :span="24" v-for="(b, index) in template.batchnum" :key="index">
-                  第{{ b.batch }}批:<el-col style="padding-left:20px" :span="24" v-for="(c, cindex) in b.classnum"
-                    :key="cindex">{{ c.class }}班:{{ c.number }}人</el-col>
+                  第{{ b.batch }}批:<el-col style="padding-left:20px" :span="24" v-for="(c, cindex) in b.classnum" :key="cindex">
+                    {{ c.class }}班:{{ c.number }}人
+                  </el-col>
                 </el-col>
               </el-row>
             </el-form-item>
@@ -66,13 +87,25 @@
               </el-select>
             </el-form-item>
             <el-form-item label="请选择开始日期">
-              <el-date-picker :picker-options="pickerOptions" v-model="input.start" type="date" placeholder="请选择开始日期"
-                format="yyyy-MM-dd" value-format="yyyy-MM-dd">
+              <el-date-picker
+                :picker-options="pickerOptions"
+                v-model="input.start"
+                type="date"
+                placeholder="请选择开始日期"
+                format="yyyy-MM-dd"
+                value-format="yyyy-MM-dd"
+              >
               </el-date-picker>
             </el-form-item>
             <el-form-item label="请选择结束日期">
-              <el-date-picker :picker-options="pickerOptions" v-model="input.end" type="date" placeholder="请选择结束日期"
-                format="yyyy-MM-dd" value-format="yyyy-MM-dd">
+              <el-date-picker
+                :picker-options="pickerOptions"
+                v-model="input.end"
+                type="date"
+                placeholder="请选择结束日期"
+                format="yyyy-MM-dd"
+                value-format="yyyy-MM-dd"
+              >
               </el-date-picker>
             </el-form-item>
           </el-col>
@@ -111,7 +144,7 @@ export default {
     event,
     tableCal,
   },
-  data: function () {
+  data: function() {
     var that = this;
     return {
       colors: ['#E60000', '#FF7300', '#996B1F', '#FFD700', '#AFA4E0', '#74868A', '#09A343', '#E9F1F4'],
@@ -501,15 +534,15 @@ export default {
     async getOtherList() {
       let res = await this.getClassType();
       if (this.$checkRes(res)) this.$set(this, `classTypeList`, res.data);
-      res = await this.getLocation({ type: '4' })
+      res = await this.getLocation({ type: '4' });
       if (this.$checkRes(res)) {
         // 为每个地点随机生成颜色
         let list = res.data;
         if (res.data && res.data.length > 0) {
           list = list.map(i => {
-            const color = '#' + (parseInt(Math.random() * 0xffffff)).toString(16)
-            return { ...i, color }
-          })
+            const color = '#' + parseInt(Math.random() * 0xffffff).toString(16);
+            return { ...i, color };
+          });
           this.$set(this, `placeList`, list);
         }
       }
@@ -518,8 +551,8 @@ export default {
       this.$router.go(-1);
     },
     toTemplateView() {
-      this.$emit('changeView', 'template')
-    }
+      this.$emit('changeView', 'template');
+    },
   },
   filters: {
     getBatchNum: template => _.get(template.batchnum, 'length', 0),

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

@@ -23,7 +23,7 @@
       </data-form>
     </el-dialog>
     <el-drawer :title="form.name || '添加'" :visible.sync="drawer" direction="rtl" @close="handleFestClose">
-      <data-form :data="form" :fields="festFields" :rules="{}" @save="handleFestSave" :isNew="!info.id" :styles="{ padding: 0 }"> </data-form>
+      <data-form :data="form" :fields="festFields" :rules="festrules" @save="handleFestSave" :isNew="!info.id" :styles="{ padding: 0 }"> </data-form>
     </el-drawer>
   </div>
 </template>
@@ -62,6 +62,7 @@ export default {
         {
           label: '删除',
           icon: 'el-icon-delete',
+          confirm: true,
           method: 'delete',
         },
         {
@@ -82,6 +83,7 @@ export default {
           label: '删除',
           icon: 'el-icon-delete',
           method: 'delete',
+          confirm: true,
         },
       ],
       fields: [
@@ -103,6 +105,10 @@ export default {
         { label: '状态', model: 'status', type: 'radio' },
       ],
       rules: {},
+      festrules: {
+        begindate: [{ required: true, message: '请选择开始日期' }],
+        finishdate: [{ required: true, message: '请选择结束日期' }],
+      },
       list: [],
       holiday: [],
       total: 0,

+ 1 - 0
src/views/new-plan/teacher-plan.vue

@@ -41,6 +41,7 @@ export default {
         label: '删除',
         icon: 'el-icon-delete',
         method: 'delete',
+        confirm: true,
       },
     ],
     fields: [

+ 1 - 0
src/views/questionnaire/index.vue

@@ -30,6 +30,7 @@ export default {
         label: '删除',
         icon: 'el-icon-delete',
         method: 'delete',
+        confirm: true,
       },
     ],
     fields: [

+ 1 - 0
src/views/train-plan/experience.vue

@@ -63,6 +63,7 @@ export default {
         label: '删除',
         icon: 'el-icon-delete',
         method: 'delete',
+        confirm: true,
       },
     ],
     fields: [

+ 1 - 0
src/views/trainVidoe/index.vue

@@ -43,6 +43,7 @@ export default {
           label: '删除',
           icon: 'el-icon-delete',
           method: 'delete',
+          confirm: true,
         },
       ],
       fields: [

+ 1 - 0
src/views/work/look.vue

@@ -113,6 +113,7 @@ export default {
         label: '删除',
         icon: 'el-icon-delete',
         method: 'delete',
+        confirm: true,
       },
     ],
     fields: [