盘点绑定

This commit is contained in:
bb_pan 2025-07-01 11:15:28 +08:00
parent b441997a84
commit c1d0664cdb
7 changed files with 254 additions and 35 deletions

View File

@ -692,6 +692,18 @@
"navigationStyle": "custom"
}
},
{
"path": "pages/inventoryBinding/index",
"style": {
"navigationBarTitleText": "盘点绑定"
}
},
{
"path": "pages/inventoryBinding/qrCodeBinding",
"style": {
"navigationStyle": "custom"
}
},
// start
//
{

View File

@ -71,18 +71,18 @@
</text>
</view>
</view>
</view>
</template>
<script setup>
import { ref,computed } from 'vue'
import { onShow,onLoad } from '@dcloudio/uni-app'
import { ref } from 'vue'
import { onShow } from '@dcloudio/uni-app'
const urlPermissions = ref([])
onShow((options) => {
urlPermissions.value = uni.getStorageSync('urlPermissions')
console.log("yyyyyyy",urlPermissions.value)
urlPermissions.value = uni.getStorageSync('urlPermissions')
console.log('yyyyyyy', urlPermissions.value)
})
//
@ -104,12 +104,6 @@ const newInfoList = ref([
},
])
// 使 newInfoList
const newInfoListTwo = computed(() => {
return newInfoList.value.filter(item => urlPermissions.value.includes(item.url))
})
//
const newPurchaseList = ref([
{
@ -119,12 +113,6 @@ const newPurchaseList = ref([
},
])
// 使 newInfoList
const newPurchaseListTwo = computed(() => {
return newPurchaseList.value.filter(item => urlPermissions.value.includes(item.url))
})
//
const pickingList = ref([
{
@ -134,12 +122,6 @@ const pickingList = ref([
},
])
// 使 newInfoList
const pickingListTwo = computed(() => {
return pickingList.value.filter(item => urlPermissions.value.includes(item.url))
})
//
const integratedQueryList = ref([
{
@ -174,12 +156,6 @@ const integratedQueryList = ref([
},
])
// 使 newInfoList
const integratedQueryListTwo = computed(() => {
return integratedQueryList.value.filter(item => urlPermissions.value.includes(item.url))
})
const onNavigateTo = (url) => {
uni.navigateTo({ url })
}
@ -188,14 +164,13 @@ const onNavigateTo = (url) => {
<style lang="scss">
page {
overflow: hidden;
overflow-y: auto;
overflow-y: auto;
}
.content {
padding: 24rpx;
min-height: 100vh;
background-color: #f7f8fa;
//
.new-purchase {
background-color: #fff;
@ -231,7 +206,6 @@ page {
background-color: #2d73cf;
}
//
.purchase-item {
width: 25%;

View File

@ -0,0 +1,92 @@
<template>
<div>
<ScanQrCode
ref="scanQrCodeRef"
@scanSuccessBox="handleScanSuccess"
@scanErrorBox="handleScanError"
/>
</div>
</template>
<script setup>
import { ref, onMounted } from 'vue'
import ScanQrCode from '@/pages/devicesSearch/ScanQrCode.vue'
import { onShow } from '@dcloudio/uni-app'
const scanQrCodeRef = ref()
const qrCode = ref('')
onShow(() => {
//
setTimeout(() => {
if (scanQrCodeRef.value) scanQrCodeRef.value.scanQrCode()
}, 300)
})
//
const handleScanSuccess = (result) => {
qrCode.value = result?.text?.split('?qrcode=')[1] || result?.text
if (qrCode.value === '') {
uni.showToast({ title: '扫码识别失败', icon: 'none' })
setTimeout(() => {
if (scanQrCodeRef.value) scanQrCodeRef.value.scanQrCode()
}, 500)
} else {
uni.navigateTo({
url: '/pages/inventoryBinding/qrCodeBinding?qrCode=' + JSON.stringify(qrCode.value),
})
}
}
//
const handleScanError = (error) => {
console.error('扫描出错:', error.message)
uni.showToast({ title: error.message, icon: 'none' })
setTimeout(() => {
if (scanQrCodeRef.value) scanQrCodeRef.value.scanQrCode()
}, 500)
}
</script>
<style lang="scss" scoped>
.modal-wrapper {
padding: 40rpx 30rpx 20rpx;
width: 560rpx;
border-radius: 8rpx;
box-sizing: border-box;
}
.modal-title {
font-size: 32rpx;
font-weight: bold;
text-align: left;
margin-bottom: 24rpx;
}
.modal-content {
font-size: 28rpx;
color: #333;
text-align: left;
margin-bottom: 36rpx;
}
.modal-footer {
display: flex;
border-top: 1px solid #eee;
}
.btn {
flex: 1;
padding: 20rpx 0;
text-align: center;
font-size: 28rpx;
}
.cancel-btn {
color: #333;
border-right: 1px solid #eee;
}
.confirm-btn {
color: #007aff;
}
</style>

View File

@ -0,0 +1,124 @@
<template>
<uni-nav-bar
fixed
:border="false"
background-color="#dcf4ff"
color="#333"
status-bar
title="二维码绑定"
left-icon="left"
@clickLeft="back"
/>
<div class="item">
<div><span style="color: red">*</span>设备编码</div>
<uni-easyinput v-model="maCode" placeholder="请输入设备编码" />
</div>
<div class="item">
<div>出厂编码</div>
<uni-easyinput v-model="outFacCode" placeholder="请输入出厂编码" />
</div>
<div class="deviceInfo">
<div>二维码编号{{ deviceInfo.qrCode }}</div>
<div>设备名称{{ deviceInfo.typeName }}</div>
<div>设备规格{{ deviceInfo.typeModelName }}</div>
</div>
<div class="btn">
<button type="primary" @click="handleSubmit"> </button>
</div>
</template>
<script setup>
import { ref, reactive } from 'vue'
import { onLoad } from '@dcloudio/uni-app'
import { getInventoryInfo, inventoryBind } from '@/services/information'
const maCode = ref('') //
const outFacCode = ref('') //
//
let deviceInfo = reactive({
qrCode: '',
typeId: '',
typeName: '',
typeModelName: '',
})
onLoad((opt) => {
console.log('onLoad', opt)
deviceInfo.qrCode = opt.qrCode ? JSON.parse(opt.qrCode) : ''
if (deviceInfo.qrCode) {
getDeviceInfo()
}
})
const back = () => {
uni.navigateBack()
}
//
const getDeviceInfo = async () => {
try {
const res = await getInventoryInfo({ qrCode: deviceInfo.qrCode })
console.log('🚀 ~ getDeviceInfo ~ res:', res)
deviceInfo.typeId = res.data.typeId
deviceInfo.typeName = res.data.materialName
deviceInfo.typeModelName = res.data.materialModel
} catch (error) {
console.log('🚀 ~ getDeviceInfo ~ error:', error)
back()
}
}
//
const handleSubmit = () => {
if (!maCode.value) {
uni.showToast({
title: '请输入设备编码',
icon: 'none',
})
return
}
//
uni.showModal({
title: '提示',
content: '是否确认绑定?',
success: async (res) => {
console.log('🚀 ~ success: ~ res:', res)
if (res.confirm) {
const params = {
maCode: maCode.value,
outFacCode: outFacCode.value,
qrCode: deviceInfo.qrCode,
typeId: deviceInfo.typeId,
}
inventoryBind(params).then((res) => {
if (res.code === 200) {
uni.showToast({
title: '绑定成功',
icon: 'success',
})
back()
}
})
}
},
})
}
</script>
<style lang="scss" scoped>
::v-deep .uni-nav-bar-text {
font-size: 18px !important;
}
.item {
display: flex;
align-items: center;
justify-content: space-between;
padding: 20px 10px;
border-bottom: 1px solid #ccc;
}
.deviceInfo {
padding: 20px 10px;
}
.btn {
margin: 20px 10px;
}
</style>

View File

@ -99,7 +99,6 @@
</template>
<script setup>
import { getWsMaInfoList, updateCheckTime } from '@/services/wsMaInfo/wsMaInfo.js'
import { getInfoByCode, updateInfo } from '@/services/information'
import { getSupplierList } from '@/services/repair/repair.js'
import { onLoad } from '@dcloudio/uni-app'

View File

@ -148,7 +148,7 @@ const newInfoList = ref([
},
{
title: '盘点绑定',
url: '/pages/new-purchase/entry/index',
url: '/pages/inventoryBinding/index',
iconSrc: '../../static/workbench/panDian.png',
},
{

View File

@ -16,4 +16,22 @@ export const updateInfo = (data) => {
url: '/material/ma_machine',
data,
})
}
}
// 盘点绑定-获取设备信息
export const getInventoryInfo = (data) => {
return http({
method: 'GET',
url: '/material/purchase/bind/getInventoryInfo',
data,
})
}
// 盘点绑定-绑定
export const inventoryBind = (data) => {
return http({
method: 'POST',
url: '/material/purchase/bind/inventoryBind',
data,
})
}