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