|
@@ -29,7 +29,7 @@
|
|
|
</el-col>
|
|
|
<el-col :span="16" :style="`width:${widths}px`">
|
|
|
<el-card ref="card">
|
|
|
- <calendar @draft="selectDate" @eventClick="eventClick" :events="events"></calendar>
|
|
|
+ <calendar :selfBtn="selfBtn" @draft="selectDate" @eventClick="eventClick" :events="events"></calendar>
|
|
|
</el-card>
|
|
|
</el-col>
|
|
|
</el-row>
|
|
@@ -68,6 +68,9 @@
|
|
|
</el-form-item>
|
|
|
</el-form>
|
|
|
</el-drawer>
|
|
|
+ <el-dialog title="设置假期" :visible.sync="dialog">
|
|
|
+ <vacation-form :list="vacation" @update="setVacation"></vacation-form>
|
|
|
+ </el-dialog>
|
|
|
</div>
|
|
|
</template>
|
|
|
|
|
@@ -75,173 +78,105 @@
|
|
|
import detailFrame from '@frame/layout/admin/detail-frame';
|
|
|
import calendar from '@frame/components/calendar';
|
|
|
import dataTable from '@frame/components/data-table';
|
|
|
+import vacationForm from './detail/vacation';
|
|
|
import _ from 'lodash';
|
|
|
-import { mapActions, mapState, createNamespacedHelpers } from 'vuex';
|
|
|
+import { createNamespacedHelpers } from 'vuex';
|
|
|
+const { mapActions } = createNamespacedHelpers('plan');
|
|
|
+
|
|
|
export default {
|
|
|
metaInfo: { title: '计划详情' },
|
|
|
name: 'detail',
|
|
|
props: {},
|
|
|
- components: { detailFrame, calendar, dataTable },
|
|
|
- data: () => ({
|
|
|
- info: {
|
|
|
- year: '',
|
|
|
- termnum: {
|
|
|
- batchnum: [],
|
|
|
+ components: { detailFrame, calendar, dataTable, vacationForm },
|
|
|
+ data() {
|
|
|
+ return {
|
|
|
+ info: {
|
|
|
+ year: '',
|
|
|
+ termnum: {
|
|
|
+ batchnum: [],
|
|
|
+ },
|
|
|
},
|
|
|
- },
|
|
|
|
|
|
- form: { color: '#409EFF' },
|
|
|
- rules: {
|
|
|
- title: [{ required: true, message: '请输入标题' }],
|
|
|
- },
|
|
|
- formRules: {
|
|
|
- start: [{ required: true, message: '请选择开始时间', trigger: 'change' }],
|
|
|
- end: [{ required: true, message: '请选择结束时间', trigger: 'change' }],
|
|
|
- term: [{ required: true, message: '请输入期数' }],
|
|
|
- number: [{ required: true, message: '请输入每班人数' }],
|
|
|
- type: [{ required: true, message: '请选择班级类型' }],
|
|
|
- },
|
|
|
- drawer: false,
|
|
|
- events: [],
|
|
|
- predefineColors: ['#409EFF'],
|
|
|
- collapse: '',
|
|
|
- fields: [
|
|
|
- { label: '开始时间', prop: 'start' },
|
|
|
- { label: '结束时间', prop: 'end' },
|
|
|
- { label: '期数', prop: 'term' },
|
|
|
- { label: '班级类型', prop: 'type', format: item => (item === '0' ? '正常班级' : '特殊班级') },
|
|
|
- ],
|
|
|
- opera: [
|
|
|
- {
|
|
|
- label: '编辑',
|
|
|
- icon: 'el-icon-edit',
|
|
|
- method: 'edit',
|
|
|
+ form: { color: '#409EFF' },
|
|
|
+ rules: {
|
|
|
+ title: [{ required: true, message: '请输入标题' }],
|
|
|
},
|
|
|
- {
|
|
|
- label: '删除',
|
|
|
- icon: 'el-icon-delete',
|
|
|
- method: 'delete',
|
|
|
- confirm: true,
|
|
|
+ formRules: {
|
|
|
+ start: [{ required: true, message: '请选择开始时间', trigger: 'change' }],
|
|
|
+ end: [{ required: true, message: '请选择结束时间', trigger: 'change' }],
|
|
|
+ term: [{ required: true, message: '请输入期数' }],
|
|
|
+ number: [{ required: true, message: '请输入每班人数' }],
|
|
|
+ type: [{ required: true, message: '请选择班级类型' }],
|
|
|
},
|
|
|
- ],
|
|
|
- heights: 250,
|
|
|
- axiosData: {
|
|
|
- termnum: [
|
|
|
- {
|
|
|
- term: '1',
|
|
|
- batchnum: [
|
|
|
- {
|
|
|
- start: '2020-01-01',
|
|
|
- end: '2020-01-09',
|
|
|
- type: '0',
|
|
|
- number: '56',
|
|
|
- color: '#0BEB95',
|
|
|
- batch: '1',
|
|
|
- class: '1',
|
|
|
- title: '第1期第1批次',
|
|
|
- id: 'p1580869239498',
|
|
|
- },
|
|
|
- {
|
|
|
- start: '2020-01-01',
|
|
|
- end: '2020-01-09',
|
|
|
- type: '1',
|
|
|
- number: '56',
|
|
|
- color: '#409EFF',
|
|
|
- name: '第一期特殊1班',
|
|
|
- title: '第一期特殊1班',
|
|
|
- id: 'p1580869422724',
|
|
|
- },
|
|
|
- ],
|
|
|
- classnum: 2,
|
|
|
- },
|
|
|
+ drawer: false,
|
|
|
+ dialog: false,
|
|
|
+ events: [{ start: '2020-01-02', end: '2020-01-04', title: '1', color: 'red', editable: false }],
|
|
|
+ predefineColors: ['#409EFF'],
|
|
|
+ collapse: '',
|
|
|
+ fields: [
|
|
|
+ { label: '开始时间', prop: 'start' },
|
|
|
+ { label: '结束时间', prop: 'end' },
|
|
|
+ { label: '期数', prop: 'term' },
|
|
|
+ { label: '班级类型', prop: 'type', format: item => (item === '0' ? '正常班级' : '特殊班级') },
|
|
|
+ ],
|
|
|
+ opera: [
|
|
|
{
|
|
|
- term: '2',
|
|
|
- batchnum: [
|
|
|
- {
|
|
|
- start: '2020-01-01',
|
|
|
- end: '2020-01-09',
|
|
|
- type: '0',
|
|
|
- number: '56',
|
|
|
- color: '#0BEB95',
|
|
|
- batch: '1',
|
|
|
- class: '1',
|
|
|
- title: '第2期第1批次',
|
|
|
- id: 'p1580869239490',
|
|
|
- },
|
|
|
- {
|
|
|
- start: '2020-01-01',
|
|
|
- end: '2020-01-09',
|
|
|
- type: '1',
|
|
|
- number: '56',
|
|
|
- color: '#409EFF',
|
|
|
- name: '第二期特殊1班',
|
|
|
- title: '第二期特殊1班',
|
|
|
- id: 'p1580869422726',
|
|
|
- },
|
|
|
- {
|
|
|
- start: '2020-01-01',
|
|
|
- end: '2020-01-09',
|
|
|
- type: '1',
|
|
|
- number: '56',
|
|
|
- color: '#409EFF',
|
|
|
- name: '第二期特殊2班',
|
|
|
- title: '第二期特殊2班',
|
|
|
- id: 'p1580869422725',
|
|
|
- },
|
|
|
- ],
|
|
|
- classnum: 3,
|
|
|
+ label: '编辑',
|
|
|
+ icon: 'el-icon-edit',
|
|
|
+ method: 'edit',
|
|
|
},
|
|
|
{
|
|
|
- term: '3',
|
|
|
- batchnum: [
|
|
|
- {
|
|
|
- start: '2020-01-01',
|
|
|
- end: '2020-01-09',
|
|
|
- type: '0',
|
|
|
- number: '56',
|
|
|
- color: '#ff4444',
|
|
|
- batch: '1',
|
|
|
- class: '1',
|
|
|
- title: '第3期第1批次',
|
|
|
- id: 'p1580869239499',
|
|
|
- },
|
|
|
- ],
|
|
|
- classnum: 1,
|
|
|
+ label: '删除',
|
|
|
+ icon: 'el-icon-delete',
|
|
|
+ method: 'delete',
|
|
|
+ confirm: true,
|
|
|
},
|
|
|
],
|
|
|
- title: 'test',
|
|
|
- year: 2020,
|
|
|
- },
|
|
|
- }),
|
|
|
+ heights: 250,
|
|
|
+ selfBtn: {
|
|
|
+ vacation: {
|
|
|
+ text: '设置假期',
|
|
|
+ //设置假期
|
|
|
+ click: () => (this.dialog = true),
|
|
|
+ position: 'left',
|
|
|
+ },
|
|
|
+ },
|
|
|
+ vacation: [{ start: '2020-01-02', end: '2020-01-04', title: '1', color: 'red', editable: false }],
|
|
|
+ };
|
|
|
+ },
|
|
|
created() {
|
|
|
if (this.isNew) this.$set(this.info, `year`, new Date().getFullYear());
|
|
|
},
|
|
|
mounted() {},
|
|
|
methods: {
|
|
|
- // ...mapClass(['fetch', 'create', 'update']),
|
|
|
+ ...mapActions(['fetch', 'create', 'update']),
|
|
|
//查询计划
|
|
|
async search() {
|
|
|
- // const res = await this.fetch(this.id);
|
|
|
+ const res = await this.fetch(this.id);
|
|
|
+ console.log(res);
|
|
|
// if (this.$checkRes(res)) this.$set(this, `info`, res.data);
|
|
|
// this.loading = false;
|
|
|
- let events = [];
|
|
|
- events = _.flatten(
|
|
|
- this.axiosData.termnum.map(item => {
|
|
|
- item.batchnum.map(i => {
|
|
|
- i.term = item.term;
|
|
|
- return i;
|
|
|
- });
|
|
|
- return item.batchnum;
|
|
|
- })
|
|
|
- );
|
|
|
- let { termnum, year, title } = this.axiosData;
|
|
|
- this.$set(this, `events`, events);
|
|
|
- this.$set(this, `info`, { title, year });
|
|
|
+ // let events = [];
|
|
|
+ // events = _.flatten(
|
|
|
+ // this.axiosData.termnum.map(item => {
|
|
|
+ // item.batchnum.map(i => {
|
|
|
+ // i.term = item.term;
|
|
|
+ // return i;
|
|
|
+ // });
|
|
|
+ // return item.batchnum;
|
|
|
+ // })
|
|
|
+ // );
|
|
|
+ // let { termnum, year, title } = this.axiosData;
|
|
|
+ // this.$set(this, `events`, events);
|
|
|
+ // this.$set(this, `info`, { title, year });
|
|
|
},
|
|
|
//拖拽选择事件
|
|
|
selectDate(object) {
|
|
|
- this.$set(this.form, `start`, JSON.parse(JSON.stringify(object.startStr)));
|
|
|
- this.$set(this.form, `end`, JSON.parse(JSON.stringify(object.endStr)));
|
|
|
+ let start = JSON.parse(JSON.stringify(object.startStr));
|
|
|
+ let end = JSON.parse(JSON.stringify(object.endStr));
|
|
|
+ let res = this.inVacation(start, end);
|
|
|
+ this.$set(this.form, `start`, start);
|
|
|
+ this.$set(this.form, `end`, end);
|
|
|
this.drawer = true;
|
|
|
},
|
|
|
//日历事件点击事件
|
|
@@ -327,6 +262,7 @@ export default {
|
|
|
this.drawer = false;
|
|
|
}
|
|
|
if (_.findIndex(this.predefineColors, item => item == data.color) < 0) this.predefineColors.push(data.color);
|
|
|
+ this.toClose();
|
|
|
},
|
|
|
//关闭抽屉函数
|
|
|
toClose() {
|
|
@@ -337,6 +273,58 @@ export default {
|
|
|
let heights = this.$refs.card.$el.clientHeight * 0.63;
|
|
|
this.$set(this, `heights`, heights);
|
|
|
},
|
|
|
+ //更新假期列表
|
|
|
+ setVacation(data) {
|
|
|
+ console.log(data);
|
|
|
+ this.$set(this, `vacation`, data);
|
|
|
+ let arr = data.map(i => {
|
|
|
+ i.color = `red`;
|
|
|
+ i.editable = false;
|
|
|
+ return i;
|
|
|
+ });
|
|
|
+ this.$set(this, `events`, this.events.concat(arr));
|
|
|
+ },
|
|
|
+ //判断是否在假期中
|
|
|
+ inVacation(start, end) {
|
|
|
+ let startTime = new Date(start).getTime();
|
|
|
+ let endTime = new Date(end).getTime();
|
|
|
+ let res = true;
|
|
|
+ for (const vac of this.vacation) {
|
|
|
+ let vacS = new Date(vac.start).getTime();
|
|
|
+ let vacE = new Date(vac.end).getTime();
|
|
|
+ console.log(`start:${new Date(start)}`);
|
|
|
+ console.log(`end:${new Date(end)}`);
|
|
|
+ console.log(`vstart:${new Date(vac.start)}`);
|
|
|
+ console.log(`vend:${new Date(vac.end)}`);
|
|
|
+ //case1 事件开始时间<假期开始时间 => 事件结束时间 <= 假期开始时间 ? 事件没碰到假期,没事 : 事件碰到假期了.不行了
|
|
|
+ //case2 事件开始时间>=假期开始时间 => 事件开始时间 <= 假期结束时间 ? GG return false: return true;
|
|
|
+ //case2
|
|
|
+ console.log(`startTime:${startTime}`);
|
|
|
+ console.log(`vacS:${vacS}`);
|
|
|
+ console.log(startTime >= vacS);
|
|
|
+ if (startTime >= vacS) {
|
|
|
+ console.log(`in if`);
|
|
|
+ console.log(`startTime:${startTime}`);
|
|
|
+ console.log(`vacE:${vacE}`);
|
|
|
+ console.log(startTime < vacE);
|
|
|
+ if (startTime < vacE) {
|
|
|
+ res = false;
|
|
|
+ break;
|
|
|
+ }
|
|
|
+ } else {
|
|
|
+ //case1
|
|
|
+ console.log(`in else`);
|
|
|
+ console.log(`endTime:${endTime}`);
|
|
|
+ console.log(`vacS:${vacS}`);
|
|
|
+ if (endTime < vacS) {
|
|
|
+ res = false;
|
|
|
+ break;
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+ console.log(res);
|
|
|
+ //比较选择的时间在不在假期中,然后返回结果
|
|
|
+ },
|
|
|
},
|
|
|
watch: {
|
|
|
isNew: {
|
|
@@ -356,7 +344,7 @@ export default {
|
|
|
return this.$route.query.id;
|
|
|
},
|
|
|
isNew() {
|
|
|
- return this.$route.query.id ? true : false; //false : true;
|
|
|
+ return this.$route.query.id ? false : true;
|
|
|
},
|
|
|
mainTitle() {
|
|
|
let meta = this.$route.meta;
|