From e8c1f08640311560ed8c8cd24ca4a9fe1cb622bf Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E9=99=88=E6=B2=85?= <907037276@qq.com> Date: Sun, 30 Aug 2026 14:33:32 +0800 Subject: [PATCH] =?UTF-8?q?feat:=20=E4=BC=98=E5=8C=96=E5=AD=A6=E7=94=9F?= =?UTF-8?q?=E7=AB=AF=20AI=20=E5=8A=A9=E5=AD=A6=E4=BD=93=E9=AA=8C?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/api/aiTrainingEvaluation.js | 4 +- src/assets/styles/student-training.scss | 61 +++++++++++++++---- src/views/components/TrainingAiSidebar.vue | 59 ++++++++++++++++-- tests/ai-training-evaluation.static.test.cjs | 6 +- ...evelopment-process-density.static.test.cjs | 24 ++++++++ .../student-training-density.static.test.cjs | 29 +++++++++ 6 files changed, 163 insertions(+), 20 deletions(-) create mode 100644 tests/product-development-process-density.static.test.cjs create mode 100644 tests/student-training-density.static.test.cjs diff --git a/src/api/aiTrainingEvaluation.js b/src/api/aiTrainingEvaluation.js index 4a3ef50..f935116 100644 --- a/src/api/aiTrainingEvaluation.js +++ b/src/api/aiTrainingEvaluation.js @@ -7,11 +7,11 @@ export function getAiTrainingEvaluation(taskKey) { }); } -export function requestAiTrainingHelp(taskKey, question) { +export function requestAiTrainingHelp(taskKey, question, stepContext = "") { return request({ url: `/api/student/training-tasks/${taskKey}/ai-evaluation/help`, method: "post", - data: { question }, + data: { question, stepContext }, headers: { repeatSubmit: false }, }); } diff --git a/src/assets/styles/student-training.scss b/src/assets/styles/student-training.scss index 3a88609..8d8dda9 100644 --- a/src/assets/styles/student-training.scss +++ b/src/assets/styles/student-training.scss @@ -1,5 +1,5 @@ .student-training-shell { - --student-step-height: 46px; + --student-step-height: 42px; --student-step-font: 14px; --student-action-height: 42px; --student-action-font: 16px; @@ -30,12 +30,12 @@ display: grid !important; grid-template-columns: minmax(660px, 1fr) 300px !important; align-items: start !important; - gap: 14px !important; + gap: 10px !important; width: 100% !important; max-width: none !important; min-height: calc(100vh - 90px) !important; margin: 0 !important; - padding: 14px 14px 20px !important; + padding: 10px 10px 16px !important; background: #06111d !important; } @@ -46,27 +46,66 @@ */ .student-training-shell > main { min-width: 0 !important; - padding: 20px !important; - border-radius: 24px !important; + padding: 12px !important; + border-radius: 20px !important; } .student-training-shell > main > .task-card, .student-training-shell > main > .process-workbench, .student-training-shell > main > .factors-workbench, .student-training-shell > main > .workbench { - padding: 14px 16px !important; + padding: 10px 12px !important; + border-radius: 16px !important; +} + +/* 产品开发主要流程的信息层级较多,收紧装饰性边距,为甘特图等实操区域留出横向空间。 */ +#app .studentLayout .app-main:has(.student-training-shell) .student-training-shell.product-process { + gap: 10px !important; + padding: 10px 10px 16px !important; +} + +#app .studentLayout .app-main:has(.student-training-shell) .student-training-shell.product-process > main { + padding: 12px !important; border-radius: 20px !important; } +#app .studentLayout .app-main:has(.student-training-shell) .student-training-shell.product-process .process-workbench { + padding: 10px 12px !important; + border-radius: 16px !important; +} + +#app .studentLayout .app-main:has(.student-training-shell) .student-training-shell.product-process .process-step-card { + padding: 12px !important; + border-radius: 16px !important; +} + +#app .studentLayout .app-main:has(.student-training-shell) .student-training-shell.product-process .task-header { + margin-bottom: 12px !important; +} + +#app .studentLayout .app-main:has(.student-training-shell) .student-training-shell.product-process .workbench-head { + margin-bottom: 12px !important; + padding-bottom: 10px !important; +} + +#app .studentLayout .app-main:has(.student-training-shell) .student-training-shell.product-process .workbench-head--actions-only { + margin-bottom: 6px !important; + padding-bottom: 0 !important; +} + +#app .studentLayout .app-main:has(.student-training-shell) .student-training-shell.product-process .step-indicator { + margin-bottom: 12px !important; +} + .student-training-shell .step-card, .student-training-shell .process-step-card, .student-training-shell .factor-step-card { - padding: 16px !important; - border-radius: 20px !important; + padding: 12px !important; + border-radius: 16px !important; } .student-training-shell .task-header { - margin-bottom: 16px !important; + margin-bottom: 12px !important; } .student-training-shell .task-header .task-title { @@ -106,7 +145,7 @@ justify-content: space-between !important; gap: 6px !important; width: 100% !important; - margin: 0 0 18px !important; + margin: 0 0 12px !important; padding: 6px !important; border: 1px solid var(--student-panel-border) !important; border-radius: var(--student-radius-pill) !important; @@ -156,7 +195,7 @@ justify-content: space-between !important; gap: 6px !important; width: 100% !important; - margin: 0 0 24px !important; + margin: 0 0 12px !important; padding: 6px !important; border: 1px solid var(--student-panel-border) !important; border-radius: 60px !important; diff --git a/src/views/components/TrainingAiSidebar.vue b/src/views/components/TrainingAiSidebar.vue index 15657dc..ed98556 100644 --- a/src/views/components/TrainingAiSidebar.vue +++ b/src/views/components/TrainingAiSidebar.vue @@ -9,7 +9,13 @@

点击参考提示词可自动带入问题,AI 将结合当前实训内容给出建议。

-

{{ displayAssistMessage }}

+
+

{{ displayAssistMessage }}

+
+ {{ message.role === "student" ? "我" : "AI助学" }} + {{ message.content }} +
+