124 lines
4.0 KiB
Vue
124 lines
4.0 KiB
Vue
<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>
|