出库优化

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="section-header" @tap="toggleForm">
<text class="title">任务信息</text>
<div>
<span style="margin-right: 20px"
>{{ checkedIds.length }} / {{ maxNum }}</span
>
<text class="toggle-icon" :class="{ 'is-expanded': isExpanded }"></text>
</div>
</view>
<view class="form-content" :class="{ 'is-expanded': isExpanded }">
<uni-forms :model="formData" label-width="100" :border="true">
@ -122,7 +127,9 @@
:checked="item.checked"
:disabled="
(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)"
/>
@ -239,7 +246,7 @@ onShow(() => {
uni.$once('paramsReceived', (data) => {
console.log('🚀 ~ onShow ~ data:', data)
// 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)
getCodeDeviceListData()
}
@ -290,33 +297,63 @@ const getCodeDetailData = async (id, publishTask, typeId) => {
//
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 res = await getCodeDeviceListAPI(queryCodeParams.value)
console.log('🚀 ~ getCodeDeviceListData ~ res:', res)
const newRows = res.rows || []
const map = new Map()
const newRows = res?.rows ?? []
const maCode = String(queryCodeParams.value?.maCode ?? '').trim()
//
codeDeviceList.value.forEach((item) => {
map.set(item.maId, item)
})
// checked
newRows.forEach((item) => {
map.set(item.maId, {
// maCode
if (maCode) {
codeDeviceList.value = newRows.map((item) => ({
...item,
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 })
}
})
//
const allItems = Array.from(map.values())
codeDeviceList.value = [
...allItems.filter(item => item.checked), //
...allItems.filter(item => !item.checked) //
]
total.value = res.total || 0
// 2) maId
const seen = new Set(ids) // maId
const rest = []
const pushIfNew = (item) => {
if (!item) return
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 isSelectList = codeDeviceList.value.filter((e) => e.checked === true)
const isSelectList = checkedIds.value.filter((e) => e.checked === true)
if (maxNum.value === isSelectList.length) {
uni.showToast({
title: '勾选设备已达到最大待出库数量!',
@ -379,6 +416,13 @@ const onHandleOutbound = async () => {
})
return
}
if (checkedIds.value.length > maxNum.value) {
uni.showToast({
title: '勾选设备已超过最大待出库数量!',
icon: 'none',
})
return
}
uni.showLoading()
loading.value = true
//
@ -575,9 +619,7 @@ const onCodeIdentify = () => {
})
} else {
uni.navigateTo({
url: `/pages/picking/outbound/codeOutScan?params=${JSON.stringify(
queryParams.value,
)}`,
url: `/pages/picking/outbound/codeOutScan?params=${JSON.stringify(queryParams.value)}`,
})
}
}

View File

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