|
|
|
@ -308,7 +308,7 @@
|
|
|
|
<span class="section-number">03</span>
|
|
|
|
<span class="section-number">03</span>
|
|
|
|
<div class="section-info">
|
|
|
|
<div class="section-info">
|
|
|
|
<h4>资料与步骤</h4>
|
|
|
|
<h4>资料与步骤</h4>
|
|
|
|
<p>上传案例资料、案例视频、实训指导手册与AI排错指导手册,配置实训步骤</p>
|
|
|
|
<p>上传案例资料、案例视频、实训指导手册与AI排错指导手册;步骤数量固定,仅可修改步骤名称</p>
|
|
|
|
</div>
|
|
|
|
</div>
|
|
|
|
</div>
|
|
|
|
</div>
|
|
|
|
<div v-for="slot in materialSlots" :key="slot.key" class="material-row">
|
|
|
|
<div v-for="slot in materialSlots" :key="slot.key" class="material-row">
|
|
|
|
@ -344,6 +344,7 @@
|
|
|
|
</div>
|
|
|
|
</div>
|
|
|
|
</div>
|
|
|
|
</div>
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
<!-- 步骤数量与顺序固定,仅允许修改名称 -->
|
|
|
|
<el-form-item label="步骤名称:">
|
|
|
|
<el-form-item label="步骤名称:">
|
|
|
|
<div class="step-list">
|
|
|
|
<div class="step-list">
|
|
|
|
<div v-for="(step, index) in taskForm.steps" :key="step.id" class="step-item">
|
|
|
|
<div v-for="(step, index) in taskForm.steps" :key="step.id" class="step-item">
|
|
|
|
@ -356,25 +357,8 @@
|
|
|
|
<div class="step-content">
|
|
|
|
<div class="step-content">
|
|
|
|
<span class="step-number">{{ index + 1 }}</span>
|
|
|
|
<span class="step-number">{{ index + 1 }}</span>
|
|
|
|
<el-input v-model="step.name" placeholder="步骤名称" />
|
|
|
|
<el-input v-model="step.name" placeholder="步骤名称" />
|
|
|
|
<button v-if="!isReadonly && taskForm.steps.length > 1" type="button"
|
|
|
|
|
|
|
|
class="remove-btn" @click="removeStep(index)">
|
|
|
|
|
|
|
|
<svg width="14" height="14" viewBox="0 0 24 24" fill="none"
|
|
|
|
|
|
|
|
stroke="currentColor" stroke-width="2">
|
|
|
|
|
|
|
|
<polyline points="3 6 5 6 21 6" />
|
|
|
|
|
|
|
|
<path
|
|
|
|
|
|
|
|
d="M19 6v14a2 2 0 01-2 2H7a2 2 0 01-2-2V6m3 0V4a2 2 0 012-2h4a2 2 0 012 2v2" />
|
|
|
|
|
|
|
|
</svg>
|
|
|
|
|
|
|
|
</button>
|
|
|
|
|
|
|
|
</div>
|
|
|
|
</div>
|
|
|
|
</div>
|
|
|
|
</div>
|
|
|
|
<button v-if="!isReadonly" type="button" class="add-step-button" @click="addStep">
|
|
|
|
|
|
|
|
<svg width="14" height="14" viewBox="0 0 24 24" fill="none" stroke="currentColor"
|
|
|
|
|
|
|
|
stroke-width="2">
|
|
|
|
|
|
|
|
<line x1="12" y1="5" x2="12" y2="19" />
|
|
|
|
|
|
|
|
<line x1="5" y1="12" x2="19" y2="12" />
|
|
|
|
|
|
|
|
</svg>
|
|
|
|
|
|
|
|
新增步骤
|
|
|
|
|
|
|
|
</button>
|
|
|
|
|
|
|
|
</div>
|
|
|
|
</div>
|
|
|
|
</el-form-item>
|
|
|
|
</el-form-item>
|
|
|
|
</section>
|
|
|
|
</section>
|
|
|
|
@ -719,15 +703,6 @@ function removeObjective(index) {
|
|
|
|
taskForm.objectives.splice(index, 1)
|
|
|
|
taskForm.objectives.splice(index, 1)
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
function addStep() {
|
|
|
|
|
|
|
|
taskForm.steps.push(createStep())
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
function removeStep(index) {
|
|
|
|
|
|
|
|
if (taskForm.steps.length <= 1) return
|
|
|
|
|
|
|
|
taskForm.steps.splice(index, 1)
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
async function handleMaterialChange(slotKey, file) {
|
|
|
|
async function handleMaterialChange(slotKey, file) {
|
|
|
|
const rawFile = file?.raw
|
|
|
|
const rawFile = file?.raw
|
|
|
|
if (!rawFile) return
|
|
|
|
if (!rawFile) return
|
|
|
|
@ -1473,8 +1448,7 @@ function buildPayload() {
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
.add-objective-button,
|
|
|
|
.add-objective-button {
|
|
|
|
.add-step-button {
|
|
|
|
|
|
|
|
display: flex;
|
|
|
|
display: flex;
|
|
|
|
align-items: center;
|
|
|
|
align-items: center;
|
|
|
|
justify-content: center;
|
|
|
|
justify-content: center;
|
|
|
|
|