班历功能添加
This commit is contained in:
@@ -16,6 +16,24 @@ export function updateClassCalendarEvent(data) {
|
||||
})
|
||||
}
|
||||
|
||||
// 批量保存班历时间格(拖选区域一次提交;cell.action='clear' 恢复默认)
|
||||
export function batchSaveClassCalendarEvent(xydxqbh, cells) {
|
||||
return request({
|
||||
url: '/class-calendar/batchSave',
|
||||
method: 'post',
|
||||
data: { xydxqbh, cells }
|
||||
})
|
||||
}
|
||||
|
||||
// 重新同步校历:confirm=false 返回缺失格预览,confirm=true 实际补齐
|
||||
export function resyncClassCalendar(xydxqbh, confirm) {
|
||||
return request({
|
||||
url: '/class-calendar/resync',
|
||||
method: 'post',
|
||||
params: { xydxqbh, confirm }
|
||||
})
|
||||
}
|
||||
|
||||
export function applyClassCalendarEvent(data) {
|
||||
return request({
|
||||
url: '/class-calendar/apply',
|
||||
|
||||
@@ -140,7 +140,7 @@
|
||||
<script>
|
||||
import { getSemester } from '@/api/teachBusiness/semester'
|
||||
import { listXqxlb, addXqxlb, updateXqxlb } from '@/api/teachBusiness/xqxlb'
|
||||
import { listClassCalendarEvent, updateClassCalendarEvent } from '@/api/teachOffice/classCalendarEvent'
|
||||
import { listClassCalendarEvent, updateClassCalendarEvent, batchSaveClassCalendarEvent } from '@/api/teachOffice/classCalendarEvent'
|
||||
import {
|
||||
listVenueCalendarRange,
|
||||
batchSaveVenueCalendar,
|
||||
@@ -1027,6 +1027,22 @@ export default {
|
||||
/* ---------- 后端持久化(xqxlb 接口) ---------- */
|
||||
// 批量保存选中格事件,返回各格子保存成功/失败的个数
|
||||
persistEvents(keys) {
|
||||
// 班历走批量接口:一次拖选只发一个请求,整批单事务提交
|
||||
if (this.mode === 'class') {
|
||||
const cells = keys
|
||||
.filter(key => this.events[key])
|
||||
.map(key => this.buildXqxlbPayload(key, this.events[key]))
|
||||
.filter(Boolean)
|
||||
if (!cells.length) return Promise.resolve({ ok: 0, fail: 0 })
|
||||
return batchSaveClassCalendarEvent(this.xydxqbh, cells).then(res => {
|
||||
this.$message.success((res && res.message) || '已设定 ' + cells.length + ' 个时间格')
|
||||
this.reloadEvents()
|
||||
return { ok: cells.length, fail: 0 }
|
||||
}).catch(() => {
|
||||
this.$message.error('班历批量保存失败')
|
||||
return { ok: 0, fail: cells.length }
|
||||
})
|
||||
}
|
||||
const tasks = keys
|
||||
.filter(key => this.events[key])
|
||||
.map(key => {
|
||||
@@ -1051,8 +1067,29 @@ export default {
|
||||
return { ok: ok, fail: fail }
|
||||
})
|
||||
},
|
||||
// 批量删除选中格事件:调用 update 接口并将 jqmc 置空完成删除
|
||||
// 批量删除选中格事件:班历走 batchSave 的 action='clear' 恢复默认,校历仍走 update 置空名称
|
||||
persistDeleteEvents(keys) {
|
||||
if (this.mode === 'class') {
|
||||
const cells = keys
|
||||
.filter(key => this.events[key])
|
||||
.map(key => {
|
||||
const payload = this.buildXqxlbPayload(key, this.events[key])
|
||||
if (!payload) return null
|
||||
payload.jqmc = ''
|
||||
payload.action = 'clear'
|
||||
return payload
|
||||
})
|
||||
.filter(Boolean)
|
||||
if (!cells.length) return Promise.resolve({ ok: 0, fail: 0 })
|
||||
return batchSaveClassCalendarEvent(this.xydxqbh, cells).then(() => {
|
||||
this.$message.success('已删除 ' + cells.length + ' 个时间格事件')
|
||||
this.reloadEvents()
|
||||
return { ok: cells.length, fail: 0 }
|
||||
}).catch(() => {
|
||||
this.$message.error('班历批量删除失败')
|
||||
return { ok: 0, fail: cells.length }
|
||||
})
|
||||
}
|
||||
const tasks = keys
|
||||
.filter(key => this.events[key])
|
||||
.map(key => {
|
||||
|
||||
@@ -11,7 +11,8 @@
|
||||
<div class="dialog-toolbar">
|
||||
<el-button size="small" :disabled="!semesterBh" @click="handleApplyRegion">选定区域应用于其它班次</el-button>
|
||||
<el-button size="small" :disabled="!semesterBh" @click="handleApplyWhole">整个班历应用于其它班次</el-button>
|
||||
<span class="hint">应用到其它班次只覆盖班历时间格,不改课程任务。</span>
|
||||
<el-button size="small" :disabled="!semesterBh" :loading="resyncLoading" @click="handleResync">同步校历</el-button>
|
||||
<span class="hint">应用到其它班次只覆盖班历时间格,不改课程任务;同步校历只补缺失格,不覆盖人工改动。</span>
|
||||
</div>
|
||||
<div class="editor-wrap">
|
||||
<SchoolCalendarEditor
|
||||
@@ -42,7 +43,7 @@
|
||||
<script>
|
||||
import SchoolCalendarEditor from '@/views/teachBusiness/calendar/components/SchoolCalendarEditor.vue'
|
||||
import ClassTeamSelectDialog from './ClassTeamSelectDialog.vue'
|
||||
import { applyClassCalendarEvent } from '@/api/teachOffice/classCalendarEvent'
|
||||
import { applyClassCalendarEvent, resyncClassCalendar } from '@/api/teachOffice/classCalendarEvent'
|
||||
|
||||
export default {
|
||||
name: 'ClassEventCalendarDialog',
|
||||
@@ -55,7 +56,8 @@ export default {
|
||||
data() {
|
||||
return {
|
||||
teamSelectVisible: false,
|
||||
applyWhole: false
|
||||
applyWhole: false,
|
||||
resyncLoading: false
|
||||
}
|
||||
},
|
||||
computed: {
|
||||
@@ -132,6 +134,32 @@ export default {
|
||||
this.teamSelectVisible = false
|
||||
this.$message.success(`已覆盖 ${res.data || 0} 个时间格`)
|
||||
})
|
||||
},
|
||||
handleResync() {
|
||||
this.resyncLoading = true
|
||||
resyncClassCalendar(this.semesterBh, false).then(res => {
|
||||
const data = res && res.data
|
||||
if (!data || !data.addCount) {
|
||||
this.$message.info('班历已与校历一致,无需同步')
|
||||
return
|
||||
}
|
||||
const lines = (data.items || []).slice(0, 20)
|
||||
.map(i => `${i.jqsj} ${i.courseClass}节 ${i.jqmc || ''}${i.kpk === false ? '(不可排课)' : ''}`)
|
||||
const more = data.addCount > lines.length ? `<br/>…共 ${data.addCount} 格` : ''
|
||||
this.$confirm(
|
||||
`校历中有 ${data.addCount} 个班历缺失的时间格:<br/>${lines.join('<br/>')}${more}<br/><br/>补齐这些格子?(不覆盖已有班历内容)`,
|
||||
'同步校历',
|
||||
{ dangerouslyUseHTMLString: true, confirmButtonText: '补齐', cancelButtonText: '取消' }
|
||||
).then(() => {
|
||||
return resyncClassCalendar(this.semesterBh, true).then(r => {
|
||||
this.$message.success(`已补齐 ${(r.data && r.data.addCount) || 0} 个时间格`)
|
||||
const editor = this.$refs.editor
|
||||
if (editor && editor.reloadEvents) editor.reloadEvents()
|
||||
})
|
||||
}).catch(() => {})
|
||||
}).finally(() => {
|
||||
this.resyncLoading = false
|
||||
})
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user