Files
hht-oulun-uni/pages/entry/mater-group.vue
2025-08-07 16:34:57 +08:00

194 lines
4.8 KiB
Vue
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

<template>
<view class="zd_container">
<!-- 物料组盘入库管理 -->
<nav-bar :title="title"></nav-bar>
<view class="zd_content">
<view class="zd_wrapper">
<view class="zd-row border-bottom">
<view class="zd-col-7">
<span class="filter_label">载具编码</span>
</view>
<view class="zd-col-17">
<search-box v-model="val2"/>
</view>
</view>
<view class="zd-row border-bottom">
<view class="zd-col-7">
<span class="filter_label">物料信息</span>
</view>
<view class="zd-col-17">
<input type="text" class="filter_input" v-model="wlxxtext" @tap="toJump">
</view>
</view>
<view class="zd-row border-bottom">
<view class="zd-col-7">
<span class="filter_label">源单编码</span>
</view>
<view class="zd-col-17">
<search-box v-model="val1"/>
</view>
</view>
</view>
<view class="zd_wrapper grid-wraper">
<view class="slide_new">
<table>
<thead>
<tr>
<th>物料名称</th>
<th>物料编码</th>
<th>数量</th>
<th>批次号</th>
</tr>
</thead>
<tbody>
<tr v-for="(e, i) in dataList" :key="i">
<td>{{e.material_name}}</td>
<td>{{e.material_code}}</td>
<td>{{e.qty}}</td>
<!-- <td><input type="number" class="sin_input" v-model="e.qty" @blur="handleBlur(e)"></td> -->
<td>{{e.pcsn}}</td>
</tr>
</tbody>
</table>
</view>
</view>
</view>
<view class="zd-row submit-bar">
<button class="zd-col-6 button-default" @tap="clearUp">清空</button>
<button class="zd-col-16 button-primary" :class="{'button-info': !this.val2 || !this.dataList.length}" :disabled="disabled" @tap="_groupPlate">组盘确认</button>
</view>
</view>
</template>
<script>
import NavBar from '@/components/NavBar.vue'
import SearchBox from '@/components/SearchBox.vue'
import NumberInput from '@/components/NumberInput.vue'
import {groupPlate} from '@/utils/getData3.js'
export default {
components: {
NavBar,
SearchBox,
NumberInput
},
data() {
return {
title: '',
val1: '',
val2: '',
val3: '',
wlxxtext: '',
dataList: [],
curList: [],
disabled: false
};
},
onLoad (options) {
this.title = options.title
},
onShow() {
if (this.$store.getters.publicArr.length) {
// this.dataList = [...this.dataList, ...this.$store.getters.publicArr]
this.dataList = this.mergeArrays(this.dataList, this.$store.getters.publicArr)
}
},
methods: {
mergeArrays (arr1, arr2) {
// 创建Map存储结果以material_id为键
const resultMap = new Map();
// 先添加arr1的所有记录
arr1.forEach(item => {
resultMap.set(item.material_id, { ...item });
});
// 合并arr2的记录
arr2.forEach(item => {
const materialId = item.material_id;
if (resultMap.has(materialId)) {
// 存在相同material_id更新qty为arr2的值
const existing = resultMap.get(materialId);
resultMap.set(materialId, {
...existing, // 保留原有字段
qty: item.qty, // 使用arr2的qty值
// 如果arr2有pcsn则更新否则保留原来的pcsn
...(item.pcsn !== undefined && { pcsn: item.pcsn })
});
} else {
// 不存在相同material_id直接添加新记录
resultMap.set(materialId, { ...item });
}
});
// 将Map的值转为数组
return Array.from(resultMap.values());
},
handleBlur (e) {
if (e.qty) {
if (e.qty < 0) {
e.qty = 0
} else {
e.qty = e.qty.replace(/[^0-9]/g, '')
e.qty = e.qty.replace(/^0+/, '') || '0'
}
} else {
// uni.showToast({
// title: '数量必填',
// icon: 'none'
// })
}
},
toJump () {
uni.navigateTo({
url: '/pages/common/mater-list?title=查询物料'
})
},
clearUp () {
this.dataList = []
this.val1 = ''
this.val2 = ''
this.disabled = false
},
async _groupPlate () {
this.disabled = true
if (!this.val2 || !this.dataList.length) {
this.disabled = false
return
}
// let allValid = this.dataList.every(item => item.qty !== '');
// console.log(allValid, 666)
// console.log(this.dataList, 666)
// if (!allValid) {
// uni.showToast({
// title: '数量必填',
// icon: 'none'
// })
// this.disabled = false
// return
// }
try {
let res = await groupPlate(this.dataList, this.val2, this.val1)
if (res.code === '200') {
uni.showToast({
title: res.message,
icon: 'none'
})
this.clearUp()
} else {
uni.showToast({
title: res.message,
icon: 'none'
})
this.disabled = false
}
} catch (e) {
this.disabled = false
}
}
}
}
</script>
<style lang="stylus">
</style>