bonus-material-app/src/pages/toolsLease/ocrScan/ocrOutScan.nvue

457 lines
14 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: '450rpx' ,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" 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="height: 100%;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.materialName }}</text>
</uni-forms-item>
<uni-forms-item label="规格型号:" name="materialModel">
<text style="height: 100%;display: flex;align-items: center;">{{ codeData.materialModel }}</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.statusName }}</text>
</uni-forms-item>
<!-- <uni-forms-item label="设备数量:">
<text class="form-view">1</text>
</uni-forms-item> -->
</uni-forms>
</scroll-view>
</view>
<view class="outbound-btn" @tap="onHandleSave">
<text style="color: #FFF;">保存</text>
</view>
<!-- <view class="outbound-btn" @tap="onHandleOutbound">
<text style="color: #FFF;">出库</text>
</view> -->
</view>
</template>
<script>
export default {
data() {
return {
livePusher: null,
ready: true,
cameraHeight: '', //相机画面宽度
coverImage: null,
queryParams:{},
queryCodeParams:{
maCode:""
},
codeData:{}
}
},
onLoad(options) {
this.queryParams = JSON.parse(options.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: async (res) => {
console.log('拍照成功', res)
this.ready = true
let base64 = await this.imgToBase64(res.message.tempImagePath)
// console.log('base64', base64)
let params = {
image: base64,
jiju_type: '',
auth_lic:
'xIWDlaDVdijcBB4mjhGCPYk5Kvk8tHZJbUn+vW+ih15+MYx98e/PXyBmKL5gFcWMPznLgDA15QuSAnZQSLddwdy9HkZgtuQDEEZZ351Eyb1eiDUccUnyoSGIrNimbx5TooBNNPYqU4qJeFrPJXAqjBHzRrxoBxuR2CEGKQPgHC4=',
}
uni.request({
url: '/material/app/ocr/getOcrCode',
method: 'post',
data: params,
header: {
'Content-Type': 'application/json', // 根据后端要求设置请求头,常见的 POST 请求数据格式为 JSON
},
success: (res) => {
console.log('88888888', res)
if (res.data.code == 200 && res.data.data.data.result) {
this.queryCodeParams.maCode = res.data.data.data.result
this.getCode()
} else {
uni.showToast({ title: '扫描失败!', icon: 'none' })
}
},
fail: (err) => {
uni.showToast({
title: err,
icon: 'none',
})
},
})
//this.$emit('getImage', res.message.tempImagePath)
},
})
}
},
imgToBase64(filePath) {
// return new Promise((resolve, reject) => {
// console.log('555555', filePath)
// plus.zip.compressImage(
// {
// src: filePath,
// dst: '_doc/a.jpg',
// overwrite: true,
// width: '1920px',
// height: '1080px',
// format: 'jpg',
// quality: 100,
// },
// function (e) {
// let reader = new plus.io.FileReader()
// reader.readAsDataURL(e.target)
// reader.onloadend = function (e) {
// // 使用 split 方法去除前缀
// // let base64 = e.target.result.split(',')[1]
// base64 = e.target.result.replace(/[\r\n]/g, '')
// console.log(base64)
// // 异步操作成功,将结果传递给 Promise
// resolve(base64)
// }
// },
// function (err) {
// plus.nativeUI.alert('未知错误!', function () {})
// // 异步操作失败,将错误传递给 Promise
// reject(err)
// },
// )
// })
return new Promise((resolve, reject) => {
plus.io.resolveLocalFileSystemURL(
filePath,
(entry) => {
entry.file((file) => {
const reader = new plus.io.FileReader()
reader.onloadend = (evt) => {
// 去掉 data:URL 前缀
const base64WithoutPrefix = evt.target.result.split(',')[1]
resolve(base64WithoutPrefix)
}
reader.onerror = reject
reader.readAsDataURL(file)
}, reject)
},
reject,
)
})
},
imgBase64Fun(tempFilePath) {
console.log('vvvvvvvvvvvvvvvv')
return new Promise((resolve, reject) => {
uni.getFileSystemManager().readFile({
filePath: tempFilePath, // 图片临时路径
encoding: 'base64', // 指定编码为base64
success: (res) => {
// 拼接完整Base64前缀根据图片类型
let base64 = ''
console.log('ttttttttt', res)
if (tempFilePath.endsWith('.png')) {
base64 = 'data:image/png;base64,' + res.data
} else if (
tempFilePath.endsWith('.jpg') ||
tempFilePath.endsWith('.jpeg')
) {
base64 = 'data:image/jpeg;base64,' + res.data
}
console.log('base642222', base64)
resolve(base64)
},
fail: (err) => {
reject(err)
},
})
})
},
//编码检索
async getCode(){
let param = {
maCode:this.queryCodeParams.maCode,
typeId:this.queryCodeParams.typeId,
maStatus:1
}
console.log("xxxxxxxx",param)
uni.request({
url: '/material/ma_machine/list',
method: 'get',
data: param,
success: res => {
res = res.data;
console.log(res)
if(res.data&&res.data.length>0){
this.codeData=res.data[0];
}else{
uni.showToast({
title: '未检索到有效的设备编码!',
icon: 'none',
})
}
},
fail: err => {
console.log(err)
}
})
// const res = await getCodeDeviceListAPI(param)
// console.log(res)
// this.codeData=res.rows[0];
},
//保存按钮
async onHandleSave(){
let maCodeList = []
maCodeList.push({
maId: this.codeData.maId,
maCode: this.codeData.maCode,
})
let params = {
maCode: this.codeData.maCode,
maId: this.codeData.maId,
typeId:this.codeData.typeId,
outType:4,
materialName: this.codeData.materialName,
materialModel: this.codeData.materialModel,
}
uni.$emit('paramsReceived', params);
// 返回上一个页面
uni.navigateBack();
}
//出库按钮
// async onHandleOutbound(){
// let maCodeList = []
// maCodeList.push({
// maId: this.codeData.maId,
// maCode: this.codeData.maCode,
// })
// let paramsList = []
// paramsList.push({
// leaseType: 0,
// maCode: this.codeData.maCode,
// maId: this.codeData.maId,
// manageType:0,
// outNum:1,
// typeId:this.codeData.typeId,
// parentId: this.queryParams.parentId,
// maCodeList,
// isApp: 0,
// isNew: this.queryParams.isNew,
// outType: 4,
// })
// console.log('333333333', paramsList)
// uni.request({
// url: '/material/lease_apply_info/leaseOut',
// method: 'post',
// data: { leaseOutDetailsList: paramsList },
// 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;
} */
}
.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>