8 changed files with 894 additions and 366 deletions
@ -0,0 +1,70 @@ |
|||
<template> |
|||
<view class="" style="width: 100%; background-color: #fff; border-radius: 10rpx"> |
|||
<view class="uni-flex uni-row space-between" style="align-items: center"> |
|||
<view> |
|||
<view class="uni-flex uni-row" style="align-items: center"> |
|||
<text style="font-size: 30rpx; margin-left: 15rpx">物料</text> |
|||
<item :dataContent="dataContent" style="padding-top: 10rpx; margin-left: 20rpx"></item> |
|||
</view> |
|||
|
|||
<pack v-if="dataContent.parentNumber" title="父包装" :packingCode="dataContent.parentNumber"></pack> |
|||
<pack v-if="dataContent.packingNumber" :packingCode="dataContent.packingNumber"></pack> |
|||
<batch v-if="isShowBatch && dataContent.batch" :batch="dataContent.batch"></batch> |
|||
<location :locationCode="dataContent.locationCode"></location> |
|||
<view class="" v-if="dataContent.jobNumber" style="font-size: 30rpx; padding-left: 10rpx; padding-bottom: 10rpx"> |
|||
<text style="color: coral">任务号</text> |
|||
{{ dataContent.jobNumber }} |
|||
</view> |
|||
<view class="" v-if="dataContent.businessType" style="font-size: 30rpx; padding-left: 10rpx; padding-bottom: 10rpx"> |
|||
<text style="color: green">业务类型</text> |
|||
{{ businessTypeDesc(dataContent.businessType) }} |
|||
</view> |
|||
</view> |
|||
<view class="uni-flex" style="flex-direction: column"> |
|||
<view class="uni-flex uni-row center"> |
|||
<qty :dataContent="dataContent" :isShowStdPack="isShowStdPack" :isShowStatus="true"></qty> |
|||
</view> |
|||
</view> |
|||
</view> |
|||
</view> |
|||
</template> |
|||
|
|||
<script setup lang="ts"> |
|||
import itemQty from '@/mycomponents/item/itemQty.vue' |
|||
import item from '@/mycomponents/item/item.vue' |
|||
import pack from '@/mycomponents/balance/pack.vue' |
|||
import batch from '@/mycomponents/balance/batch.vue' |
|||
import qty from '@/mycomponents/qty/qty.vue' |
|||
import status from '@/mycomponents/status/status.vue' |
|||
import location from '@/mycomponents/balance/location.vue' |
|||
import { getBusinessTypeName } from '@/common/directory.js' |
|||
|
|||
const props = defineProps({ |
|||
dataContent: { |
|||
type: Object, |
|||
default: null |
|||
}, |
|||
isShowPack: { |
|||
type: Boolean, |
|||
default: true |
|||
}, |
|||
isShowBatch: { |
|||
type: Boolean, |
|||
default: true |
|||
}, |
|||
isShowLocation: { |
|||
type: Boolean, |
|||
default: true |
|||
}, |
|||
isShowStdPack: { |
|||
type: Boolean, |
|||
default: true |
|||
} |
|||
}) |
|||
|
|||
const businessTypeDesc = (type) => { |
|||
return getBusinessTypeName(type) |
|||
} |
|||
</script> |
|||
|
|||
<style></style> |
@ -0,0 +1,438 @@ |
|||
<!-- 基于z-paging封装个性化分页组件演示(vue) --> |
|||
<template> |
|||
<view class="uni-flex" style="flex-direction: column"> |
|||
<itemFilter ref="filter" @onConfirmClick="confirm"> </itemFilter> |
|||
<view class="top" style=""> |
|||
<com-blank-view @goScan="openScanPopup" v-if="packingNumber == ''"></com-blank-view> |
|||
<z-tabs v-if="packingNumber" :list="tabList" @change="tabChange" /> |
|||
</view> |
|||
|
|||
<view style="padding-top: 100rpx; width: 100%"> |
|||
<view v-if="totalCount > 0" style="margin: 10rpx; font-size: 35rpx; font-weight: bold">总数 : {{ totalCount }} </view> |
|||
<view v-for="(item, index) in dataList" style="width: 100%" :key="index"> |
|||
<view class="uni-flex uni-row" style="align-items: center; background-color: #fff; border-radius: 10rpx; margin: 10rpx"> |
|||
<view class="" style="font-size: 35rpx"> ({{ index + 1 }}) </view> |
|||
<comPackDetailCard :isShowPack="false" :dataContent="item" style="margin: 10rpx"> </comPackDetailCard> |
|||
</view> |
|||
</view> |
|||
<uni-load-more :status="loadingType" v-if="dataList.length > 0" /> |
|||
</view> |
|||
|
|||
<win-scan-button @goScan="openScanPopup" v-if="packingNumber != ''"></win-scan-button> |
|||
|
|||
<win-scan-pack ref="scanPopup" @getResult="getScanResult" headerType="HPQ,HMQ"></win-scan-pack> |
|||
<com-message ref="comMessageRef" /> |
|||
</view> |
|||
</template> |
|||
|
|||
<script setup lang="ts"> |
|||
import { ref, getCurrentInstance, nextTick, onMounted, watch } from 'vue' |
|||
import { onLoad, onShow, onNavigationBarButtonTap, onReady, onBackPress, onReachBottom, onPullDownRefresh } from '@dcloudio/uni-app' |
|||
import { getExpectoutByItemcode, getExpectinByItemcode, getBalanceByItemCode, getBasicItemByCode, getBalanceSummary } from '@/api/request2.js' |
|||
import { goHome } from '@/common/basic.js' |
|||
import itemInfo from '@/mycomponents/item/itemInfo.vue' |
|||
import comBlankView from '@/mycomponents/common/comBlankView.vue' |
|||
import winScanPack from '@/mycomponents/scan/winScanPack.vue' |
|||
import winScanButton from '@/mycomponents/scan/winScanButton.vue' |
|||
import comPackDetailCard from '@/pages/query/coms/comPackDetailCard.vue' |
|||
import itemFilter from '@/mycomponents/item/itemFilter.vue' |
|||
import comEmptyView from '@/mycomponents/common/comEmptyView.vue' |
|||
|
|||
const dataList = ref([]) |
|||
const tabList = ref(['明细', '预计出']) |
|||
const tabIndex = ref(0) |
|||
const packingNumber = ref('') |
|||
const itemDetail = ref(undefined) |
|||
const balances = ref([]) |
|||
const loadingType = ref('nomore') |
|||
const totalCount = ref(0) |
|||
const locationCode = ref('') |
|||
const inventoryStatus = ref('') |
|||
const pageSize = ref(10) |
|||
const filter = ref() |
|||
const paging = ref() |
|||
const scanPopup = ref() |
|||
const comMessageRef = ref() |
|||
|
|||
// 返回首页 |
|||
onNavigationBarButtonTap((e) => { |
|||
if (e.index === 0) { |
|||
goHome() |
|||
} else if (e.index == 1) { |
|||
filter.value.openFilter() |
|||
} |
|||
}) |
|||
|
|||
onReachBottom(() => { |
|||
console.log('底部') |
|||
// 避免多次触发 |
|||
if (loadingType.value == 'loading' || loadingType.value == 'nomore') { |
|||
return |
|||
} |
|||
getContentByTab(tabIndex.value, pageNo.value, pageSize.value, 'more') |
|||
}) |
|||
onLoad((option) => { |
|||
uni.setNavigationBarTitle({ |
|||
title: option.title |
|||
}) |
|||
}) |
|||
mounted(() => { |
|||
openScanPopup() |
|||
}) |
|||
onPullDownRefresh(() => { |
|||
getContentByTab(tabIndex.value, pageNo.value, pageSize.value, 'refresh') |
|||
}) |
|||
const openScanPopup = () => { |
|||
scanPopup.value.openScanPopup() |
|||
} |
|||
const closeScanPopup = () => { |
|||
scanPopup.value.closeScanPopup() |
|||
} |
|||
const getScanResult = (result) => { |
|||
if (!result.label.packingNumber) { |
|||
showMessage('包装号不能为空') |
|||
return |
|||
} |
|||
packingNumber.value = result.label.packingNumber |
|||
tabChange(0) |
|||
} |
|||
const getItemInfo = (code) => { |
|||
uni.showLoading({ |
|||
title: '正在查询物料信息...', |
|||
mask: true |
|||
}) |
|||
|
|||
getBasicItemByCode(code) |
|||
.then((res) => { |
|||
uni.hideLoading() |
|||
if (res.data.list.length > 0) { |
|||
closeScanPopup() |
|||
packingNumber.value = res.data.list[0].code |
|||
itemDetail.value = res.data.list[0] |
|||
tabChange(0) |
|||
} else { |
|||
showMessage(`未查找到物料【${code}】`) |
|||
} |
|||
}) |
|||
.catch((error) => { |
|||
uni.hideLoading() |
|||
packingNumber.value = '' |
|||
showMessage(error) |
|||
}) |
|||
} |
|||
|
|||
// 汇总 |
|||
|
|||
const getSummary = (pageNo, pageSize, type) => { |
|||
uni.showLoading({ |
|||
title: '加载中...', |
|||
mask: true |
|||
}) |
|||
loadingType.value = 'loading' |
|||
if (type === 'refresh') { |
|||
pageNo.value = 1 |
|||
dataList.value = [] |
|||
} |
|||
|
|||
const filters = [] |
|||
filters.push({ |
|||
column: 'packingNumber', |
|||
action: '==', |
|||
value: packingNumber.value |
|||
}) |
|||
if (locationCode.value) { |
|||
filters.push({ |
|||
column: 'locationCode', |
|||
action: '==', |
|||
value: locationCode.value |
|||
}) |
|||
} |
|||
|
|||
if (inventoryStatus.value) { |
|||
filters.push({ |
|||
column: 'inventoryStatus', |
|||
action: 'in', |
|||
value: inventoryStatus.value |
|||
}) |
|||
} |
|||
|
|||
const params = { |
|||
filters, |
|||
pageNo: pageNo.value, |
|||
pageSize |
|||
} |
|||
getBalanceByItemCode(params) |
|||
.then((res) => { |
|||
uni.hideLoading() |
|||
|
|||
if (type === 'refresh') { |
|||
uni.stopPullDownRefresh() |
|||
} |
|||
const { list } = res.data |
|||
totalCount.value = res.data.total |
|||
loadingType.value = 'loadmore' |
|||
if (list == null || list.length == 0) { |
|||
loadingType.value = 'nomore' |
|||
return |
|||
} |
|||
|
|||
dataList.value = type === 'refresh' ? list : dataList.value.concat(list) |
|||
pageNo.value++ |
|||
}) |
|||
.catch((error) => { |
|||
paging.value.complete(false) |
|||
uni.hideLoading() |
|||
showMessage(error) |
|||
}) |
|||
} |
|||
// 明细 |
|||
|
|||
const getDetailList = (pageNo, pageSize, type) => { |
|||
uni.showLoading({ |
|||
title: '加载中...', |
|||
mask: true |
|||
}) |
|||
loadingType.value = 'loading' |
|||
if (type === 'refresh') { |
|||
pageNo.value = 1 |
|||
dataList.value = [] |
|||
} |
|||
|
|||
const filters = [] |
|||
filters.push({ |
|||
column: 'packingNumber', |
|||
action: '==', |
|||
value: packingNumber.value |
|||
}) |
|||
if (locationCode.value) { |
|||
filters.push({ |
|||
column: 'locationCode', |
|||
action: '==', |
|||
value: locationCode.value |
|||
}) |
|||
} |
|||
|
|||
if (inventoryStatus.value) { |
|||
filters.push({ |
|||
column: 'inventoryStatus', |
|||
action: 'in', |
|||
value: inventoryStatus.value |
|||
}) |
|||
} |
|||
|
|||
const params = { |
|||
filters, |
|||
pageNo: pageNo.value, |
|||
pageSize |
|||
} |
|||
getBalanceByItemCode(params) |
|||
.then((res) => { |
|||
uni.hideLoading() |
|||
|
|||
if (type === 'refresh') { |
|||
uni.stopPullDownRefresh() |
|||
} |
|||
const { list } = res.data |
|||
totalCount.value = res.data.total |
|||
loadingType.value = 'loadmore' |
|||
if (list == null || list.length == 0) { |
|||
loadingType.value = 'nomore' |
|||
return |
|||
} |
|||
dataList.value = type === 'refresh' ? list : dataList.value.concat(list) |
|||
pageNo.value++ |
|||
}) |
|||
.catch((error) => { |
|||
uni.hideLoading() |
|||
showMessage(error) |
|||
}) |
|||
} |
|||
|
|||
const getContentByTab = (index, pageNo, pageSize, type) => { |
|||
if (index === 0) getDetailList(pageNo, pageSize, type) |
|||
else if (index === 1) getExpectout(pageNo, pageSize, type) |
|||
else if (index === 2) { |
|||
// this.getExpectout(pageNo, pageSize, type); |
|||
} |
|||
} |
|||
// 预计入 |
|||
|
|||
const getExpectin = (pageNo, pageSize, type) => { |
|||
uni.showLoading({ |
|||
title: '加载中...', |
|||
mask: true |
|||
}) |
|||
|
|||
loadingType.value = 'loading' |
|||
if (type === 'refresh') { |
|||
pageNo.value = 1 |
|||
dataList.value = [] |
|||
} |
|||
|
|||
const filters = [] |
|||
filters.push({ |
|||
column: 'packingNumber', |
|||
action: '==', |
|||
value: packingNumber.value |
|||
}) |
|||
if (locationCode.value) { |
|||
filters.push({ |
|||
column: 'locationCode', |
|||
action: '==', |
|||
value: locationCode.value |
|||
}) |
|||
} |
|||
|
|||
if (inventoryStatus.value) { |
|||
filters.push({ |
|||
column: 'inventoryStatus', |
|||
action: 'in', |
|||
value: inventoryStatus.value |
|||
}) |
|||
} |
|||
|
|||
const params = { |
|||
filters, |
|||
pageNo: pageNo.value, |
|||
pageSize |
|||
} |
|||
getExpectinByItemcode(params) |
|||
.then((res) => { |
|||
uni.hideLoading() |
|||
|
|||
if (type === 'refresh') { |
|||
uni.stopPullDownRefresh() |
|||
} |
|||
const { list } = res.data |
|||
totalCount.value = res.data.total |
|||
loadingType.value = 'loadmore' |
|||
if (list == null || list.length == 0) { |
|||
loadingType.value = 'nomore' |
|||
return |
|||
} |
|||
dataList.value = type === 'refresh' ? list : dataList.value.concat(list) |
|||
pageNo.value++ |
|||
}) |
|||
.catch((error) => { |
|||
uni.hideLoading() |
|||
showMessage(error) |
|||
}) |
|||
} |
|||
|
|||
// 预计出 |
|||
|
|||
const getExpectout = (pageNo, pageSize, type) => { |
|||
uni.showLoading({ |
|||
title: '加载中...', |
|||
mask: true |
|||
}) |
|||
|
|||
loadingType.value = 'loading' |
|||
if (type === 'refresh') { |
|||
pageNo.value = 1 |
|||
dataList.value = [] |
|||
} |
|||
|
|||
const filters = [] |
|||
filters.push({ |
|||
column: 'packingNumber', |
|||
action: '==', |
|||
value: packingNumber.value |
|||
}) |
|||
if (locationCode.value) { |
|||
filters.push({ |
|||
column: 'locationCode', |
|||
action: '==', |
|||
value: locationCode.value |
|||
}) |
|||
} |
|||
|
|||
if (inventoryStatus.value) { |
|||
filters.push({ |
|||
column: 'inventoryStatus', |
|||
action: 'in', |
|||
value: inventoryStatus.value |
|||
}) |
|||
} |
|||
|
|||
const params = { |
|||
filters, |
|||
pageNo: pageNo.value, |
|||
pageSize |
|||
} |
|||
getExpectoutByItemcode(params) |
|||
.then((res) => { |
|||
uni.hideLoading() |
|||
if (type === 'refresh') { |
|||
uni.stopPullDownRefresh() |
|||
} |
|||
const { list } = res.data |
|||
totalCount.value = res.data.total |
|||
loadingType.value = 'loadmore' |
|||
if (list == null || list.length == 0) { |
|||
loadingType.value = 'nomore' |
|||
return |
|||
} |
|||
dataList.value = type === 'refresh' ? list : dataList.value.concat(list) |
|||
pageNo.value++ |
|||
}) |
|||
.catch((error) => { |
|||
uni.hideLoading() |
|||
showMessage(error) |
|||
}) |
|||
} |
|||
|
|||
const showMessage = (message) => { |
|||
comMessageRef.value.showErrorMessage(message, (res) => { |
|||
if (res) { |
|||
afterCloseMessage() |
|||
} |
|||
}) |
|||
} |
|||
|
|||
const afterCloseMessage = () => { |
|||
if (scanPopup.value != undefined) { |
|||
scanPopup.value.getfocus() |
|||
} |
|||
} |
|||
|
|||
const tabChange = (index) => { |
|||
tabIndex.value = index |
|||
getContentByTab(index, pageNo.value, pageSize.value, 'refresh') |
|||
} |
|||
|
|||
const confirm = (locationCode, status) => { |
|||
if (packingNumber.value) { |
|||
locationCode.value = locationCode |
|||
if (status.length > 0) { |
|||
const arrayItems = status.join(',') |
|||
inventoryStatus.value = arrayItems |
|||
} else { |
|||
inventoryStatus.value = '' |
|||
} |
|||
tabChange(tabIndex.value) |
|||
} else { |
|||
showMessage('请先扫描物料') |
|||
} |
|||
} |
|||
</script> |
|||
|
|||
<style scoped lang="scss"> |
|||
page { |
|||
height: 100%; |
|||
} |
|||
|
|||
.top { |
|||
width: 100%; |
|||
position: fixed; |
|||
/* #ifdef APP */ |
|||
top: 0rpx; |
|||
/* #endif */ |
|||
|
|||
/* #ifdef H5 */ |
|||
top: 80rpx; |
|||
/* #endif */ |
|||
|
|||
right: 0; |
|||
} |
|||
</style> |
Loading…
Reference in new issue