出库优化

This commit is contained in:
bb_pan 2025-08-23 16:18:37 +08:00
parent 8f8a20ba4a
commit 57726db63d
2 changed files with 87 additions and 47 deletions

View File

@ -6,7 +6,12 @@
<view class="form-section"> <view class="form-section">
<view class="section-header" @tap="toggleForm"> <view class="section-header" @tap="toggleForm">
<text class="title">任务信息</text> <text class="title">任务信息</text>
<div>
<span style="margin-right: 20px"
>{{ checkedIds.length }} / {{ maxNum }}</span
>
<text class="toggle-icon" :class="{ 'is-expanded': isExpanded }"></text> <text class="toggle-icon" :class="{ 'is-expanded': isExpanded }"></text>
</div>
</view> </view>
<view class="form-content" :class="{ 'is-expanded': isExpanded }"> <view class="form-content" :class="{ 'is-expanded': isExpanded }">
<uni-forms :model="formData" label-width="100" :border="true"> <uni-forms :model="formData" label-width="100" :border="true">
@ -122,7 +127,9 @@
:checked="item.checked" :checked="item.checked"
:disabled=" :disabled="
(maxNum === isSelectNum && !item.checked) || (maxNum === isSelectNum && !item.checked) ||
(isWithinOneMonth(item.nextCheckTime) && item.jiJuType == 2 && item.isCheck == '1') (isWithinOneMonth(item.nextCheckTime) &&
item.jiJuType == 2 &&
item.isCheck == '1')
" "
style="transform: scale(0.7)" style="transform: scale(0.7)"
/> />
@ -239,7 +246,7 @@ onShow(() => {
uni.$once('paramsReceived', (data) => { uni.$once('paramsReceived', (data) => {
console.log('🚀 ~ onShow ~ data:', data) console.log('🚀 ~ onShow ~ data:', data)
// data.maId checkedIds // data.maId checkedIds
if (!checkedIds.value.some(item => item.maId === data.maId)) { if (!checkedIds.value.some((item) => item.maId === data.maId)) {
checkedIds.value.push(data) checkedIds.value.push(data)
getCodeDeviceListData() getCodeDeviceListData()
} }
@ -290,33 +297,63 @@ const getCodeDetailData = async (id, publishTask, typeId) => {
// //
const getCodeDeviceListData = async () => { const getCodeDeviceListData = async () => {
const ids = checkedIds.value.map((item) => item.maId) const ids = checkedIds.value.map((i) => i.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 maCode = String(queryCodeParams.value?.maCode ?? '').trim()
const map = new Map()
// // maCode
codeDeviceList.value.forEach((item) => { if (maCode) {
map.set(item.maId, item) codeDeviceList.value = newRows.map((item) => ({
})
// checked
newRows.forEach((item) => {
map.set(item.maId, {
...item, ...item,
checked: checkedIdSet.has(item.maId), checked: checkedIdSet.has(item.maId),
}) }))
total.value = res?.total ?? codeDeviceList.value.length
console.log('✅ 展示当前查询结果(含勾选标记):', codeDeviceList.value)
return
}
// maCode checkedIds + maId
const oldList = codeDeviceList.value ?? []
// Map
const newMap = new Map(newRows.map((it) => [it.maId, it]))
const oldMap = new Map(oldList.map((it) => [it.maId, it]))
const checkedIdMap = new Map(checkedIds.value.map((it) => [it.maId, it]))
// 1) checkedIds checked
const front = []
ids.forEach((id) => {
const best =
newMap.get(id) ?? //
oldMap.get(id) ?? //
checkedIdMap.get(id) // checkedIds maId
if (best) {
front.push({ ...best, checked: true })
}
}) })
// // 2) maId
const allItems = Array.from(map.values()) const seen = new Set(ids) // maId
codeDeviceList.value = [ const rest = []
...allItems.filter(item => item.checked), //
...allItems.filter(item => !item.checked) // const pushIfNew = (item) => {
] if (!item) return
total.value = res.total || 0 const key = item.maId
if (seen.has(key)) return
seen.add(key)
rest.push({ ...item, checked: checkedIdSet.has(key) })
}
//
oldList.forEach(pushIfNew)
//
newRows.forEach(pushIfNew)
codeDeviceList.value = [...front, ...rest]
total.value = res?.total ?? codeDeviceList.value.length
} }
// //
@ -352,7 +389,7 @@ const onChangeChecked = (item) => {
// //
const isSelectNum = computed(() => { const isSelectNum = computed(() => {
const isSelectList = codeDeviceList.value.filter((e) => e.checked === true) const isSelectList = checkedIds.value.filter((e) => e.checked === true)
if (maxNum.value === isSelectList.length) { if (maxNum.value === isSelectList.length) {
uni.showToast({ uni.showToast({
title: '勾选设备已达到最大待出库数量!', title: '勾选设备已达到最大待出库数量!',
@ -379,6 +416,13 @@ const onHandleOutbound = async () => {
}) })
return return
} }
if (checkedIds.value.length > maxNum.value) {
uni.showToast({
title: '勾选设备已超过最大待出库数量!',
icon: 'none',
})
return
}
uni.showLoading() uni.showLoading()
loading.value = true loading.value = true
// //
@ -575,9 +619,7 @@ const onCodeIdentify = () => {
}) })
} else { } else {
uni.navigateTo({ uni.navigateTo({
url: `/pages/picking/outbound/codeOutScan?params=${JSON.stringify( url: `/pages/picking/outbound/codeOutScan?params=${JSON.stringify(queryParams.value)}`,
queryParams.value,
)}`,
}) })
} }
} }

View File

@ -24,9 +24,7 @@
<uni-row :gutter="24"> <uni-row :gutter="24">
<uni-col :span="6">待修数量</uni-col> <uni-col :span="6">待修数量</uni-col>
<uni-col :span="18" <uni-col :span="18"
><view class="cont">{{ ><view class="cont">{{ queryParams.waitRepairNum }}</view>
queryParams.typeRepairNum - queryParams.typeRepairedNum - queryParams.typeScrapNum
}}</view>
</uni-col> </uni-col>
</uni-row> </uni-row>
<uni-row :gutter="24" style="display: flex;align-items: center"> <uni-row :gutter="24" style="display: flex;align-items: center">