出库优化
This commit is contained in:
parent
8f8a20ba4a
commit
57726db63d
|
|
@ -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)}`,
|
||||
})
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -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">
|
||||
|
|
|
|||
Loading…
Reference in New Issue