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

405 lines
11 KiB
Plaintext
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

<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>
<uni-easyinput v-model="queryCodeParams.maCode" maxlength="30" placeholder="请输入内容" />
</view>
</uni-col>
<uni-col :span="6">
<view class="coding-btn" style="padding: 10rpx 0;color: #fe9a09;background-color: #fff7eb;border: 1px solid #fe9a09;"
@click="getCode()">
<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">
<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>
</uni-forms>
</scroll-view>
</view>
<view class="outbound-btn" @tap="onHandleConfirm">
<text style="color: #FFF;">确认</text>
</view>
</view>
</template>
<script>
export default {
data() {
return {
livePusher: null,
ready: true,
cameraHeight: '', //相机画面宽度
coverImage: null,
queryParams:{},
queryCodeParams:{
maCode:""
},
codeData:{},
apDetection:"",
bmFileInfos:[],
imgBeseUrl:"",
}
},
onLoad(options) {
this.queryParams = JSON.parse(options.queryParams)
console.log(this.queryParams)
// this.queryCodeParams.typeId = this.queryParams.typeId;
},
onReady() {
this.cameraHeight = uni.getSystemInfoSync().screenHeight * 0.22
console.log(this.cameraHeight)
this.init()
},
methods: {
//初始化相机
init() {
this.livePusher = uni.createLivePusherContext('livePusher', this);
console.log(this.livePusher)
setTimeout(() => {
this.startPreview()
}, 1000)
},
// 开始相机
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)
}
});
},
//截屏
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)
}
})
}
},
//编码检索
async getCode(){
let param = {
"maCode":this.queryCodeParams.maCode,
"unitId":this.queryParams.unitId,
"proId":this.queryParams.proId
}
console.log(param)
uni.request({
url: '/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()
}
})
},
//确认按钮
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: '/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)
}
})
}
}
}
}
</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;
} */
}
/* 上传区域样式 */
.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;
}
}
.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>