培养方案下放学院维护,学院账号被后端限制在本学院范围;新增按年级、学院、专业联动筛选及维护范围提示。

课程库实行分级维护:学院只能维护本学院的专业必修、专业选修和实践课程;通识课程可查看、引用但不可修改。校级账号保留全校统筹权限。
“排课与课表”已从“教学建设”迁移到“教学运行”,原路由保持不变。
权限规则同时落实在前端和 API,并新增专项测试。
This commit is contained in:
2026-07-24 18:31:33 +08:00 Unverified
parent 022e79c48d
commit 5a7a8d530b
8 changed files with 265 additions and 41 deletions
+13 -4
View File
@@ -235,9 +235,16 @@ button { cursor: pointer; }
.ledger-label span { align-self: flex-start; color: #aeb8d6; font-size: 11px; }
.ledger-label b { margin-left: auto; font: 700 31px/1 Consolas, monospace; color: #58d0bf; }
.ledger-label small { color: #c4cce3; font-size: 10px; }
.ledger-rule { display: flex; align-items: center; gap: 0; position: relative; z-index: 1; }
.ledger-rule span { padding: 8px 28px; border-right: 1px solid rgba(255,255,255,.12); color: #d2d8e9; font-size: 11px; letter-spacing: .08em; }
.ledger-rule { padding: 17px 28px; display: grid; align-content: center; gap: 4px; position: relative; z-index: 1; }
.ledger-rule span { color: #8fa0cb; font-size: 9px; letter-spacing: .13em; }
.ledger-rule b { color: #f5f7ff; font-size: 14px; font-weight: 650; }
.ledger-rule small { color: #b9c3dd; font-size: 10px; }
.maintenance-scope { min-height: 76px; display: grid; grid-template-columns: 170px 220px 1fr; align-items: stretch; color: white; background: linear-gradient(105deg, #17295a, #263f80 72%, #19736f); overflow: hidden; }
.maintenance-scope > div { padding: 15px 20px; display: grid; align-content: center; gap: 5px; border-right: 1px solid rgba(255,255,255,.13); }
.maintenance-scope span { color: #91a2cc; font-size: 9px; letter-spacing: .12em; }
.maintenance-scope b { color: #f7f9ff; font-size: 13px; font-weight: 650; }
.maintenance-scope p { margin: 0; padding: 0 24px; align-self: center; color: #cbd4e8; font-size: 11px; }
.curriculum-filter { padding: 14px 18px; display: flex; flex-wrap: wrap; gap: 10px; align-items: center; border: 1px solid var(--line); background: white; }
.curriculum-filter > .el-input { width: 260px; }
.curriculum-filter > .el-select { width: 170px; }
@@ -905,9 +912,11 @@ button { cursor: pointer; }
.filter-bar > .el-input { width: 100%; }
.filter-bar > .el-select { flex: 1 1 140px; width: auto; }
.course-ledger { min-height: auto; display: block; }
.maintenance-scope { grid-template-columns: 1fr 1fr; }
.maintenance-scope p { grid-column: 1 / -1; padding: 12px 18px; border-top: 1px solid rgba(255,255,255,.13); }
.ledger-label { width: 100%; }
.ledger-rule { overflow-x: auto; }
.ledger-rule span { padding: 12px 20px; white-space: nowrap; }
.ledger-rule { overflow: visible; }
.ledger-rule span { padding: 0; white-space: nowrap; }
.data-card { overflow: hidden; }
.curriculum-filter > .el-input { width: 100%; }
.curriculum-filter > .el-select { flex: 1 1 140px; width: auto; }