|
|
|
@ -169,7 +169,7 @@
|
|
|
|
<p v-if="stepThreeResult" class="result-message" :class="{ success: stepThreeResult.valid }">{{ stepThreeResult.message }}</p>
|
|
|
|
<p v-if="stepThreeResult" class="result-message" :class="{ success: stepThreeResult.valid }">{{ stepThreeResult.message }}</p>
|
|
|
|
<div class="task-actions">
|
|
|
|
<div class="task-actions">
|
|
|
|
<button type="button" class="btn-nav" :disabled="savingStepThree" @click="switchStep(2)"><el-icon><ArrowLeft /></el-icon>返回第 2 步</button>
|
|
|
|
<button type="button" class="btn-nav" :disabled="savingStepThree" @click="switchStep(2)"><el-icon><ArrowLeft /></el-icon>返回第 2 步</button>
|
|
|
|
<button type="button" class="btn-nav btn-submit" :disabled="savingStepThree" @click="validateAndSaveStepThree">{{ savingStepThree ? '保存中…' : '保存并进入第 4 步' }}<el-icon><ArrowRight /></el-icon></button>
|
|
|
|
<button type="button" class="btn-nav btn-submit" :disabled="savingStepThree" @click="validateAndSaveStepThree">{{ savingStepThree ? '提交中…' : '校验并提交任务' }}<el-icon><ArrowRight /></el-icon></button>
|
|
|
|
</div>
|
|
|
|
</div>
|
|
|
|
</section>
|
|
|
|
</section>
|
|
|
|
|
|
|
|
|
|
|
|
@ -279,8 +279,11 @@ const POLICY_SUMMARY_ROWS = [
|
|
|
|
{ id: "response-commitment", label: "响应承诺" },
|
|
|
|
{ id: "response-commitment", label: "响应承诺" },
|
|
|
|
{ id: "featured-service", label: "特色服务" },
|
|
|
|
{ id: "featured-service", label: "特色服务" },
|
|
|
|
];
|
|
|
|
];
|
|
|
|
const fallbackSteps = ["故障类型分类", "服务分级与处理方案", "售后服务流程设计", "服务闭环优化"];
|
|
|
|
const fallbackSteps = ["故障类型分类", "服务分级与处理方案", "售后服务流程设计"];
|
|
|
|
const trainingSteps = computed(() => parseTrainingArray(taskConfig.value?.steps, fallbackSteps));
|
|
|
|
const trainingSteps = computed(() => {
|
|
|
|
|
|
|
|
const configuredSteps = parseTrainingArray(taskConfig.value?.steps, fallbackSteps);
|
|
|
|
|
|
|
|
return fallbackSteps.map((fallbackStep, index) => configuredSteps[index] || fallbackStep);
|
|
|
|
|
|
|
|
});
|
|
|
|
const taskTitle = computed(() => taskConfig.value?.taskName || basePage.title || "售后服务流程设计");
|
|
|
|
const taskTitle = computed(() => taskConfig.value?.taskName || basePage.title || "售后服务流程设计");
|
|
|
|
const taskBackground = computed(() => taskConfig.value?.background || basePage.background);
|
|
|
|
const taskBackground = computed(() => taskConfig.value?.background || basePage.background);
|
|
|
|
const taskRequirement = computed(() => taskConfig.value?.requirements || basePage.task);
|
|
|
|
const taskRequirement = computed(() => taskConfig.value?.requirements || basePage.task);
|
|
|
|
@ -337,7 +340,7 @@ function buildStepThreeAnswer() {
|
|
|
|
updatedAt: new Date().toISOString(),
|
|
|
|
updatedAt: new Date().toISOString(),
|
|
|
|
};
|
|
|
|
};
|
|
|
|
}
|
|
|
|
}
|
|
|
|
async function persist(saveAction = "SAVE") { await saveStudentTrainingAnswer(TASK_KEY, { saveAction, currentStep: currentStep.value, step1Answer: JSON.stringify(buildStepOneAnswer()), step2Answer: JSON.stringify(buildStepTwoAnswer()), step3Answer: JSON.stringify(buildStepThreeAnswer()) }); }
|
|
|
|
async function persist(saveAction = "SAVE") { await saveStudentTrainingAnswer(TASK_KEY, { saveAction, currentStep: currentStep.value, submitted: saveAction === "SUBMIT", step1Answer: JSON.stringify(buildStepOneAnswer()), step2Answer: JSON.stringify(buildStepTwoAnswer()), step3Answer: JSON.stringify(buildStepThreeAnswer()) }); }
|
|
|
|
async function loadTaskConfig() { try { const response = await getTrainingTaskByKey(TASK_KEY); taskConfig.value = response?.data || null; currentStep.value = normalizeStep(currentStep.value); } catch (error) { taskConfig.value = null; } }
|
|
|
|
async function loadTaskConfig() { try { const response = await getTrainingTaskByKey(TASK_KEY); taskConfig.value = response?.data || null; currentStep.value = normalizeStep(currentStep.value); } catch (error) { taskConfig.value = null; } }
|
|
|
|
async function loadSavedProgress() {
|
|
|
|
async function loadSavedProgress() {
|
|
|
|
try {
|
|
|
|
try {
|
|
|
|
@ -413,7 +416,7 @@ async function validateAndSaveStepThree() {
|
|
|
|
const answer = buildStepThreeAnswer(); const response = await checkAfterSalesServiceStepThree(answer);
|
|
|
|
const answer = buildStepThreeAnswer(); const response = await checkAfterSalesServiceStepThree(answer);
|
|
|
|
stepThreeResult.value = response?.data || null; stepThreePassed.value = Boolean(stepThreeResult.value?.valid);
|
|
|
|
stepThreeResult.value = response?.data || null; stepThreePassed.value = Boolean(stepThreeResult.value?.valid);
|
|
|
|
if (!stepThreePassed.value) { proxy?.$modal?.msgWarning(stepThreeResult.value?.message || "请完成售后政策框架与详情页摘要"); return; }
|
|
|
|
if (!stepThreePassed.value) { proxy?.$modal?.msgWarning(stepThreeResult.value?.message || "请完成售后政策框架与详情页摘要"); return; }
|
|
|
|
currentStep.value = normalizeStep(4); await persist("SAVE"); proxy?.$modal?.msgSuccess("售后政策已保存,已进入第 4 步");
|
|
|
|
currentStep.value = normalizeStep(3); await persist("SUBMIT"); proxy?.$modal?.msgSuccess("售后政策已校验通过,任务提交成功");
|
|
|
|
} catch (error) { proxy?.$modal?.msgError(error?.message || "保存失败,请稍后重试"); } finally { savingStepThree.value = false; }
|
|
|
|
} catch (error) { proxy?.$modal?.msgError(error?.message || "保存失败,请稍后重试"); } finally { savingStepThree.value = false; }
|
|
|
|
}
|
|
|
|
}
|
|
|
|
function switchStep(step) {
|
|
|
|
function switchStep(step) {
|
|
|
|
|