|
|
|
|
@ -10,7 +10,7 @@
|
|
|
|
|
<el-tag v-if="classId" :type="configured ? 'success' : 'warning'">
|
|
|
|
|
{{ configured ? '已保存发布配置' : '默认全部发布(未配置)' }}
|
|
|
|
|
</el-tag>
|
|
|
|
|
<span v-if="classId" class="task-tip">{{ configured ? '仅勾选的实训任务会出现在学生端。' : '当前所有实训任务均已默认勾选,保存后将按勾选结果发布。' }}</span>
|
|
|
|
|
<span v-if="classId" class="task-tip">{{ configured ? '仅勾选的实训任务会出现在学生端。' : '现有实训任务默认勾选;“综合案例实训”默认不发布,需由教师主动勾选。' }}</span>
|
|
|
|
|
<el-button type="primary" :disabled="!canOperateSelectedClass || !classId" :loading="saving" @click="savePublication">保存发布配置</el-button>
|
|
|
|
|
</section>
|
|
|
|
|
|
|
|
|
|
@ -27,6 +27,7 @@
|
|
|
|
|
>
|
|
|
|
|
<el-table-column type="selection" width="58" :reserve-selection="true" :selectable="() => canOperateSelectedClass" />
|
|
|
|
|
<el-table-column prop="taskName" label="实训任务" min-width="240" align="center" header-align="center" />
|
|
|
|
|
<el-table-column prop="projectName" label="所属模块" min-width="180" align="center" header-align="center" />
|
|
|
|
|
</el-table>
|
|
|
|
|
</div>
|
|
|
|
|
</template>
|
|
|
|
|
@ -46,6 +47,7 @@ const configured = ref(false);
|
|
|
|
|
const loading = ref(false);
|
|
|
|
|
const saving = ref(false);
|
|
|
|
|
const tableRef = ref(null);
|
|
|
|
|
const comprehensiveTaskKey = "comprehensive-case-training";
|
|
|
|
|
let activeLoadGeneration = 0;
|
|
|
|
|
let selectionSyncGeneration = -1;
|
|
|
|
|
|
|
|
|
|
@ -113,7 +115,9 @@ async function loadPublication() {
|
|
|
|
|
configured.value = res.data?.configured === true;
|
|
|
|
|
selectedTaskKeys.value = configured.value
|
|
|
|
|
? (res.data?.taskKeys || [])
|
|
|
|
|
: tasks.value.map((task) => task.taskKey);
|
|
|
|
|
: tasks.value
|
|
|
|
|
.filter((task) => task.taskKey !== comprehensiveTaskKey)
|
|
|
|
|
.map((task) => task.taskKey);
|
|
|
|
|
applySelection(requestGeneration);
|
|
|
|
|
} finally {
|
|
|
|
|
if (requestGeneration === activeLoadGeneration) loading.value = false;
|
|
|
|
|
|