# 按钮位置统一调整执行文档 ## 一、目的 将 \产品影响因素分析\ 和 \产品开发流程\ 实训页面的工具栏按钮(素材按钮 + 导出按钮)从 \workbench-head\ 内移到 \ ask-header\ 同级别的 \ ask-action-strip\ 区域,参考页面 \新产品需求调研\ 的标准布局。 ## 二、参考页面结构 \ ew-product-survey.vue\ 的标准布局: \\\html
...
...
\\\ --- ## 七、删除下方步骤中重复的\"提交任务\"按钮 ### 问题描述 顶部 \TrainingTaskToolbar\ 组件已包含\"提交任务\"按钮,但 Step 4 步骤下方也出现了相同的按钮,导致按钮重复。 ### 调整方案 | 按钮 | 位置 | 操作 | |------|------|------| | \"提交任务\" | 顶部 \TrainingTaskToolbar\ | 保留 | | \"提交任务\" | 步骤下方 | **删除**(重复) | | \"清空填写\"/\"清空本步\" | 步骤下方 | 保留 | ### 删除前必须检查的事项 > **重要**:删除按钮前,必须确认该按钮绑定的 \submitTraining\ 方法名是否与顶部组件一致,避免误删导致提交功能失效。 #### 检查清单 1. **确认方法名一致性**: - 检查步骤内按钮绑定的提交方法名(如 \@click=\"submitTraining\"\) - 对比 \TrainingTaskToolbar\ 组件内部的提交方法名 - **两者方法名必须一致才能安全删除重复按钮** 2. **检查功能绑定**: - 确认删除后提交功能的调用链路是否完整 - 确保顶部组件的提交方法与当前页面的数据状态关联正确 3. **保留清空功能**: - \"清空填写\"/\"清空本步\"按钮不调用提交方法,可以保留 ### 具体修改 #### \product-development-factors.vue\(第133行附近) **当前代码:** \\\html
\\\ **修改为:** \\\html
\\\ #### \product-development-process.vue\(第170行附近) **当前代码:** \\\html
\\\ **修改为:** \\\html
\\\ ### 调整对照表 | 文件 | 位置 | 操作 | 保留功能 | |------|------|------|----------| | \product-development-factors.vue\ | Step 4 下方 task-actions | 删除\"提交任务\"按钮 | \"清空填写\"按钮 | | \product-development-process.vue\ | Step 4 下方 task-actions | 删除\"提交任务\"按钮 | \"清空本步\"按钮 | ### 执行检查清单 - [ ] 确认步骤内按钮绑定的 \@click=\"submitTraining\"\ 与 \TrainingTaskToolbar\ 组件内的提交方法名一致 - [ ] 确认顶部 \TrainingTaskToolbar\ 的提交功能正常可用 - [ ] 确认删除后\"清空填写\"/\"清空本步\"按钮仍然保留 - [ ] 删除重复的\"提交任务\"按钮代码 - [ ] 测试提交功能是否正常工作 --- ## 八、产品发布渠道评估 + 产品问题诊断与迭代 调整 ### 8.1 diagnosis.vue(产品问题诊断与迭代) #### 问题描述 `TrainingTaskToolbar` 组件嵌套在 `task-header` 内,导致工具栏随头部一起有边框和背景,不符合标准布局。 #### 调整方案 将 `TrainingTaskToolbar` 从 `task-header` 内移到 `task-header` 同级的独立 `task-action-strip` 区域。 #### 具体修改 **当前代码(第19-20行):** ```html
...
``` **修改为:** ```html
...
``` #### CSS 调整 **删除旧的 `.diagnosis-toolbar` 样式,替换为:** ```css /* 操作工具栏横条:内联布局,去掉悬浮和边框 */ .task-action-strip { margin: 0; padding: 10px 16px; :deep(.training-task-toolbar) { display: flex; flex-wrap: wrap; align-items: center; justify-content: flex-end; gap: 8px; } } ``` **响应式样式更新(720px断点):** ```css @media (max-width: 720px) { .task-action-strip { :deep(.training-task-toolbar) { justify-content: stretch; } :deep(.training-task-toolbar > *) { flex: 1 1 auto; } } } ``` #### 调整对照表 | 文件 | 修改项 | 操作 | |------|--------|------| | diagnosis.vue | 模板结构 | 将 TrainingTaskToolbar 从 task-header 内移到 task-action-strip | | diagnosis.vue | CSS 样式 | 删除 .diagnosis-toolbar,新增 .task-action-strip | --- ### 8.2 promotion.vue(产品发布渠道评估) #### 问题描述 `TrainingTaskToolbar` 已有独立的 `task-action-strip` 区域,但缺少回调属性,导致点击"提交任务"按钮时无法正确调用页面内的提交方法。 #### 调整方案 添加 `:on-submit`、`on-reset` 和 `:on-export` 回调属性,并实现对应的方法。 #### 具体修改 **1. 导入 deleteStudentTrainingAnswer** ```javascript import { deleteStudentTrainingAnswer, getStudentTrainingAnswer, saveStudentTrainingAnswer, ... } from "@/api/studentTrainingAnswer"; ``` **2. 添加回调方法** ```javascript async function submitTask() { return submitEvaluation(); } async function resetTraining() { if (saving.value || validating.value) return; try { await deleteStudentTrainingAnswer(TASK_KEY); restoreBudget(); syncStrategyRows(); restorePerformance(); restoreEvaluation(); ElMessage.success("已清空全部实训步骤,可以重新开始"); } catch (error) { ElMessage.error("重新实训失败,请稍后重试"); } } function exportOutcome() { ElMessage.info("导出功能正在开发中"); } ``` **3. 更新 TrainingTaskToolbar 模板** ```html ``` #### 调整对照表 | 文件 | 修改项 | 操作 | |------|--------|------| | promotion.vue | 导入 | 添加 deleteStudentTrainingAnswer | | promotion.vue | 方法 | 添加 submitTask、resetTraining、exportOutcome | | promotion.vue | 模板 | 更新 TrainingTaskToolbar 添加回调属性 | --- ### 8.3 test/index.vue(产品发布渠道评估) #### 问题描述 该页面原本使用 `TrainingMaterialButton` 组件而非标准的 `TrainingTaskToolbar`,导致缺少"提交任务"、"重新实训"和"导出实训成果"等按钮功能,不符合统一规范。 #### 调整方案 将 `TrainingMaterialButton` 替换为 `TrainingTaskToolbar`,并添加对应的回调方法。 #### 具体修改 **1. 替换导入** ```javascript // 替换前 import TrainingMaterialButton from "@/views/components/TrainingMaterialButton.vue"; // 替换后 import TrainingTaskToolbar from "@/views/components/TrainingTaskToolbar.vue"; ``` **2. 添加导入** ```javascript import { deleteStudentTrainingAnswer, ... } from "@/api/studentTrainingAnswer"; ``` **3. 添加回调方法** ```javascript async function submitTask() { return validateRankingStep(); } async function resetTraining() { if (saving.value || validating.value) return; try { await deleteStudentTrainingAnswer(TASK_KEY); weightRows.value = defaultWeightRows(); channelRows.value = defaultChannelRows(); scoreRows.value = []; rankingRows.value = []; coreChannelAnalysis.value = ""; activeStep.value = 1; ElMessage.success("已清空全部实训步骤,可以重新开始"); } catch (error) { ElMessage.error("重新实训失败,请稍后重试"); } } function exportOutcome() { ElMessage.info("导出功能正在开发中"); } ``` **4. 更新模板** ```html
``` **5. CSS 样式更新** - 移除 `.material-button` 相关样式 - 更新 `.task-action-strip` 为 TrainingTaskToolbar 布局样式 - 添加 `.task-toolbar-button` 和 `.task-toolbar-button--submit` 按钮样式 #### 调整对照表 | 文件 | 修改项 | 操作 | |------|--------|------| | test/index.vue | 导入 | 替换 TrainingMaterialButton 为 TrainingTaskToolbar,添加 deleteStudentTrainingAnswer | | test/index.vue | 方法 | 添加 submitTask、resetTraining、exportOutcome | | test/index.vue | 模板 | 更新 task-action-strip 使用 TrainingTaskToolbar | | test/index.vue | CSS | 更新 task-action-strip 和按钮样式 |