剩余模块:生产入库,销售出库

This commit is contained in:
2025-05-20 14:40:44 +08:00
parent 14a5fa371b
commit 933ddab8f3
68 changed files with 8868 additions and 13081 deletions

View File

@@ -1,9 +1,11 @@
<template>
<view class="app status-bar-gap">
<l-header :title="t('home.scrk')" sticky #right>
<view style="margin-right: 32rpx;" v-if="state.tabsIndex === '1'" @click="submit()">{{ t('verify.tj') }}</view>
</l-header>
<view class="page">
<l-header title="生产入库" sticky></l-header>
<view class="input-box">
<up-tabs :scrollable="false" :list="state.tabsList"></up-tabs>
<up-tabs :scrollable="true" :list="state.tabsList" @click="upTabsItemFun"></up-tabs>
</view>
<view class="input-box">
<view class="input-item">
@@ -15,22 +17,8 @@
</up-input>
</view>
</view>
<view class="receive-listBox" ref="listBoxRef">
<scroll-view id="scroll-box" class="scroll-box" scroll-y="true"
:style="{'height':state.scrollHeight+'px'}" @scrolltolower="fnScrollBottom()">
<view class="list-box-list" v-if="state.dataList.length > 0">
<view class="data-item" @click.stop="fnToUrl(item)"
v-for="(item, index) in state.dataList" :key="index">
<view class="tit">{{ t('receive.djbh') }}{{item.FBillNo}}</view>
<view class="line-p"></view>
<view class="b-font">{{ t('receive.rq') }}{{item.FDateFormat}}</view>
</view>
</view>
<view v-if="state.dataList.length==0">
<up-empty mode="list"></up-empty>
</view>
</scroll-view>
</view>
<packing ref="packingRef" v-if="state.tabsIndex === '1'" :queryString="state.queryString" @clearOut="clearOut()"/>
<scattered v-if="state.tabsIndex === '2'" :queryString="state.queryString" @clearOut="clearOut()"/>
</view>
</view>
</template>
@@ -41,95 +29,30 @@
import { useI18n } from 'vue-i18n'
import { parseTime } from '../../utils/tools.js';
import { PRD_MORPTList, receiveBillList } from '../../common/request/api/api';
const listBoxRef = ref(null)
import packing from './packing.vue'
import scattered from './scattered.vue'
const packingRef = ref()
const getI18n = useI18n()
const { t, locale } = getI18n
const state = reactive({
queryString: '',
dataList: [],
scrollHeight: 0,
page: {
pageIndex: 1,
pageSize: 200,
totalCount: 0
},
tabsList: [
{ name: computed(() => '包装'), type: '1' },
{ name: computed(() => '单独物料'), type: '2' },
]
tabsIndex:'1',
tabsList: [
{ name: computed(() => t('index.bz')), type: '1' },
{ name: computed(() => t('index.minbz')), type: '2' },
],
})
onShow(() => {
})
onMounted(() => {
const query = uni.createSelectorQuery().in(this);
query.select(".receive-listBox").boundingClientRect((data) => {
state.scrollHeight = data.height
}).exec();
fnDataList()
})
const fnScrollBottom = () => {
console.log(state.page.pageIndex * state.page.pageSize,state.page.totalCount);
if (state.page.pageIndex * state.page.pageSize <= state.page.totalCount) {
debugger
state.page.pageIndex ++;
uni.showLoading({ mask: true });
setTimeout(() => {
fnDataList();
}, 500);
}
}
const fnToUrl = (item : any) => {
toPages('/pages/productionStorage/material',{id:item.FID,fBillNo:item.FBillNo})
}
const debounceTimer = ref()
const changeFun = (e : any) => {
if (debounceTimer.value !== null) clearTimeout(debounceTimer.value)
debounceTimer.value = setTimeout(() => {
state.queryString = e
state.page.pageIndex = 1
state.dataList = []
fnDataList()
}, 500)
if(e != '' ) state.queryString = e
}
const fnDataList = () => {
let param = {
queryString: state.queryString,
pageIndex: state.page.pageIndex,
pageSize: state.page.pageSize,
};
if (state.page.pageIndex == 1) {
uni.showLoading({ mask: true });
}
PRD_MORPTList(param).then(res => {
uni.hideLoading();
if (res.code == 200) {
let result = res.data;
let dataArray = result.list;
dataArray.forEach(p => {
p.FDateFormat = parseTime(p.FDate, '{y}-{m}-{d}');
});
if (state.page.pageIndex == 1) {
state.dataList = dataArray;
}
else {
state.dataList = state.dataList.concat(dataArray);
}
state.page.totalCount = result.total;
if (state.dataList.length == state.page.totalCount) {
// more_status.value = 'nomore';
}
}
});
const upTabsItemFun = (e:any) => {
state.tabsIndex = e.type
}
const toPages = (url : string, data : any = {}) => {
uni.$u.route({
url: url,
params: data
})
const clearOut = () => {
state.queryString = ''
}
const submit = () => {
packingRef.value.dataPushNotification()
}
</script>

View File

@@ -15,7 +15,7 @@
</view>
</view>
<view class="material-listBox">
<scroll-view id="scroll-box" class="scroll-box" scroll-y="true"
<scroll-view id="scroll-box1" class="scroll-box" scroll-y="true"
:style="{'height':state.scrollHeight+'px'}">
<view class="list-box-list" v-if="state.dataList.length > 0">
<view class="data-item" v-for="(item, index) in state.dataList"
@@ -39,11 +39,11 @@
<view class="zongjian"></view>
<view>{{ item.Lot }}</view>
</view>
<view class="itemBox">
<!-- <view class="itemBox">
<view>仓库</view>
<view class="zongjian"></view>
<view>{{ item.MultiLanguageText }}</view>
</view>
</view> -->
<view class="itemBox">
<view>{{t('receive.ys')}}</view>
<view class="zongjian"></view>
@@ -73,7 +73,7 @@
@scanFrameDataFeedback="(res:object)=>{state.scanFrameDataFeedback = res}"
@fast="(row:any)=>{state.scanFrameDataFeedback = row}" @err="scanFrameErrFun" />
<shortcut ref="shortcutRef" @dataToscanFrame="dataToscanFrameFun" />
<tools ref="toolsRef" @defaultPopup="defaultPopupFun" @scanRecord="scanRecordFun" />
<tools ref="toolsRef" :type="['scanRecord']" @defaultPopup="defaultPopupFun" @scanRecord="scanRecordFun" />
</template>
<script lang="ts" setup>
@@ -101,6 +101,7 @@
pageSize: 200,
totalCount: 0
},
tabsIndex:'1',
FBillNo: '',
materialId: '',
supplierName: '',
@@ -125,7 +126,6 @@
state.scrollHeight = data.height
}).exec();
// scanFrameRef.value.stateShow(true)
})
/**
* 数据逻辑
@@ -155,22 +155,13 @@
PRD_MORPTScanData({
FBarCode: val,
FBillNo: state.FBillNo,
IsPack: 'false'
}).then((res : any) => {
if (res.data !== null) {
console.log(res);
scanFrameRef.value.getreceiveBillScanData({ ...res.data, queryString: state.queryString, scanFrameShowSate: state.shortcutDataFeedback.scanFrameShowSate,stashVerify:true })
if (Object.keys(state.shortcutDataFeedback).length) {
if (state.shortcutDataFeedback.scanFrameShowSate) {
scanFrameRef.value.stateShow(true)
} else {
postTemporaryScanDraftSaveFun(state.scanFrameDataFeedback)
}
} else {
scanFrameRef.value.stateShow(true)
}
} else {
uni.$u.toast('并没有该条数据')
if (res.code === 200) {
fnDataList(state.materialId)
state.queryString = ''
} else {
uni.$u.toast(t('verify.noDataMessage'))
}
})
}
@@ -235,10 +226,9 @@
/**
* 数据推送
*/
const dataPushNotification = () => {
uni.showModal({
title: '提示', content: '确定要推送此次数据吗', cancelText: '取消', confirmText: '确定',
title: t('public.ts'), content: t('public.tjMessage'), cancelText: t('public.cancel'), confirmText: t('public.confirm'),
success(res) {
if (res.confirm) {
let EntryIds : any = []
@@ -262,7 +252,8 @@
Qty: item.FVHUBScanQty,
Flot: item.FVHUBFlot,
StockId: item.FVHUBStock,
StockFlex: item.FVHUBStockFlex
StockFlex: item.FVHUBStockFlex,
Sno: item.FVHUBJSON
})
})
//推送数据
@@ -298,11 +289,10 @@
});
}
/**
* 数据请求
*/
const fnDataList = (FBillNo : any, statesItem : boolean = false) => {
const fnDataList = (FBillNo : any) => {
let param = {
id: FBillNo,
};
@@ -316,12 +306,12 @@
dataListArray.forEach((p : any) => {
let item = {
Id: p.Id,
MaterialNo: p.MaterialNumber, //物料编码
MaterialName: formatLangTextValue(p.MaterialName), //物料名称
Lot: p.FLot_Text, //批号
CheckQty: p.Qty, //应扫数量
CheckJoinQty: p.ScanedQty, //已扫数量
NoCheckQty: p.UnScanQty, //未扫数量
MaterialNo: p.MaterialNumber,//物料编码
MaterialName: formatLangTextValue(p.MaterialName),//物料名称
Lot: p.FLot_Text,//批号
CheckQty: p.Qty, //应扫数量
CheckJoinQty: p.ScanedQty,//已扫数量
NoCheckQty: p.UnScanQty,//未扫数量
MultiLanguageText: Object.keys(p.StockId).length ? formatLangTextValue(p.StockId.Name) : '暂无仓库'
};
state.dataList.push(item);