merge: add comprehensive training student entry

dev-QQq
chenyuan 4 weeks ago
commit 640f20070e

@ -286,6 +286,12 @@ const sidebarStyle = computed(() => {
});
const studentCourseNav = [
{ title: "AI智能助手", path: "/assistant/index", activePrefix: "/assistant" },
{
title: "综合实训",
children: [
{ title: "综合案例实训", path: "/comprehensive/index" },
],
},
{
title: "互联网产品开发基础",
children: [
@ -351,6 +357,7 @@ const teacherManageNav = [
},
];
const trainingTaskKeyByPath = {
"/comprehensive/index": "comprehensive-case-training",
"/foundation/new-product-survey": "new-product-survey",
"/foundation/product-development-factors": "product-development-factors",
"/foundation/product-development-process": "product-development-process",
@ -382,6 +389,7 @@ const currentCourseNav = computed(() => (isTeacherRole.value
: filterStudentCourseNavigation(studentCourseNav, publishedTaskKeys.value)));
const studentIconByPath = {
"/assistant/index": "MagicStick",
"/comprehensive/index": "School",
"/foundation/new-product-survey": "Search",
"/foundation/product-development-factors": "SetUp",
"/foundation/product-development-process": "Guide",

@ -153,6 +153,21 @@ export const dynamicRoutes = [
component: () => import("@/views/studentDemo/index.vue"),
hidden: true,
},
{
path: "/comprehensive",
component: Layout,
redirect: "/comprehensive/index",
roles: ["student"],
hidden: true,
children: [
{
path: "index",
component: () => import("@/views/training/GenericTrainingPage.vue"),
name: "ComprehensiveCaseTraining",
meta: { title: "综合实训", icon: "Finished", affix: true, pageKey: "comprehensive-case-training" },
},
],
},
// 互联网产品开发基础
{
path: "/foundation",

@ -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;

@ -1,4 +1,18 @@
export const studentTrainingPages = {
"comprehensive-case-training": {
title: "综合案例实训",
knowledge: "综合实训以一个完整案例串联市场洞察、产品规划、开发验证和上线运营,训练学生在真实业务背景下完成产品开发全流程。",
background: "请根据教师发布的综合案例,梳理问题、方案、实施过程和验证结论。教师可在班级任务配置中替换案例材料、任务说明、步骤和评分要求。",
goals: ["综合运用互联网产品开发方法", "完成基于案例的分析与方案设计", "形成可提交、可评价的完整实训成果"],
task: "请围绕教师发布的综合案例,完成分析、方案设计、实施说明和结果复盘,并提交实训成果。",
flow: ["案例理解", "问题分析", "方案设计", "实施验证", "成果复盘"],
fields: [
{ key: "caseAnalysis", label: "案例与问题分析", type: "textarea", placeholder: "概括案例背景、目标用户、核心问题与关键约束" },
{ key: "solution", label: "整体解决方案", type: "textarea", placeholder: "说明产品方案、关键功能、实施步骤与资源安排" },
{ key: "validation", label: "验证与复盘", type: "textarea", placeholder: "说明验证方式、结果、风险及后续优化建议" },
],
keyPoints: ["案例目标", "用户需求", "产品方案", "验证证据", "复盘改进"],
},
"product-development-process": {
title: "产品开发主要流程",
knowledge:

Loading…
Cancel
Save