fix:更新优化新视频流窗口

zlx
zhoulexin 2 weeks ago
parent e8cb4e399c
commit cd669cd62f

@ -2,8 +2,8 @@
VITE_APP_TITLE = 'SOP作业检测系统' VITE_APP_TITLE = 'SOP作业检测系统'
# 后端接口地址 # 后端接口地址
VITE_API_BASE_IP = '10.23.22.43' VITE_API_BASE_IP = '127.0.0.1'
VITE_API_BASE_URL = 'http://${VITE_API_BASE_IP}:8188/api' VITE_API_BASE_URL = 'http://${VITE_API_BASE_IP}:8288/api'
# 请求超时时间(毫秒) # 请求超时时间(毫秒)
VITE_API_TIMEOUT = 15000 VITE_API_TIMEOUT = 15000

@ -1,5 +1,5 @@
const fileHttp = { const fileHttp = {
ptApi: `${import.meta.env.VITE_API_BASE_IP}:8001`, ptApi: `${import.meta.env.VITE_API_BASE_IP}:8001`,
mesPtApi: `${import.meta.env.VITE_API_BASE_IP}:8188` mesPtApi: `${import.meta.env.VITE_API_BASE_IP}:8288`
} }
export default fileHttp export default fileHttp

@ -193,8 +193,11 @@ function connectRawStream() {
break break
case 'webrtc_stream': case 'webrtc_stream':
webrtcUrl.value = msg.webrtc_url if(msg.stream_name === 'camera2'){
webrtcUrl2.value = msg.webrtc_url2 || msg.webrtc_url webrtcUrl.value = msg.webrtc_url
}else if(msg.stream_name === 'camera3'){
webrtcUrl2.value = msg.webrtc_url
}
addLog('已获取原始 WebRTC 流,开始播放', 'success') addLog('已获取原始 WebRTC 流,开始播放', 'success')
ElMessage.success('原始视频流已连接') ElMessage.success('原始视频流已连接')
break break

@ -6,7 +6,7 @@
<template v-if="!scanning"> <template v-if="!scanning">
<el-button type="primary" size="large" @click="startScanner"> <el-button type="primary" size="large" @click="startScanner">
<el-icon><Camera /></el-icon> <el-icon><Camera /></el-icon>
扫码枪 启扫码枪
</el-button> </el-button>
</template> </template>
<template v-else> <template v-else>
@ -27,13 +27,44 @@
<el-card class="code-card" shadow="hover"> <el-card class="code-card" shadow="hover">
<div class="code-section"> <div class="code-section">
<div class="code-item"> <div class="code-item">
<label class="code-label">SN码</label> <label class="code-label">A码SN码</label>
<el-input <el-input
v-model="form.snCode" v-model="form.snCode"
placeholder="请输入SN码" placeholder="扫码自动获取"
size="large" size="large"
clearable clearable
class="code-input" class="code-input"
readonly
>
<template #prefix>
<el-icon><Barcode /></el-icon>
</template>
</el-input>
</div>
<div class="code-item">
<label class="code-label">B码</label>
<el-input
v-model="bCode"
placeholder="扫码自动获取"
size="large"
clearable
class="code-input"
readonly
>
<template #prefix>
<el-icon><Barcode /></el-icon>
</template>
</el-input>
</div>
<div class="code-item">
<label class="code-label">C码</label>
<el-input
v-model="cCode"
placeholder="扫码自动获取"
size="large"
clearable
class="code-input"
readonly
> >
<template #prefix> <template #prefix>
<el-icon><Barcode /></el-icon> <el-icon><Barcode /></el-icon>
@ -116,12 +147,12 @@
<el-row :gutter="24"> <el-row :gutter="24">
<el-col :span="12"> <el-col :span="12">
<el-form-item label="SerialNumber" prop="serialNumber"> <el-form-item label="SerialNumber" prop="serialNumber">
<el-input disabled v-model="form.serialNumber" placeholder="Please enter" /> <el-input disabled v-model="form.serialNumber" placeholder="自动填入A码" />
</el-form-item> </el-form-item>
</el-col> </el-col>
<el-col :span="12"> <el-col :span="12">
<el-form-item label="AssemblyNumber" prop="assemblyNumber"> <el-form-item label="AssemblyNumber" prop="assemblyNumber">
<el-input disabled v-model="form.assemblyNumber" placeholder="Please enter" /> <el-input disabled v-model="form.assemblyNumber" placeholder="自动获取Model码" />
</el-form-item> </el-form-item>
</el-col> </el-col>
</el-row> </el-row>
@ -202,7 +233,7 @@ import { useRouter } from 'vue-router'
import { ElMessage } from 'element-plus' import { ElMessage } from 'element-plus'
import WebSocketClient from '@/utils/websocket' import WebSocketClient from '@/utils/websocket'
import fileHttp from '@/utils/fileHttp' import fileHttp from '@/utils/fileHttp'
import { getSnApi, okToTestApi } from '@/api' import { getSnApi, okToTestApi, saveReportApi } from '@/api'
const router = useRouter() const router = useRouter()
@ -216,6 +247,14 @@ const countdown = ref(3)
const progressPercent = ref(0) const progressPercent = ref(0)
let countdownTimer = null let countdownTimer = null
// ABC
const bCode = ref('')
const cCode = ref('')
// /
const scanStartTime = ref('')
const scanEndTime = ref('')
const form = reactive({ const form = reactive({
snCode: '', snCode: '',
customer: '', customer: '',
@ -240,9 +279,26 @@ const rules = {
processStep: [{ required: true, message: '请输入ProcessStep', trigger: 'blur' }] processStep: [{ required: true, message: '请输入ProcessStep', trigger: 'blur' }]
} }
// ============ ============
function classifyCode(code) {
if (!code) return null
// POS B
if (code.startsWith('POS')) return 'B'
// 4 C
if (/^4/.test(code)) return 'C'
// 620
if (code.startsWith('620')) return 'IGNORE'
// A
return 'A'
}
// WebSocket // WebSocket
function startScanner() { function startScanner() {
scanning.value = true scanning.value = true
//
scanStartTime.value = formatNow()
wsClient.value = new WebSocketClient({ wsClient.value = new WebSocketClient({
url: `ws://${fileHttp.mesPtApi}/api/ws/camera`, url: `ws://${fileHttp.mesPtApi}/api/ws/camera`,
autoReconnect: false, autoReconnect: false,
@ -254,11 +310,28 @@ function startScanner() {
}) })
wsClient.value.on('message', (data) => { wsClient.value.on('message', (data) => {
// data sn // data
const sn = typeof data === 'string' ? data : data.sn const code = typeof data === 'string' ? data : data.sn
if (sn) { if (!code) return
form.snCode = sn
form.serialNumber = sn const type = classifyCode(code)
switch (type) {
case 'A':
form.snCode = code
form.serialNumber = code
ElMessage.success(`识别到A码SN码: ${code}`)
break
case 'B':
bCode.value = code
ElMessage.success(`识别到B码: ${code}`)
break
case 'C':
cCode.value = code
ElMessage.success(`识别到C码: ${code}`)
break
case 'IGNORE':
// 620
break
} }
}) })
@ -287,6 +360,24 @@ function stopScanner() {
ElMessage.info('已关闭扫码功能') ElMessage.info('已关闭扫码功能')
} }
function formatNow() {
const d = new Date()
const pad = (n) => String(n).padStart(2, '0')
return `${d.getFullYear()}-${pad(d.getMonth() + 1)}-${pad(d.getDate())} ${pad(d.getHours())}:${pad(d.getMinutes())}:${pad(d.getSeconds())}`
}
// ============ B/C ============
function getModelByBCode() {
// B "POS-REG-019" STI-01173 STI-01176
return bCode.value === 'POS-REG-019' ? 'STI-01173' : 'STI-01176'
}
function getModelByCCode() {
// C "4260325425247" STI-01174 SIT-01175
return cCode.value === '4260325425247' ? 'STI-01174' : 'SIT-01175'
}
// //
onBeforeUnmount(() => { onBeforeUnmount(() => {
stopScanner() stopScanner()
@ -298,7 +389,7 @@ onBeforeUnmount(() => {
// Model // Model
async function fetchModelCode() { async function fetchModelCode() {
if (!form.serialNumber) { if (!form.snCode) {
ElMessage.warning('请先输入SN码') ElMessage.warning('请先输入SN码')
return return
} }
@ -308,7 +399,7 @@ async function fetchModelCode() {
} }
loading.value = true loading.value = true
try { try {
const data = await getSnApi({ customer: form.customer, serialNumber: form.serialNumber }) const data = await getSnApi({ customer: form.customer, serialNumber: form.snCode })
if (data) { if (data) {
form.modelCode = data form.modelCode = data
form.assemblyNumber = data form.assemblyNumber = data
@ -317,7 +408,7 @@ async function fetchModelCode() {
ElMessage.error('未获取到Model码数据') ElMessage.error('未获取到Model码数据')
} }
} catch (error) { } catch (error) {
ElMessage.error('获取Model码失败') // ElMessage.error('Model')
} finally { } finally {
loading.value = false loading.value = false
} }
@ -331,8 +422,13 @@ async function handleInvoke() {
} catch { } catch {
return return
} }
//
scanEndTime.value = formatNow()
invokeLoading.value = true invokeLoading.value = true
try { try {
// okToTestApi
await okToTestApi({ await okToTestApi({
customerName: form.customerName, customerName: form.customerName,
division: form.division, division: form.division,
@ -341,11 +437,36 @@ async function handleInvoke() {
testerName: form.testerName, testerName: form.testerName,
processStep: form.processStep processStep: form.processStep
}) })
//
const modelByB = getModelByBCode()
const modelByC = getModelByCCode()
const ruleContent = `
${form.snCode}
${form.customerName}
${form.testerName}
BayE168
P
${scanStartTime.value}
${scanEndTime.value}
${bCode.value}
${modelByB}
${cCode.value}
${modelByC}`
// saveReportApi
await saveReportApi({
message: [ruleContent],
sn: form.snCode,
})
result.value = { result.value = {
status: 'Success', status: 'Success',
code: '200', code: '200',
message: '检测流程已成功启动' message: '检测流程已成功启动'
} }
// 3 // 3
invokeSuccess.value = true invokeSuccess.value = true
countdown.value = 3 countdown.value = 3
@ -360,7 +481,7 @@ async function handleInvoke() {
} }
}, 1000) }, 1000)
} catch (error) { } catch (error) {
ElMessage.error('Invoke调用失败') // ElMessage.error('Invoke')
} finally { } finally {
invokeLoading.value = false invokeLoading.value = false
} }
@ -377,6 +498,10 @@ function handleReset() {
form.assemblyNumber = '' form.assemblyNumber = ''
form.testerName = '' form.testerName = ''
form.processStep = '' form.processStep = ''
bCode.value = ''
cCode.value = ''
scanStartTime.value = ''
scanEndTime.value = ''
result.value = null result.value = null
ElMessage.info('表单已重置') ElMessage.info('表单已重置')
} }
@ -434,7 +559,7 @@ function handleReset() {
.code-item { .code-item {
flex: 1; flex: 1;
min-width: 300px; min-width: 280px;
.code-label { .code-label {
display: block; display: block;

Loading…
Cancel
Save