2025-01-03 18:19:03 +08:00
|
|
|
|
<template>
|
|
|
|
|
|
<view class="page-container">
|
|
|
|
|
|
<view>
|
|
|
|
|
|
<live-pusher v-once id="livePusher" ref="livePusher" class="livePusher" mode="FHD" beauty="0" whiteness="0"
|
|
|
|
|
|
device-position="back" :auto-focus="false" :muted="true" :enable-camera="true" :enable-mic="true"
|
|
|
|
|
|
:zoom="true" :style="[{height: cameraHeight+'rpx' ,width:'750rpx'}]">
|
|
|
|
|
|
</live-pusher>
|
|
|
|
|
|
</view>
|
|
|
|
|
|
<view class="table-list-item">
|
|
|
|
|
|
<view class="scan-btn" @click="handleInstruct('shutter')">
|
|
|
|
|
|
<text style="color: #FFF;">开始识别</text>
|
|
|
|
|
|
</view>
|
|
|
|
|
|
</view>
|
|
|
|
|
|
<view class="table-list-item">
|
|
|
|
|
|
<uni-row :gutter="24" style="display: flex; align-items: center">
|
|
|
|
|
|
<uni-col :span="5">
|
|
|
|
|
|
<text> 设备编码 </text>
|
|
|
|
|
|
</uni-col>
|
|
|
|
|
|
<uni-col :span="10">
|
|
|
|
|
|
<view>
|
2025-01-14 17:56:14 +08:00
|
|
|
|
<uni-easyinput v-model="queryCodeParams.maCode" maxlength="30" placeholder="请输入内容" />
|
2025-01-03 18:19:03 +08:00
|
|
|
|
</view>
|
|
|
|
|
|
</uni-col>
|
|
|
|
|
|
<uni-col :span="6">
|
2025-01-14 17:56:14 +08:00
|
|
|
|
<view class="coding-btn" style="padding: 10rpx 0;color: #fe9a09;background-color: #fff7eb;border: 1px solid #fe9a09;"
|
|
|
|
|
|
@click="getCode()">
|
2025-01-03 18:19:03 +08:00
|
|
|
|
<text style="color: #fe9a09;text-align: center;">编码检索</text>
|
|
|
|
|
|
</view>
|
|
|
|
|
|
</uni-col>
|
|
|
|
|
|
</uni-row>
|
|
|
|
|
|
</view>
|
|
|
|
|
|
<view class="table-list-item">
|
|
|
|
|
|
<scroll-view class="scroll-view" scroll-y="true" style="height: 500rpx;">
|
|
|
|
|
|
<uni-forms :model="codeData" label-width="100" :border="true">
|
2025-01-14 17:56:14 +08:00
|
|
|
|
<uni-forms-item label="物资名称:" name="materialType">
|
|
|
|
|
|
<text style="display: flex;align-items: center;">{{ codeData.materialType }}</text>
|
|
|
|
|
|
</uni-forms-item>
|
|
|
|
|
|
<uni-forms-item label="物资类型:" name="materialName">
|
|
|
|
|
|
<text style="height: 100%;display: flex;align-items: center;">{{ codeData.typeName }}</text>
|
|
|
|
|
|
</uni-forms-item>
|
|
|
|
|
|
<uni-forms-item label="规格型号:" name="materialModel">
|
|
|
|
|
|
<text style="height: 100%;display: flex;align-items: center;">{{ codeData.materialName }}</text>
|
|
|
|
|
|
</uni-forms-item>
|
|
|
|
|
|
<uni-forms-item label="设备编码:" name="maCode">
|
|
|
|
|
|
<text style="height: 100%;display: flex;align-items: center;">{{ codeData.maCode }}</text>
|
|
|
|
|
|
</uni-forms-item>
|
|
|
|
|
|
<uni-forms-item label="设备状态:" name="statusName">
|
|
|
|
|
|
<text style="height: 100%;display: flex;align-items: center;">{{ codeData.maStatusName }}</text>
|
|
|
|
|
|
</uni-forms-item>
|
|
|
|
|
|
<uni-forms-item label="外观判定:" name="apDetection">
|
|
|
|
|
|
<uni-easyinput v-model="apDetection" maxlength="30" placeholder="请输入内容" />
|
|
|
|
|
|
</uni-forms-item>
|
|
|
|
|
|
<uni-forms-item label="附件:">
|
|
|
|
|
|
<div class="upload" @click="uploadImg" v-if="imgBeseUrl==''">+</div>
|
|
|
|
|
|
<div class="upload" @click="uploadImg" v-else>
|
|
|
|
|
|
<image :src="imgBeseUrl" style="width: 160rpx;height: 160rpx;" mode=""></image>
|
|
|
|
|
|
</div>
|
|
|
|
|
|
</uni-forms-item>
|
2025-01-03 18:19:03 +08:00
|
|
|
|
</uni-forms>
|
|
|
|
|
|
</scroll-view>
|
|
|
|
|
|
</view>
|
2025-01-14 17:56:14 +08:00
|
|
|
|
<view class="outbound-btn" @tap="onHandleConfirm">
|
|
|
|
|
|
<text style="color: #FFF;">确认</text>
|
2025-01-03 18:19:03 +08:00
|
|
|
|
</view>
|
|
|
|
|
|
</view>
|
|
|
|
|
|
|
|
|
|
|
|
</template>
|
|
|
|
|
|
|
|
|
|
|
|
<script>
|
|
|
|
|
|
export default {
|
|
|
|
|
|
data() {
|
|
|
|
|
|
return {
|
|
|
|
|
|
livePusher: null,
|
|
|
|
|
|
ready: true,
|
|
|
|
|
|
cameraHeight: '', //相机画面宽度
|
|
|
|
|
|
coverImage: null,
|
|
|
|
|
|
queryParams:{},
|
|
|
|
|
|
queryCodeParams:{
|
|
|
|
|
|
maCode:""
|
|
|
|
|
|
},
|
2025-01-14 17:56:14 +08:00
|
|
|
|
codeData:{},
|
|
|
|
|
|
apDetection:"",
|
|
|
|
|
|
bmFileInfos:[],
|
|
|
|
|
|
imgBeseUrl:"",
|
2025-01-03 18:19:03 +08:00
|
|
|
|
}
|
|
|
|
|
|
},
|
|
|
|
|
|
onLoad(options) {
|
|
|
|
|
|
this.queryParams = JSON.parse(options.queryParams)
|
2025-01-14 17:56:14 +08:00
|
|
|
|
console.log(this.queryParams)
|
|
|
|
|
|
// this.queryCodeParams.typeId = this.queryParams.typeId;
|
2025-01-03 18:19:03 +08:00
|
|
|
|
},
|
|
|
|
|
|
onReady() {
|
|
|
|
|
|
this.cameraHeight = uni.getSystemInfoSync().screenHeight * 0.22
|
|
|
|
|
|
console.log(this.cameraHeight)
|
|
|
|
|
|
this.init()
|
|
|
|
|
|
},
|
|
|
|
|
|
methods: {
|
2025-01-14 17:56:14 +08:00
|
|
|
|
//初始化相机
|
2025-01-03 18:19:03 +08:00
|
|
|
|
init() {
|
|
|
|
|
|
this.livePusher = uni.createLivePusherContext('livePusher', this);
|
|
|
|
|
|
console.log(this.livePusher)
|
|
|
|
|
|
setTimeout(() => {
|
|
|
|
|
|
this.startPreview()
|
|
|
|
|
|
}, 1000)
|
|
|
|
|
|
},
|
2025-01-14 17:56:14 +08:00
|
|
|
|
// 开始相机
|
2025-01-03 18:19:03 +08:00
|
|
|
|
startPreview() {
|
|
|
|
|
|
this.livePusher.startPreview({
|
|
|
|
|
|
success: () => {
|
|
|
|
|
|
console.log('相机初始化成功');
|
|
|
|
|
|
switch (plus.os.name) {
|
|
|
|
|
|
case 'Android':
|
|
|
|
|
|
break;
|
|
|
|
|
|
case 'iOS':
|
|
|
|
|
|
this.livePusher.switchCamera()
|
|
|
|
|
|
break
|
|
|
|
|
|
}
|
|
|
|
|
|
},
|
|
|
|
|
|
fail: (err) => {
|
|
|
|
|
|
console.log(err)
|
|
|
|
|
|
}
|
|
|
|
|
|
});
|
|
|
|
|
|
},
|
2025-01-14 17:56:14 +08:00
|
|
|
|
//截屏
|
2025-01-03 18:19:03 +08:00
|
|
|
|
handleInstruct(instruct) {
|
|
|
|
|
|
if (this.ready) {
|
|
|
|
|
|
this.ready = false
|
|
|
|
|
|
this.livePusher.snapshot({
|
|
|
|
|
|
success: (res) => {
|
|
|
|
|
|
console.log(res)
|
|
|
|
|
|
this.ready = true
|
|
|
|
|
|
this.$emit('getImage', res.message.tempImagePath)
|
|
|
|
|
|
}
|
|
|
|
|
|
})
|
|
|
|
|
|
}
|
|
|
|
|
|
},
|
2025-01-14 17:56:14 +08:00
|
|
|
|
//编码检索
|
|
|
|
|
|
async getCode(){
|
|
|
|
|
|
let param = {
|
|
|
|
|
|
"maCode":this.queryCodeParams.maCode,
|
|
|
|
|
|
"unitId":this.queryParams.unitId,
|
|
|
|
|
|
"proId":this.queryParams.proId
|
|
|
|
|
|
}
|
|
|
|
|
|
console.log(param)
|
|
|
|
|
|
uni.request({
|
|
|
|
|
|
url: 'http://192.168.2.246:18080/material/back_apply_info/getMachine',
|
|
|
|
|
|
method: 'get',
|
|
|
|
|
|
data: param,
|
|
|
|
|
|
success: res => {
|
|
|
|
|
|
res = res.data;
|
|
|
|
|
|
console.log(res)
|
|
|
|
|
|
if(res.code==200){
|
|
|
|
|
|
if(res.data&&res.data.length>0){
|
|
|
|
|
|
this.codeData=res.data[0];
|
|
|
|
|
|
}
|
|
|
|
|
|
}else{
|
|
|
|
|
|
uni.showToast({
|
|
|
|
|
|
title: res.msg,
|
|
|
|
|
|
icon: 'none',
|
|
|
|
|
|
})
|
|
|
|
|
|
}
|
|
|
|
|
|
// if(res.rows&&res.rows.length>0){
|
|
|
|
|
|
// this.codeData=res.rows[0];
|
|
|
|
|
|
// }else{
|
|
|
|
|
|
// uni.showToast({
|
|
|
|
|
|
// title: '未检索到有效的设备编码!',
|
|
|
|
|
|
// icon: 'none',
|
|
|
|
|
|
// })
|
|
|
|
|
|
// }
|
|
|
|
|
|
},
|
|
|
|
|
|
fail: err => {
|
|
|
|
|
|
console.log(err)
|
|
|
|
|
|
}
|
|
|
|
|
|
})
|
|
|
|
|
|
},
|
|
|
|
|
|
//上传
|
|
|
|
|
|
uploadImg(){
|
|
|
|
|
|
uni.chooseImage({
|
|
|
|
|
|
count: 1, //图片可选择数量
|
|
|
|
|
|
sizeType: ['original', 'compressed'], //original 原图,compressed 压缩图,默认二者都有
|
|
|
|
|
|
sourceType: ['album', 'camera',], //album 从相册选图,camera 使用相机,默认二者都有。
|
|
|
|
|
|
success: res => {
|
|
|
|
|
|
console.log(res)
|
|
|
|
|
|
let imgFiles = res.tempFilePaths //图片的本地文件路径列表
|
|
|
|
|
|
this.imgBeseUrl = imgFiles[0]
|
|
|
|
|
|
uni.uploadFile({
|
|
|
|
|
|
// url: baseURL+"/file/upload",//app
|
|
|
|
|
|
url: "/file/upload",//h5
|
|
|
|
|
|
filePath: imgFiles[0],
|
|
|
|
|
|
name: 'file',
|
|
|
|
|
|
success: (res) => {
|
|
|
|
|
|
res = JSON.parse(res.data)
|
|
|
|
|
|
console.log('上传成功', res);
|
|
|
|
|
|
if(res.code&&res.code==200){
|
|
|
|
|
|
let obj = {
|
|
|
|
|
|
"name":res.data.name,
|
|
|
|
|
|
"url":res.data.url,
|
|
|
|
|
|
"taskType":"10"
|
|
|
|
|
|
}
|
|
|
|
|
|
this.bmFileInfos = [obj]
|
|
|
|
|
|
uni.showToast({ title: '上传成功', icon: 'none' })
|
|
|
|
|
|
}else{
|
|
|
|
|
|
this.bmFileInfos = []
|
|
|
|
|
|
uni.showToast({ title: '上传失败', icon: 'none' })
|
|
|
|
|
|
}
|
|
|
|
|
|
},
|
|
|
|
|
|
fail: (err) => {
|
|
|
|
|
|
console.error('上传失败', err);
|
|
|
|
|
|
}
|
|
|
|
|
|
});
|
|
|
|
|
|
// this.$refs.vForm.clearValidate()
|
2025-01-03 18:19:03 +08:00
|
|
|
|
}
|
2025-01-14 17:56:14 +08:00
|
|
|
|
})
|
2025-01-03 18:19:03 +08:00
|
|
|
|
},
|
2025-01-14 17:56:14 +08:00
|
|
|
|
//确认按钮
|
|
|
|
|
|
async onHandleConfirm(){
|
|
|
|
|
|
console.log(this.codeData.maId)
|
|
|
|
|
|
if(this.codeData.maId==undefined){
|
|
|
|
|
|
uni.showToast({
|
|
|
|
|
|
title: '请先识别编码!',
|
|
|
|
|
|
icon: 'none',
|
|
|
|
|
|
})
|
|
|
|
|
|
}else{
|
|
|
|
|
|
let obj = {
|
|
|
|
|
|
"maId":this.codeData.maId,
|
|
|
|
|
|
"maCode":this.codeData.maCode,
|
|
|
|
|
|
"typeId":this.codeData.typeId,
|
|
|
|
|
|
"apDetection":this.apDetection,
|
|
|
|
|
|
"bmFileInfos":this.bmFileInfos
|
|
|
|
|
|
}
|
|
|
|
|
|
let param = {
|
|
|
|
|
|
"backApplyInfo":this.queryParams,
|
|
|
|
|
|
"backApplyDetails":obj
|
|
|
|
|
|
}
|
|
|
|
|
|
console.log('333333333', param)
|
|
|
|
|
|
uni.request({
|
|
|
|
|
|
url: 'http://192.168.2.246:18080/material/back_apply_info/insertApp',
|
|
|
|
|
|
method: 'post',
|
|
|
|
|
|
data: param,
|
|
|
|
|
|
success: res => {
|
|
|
|
|
|
res = res.data;
|
|
|
|
|
|
console.log(res)
|
|
|
|
|
|
if (res.code === 200) {
|
|
|
|
|
|
uni.showToast({
|
|
|
|
|
|
title: '添加成功!',
|
|
|
|
|
|
icon: 'none',
|
|
|
|
|
|
})
|
|
|
|
|
|
this.queryCodeParams.maCode = ''
|
|
|
|
|
|
this.codeData = {}
|
|
|
|
|
|
}
|
|
|
|
|
|
},
|
|
|
|
|
|
fail: err => {
|
|
|
|
|
|
console.log(err)
|
|
|
|
|
|
}
|
|
|
|
|
|
})
|
|
|
|
|
|
}
|
|
|
|
|
|
|
2025-01-03 18:19:03 +08:00
|
|
|
|
}
|
|
|
|
|
|
}
|
|
|
|
|
|
}
|
|
|
|
|
|
</script>
|
|
|
|
|
|
|
|
|
|
|
|
<style>
|
|
|
|
|
|
.page-container {
|
|
|
|
|
|
display: flex;
|
|
|
|
|
|
height: auto;
|
|
|
|
|
|
flex-direction: column;
|
|
|
|
|
|
background-color: #f7f8fa;
|
|
|
|
|
|
padding: 24rpx;
|
|
|
|
|
|
}
|
|
|
|
|
|
.table-list-item {
|
|
|
|
|
|
|
|
|
|
|
|
margin-top: 10rpx;
|
|
|
|
|
|
background: #fff;
|
|
|
|
|
|
padding: 20rpx;
|
|
|
|
|
|
border-radius: 20rpx;
|
|
|
|
|
|
box-shadow: 0 4rpx 16rpx rgba(0, 0, 0, 0.06);
|
|
|
|
|
|
margin-bottom: 20rpx;
|
|
|
|
|
|
}
|
|
|
|
|
|
.scan-btn {
|
|
|
|
|
|
/* width: 100%; */
|
|
|
|
|
|
height: 88rpx;
|
|
|
|
|
|
background: #4b8eff;
|
|
|
|
|
|
display: flex;
|
|
|
|
|
|
justify-content: center;
|
|
|
|
|
|
align-items: center;
|
|
|
|
|
|
border-radius: 12rpx;
|
|
|
|
|
|
font-size: 32rpx;
|
|
|
|
|
|
font-weight: 600;
|
|
|
|
|
|
box-shadow: 0 6rpx 20rpx rgba(55, 132, 251, 0.2);
|
|
|
|
|
|
/* transition: all 0.3s ease; */
|
|
|
|
|
|
margin: 0;
|
|
|
|
|
|
padding: 0;
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
.coding-btn {
|
|
|
|
|
|
/* padding: 12rpx 0; */
|
|
|
|
|
|
background: #fff;
|
|
|
|
|
|
color: #ff9800;
|
|
|
|
|
|
border: 2rpx solid rgba(255, 152, 0, 0.5);
|
|
|
|
|
|
background: linear-gradient(to bottom, rgba(255, 152, 0, 0.05), rgba(255, 152, 0, 0.1));
|
|
|
|
|
|
border-radius: 12rpx;
|
|
|
|
|
|
text-align: center;
|
|
|
|
|
|
font-size: 28rpx;
|
|
|
|
|
|
font-weight: 600;
|
|
|
|
|
|
letter-spacing: 1rpx;
|
|
|
|
|
|
/* transition: all 0.3s ease; */
|
|
|
|
|
|
|
|
|
|
|
|
/* &:active {
|
|
|
|
|
|
background: rgba(255, 152, 0, 0.15);
|
|
|
|
|
|
border-color: rgba(255, 152, 0, 0.6);
|
|
|
|
|
|
transform: translateY(1rpx);
|
|
|
|
|
|
} */
|
|
|
|
|
|
}
|
|
|
|
|
|
.outbound-btn {
|
|
|
|
|
|
position: fixed;
|
|
|
|
|
|
bottom: 40rpx;
|
|
|
|
|
|
left: 20%;
|
|
|
|
|
|
/* transform: translateX(-50%); */
|
|
|
|
|
|
/* width: 90%; */
|
|
|
|
|
|
height: 88rpx;
|
|
|
|
|
|
width: 620rpx;
|
|
|
|
|
|
margin: 0 10px;
|
|
|
|
|
|
/* background: linear-gradient(135deg, #4b8eff 0%, #3784fb 100%); */
|
|
|
|
|
|
background: #4b8eff;
|
|
|
|
|
|
display: flex;
|
|
|
|
|
|
align-items: center;
|
|
|
|
|
|
justify-content: center;
|
|
|
|
|
|
color: #fff;
|
|
|
|
|
|
border-radius: 12rpx;
|
|
|
|
|
|
font-size: 32rpx;
|
|
|
|
|
|
font-weight: 600;
|
|
|
|
|
|
box-shadow: 0 6rpx 20rpx rgba(55, 132, 251, 0.2);
|
|
|
|
|
|
/* transition: all 0.3s ease; */
|
|
|
|
|
|
|
|
|
|
|
|
/* &:active {
|
|
|
|
|
|
transform: translateX(-50%) scale(0.98);
|
|
|
|
|
|
opacity: 0.9;
|
|
|
|
|
|
} */
|
|
|
|
|
|
}
|
|
|
|
|
|
|
2025-01-14 17:56:14 +08:00
|
|
|
|
/* 上传区域样式 */
|
|
|
|
|
|
.upload {
|
|
|
|
|
|
width: 160rpx;
|
|
|
|
|
|
height: 160rpx;
|
|
|
|
|
|
background-color: #f7f8fa;
|
|
|
|
|
|
border: 1rpx dashed #d9d9d9;
|
|
|
|
|
|
border-radius: 12rpx;
|
|
|
|
|
|
display: flex;
|
|
|
|
|
|
justify-content: center;
|
|
|
|
|
|
align-items: center;
|
|
|
|
|
|
font-size: 48rpx;
|
|
|
|
|
|
color: #bfbfbf;
|
|
|
|
|
|
/* transition: all 0.3s ease; */
|
|
|
|
|
|
|
|
|
|
|
|
&:active {
|
|
|
|
|
|
background-color: #f0f0f0;
|
|
|
|
|
|
border-color: #3784fb;
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
image {
|
|
|
|
|
|
width: 100%;
|
|
|
|
|
|
height: 100%;
|
|
|
|
|
|
border-radius: 12rpx;
|
|
|
|
|
|
object-fit: cover;
|
|
|
|
|
|
}
|
|
|
|
|
|
}
|
|
|
|
|
|
|
2025-01-03 18:19:03 +08:00
|
|
|
|
.camera-background {
|
|
|
|
|
|
width: 100%;
|
|
|
|
|
|
height: 100%;
|
|
|
|
|
|
background-color: rgba(0, 0, 0, 0.3);
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
.cover-image {
|
|
|
|
|
|
position: fixed;
|
|
|
|
|
|
top: 0;
|
|
|
|
|
|
left: 0;
|
|
|
|
|
|
z-index: 99;
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
.camera-options {
|
|
|
|
|
|
flex-direction: row;
|
|
|
|
|
|
align-items: center;
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
.camera-item {
|
|
|
|
|
|
flex: 1;
|
|
|
|
|
|
flex-direction: row;
|
|
|
|
|
|
justify-content: center;
|
|
|
|
|
|
align-items: center;
|
|
|
|
|
|
height: 100%;
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
.camera-item .camera-item-image {
|
|
|
|
|
|
width: 80rpx;
|
|
|
|
|
|
height: 80rpx;
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
.camera-options-center .camera-item-image {
|
|
|
|
|
|
width: 120rpx;
|
|
|
|
|
|
height: 120rpx;
|
|
|
|
|
|
}
|
|
|
|
|
|
</style>
|