1、校历的78、晚上、夜间等直接落库,

2、配当、任务书完善、排课窗完善;
3、任务书批量发布、删除等;
4、班历同步校历
This commit is contained in:
2026-09-18 10:38:39 +08:00
parent 911dfe911b
commit f3ae9fb2fd
62 changed files with 3508 additions and 143 deletions
@@ -0,0 +1,154 @@
<template>
<div class="app-container">
<el-tabs v-model="tab" type="border-card">
<!-- ==================== 我的课表 ==================== -->
<el-tab-pane label="我的课表" name="grid">
<el-form inline size="small" style="margin-bottom: 8px">
<el-form-item label="日期范围">
<el-date-picker
v-model="gridRange"
type="daterange"
value-format="yyyy-MM-dd"
range-separator="~"
start-placeholder="开始"
end-placeholder="结束"
style="width: 260px"
/>
</el-form-item>
<el-form-item>
<el-button type="primary" icon="el-icon-search" @click="loadGrid">生成</el-button>
</el-form-item>
</el-form>
<timetable-grid-view :grid="grid" :loading="gridLoading" :show-teacher="true" :show-room="true" />
</el-tab-pane>
<!-- ==================== 我的课程 ==================== -->
<el-tab-pane label="我的课程" name="courses">
<el-form inline size="small" style="margin-bottom: 8px">
<el-form-item label="年度">
<el-input-number v-model="courseQuery.nd" :min="2000" :max="2100" style="width: 120px" />
</el-form-item>
<el-form-item label="学期第次">
<el-input-number v-model="courseQuery.xqdc" :min="1" :max="4" style="width: 100px" />
</el-form-item>
<el-form-item>
<el-button type="primary" icon="el-icon-search" @click="loadCourses">查询</el-button>
</el-form-item>
</el-form>
<el-table v-loading="courseLoading" :data="courseRows" border stripe size="small" max-height="560">
<el-table-column prop="kcmcksxs" label="课程名称/课时系数" min-width="180" align="center" show-overflow-tooltip />
<el-table-column prop="zrjykc" label="责任教员/课次" min-width="140" align="center" show-overflow-tooltip />
<el-table-column prop="jhxs" label="计划学时" width="80" align="center" />
<el-table-column prop="yxxs" label="运行学时" width="80" align="center" />
<el-table-column prop="khlxfs" label="考核类型/方式" width="120" align="center" />
<el-table-column prop="ssjy" label="实施教员" width="110" align="center" />
<el-table-column prop="rscd" label="人数/场地" min-width="140" align="center" show-overflow-tooltip />
</el-table>
</el-tab-pane>
<!-- ==================== 日实施计划 ==================== -->
<el-tab-pane label="日实施计划" name="lessons">
<el-form inline size="small" style="margin-bottom: 8px">
<el-form-item label="日期范围">
<el-date-picker
v-model="lessonRange"
type="daterange"
value-format="yyyy-MM-dd"
range-separator="~"
start-placeholder="开始"
end-placeholder="结束"
style="width: 260px"
/>
</el-form-item>
<el-form-item>
<el-button type="primary" icon="el-icon-search" @click="loadLessons">查询</el-button>
</el-form-item>
</el-form>
<el-table v-loading="lessonLoading" :data="lessonRows" border stripe size="small" max-height="560">
<el-table-column prop="sksj" label="上课时间" width="170" align="center" />
<el-table-column prop="kc" label="课程" min-width="150" align="center" show-overflow-tooltip />
<el-table-column prop="jy" label="教员" width="120" align="center" />
<el-table-column prop="cd" label="场地" width="120" align="center" />
<el-table-column prop="jxnrxff" label="教学内容 / 方法" min-width="160" align="center" show-overflow-tooltip />
<el-table-column prop="bz" label="备注" min-width="100" align="center" show-overflow-tooltip />
</el-table>
</el-tab-pane>
<!-- ==================== 本队干部 ==================== -->
<el-tab-pane label="本队干部" name="cadres">
<el-table v-loading="cadreLoading" :data="cadreRows" border stripe size="small" max-height="560">
<el-table-column prop="xh" label="学号" width="140" align="center" />
<el-table-column prop="xm" label="姓名" width="140" align="center" />
<el-table-column prop="ggrz" label="骨干任职" min-width="160" align="center" />
</el-table>
</el-tab-pane>
</el-tabs>
</div>
</template>
<script>
import { myStudentCourses, myStudentLessons, myStudentGrid, myTeamCadres } from '@/api/teachBusiness/my'
import TimetableGridView from '@/components/TimetableGridView'
export default {
name: 'MyClass',
components: { TimetableGridView },
data() {
return {
tab: 'grid',
gridRange: null,
grid: null,
gridLoading: false,
courseQuery: { nd: null, xqdc: null },
courseRows: [],
courseLoading: false,
lessonRange: null,
lessonRows: [],
lessonLoading: false,
cadreRows: [],
cadreLoading: false
}
},
created() {
this.loadGrid()
this.loadCourses()
this.loadCadres()
},
methods: {
loadGrid() {
this.gridLoading = true
const params = {}
if (this.gridRange && this.gridRange.length === 2) {
params.start = this.gridRange[0]
params.end = this.gridRange[1]
}
myStudentGrid(params)
.then(res => { this.grid = res.data })
.finally(() => { this.gridLoading = false })
},
loadCourses() {
this.courseLoading = true
myStudentCourses(this.courseQuery)
.then(res => { this.courseRows = res.data || [] })
.finally(() => { this.courseLoading = false })
},
loadLessons() {
this.lessonLoading = true
const params = {}
if (this.lessonRange && this.lessonRange.length === 2) {
params.start = this.lessonRange[0]
params.end = this.lessonRange[1]
}
myStudentLessons(params)
.then(res => { this.lessonRows = res.data || [] })
.finally(() => { this.lessonLoading = false })
},
loadCadres() {
this.cadreLoading = true
myTeamCadres()
.then(res => { this.cadreRows = res.data || [] })
.finally(() => { this.cadreLoading = false })
}
}
}
</script>