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

This file contains ambiguous Unicode characters!

This file contains ambiguous Unicode characters that may be confused with others in your current locale. If your use case is intentional and legitimate, you can safely ignore this warning. Use the Escape button to highlight these characters.

<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">
<div v-if="column.type === 'time'" class="subjectCell" @click="openTime(scope.$index,scope.row[column.prop])">
{{ 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: {}
},
{
time: ['11:15', '13:00'],
monday:{},
tuesday: {},
wednesday: {},
thursday: {},
friday: {},
saturday: {},
sunday: {}
},
{
time: ['13:00', '14:00'],
monday:{},
tuesday: {},
wednesday: {},
thursday: {},
friday: {},
saturday: {},
sunday: {}
},
{
time: ['14:15', '15:15'],
monday:{},
tuesday: {},
wednesday: {},
thursday: {},
friday: {},
saturday: {},
sunday: {}
}
],
}
},
methods: {
// 增加一行
addColum(index) {
const obj = {
time: [],
monday:{},
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>