Files
bj_power/bj_power_wms_client/frontend/src/pages/Inspection.vue
T

124 lines
4.0 KiB
Vue
Raw Normal View History

2026-08-28 15:06:01 +08:00
<script setup>
import { nextTick, onMounted, reactive, ref } from 'vue'
import { ElMessage } from 'element-plus'
import request from '../utils/request'
import { getRealName } from '../utils/auth'
const targetType = ref('BATCH')
const status = ref('合格')
const inspector = ref(getRealName())
/* ---------- 单个录入(扫码) ---------- */
const scanRef = ref()
const targetId = ref('')
const submitting1 = ref(false)
onMounted(() => nextTick(() => scanRef.value?.focus()))
async function submitSingle() {
const id = targetId.value.trim()
if (!id) {
ElMessage.warning('请扫入或输入目标编号')
return
}
if (!inspector.value.trim()) {
ElMessage.warning('请填写检验员')
return
}
submitting1.value = true
try {
await request.post('/inspection/create', {
targetType: targetType.value,
targetId: id,
status: status.value,
inspector: inspector.value.trim()
})
ElMessage.success(`检验已记录:${targetType.value} ${id}${status.value}`)
targetId.value = ''
nextTick(() => scanRef.value?.focus())
} finally {
submitting1.value = false
}
}
/* ---------- 批量翻转 ---------- */
const batchText = ref('')
const submitting2 = ref(false)
function parseTargets() {
return [...new Set(String(batchText.value).split(/\s+/).map(s => s.trim()).filter(Boolean))]
}
async function submitBatch() {
const ids = parseTargets()
if (!ids.length) {
ElMessage.warning('请录入待检编号(每行一个)')
return
}
if (!inspector.value.trim()) {
ElMessage.warning('请填写检验员')
return
}
submitting2.value = true
try {
const data = await request.post('/inspection/batch-flip', {
targetType: targetType.value,
targetIds: ids,
status: status.value,
inspector: inspector.value.trim()
})
ElMessage.success(`批量检验完成:共处理 ${data?.flipped ?? ids.length} 条`)
batchText.value = ''
} finally {
submitting2.value = false
}
}
</script>
<template>
<el-card shadow="never" style="max-width:760px;margin:0 auto">
<el-form label-width="110px">
<el-form-item label="目标类型">
<el-radio-group v-model="targetType">
<el-radio-button value="BATCH">批次 BATCH</el-radio-button>
<el-radio-button value="SN">序列号 SN</el-radio-button>
</el-radio-group>
</el-form-item>
<el-form-item label="检验结论">
<el-radio-group v-model="status">
<el-radio value="合格">合格</el-radio>
<el-radio value="不合格">不合格</el-radio>
</el-radio-group>
</el-form-item>
<el-form-item label="检验员">
<el-input v-model="inspector" placeholder="检验员姓名" clearable style="width:260px" />
</el-form-item>
<el-divider content-position="left">单个录入扫码</el-divider>
<el-form-item label="扫码输入">
<el-input ref="scanRef" v-model="targetId" autofocus clearable
placeholder="扫入批次号或 SN,回车提交"
style="width:420px"
@keyup.enter="submitSingle" />
<span class="tip">当前目标{{ targetType === 'BATCH' ? '批次号' : 'SN 序列号' }}</span>
</el-form-item>
<el-form-item>
<el-button type="primary" :loading="submitting1" @click="submitSingle">提交检验</el-button>
</el-form-item>
<el-divider content-position="left">批量翻转</el-divider>
<el-form-item label="批量编号">
<el-input v-model="batchText" type="textarea" :rows="6"
placeholder="每行一个编号,支持扫码枪连续录入" />
</el-form-item>
<el-form-item>
<el-button type="primary" :loading="submitting2" @click="submitBatch">批量提交</el-button>
<el-button @click="batchText = ''">清空</el-button>
</el-form-item>
</el-form>
</el-card>
</template>
<style scoped>
.tip { margin-left: 10px; color: #909399; font-size: 12px; }
</style>