|
@@ -14,7 +14,7 @@
|
|
|
|
|
|
<el-collapse v-model="collapse" accordion>
|
|
<el-collapse v-model="collapse" accordion>
|
|
<el-collapse-item title="计划简表" name="1">
|
|
<el-collapse-item title="计划简表" name="1">
|
|
- <data-table :fields="fields" :data="events" :opera="opera" @edit="toEdit" @delete="toDelete" :height="heights"></data-table>
|
|
|
|
|
|
+ <data-table :fields="fields" :data="selectList" :opera="opera" @edit="toEdit" @delete="toDelete" :height="heights"></data-table>
|
|
</el-collapse-item>
|
|
</el-collapse-item>
|
|
</el-collapse>
|
|
</el-collapse>
|
|
<el-form-item>
|
|
<el-form-item>
|
|
@@ -35,38 +35,7 @@
|
|
</el-row>
|
|
</el-row>
|
|
</detail-frame>
|
|
</detail-frame>
|
|
<el-drawer :visible.sync="drawer" direction="rtl" title="安排计划" @close="toClose">
|
|
<el-drawer :visible.sync="drawer" direction="rtl" title="安排计划" @close="toClose">
|
|
- <el-form :model="form" ref="form" :rules="formRules" label-width="80px" size="small" @submit.native.prevent style="padding: 15px;">
|
|
|
|
- <el-form-item label="开始时间" prop="start" required>
|
|
|
|
- <el-date-picker v-model="form.start" type="date" format="yyyy-MM-dd" value-format="yyyy-MM-dd"> </el-date-picker>
|
|
|
|
- </el-form-item>
|
|
|
|
- <el-form-item label="结束时间" prop="end" required>
|
|
|
|
- <el-date-picker v-model="form.end" type="date" format="yyyy-MM-dd" value-format="yyyy-MM-dd"> </el-date-picker>
|
|
|
|
- </el-form-item>
|
|
|
|
- <el-form-item label="期数" prop="term" required> <el-input v-model="form.term"></el-input> </el-form-item>
|
|
|
|
- <el-form-item label="班级类型" prop="type" required>
|
|
|
|
- <el-radio-group v-model="form.type">
|
|
|
|
- <el-radio label="0">正常班级</el-radio>
|
|
|
|
- <el-radio label="1">特殊班级</el-radio>
|
|
|
|
- </el-radio-group>
|
|
|
|
- </el-form-item>
|
|
|
|
- <el-form-item label="批次" prop="batch" v-if="form.type === '0'"> <el-input v-model="form.batch"></el-input> </el-form-item>
|
|
|
|
- <el-form-item label="班级数量" prop="class" v-if="form.type === '0'"> <el-input v-model="form.class"></el-input> </el-form-item>
|
|
|
|
- <el-form-item label="每班人数" prop="number" required> <el-input v-model="form.number"></el-input> </el-form-item>
|
|
|
|
- <el-form-item label="班级名称" prop="name" v-if="form.type === '1'"> <el-input v-model="form.name"></el-input> </el-form-item>
|
|
|
|
- <el-form-item label="颜色" prop="color">
|
|
|
|
- <el-color-picker v-model="form.color" :predefine="predefineColors" size="mini"></el-color-picker>
|
|
|
|
- </el-form-item>
|
|
|
|
- <el-form-item>
|
|
|
|
- <el-row type="flex" align="middle" justify="space-around">
|
|
|
|
- <el-col :span="6">
|
|
|
|
- <el-button type="primary" @click="saveForm">保存</el-button>
|
|
|
|
- </el-col>
|
|
|
|
- <el-col :span="6">
|
|
|
|
- <el-button @click="resetForm">重置</el-button>
|
|
|
|
- </el-col>
|
|
|
|
- </el-row>
|
|
|
|
- </el-form-item>
|
|
|
|
- </el-form>
|
|
|
|
|
|
+ <event :data="form" :isNew="formIsNew" :predefineColors="predefineColors" @save="saveForm"></event>
|
|
</el-drawer>
|
|
</el-drawer>
|
|
<el-dialog title="设置假期" :visible.sync="dialog">
|
|
<el-dialog title="设置假期" :visible.sync="dialog">
|
|
<vacation-form :list="vacation" @update="setVacation"></vacation-form>
|
|
<vacation-form :list="vacation" @update="setVacation"></vacation-form>
|
|
@@ -79,6 +48,7 @@ import detailFrame from '@frame/layout/admin/detail-frame';
|
|
import calendar from '@frame/components/calendar';
|
|
import calendar from '@frame/components/calendar';
|
|
import dataTable from '@frame/components/data-table';
|
|
import dataTable from '@frame/components/data-table';
|
|
import vacationForm from './detail/vacation';
|
|
import vacationForm from './detail/vacation';
|
|
|
|
+import event from './detail/event';
|
|
import _ from 'lodash';
|
|
import _ from 'lodash';
|
|
import { createNamespacedHelpers } from 'vuex';
|
|
import { createNamespacedHelpers } from 'vuex';
|
|
const { mapActions } = createNamespacedHelpers('plan');
|
|
const { mapActions } = createNamespacedHelpers('plan');
|
|
@@ -87,7 +57,7 @@ export default {
|
|
metaInfo: { title: '计划详情' },
|
|
metaInfo: { title: '计划详情' },
|
|
name: 'detail',
|
|
name: 'detail',
|
|
props: {},
|
|
props: {},
|
|
- components: { detailFrame, calendar, dataTable, vacationForm },
|
|
|
|
|
|
+ components: { detailFrame, calendar, dataTable, vacationForm, event },
|
|
data() {
|
|
data() {
|
|
return {
|
|
return {
|
|
info: {
|
|
info: {
|
|
@@ -98,6 +68,7 @@ export default {
|
|
},
|
|
},
|
|
|
|
|
|
form: { color: '#409EFF' },
|
|
form: { color: '#409EFF' },
|
|
|
|
+ formIsNew: true,
|
|
rules: {
|
|
rules: {
|
|
title: [{ required: true, message: '请输入标题' }],
|
|
title: [{ required: true, message: '请输入标题' }],
|
|
},
|
|
},
|
|
@@ -110,7 +81,7 @@ export default {
|
|
},
|
|
},
|
|
drawer: false,
|
|
drawer: false,
|
|
dialog: false,
|
|
dialog: false,
|
|
- events: [{ start: '2020-01-02', end: '2020-01-04', title: '1', color: 'red', editable: false }],
|
|
|
|
|
|
+ events: [],
|
|
predefineColors: ['#409EFF'],
|
|
predefineColors: ['#409EFF'],
|
|
collapse: '',
|
|
collapse: '',
|
|
fields: [
|
|
fields: [
|
|
@@ -141,7 +112,8 @@ export default {
|
|
position: 'left',
|
|
position: 'left',
|
|
},
|
|
},
|
|
},
|
|
},
|
|
- vacation: [{ start: '2020-01-02', end: '2020-01-04', title: '1', color: 'red', editable: false }],
|
|
|
|
|
|
+ selectList: [],
|
|
|
|
+ vacation: [],
|
|
};
|
|
};
|
|
},
|
|
},
|
|
created() {
|
|
created() {
|
|
@@ -175,9 +147,14 @@ export default {
|
|
let start = JSON.parse(JSON.stringify(object.startStr));
|
|
let start = JSON.parse(JSON.stringify(object.startStr));
|
|
let end = JSON.parse(JSON.stringify(object.endStr));
|
|
let end = JSON.parse(JSON.stringify(object.endStr));
|
|
let res = this.inVacation(start, end);
|
|
let res = this.inVacation(start, end);
|
|
|
|
+ if (!res) {
|
|
|
|
+ this.$message.error(`不能在假期中安排计划`);
|
|
|
|
+ return;
|
|
|
|
+ }
|
|
this.$set(this.form, `start`, start);
|
|
this.$set(this.form, `start`, start);
|
|
this.$set(this.form, `end`, end);
|
|
this.$set(this.form, `end`, end);
|
|
this.drawer = true;
|
|
this.drawer = true;
|
|
|
|
+ this.formIsNew = true;
|
|
},
|
|
},
|
|
//日历事件点击事件
|
|
//日历事件点击事件
|
|
eventClick({ event }) {
|
|
eventClick({ event }) {
|
|
@@ -188,11 +165,13 @@ export default {
|
|
return;
|
|
return;
|
|
}
|
|
}
|
|
this.drawer = true;
|
|
this.drawer = true;
|
|
|
|
+ this.formIsNew = false;
|
|
},
|
|
},
|
|
//列表编辑事件
|
|
//列表编辑事件
|
|
toEdit({ data, index }) {
|
|
toEdit({ data, index }) {
|
|
this.$set(this, `form`, JSON.parse(JSON.stringify(data)));
|
|
this.$set(this, `form`, JSON.parse(JSON.stringify(data)));
|
|
this.drawer = true;
|
|
this.drawer = true;
|
|
|
|
+ this.formIsNew = false;
|
|
},
|
|
},
|
|
//列表删除事件
|
|
//列表删除事件
|
|
toDelete({ data, index }) {
|
|
toDelete({ data, index }) {
|
|
@@ -219,25 +198,13 @@ export default {
|
|
//TODO 连接接口
|
|
//TODO 连接接口
|
|
},
|
|
},
|
|
//保存表单函数
|
|
//保存表单函数
|
|
- saveForm() {
|
|
|
|
- this.$refs['form'].validate(valid => {
|
|
|
|
- if (valid) {
|
|
|
|
- this.setEvent();
|
|
|
|
- this.resetForm();
|
|
|
|
- } else {
|
|
|
|
- console.warn('form validate error!!!');
|
|
|
|
- }
|
|
|
|
- });
|
|
|
|
- },
|
|
|
|
- //重置表单函数
|
|
|
|
- resetForm() {
|
|
|
|
- this.$refs.form.resetFields();
|
|
|
|
- this.setHeight();
|
|
|
|
|
|
+ saveForm(events) {
|
|
|
|
+ this.setEvent(events);
|
|
},
|
|
},
|
|
//添加/修改函数
|
|
//添加/修改函数
|
|
- setEvent() {
|
|
|
|
|
|
+ setEvent({ data: form, isNew }) {
|
|
//TODO 需要根据班级类型把数据分开
|
|
//TODO 需要根据班级类型把数据分开
|
|
- let data = JSON.parse(JSON.stringify(this.form));
|
|
|
|
|
|
+ let data = JSON.parse(JSON.stringify(form));
|
|
let { start, end, term, type, number, color, id } = data;
|
|
let { start, end, term, type, number, color, id } = data;
|
|
let object = {};
|
|
let object = {};
|
|
if (data.type === '0') {
|
|
if (data.type === '0') {
|
|
@@ -249,9 +216,10 @@ export default {
|
|
let { name } = data;
|
|
let { name } = data;
|
|
object = { start, end, term, type, number, color, name, title: name };
|
|
object = { start, end, term, type, number, color, name, title: name };
|
|
}
|
|
}
|
|
- if (!id) {
|
|
|
|
|
|
+ if (isNew) {
|
|
object.id = `p${new Date().getTime()}`;
|
|
object.id = `p${new Date().getTime()}`;
|
|
this.events.push(object);
|
|
this.events.push(object);
|
|
|
|
+ this.selectList.push(object);
|
|
} else {
|
|
} else {
|
|
object.id = id;
|
|
object.id = id;
|
|
this.$set(
|
|
this.$set(
|
|
@@ -259,6 +227,11 @@ export default {
|
|
_.findIndex(this.events, item => item.id == object.id),
|
|
_.findIndex(this.events, item => item.id == object.id),
|
|
object
|
|
object
|
|
);
|
|
);
|
|
|
|
+ this.$set(
|
|
|
|
+ this.selectList,
|
|
|
|
+ _.findIndex(this.selectList, item => item.id == object.id),
|
|
|
|
+ object
|
|
|
|
+ );
|
|
this.drawer = false;
|
|
this.drawer = false;
|
|
}
|
|
}
|
|
if (_.findIndex(this.predefineColors, item => item == data.color) < 0) this.predefineColors.push(data.color);
|
|
if (_.findIndex(this.predefineColors, item => item == data.color) < 0) this.predefineColors.push(data.color);
|
|
@@ -267,7 +240,8 @@ export default {
|
|
//关闭抽屉函数
|
|
//关闭抽屉函数
|
|
toClose() {
|
|
toClose() {
|
|
this.drawer = false;
|
|
this.drawer = false;
|
|
- this.resetForm();
|
|
|
|
|
|
+ this.formIsNew = true;
|
|
|
|
+ this.setHeight();
|
|
},
|
|
},
|
|
setHeight() {
|
|
setHeight() {
|
|
let heights = this.$refs.card.$el.clientHeight * 0.63;
|
|
let heights = this.$refs.card.$el.clientHeight * 0.63;
|
|
@@ -292,38 +266,38 @@ export default {
|
|
for (const vac of this.vacation) {
|
|
for (const vac of this.vacation) {
|
|
let vacS = new Date(vac.start).getTime();
|
|
let vacS = new Date(vac.start).getTime();
|
|
let vacE = new Date(vac.end).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)}`);
|
|
|
|
|
|
+ // 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 事件开始时间<假期开始时间 => 事件结束时间 <= 假期开始时间 ? 事件没碰到假期,没事 : 事件碰到假期了.不行了
|
|
//case1 事件开始时间<假期开始时间 => 事件结束时间 <= 假期开始时间 ? 事件没碰到假期,没事 : 事件碰到假期了.不行了
|
|
//case2 事件开始时间>=假期开始时间 => 事件开始时间 <= 假期结束时间 ? GG return false: return true;
|
|
//case2 事件开始时间>=假期开始时间 => 事件开始时间 <= 假期结束时间 ? GG return false: return true;
|
|
//case2
|
|
//case2
|
|
- console.log(`startTime:${startTime}`);
|
|
|
|
- console.log(`vacS:${vacS}`);
|
|
|
|
- console.log(startTime >= vacS);
|
|
|
|
|
|
+ // console.log(`startTime:${startTime}`);
|
|
|
|
+ // console.log(`vacS:${vacS}`);
|
|
|
|
+ // console.log(startTime >= vacS);
|
|
if (startTime >= vacS) {
|
|
if (startTime >= vacS) {
|
|
- console.log(`in if`);
|
|
|
|
- console.log(`startTime:${startTime}`);
|
|
|
|
- console.log(`vacE:${vacE}`);
|
|
|
|
- console.log(startTime < vacE);
|
|
|
|
|
|
+ // console.log(`in if`);
|
|
|
|
+ // console.log(`startTime:${startTime}`);
|
|
|
|
+ // console.log(`vacE:${vacE}`);
|
|
|
|
+ // console.log(startTime < vacE);
|
|
if (startTime < vacE) {
|
|
if (startTime < vacE) {
|
|
res = false;
|
|
res = false;
|
|
break;
|
|
break;
|
|
}
|
|
}
|
|
} else {
|
|
} else {
|
|
//case1
|
|
//case1
|
|
- console.log(`in else`);
|
|
|
|
- console.log(`endTime:${endTime}`);
|
|
|
|
- console.log(`vacS:${vacS}`);
|
|
|
|
|
|
+ // console.log(`in else`);
|
|
|
|
+ // console.log(`endTime:${endTime}`);
|
|
|
|
+ // console.log(`vacS:${vacS}`);
|
|
if (endTime < vacS) {
|
|
if (endTime < vacS) {
|
|
res = false;
|
|
res = false;
|
|
break;
|
|
break;
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
- console.log(res);
|
|
|
|
//比较选择的时间在不在假期中,然后返回结果
|
|
//比较选择的时间在不在假期中,然后返回结果
|
|
|
|
+ return res;
|
|
},
|
|
},
|
|
},
|
|
},
|
|
watch: {
|
|
watch: {
|