Browse Source

修改盲盘功能

hella_online_20240829
niexiting 2 months ago
parent
commit
264d65868a
  1. 21
      src/api/request2.js
  2. 6
      src/mycomponents/package/PackageAndItemCard.vue
  3. 37
      src/mycomponents/qty/countQtyEdit.vue
  4. 318
      src/pages/count/job/fuzzyCountDetail.vue
  5. 8
      src/pages/count/job/fuzzyCountJob.vue

21
src/api/request2.js

@ -1605,6 +1605,14 @@ export function getCountJobList(params) {
}); });
} }
//获取盲盘任务列表
export function getFuzzyCountJobList(params) {
return request({
url: baseApi + "/wms/count-job-main/senior-pda",
method: "post",
data: params,
});
}
/** /**
* 盘点 获取任务明细 * 盘点 获取任务明细
* @param {*} id 任务id * @param {*} id 任务id
@ -1618,6 +1626,19 @@ export function getCountJobDetail(id) {
}); });
} }
/**
* 盘点 获取任务明细
* @param {*} id 任务id
*
*/
export function getFuuzyCountJobDetail(id) {
return request({
url: baseApi + "/wms/count-job-main/getCountJobById-pda?id=" + id,
method: "get",
data: {},
});
}
/** /**
* 盘点任务 任务承接 * 盘点任务 任务承接
* @param {*} id * @param {*} id

6
src/mycomponents/package/PackageAndItemCard.vue

@ -3,12 +3,12 @@
<view class="uni-flex uni-row space-between" style="align-items: center"> <view class="uni-flex uni-row space-between" style="align-items: center">
<view style="word-break: break-all;"> <view style="word-break: break-all;">
<item :dataContent="dataContent" style="margin-left: 4px; padding:0px 5px 5px;"></item> <item :dataContent="dataContent" style="margin-left: 4px; padding:0px 5px 5px;"></item>
<pack v-if="dataContent.number!=null" :packingCode="dataContent.number"></pack> <pack v-if="dataContent.packingNumber!=null" :packingCode="dataContent.packingNumber"></pack>
<batch v-if="dataContent.batch!=null" :batch="dataContent.batch"></batch> <batch v-if="dataContent.batch!=null" :batch="dataContent.batch"></batch>
</view> </view>
<view class="uni-flex uni-row" style="word-break: break-all;"> <view class="uni-flex uni-row" style="word-break: break-all;">
<recommend-qty v-if="dataContent.handleQty==null || dataContent.handleQty==undefined" <recommend-qty
:dataContent="dataContent" :isShowStdPack="false" :isShowStatus="isShowStatus" :dataContent="dataContent" :isShowStdPack="false" :isShowStatus="true"
:isShowPackCount="false"></recommend-qty> :isShowPackCount="false"></recommend-qty>
</view> </view>
</view> </view>

37
src/mycomponents/qty/countQtyEdit.vue

@ -42,23 +42,28 @@
<uom :uom="dataContent.uom"></uom> <uom :uom="dataContent.uom"></uom>
</view> </view>
</view> </view>
<view class='split_line'></view>
<view v-if="isShowBalance" <view v-if="isShowBalance">
class="uni-flex uni-row space-between padding title u-col-center"> <view class='split_line'></view>
<text>库存数量 : </text> <view class="uni-flex uni-row space-between padding title u-col-center">
<view class="uni-flex uni-row uni-center" style="align-items: center;"> <text>库存数量 : </text>
<text class="text_recommend">{{Number(dataContent.balanceQty)}}</text> <view class="uni-flex uni-row uni-center" style="align-items: center;">
<uom :uom="dataContent.uom"></uom> <text class="text_recommend">{{Number(dataContent.balanceQty)}}</text>
<uom :uom="dataContent.uom"></uom>
</view>
</view> </view>
</view> </view>
<view class='split_line'></view>
<view v-if="isShowStatus" class="uni-flex uni-row space-between title" <view v-if="isShowStatus">
style="align-items: center; padding-left: 30rpx;"> <view class='split_line'></view>
<text>库存状态 : </text> <view class="uni-flex uni-row space-between padding title u-col-center"
<view class="uni-flex uni-row uni-center" style="align-items: center;"> style="align-items: center; padding-left: 30rpx;">
<balanceStatus ref="balanceStatus" :status="inventoryStatus" :allowEdit='true' <text>库存状态 : </text>
@updateStatus="updateStatus" @onOpen="clickState"> <view class="uni-flex uni-row uni-center" style="align-items: center;">
</balanceStatus> <balanceStatus ref="balanceStatus" :status="inventoryStatus" :allowEdit='true'
@updateStatus="updateStatus" @onOpen="clickState">
</balanceStatus>
</view>
</view> </view>
</view> </view>
<view class='split_line'></view> <view class='split_line'></view>
@ -266,4 +271,4 @@
.title { .title {
font-size: 30rpx; font-size: 30rpx;
} }
</style> </style>

318
src/pages/count/job/fuzzyCountDetail.vue

@ -1,36 +1,58 @@
<template> <template>
<view class="page-wraper"> <view class="page-wraper">
<com-blank-view @goScan='showFromLocationPopup' v-if="detailSource.length==0"></com-blank-view>
<view class="page-header"> <view class="page-header">
<view class="header_job_top"> <view class="header_job_top">
<job-top :dataContent="jobContent"></job-top>
<view class="card_view"> <!-- <scroll-view scroll-y="true" class="page-main-scroll"> -->
<text class="card_packing_code ">盘点计划</text>
<text class="card_content ">{{jobContent.planNumber}}</text> <uni-collapse ref="collapse">
</view> <uni-collapse-item :open="false">
<view v-for="(range, index) in dataContent.countRange" :key="index"> <template v-slot:title>
<view class="card_view"> <view>
<text class="card_packing_code ">{{getCountScopeName(range.type)}}</text> <job-top :dataContent="jobContent"></job-top>
<text class="card_content ">{{range.value}}</text> 盘点范围
</view> </view>
</view> </template>
<view v-for="(range, index) in jobContent.countRange" :key="index">
<view class="card_view">
<text class="card_packing_code ">{{getCountScopeName(range.type)}}</text>
<text class="card_content ">{{range.value}}</text>
</view>
<view class="card_view">
<text class="card_packing_code ">{{getCountScopeName(range.type)}}</text>
<text class="card_content ">{{range.value}}</text>
</view>
<view class="card_view">
<text class="card_packing_code ">{{getCountScopeName(range.type)}}</text>
<text class="card_content ">{{range.value}}</text>
</view>
<view class="card_view">
<text class="card_packing_code ">{{getCountScopeName(range.type)}}</text>
<text class="card_content ">{{range.value}}</text>
</view>
</view>
</uni-collapse-item>
</uni-collapse>
</view>
<view class="card_view" v-if="fromLocationCode!=''">
<text class="card_location">盘点库位</text>
<text class="card_content ">{{fromLocationCode}}</text>
</view> </view>
</view> </view>
<view class="page-main">
<view class="page-main" >
<view class="">
<com-blank-view @goScan='showFromLocationPopup' v-if="detailSource.length==0"></com-blank-view>
</view>
<scroll-view scroll-y="true" class="page-main-scroll"> <scroll-view scroll-y="true" class="page-main-scroll">
<uni-swipe-action ref="swipeAction"> <uni-swipe-action ref="swipeAction">
<uni-swipe-action-item @click="swipeClick($event,item)" :right-options="editRemoveOption"> <view class="detail-list" v-for="(item, index) in detailSource" :key="item.id">
<!-- {{editRemoveOption}} --> <uni-swipe-action-item @click="swipeClick($event,item,index)" :right-options="editRemoveOption">
<view class="detail-list" v-for="(item, index) in detailSource" :key="item.id">
<view class=""> <view class="">
<package-and-item-card :dataContent="item"></package-and-item-card> <package-and-item-card :dataContent="item"></package-and-item-card>
</view> </view>
<view class='split_line'></view> <view class='split_line'></view>
</view> </uni-swipe-action-item>
</uni-swipe-action-item> </view>
</uni-swipe-action> </uni-swipe-action>
</scroll-view> </scroll-view>
</view> </view>
@ -48,9 +70,7 @@
<win-scan-button v-if="fromLocationCode!=''" @goScan='openScanPopup'></win-scan-button> <win-scan-button v-if="fromLocationCode!=''" @goScan='openScanPopup'></win-scan-button>
<win-scan-pack ref="scanPopup" @getResult='getScanResult'></win-scan-pack> <win-scan-pack ref="scanPopup" @getResult='getScanResult'></win-scan-pack>
<win-scan-location ref="scanLocationCode" title="盘点库位" @getLocation='getLocation'></win-scan-location> <win-scan-location ref="scanLocationCode" title="盘点库位" @getLocation='getLocation'></win-scan-location>
<count-qty-edit ref="countQtyEdit" @confirm="editConfirm" @close="editClose" :isShowStatus="true" <count-qty-edit ref="countQtyEdit" @confirm="editConfirm" @close="editClose" :isShowStatus="true"
:allowEditStatus="editInventoryStatus" :isShowBalance="jobContent.isOpenCount=='TRUE'"> :allowEditStatus="editInventoryStatus" :isShowBalance="jobContent.isOpenCount=='TRUE'">
</count-qty-edit> </count-qty-edit>
@ -60,15 +80,18 @@
<script> <script>
import { import {
getCountJobDetail, getFuuzyCountJobDetail,
takeCountJob, takeCountJob,
cancleTakeCountJob, cancleTakeCountJob,
countJobSubmit countJobSubmit
} from '@/api/request2.js'; } from '@/api/request2.js';
import {
calc
} from '@/common/calc.js';
import { import {
getCountScopeType Decimal
} from '@/common/directory.js'; } from 'decimal.js'; //
import { import {
getEditRemoveOption getEditRemoveOption
@ -80,6 +103,10 @@
getPackingNumberAndBatch getPackingNumberAndBatch
} from '@/common/basic.js'; } from '@/common/basic.js';
import {
getCountScopeType
} from '@/common/directory.js';
import winScanButton from '@/mycomponents/scan/winScanButton.vue' import winScanButton from '@/mycomponents/scan/winScanButton.vue'
import winScanPack from '@/mycomponents/scan/winScanPack.vue' import winScanPack from '@/mycomponents/scan/winScanPack.vue'
@ -92,7 +119,7 @@
import PackageAndItemCard from '@/mycomponents/package/PackageAndItemCard.vue' import PackageAndItemCard from '@/mycomponents/package/PackageAndItemCard.vue'
export default { export default {
name: 'receipt_detail', name: 'fuzzycountdetail',
components: { components: {
winScanButton, winScanButton,
winScanPack, winScanPack,
@ -128,13 +155,16 @@
// //
if (option.status == "1") { if (option.status == "1") {
this.receive((callback => { this.receive((callback => {
this.getDetail(); this.getDetail(r => {
this.showFromLocationPopup();
});
})); }));
} else { } else {
this.getDetail(); this.getDetail(r => {
this.showFromLocationPopup();
});
} }
} }
this.showFromLocationPopup();
this.editRemoveOption = getEditRemoveOption(); this.editRemoveOption = getEditRemoveOption();
}, },
// //
@ -181,16 +211,17 @@
} }
}, },
getDetail() { getDetail(callback) {
var that = this; var that = this;
uni.showLoading({ uni.showLoading({
title: "加载中....", title: "加载中....",
mask: true mask: true
}); });
getCountJobDetail(that.id).then(res => { getFuuzyCountJobDetail(that.id).then(res => {
uni.hideLoading(); uni.hideLoading();
that.jobContent = res.data; that.jobContent = res.data;
that.jobStatus = res.data.status; that.jobStatus = res.data.status;
callback();
}).catch(error => { }).catch(error => {
uni.hideLoading() uni.hideLoading()
@ -199,6 +230,8 @@
}, },
showFromLocationPopup() { showFromLocationPopup() {
let as = '';
// this.$refs.scanLocationCode.openScanPopup();
this.$nextTick(() => { this.$nextTick(() => {
this.$refs.scanLocationCode.openScanPopup(); this.$refs.scanLocationCode.openScanPopup();
}) })
@ -207,35 +240,48 @@
getLocation(location, code) { getLocation(location, code) {
let countRange = this.jobContent.countRange; let countRange = this.jobContent.countRange;
let range = countRange.find(r => r.type == "LOCATION_CODE"); if (countRange != null) {
if (range != undefined) { let range = countRange.find(r => r.type == "LOCATION_CODE");
if (!rang.value.includes(location.code)) {
this.showErrorMessage("库位代码【" + location.code + "】,不在盘点库位范围【" + rangeValue + "】内")
return;
}
} else {
range = countRange.find(r => r.type == "LOCATIONGROUP_CODE");
if (range != undefined) { if (range != undefined) {
if (!rang.value.includes(location.locationGroupCode)) { let rangeValue = range.value;
this.showErrorMessage("库位组代码【" + location.locationGroupCode + "】,不在盘点库位组范围【" + rangeValue + let index = rangeValue.indexOf(location.code)
"】内") if (index < 0) {
this.afterScanLocation("库位代码【" + location.code + "】,不在盘点库位范围【" + rangeValue + "】内");
return; return;
} }
} else { } else {
range = countRange.find(r => r.type == "AREA_CODE"); range = countRange.find(r => r.type == "LOCATIONGROUP_CODE");
if (range != undefined) { if (range != undefined) {
if (!rang.value.includes(location.areaCode)) { let rangeValue = range.value;
this.showErrorMessage("库区代码【" + location.areaCode + "】,不在盘点库区范围【" + rangeValue + "】内") let index = rangeValue.indexOf(location.locationGroupCode)
if (index < 0) {
this.afterScanLocation("库位组代码【" + location.locationGroupCode + "】,不在盘点库位组范围【" +
rangeValue +
"】内");
return; return;
} }
} else { } else {
range = countRange.find(r => r.type == "WAREHOUSE_CODE"); range = countRange.find(r => r.type == "AREABASIC_CODE");
if (range != undefined) { if (range != undefined) {
if (!rang.value.includes(location.warehouseCode)) { let rangeValue = range.value;
this.showErrorMessage("仓库代码【" + location.warehouseCode + "】,不在盘点仓库范围【" + rangeValue + let index = rangeValue.indexOf(location.areaCode)
"】内") if (index < 0) {
this.afterScanLocation("库区代码【" + location.areaCode + "】,不在盘点库区范围【" +
rangeValue + "】内");
return; return;
} }
} else {
range = countRange.find(r => r.type == "WAREHOUSE_CODE");
if (range != undefined) {
let rangeValue = range.value;
let index = rangeValue.indexOf(location.warehouseCode)
if (index < 0) {
this.afterScanLocation("仓库代码【" + location.warehouseCode + "】,不在盘点仓库范围【" +
rangeValue +
"】内");
return;
}
}
} }
} }
} }
@ -243,6 +289,11 @@
this.getFromLocationCode(location, code) this.getFromLocationCode(location, code)
}, },
afterScanLocation(message) {
this.showErrorMessage(message)
this.showFromLocationPopup();
},
getFromLocationCode(location, code) { getFromLocationCode(location, code) {
this.fromLocation = location; this.fromLocation = location;
this.fromLocationCode = code; this.fromLocationCode = code;
@ -253,10 +304,6 @@
this.$refs.scanPopup.openScanPopup(); this.$refs.scanPopup.openScanPopup();
}, },
closeScanPopup() {
this.$refs.scanPopup.closeScanPopup();
},
scanPopupGetFocus() { scanPopupGetFocus() {
if (this.$refs.scanPopup != undefined) { if (this.$refs.scanPopup != undefined) {
this.$refs.scanPopup.getfocus(); this.$refs.scanPopup.getfocus();
@ -269,36 +316,38 @@
} }
}, },
scanPopupGetFocus() {
if (this.$refs.scanPopup != undefined) {
this.$refs.scanPopup.packGetFocus();
}
},
scanPopupLoseFocus() { scanPopupLoseFocus() {
if (this.$refs.scanPopup != undefined) { if (this.$refs.scanPopup != undefined) {
this.$refs.scanPopup.packLoseFocus(); this.$refs.scanPopup.packLoseFocus();
} }
}, },
//
getScanResult(result) { getScanResult(result) {
let that = this; let that = this;
let package = result.package; let packInfo = result.package;
let detail = this.detailSource.find(r => r.itemCode == package.itemCode && r.packingNumber == package let detail = this.detailSource.find(r => r.itemCode == packInfo.itemCode && r.packingNumber == packInfo
.packingNumber && r.batch == package.batch && r.inventoryStatus == "OK"); .number && r.batch == packInfo.batch && r.inventoryStatus == "OK");
if (detail == undefined) { if (detail == undefined) {
detail = this.createDetailInfo(package); detail = this.createDetailInfo(packInfo);
this.detailSource.push(detail) this.detailSource.unshift(detail)
this.scanPopupGetFocus();
} else { } else {
let index = detail.index; let index = this.detailSource.findIndex(r => r.itemCode == packInfo.itemCode && r.packingNumber ==
list.unshift(list.splice(index, 1)[0]); // packInfo
// .number && r.batch == packInfo.batch && r.inventoryStatus == "OK");
this.showQuestionMessage('该箱码已经扫描,是否要编辑盘点明细?', res => { if (index >= 0) {
if (res) { this.detailSource.unshift(this.detailSource.splice(index, 1)[0]); //
this.edit(detail); //
} this.$refs.comMessage.showQuestionMessage('该箱码已经扫描,是否要编辑盘点明细?', res => {
}); if (res) {
this.closeScanPopup();
this.edit(detail);
} else {
this.scanPopupGetFocus();
}
});
}
} }
}, },
@ -318,18 +367,26 @@
projectCode: "", projectCode: "",
qty: packInfo.qty, qty: packInfo.qty,
countQty: packInfo.qty, countQty: packInfo.qty,
packQty: packInfo.packQty,
packUom: packInfo.packUom,
uom: packInfo.uom, uom: packInfo.uom,
remark: "", remark: "",
locationCode: this.fromLocationCode, locationCode: this.fromLocationCode,
creator: this.$store.state.user.id, creator: this.$store.state.user.id,
warehouseCode: this.fromLocation.warehouseCode, warehouseCode: this.fromLocation.warehouseCode,
areaCode: this.fromLocation.areaCode, areaCode: this.fromLocation.areaCode,
locationGroupCode: this.fromLocation.locationGroupCode locationGroupCode: this.fromLocation.locationGroupCode,
creationTime: new Date(),
countTime: new Date()
} }
return detail; return detail;
}, },
swipeClick(e, item) { editClose() {
this.$refs.countQtyEdit.closeEditPopup();
},
swipeClick(e, item, index) {
if (e.content.text == "编辑") { if (e.content.text == "编辑") {
this.edit(item) this.edit(item)
} else if (e.content.text == "移除") { } else if (e.content.text == "移除") {
@ -341,19 +398,16 @@
edit(item) { edit(item) {
let that = this; let that = this;
this.currentEditItem = item; this.currentEditItem = item;
this.$refs.countQtyEdit.openEditPopup(item); item.handleQty = item.qty;
this.$refs.countQtyEdit.openEditPopup(item, null);
}, },
editConfirm(qty, inventoryStatus, mode) { editConfirm(qty, inventoryStatus, mode) {
let that = this; let that = this;
// this.currentEditItem.countQty = qty;
if (mode == 'edit') { this.currentEditItem.qty = qty;
this.currentEditItem.countQty = qty; this.currentEditItem.inventoryStatus = inventoryStatus;
this.currentEditItem.qty = qty; this.openScanPopup();
this.currentEditItem.inventoryStatus = inventoryStatus;
}
this.scanPopupGetFocus();
}, },
editClose() { editClose() {
@ -363,11 +417,19 @@
remove(item, index) { remove(item, index) {
this.showQuestionMessage("是否要移除扫描信息?", res => { this.showQuestionMessage("是否要移除扫描信息?", res => {
if (res) { if (res) {
this.dataContent.subList.splice(index, 1) this.detailSource.splice(index, 1)
} }
}); });
}, },
detail(item) {
this.showItem = item;
this.$refs.detailInfoPopup.openPopup(item);
},
commit() { commit() {
// if(this.detailSource.length==0) // if(this.detailSource.length==0)
// { // {
@ -394,13 +456,13 @@
}, },
setParams() { setParams() {
var subList = []
var creator = this.$store.state.user.id var creator = this.$store.state.user.id
this.jobContent.subList = this.detailSource this.jobContent.subList = this.detailSource
// this.jobContent.creator = creator; // this.jobContent.creator = creator;
return this.jobContent; return this.jobContent;
}, },
showMessage(message) { showMessage(message) {
this.$refs.comMessage.showMessage(message, res => { this.$refs.comMessage.showMessage(message, res => {
if (res) { if (res) {
@ -408,7 +470,6 @@
} }
}); });
}, },
showErrorMessage(message) { showErrorMessage(message) {
this.$refs.comMessage.showErrorMessage(message, res => { this.$refs.comMessage.showErrorMessage(message, res => {
if (res) { if (res) {
@ -421,12 +482,6 @@
this.$refs.comMessage.showScanMessage(message); this.$refs.comMessage.showScanMessage(message);
}, },
showQuestionMessage(message, callback) {
this.$refs.comMessage.showQuestionMessage(message, res => {
callback(res);
});
},
afterCloseMessage() { afterCloseMessage() {
this.scanPopupGetFocus(); this.scanPopupGetFocus();
}, },
@ -435,25 +490,30 @@
this.scanPopupGetFocus(); this.scanPopupGetFocus();
}, },
editItem(item) {
this.currentEditItem = item;
var detail = this.detailSource.find(r => r.itemCode == item.itemCode);
this.$refs.countQtyEdit.openEditPopup(item,
detail.subList);
},
showCommitSuccessMessage(hint) { showCommitSuccessMessage(hint) {
this.$refs.comMessage.showSuccessMessage(hint, res => { this.$refs.comMessage.showSuccessMessage(hint, res => {
navigateBack(1); navigateBack(1);
}) })
}, },
getCountStageName(value) {
return getCountStageName(value)
},
isOpenCount(value) {
return value == "TRUE" ? "明盘" : "盲盘"
},
getCountScopeName(value) { getCountScopeName(value) {
let item = getCountScopeType(value); let item = getCountScopeType(value);
return item.label; return item.label;
}, },
}
showQuestionMessage(message, callback) {
this.$refs.comMessage.showQuestionMessage(message, res => {
callback(res);
});
},
}
} }
</script> </script>
@ -464,32 +524,32 @@
background-color: #fff; background-color: #fff;
} }
.page-wraper { // .page-wraper {
display: flex; // display: flex;
flex-direction: column; // flex-direction: column;
width: 100%; // width: 100%;
height: 100%; // height: 100%;
} // }
.page-main { // .page-main {
flex: 1; // flex: 1;
position: relative; // position: relative;
} // }
.page-main-scroll { // .page-main-scroll {
position: absolute; // position: absolute;
left: 0; // left: 0;
right: 0; // right: 0;
top: 0; // top: 0;
bottom: 0; // bottom: 0;
} // }
.page-main-list { // .page-main-list {
/* height: 80rpx; // /* height: 80rpx;
line-height: 80rpx; */ // line-height: 80rpx; */
text-align: center; // text-align: center;
background: #e0e0e0; // background: #e0e0e0;
} // }
</style> </style>

8
src/pages/count/job/fuzzyCountJob.vue

@ -32,7 +32,7 @@
<script> <script>
import { import {
cancleTakeCountJob, cancleTakeCountJob,
getCountJobList getFuzzyCountJobList
} from '@/api/request2.js'; } from '@/api/request2.js';
import { import {
@ -180,7 +180,7 @@
by: "DESC" by: "DESC"
} }
getCountJobList(params).then(res => { getFuzzyCountJobList(params).then(res => {
uni.hideLoading(); uni.hideLoading();
if (type === "refresh") { if (type === "refresh") {
uni.stopPullDownRefresh(); uni.stopPullDownRefresh();
@ -354,7 +354,7 @@
sort: "number", sort: "number",
by: "DESC" by: "DESC"
} }
getCountJobList(params).then(res => { getFuzzyCountJobList(params).then(res => {
uni.hideLoading(); uni.hideLoading();
if (res.data.list.length == 0) { if (res.data.list.length == 0) {
that.showMessage('未查找到' + '【' + code + '】的收货任务'); that.showMessage('未查找到' + '【' + code + '】的收货任务');
@ -413,7 +413,7 @@
sort: "number", sort: "number",
by: "DESC" by: "DESC"
} }
getCountJobList(params).then(res => { getFuzzyCountJobList(params).then(res => {
uni.hideLoading(); uni.hideLoading();
let resultList = res.data.list; let resultList = res.data.list;
resultList.forEach(item => { resultList.forEach(item => {

Loading…
Cancel
Save