/* 班级管理:新增 / 修改 / 逻辑删除 班级表只有「编号 + 开课时间」两列,没有班级名,所以界面上一律显示成 "编号1 · 2026-09-01 开班" */ window.PAGES.push({ key: 'classes', title: '班级管理', sub: '班级开课时间,班主任与任课老师来自老师模块', group: '数据管理', icon: 'class', component: { name: 'ClassesPage', template: `
班级列表
共 {{ rows.length }} 个班级;班主任和任课老师由老师模块反查得到
刷新 + 新增班级
`, setup() { const loading = ref(false); const saving = ref(false); const rows = ref([]); const dialog = ref(false); const editing = ref(null); const formRef = ref(null); const form = ref({ start_time: null }); const rules = { start_time: [{ required: true, message: '请选择开课时间', trigger: 'change' }], }; // 一定要重新拉列表:新增/修改接口返回的班主任和任课老师永远是"暂无", // 那两个字段是 DAO 在列表查询里才挂上去的。 // 顺便把结果写回共享缓存,别的页面的班级下拉/名称映射也就跟着更新了。 const load = async () => { loading.value = true; try { rows.value = await ClassApi.list({ limit: 1000 }); Cache.classes = rows.value; Cache.loaded.classes = true; } catch (e) { toastErr(e); } finally { loading.value = false; } }; const openCreate = () => { editing.value = null; form.value = { start_time: null }; dialog.value = true; }; const openEdit = (row) => { editing.value = row.class_id; // 回参是 "2026-09-01T00:00:00",日期选择器只认前半段 form.value = { start_time: fmtDate(row.start_time) || null }; dialog.value = true; }; const submit = async () => { if (!formRef.value) return; try { await formRef.value.validate(); } catch (e) { return; } saving.value = true; try { if (editing.value) { await ClassApi.update(editing.value, form.value); toastOk('修改成功'); } else { await ClassApi.create(form.value); toastOk('新增成功'); } dialog.value = false; await load(); } catch (e) { toastErr(e); } finally { saving.value = false; } }; const remove = async (row) => { try { await ElementPlus.ElMessageBox.confirm( `确定删除班级「编号${row.class_id}」吗?`, '删除确认', { type: 'warning', confirmButtonText: '确定删除', cancelButtonText: '取消' }); } catch (e) { return; } try { await ClassApi.remove(row.class_id); toastOk('删除成功'); await load(); } catch (e) { toastErr(e); } }; onMounted(load); return { loading, saving, rows, dialog, editing, formRef, form, rules, load, openCreate, openEdit, submit, remove, dash, fmtDate }; }, }, });