OCR出库
This commit is contained in:
parent
c3d88653aa
commit
206cf573ba
|
|
@ -536,9 +536,9 @@ const handleQrCode = async (qrCode) => {
|
||||||
|
|
||||||
// 编码识别按钮
|
// 编码识别按钮
|
||||||
const ocrClick = () => {
|
const ocrClick = () => {
|
||||||
console.log('编码识别--')
|
console.log('编码识别--', queryParams.value)
|
||||||
uni.navigateTo({
|
uni.navigateTo({
|
||||||
url: `/pages/materialsStation/toolsLease/ocrScan/ocrOutScan?queryParams=${JSON.stringify(
|
url: `/pages/materialsStation/toolsLease/ocrScan/ocrOutScan?params=${JSON.stringify(
|
||||||
queryParams.value,
|
queryParams.value,
|
||||||
)}`,
|
)}`,
|
||||||
})
|
})
|
||||||
|
|
|
||||||
|
|
@ -57,7 +57,7 @@
|
||||||
<ElectronicSeal :maCode="codeData?.maCode" :maId="codeData?.maId" />
|
<ElectronicSeal :maCode="codeData?.maCode" :maId="codeData?.maId" />
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
<button type="primary" style="margin-top: 20px;" @click="addCode">添加编码</button>
|
<button type="primary" style="margin-top: 20px" @click="addCode">添加编码</button>
|
||||||
</view>
|
</view>
|
||||||
|
|
||||||
<!-- 相机预览页面 -->
|
<!-- 相机预览页面 -->
|
||||||
|
|
@ -105,7 +105,7 @@
|
||||||
|
|
||||||
<script>
|
<script>
|
||||||
import { decryptWithSM4 } from '@/utils/sm'
|
import { decryptWithSM4 } from '@/utils/sm'
|
||||||
import { getDeviceListAPI } from '@/services/picking/outbound'
|
import { getDeviceListAPI, getDeviceListAPINew } from '@/services/picking/outbound'
|
||||||
import ElectronicSeal from '@/components/ElectronicSeal/index.vue'
|
import ElectronicSeal from '@/components/ElectronicSeal/index.vue'
|
||||||
|
|
||||||
export default {
|
export default {
|
||||||
|
|
@ -143,6 +143,10 @@ export default {
|
||||||
// 获取设备信息用于相机配置
|
// 获取设备信息用于相机配置
|
||||||
this.getDeviceInfo()
|
this.getDeviceInfo()
|
||||||
},
|
},
|
||||||
|
onLoad(options) {
|
||||||
|
this.queryParams = options.params ? JSON.parse(options.params) : {}
|
||||||
|
console.log('🚀 ~ onLoad ~ this.queryParams:', this.queryParams)
|
||||||
|
},
|
||||||
onHide() {
|
onHide() {
|
||||||
this.cleanup()
|
this.cleanup()
|
||||||
},
|
},
|
||||||
|
|
@ -152,6 +156,13 @@ export default {
|
||||||
methods: {
|
methods: {
|
||||||
// 添加编码
|
// 添加编码
|
||||||
addCode() {
|
addCode() {
|
||||||
|
if (this.codeData.typeId != this.queryParams.typeId) {
|
||||||
|
uni.showToast({
|
||||||
|
title: `当前添加的 (${this.codeData.maName}) 类型不匹配, 请重新添加`,
|
||||||
|
icon: 'none',
|
||||||
|
})
|
||||||
|
return
|
||||||
|
}
|
||||||
if (!this.codeData.maCode) {
|
if (!this.codeData.maCode) {
|
||||||
uni.showToast({
|
uni.showToast({
|
||||||
title: '请先扫码添加',
|
title: '请先扫码添加',
|
||||||
|
|
@ -508,7 +519,10 @@ export default {
|
||||||
console.log('图片处理完成,开始OCR识别...')
|
console.log('图片处理完成,开始OCR识别...')
|
||||||
|
|
||||||
uni.request({
|
uni.request({
|
||||||
url: '/material/app/ocr/getOcrCode',
|
url:
|
||||||
|
this.queryParams?.jiJuType == 2
|
||||||
|
? '/material/app/ocr/getOcrCode'
|
||||||
|
: '/material/app/ocr/getOcrCodeTwo',
|
||||||
method: 'POST',
|
method: 'POST',
|
||||||
data: {
|
data: {
|
||||||
image: cleanBase64,
|
image: cleanBase64,
|
||||||
|
|
@ -644,7 +658,10 @@ export default {
|
||||||
console.log('相册图片处理完成,开始OCR识别...')
|
console.log('相册图片处理完成,开始OCR识别...')
|
||||||
|
|
||||||
uni.request({
|
uni.request({
|
||||||
url: '/material/app/ocr/getOcrCode',
|
url:
|
||||||
|
this.queryParams?.jiJuType == 2
|
||||||
|
? '/material/app/ocr/getOcrCode'
|
||||||
|
: '/material/app/ocr/getOcrCodeTwo',
|
||||||
method: 'POST',
|
method: 'POST',
|
||||||
data: {
|
data: {
|
||||||
image: processedBase64,
|
image: processedBase64,
|
||||||
|
|
@ -710,7 +727,7 @@ export default {
|
||||||
},
|
},
|
||||||
|
|
||||||
// 编码检索
|
// 编码检索
|
||||||
getCode() {
|
async getCode() {
|
||||||
if (!this.queryCodeParams.maCode.trim()) {
|
if (!this.queryCodeParams.maCode.trim()) {
|
||||||
uni.showToast({
|
uni.showToast({
|
||||||
title: '请输入设备编码',
|
title: '请输入设备编码',
|
||||||
|
|
@ -719,10 +736,19 @@ export default {
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
try {
|
try {
|
||||||
getDeviceListAPI({ maCode: this.queryCodeParams.maCode })
|
uni.showLoading({
|
||||||
.then((response) => {
|
title: '加载中...',
|
||||||
console.log('xxxxxxxxxxx', response)
|
mask: true,
|
||||||
if (response.code === 200 && response.data && response.data.length > 0) {
|
})
|
||||||
|
let res = null
|
||||||
|
if (this.queryParams?.jiJuType == 2) {
|
||||||
|
res = await getDeviceListAPINew(this.queryCodeParams.maCode)
|
||||||
|
} else {
|
||||||
|
res = await getDeviceListAPI(this.queryCodeParams.maCode)
|
||||||
|
}
|
||||||
|
console.log('🚀 ~ getCode ~ res:', res)
|
||||||
|
|
||||||
|
if (res.code === 200 && res.data && res.data.length > 0) {
|
||||||
this.optionList = response.data.map((option) => ({
|
this.optionList = response.data.map((option) => ({
|
||||||
value: option.maId,
|
value: option.maId,
|
||||||
text: option.maCode,
|
text: option.maCode,
|
||||||
|
|
@ -737,17 +763,10 @@ export default {
|
||||||
duration: 2000,
|
duration: 2000,
|
||||||
})
|
})
|
||||||
}
|
}
|
||||||
})
|
|
||||||
.catch((error) => {
|
|
||||||
console.error('获取设备信息失败', error)
|
|
||||||
uni.hideLoading()
|
|
||||||
})
|
|
||||||
} catch (error) {
|
} catch (error) {
|
||||||
console.error('查询失败:', error)
|
console.error('查询失败:', error)
|
||||||
uni.showToast({
|
} finally {
|
||||||
title: '查询失败,请重试',
|
uni.hideLoading()
|
||||||
icon: 'none',
|
|
||||||
})
|
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
|
||||||
|
|
@ -755,9 +774,14 @@ export default {
|
||||||
async changeTag() {
|
async changeTag() {
|
||||||
if (!this.queryCodeParams.maId) return
|
if (!this.queryCodeParams.maId) return
|
||||||
try {
|
try {
|
||||||
const response = await getDeviceListAPI({ maId: this.queryCodeParams.maId })
|
let res = null
|
||||||
if (response.data && response.data.length !== 0) {
|
if (this.queryParams?.jiJuType == 2) {
|
||||||
this.codeData = response.data[0]
|
res = await getDeviceListAPINew({ maId: this.queryCodeParams.maId })
|
||||||
|
} else {
|
||||||
|
res = await getDeviceListAPI({ maId: this.queryCodeParams.maId })
|
||||||
|
}
|
||||||
|
if (res.data && res.data.length !== 0) {
|
||||||
|
this.codeData = res.data[0]
|
||||||
}
|
}
|
||||||
} catch (error) {
|
} catch (error) {
|
||||||
console.error('获取编号信息失败', error)
|
console.error('获取编号信息失败', error)
|
||||||
|
|
|
||||||
|
|
@ -36,7 +36,7 @@
|
||||||
<uni-row :gutter="24" style="display: flex; align-items: center">
|
<uni-row :gutter="24" style="display: flex; align-items: center">
|
||||||
<uni-col :span="6">出库方式:</uni-col>
|
<uni-col :span="6">出库方式:</uni-col>
|
||||||
<uni-col :span="6">
|
<uni-col :span="6">
|
||||||
<view class="coding-btn" @tap="onCodeIdentify">编码识别</view>
|
<view class="coding-btn" @tap="onCodeIdentify">OCR识别</view>
|
||||||
</uni-col>
|
</uni-col>
|
||||||
<uni-col :span="6">
|
<uni-col :span="6">
|
||||||
<view class="coding-btn" @tap="scanStart">二维码出库</view>
|
<view class="coding-btn" @tap="scanStart">二维码出库</view>
|
||||||
|
|
@ -205,11 +205,20 @@ const toggleForm = () => {
|
||||||
onLoad((options) => {
|
onLoad((options) => {
|
||||||
queryParams.value = JSON.parse(options.queryParams)
|
queryParams.value = JSON.parse(options.queryParams)
|
||||||
console.log('🚀 ~ queryParams.value:', queryParams.value)
|
console.log('🚀 ~ queryParams.value:', queryParams.value)
|
||||||
|
getCodeDetailData(queryParams.value.id, queryParams.value.publishTask, queryParams.value.typeId) //获取详情
|
||||||
})
|
})
|
||||||
|
|
||||||
onShow(() => {
|
onShow(() => {
|
||||||
|
uni.$once('paramsReceived', (data) => {
|
||||||
|
console.log('🚀 ~ onShow ~ data:', data)
|
||||||
|
// 如果data.maId 不在 checkedIds 中 就往里面添加
|
||||||
|
if (!checkedIds.value.some(item => item.maId === data.maId)) {
|
||||||
|
checkedIds.value.push(data)
|
||||||
|
getCodeDeviceListData()
|
||||||
|
}
|
||||||
|
})
|
||||||
console.log(queryParams.value)
|
console.log(queryParams.value)
|
||||||
getCodeDetailData(queryParams.value.id, queryParams.value.publishTask, queryParams.value.typeId) //获取详情
|
// getCodeDetailData(queryParams.value.id, queryParams.value.publishTask, queryParams.value.typeId) //获取详情
|
||||||
})
|
})
|
||||||
|
|
||||||
const isWithinOneMonth = (dateStr) => {
|
const isWithinOneMonth = (dateStr) => {
|
||||||
|
|
@ -234,6 +243,7 @@ const getCodeDetailData = async (id, publishTask, typeId) => {
|
||||||
console.log('xxxxxxxxxxxxxx', formData.value, maxNum.value)
|
console.log('xxxxxxxxxxxxxx', formData.value, maxNum.value)
|
||||||
maxNum.value = formData.value.preNum - formData.value.alNum
|
maxNum.value = formData.value.preNum - formData.value.alNum
|
||||||
|
|
||||||
|
queryParams.value.jiJuType = res.data.jiJuType
|
||||||
queryCodeParams.value.typeId = queryParams.value.typeId
|
queryCodeParams.value.typeId = queryParams.value.typeId
|
||||||
queryCodeParams.value.pageNum = 1
|
queryCodeParams.value.pageNum = 1
|
||||||
codeDeviceList.value = []
|
codeDeviceList.value = []
|
||||||
|
|
@ -245,10 +255,11 @@ const getCodeDeviceListData = async () => {
|
||||||
const ids = checkedIds.value.map((item) => item.maId)
|
const ids = checkedIds.value.map((item) => item.maId)
|
||||||
const checkedIdSet = new Set(ids)
|
const checkedIdSet = new Set(ids)
|
||||||
const res = await getCodeDeviceListAPI(queryCodeParams.value)
|
const res = await getCodeDeviceListAPI(queryCodeParams.value)
|
||||||
|
console.log('🚀 ~ getCodeDeviceListData ~ res:', res)
|
||||||
const newRows = res.rows || []
|
const newRows = res.rows || []
|
||||||
const map = new Map()
|
const map = new Map()
|
||||||
|
|
||||||
// 先放入旧数据(可保留滚动加载场景)
|
// 先放入旧数据(保留滚动加载场景)
|
||||||
codeDeviceList.value.forEach((item) => {
|
codeDeviceList.value.forEach((item) => {
|
||||||
map.set(item.maId, item)
|
map.set(item.maId, item)
|
||||||
})
|
})
|
||||||
|
|
@ -261,8 +272,12 @@ const getCodeDeviceListData = async () => {
|
||||||
})
|
})
|
||||||
})
|
})
|
||||||
|
|
||||||
// 更新最终列表
|
// 更新最终列表:已勾选的排在最前面
|
||||||
codeDeviceList.value = Array.from(map.values())
|
const allItems = Array.from(map.values())
|
||||||
|
codeDeviceList.value = [
|
||||||
|
...allItems.filter(item => item.checked), // 勾选的
|
||||||
|
...allItems.filter(item => !item.checked) // 未勾选的
|
||||||
|
]
|
||||||
total.value = res.total || 0
|
total.value = res.total || 0
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
@ -361,11 +376,12 @@ const onHandleOutbound = async () => {
|
||||||
title: '出库成功!',
|
title: '出库成功!',
|
||||||
icon: 'none',
|
icon: 'none',
|
||||||
})
|
})
|
||||||
getCodeDetailData(
|
// getCodeDetailData(
|
||||||
queryParams.value.id,
|
// queryParams.value.id,
|
||||||
queryParams.value.publishTask,
|
// queryParams.value.publishTask,
|
||||||
queryParams.value.typeId,
|
// queryParams.value.typeId,
|
||||||
) //获取详情
|
// ) //获取详情
|
||||||
|
uni.navigateBack()
|
||||||
}
|
}
|
||||||
} catch (error) {
|
} catch (error) {
|
||||||
console.log('🚀 ~ onHandleOutbound ~ error:', error)
|
console.log('🚀 ~ onHandleOutbound ~ error:', error)
|
||||||
|
|
@ -519,7 +535,7 @@ const onCodeIdentify = () => {
|
||||||
})
|
})
|
||||||
} else {
|
} else {
|
||||||
uni.navigateTo({
|
uni.navigateTo({
|
||||||
url: `/pages/picking/outbound/codeOutScan?queryParams=${JSON.stringify(
|
url: `/pages/picking/outbound/codeOutScan?params=${JSON.stringify(
|
||||||
queryParams.value,
|
queryParams.value,
|
||||||
)}`,
|
)}`,
|
||||||
})
|
})
|
||||||
|
|
|
||||||
|
|
@ -0,0 +1,516 @@
|
||||||
|
<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()">
|
||||||
|
<text style="color: #fff">开始识别</text>
|
||||||
|
</view>
|
||||||
|
</view>
|
||||||
|
|
||||||
|
<!-- <view> 参数:{{ testParams }} </view>
|
||||||
|
<view> 返回:{{ resData }} </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="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: {},
|
||||||
|
testParams: '',
|
||||||
|
resData: '',
|
||||||
|
}
|
||||||
|
},
|
||||||
|
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() {
|
||||||
|
// 弹出操作菜单,让用户选择拍照或从相册选择
|
||||||
|
uni.showActionSheet({
|
||||||
|
itemList: ['拍照', '从相册选择'],
|
||||||
|
success: (res) => {
|
||||||
|
if (res.tapIndex === 0) {
|
||||||
|
this.getCamera()
|
||||||
|
} else if (res.tapIndex === 1) {
|
||||||
|
// 从相册选择
|
||||||
|
|
||||||
|
this.getPhoto()
|
||||||
|
// uni.chooseImage({
|
||||||
|
// count: 1,
|
||||||
|
// sourceType: ['album'],
|
||||||
|
// success: async (res) => {
|
||||||
|
// // ... 已有代码 ...
|
||||||
|
// const tempFilePath = res.tempFilePaths[0]
|
||||||
|
// console.log('选择的图片路径:', tempFilePath)
|
||||||
|
// // 调用图片识别接口,这里需要替换为实际的接口
|
||||||
|
// let base64 = await this.imgToBase64(tempFilePath) // 修正这里的参数
|
||||||
|
// let params = {
|
||||||
|
// image: base64,
|
||||||
|
// jiju_type: '12231',
|
||||||
|
// 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.code == 200) {
|
||||||
|
// uni.showToast({
|
||||||
|
// title: '出库成功!',
|
||||||
|
// icon: 'none',
|
||||||
|
// })
|
||||||
|
// } else {
|
||||||
|
// uni.showToast({ title: '出库失败!', icon: 'none' }) // 修正提示信息
|
||||||
|
// }
|
||||||
|
// },
|
||||||
|
// fail: (err) => {
|
||||||
|
// uni.showToast({
|
||||||
|
// title: '请求失败:' + err.errMsg,
|
||||||
|
// icon: 'none',
|
||||||
|
// })
|
||||||
|
// },
|
||||||
|
// })
|
||||||
|
// },
|
||||||
|
// fail: (err) => {
|
||||||
|
// console.error('选择图片失败:', err)
|
||||||
|
// uni.showToast({
|
||||||
|
// title: '选择图片失败',
|
||||||
|
// icon: 'none',
|
||||||
|
// })
|
||||||
|
// },
|
||||||
|
// })
|
||||||
|
}
|
||||||
|
},
|
||||||
|
fail: (err) => {
|
||||||
|
console.error('操作菜单选择失败:', err)
|
||||||
|
},
|
||||||
|
})
|
||||||
|
},
|
||||||
|
|
||||||
|
imgToBase64(filePath) {
|
||||||
|
return new Promise((resolve, reject) => {
|
||||||
|
return new Promise((resolve, reject) => {
|
||||||
|
const xhr = new XMLHttpRequest()
|
||||||
|
xhr.open('GET', filePath, true)
|
||||||
|
xhr.responseType = 'blob'
|
||||||
|
xhr.onload = () => {
|
||||||
|
if (xhr.status === 200) {
|
||||||
|
const reader = new FileReader()
|
||||||
|
reader.onloadend = (evt) => {
|
||||||
|
// 去掉 data:URL 前缀
|
||||||
|
const base64WithoutPrefix = evt.target.result.split(',')[1]
|
||||||
|
resolve(base64WithoutPrefix)
|
||||||
|
}
|
||||||
|
reader.onerror = reject
|
||||||
|
reader.readAsDataURL(xhr.response)
|
||||||
|
} else {
|
||||||
|
reject(new Error(`请求图片失败,状态码: ${xhr.status}`))
|
||||||
|
}
|
||||||
|
}
|
||||||
|
xhr.onerror = reject
|
||||||
|
xhr.send()
|
||||||
|
})
|
||||||
|
})
|
||||||
|
},
|
||||||
|
|
||||||
|
getCamera() {
|
||||||
|
console.log(1)
|
||||||
|
navigator.camera.getPicture(this.onCameraSuccess, this.onCameraError, {
|
||||||
|
quality: 50,
|
||||||
|
destinationType: window.Camera.DestinationType.DATA_URL,
|
||||||
|
sourceType: window.Camera.PictureSourceType.CAMERA,
|
||||||
|
})
|
||||||
|
},
|
||||||
|
getPhoto() {
|
||||||
|
console.log(2)
|
||||||
|
navigator.camera.getPicture(this.onCameraSuccess, this.onCameraError, {
|
||||||
|
quality: 50,
|
||||||
|
destinationType: window.Camera.DestinationType.DATA_URL,
|
||||||
|
sourceType: window.Camera.PictureSourceType.SAVEDPHOTOALBUM,
|
||||||
|
})
|
||||||
|
},
|
||||||
|
onCameraError(message) {
|
||||||
|
console.log(message)
|
||||||
|
},
|
||||||
|
onCameraSuccess(file) {
|
||||||
|
// const file1 = "data:image/jpeg;base64," + file;
|
||||||
|
const file1 = file
|
||||||
|
let params = {
|
||||||
|
image: file1,
|
||||||
|
jiju_type: '',
|
||||||
|
auth_lic:
|
||||||
|
'xIWDlaDVdijcBB4mjhGCPYk5Kvk8tHZJbUn+vW+ih15+MYx98e/PXyBmKL5gFcWMPznLgDA15QuSAnZQSLddwdy9HkZgtuQDEEZZ351Eyb1eiDUccUnyoSGIrNimbx5TooBNNPYqU4qJeFrPJXAqjBHzRrxoBxuR2CEGKQPgHC4=',
|
||||||
|
}
|
||||||
|
|
||||||
|
this.testParams = params
|
||||||
|
// this.$http
|
||||||
|
// .post("/dzqm/uploadSignature", {
|
||||||
|
// base64Str: file1,
|
||||||
|
// })
|
||||||
|
// .then((res) => {
|
||||||
|
// console.log(res);
|
||||||
|
// if (res.code == 200) {
|
||||||
|
// // this.src = file
|
||||||
|
// this.$set(this.obj, "src", file1);
|
||||||
|
// this.$toast("上传成功!");
|
||||||
|
// this.PictureVisible = false;
|
||||||
|
// }
|
||||||
|
// });
|
||||||
|
|
||||||
|
uni.request({
|
||||||
|
url: '/material/app/ocr/getOcrCode',
|
||||||
|
method: 'post',
|
||||||
|
data: params,
|
||||||
|
header: {
|
||||||
|
'Content-Type': 'application/json', // 根据后端要求设置请求头,常见的 POST 请求数据格式为 JSON
|
||||||
|
},
|
||||||
|
success: (res) => {
|
||||||
|
// const resData = JSON.stringify(res, null, 2)
|
||||||
|
// this.resData = res
|
||||||
|
|
||||||
|
const { data: resData } = res
|
||||||
|
|
||||||
|
if (resData.data.data.result) {
|
||||||
|
this.queryCodeParams.maCode = resData.data.data.result
|
||||||
|
this.getCode()
|
||||||
|
} else {
|
||||||
|
uni.showToast({
|
||||||
|
title: '识别失败!' + resData.data.msg,
|
||||||
|
icon: 'none',
|
||||||
|
})
|
||||||
|
}
|
||||||
|
// uni.showModal({
|
||||||
|
// title: '返回数据',
|
||||||
|
// content: resData.data,
|
||||||
|
// showCancel: false, // 不显示取消按钮
|
||||||
|
// })
|
||||||
|
|
||||||
|
// if (resData.data.data.data.result) {
|
||||||
|
// this.queryCodeParams.maCode = resData.data.data.data.result
|
||||||
|
// this.getCode()
|
||||||
|
// } else {
|
||||||
|
// uni.showToast({
|
||||||
|
// title: '识别失败!' + resData.data.data.msg,
|
||||||
|
// icon: 'none',
|
||||||
|
// })
|
||||||
|
// }
|
||||||
|
|
||||||
|
// uni.showModal({
|
||||||
|
// title: '返回数据',
|
||||||
|
// content: resData,
|
||||||
|
// showCancel: false, // 不显示取消按钮
|
||||||
|
// })
|
||||||
|
// if (res.code == 200) {
|
||||||
|
// uni.showToast({
|
||||||
|
// title: '出库成功!',
|
||||||
|
// icon: 'none',
|
||||||
|
// })
|
||||||
|
// } else {
|
||||||
|
// uni.showToast({ title: '出库失败!', icon: 'none' }) // 修正提示信息
|
||||||
|
// }
|
||||||
|
},
|
||||||
|
fail: (err) => {
|
||||||
|
uni.showToast({
|
||||||
|
title: '请求失败:' + err.errMsg,
|
||||||
|
icon: 'none',
|
||||||
|
})
|
||||||
|
},
|
||||||
|
})
|
||||||
|
},
|
||||||
|
//编码检索
|
||||||
|
async getCode() {
|
||||||
|
let param = {
|
||||||
|
maCode: this.queryCodeParams.maCode,
|
||||||
|
typeId: this.queryCodeParams.typeId,
|
||||||
|
maStatus: 1,
|
||||||
|
}
|
||||||
|
uni.request({
|
||||||
|
url: '/material/ma_machine/list',
|
||||||
|
method: 'get',
|
||||||
|
data: param,
|
||||||
|
success: (res) => {
|
||||||
|
res = res.data
|
||||||
|
console.log(res)
|
||||||
|
if (res.rows && res.rows.length > 0) {
|
||||||
|
this.codeData = res.rows[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 onHandleOutbound() {
|
||||||
|
let paramsList = []
|
||||||
|
paramsList.push({
|
||||||
|
maCode: this.codeData.maCode,
|
||||||
|
maId: this.codeData.maId,
|
||||||
|
manageType: 0,
|
||||||
|
outNum: 1,
|
||||||
|
typeId: this.codeData.typeId,
|
||||||
|
parentId: this.queryParams.parentId,
|
||||||
|
})
|
||||||
|
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: 10%;
|
||||||
|
/* 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>
|
||||||
File diff suppressed because it is too large
Load Diff
|
|
@ -1,7 +1,7 @@
|
||||||
<template>
|
<template>
|
||||||
<view class="page-container">
|
<view class="page-container">
|
||||||
<!-- 表单信息区域 -->
|
<!-- 表单信息区域 -->
|
||||||
<scroll-view scroll-y style="height: 100vh;">
|
<!-- <scroll-view scroll-y style="height: 100vh;"> -->
|
||||||
<view class="form-section" v-if="queryParams.manageType==1">
|
<view class="form-section" v-if="queryParams.manageType==1">
|
||||||
<view class="form-content">
|
<view class="form-content">
|
||||||
<uni-forms :model="formData" label-width="100" :border="true">
|
<uni-forms :model="formData" label-width="100" :border="true">
|
||||||
|
|
@ -21,7 +21,8 @@
|
||||||
</view>
|
</view>
|
||||||
</view>
|
</view>
|
||||||
<scroll-view scroll-y @scrolltolower="onScrollTolower" v-if="queryParams.manageType==0" style="padding-bottom: 90rpx">
|
<scroll-view scroll-y @scrolltolower="onScrollTolower" v-if="queryParams.manageType==0" style="padding-bottom: 90rpx">
|
||||||
<view class="table-list-item" v-for="item in codeDeviceList" :key="item.maId">
|
<view class="table-list-item" v-for="(item, index) in codeDeviceList" :key="item.maId">
|
||||||
|
<span style="color: #409EFF">{{ index + 1 }}.</span>
|
||||||
<uni-row :gutter="24">
|
<uni-row :gutter="24">
|
||||||
<uni-col :span="6">物资类型:</uni-col>
|
<uni-col :span="6">物资类型:</uni-col>
|
||||||
<uni-col :span="14">
|
<uni-col :span="14">
|
||||||
|
|
@ -73,7 +74,7 @@
|
||||||
{{ finish ? '没有更多数据了~' : '正在加载...' }}
|
{{ finish ? '没有更多数据了~' : '正在加载...' }}
|
||||||
</view>
|
</view>
|
||||||
</scroll-view>
|
</scroll-view>
|
||||||
</scroll-view>
|
<!-- </scroll-view> -->
|
||||||
<!-- <view class="outbound-btn" @tap="leaseOutBack" v-if="isBack"> 退回 </view> -->
|
<!-- <view class="outbound-btn" @tap="leaseOutBack" v-if="isBack"> 退回 </view> -->
|
||||||
</view>
|
</view>
|
||||||
</template>
|
</template>
|
||||||
|
|
@ -124,13 +125,15 @@ const getCodeDeviceListData = async () => {
|
||||||
const res = await getDetailsByIdApi(queryCodeParams.value)
|
const res = await getDetailsByIdApi(queryCodeParams.value)
|
||||||
console.log("xxxxxxxxxxxxxx",res)
|
console.log("xxxxxxxxxxxxxx",res)
|
||||||
if(queryParams.value.manageType==0){
|
if(queryParams.value.manageType==0){
|
||||||
codeDeviceList.value.push(...res.data.rows)
|
// codeDeviceList.value.push(...res.data.rows)
|
||||||
if (isBack.value&&codeDeviceList.value.length > 0) {
|
// if (isBack.value&&codeDeviceList.value.length > 0) {
|
||||||
codeDeviceList.value = codeDeviceList.value.map((e) => {
|
// codeDeviceList.value = codeDeviceList.value.map((e) => {
|
||||||
return { ...e, checked: false }
|
// return { ...e, checked: false }
|
||||||
})
|
// })
|
||||||
}
|
// }
|
||||||
|
codeDeviceList.value = res.data.rows || []
|
||||||
total.value = res.data.total;
|
total.value = res.data.total;
|
||||||
|
console.log('🚀 ~ getCodeDeviceListData ~ total.value:', total.value)
|
||||||
}else if(queryParams.value.manageType==1){
|
}else if(queryParams.value.manageType==1){
|
||||||
if(res.data.rows&&res.data.rows.length>0){
|
if(res.data.rows&&res.data.rows.length>0){
|
||||||
formData.value=res.data.rows[0]
|
formData.value=res.data.rows[0]
|
||||||
|
|
@ -157,7 +160,7 @@ const onCodeSearch = () => {
|
||||||
|
|
||||||
// 滚动触底事件
|
// 滚动触底事件
|
||||||
const onScrollTolower = debounce(() => {
|
const onScrollTolower = debounce(() => {
|
||||||
// console.log('滚动触底--')
|
console.log('滚动触底--')
|
||||||
if (total.value > codeDeviceList.value.length) {
|
if (total.value > codeDeviceList.value.length) {
|
||||||
queryCodeParams.value.pageSize += 5
|
queryCodeParams.value.pageSize += 5
|
||||||
getCodeDeviceListData()
|
getCodeDeviceListData()
|
||||||
|
|
@ -229,7 +232,7 @@ const leaseOutBack = async (item) => {
|
||||||
<style lang="scss" scoped>
|
<style lang="scss" scoped>
|
||||||
.page-container {
|
.page-container {
|
||||||
display: flex;
|
display: flex;
|
||||||
height: 100%;
|
height: 100vh;
|
||||||
flex-direction: column;
|
flex-direction: column;
|
||||||
background-color: #f7f8fa;
|
background-color: #f7f8fa;
|
||||||
padding: 24rpx;
|
padding: 24rpx;
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue