| | |
| | | <div class="grid-value">{{ p.outputQty ?? 0 }}</div> |
| | | </div> |
| | | <div class="grid-item"> |
| | | <div class="grid-label">报废数量</div> |
| | | <div class="grid-value success">{{ p.scrapQty ?? 0 }}</div> |
| | | </div> |
| | | <div class="grid-item"> |
| | | <div class="grid-label">合格数量</div> |
| | | <div class="grid-value success">{{ p.qualifiedQty ?? 0 }}</div> |
| | | </div> |
| | |
| | | <el-table-column label="报工人员" prop="nickName" min-width="120" show-overflow-tooltip /> |
| | | <el-table-column label="报工时间" prop="createTime" min-width="160" show-overflow-tooltip /> |
| | | <el-table-column label="产出数量" prop="quantity" min-width="110" /> |
| | | <el-table-column label="报废数量" prop="scrapQty" min-width="110" /> |
| | | <el-table-column label="合格数量" prop="qualifiedQty" min-width="110" /> |
| | | <el-table-column label="不良数量" prop="scrapQty" min-width="110" /> |
| | | <el-table-column label="不良数量" prop="defectiveQuantity" min-width="110" /> |
| | | <el-table-column label="不合格处理" prop="dealResult" min-width="160" show-overflow-tooltip /> |
| | | <el-table-column label="操作" width="150" fixed="right"> |
| | | <template #default="{ row }"> |
| | |
| | | |
| | | const normalizeProcess = (item) => { |
| | | // 字段以接口约定为准(你给的截图字段映射) |
| | | // 工序:completionStatus/statusText/processNo/scrapRate/planQuantity/completeQuantity/completeQty/scrapQty |
| | | // 工序:completionStatus/statusText/processNo/defectiveRate/planQuantity/completeQuantity/completeQty/scrapQty |
| | | const inputQty = Number(item?.planQuantity ?? item?.inputQty ?? 0); |
| | | const outputQty = Number(item?.completeQuantity ?? item?.outputQty ?? 0); |
| | | const outputQty = Number(item?.totalQty ?? item?.outputQty ?? 0); |
| | | const qualifiedQty = Number(item?.completeQty ?? item?.qualifiedQty ?? item?.goodQty ?? 0); |
| | | const badQty = Number(item?.scrapQty ?? item?.badQty ?? item?.defectQty ?? 0); |
| | | const badQty = Number(item?.defectiveQuantity ?? item?.badQty ?? item?.defectQty ?? 0); |
| | | const scrapQty = Number(item?.scrapQty ?? 0); |
| | | const completionStatus = Number(item?.completionStatus ?? 0); |
| | | const scrapRate = Number(item?.scrapRate ?? NaN); |
| | | const defectiveRate = Number(item?.defectiveRate ?? NaN); |
| | | |
| | | const status = normalizeStatus(item?.statusText ?? item?.status ?? item?.workStatus ?? item?.processStatus ?? item?.state, completionStatus, inputQty, outputQty); |
| | | |
| | |
| | | outputQty: Number.isFinite(outputQty) ? outputQty : 0, |
| | | qualifiedQty: Math.max(0, Number.isFinite(qualifiedQty) ? qualifiedQty : 0), |
| | | badQty: Math.max(0, Number.isFinite(badQty) ? badQty : 0), |
| | | scrapQty: Math.max(0, Number.isFinite(scrapQty) ? scrapQty : 0), |
| | | completionStatus: Number.isFinite(completionStatus) ? completionStatus : 0, |
| | | scrapRate: Number.isFinite(scrapRate) ? scrapRate : null, |
| | | defectiveRate: Number.isFinite(defectiveRate) ? defectiveRate : null, |
| | | status, |
| | | }; |
| | | }; |
| | |
| | | |
| | | // 不良率:不良数量 / 产出数量(先按此口径,后续对接接口可调整) |
| | | const defectRateText = (p) => { |
| | | // 优先使用接口字段 scrapRate(你给的截图“不良率”) |
| | | const scrapRate = Number(p?.scrapRate ?? NaN); |
| | | if (Number.isFinite(scrapRate)) { |
| | | // 有些接口 scrapRate 可能是 0~1 或 0~100,这里做一个简单判断 |
| | | const percent = scrapRate <= 1 ? scrapRate * 100 : scrapRate; |
| | | // 优先使用接口字段 defectiveRate(你给的截图“不良率”) |
| | | const defectiveRate = Number(p?.defectiveRate ?? NaN); |
| | | if (Number.isFinite(defectiveRate)) { |
| | | // 有些接口 defectiveRate 可能是 0~1 或 0~100,这里做一个简单判断 |
| | | const percent = defectiveRate <= 1 ? defectiveRate * 100 : defectiveRate; |
| | | return `${percent.toFixed(2)}%`; |
| | | } |
| | | |
| | |
| | | |
| | | .step-grid { |
| | | display: grid; |
| | | grid-template-columns: repeat(4, minmax(0, 1fr)); |
| | | grid-template-columns: repeat(5, minmax(0, 1fr)); |
| | | gap: 10px; |
| | | .grid-item { |
| | | background: #ffffff; |