<divclass="swot-table-wrap"><tableclass="swot-table"><thead><tr><th>序号</th><th>SWOT维度</th><th>关键信息要点</th></tr></thead><tbody><trv-for="(row, index) in swotRows" :key="row.key"><td>{{ index + 1 }}</td><td class="dimension-cell">{{row.label}}</td><td><textareav-model.trim="form[row.key]":placeholder="row.placeholder"/></td></tr></tbody></table></div>
<divclass="swot-table-wrap"><tableclass="swot-table"><thead><tr><th>序号</th><th>SWOT维度</th><th>补充信息要点</th></tr></thead><tbody><trv-for="(row, index) in swotRows" :key="row.key"><td>{{ index + 1 }}</td><td class="dimension-cell">{{row.label}}</td><td><textareav-model.trim="supplementForm[row.key]":disabled="!stepOnePassed":placeholder="row.placeholder"/></td></tr></tbody></table></div>
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;awaitdeleteStudentTrainingAnswer(TASK_KEY);}catch(error){/* Local clearing still succeeds. */}finally{saving.value=false;}proxy?.$modal?.msgSuccess("已重新开始本次实训");}
<templatev-for="(step, index) in trainingSteps" :key="`${step}-${index}`">
@ -34,7 +34,7 @@
<tbody><trv-for="(row, index) in pestRows" :key="row.key"><td>{{ index + 1 }}</td><td class="type-cell">{{row.label}}</td><td><textareav-model.trim="form[row.key]":placeholder="row.placeholder"/></td></tr></tbody>
<tbody><trv-for="(row, index) in pestRows" :key="row.key"><td>{{ index + 1 }}</td><td class="type-cell">{{row.label}}</td><td><textareav-model.trim="supplementForm[row.key]":disabled="!stepOnePassed":placeholder="row.placeholder"/></td></tr></tbody>
<tbody><trv-for="row in pestAnalysisRows" :key="row.key"><td class="type-cell">{{row.label}}</td><td><textareav-model.trim="analysisForm[row.key].opportunities":disabled="!stepTwoPassed"placeholder="例如:政策、需求或技术带来的增长机会"/></td><td><textareav-model.trim="analysisForm[row.key].challenges":disabled="!stepTwoPassed"placeholder="例如:合规、成本、竞争或使用门槛"/></td><td><textareav-model.trim="analysisForm[row.key].strategies":disabled="!stepTwoPassed"placeholder="例如:针对挑战给出的产品、运营或合规方案"/></td></tr></tbody>
<sectionclass="conclusion-section"><h4>(4)总结PEST环境评估结论</h4><textareav-model.trim="conclusionForm.summary":disabled="!stepThreePassed"placeholder="总结该产品的 PEST 环境评估结论"/></section>
@ -177,7 +177,9 @@ async function saveAndGoToStepTwo() { if (saving.value) return; saving.value = t
asyncfunctionsaveAndGoToStepThree(){if(saving.value||!stepOnePassed.value)return;saving.value=true;try{awaitcheckIndustryDemandAnalysisStepTwo(supplementForm.value);awaitsaveStudentTrainingAnswer(TASK_KEY,{step2Answer:JSON.stringify(buildStepTwoOutcome()),currentStep:3,submitted:false,saveAction:"SAVE"});stepTwoPassed.value=true;clearDraft();currentStep.value=3;proxy?.$modal?.msgSuccess("已保存,已进入第 3 步");}catch(error){proxy?.$modal?.msgError?.(error?.message||"请为每个 PEST 维度至少补充 1 条信息");}finally{saving.value=false;}}
asyncfunctionsaveAndGoToStepFour(){if(saving.value||!stepTwoPassed.value)return;saving.value=true;try{awaitcheckIndustryDemandAnalysisStepThree({rows:pestAnalysisRows.map((row)=>({dimension:row.key,...analysisForm.value[row.key]}))});awaitsaveStudentTrainingAnswer(TASK_KEY,{step3Answer:JSON.stringify(buildStepThreeOutcome()),currentStep:4,submitted:false,saveAction:"SAVE"});stepThreePassed.value=true;clearDraft();currentStep.value=4;proxy?.$modal?.msgSuccess("已保存,已进入第 4 步");}catch(error){proxy?.$modal?.msgError?.(error?.message||"请完成每个 PEST 维度的机遇、挑战和应对思路");}finally{saving.value=false;}}
asyncfunctionsubmitTraining(){if(saving.value||!stepThreePassed.value)return;saving.value=true;try{awaitcheckIndustryDemandAnalysisStepFour(conclusionForm.value);awaitsaveStudentTrainingAnswer(TASK_KEY,{step4Answer:JSON.stringify(buildStepFourOutcome()),currentStep:4,submitted:true,saveAction:"SUBMIT"});clearDraft();proxy?.$modal?.msgSuccess("任务提交成功");}catch(error){proxy?.$modal?.msgError?.(error?.message||"请完成 PEST 环境评估结论");}finally{saving.value=false;}}
asyncfunctionresetTraining(){form.value=createForm();supplementForm.value=createForm();analysisForm.value=createAnalysisForm();conclusionForm.value=createConclusionForm();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("已清空填写内容");}
asyncfunctionsaveCurrentStepFour(){if(saving.value||!stepThreePassed.value)return;saving.value=true;try{awaitcheckIndustryDemandAnalysisStepFour(conclusionForm.value);awaitsaveStudentTrainingAnswer(TASK_KEY,{step4Answer:JSON.stringify(buildStepFourOutcome()),currentStep:4,submitted:false,saveAction:"SAVE"});clearDraft();proxy?.$modal?.msgSuccess("第 4 步已保存");}catch(error){proxy?.$modal?.msgError?.(error?.message||"请完成 PEST 环境评估结论");}finally{saving.value=false;}}
asyncfunctionresetTraining(){form.value=createForm();supplementForm.value=createForm();analysisForm.value=createAnalysisForm();conclusionForm.value=createConclusionForm();stepOnePassed.value=false;stepTwoPassed.value=false;stepThreePassed.value=false;currentStep.value=1;clearDraft();try{saving.value=true;awaitdeleteStudentTrainingAnswer(TASK_KEY);}catch(error){/* Local clearing still succeeds. */}finally{saving.value=false;}proxy?.$modal?.msgSuccess("已重新开始本次实训");}