<sectionclass="decision-section"><h3>(1)总体竞争态势评估</h3><p>请选择该产品进入目标市场的总体竞争判断:</p><divclass="radio-options"><labelv-for="option in evaluationOptions" :key="option"><inputv-model="finalForm.overallEvaluation":disabled="!stepThreePassed"type="radio"name="competitive-evaluation":value="option"/><span>{{option}}</span></label></div></section>
<sectionclass="decision-section"><h3>(1)优先策略排序</h3><pclass="section-tip">策略内容由第3步填写的“具体策略建议”自动带入;请完成优先级排序并说明理由。</p><divclass="priority-table-wrap"><tableclass="priority-table"><thead><tr><th>优先级排序</th><th>策略</th><th>理由</th></tr></thead><tbody><trv-for="row in strategyDefinitions" :key="row.key"><td><select v-model.number="finalForm.priorities[row.key].priority" :disabled="!stepThreePassed" :aria-label="`${row.label} 的优先级排序`"><option :value="null">请选择</option><option v-for="rank in 4" :key="rank" :value="rank">{{rank}}</option></select></td><tdclass="priority-strategy"><strong>{{row.label}}</strong><p>{{strategyForm[row.key].recommendation||'请先在第 3 步填写该策略建议'}}</p></td><td><textareav-model.trim="finalForm.priorities[row.key].reason":disabled="!stepThreePassed"placeholder="说明该策略的排序理由"/></td></tr></tbody></table></div></section>
<sectionclass="decision-section"><h3>(2)优先策略排序</h3><pclass="section-tip">策略内容由第3步填写的“具体策略建议”自动带入;请完成优先级排序并说明理由。</p><divclass="priority-table-wrap"><tableclass="priority-table"><thead><tr><th>优先级排序</th><th>策略</th><th>理由</th></tr></thead><tbody><trv-for="row in strategyDefinitions" :key="row.key"><td><select v-model.number="finalForm.priorities[row.key].priority" :disabled="!stepThreePassed" :aria-label="`${row.label} 的优先级排序`"><option :value="null">请选择</option><option v-for="rank in 4" :key="rank" :value="rank">{{rank}}</option></select></td><tdclass="priority-strategy"><strong>{{row.label}}</strong><p>{{strategyForm[row.key].recommendation||'请先在第 3 步填写该策略建议'}}</p></td><td><textareav-model.trim="finalForm.priorities[row.key].reason":disabled="!stepThreePassed"placeholder="说明该策略的排序理由"/></td></tr></tbody></table></div></section>
asyncfunctionloadSavedAnswer(){try{constanswer=(awaitgetStudentTrainingAnswer(TASK_KEY))?.data;if(answer?.step1Answer){restoreOutcome(answer.step1Answer,form);stepOnePassed.value=true;clearDraft();}if(answer?.step2Answer){restoreOutcome(answer.step2Answer,supplementForm,"supplements");stepTwoPassed.value=true;}if(answer?.step3Answer){restoreStrategyOutcome(answer.step3Answer);stepThreePassed.value=true;}if(answer?.step4Answer)restoreFinalOutcome(answer.step4Answer);if(Number(answer?.currentStep)>0)currentStep.value=Number(answer.currentStep);}catch(error){/* Keep local draft when unavailable. */}}
asyncfunctionloadSavedAnswer(){try{constanswer=(awaitgetStudentTrainingAnswer(TASK_KEY))?.data;if(answer?.step1Answer){restoreOutcome(answer.step1Answer,form);stepOnePassed.value=true;clearDraft();}if(answer?.step2Answer){restoreOutcome(answer.step2Answer,supplementForm,"supplements");stepTwoPassed.value=true;}if(answer?.step3Answer){restoreStrategyOutcome(answer.step3Answer);stepThreePassed.value=true;}if(answer?.step4Answer)restoreFinalOutcome(answer.step4Answer);if(Number(answer?.currentStep)>0)currentStep.value=Number(answer.currentStep);}catch(error){/* Keep local draft when unavailable. */}}
@ -92,7 +90,7 @@ function switchStep(step) { if (step === 2 && !stepOnePassed.value) { proxy?.$mo
asyncfunctionresetTraining(){form.value=createForm();supplementForm.value=createForm();strategyForm.value=createStrategyForm();finalForm.value=createFinalForm();stepOnePassed.value=false;stepTwoPassed.value=false;stepThreePassed.value=false;currentStep.value=1;clearDraft();try{saving.value=true;awaitsaveStudentTrainingAnswer(TASK_KEY,{step1Answer:JSON.stringify(buildStepOneOutcome()),currentStep:1,submitted:false,saveAction:"RESET"});}catch(error){/* Local clearing still succeeds. */}finally{saving.value=false;}proxy?.$modal?.msgSuccess("已清空填写内容");}
asyncfunctionresetTraining(){form.value=createForm();supplementForm.value=createForm();strategyForm.value=createStrategyForm();finalForm.value=createFinalForm();stepOnePassed.value=false;stepTwoPassed.value=false;stepThreePassed.value=false;currentStep.value=1;clearDraft();try{saving.value=true;awaitsaveStudentTrainingAnswer(TASK_KEY,{step1Answer:JSON.stringify(buildStepOneOutcome()),currentStep:1,submitted:false,saveAction:"RESET"});}catch(error){/* Local clearing still succeeds. */}finally{saving.value=false;}proxy?.$modal?.msgSuccess("已清空填写内容");}
asyncfunctionloadSavedAnswer(){try{constanswer=(awaitgetStudentTrainingAnswer(TASK_KEY))?.data;if(answer?.step1Answer){constparsed=JSON.parse(answer.step1Answer);answers.value={...createAnswers(),...(parsed?.answers||parsed||{})};stepOnePassed.value=indicators.every((item)=>answers.value[item.id]===item.group);}if(answer?.step2Answer){constparsed=JSON.parse(answer.step2Answer);primaryWeights.value={...createPrimaryWeights(),...(parsed?.primaryWeights||{})};weights.value={...createWeights(),...(parsed?.dimensionWeights||parsed?.weights||{})};stepTwoPassed.value=stepOnePassed.value&&categories.every((group)=>isIntegerWeight(primaryWeights.value[group]))&&indicators.every((item)=>isIntegerWeight(weights.value[item.id]))&&primaryWeightTotal.value===100&&categories.every((group)=>dimensionWeightTotal(group)===100);}if(answer?.step3Answer){constparsed=JSON.parse(answer.step3Answer);scores.value={...createScores(),...(parsed?.scores||parsed||{})};stepThreePassed.value=stepTwoPassed.value;}if(answer?.step4Answer){constparsed=JSON.parse(answer.step4Answer);visualization.value={url:parsed?.visualization?.url||"",name:parsed?.visualization?.name||""};stepFourPassed.value=stepThreePassed.value&&Boolean(visualization.value.url);}if(answer?.dynamicStepAnswers){constparsed=JSON.parse(answer.dynamicStepAnswers);dynamicStepAnswers.value=parsed&&typeofparsed==="object"?parsed:{};reviewInsights.value={...createReviewInsights(),...(dynamicStepAnswers.value?.step5?.reviewInsights||{})};developmentConclusion.value=String(dynamicStepAnswers.value?.step6?.developmentConclusion||"");stepFivePassed.value=stepFourPassed.value&&hasCompleteReviewInsights();}constsavedStep=Number(answer?.currentStep)||1;currentStep.value=stepFivePassed.value?Math.min(savedStep,6):stepFourPassed.value?Math.min(savedStep,5):stepThreePassed.value?Math.min(savedStep,4):stepTwoPassed.value?Math.min(savedStep,3):stepOnePassed.value?Math.min(savedStep,2):1;}catch(error){/* Keep the page available when history cannot be restored. */}}
asyncfunctionloadSavedAnswer(){try{constanswer=(awaitgetStudentTrainingAnswer(TASK_KEY))?.data;if(answer?.step1Answer){constparsed=JSON.parse(answer.step1Answer);answers.value={...createAnswers(),...(parsed?.answers||parsed||{})};stepOnePassed.value=indicators.every((item)=>answers.value[item.id]===item.group);}if(answer?.step2Answer){constparsed=JSON.parse(answer.step2Answer);constsavedPrimaryWeights={...createPrimaryWeights(),...(parsed?.primaryWeights||{})};constsavedDimensionWeights={...createWeights(),...(parsed?.dimensionWeights||parsed?.weights||{})};if(isValidSavedStepTwoOutcome(savedPrimaryWeights,savedDimensionWeights)){primaryWeights.value=savedPrimaryWeights;weights.value=savedDimensionWeights;stepTwoPassed.value=stepOnePassed.value;}else{primaryWeights.value=createPrimaryWeights();weights.value=createWeights();stepTwoPassed.value=false;}}if(answer?.step3Answer){constparsed=JSON.parse(answer.step3Answer);scores.value={...createScores(),...(parsed?.scores||parsed||{})};stepThreePassed.value=stepTwoPassed.value;}if(answer?.step4Answer){constparsed=JSON.parse(answer.step4Answer);visualization.value={url:parsed?.visualization?.url||"",name:parsed?.visualization?.name||""};stepFourPassed.value=stepThreePassed.value&&Boolean(visualization.value.url);}if(answer?.dynamicStepAnswers){constparsed=JSON.parse(answer.dynamicStepAnswers);dynamicStepAnswers.value=parsed&&typeofparsed==="object"?parsed:{};reviewInsights.value={...createReviewInsights(),...(dynamicStepAnswers.value?.step5?.reviewInsights||{})};developmentConclusion.value=String(dynamicStepAnswers.value?.step6?.developmentConclusion||"");stepFivePassed.value=stepFourPassed.value&&hasCompleteReviewInsights();}constsavedStep=Number(answer?.currentStep)||1;currentStep.value=stepFivePassed.value?Math.min(savedStep,6):stepFourPassed.value?Math.min(savedStep,5):stepThreePassed.value?Math.min(savedStep,4):stepTwoPassed.value?Math.min(savedStep,3):stepOnePassed.value?Math.min(savedStep,2):1;}catch(error){/* Keep the page available when history cannot be restored. */}}