pda_uniapp/pages/work/wms/inventoryConfirm.vue

445 lines
12 KiB
Vue
Raw Blame History

This file contains ambiguous Unicode characters!

This file contains ambiguous Unicode characters that may be confused with others in your current locale. If your use case is intentional and legitimate, you can safely ignore this warning. Use the Escape button to highlight these characters.

<template>
<view class="container">
<cu-custom bgColor="bg-gradual-pink" :isBack="true">
<block slot="backText">返回</block>
<block slot="content">盘点确认</block>
</cu-custom>
<view class="example">
<uni-forms ref="form" :model="formData" labelWidth="80px">
<uni-forms-item label="托盘条码" name="palletCode">
<!-- <view class="flex"> -->
<view class="flex-twice padding-0 radius">
<uni-easyinput ref="palletCodeInput" v-model="formData.palletCode" placeholder="请输入或扫描托盘编号"
@blur="queryPltInfo" />
</view>
<view class="flex-sub padding-0 margin-xs radius">
<view class="cu-capsule radius" v-if="billInfo.nowQty>0">
<view class='cu-tag bg-blue '>
库存数量{{billInfo.nowQty}}
</view>
<!-- <view class="cu-tag line-blue">
剩{{billInfo.totalSurplusQty}}
</view> -->
</view>
</view>
<!-- </view> -->
</uni-forms-item>
<!-- <uni-forms-item label="实际数量" name="actQty">
<uni-easyinput v-model="formData.actQty" placeholder="请输入实际数量" @blur="queryPltInfo" />
</uni-forms-item> -->
<!-- <uni-forms-item label="仓库号" name="houseCode">
<uni-easyinput v-model="formData.houseCode" placeholder="请输入仓库号" @blur="queryRkOrder" />
</uni-forms-item>
-->
</uni-forms>
<button type="primary" @click="formSubmit">提交</button>
<!--明细-->
<view v-if='billInfo.checkPltInfos.length>0'>
<view class="uni-container">
<uni-table ref="table" :loading="loading" border stripe type="selection" emptyText="暂无更多数据"
@selection-change="selectionChange">
<uni-tr>
<uni-th width="280" align="center">基本信息</uni-th>
<uni-th width="100" align="center">设置</uni-th>
</uni-tr>
<uni-tr v-for="(item, index) in billInfo.checkPltInfos" :key="index">
<uni-td>
<!-- <view class="name">
<view class="flex" v-for="column in tableClumns" :key="column.dataIndex">
<view class="flex-sub padding-0 margin-xs radius">{{ column.title }}
</view>
<view class="flex-twice padding-0 margin-xs radius">
{{ item[column.dataIndex]}}
</view>
</view>
</view> -->
<view class="flex">
<view class="flex-sub padding-0 margin-xs radius">盘点单据号</view>
<view class="flex-twice padding-0 margin-xs radius">{{item.invoiceCode}}</view>
</view>
<view class="flex">
<view class="flex-sub padding-0 margin-xs radius">盘点明细号</view>
<view class="flex-twice padding-0 margin-xs radius">{{item.itemCode}}</view>
</view>
<view class="flex">
<view class="flex-sub padding-0 margin-xs radius">托盘号</view>
<view class="flex-twice padding-0 margin-xs radius">{{item.palletCode}}</view>
</view>
<view class="flex">
<view class="flex-sub padding-0 margin-xs radius">物料编号</view>
<view class="flex-twice padding-0 margin-xs radius">{{item.skuCode}}</view>
</view>
<view class="flex">
<view class="flex-sub padding-0 margin-xs radius">物料名称</view>
<view class="flex-twice padding-0 margin-xs radius">{{item.skuName}}</view>
</view>
<view class="flex">
<view class="flex-sub padding-0 margin-xs radius">数量</view>
<view class="flex-twice padding-0 margin-xs radius">{{item.qty}}</view>
</view>
<view class="flex">
<view class="flex-sub padding-0 margin-xs radius">单位</view>
<view class="flex-twice padding-0 margin-xs radius">{{item.unit}}</view>
</view>
<view class="flex">
<view class="flex-sub padding-0 margin-xs radius">实际数量</view>
<view class="flex-twice padding-0 margin-xs radius">
<input placeholder="请输入实际数量" v-model="item.actQty"></input>
</view>
</view>
</uni-td>
<view class="uni-group" style="text-align: center;">
<view class="flex">
<button class="uni-button" size="mini" type="primary">修改</button>
</view>
<view class="flex"><button class="uni-button" size="mini" type="warn">删除</button>
</view>
</view>
</uni-td>
</uni-tr>
</uni-table>
<view class="uni-pagination-box"><uni-pagination show-icon :page-size="pageSize"
:current="pageCurrent" :total="total" @change="change" /></view>
</view>
</view>
</view>
<view class="cu-modal" :class="msgModalName=='Modal'?'show':''">
<view class="cu-dialog">
<view class="cu-bar bg-white justify-end">
<view class="content">{{msgTitleName}}</view>
<view class="action" @tap="hideMsgModal">
<text class="cuIcon-close text-red"></text>
</view>
</view>
<view class="padding-xl">
{{msg}}
</view>
</view>
</view>
</view>
</template>
<script>
import appGlobal from '../../Global.vue'
import {
queryInventoryPallet,
inventoryConfirm
} from "@/api/wms/inventoryConfirm.js"
import {
formatDate
} from 'tough-cookie';
export default {
data() {
return {
//表单中的数据信息
formData: {
palletCode: "", //托盘号
//actQty: "",//盘点后的实际数量
details: [] //表单中的盘点托盘明细
},
rules: {
palletCode: {
rules: [{
required: true,
errorMessage: '托盘号不能为空'
}]
},
actQty: {
rules: [{
required: true,
errorMessage: '实际数量不能为空'
}]
},
details: {
rules: [{
required: true,
errorMessage: '盘点托盘明细信息不能为空'
}]
},
},
//查询获取的单据信息
billInfo: {
nowQty: "", //库存数量
checkPltInfos: [] //盘点托盘明细表
},
//table 相关
searchVal: '',
tableData: [],
// 每页数据量
pageSize: 10,
// 当前页
pageCurrent: 1,
// 数据总量
total: 0,
loading: false,
//tabe选中的数据对象
selectedIndexs: [],
// 列配置
tableClumns: [{
dataIndex: "itemCode",
key: "itemCode",
title: "明细单号"
},
{
dataIndex: "batch",
key: "batch",
title: "批次"
},
{
dataIndex: "skuCode",
key: "skuCode",
title: "物料编号"
},
{
dataIndex: "skuName",
key: "skuName",
title: "物料名称"
},
{
dataIndex: "planQty",
key: "planQty",
title: "计划数量"
},
{
dataIndex: "lockQty",
key: "lockQty",
title: "锁定数量"
},
{
dataIndex: "qty",
key: "qty",
title: "组盘数量"
},
],
};
},
onReady() {
this.$refs.form.setRules(this.rules)
},
methods: {
/// 数据来源 [模拟]
async fetch(param) {
var response = await queryInventoryPallet(param);
return {
total: response.data.total,
data: response.data.record,
};
},
// 多选处理
selectedItems() {
return this.selectedIndexs.map(i => this.tableData[i])
},
// 多选
selectionChange(e) {
console.log(e.detail.index)
this.selectedIndexs = e.detail.index
//选中内容改变时获取选中数据
},
//批量删除
delTable() {
console.log(this.selectedItems())
},
// 分页触发
change(e) {
this.$refs.table.clearSelection()
this.selectedIndexs.length = 0
this.getData(e.current)
},
// 搜索
search() {
this.getData(1, this.searchVal)
},
// 获取数据
getData(pageCurrent, value = '') {
this.loading = true
this.pageCurrent = pageCurrent
this.request({
pageSize: this.pageSize,
pageCurrent: pageCurrent,
value: value,
success: res => {
// console.log('data', res);
this.tableData = res.data
this.total = res.total
this.loading = false
}
})
},
//获取选中的数据
getSelectDetail() {
if (this.selectedIndexs.length == 0) {
//提示
this.$modal.msgError("请先选择需要确认的托盘盘点明细")
return;
}
//筛选出需要拣选的单据明细
let arr = [];
let len = this.billInfo.checkPltInfos.length;
for (let i = 0; i < len; i++) {
if (this.selectedIndexs.indexOf(i) >= 0) {
arr.push(this.billInfo.checkPltInfos[i]);
} else {
// console.log(this.selectArr.indexOf(i))
//this.selectArr.indexOf(i);
}
}
console.log("选中的单据明细数据为", arr.length)
return arr;
},
// 伪request请求
request(options) {
const {
pageSize,
pageCurrent,
success,
value
} = options
let total = tableData.length
let data = tableData.filter((item, index) => {
const idx = index - (pageCurrent - 1) * pageSize
return idx < pageSize && idx >= 0
})
if (value) {
data = []
tableData.forEach(item => {
if (item.name.indexOf(value) !== -1) {
data.push(item)
}
})
total = data.length
}
setTimeout(() => {
typeof success === 'function' &&
success({
data: data,
total: total
})
}, 500)
},
// submit(ref) {
// this.$refs.form.validate().then(res => {
// updateUserProfile(this.user).then(response => {
// this.$modal.msgSuccess("修改成功")
// })
// })
// }
//表单提交
formSubmit: function(ref) {
// 1. 新增核心校验判断actQty是否为null
// 先判断数组是否存在且有数据,避免数组为空时报错
if (this.billInfo.checkPltInfos.length > 0) {
const firstItem = this.billInfo.checkPltInfos[0];
// 校验actQty是否为null/空/未定义
if (firstItem.actQty === null || firstItem.actQty === undefined || firstItem.actQty === '') {
this.$modal.msgError("请先填写确认数量,不允许为空!");
return; // 阻止后续提交逻辑
}
} else {
// 可选:如果数组为空也阻止提交(根据你的业务需求调整)
this.$modal.msgError("暂无盘点数据,无法提交!");
return;
}
//拿到 formaData
var details = this.getSelectDetail()
if (details && details.length > 0) {
this.$refs.form.validate().then(res => {
console.log("数据校验通过", res)
this.formData.details = details
inventoryConfirm(this.formData).then(response => {
console.log("response", response)
this.$modal.msgSuccess("盘点确认成功")
this.formData.palletCode = "";
this.billInfo.checkPltInfos = [];
// 核心:提交成功后聚焦到托盘编号输入框
this.$nextTick(() => {
// 方式1兼容uni-easyinput的聚焦方法推荐
if (this.$refs.palletCodeInput) {
this.$refs.palletCodeInput.focus();
}
});
})
})
}
},
hideMsgModal(e) {
//关闭信息模态框
this.msgModalName = null;
},
textareaAInput(e) {
this.textareaAValue = e.detail.value
},
textareaBInput(e) {
this.textareaBValue = e.detail.value
},
//根据单据号查询入库单
queryPltInfo: async function(e) {
console.log('进入查询方法', e);
console.log('this.formData', this.formData);
console.log('this.formData.palletCode', this.formData.palletCode);
var palletCode = this.formData.palletCode;
if (palletCode == null) {
this.$modal.msgError("托盘号不能为空")
return;
}
if (palletCode.length < 1) {
this.$modal.msgError("托盘号不能为空")
return;
}
//查询单据信息
var billInfo = await queryInventoryPallet({
'palletCode': palletCode
});
console.log("billInfo", billInfo)
if (billInfo) {
this.billInfo = billInfo.data;
this.billInfo.checkPltInfos[0].actQty = null;
};
}
}
}
</script>
<style lang="scss">
.cu-form-group .title {
min-width: calc(4em + 15px);
}
page {
background-color: #ffffff;
}
.example {
padding: 15px;
background-color: #fff;
}
.segmented-control {
margin-bottom: 15px;
}
.button-group {
margin-top: 15px;
display: flex;
justify-content: space-around;
}
.form-item {
display: flex;
align-items: center;
flex: 1;
}
.button {
display: flex;
align-items: center;
height: 35px;
line-height: 35px;
margin-left: 10px;
}
</style>