bonus-material-app/src/pages/back/backCodeScan.nvue

405 lines
11 KiB
Plaintext
Raw Normal View History

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>