zhang_li
3 months ago
16 changed files with 806 additions and 464 deletions
@ -0,0 +1,119 @@ |
|||
<template> |
|||
<u-popup v-model="show" @click="show = false" mode="right" width="450rpx"> |
|||
<view class="maskbox" @tap="maskClick"></view> |
|||
<view class="uni-flex uni-column center" style="background-color: white; width: 200px; height: auto; padding: 20rpx; z-index: 100; position: relative; top: 100rpx; right: 20rpx; left: 30rpx; box-shadow: 0px 0px 10px rgba(0, 0, 0, 0.2); border-radius: 10rpx"> |
|||
<view class="uni-flex" style="justify-content: center; font-size: 35rpx; font-weight: bold"> 筛选条件 </view> |
|||
|
|||
<view class="uni-flex" style="flex-direction: column; width: 100%; margin-top: 10rpx"> |
|||
<view class="" style="font-size: 35rpx; margin-bottom: 10rpx"> 库位 </view> |
|||
<u-input style="margin-left: 0rpx" confirmType="search" v-model="locationCode" :border="true" placeholder="请输入库位" :focus="true" /> |
|||
</view> |
|||
<view class="" style="font-size: 35rpx; margin-top: 10rpx; margin-bottom: 10rpx"> |
|||
库存状态 : |
|||
<uni-data-checkbox mode="tag" multiple v-model="state" :localdata="stateList"></uni-data-checkbox> |
|||
</view> |
|||
<view class="" style="margin-top: 30rpx; margin-left: 30rpx; margin-right: 30rpx"> |
|||
<button type="primary" size="default" @click="confirm">确认</button> |
|||
</view> |
|||
</view> |
|||
</u-popup> |
|||
</template> |
|||
|
|||
<script setup lang="ts"> |
|||
import { ref } from 'vue' |
|||
import { getTodayDate } from '@/common/basic.js' |
|||
|
|||
import { getInventoryStatusList } from '@/common/directory.js' |
|||
|
|||
const props = defineProps({ |
|||
checkedToday: { |
|||
type: Boolean, |
|||
default: false |
|||
}, |
|||
checkedWaitTask: { |
|||
type: Boolean, |
|||
default: false |
|||
}, |
|||
otherTitle: { |
|||
type: String, |
|||
default: '' |
|||
}, |
|||
isShowAsn: { |
|||
type: Boolean, |
|||
default: false |
|||
}, |
|||
isShowJob: { |
|||
type: Boolean, |
|||
default: true |
|||
}, |
|||
isShowFromLocationCode: { |
|||
type: Boolean, |
|||
default: false |
|||
}, |
|||
isShowProductionLineCode: { |
|||
type: Boolean, |
|||
default: false |
|||
}, |
|||
productionline: { |
|||
type: Array, |
|||
default: [] |
|||
} |
|||
}) |
|||
const stateList = ref([]) |
|||
const state = ref([]) |
|||
const show = ref(false) |
|||
const scanNumber = ref() |
|||
const locationCode = ref() |
|||
|
|||
// 点击遮罩 |
|||
const maskClick = () => { |
|||
// 如果不允许点击遮罩,直接返回 |
|||
closeScanPopup() |
|||
} |
|||
const openFilter = () => { |
|||
stateList.value = getInventoryStatusList() |
|||
stateList.value.forEach((res) => { |
|||
res.text = res.label |
|||
}) |
|||
show.value = true |
|||
} |
|||
|
|||
const closeScanPopup = () => { |
|||
show.value = false |
|||
} |
|||
|
|||
const switchChangeToday = (isOn) => { |
|||
let creationTime = '' |
|||
if (isOn) { |
|||
creationTime = getTodayDate() |
|||
} |
|||
|
|||
emit('switchChangeToday', isOn, creationTime) |
|||
closeScanPopup() |
|||
} |
|||
|
|||
const scanNumberClick = () => { |
|||
scanNumber.value.openScanPopup() |
|||
} |
|||
|
|||
const scanOtherClick = () => { |
|||
scanAsnNumber.value.openScanPopup() |
|||
} |
|||
|
|||
const confirm = () => { |
|||
emit('onConfirmClick', locationCode.value, state.value) |
|||
closeScanPopup() |
|||
} |
|||
// 传递给父类 |
|||
const emit = defineEmits(['onConfirmClick', 'switchChangeToday']) |
|||
</script> |
|||
<style lang="scss"> |
|||
.maskbox { |
|||
position: fixed; |
|||
top: 0; |
|||
left: 0; |
|||
width: 100vw; |
|||
height: 100vh; |
|||
z-index: 0; |
|||
} |
|||
</style> |
@ -1,83 +1,75 @@ |
|||
<template> |
|||
<view class=""> |
|||
<u-popup v-model="isShow" mode='bottom'> |
|||
<view class="popup_box"> |
|||
<view class="pop_title uni-flex space-between"> |
|||
<view class=""> |
|||
扫描{{title}} |
|||
</view> |
|||
<view class=""> |
|||
<image class=" icons_scan_close" src="/static/icons/icons_scan_close.svg" |
|||
@click="closeScanPopup()"></image> |
|||
</view> |
|||
</view> |
|||
<view class=""> |
|||
<view class=""> |
|||
<win-com-scan ref="scan" @getResult="getScanResult" :placeholder='title' :clearResult="false" :isShowHistory="false"> |
|||
</win-com-scan> |
|||
</view> |
|||
</view> |
|||
</view> |
|||
</u-popup> |
|||
</view> |
|||
<view class=""> |
|||
<u-popup v-model="isShow" mode="bottom"> |
|||
<view class="popup_box"> |
|||
<view class="pop_title uni-flex space-between"> |
|||
<view class=""> 扫描{{ title }} </view> |
|||
<view class=""> |
|||
<image class="icons_scan_close" src="/static/icons/icons_scan_close.svg" @click="closeScanPopup()"></image> |
|||
</view> |
|||
</view> |
|||
<view class=""> |
|||
<view class=""> |
|||
<win-com-scan ref="scan" @getResult="getScanResult" :placeholder="title" :clearResult="false" :isShowHistory="false"> </win-com-scan> |
|||
</view> |
|||
</view> |
|||
</view> |
|||
</u-popup> |
|||
</view> |
|||
</template> |
|||
|
|||
<script setup lang="ts"> |
|||
import { |
|||
ref, |
|||
getCurrentInstance |
|||
} from 'vue' |
|||
import winComScan from '@/mycomponents/scan/winComScan.vue' |
|||
const props = defineProps({ |
|||
title: { |
|||
type: String, |
|||
default: '' |
|||
}, |
|||
isShowRecord: { |
|||
type: Boolean, |
|||
default: true |
|||
} |
|||
}) |
|||
const code = ref('') |
|||
const isShow = ref(false) |
|||
const expand = ref(false) |
|||
const scanList = ref([]) |
|||
const expendIcon = ref('arrow-down') |
|||
const scan = ref() |
|||
const openScanPopup = () => { |
|||
setTimeout(res => { |
|||
isShow.value = true |
|||
}, 500) |
|||
} |
|||
const closeScanPopup = () => { |
|||
isShow.value = false |
|||
} |
|||
const getfocus = () => { |
|||
if (isShow.value) { |
|||
scan.value.getfocus() |
|||
} |
|||
} |
|||
const scanClick = () => { |
|||
scan.value.handelScanMsg() |
|||
} |
|||
const cancelClick = () => { |
|||
scan.value.clearScanValue() |
|||
} |
|||
const getScanResult = (result) => { |
|||
if (result.label.barType === 'BarCode') { |
|||
code.value = result.label.code; |
|||
} |
|||
callBack(); |
|||
} |
|||
const callBack = () => { |
|||
scan.value.clear() |
|||
emit("getScanCode", code.value); |
|||
} |
|||
// 传递给父类 |
|||
const emit = defineEmits(['getScanCode']) |
|||
defineExpose({openScanPopup,closeScanPopup}) |
|||
import { ref, getCurrentInstance } from 'vue' |
|||
import winComScan from '@/mycomponents/scan/winComScan.vue' |
|||
|
|||
const props = defineProps({ |
|||
title: { |
|||
type: String, |
|||
default: '' |
|||
}, |
|||
isShowRecord: { |
|||
type: Boolean, |
|||
default: true |
|||
} |
|||
}) |
|||
const code = ref('') |
|||
const isShow = ref(false) |
|||
const expand = ref(false) |
|||
const scanList = ref([]) |
|||
const expendIcon = ref('arrow-down') |
|||
const scan = ref() |
|||
const openScanPopup = () => { |
|||
setTimeout((res) => { |
|||
isShow.value = true |
|||
}, 500) |
|||
} |
|||
const closeScanPopup = () => { |
|||
isShow.value = false |
|||
} |
|||
const getfocus = () => { |
|||
if (isShow.value) { |
|||
scan.value.getfocus() |
|||
} |
|||
} |
|||
const scanClick = () => { |
|||
scan.value.handelScanMsg() |
|||
} |
|||
const cancelClick = () => { |
|||
scan.value.clearScanValue() |
|||
} |
|||
const getScanResult = (result) => { |
|||
if (result.label.barType === 'BarCode') { |
|||
code.value = result.label.code |
|||
} |
|||
callBack() |
|||
} |
|||
const callBack = () => { |
|||
scan.value.clear() |
|||
emit('getScanCode', code.value) |
|||
} |
|||
// 传递给父类 |
|||
const emit = defineEmits(['getScanCode']) |
|||
defineExpose({ openScanPopup, closeScanPopup }) |
|||
</script> |
|||
|
|||
<style> |
|||
</style> |
|||
<style></style> |
|||
|
@ -1,85 +1,77 @@ |
|||
<template> |
|||
<view class=""> |
|||
<u-popup v-model="isShow" mode='bottom'> |
|||
<view class="popup_box"> |
|||
<view class="pop_title uni-flex space-between"> |
|||
<view class=""> |
|||
扫描{{title}} |
|||
</view> |
|||
<view class=""> |
|||
<image class=" icons_scan_close" src="/static/icons/icons_scan_close.svg" |
|||
@click="closeScanPopup()"></image> |
|||
</view> |
|||
</view> |
|||
<view class=""> |
|||
<view class=""> |
|||
<win-com-scan ref="scan" @getResult="getScanResult" :placeholder='title' :clearResult="false" |
|||
:isShowHistory="false" headerType=""> |
|||
</win-com-scan> |
|||
</view> |
|||
</view> |
|||
</view> |
|||
</u-popup> |
|||
</view> |
|||
<view class=""> |
|||
<u-popup v-model="isShow" mode="bottom"> |
|||
<view class="popup_box"> |
|||
<view class="pop_title uni-flex space-between"> |
|||
<view class=""> 扫描{{ title }} </view> |
|||
<view class=""> |
|||
<image class="icons_scan_close" src="/static/icons/icons_scan_close.svg" @click="closeScanPopup()"></image> |
|||
</view> |
|||
</view> |
|||
<view class=""> |
|||
<view class=""> |
|||
<win-com-scan ref="scan" @getResult="getScanResult" :placeholder="title" :clearResult="true" :isShowHistory="false" headerType=""> </win-com-scan> |
|||
</view> |
|||
</view> |
|||
</view> |
|||
</u-popup> |
|||
</view> |
|||
</template> |
|||
|
|||
<script setup lang="ts"> |
|||
import { |
|||
ref, |
|||
getCurrentInstance |
|||
} from 'vue' |
|||
import winComScan from '@/mycomponents/scan/winComScan.vue' |
|||
const { proxy } = getCurrentInstance() |
|||
// defineOptions({ name: 'winScanJobNumber' }) |
|||
const props = defineProps({ |
|||
title: { |
|||
type: String, |
|||
default: '' |
|||
}, |
|||
isShowRecord: { |
|||
type: Boolean, |
|||
default: true |
|||
} |
|||
}) |
|||
const code = ref('') |
|||
const isShow = ref(false) |
|||
const expand = ref(false) |
|||
const scanList = ref([]) |
|||
const expendIcon = ref('arrow-down') |
|||
const scan = ref() |
|||
const openScanPopup = () => { |
|||
setTimeout(res => { |
|||
isShow.value = true |
|||
}, 500) |
|||
} |
|||
const closeScanPopup = () => { |
|||
isShow.value = false |
|||
} |
|||
const getfocus = () => { |
|||
if (isShow.value) { |
|||
scan.value.getfocus() |
|||
} |
|||
} |
|||
const scanClick = () => { |
|||
scan.value.handelScanMsg() |
|||
} |
|||
const cancelClick = () => { |
|||
scan.value.clearScanValue() |
|||
} |
|||
const getScanResult = (result) => { |
|||
if (result.label.barType === 'BarCode') { |
|||
code.value = result.label.code; |
|||
} |
|||
callBack(); |
|||
} |
|||
const callBack = () => { |
|||
scan.value.clear() |
|||
emit("getScanCode", code.value); |
|||
} |
|||
// 传递给父类 |
|||
const emit = defineEmits(['getScanCode']) |
|||
defineExpose({openScanPopup,closeScanPopup}) |
|||
import { ref, getCurrentInstance } from 'vue' |
|||
import winComScan from '@/mycomponents/scan/winComScan.vue' |
|||
|
|||
const { proxy } = getCurrentInstance() |
|||
// defineOptions({ name: 'winScanJobNumber' }) |
|||
const props = defineProps({ |
|||
title: { |
|||
type: String, |
|||
default: '' |
|||
}, |
|||
isShowRecord: { |
|||
type: Boolean, |
|||
default: true |
|||
} |
|||
}) |
|||
const code = ref('') |
|||
const isShow = ref(false) |
|||
const expand = ref(false) |
|||
const scanList = ref([]) |
|||
const expendIcon = ref('arrow-down') |
|||
const scan = ref() |
|||
const openScanPopup = () => { |
|||
setTimeout((res) => { |
|||
isShow.value = true |
|||
}, 500) |
|||
} |
|||
const closeScanPopup = () => { |
|||
isShow.value = false |
|||
} |
|||
const getfocus = () => { |
|||
if (isShow.value) { |
|||
scan.value.getfocus() |
|||
} |
|||
} |
|||
const scanClick = () => { |
|||
scan.value.handelScanMsg() |
|||
} |
|||
const cancelClick = () => { |
|||
scan.value.clearScanValue() |
|||
} |
|||
const getScanResult = (result) => { |
|||
if (result.label.barType === 'BarCode') { |
|||
code.value = result.label.code |
|||
} |
|||
callBack() |
|||
} |
|||
const callBack = () => { |
|||
scan.value.clear() |
|||
emit('getScanCode', code.value) |
|||
} |
|||
// 传递给父类 |
|||
const emit = defineEmits(['getScanCode']) |
|||
defineExpose({ openScanPopup, closeScanPopup }) |
|||
</script> |
|||
|
|||
<style> |
|||
</style> |
|||
<style></style> |
|||
|
@ -1,270 +1,422 @@ |
|||
<!-- 基于z-paging封装个性化分页组件演示(vue) --> |
|||
<template> |
|||
<view class=""> |
|||
<com-blank-view @goScan="openScanPopup" v-if="itemCode == ''"></com-blank-view> |
|||
<!-- 这里就很整洁了,只要设置ref,绑定query事件,绑定list就可以了 --> |
|||
<my-paging v-show="itemCode != ''" ref="paging" v-model="dataList" @query="queryList"> |
|||
<!-- 需要固定在顶部不滚动的view放在slot="top"的view中,如果需要跟着滚动,则不要设置slot="top" --> |
|||
<template #top> |
|||
<view v-if="itemDetail != undefined"> |
|||
<item-info :itemdetail="itemDetail"></item-info> |
|||
<view class="split_line"></view> |
|||
<z-tabs :list="tabList" @change="tabChange" /> |
|||
</view> |
|||
</template> |
|||
<view class="" style="padding-bottom: 50rpx"> |
|||
<comItemDetailCard v-if="tabIndex == 0" :itemList="dataList" :isShowPack="false" style="margin: 20rpx"> </comItemDetailCard> |
|||
<comItemDetailCard v-if="tabIndex == 1" :itemList="dataList" style="margin: 20rpx"> </comItemDetailCard> |
|||
<comItemDetailCard v-if="tabIndex == 2" :itemList="dataList" :isShowLocation="false" :isShowBusiness="true" style="margin: 20rpx"></comItemDetailCard> |
|||
<comItemDetailCard v-if="tabIndex == 3" :itemList="dataList" :isShowLocation="false" :isShowBusiness="true" style="margin: 20rpx"> </comItemDetailCard> |
|||
</view> |
|||
</my-paging> |
|||
<win-scan-button @goScan="openScanPopup" v-if="itemCode != ''"></win-scan-button> |
|||
<win-scan-item ref="scanPopup" title="物料代码" @getScanResult="getScanCode"> </win-scan-item> |
|||
<com-message ref="comMessageRef" /> |
|||
</view> |
|||
<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="itemCode == ''"></com-blank-view> |
|||
<item-info v-if="itemDetail" :itemdetail="itemDetail"></item-info> |
|||
<z-tabs v-if="itemCode" :list="tabList" @change="tabChange" /> |
|||
</view> |
|||
|
|||
<view style="padding-top: 230rpx; 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> |
|||
<comItemDetailCard :isShowPack="false" :dataContent="item" style="margin: 10rpx"> </comItemDetailCard> |
|||
</view> |
|||
</view> |
|||
<uni-load-more :status="loadingType" v-if="dataList.length > 0" /> |
|||
</view> |
|||
<win-scan-button @goScan="openScanPopup" v-if="itemCode != ''"></win-scan-button> |
|||
<win-scan-item ref="scanPopup" title="物料代码" @getScanResult="getScanCode"> </win-scan-item> |
|||
<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 winScanItem from '@/mycomponents/scan/winScanItem.vue' |
|||
import winScanButton from '@/mycomponents/scan/winScanButton.vue' |
|||
import comItemDetailCard from '@/pages/query/coms/comItemDetailCard.vue' |
|||
|
|||
const { proxy } = getCurrentInstance() |
|||
|
|||
const dataList = ref([]) |
|||
const tabList = ref(['汇总', '明细', '预计入', '预计出']) |
|||
const tabIndex = ref(0) |
|||
const itemDetail = ref(undefined) |
|||
const itemCode = ref('') |
|||
const balances = ref([]) |
|||
const scanPopup = ref() |
|||
const paging = ref() |
|||
const comMessageRef = ref() |
|||
onNavigationBarButtonTap((e) => { |
|||
if (e.index === 0) { |
|||
goHome() |
|||
} |
|||
}) |
|||
onMounted(() => { |
|||
openScanPopup() |
|||
}) |
|||
const openScanPopup = (val) => { |
|||
scanPopup.value.openScanPopup() |
|||
} |
|||
const closeScanPopup = () => { |
|||
scanPopup.value.closeScanPopup() |
|||
} |
|||
const getScanCode = (code) => { |
|||
if (code == '') { |
|||
showMessage('物料号不能为空') |
|||
return |
|||
} |
|||
itemCode.value = '' |
|||
getItemInfo(code) |
|||
} |
|||
const getItemInfo = (code) => { |
|||
proxy.$modal.loading('正在查询物料信息....') |
|||
|
|||
getBasicItemByCode(code) |
|||
.then((res) => { |
|||
uni.hideLoading() |
|||
if (res.data.list.length > 0) { |
|||
closeScanPopup() |
|||
itemCode.value = res.data.list[0].code |
|||
itemDetail.value = res.data.list[0] |
|||
tabChange(0) |
|||
} else { |
|||
showMessage(`未查找到物料【${code}】`) |
|||
} |
|||
}) |
|||
.catch((error) => { |
|||
uni.hideLoading() |
|||
itemCode.value = '' |
|||
showMessage(error) |
|||
}) |
|||
} |
|||
|
|||
// 汇总 |
|||
const getSummary = (pageNo, pageSize) => { |
|||
proxy.$modal.loading('加载中....') |
|||
const params = { |
|||
itemCode: itemCode.value, |
|||
pageNo, |
|||
pageSize |
|||
} |
|||
getBalanceSummary(params) |
|||
.then((res) => { |
|||
uni.hideLoading() |
|||
if (res.data.list.length > 0) { |
|||
paging.value.complete(res.data.list) |
|||
} else { |
|||
paging.value.complete(false) |
|||
showMessage(`未查找到物料【${itemCode.value}】`) |
|||
} |
|||
}) |
|||
.catch((error) => { |
|||
paging.value.complete(false) |
|||
uni.hideLoading() |
|||
showMessage(error) |
|||
}) |
|||
} |
|||
// 明细 |
|||
const getDetailList = (pageNo, pageSize) => { |
|||
proxy.$modal.loading('加载中....') |
|||
const params = { |
|||
itemCode: itemCode.value, |
|||
pageNo, |
|||
pageSize |
|||
} |
|||
getBalanceByItemCode(params) |
|||
.then((res) => { |
|||
uni.hideLoading() |
|||
if (res.data.list.length > 0) { |
|||
paging.value.complete(res.data.list) |
|||
} else { |
|||
paging.value.complete(false) |
|||
showMessage(`未查找到物料【${itemCode.value}】`) |
|||
} |
|||
}) |
|||
.catch((error) => { |
|||
paging.value.complete(false) |
|||
uni.hideLoading() |
|||
showMessage(error) |
|||
}) |
|||
} |
|||
const ontabtap = (e) => { |
|||
const index = e.target.dataset.current || e.currentTarget.dataset.current |
|||
tabIndex.value = index |
|||
getContentByTab(index) |
|||
} |
|||
|
|||
const getContentByTab = (index, pageNo, pageSize) => { |
|||
if (index === 0) getSummary(pageNo, pageSize) |
|||
else if (index === 1) getDetailList(pageNo, pageSize) |
|||
else if (index === 2) { |
|||
getExpectin(pageNo, pageSize) |
|||
} else if (index == 3) { |
|||
getExpectout(pageNo, pageSize) |
|||
} |
|||
} |
|||
// 预计入 |
|||
const getExpectin = (pageNo, pageSize) => { |
|||
proxy.$modal.loading('加载中....') |
|||
const params = { |
|||
itemCode: itemCode.value, |
|||
pageNo, |
|||
pageSize |
|||
} |
|||
getExpectinByItemcode(params) |
|||
.then((res) => { |
|||
uni.hideLoading() |
|||
if (res.data.total > 0) { |
|||
paging.value.complete(res.data.list) |
|||
} else { |
|||
paging.value.complete(false) |
|||
showMessage(`未查找到物料【${itemCode.value}】`) |
|||
} |
|||
}) |
|||
.catch((error) => { |
|||
paging.value.complete(false) |
|||
uni.hideLoading() |
|||
showMessage(error) |
|||
}) |
|||
} |
|||
|
|||
// 预计出 |
|||
const getExpectout = (pageNo, pageSize) => { |
|||
proxy.$modal.loading('加载中....') |
|||
const params = { |
|||
itemCode: itemCode.value, |
|||
pageNo, |
|||
pageSize |
|||
} |
|||
getExpectoutByItemcode(params) |
|||
.then((res) => { |
|||
uni.hideLoading() |
|||
console.log(res) |
|||
if (res.data.total > 0) { |
|||
paging.value.complete(res.data.list) |
|||
} else { |
|||
paging.value.complete(false) |
|||
showMessage(`未查找到物料【${itemCode.value}】`) |
|||
} |
|||
}) |
|||
.catch((error) => { |
|||
paging.value.complete(false) |
|||
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) => { |
|||
console.log(index) |
|||
tabIndex.value = index |
|||
paging.value.reload(true) |
|||
} |
|||
const queryList = (pageNo, pageSize) => { |
|||
if (itemCode.value != '') { |
|||
getContentByTab(tabIndex.value, pageNo, pageSize) |
|||
} |
|||
} |
|||
|
|||
const itemClick = (item) => {} |
|||
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 winScanItem from '@/mycomponents/scan/winScanItem.vue' |
|||
import winScanButton from '@/mycomponents/scan/winScanButton.vue' |
|||
import comItemDetailCard from '@/pages/query/coms/comItemDetailCard.vue' |
|||
import itemFilter from '@/mycomponents/item/itemFilter.vue' |
|||
import comEmptyView from '@/mycomponents/common/comEmptyView.vue' |
|||
|
|||
const { proxy } = getCurrentInstance() |
|||
|
|||
const dataList = ref([]) |
|||
const tabList = ref(['汇总', '明细', '预计入', '预计出']) |
|||
const tabIndex = ref(0) |
|||
const itemDetail = ref(undefined) |
|||
const itemCode = ref('') |
|||
const balances = ref([]) |
|||
const loadingType = ref('nomore') |
|||
const totalCount = ref(0) |
|||
const locationCode = ref('') |
|||
const inventoryStatus = ref('') |
|||
const pageSize = ref(10) |
|||
const pageNo = ref(1) |
|||
const scanPopup = ref() |
|||
const paging = ref() |
|||
const comMessageRef = ref() |
|||
const filter = ref() |
|||
onNavigationBarButtonTap((e) => { |
|||
if (e.index === 0) { |
|||
goHome() |
|||
} else if (e.index == 1) { |
|||
filter.value.openFilter() |
|||
} |
|||
}) |
|||
onMounted(() => { |
|||
openScanPopup() |
|||
}) |
|||
onReachBottom(() => { |
|||
console.log('底部') |
|||
// 避免多次触发 |
|||
if (loadingType.value == 'loading' || loadingType.value == 'nomore') { |
|||
return |
|||
} |
|||
getContentByTab(tabIndex.value, pageNo.value, pageSize.value, 'more') |
|||
}) |
|||
onPullDownRefresh(() => { |
|||
getContentByTab(tabIndex.value, pageNo.value, pageSize.value, 'refresh') |
|||
}) |
|||
const openScanPopup = (val) => { |
|||
scanPopup.value.openScanPopup() |
|||
} |
|||
const closeScanPopup = () => { |
|||
scanPopup.value.closeScanPopup() |
|||
} |
|||
const getScanCode = (code) => { |
|||
if (code == '') { |
|||
showMessage('物料号不能为空') |
|||
return |
|||
} |
|||
itemCode.value = '' |
|||
getItemInfo(code) |
|||
} |
|||
const getItemInfo = (code) => { |
|||
proxy.$modal.loading('正在查询物料信息....') |
|||
|
|||
getBasicItemByCode(code) |
|||
.then((res) => { |
|||
uni.hideLoading() |
|||
if (res.data.list.length > 0) { |
|||
closeScanPopup() |
|||
itemCode.value = res.data.list[0].code |
|||
itemDetail.value = res.data.list[0] |
|||
tabChange(0) |
|||
} else { |
|||
showMessage(`未查找到物料【${code}】`) |
|||
} |
|||
}) |
|||
.catch((error) => { |
|||
uni.hideLoading() |
|||
itemCode.value = '' |
|||
showMessage(error) |
|||
}) |
|||
} |
|||
|
|||
const getSummary = (pageNo, pageSize, type) => { |
|||
uni.showLoading({ |
|||
title: "加载中...", |
|||
mask: true |
|||
}); |
|||
loadingType.value = "loading"; |
|||
if (type === "refresh") { |
|||
pageNo.value = 1; |
|||
dataList.value = []; |
|||
} |
|||
|
|||
var filters = []; |
|||
filters.push({ |
|||
column: "itemCode", |
|||
action: "==", |
|||
value: itemCode.value |
|||
}) |
|||
if (locationCode.value) { |
|||
filters.push({ |
|||
column: "locationCode", |
|||
action: "==", |
|||
value: locationCode.value |
|||
}) |
|||
} |
|||
|
|||
if (inventoryStatus.value) { |
|||
filters.push({ |
|||
column: "inventoryStatus", |
|||
action: "in", |
|||
value: inventoryStatus.value |
|||
}) |
|||
} |
|||
|
|||
var params = { |
|||
filters: filters, |
|||
pageNo: pageNo.value, |
|||
pageSize: pageSize |
|||
} |
|||
getBalanceByItemCode(params).then(res => { |
|||
uni.hideLoading(); |
|||
|
|||
if (type === "refresh") { |
|||
uni.stopPullDownRefresh(); |
|||
} |
|||
var list = res.data.list; |
|||
totalCount.value = res.data.total |
|||
loadingType.value = "loadmore"; |
|||
if (list == null || list.length == 0) { |
|||
loadingType.value = "nomore"; |
|||
return; |
|||
} |
|||
list.forEach(item => { |
|||
item.packingNumber = "" |
|||
}) |
|||
|
|||
dataList.value = type === "refresh" ? list : dataList.value..valueconcat(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 = []; |
|||
} |
|||
|
|||
var filters = []; |
|||
filters.push({ |
|||
column: "itemCode", |
|||
action: "==", |
|||
value: itemCode.value |
|||
}) |
|||
if (locationCode.value) { |
|||
filters.push({ |
|||
column: "locationCode", |
|||
action: "==", |
|||
value: locationCode.value |
|||
}) |
|||
} |
|||
|
|||
if (inventoryStatus.value) { |
|||
filters.push({ |
|||
column: "inventoryStatus", |
|||
action: "in", |
|||
value: inventoryStatus.value |
|||
}) |
|||
} |
|||
|
|||
var params = { |
|||
filters: filters, |
|||
pageNo: pageNo.value, |
|||
pageSize: pageSize |
|||
} |
|||
getBalanceByItemCode(params).then(res => { |
|||
uni.hideLoading(); |
|||
|
|||
if (type === "refresh") { |
|||
uni.stopPullDownRefresh(); |
|||
} |
|||
var list = res.data.list; |
|||
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) getSummary(pageNo, pageSize, type); |
|||
else if (index === 1) getDetailList(pageNo, pageSize, type); |
|||
else if (index === 2) { |
|||
getExpectin(pageNo, pageSize, type); |
|||
} else if (index == 3) { |
|||
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 = []; |
|||
} |
|||
|
|||
var filters = []; |
|||
filters.push({ |
|||
column: "itemCode", |
|||
action: "==", |
|||
value: itemCode.value |
|||
}) |
|||
if (locationCode.value) { |
|||
filters.push({ |
|||
column: "locationCode", |
|||
action: "==", |
|||
value: locationCode.value |
|||
}) |
|||
} |
|||
|
|||
if (inventoryStatus.value) { |
|||
filters.push({ |
|||
column: "inventoryStatus", |
|||
action: "in", |
|||
value: inventoryStatus.value |
|||
}) |
|||
} |
|||
|
|||
var params = { |
|||
filters: filters, |
|||
pageNo: pageNo.value, |
|||
pageSize: pageSize |
|||
} |
|||
getExpectinByItemcode(params).then(res => { |
|||
uni.hideLoading(); |
|||
|
|||
if (type === "refresh") { |
|||
uni.stopPullDownRefresh(); |
|||
} |
|||
var list = res.data.list; |
|||
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 = []; |
|||
} |
|||
|
|||
var filters = []; |
|||
filters.push({ |
|||
column: "itemCode", |
|||
action: "==", |
|||
value: itemCode.value |
|||
}) |
|||
if (locationCode.value) { |
|||
filters.push({ |
|||
column: "locationCode", |
|||
action: "==", |
|||
value: locationCode.value |
|||
}) |
|||
} |
|||
|
|||
if (inventoryStatus.value) { |
|||
filters.push({ |
|||
column: "inventoryStatus", |
|||
action: "in", |
|||
value: inventoryStatus.value |
|||
}) |
|||
} |
|||
|
|||
var params = { |
|||
filters: filters, |
|||
pageNo: pageNo.value, |
|||
pageSize: pageSize |
|||
} |
|||
getExpectoutByItemcode(params).then(res => { |
|||
uni.hideLoading(); |
|||
if (type === "refresh") { |
|||
uni.stopPullDownRefresh(); |
|||
} |
|||
var list = res.data.list; |
|||
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 = (locationCodeParams, status) => { |
|||
locationCode.value = locationCodeParams; |
|||
if (status.length > 0) { |
|||
var arrayItems = status.join(',') |
|||
inventoryStatus.value = arrayItems |
|||
} else { |
|||
inventoryStatus.value = "" |
|||
} |
|||
tabChange(tabIndex.value) |
|||
} |
|||
</script> |
|||
|
|||
<style> |
|||
.notice { |
|||
background-color: red; |
|||
color: white; |
|||
display: flex; |
|||
flex-direction: column; |
|||
padding: 12rpx 20rpx; |
|||
font-size: 24rpx; |
|||
} |
|||
|
|||
.item { |
|||
position: relative; |
|||
height: 150rpx; |
|||
display: flex; |
|||
align-items: center; |
|||
justify-content: space-between; |
|||
padding: 0rpx 30rpx; |
|||
} |
|||
|
|||
.item-detail { |
|||
padding: 5rpx 15rpx; |
|||
border-radius: 10rpx; |
|||
font-size: 28rpx; |
|||
color: white; |
|||
background-color: #007aff; |
|||
} |
|||
|
|||
.item-line { |
|||
position: absolute; |
|||
bottom: 0rpx; |
|||
left: 0rpx; |
|||
height: 1px; |
|||
width: 100%; |
|||
background-color: #eeeeee; |
|||
} |
|||
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