From ebbbd5fb0141d7f23befbc8a22ac245fbdb00dca Mon Sep 17 00:00:00 2001 From: zhaichao Date: Wed, 26 Aug 2026 15:04:52 +0800 Subject: [PATCH] =?UTF-8?q?=E6=A0=A1=E5=8E=86=E5=88=A0=E9=99=A4=E5=8A=9F?= =?UTF-8?q?=E8=83=BD=E5=AE=8C=E5=96=84?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../components/SchoolCalendarEditor.vue | 30 ++++++++++++------- .../views/teachBusiness/semester/index.vue | 24 +++++++++++++-- 2 files changed, 41 insertions(+), 13 deletions(-) diff --git a/frontend/src/views/teachBusiness/calendar/components/SchoolCalendarEditor.vue b/frontend/src/views/teachBusiness/calendar/components/SchoolCalendarEditor.vue index 999428ac4..16fbe49e0 100644 --- a/frontend/src/views/teachBusiness/calendar/components/SchoolCalendarEditor.vue +++ b/frontend/src/views/teachBusiness/calendar/components/SchoolCalendarEditor.vue @@ -501,15 +501,21 @@ export default { this.$message.warning('请先选择时间格') return } - const keys = [...this.selectedKeys] - this.persistDeleteEvents(keys).then(({ ok, fail }) => { - if (fail === 0) { - keys.forEach(key => { - this.$delete(this.events, key) - }) - this.selectedKeys = [] - } - }) + this.$confirm('确认删除选中单元格的事件吗?', '提示', { + confirmButtonText: '确定', + cancelButtonText: '取消', + type: 'warning' + }).then(() => { + const keys = [...this.selectedKeys] + this.persistDeleteEvents(keys).then(({ ok, fail }) => { + if (fail === 0) { + keys.forEach(key => { + this.$delete(this.events, key) + }) + this.selectedKeys = [] + } + }) + }).catch(() => {}) }, absorbEvent() { // 吸取:取选择中第一个事件名非空的格 @@ -575,14 +581,14 @@ export default { return { ok: ok, fail: fail } }) }, - // 批量删除选中格事件 + // 批量删除选中格事件:调用 update 接口并将 jqmc 置空完成删除 persistDeleteEvents(keys) { const tasks = keys .filter(key => this.events[key]) .map(key => { const payload = this.buildXqxlbPayload(key, this.events[key]) if (!payload) return Promise.resolve(false) - payload.delFlag = 1 + payload.jqmc = '' return updateXqxlb(payload) .then(() => true) .catch(() => false) @@ -595,6 +601,8 @@ export default { } else if (ok > 0) { this.$message.success('已删除 ' + ok + ' 个时间格事件') } + // 删除成功后重新拉取,同步后端状态 + this.loadXqxlbEvents() return { ok: ok, fail: fail } }) }, diff --git a/frontend/src/views/teachBusiness/semester/index.vue b/frontend/src/views/teachBusiness/semester/index.vue index 27f792078..826f4a55e 100644 --- a/frontend/src/views/teachBusiness/semester/index.vue +++ b/frontend/src/views/teachBusiness/semester/index.vue @@ -275,16 +275,20 @@ export default { beforeDestroy() { this.$root.$off('semester-current-changed', this.handleCurrentChanged) }, + watch: { + 'form.kxrq': 'calculateWeeks', + 'form.jsrq': 'calculateWeeks' + }, methods: { /** 顶栏切换当前学期后自动刷新 */ handleCurrentChanged() { this.getList() }, - /** 初始化学年选项 */ + /** 初始化学年选项(新增时只能从当前年份往后选择) */ initYearOptions() { const current = new Date().getFullYear() const list = [] - for (let i = current - 10; i <= current + 10; i++) { + for (let i = current; i <= current + 10; i++) { list.push(i) } this.yearOptions = list @@ -331,6 +335,22 @@ export default { if (!value) return '' return String(value).slice(0, 10) }, + /** 根据开学日期和结束日期自动计算学期周数 */ + calculateWeeks() { + const kxrq = this.form.kxrq + const jsrq = this.form.jsrq + if (!kxrq || !jsrq) return + const start = new Date(String(kxrq).slice(0, 10).replace(/-/g, '/')) + const end = new Date(String(jsrq).slice(0, 10).replace(/-/g, '/')) + if (isNaN(start.getTime()) || isNaN(end.getTime())) return + if (end < start) return + // 以开学当周周一为起点,向上取整到周 + const day = start.getDay() + const monday = new Date(start) + monday.setDate(start.getDate() - (day === 0 ? 6 : day - 1)) + const days = Math.round((end - monday) / (24 * 3600 * 1000)) + 1 + this.$set(this.form, 'sdzs', Math.max(1, Math.ceil(days / 7))) + }, /** 查询学期列表 */ getList() { this.loading = true