element插件Descriptions中使用v-if的el-select插件出现值混乱

本文介绍了一个在使用v-if时遇到的问题:页面中的性别选择框和下方的学历选择框显示不正常。通过为受影响的表单元素添加唯一key值的方式解决了该问题。
问题描述

使用v-if后,页面中的性别选择框和下方的学历选择框一致了
在这里插入图片描述

解决方法

在性别选框的<el-form-item>中添加:key=“Math.random()”

<template v-if="formData.idnotype > 1">
    <el-descriptions-item label-align="center" name="sex" label="性别" label-class-name="setred">
        <el-form-item prop="sex" :key="Math.random()">
            <el-select
                v-model="formData.sex"
                class="m-2"
                placeholder="请选择性别"
                size="large"
            >
                <el-option
                v-for="item1 in sexList"
                :key="item1.value"
                :label="item1.label"
                :value="item1.value"
                >
                </el-option>
            </el-select>
        </el-form-item>
    </el-descriptions-item>
 </template>
<div class="content"> <!-- 左侧SFC列表 --> <div class="sfc-list"> <div v-for="sfc in sfcList" :key="sfc.sfcNo" :class="['sfc-item', { active: activeSfc?.sfcNo === sfc.sfcNo }]" @click="selectSfc(sfc)"> <div class="sfc-header"> <span class="sfc-no" :class="statusClass(sfc.status)">{{ sfc.sfcNo }}</span> </div> <div class="sfc-meta"> <span>{{ sfc.keyInfo.length }} 工位</span> <span>{{ getSfcCompletedCount(sfc) }}/{{ getSfcTotalCount(sfc) }}</span> <el-tag v-if="getSfcCompletedCount(sfc) === 0" size="small" type="info"> 未开始 </el-tag> <el-tag v-if="getSfcCompletedCount(sfc) < getSfcTotalCount(sfc) && getSfcCompletedCount(sfc) !== 0" size="small" class="custom-light-blue"> 进行中 </el-tag> <el-tag v-if="getSfcCompletedCount(sfc) === getSfcTotalCount(sfc)" size="small" type="success"> 已完成 </el-tag> </div> </div> </div> <!-- 中间工位列表 --> <div class="station-list" v-if="activeSfc"> <div v-for="station in activeSfc.keyInfo" :key="station.station" :class="['station-item', { active: activeStation?.station === station.station }]" @click="selectStation(station)"> <div class="station-header"> <span class="station-no">{{ station.station }}</span> <el-progress :percentage="getStationProgress(station)" :stroke-width="12" :show-text="false" :color="getStationProgress(station) === 100 ? '#7fb897' : undefined" /> </div> <div class="station-meta"> <span>{{ station.keys.length }} 物料</span> <el-tag size="small"> {{ getCompletedCount(station) }}/{{ station.keys.length }} 完成 </el-tag> </div> </div> </div> <!-- 右侧工艺流 --> <div class="process-flow" v-if="activeMaterial"> <div class="process-header"> <h3>关键零部件检测</h3> </div> <div class="vertical-process"> <!-- 纵向步骤条 --> <el-steps direction="vertical" :active="currentStep" finish-status="success"> <!-- 第一步:拍照 --> <el-step title="拍照" > <template #description> <div v-if="currentStep === 1" class="step-content"> <div class="step-section"> <div class="camera-area"> <div class="camera-preview"> <img v-if="activeMaterial.imageUrl" :src="activeMaterial.imageUrl" alt="物料照片" class="preview-image" /> <div v-else class="camera-placeholder"> <el-icon :size="60"><Camera /></el-icon> <p>点击下方按钮进行拍照</p> </div> </div> <div class="camera-controls"> <!-- 打开摄像头按钮 --> <el-button type="primary" @click="openCamera"> <el-icon><VideoCamera /></el-icon> 打开摄像头 </el-button> <input ref="fileInput" type="file" accept="image/*" @change="uploadImage" style="position:absolute;visibility:hidden"> <el-button @click="fileInput?.click()" > <el-icon><Upload /></el-icon> 上传图片 </el-button> <!-- <el-button @click="uploadImage"> <el-icon><Upload /></el-icon> 上传图片 </el-button> --> <el-button type="primary" @click="nextStep" :disabled="!activeMaterial.imageUrl"> 下一步 </el-button> </div> </div> </div> </div> <!-- 摄像头浮层 --> <div v-if="cameraVisible" class="camera-overlay"> <div class="camera-container"> <div class="camera-header"> <h3>拍照</h3> <el-button icon="Close" circle @click="closeCamera" /> </div> <div class="camera-view"> <video ref="videoRef" autoplay playsinline class="camera-feed"></video> <canvas ref="canvasRef" class="camera-canvas" style="display: none;"></canvas> </div> <div class="camera-actions"> <el-button type="primary" @click="capturePhoto"> <el-icon><Camera /></el-icon> 拍照 </el-button> <el-button @click="retakePhoto"> <el-icon><Refresh /></el-icon> 重拍 </el-button> </div> </div> </div> </template> </el-step> <!-- 第二步:检测 --> <el-step title="检测" > <template #description> <div v-if="currentStep === 2" class="step-content"> <div class="step-section"> <div class="ocr-detection"> <div class="ocr-controls"> <el-form label-width="80px"> <el-form-item label="类别"> <el-select v-model="selectedTypeValue" placeholder="选择类别"> <el-option v-for="item in ocrSettings.category" :key="item.value" :label="item.label" :value="item.value"> </el-option> </el-select> </el-form-item> <el-form-item label="工位"> <el-input v-model="ocrSettings.station" placeholder="当前工位" disabled /> </el-form-item> <el-form-item label="二维码" class="custom-input"> <el-switch v-model="selectedQRValue" active-text="开启" inactive-text="关闭" /> </el-form-item> <el-form-item label="阈"> <el-slider v-model="ocrSettings.threshold" :min="0" :max="100" :step="5" show-input /> </el-form-item> <el-form-item> <el-button type="primary" :icon="ocrSettings.active ? SwitchButton : Open" @click="toggleOcr" > {{ ocrSettings.active ? '关闭' : '启动' }} OCR </el-button> </el-form-item> <el-form-item> <el-button type="success" :icon="Promotion" @click="detection" :disabled="!ocrSettings.active" > 开始识别 </el-button> </el-form-item> </el-form> </div> <div class="ocr-preview"> <div class="image-container"> <img :src="activeMaterial.imageUrl" alt="待识别图片" class="ocr-image" /> <!-- <div v-if="ocrResult" class="ocr-result-overlay"> <div v-for="(box, idx) in ocrResult.boxes" :key="idx" class="ocr-box" :style="{ left: `${box.x}%`, top: `${box.y}%`, width: `${box.width}%`, height: `${box.height}%` }" > <span class="ocr-label">{{ box.label }}</span> </div> </div> --> </div> <div class="ocr-actions"> <el-button type="primary" @click="prevStep">上一步</el-button> <el-button type="primary" @click="nextStep" :disabled="ocrResult.uuid == ''"> 下一步 </el-button> </div> </div> </div> </div> </div> </template> </el-step> <!-- 第三步:校验 --> <el-step title="校验" > <template #description> <div v-if="currentStep === 3" class="step-content"> <div class="step-section"> <div class="verification-area"> <div class="verification-header"> <!-- <h4>结果校验</h4> --> <el-tag type="warning">请确认以下信息</el-tag> </div> <div class="form-image-container"> <el-form label-width="80px"> <!-- <el-form-item label="物料号"> <el-input v-model="ocrResult.materialNo" placeholder="物料号" /> <div class="ocr-source"> <el-tag v-if="ocrResult.materialNo !== undefined" size="small" :type="ocrResult.materialNo ? 'success' : 'error'"> OCR-物料号: {{ ocrResult.materialNo || '空'}} </el-tag> </div> </el-form-item> <el-form-item label="生产商"> <el-input v-model="ocrResult.supplierNo" placeholder="生产商" /> <div class="ocr-source"> <el-tag v-if="ocrResult.supplierNo !== undefined" size="small" :type="ocrResult.supplierNo ? 'success' : 'error'"> OCR-生产商: {{ ocrResult.supplierNo || '空'}} </el-tag> </div> </el-form-item> --> <el-form-item label="物料号"> <el-select v-model="ocrResult.materialNo" placeholder="请选择物料号" :class="{'success-border': isMaterialValid, 'error-border': !isMaterialValid}"> <el-option v-for="part in remainingPartsVaild" :key="part" :label="part" :value="part"> </el-option> </el-select> <div class="ocr-source"> <el-tag v-if="ocrResult.materialNo !== undefined" size="small" :type="isMaterialValid(activeStation!) ? 'success' : 'error'"> OCR-物料号: {{ ocrResult.materialNo || '空' }} </el-tag> </div> </el-form-item> <el-form-item label="生产商"> <el-select v-model="ocrResult.supplierNo" placeholder="请选择生产商" :class="{'success-border': isSupplierValid, 'error-border': !isSupplierValid}"> <el-option v-for="supplier in supplierNosVaild" :key="supplier" :label="supplier" :value="supplier"> </el-option> </el-select> <div class="ocr-source"> <el-tag v-if="ocrResult.supplierNo !== undefined" size="small" :type="isSupplierValid(activeStation!) ? 'success' : 'error'"> OCR-生产商: {{ ocrResult.supplierNo || '空' }} </el-tag> </div> </el-form-item> <el-form-item label="序列号"> <el-input v-model="ocrResult.serialNo" placeholder="序列号" /> <div class="ocr-source"> <el-tag v-if="ocrResult.serialNo !== undefined" size="small" :type="ocrResult.serialNo ? 'success' : 'error'"> OCR-序列号: {{ ocrResult.serialNo || '空'}} </el-tag> </div> </el-form-item> </el-form> <div class="image-container"> <img :src="activeMaterial.imageUrl" alt="待识别图片" class="ocr-image" /> </div> </div> <div class="step-actions"> <el-button @click="prevStep">上一步</el-button> <el-button type="primary" @click="nextStep" :disabled="shouldDisableButton()" > 下一步 </el-button> </div> </div> </div> </div> </template> </el-step> <!-- 第四步:完成 --> <el-step title="完成" > <template #description> <div v-if="currentStep === 4" class="step-content"> <div class="step-section"> <div class="completion-area" > <el-result icon="success" title="流程完成"> <template #extra> <div class="summary-info"> <el-descriptions :column="1" border> <el-descriptions-item label="SFC"> {{ activeSfc?.sfcNo }} </el-descriptions-item> <el-descriptions-item label="工位"> {{ activeStation?.station }} </el-descriptions-item> <el-descriptions-item label="生产商"> <div style=" display: flex; justify-content: space-between; align-items: center; width: 100%"> <span style=" flex: 1; overflow: hidden; text-overflow: ellipsis;white-space: nowrap;padding-right: 10px"> {{ ocrResult?.supplierNo }} </span> <div style=" display: flex; gap: 0px; flex-shrink: 0"> <el-button type="primary" size="small" @click="handleQRcode(ocrResult?.supplierNo)" > 二维码 </el-button> <el-button type="primary" size="small" @click="handleBarcode(ocrResult?.supplierNo)" > 条形码 </el-button> </div> </div> </el-descriptions-item> <el-descriptions-item label="物料号"> <div style=" display: flex; justify-content: space-between; align-items: center; width: 100%"> <span style=" flex: 1; overflow: hidden; text-overflow: ellipsis;white-space: nowrap;padding-right: 10px"> {{ ocrResult?.materialNo }} </span> <div style=" display: flex; gap: 0px; flex-shrink: 0"> <el-button type="primary" size="small" @click="handleQRcode(ocrResult?.materialNo)" > 二维码 </el-button> <el-button type="primary" size="small" @click="handleBarcode(ocrResult?.materialNo)" > 条形码 </el-button> </div> </div> </el-descriptions-item> <el-descriptions-item label="序列号"> <div style=" display: flex; justify-content: space-between; align-items: center; width: 100%"> <span style=" flex: 1; overflow: hidden; text-overflow: ellipsis;white-space: nowrap;padding-right: 10px"> {{ ocrResult?.serialNo }} </span> <div style=" display: flex; gap: 0px; flex-shrink: 0"> <el-button type="primary" size="small" @click="handleQRcode(ocrResult?.serialNo)" > 二维码 </el-button> <el-button type="primary" size="small" @click="handleBarcode(ocrResult?.serialNo)" > 条形码 </el-button> </div> </div> </el-descriptions-item> <el-descriptions-item label="完成时间"> {{ dayjs(new Date()).format('YYYY-MM-DD hh:mm:ss') }} </el-descriptions-item> </el-descriptions> <!-- <div class="verification-summary"> <h4>验证信息</h4> <p>供应商号: {{ ocrResult.supplierNo }}</p> <p>物料号: {{ ocrResult.materialNo }}</p> <p>序列号: {{ ocrResult.serialNo }}</p> </div> --> <div v-if="showQR" class="modal-mask" @click.self="closeModal"> <div class="modal-container"> <qrcode-vue :value="qrText" :size="200" level="H" class="qr-code" /> <button class="close-btn" @click="closeModal">×</button> </div> </div> <div> <BarcodeGenerator ref="barcodeRef" />现在希望右侧工艺流是点击左侧中间工位后弹跳的新的页面上显示并操作 </div> </div> </template> </el-result> </div> <div class="step-actions"> <el-button @click="prevStep">上一步</el-button> <el-button type="success" @click="completeProcess">确认提交</el-button> </div> </div> </div> </template> </el-step> </el-steps> </div> </div> <div v-else-if="activeStation" class="no-material"> <el-empty description="该工位没有需要处理的物料" /> </div> <div v-else-if="activeSfc" class="no-station"> <el-empty description="请选择工位开始处理" /> </div> <div v-else class="no-sfc"> <el-empty description="请选择SFC开始处理" /> </div> </div>
最新发布
09-18
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值