diff --git a/src/views/assessment/diagnosis.vue b/src/views/assessment/diagnosis.vue
index 0e868d3..b73884b 100644
--- a/src/views/assessment/diagnosis.vue
+++ b/src/views/assessment/diagnosis.vue
@@ -8,10 +8,14 @@
- 从曝光到复购逐层计算渠道转化率,并与行业均值比较,定位产品运营环节中的异常流失。 从用户触达产品的全路径出发,搭建从曝光到复购的完整数据漏斗,逐层计算各环节转化率并对比行业均值,定位产品在哪个环节出现了明显异常流失。 根据案例数据填写各渠道链路节点转化率,数值以百分比(%)填写。 根据上述转化率绘制各渠道与行业均值的节点转化漏斗对比图。 支持 PNG、JPG、WEBP 格式,图片不超过 5MB;上传后可点击预览。 对比行业均值数据,定位异常节点并填写分析与判定。 对比行业均值数据,定位异常节点并填写分析与判定。 说明:默认展示一行可填写,最少一行,可增加行,最多 5 行;诊断异常节点须从上表已填写渠道中选择。 找到根因后,还需要通过 AB 测试验证改进方案是否真正有效:将用户随机分为维持原方案的对照组和应用改进方案的实验组,用关键指标差异判断方案是否值得落地。 请基于前两步的漏斗异常与评论根因,设计 AB 测试方案。 填写案例资料中的对照组与实验组数据,并逐项给出判定与分析。 绘制 AB 测试结果对比图并上传,作为改进方案的可视化证据。 支持 PNG、JPG、WEBP 格式,图片不超过 5MB;上传后可点击预览。 结合全链路漏斗、评论根因与 AB 测试对照结果,明确产品问题及下一轮优化动作。 找到根因后,还需验证“改进方案是否真的有效”,避免拍脑袋迭代。AB测试对照诊断法将用户随机分为对照组(维持原方案)和实验组(应用改进方案),对比两组关键指标差异,用数据判断改进方案是否值得落地。 请基于案例资料,针对步骤一和步骤二分析结果,设计 AB 测试方案。 请从案例资料中获取 AB 测试两组数据,计算后填入下表并逐项判定。 绘制 AB 测试结果对比图并上传,作为改进方案的可视化证据。 支持 PNG、JPG、WEBP 格式,图片不超过 5MB;上传后可点击预览。 结合全链路数据漏斗诊断、售后评论分析法及 AB 测试对照诊断,分析产品存在的问题,并提出具体迭代优化建议。计算各节点转化率
链路节点 天猫 京东 抖音 拼多多 行业均值 {{ row.linkNode }} 全链路转化漏斗可视化
定位异常节点
渠道 链路节点 店铺转化率 行业均值转化率 异常分析与判定 定位异常节点
渠道 链路节点 店铺转化率 行业均值转化率 异常分析与判定 确定测试方案
AB 测试数据填报
测试指标 对照组数据 实验组数据 判定与分析 {{ row.metric }} 可视化呈现
诊断结论与迭代优化建议
确定测试方案
AB测试数据填报
测试指标 对照组数据 实验组数据 判定与分析 {{ row.metric }} 可视化呈现
诊断结论与迭代优化建议
帕累托图必须根据步骤二已完成的ABC分层数据绘制;未上传图片时,不能进入下一步或提交任务。
@@ -181,6 +195,8 @@ import { parseTrainingArray } from "@/views/training/taskKeyMap"; import { isStudentDemo } from "@/utils/studentDemo"; const TASK_KEY = "category-optimization"; +const PARETO_GUIDE_URL = "/file/training-materials/category-optimization/20.实训操作说明.docx"; +const PARETO_TEMPLATE_URL = "/file/training-materials/category-optimization/20.帕累托绘制自动化模版.xlsx"; const MAX_ROWS = 30; const taskConfig = ref(null); const activeStep = ref(1); @@ -291,6 +307,16 @@ async function handleParetoUpload(event) { } catch (error) { ElMessage.error(error?.message || "帕累托图上传失败,请重试"); } finally { uploadingPareto.value = false; } } function removeParetoImage() { if (paretoImage.value.url.startsWith("blob:")) URL.revokeObjectURL(paretoImage.value.url); paretoImage.value = { url: "", name: "" }; } +function downloadParetoGuide() { downloadBuiltInFile(PARETO_GUIDE_URL, "20.实训操作说明.docx"); } +function downloadParetoTemplate() { downloadBuiltInFile(PARETO_TEMPLATE_URL, "20.帕累托绘制自动化模版.xlsx"); } +function downloadBuiltInFile(url, fileName) { + const link = document.createElement("a"); + link.href = url; + link.download = fileName; + document.body.appendChild(link); + link.click(); + document.body.removeChild(link); +} function handleProductChange() { if (stepFour.value.recommendedClassification === selectedProduct.value?.abcClassification) stepFour.value.recommendedClassification = ""; } async function validateStepFour() { try { @@ -359,6 +385,7 @@ onMounted(async () => { .category-step{padding:24px}.instruction{margin:0 0 20px;color:#d8edf5;font-size:15px;line-height:1.75}.table-toolbar{display:flex;justify-content:space-between;gap:14px;margin-bottom:12px;color:var(--muted);font-size:13px}.action-button--muted{border-color:rgba(158,192,207,.35);background:rgba(75,101,112,.25)}.category-table-wrap{overflow-x:auto;border:1px solid var(--line);border-radius:12px}.category-table{width:100%;min-width:1260px;border-collapse:collapse}.category-table th,.category-table td{padding:10px;border-right:1px solid var(--line);border-bottom:1px solid var(--line);text-align:center}.category-table th{color:#e6f9ff;background:rgba(23,112,150,.42);font-size:13px;white-space:nowrap}.category-table td{background:rgba(2,18,28,.32)}.category-table tr:last-child td{border-bottom:0}.category-table th:last-child,.category-table td:last-child{border-right:0}.empty-cell{height:88px;color:var(--muted)}.abc-table{min-width:900px}.abc-table :deep(.el-select){width:100%;min-width:180px} .rule-notice{margin-top:20px;padding:16px 18px;border:1px solid rgba(255,112,112,.46);border-radius:12px;background:rgba(126,31,35,.15);color:#ffd5d5}.rule-notice strong{color:#ff9292}.rule-notice p{margin:8px 0 0;line-height:1.65}.analysis-step{padding:24px}.analysis-tabs{display:flex;gap:10px;margin-bottom:18px}.analysis-tabs button{padding:9px 14px;border:1px solid var(--line);border-radius:8px;color:var(--muted);background:transparent;font:inherit;cursor:pointer}.analysis-tabs button.active{color:white;border-color:#71dfff;background:rgba(12,114,159,.48)}.business-workspace{overflow:hidden;border:1px solid var(--line);border-radius:14px}.step-navigation{justify-content:center;padding:20px 24px 0}.nav-button--save,.nav-button--primary{border-color:#71dfff;background:linear-gradient(100deg,#0d80b7,#09638f)}.training-actions{justify-content:center;gap:28px;padding:26px 24px}.training-actions :deep(.training-action){min-width:160px;height:50px;border-color:#2c83aa;color:#dff7ff;background:rgba(13,64,88,.62);font-size:17px;font-weight:800} .pareto-upload-panel{display:flex;flex-direction:column;align-items:center;justify-content:center;gap:12px;min-height:330px;padding:26px;border:1px dashed rgba(113,223,255,.7);border-radius:16px;background:linear-gradient(135deg,rgba(5,47,69,.7),rgba(4,23,35,.58));text-align:center}.file-input{display:none}.upload-icon{font-size:42px;color:#71dfff}.pareto-upload-panel>strong{font-size:20px}.pareto-upload-panel>span,.upload-file-meta span{color:var(--muted);font-size:13px}.pareto-preview{width:min(100%,760px);height:270px;border:1px solid var(--line);border-radius:10px;background:rgba(0,10,18,.65);cursor:zoom-in}.upload-file-meta{display:grid;gap:5px;max-width:100%;word-break:break-all}.pareto-actions{display:flex;flex-wrap:wrap;justify-content:center;gap:10px}.danger-action{border-color:rgba(255,145,145,.6);color:#ffd7d7;background:rgba(130,43,43,.23)} +.pareto-materials{display:flex;align-items:center;justify-content:space-between;gap:22px;margin-top:20px;padding:18px 20px;border-left:3px solid var(--accent);border-radius:0 14px 14px 0;background:rgba(11,79,109,.22);color:#d8edf5}.pareto-materials h3{margin:0 0 8px;font-size:16px}.pareto-materials ol{margin:0;padding-left:20px;line-height:1.8}.pareto-materials__actions{display:grid;flex:0 0 178px;gap:10px}.action-button--primary{border-color:#71dfff;background:linear-gradient(100deg,#0d80b7,#09638f)} .strategy-step{display:grid;gap:16px}.subsection-heading{margin:8px 0 0;font-size:18px}.subsection-copy{margin:-8px 0 0;color:var(--muted);line-height:1.6}.category-matrix{position:relative;width:min(100%,820px);height:430px;margin:12px auto 22px;padding:38px 52px 52px 78px}.matrix-grid{display:grid;grid-template-columns:1fr 1fr;grid-template-rows:1fr 1fr;width:100%;height:100%;border-left:2px solid rgba(185,240,255,.82);border-bottom:2px solid rgba(185,240,255,.82);background:linear-gradient(135deg,rgba(24,169,209,.12),rgba(3,25,38,.16))}.matrix-cell{display:grid;place-content:center;gap:7px;padding:18px;border-right:1px solid rgba(185,240,255,.65);border-bottom:1px solid rgba(185,240,255,.65);text-align:center}.matrix-cell:nth-child(2n){border-right:0}.matrix-cell:nth-child(n+3){border-bottom:0}.matrix-cell strong{font-size:18px}.matrix-cell small{color:#8dddf5}.matrix-y-title,.matrix-x-title,.matrix-y-high,.matrix-y-low,.matrix-x-high,.matrix-x-low{position:absolute;color:#d9f8ff;font-weight:800}.matrix-y-title{top:5px;left:78px}.matrix-x-title{right:0;bottom:15px}.matrix-y-high{top:63px;left:39px}.matrix-y-low{bottom:61px;left:39px}.matrix-x-low{bottom:29px;left:79px}.matrix-x-high{right:44px;bottom:29px}.matrix-inputs{display:grid;grid-template-columns:minmax(210px,.42fr) 1fr;gap:16px}.matrix-inputs label{display:grid;gap:8px;color:#d9f8ff;font-weight:700}.strategy-table{min-width:1120px}.strategy-table td{vertical-align:top}.strategy-table :deep(.el-select){width:100%;min-width:160px}.strategy-table :deep(.el-textarea__inner){min-height:78px}.current-classification{display:inline-block;padding:8px 10px;border-radius:8px;color:#a5efff;background:rgba(17,126,178,.24);white-space:nowrap} .operations-table{min-width:1050px}.operations-table th{color:#fff;background:linear-gradient(100deg,#08a6df,#098bc1);font-size:16px}.operations-table td{vertical-align:middle}.operations-table td:first-child{width:17%;font-weight:800}.operations-table td:nth-child(2){width:34%}.operations-table td:nth-child(3){width:25%}.operations-table td:last-child{width:24%}.operations-table :deep(.el-textarea__inner){min-height:86px;text-align:left}.operations-table :deep(.el-select){width:100%;min-width:160px}.layer-cell{color:#dff8ff;font-size:16px;background:rgba(15,103,137,.18)!important} :deep(.el-input__wrapper){background:rgba(1,15,25,.76);box-shadow:0 0 0 1px rgba(94,213,245,.28) inset}:deep(.el-input__inner){color:#fff;text-align:center}@media(max-width:1100px){.optimization{grid-template-columns:1fr}}@media(max-width:720px){.optimization{padding:12px}.training-core{padding:16px;border-radius:20px}.workbench-head,.table-toolbar{flex-direction:column;align-items:stretch}.workbench-actions,.table-toolbar>div,.step-navigation,.training-actions{justify-content:stretch}.workbench-actions>*,.action-button,.nav-button,.training-actions :deep(.training-action){flex:1;width:100%}.category-step,.analysis-step{padding:16px}} diff --git a/src/views/channel/index.vue b/src/views/channel/index.vue index b762b46..0ee1b27 100644 --- a/src/views/channel/index.vue +++ b/src/views/channel/index.vue @@ -154,6 +154,7 @@ import codemirror from "@/components/codemirror/index.vue"; import popModel from "@/views/components/popModal.vue"; const { proxy } = getCurrentInstance(); const TASK_KEY = "purchase-demand-forecast"; +const PURCHASE_DEMAND_FORECAST_GUIDE_URL = "/file/training-materials/purchase-demand-forecast/18.实训操作说明.docx"; const taskConfig = ref(null); const activeStep = ref(1); const saving = ref(false); @@ -537,14 +538,15 @@ const drawForecastChart = () => { window.addEventListener("resize", () => myChart.resize()); }; function downloadPracticeGuide() { - const content = "采购需求预测实训操作说明\n\n1. 根据案例给出的 12 个月销量数据,使用 FORECAST.LINEAR(WPS 可使用 FORECAST)函数预测 t=13、t=14、t=15。\n2. 将每个月的预测结果取整后,填写到预测表中。\n3. 将已知 12 个月销量和未来 3 个月预测值制作成散点图,并添加趋势线。\n4. 导出图形后上传至第 2 步,确认图中能清晰呈现历史销量、预测值和整体走势。"; - const blob = new Blob([content], { type: "text/plain;charset=utf-8" }); - const url = URL.createObjectURL(blob); + downloadBuiltInFile(PURCHASE_DEMAND_FORECAST_GUIDE_URL, "18.实训操作说明.docx"); +} +function downloadBuiltInFile(url, fileName) { const link = document.createElement("a"); link.href = url; - link.download = "采购需求预测-实训操作说明.txt"; + link.download = fileName; + document.body.appendChild(link); link.click(); - URL.revokeObjectURL(url); + document.body.removeChild(link); } function clearDemandForecastChart() { const imageUrl = String(demandForecastChart.value?.url || ""); diff --git a/src/views/demand/consumer-behavior.vue b/src/views/demand/consumer-behavior.vue index 6ddd57e..8ba7a81 100644 --- a/src/views/demand/consumer-behavior.vue +++ b/src/views/demand/consumer-behavior.vue @@ -163,6 +163,19 @@ 已编辑 {{ form.questionnaireQuestions.length }} 题;{{ form.questionnaireImport?.name ? "已导入 1 份 Word 问卷,可随时预览。" : "也可导入已完成的 .docx 问卷。" }} +1. 使用本系统问卷编辑器,自行编辑问卷。
+2. 下载参考问卷 Word 模板,在本地修改后上传导入。
+3. 也可使用 AI 辅助生成,问卷应包含基本信息、购买行为、需求偏好与开放建议。
+请覆盖基本信息、购买行为、需求偏好和开放建议四部分;需求偏好至少设置一题 Likert 五级量表。
@@ -279,6 +292,7 @@ import { parseTrainingArray } from "@/views/training/taskKeyMap"; import { checkConsumerBehaviorStepOne, checkConsumerBehaviorStepTwo, checkConsumerBehaviorStepThree, checkConsumerBehaviorStepFour, getStudentTrainingAnswer, previewConsumerBehaviorQuestionnaireWord, saveStudentTrainingAnswer, uploadStudentTrainingFile } from "@/api/studentTrainingAnswer"; const TASK_KEY = "consumer-behavior"; +const QUESTIONNAIRE_TEMPLATE_URL = "/file/training-materials/consumer-behavior/9.问卷调查报告模板.docx"; const KANO_NEED_LIMIT = 20; let questionnaireQuestionSequence = 0; const { proxy } = getCurrentInstance(); @@ -882,16 +896,21 @@ function surveyReportContentPlaceholder(index) { return ["说明本次问卷调研的背景、目标用户与调研目的。", "说明样本数量、调研时间、调研渠道与数据来源。", "结合问卷数据,分析影响用户购买决策的核心因素。", "比较不同人群在需求、价格、渠道或购买场景上的差异。", "总结调研结论,并提出产品功能、定价或营销建议。"][index] || "请输入报告内容"; } -function downloadSurveyReportTemplate() { - const rows = Array.from({ length: 5 }, (_, index) => `请将步骤三设计的调查问卷导入在线问卷调查平台开展调研,并基于收集到的数据完成本报告。
| 报告模块标题 | 内容 |
|---|
仅支持 .xls、.xlsx 文件,上传后可预览首个工作表的表头和前 20 行数据。
+推荐工具及方法如下,自行选择:
+1. 使用 Excel/WPS 完成 RFM 用户分层分析,可参考《实训操作说明》。
+2. 下载 Excel 模板,填写案例数据并完成计算与可视化。
+