From 30bc72da8ca2934c1b941f502695f6d1add835a7 Mon Sep 17 00:00:00 2001 From: qinzhenpen Date: Mon, 21 Sep 2026 17:55:48 +0800 Subject: [PATCH] =?UTF-8?q?=E5=AE=8C=E6=88=90=E4=BA=A7=E5=93=81=E8=A7=84?= =?UTF-8?q?=E5=88=92=E4=B8=8E=E8=AE=BE=E8=AE=A1=E9=A1=B5=E9=9D=A2=E7=9A=84?= =?UTF-8?q?ui=E8=B0=83=E6=95=B4?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/views/product/after-sales-service.vue | 978 +++++++++++++++++-- src/views/product/requirements-doc.vue | 1081 ++++++++++++++++++++- src/views/product/structure.vue | 987 ++++++++++++++++++- 3 files changed, 2931 insertions(+), 115 deletions(-) diff --git a/src/views/product/after-sales-service.vue b/src/views/product/after-sales-service.vue index eed359c..8b7ffdc 100644 --- a/src/views/product/after-sales-service.vue +++ b/src/views/product/after-sales-service.vue @@ -1,30 +1,42 @@ + + diff --git a/src/views/product/requirements-doc.vue b/src/views/product/requirements-doc.vue index 0029e58..5c4bced 100644 --- a/src/views/product/requirements-doc.vue +++ b/src/views/product/requirements-doc.vue @@ -1,23 +1,35 @@ @@ -42,7 +54,7 @@ 拖拽匹配判题 -

PRD 是产品开发的纲领性文件,通常包含文档说明、产品概述、用户需求与场景、核心功能需求、非功能需求、硬件规格与设计需求、测试需求、项目规划和需求变更管理等模块。请把右侧被打乱的“核心作用”卡片拖入左侧对应模块;全部匹配正确后才能进入第 2 步。

+

PRD 是产品开发的纲领性文件,通常包含文档说明、产品概述、用户需求与场景、核心功能需求、非功能需求、硬件规格与设计需求、测试需求、项目规划和需求变更管理等模块。请把右侧被打乱的"核心作用"卡片拖入左侧对应模块;全部匹配正确后才能进入第 2 步。

@@ -105,7 +117,7 @@ 可编辑 PRD 架构表

PRD 的每一个模块都需要言之有物、数据支撑。请基于案例资料和前期实训成果,完成以下七大模块的详细信息。

-
灰色文字为参考示例,可点击“填入示例”后再修改。导出表格会同时包含示例内容和你的填写内容。
+
灰色文字为参考示例,可点击"填入示例"后再修改。导出表格会同时包含示例内容和你的填写内容。
@@ -208,7 +220,6 @@ import { computed, getCurrentInstance, onMounted, ref } from "vue"; import { ArrowRight, Close, Delete, Document, Download, InfoFilled, RefreshLeft, UploadFilled, View } from "@element-plus/icons-vue"; import TrainingAiSidebar from "@/views/components/TrainingAiSidebar.vue"; import TrainingMaterialButton from "@/views/components/TrainingMaterialButton.vue"; -import TrainingTaskBrief from "@/views/components/TrainingTaskBrief.vue"; import { checkRequirementsDocumentStepOne, getStudentTrainingAnswer, previewRequirementsDocumentFile, saveStudentTrainingAnswer, uploadStudentTrainingFile } from "@/api/studentTrainingAnswer"; import { getTrainingTaskByKey } from "@/api/trainingTask"; import { parseTrainingArray } from "@/views/training/taskKeyMap"; @@ -225,11 +236,11 @@ const MODULES = [ const PURPOSES = [ { id: "functional-scope", text: "详细规定产品具体做什么,是开发与测试的直接依据。" }, { id: "acceptance-criteria", text: "明确验收标准,避免测试与产品理解不一致。" }, - { id: "quality-attributes", text: "定义产品的“质量属性”,决定产品好不好用、稳不稳定。" }, + { id: "quality-attributes", text: "定义产品的「质量属性」,决定产品好不好用、稳不稳定。" }, { id: "document-governance", text: "建立文档本身的权威性与可追溯性,确保所有人看到的是同一份有效版本。" }, { id: "change-control", text: "确保每一次变更都经过评估、记录和通知。" }, { id: "user-context", text: "从用户视角出发,让团队在开发时能代入真实使用情境。" }, - { id: "product-boundary", text: "回答“为什么做”和“做成什么样”,赋予开发团队价值感,划定产品边界。" }, + { id: "product-boundary", text: "回答「为什么做」和「做成什么样」,赋予开发团队价值感,划定产品边界。" }, { id: "hardware-constraints", text: "明确硬件与软件的通信协议及设计约束。" }, { id: "resource-plan", text: "将产品需求转化为时间与资源计划,用于管理预期。" }, ]; @@ -282,6 +293,7 @@ const fallbackTask = { }; const taskConfig = ref(null); +const briefOpen = ref(false); const currentStep = ref(1); const assignments = ref({}); const stepTwoContents = ref({}); @@ -521,18 +533,1029 @@ function goNextStep() { switchStep(2); } function exportOutcome() { if (currentStep.value === 2) { exportStepTwoTable(); } else if (currentStep.value === 3 && isDocumentReady.value) { showDocumentPreview.value = true; } else { proxy?.$modal?.msgInfo("请进入第 2 步导出 PRD 详细信息表。"); } } - + + diff --git a/src/views/product/structure.vue b/src/views/product/structure.vue index 7521baa..2015471 100644 --- a/src/views/product/structure.vue +++ b/src/views/product/structure.vue @@ -1,36 +1,41 @@