Browse Source

mycomponents/scan 文件迁移Vue2升级Vue3 8/2-10/25

pull/1/head
test 3 months ago
parent
commit
ea6f46aafe
  1. 459
      src/mycomponents/scan/winComScanBalanceLocation.vue
  2. 188
      src/mycomponents/scan/winScanPackAndCont.vue

459
src/mycomponents/scan/winComScanBalanceLocation.vue

@ -1,6 +1,6 @@
<template> <template>
<view> <view>
<uni-popup ref="popup" :mask-click="false"> <u-popup v-model="show" mode="bottom">
<view class="popup_box"> <view class="popup_box">
<view class="pop_title uni-flex space-between"> <view class="pop_title uni-flex space-between">
<view class="" style="font-size: 35rpx"> 扫描{{ title }} </view> <view class="" style="font-size: 35rpx"> 扫描{{ title }} </view>
@ -28,18 +28,18 @@
</view> </view>
<view class=""> <view class="">
<view class=""> <view class="">
<win-com-scan ref="comscan" :placeholder="title" @getResult="getScanResult" :isShowHistory="isShowHistory" :clearResult="true" :headerType="headerType"></win-com-scan> <win-com-scan ref="comscanRef" :placeholder="title" @getResult="getScanResult" :isShowHistory="isShowHistory" :clearResult="true" :headerType="headerType"></win-com-scan>
</view> </view>
</view> </view>
</view> </view>
</uni-popup> </u-popup>
<balance-select ref="balanceSelect" @onSelectItem="selectBalanceItem"></balance-select> <balance-select ref="balanceSelect" @onSelectItem="selectBalanceItem"></balance-select>
<!-- 模拟扫描功能 --> <!-- 模拟扫描功能 -->
</view> </view>
<comMessage ref="comMessage"></comMessage> <comMessage ref="comMessageRef"></comMessage>
</template> </template>
<script> <script setup>
import winComScan from '@/mycomponents/scan/winComScan.vue' import winComScan from '@/mycomponents/scan/winComScan.vue'
import balanceSelect from '@/mycomponents/balance/balanceSelect.vue' import balanceSelect from '@/mycomponents/balance/balanceSelect.vue'
import { getBalanceByManagementPrecisionByPacking } from '@/common/balance.js' import { getBalanceByManagementPrecisionByPacking } from '@/common/balance.js'
@ -48,255 +48,242 @@ import { getBalanceByParams, getBasicItemByCode } from '@/api/request2.js'
import { getListLocationAreaTypeDesc, checkDirectoryItemExist, getDirectoryItemArray, getLocationAreaTypeName, getInventoryStatusDesc, getListItemTypeDesc, getItemTypeInfo } from '@/common/directory.js' import { getListLocationAreaTypeDesc, checkDirectoryItemExist, getDirectoryItemArray, getLocationAreaTypeName, getInventoryStatusDesc, getListItemTypeDesc, getItemTypeInfo } from '@/common/directory.js'
import {getLabelInfo} from '@/common/label.js'; import {getLabelInfo} from '@/common/label.js';
export default {
name: 'winScanPack',
emits: ['getBalance', 'onCloseScanPopup'], import { ref, onMounted, watch } from 'vue';
components: {
winComScan, const props = defineProps({
balanceSelect title: {
type: String,
default: '箱标签'
}, },
props: { isShowHistory: {
title: { type: Boolean,
type: String, default: false
default: '箱标签'
},
isShowHistory: {
type: Boolean,
default: false
},
headerType: {
type: String,
default: 'HPQ,HMQ'
},
balanceFromInventoryStatuses: {
// fromInventoryStatuses
type: Boolean,
default: true
},
bussinessCode: {
type: String,
default: ''
},
//
allowModifyLocation: {
type: Boolean,
default: true
}
}, },
data() { headerType: {
return { type: String,
scanResult: {}, default: 'HPQ,HMQ'
show: false, },
scanList: [], balanceFromInventoryStatuses: {
expand: false, type: Boolean,
showScanResult: {}, default: true
expendIcon: 'arrow-down',
fromLocationCode: '',
fromLocation: '',
fromLocationList: [],
fromLocationAreaTypeList: [],
locationOnFocus: false,
businessType: {},
inventoryStatus: [],
managementPrecision: '',
fromInventoryStatuses: [],
itemTypesList: [],
isCheck: false,
resultData: {}
}
}, },
created() {}, bussinessCode: {
methods: { type: String,
openScanPopup(businessType) { default: ''
this.businessType = businessType },
this.fromInventoryStatuses = getDirectoryItemArray(businessType.outInventoryStatuses) allowModifyLocation: {
this.fromLocationAreaTypeList = getDirectoryItemArray(businessType.outAreaTypes) type: Boolean,
this.itemTypesList = getDirectoryItemArray(businessType.itemTypes) default: true
this.$refs.popup.open('bottom') }
setTimeout(res=>{ });
this.packGetFocus()
},500)
},
openScanPopupForJob(fromLocationCode, fromLocationList, jobContent) { const businessType = ref({});
this.fromLocationCode = fromLocationCode const fromInventoryStatuses = ref([]);
this.fromLocationCode = fromLocationCode; const fromLocationAreaTypeList = ref([]);
this.fromLocationList = fromLocationList; const itemTypesList = ref([]);
this.fromInventoryStatuses = getDirectoryItemArray(jobContent.outInventoryStatuses) const fromLocationCode = ref('');
this.inventoryStatus = getDirectoryItemArray(jobContent.outInventoryStatuses); //; // const fromLocationList = ref([]);
this.fromLocationAreaTypeList = getDirectoryItemArray(jobContent.fromAreaTypes); // const inventoryStatus = ref([]);
this.$refs.popup.open('bottom') const resultData = ref({});
setTimeout(res => { const show = ref(false)
if (this.fromLocationCode != '') {
this.packGetFocus();
} else {
if (this.fromLocationList.length == 0) {
this.locationGetFocus();
} else {
this.fromLocationCode = this.fromLocationList[0];
this.packGetFocus();
}
}
}, 500)
},
//
openScanPopupForJobSimulate(fromLocationCode, fromLocationList, jobContent, scanMessage) {
this.fromLocationCode = fromLocationCode;
this.fromLocationList = fromLocationList;
if (!fromLocationCode) {
if (this.fromLocationList.length == 0) {
// this.locationGetFocus();
alert('没有来源库位:List')
} else {
this.fromLocationCode = this.fromLocationList[0];
}
}
this.fromInventoryStatuses = getDirectoryItemArray(jobContent.outInventoryStatuses)
this.inventoryStatus = getDirectoryItemArray(jobContent.outInventoryStatuses); //; //
this.fromLocationAreaTypeList = getDirectoryItemArray(jobContent.fromAreaTypes); //
getLabelInfo(scanMessage, this.headerType, callback => {
if (callback.success) {
this.getScanResult(callback);
} else {
this.showErrorMessage(callback.message, res => {})
}
})
},
handleConfirm() { const comMessageRef = ref(null);
this.$emit('confirm', this.fromLocationCode) const comscanRef = ref(null);
},
getScanResult(result) { const openScanPopup = (businessTypeValue) => {
if (this.fromLocationCode == '') { businessType.value = businessTypeValue;
this.showErrorMessage('请选择来源库位', (res) => {}) fromInventoryStatuses.value = getDirectoryItemArray(businessTypeValue.outInventoryStatuses);
return fromLocationAreaTypeList.value = getDirectoryItemArray(businessTypeValue.outAreaTypes);
} itemTypesList.value = getDirectoryItemArray(businessTypeValue.itemTypes);
show.value = true
setTimeout(() => {
packGetFocus();
}, 500);
};
this.resultData = result const openScanPopupForJob = (fromLocationCodeValue, fromLocationListValue, jobContent) => {
if (!result.package) { fromLocationCode.value = fromLocationCodeValue;
this.showErrorMessage(`${result.label.code}包装信息为空`) fromLocationList.value = fromLocationListValue;
return fromInventoryStatuses.value = getDirectoryItemArray(jobContent.outInventoryStatuses);
inventoryStatus.value = getDirectoryItemArray(jobContent.outInventoryStatuses);
fromLocationAreaTypeList.value = getDirectoryItemArray(jobContent.fromAreaTypes);
show.value = true
setTimeout(() => {
if (fromLocationCode.value !== '') {
packGetFocus();
} else {
if (fromLocationList.value.length === 0) {
// locationGetFocus();
} else {
fromLocationCode.value = fromLocationList.value[0];
packGetFocus();
} }
// }
this.getItemCodeType(result.package.itemCode, (callBack) => { }, 500);
this.queryBalance(this.resultData) };
})
}, const openScanPopupForJobSimulate = (fromLocationCodeValue, fromLocationListValue, jobContent, scanMessage) => {
fromLocationCode.value = fromLocationCodeValue;
fromLocationList.value = fromLocationListValue;
if (!fromLocationCodeValue) {
if (fromLocationList.value.length === 0) {
alert('没有来源库位:List');
} else {
fromLocationCode.value = fromLocationList.value[0];
}
}
fromInventoryStatuses.value = getDirectoryItemArray(jobContent.outInventoryStatuses);
inventoryStatus.value = getDirectoryItemArray(jobContent.outInventoryStatuses);
fromLocationAreaTypeList.value = getDirectoryItemArray(jobContent.fromAreaTypes);
getLabelInfo(scanMessage, props.headerType, (callback) => {
if (callback.success) {
getScanResult(callback);
} else {
showErrorMessage(callback.message, () => {});
}
});
};
const handleConfirm = () => {
emit('confirm', fromLocationCode.value);
};
const getScanResult = (result) => {
if (fromLocationCode.value === '') {
showErrorMessage('请选择来源库位', () => {});
return;
}
resultData.value = result;
if (!result.package) {
showErrorMessage(`${result.label.code}包装信息为空`);
return;
}
getItemCodeType(result.package.itemCode, () => {
queryBalance(resultData.value);
});
};
queryBalance(result) { const queryBalance = (result) => {
const params = { const params = {
locationCode: this.fromLocationCode, locationCode: fromLocationCode.value,
itemCode: result.package.itemCode, itemCode: result.package.itemCode,
batch: result.label.batch, batch: result.label.batch,
packingNumber: result.label.packingNumber, packingNumber: result.label.packingNumber,
parentPackingNumber: result.package.parentNumber, parentPackingNumber: result.package.parentNumber,
inventoryStatus: this.fromInventoryStatuses, inventoryStatus: fromInventoryStatuses.value,
areaType: this.fromLocationAreaTypeList, areaType: fromLocationAreaTypeList.value,
bussinessCode: this.bussinessCode bussinessCode: props.bussinessCode
};
uni.showLoading({
title: '查询中',
mask: true
});
getBalanceByParams(params)
.then((res) => {
uni.hideLoading();
if (res.data.length === 0) {
const status = getInventoryStatusDesc(params.inventoryStatus);
const areaType = getListLocationAreaTypeDesc(params.areaType);
const hint = `按物料号 [${params.itemCode}] \n` +
`包装号 [${params.packingNumber}] \n` +
`批次 [${params.batch}] \n` +
`状态 [${status}] \n` +
`库区 [${areaType}] \n` +
'未查找到库存余额';
showErrorMessage(hint);
} else if (res.data.length === 1) {
result.balance = res.data[0];
if (result.label.packingNumber !== result.balance.packingNumber) {
result.balance.lableQty = result.label.qty;
}
emit('getBalance', result);
} else {
show.value = true
} }
getBalanceByParams(params) })
.then((res) => { .catch((error) => {
uni.hideLoading() uni.hideLoading();
if (res.data.length == 0) { showErrorMessage(error);
const status = getInventoryStatusDesc(params.inventoryStatus) });
const areaType = getListLocationAreaTypeDesc(params.areaType) };
const hint = `按物料号 [${params.itemCode}] \n` +
`包装号 [${params.packingNumber}] \n` + const getItemCodeType = (itemCode, callBack) => {
`批次 [${params.batch}] \n` + uni.showLoading({
`状态 [${status}] \n` + title: '加载中',
`库区 [${areaType}] \n` + mask: true
'未查找到库存余额' });
this.showErrorMessage(hint) getBasicItemByCode(itemCode)
} else if (res.data.length == 1) { .then((res) => {
result.balance = res.data[0] if (res.data != null && res.data.list.length > 0) {
if (result.label.packingNumber != result.balance.packingNumber) { const result = res.data.list[0];
result.balance.lableQty = result.label.qty const status = result.available;
} const { type } = result;
this.$emit('getBalance', result) if (status === 'TRUE') {
// this.closeScanPopup() if (checkDirectoryItemExist(itemTypesList.value, type)) {
} else { callBack();
//
this.$refs.balanceSelect.openPopup(res.data)
}
})
.catch((error) => {
uni.hideLoading()
this.showErrorMessage(error)
})
},
getItemCodeType(itemCode, callBack) {
uni.showLoading({
title: '加载中',
mask: true
})
getBasicItemByCode(itemCode)
.then((res) => {
if (res.data != null && res.data.list.length > 0) {
const result = res.data.list[0]
const status = result.available
const { type } = result
if (status == 'TRUE') {
if (checkDirectoryItemExist(this.itemTypesList, type)) {
callBack()
} else {
const hint = getListItemTypeDesc(this.itemTypesList)
uni.hideLoading()
this.showErrorMessage(`扫描物料[${itemCode}]是[${getItemTypeInfo(type).label}],需要的物料类型是[${hint}]`)
}
} else {
uni.hideLoading()
this.showErrorMessage(`物料【${itemCode}】不可用`)
}
} else { } else {
uni.hideLoading() const hint = getListItemTypeDesc(itemTypesList.value);
this.showErrorMessage(`未查找到物料【${itemCode}`) uni.hideLoading();
} showErrorMessage(`扫描物料[${itemCode}]是[${getItemTypeInfo(type).label}],需要的物料类型是[${hint}]`);
})
.catch((error) => {
uni.hideLoading()
this.showErrorMessage(error)
})
},
showErrorMessage(message) {
this.packLoseFocus();
this.$refs.comMessage.showErrorMessage(message, (res) => {
if (res) {
if (this.$refs.comscan) {
this.$refs.comscan.getfocus()
} }
} else {
uni.hideLoading();
showErrorMessage(`物料【${itemCode}】不可用`);
} }
}) } else {
}, uni.hideLoading();
selectBalanceItem(item) { showErrorMessage(`未查找到物料【${itemCode}`);
this.resultData.balance = item
this.$emit('getBalance', this.resultData)
// this.closeScanPopup()
},
closeScanPopup() {
this.packLoseFocus()
this.$refs.popup.close()
this.$emit('onCloseScanPopup')
},
getfocus() {
if (this.$refs.comscan) {
this.$refs.comscan.getfocus()
} }
}, })
.catch((error) => {
uni.hideLoading();
showErrorMessage(error);
});
};
packGetFocus() { const showErrorMessage = (message) => {
if (this.$refs.comscan) { packLoseFocus();
this.$refs.comscan.getfocus() comMessageRef.value.showErrorMessage(message, (res) => {
} if (res) {
}, if (comscanRef.value) {
comscanRef.value.getfocus();
packLoseFocus() {
if (this.$refs.comscan) {
this.$refs.comscan.losefocus()
} }
} }
});
};
const selectBalanceItem = (item) => {
resultData.value.balance = item;
emit('getBalance', resultData.value);
};
const closeScanPopup = () => {
packLoseFocus();
show.value = false
emit('onCloseScanPopup');
};
const getfocus = () => {
if (comscanRef.value) {
comscanRef.value.getfocus();
} }
} };
const packGetFocus = () => {
if (comscanRef.value) {
comscanRef.value.getfocus();
}
};
const packLoseFocus = () => {
if (comscanRef.value) {
comscanRef.value.losefocus();
}
};
const emit = defineEmits(['confirm', 'getBalance', 'onCloseScanPopup']);
</script> </script>
<style lang="scss"> <style lang="scss">

188
src/mycomponents/scan/winScanPackAndCont.vue

@ -1,122 +1,124 @@
<template> <template>
<view> <view>
<uni-popup ref="popup" @change="change" @maskClick="closeScanPopup()" :mask-close-able="false"> <u-popup v-model="show">
<view class="popup_box"> <view class="popup_box">
<view class="pop_title uni-flex space-between"> <view class="pop_title uni-flex space-between">
<view class="" style="font-size: 35rpx"> 扫描 : {{ title }} </view> <view class="" style="font-size: 35rpx"> 扫描 : {{ title }}</view>
<view class=""> <view class="">
<image class="fr icons_scan_close" src="/static/icons/icons_scan_close.svg" @click="closeScanPopup()"></image> <image class="fr icons_scan_close" src="/static/icons/icons_scan_close.svg"
@click="closeScanPopup()"></image>
</view> </view>
</view> </view>
<view class=""> <view class="">
<view class=""> <view class="">
<win-com-scan ref="comscan" :placeholder="title" @getResult="getScanResult" :headerType="headerType" :isShowHistory="isShowHistory" :clearResult="true"></win-com-scan> <win-com-scan ref="comscan" :placeholder="title" @getResult="getScanResult" :headerType="headerType"
:isShowHistory="isShowHistory" :clearResult="true"></win-com-scan>
</view> </view>
</view> </view>
</view> </view>
</uni-popup> </u-popup>
<comMessage ref="comMessage" @afterClose="getfocus"></comMessage> <comMessage ref="comMessage" @afterClose="getfocus"></comMessage>
</view> </view>
</template> </template>
<script> <script setup>
import winComScan from '@/mycomponents/scan/winComScan.vue' import winComScan from '@/mycomponents/scan/winComScan.vue'
import { getContainerByNumber } from '@/api/request2.js' import {getContainerByNumber} from '@/api/request2.js'
export default { import {ref, onMounted, watch} from 'vue';
name: 'winScanPack',
components: { const props = defineProps({
winComScan title: {
type: String,
default: '箱标签或托标签'
}, },
props: { isShowHistory: {
title: { type: Boolean,
type: String, default: true
default: '箱标签或托标签'
},
isShowHistory: {
type: Boolean,
default: true
},
headerType: {
type: String,
default: 'HPQ,HMQ,HCQ'
}
}, },
data() { headerType: {
return { type: String,
show: false default: 'HPQ,HMQ,HCQ'
}
});
const show = ref(false);
const popupRef = ref(null);
const comscanRef = ref(null);
const comMessageRef = ref(null);
//
const openScanPopup = () => {
show.value = true;
setTimeout(() => {
getfocus();
}, 500);
};
const closeScanPopup = () => {
losefocus();
show.value = false
emit('close', '');
};
const scanClick = () => {
comscanRef.value.clickScanMsg();
};
const cancelClick = () => {
comscanRef.value.clearScanValue();
};
const getScanResult = (result) => {
if (result.success) {
if (result.label.labelType === 'ContainerLabel') {
getContainerByNumber(result);
} else {
emit('getResult', result);
} }
}, } else {
created() {}, showMessage(result.message);
methods: { }
openScanPopup() { };
this.$refs.popup.open('bottom')
setTimeout(res => { const getContainerByNumber = (result) => {
this.getfocus() getContainerByNumber(result.label.container)
}, 500) .then((res) => {
}, if (res.data.list.length > 0) {
emit('getResult', result);
closeScanPopup() {
this.losefocus()
this.$refs.popup.close()
this.$emit('close', '')
},
scanClick() {
this.$refs.comscan.clickScanMsg()
},
cancelClick() {
this.$refs.comscan.clearScanValue()
},
getScanResult(result) {
if (result.success) {
if (result.label.labelType == 'ContainerLabel') {
this.getContainerByNumber(result)
} else { } else {
this.$emit('getResult', result) showMessage(`未查找到托码【${result.label.container}`);
} }
} else { })
this.showMessage(result.message) .catch((error) => {
} showMessage(error);
}, });
};
getContainerByNumber(result) {
getContainerByNumber(result.label.container) const getfocus = () => {
.then((res) => { if (comscanRef.value) {
if (res.data.list.length > 0) { comscanRef.value.getfocus();
this.$emit('getResult', result)
} else {
this.showMessage(`未查找到托码【${result.label.container}`)
}
})
.catch((error) => {
this.showMessage(error)
})
},
getfocus() {
if (this.$refs.comscan != undefined) {
this.$refs.comscan.getfocus()
}
},
losefocus() {
if (this.$refs.comscan != undefined) {
this.$refs.comscan.losefocus()
}
},
showMessage(message) {
this.$refs.comMessage.showMessage(message)
},
change(e) {
this.show = e.show
}
} }
} };
const losefocus = () => {
if (comscanRef.value) {
comscanRef.value.losefocus();
}
};
const showMessage = (message) => {
comMessageRef.value.showMessage(message);
};
const change = (e) => {
show.value = e.show;
};
const emit = defineEmits(['close', 'getResult']);
</script> </script>
<style lang="scss"> <style lang="scss">

Loading…
Cancel
Save