You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

269 lines
7.2 KiB

1 year ago
<template>
<div>
<Modal v-model="isShow" width="70" title="排课设置">
<div class="txl">
<div>课程名称第六期高级科创人才研修班</div>
<div>开课日期2024.3.1--2024.9.1</div>
<div>类别正常课程</div>
</div>
<div class="txl">
<div>班主任李老师</div>
<div>课表状态未发布</div>
</div>
<div class="txl">
<div>
<el-button @click="addColum" type="primary" size="small">新增一行</el-button>
</div>
<div>
<el-button type="primary" size="small">导入</el-button>
</div>
<div>
<el-button type="primary" size="small">发布课表</el-button>
</div>
<div>
<el-button type="primary" size="small">下载并打印课表</el-button>
</div>
</div>
<div class="schedule">
<el-table :data="scheduleData" border style="width: 100%" row-class-name="hover-row">
<el-table-column v-for="(column, index) in columns" :key="index" :prop="column.prop" :label="column.label"
:width="column.width">
<template slot-scope="scope">
1 year ago
<div v-if="column.type === 'time'" class="subjectCell" @click="openTime(scope.$index,scope.row[column.prop])">
1 year ago
{{ formatTime(scope.row[column.prop]) }}
</div>
<div class="subjectCell" v-else @click="openSubject(scope.$index,column.prop,scope.row[column.prop])">
<div v-if="formatSubject(scope.row[column.prop])" class="close"
@click.stop="delColum(scope.$index,column.prop)">X</div>
<div v-html='formatSubject(scope.row[column.prop])'></div>
</div>
</template>
</el-table-column>
<el-table-column label="操作" :width="80">
<template slot-scope="scope">
<div>
<el-button type="danger" size="small" @click="delTime(scope.$index)"></el-button>
</div>
</template>
</el-table-column>
</el-table>
</div>
<template v-slot:footer>
<el-button type="primary" style='margin-left:5px;margin-bottom:5px;' @click="submit"></el-button>
<el-button plain type="primary" ghost style='margin-left:5px;margin-bottom:5px;'
@click="isShow=false">取消</el-button>
</template>
</Modal>
<!-- 时间选择 -->
<change-time ref="changeTime" @refreshTime="updateTime"></change-time>
<!-- 课时选择 -->
<change-subject ref="changeSubject" @refresh="updateSubject"></change-subject>
</div>
</template>
<script>
import changeTime from './changeTime.vue'
import changeSubject from './changeSubject.vue'
export default {
components: {
changeTime,
changeSubject
},
data() {
return {
isShow: false,
hoverRowIndex: null,
columns: [{
type: 'time',
prop: 'time',
label: '时间',
width: '120'
},
{
prop: 'monday',
label: '星期一'
},
{
prop: 'tuesday',
label: '星期二'
},
{
prop: 'wednesday',
label: '星期三'
},
{
prop: 'thursday',
label: '星期四'
},
{
prop: 'friday',
label: '星期五'
},
{
prop: 'saturday',
label: '星期六'
},
{
prop: 'sunday',
label: '星期日'
}
],
scheduleData: [{
time: ['09:00', '10:00'],
monday: {
name: 0,
name_value: '管理',
teacher: 0,
teacher_value: '王老师',
room: '会议室1'
},
tuesday: {},
wednesday: {},
thursday: {},
friday: {},
saturday: {},
sunday: {}
},
{
time: ['10:15', '11:15'],
monday: {},
tuesday: {},
wednesday: {},
thursday: {},
friday: {},
saturday: {},
sunday: {}
},
{
1 year ago
time: ['11:15', '13:00'],
monday:{},
1 year ago
tuesday: {},
wednesday: {},
thursday: {},
friday: {},
saturday: {},
sunday: {}
},
{
1 year ago
time: ['13:00', '14:00'],
monday:{},
1 year ago
tuesday: {},
wednesday: {},
thursday: {},
friday: {},
saturday: {},
sunday: {}
},
{
1 year ago
time: ['14:15', '15:15'],
monday:{},
1 year ago
tuesday: {},
wednesday: {},
thursday: {},
friday: {},
saturday: {},
sunday: {}
}
],
}
},
methods: {
// 增加一行
addColum(index) {
const obj = {
1 year ago
time: [],
monday:{},
1 year ago
tuesday: {},
wednesday: {},
thursday: {},
friday: {},
saturday: {},
sunday: {}
}
this.scheduleData.push(obj)
},
// 删除一行
delTime(index) {
this.scheduleData.splice(index, 1)
},
// 更改上课时间
formatTime(val) {
if (val && val.length > 0) {
return val.join("--")
}
},
openTime(index, time) {
this.$refs.changeTime.setIndex(index, time)
this.$refs.changeTime.isShow = true
},
updateTime(e) {
this.scheduleData[e.index]['time'] = e.range
},
// 更改课程
formatSubject(val) {
if (!val) {
return ''
}
if (JSON.stringify(val) === '{}') {
return ''
} else {
return `<div>${val.teacher_value}</div><div>${val.name_value}</div><div>${val.room}</div>`
}
},
openSubject(index, prop, form) {
this.$refs.changeSubject.setIndex(index, prop, form)
this.$refs.changeSubject.isShow = true
},
updateSubject(e) {
console.log("e1", e)
this.scheduleData[e.index][e.prop] = e
},
delColum(index, prop) {
this.scheduleData[index][prop] = {}
},
//
submit() {}
}
}
</script>
<style lang="scss" scoped>
::v-deep .el-table__cell {
position: relative;
}
.subjectCell {
min-height: 50px;
.close {
position: absolute;
width: 20px;
height: 20px;
background-color: #ddd;
color: #fff;
text-align: center;
line-height: 20px;
top: 5px;
right: 5px;
border-radius: 20px;
cursor: pointer
}
&>div {
text-align: center;
}
}
.txl {
display: flex;
align-items: center;
margin-bottom: 10px;
&>div {
margin-right: 10px;
}
}
</style>