406 lines
13 KiB
406 lines
13 KiB
<template>
|
|
<view class="">
|
|
<u-popup v-model="isShow" mode="bottom">
|
|
<view class="uni-flex uni-column pop_customer">
|
|
<view class="" style="padding: 10rpx">
|
|
<view class="uni-flex u-col-center uni-row space-between" style="padding: 10rpx 10rpx 20rpx 10rpx">
|
|
<view class="" style="font-size: 35rpx">
|
|
{{ title }}
|
|
</view>
|
|
<image style="width: 35rpx; height: 35rpx" src="/static/icons/icons_close.svg" @click="closeRequestPopup()"> </image>
|
|
</view>
|
|
<view class="split_line"></view>
|
|
<view class="uni-flex uni-column" style="background-color: white">
|
|
<view class="uni-flex uni-column">
|
|
<!-- <view class="uni-flex uni-row padding title u-col-center">
|
|
<text>从仓库代码:</text>
|
|
<view class="uni-flex u-col-center uni-row" @click="showWarseHouseSelect">
|
|
<view class="" style="margin-left: 20rpx; width: 100%">
|
|
{{ fromWarehouseCode }}
|
|
</view>
|
|
<u-select v-model="showWareHouse" mode="single-column" :list="wareHouseList" @confirm="confirmWareHouse"></u-select>
|
|
</view>
|
|
</view> -->
|
|
<!-- <view class="split_line"></view> -->
|
|
<view class="uni-flex uni-row" style="align-items: center; background-color: #fff; margin-right: 20rpx; border-radius: 8rpx">
|
|
<view class="uni-center" style="width: 25%; font-size: 32rpx"> 优先级 </view>
|
|
<view style="width: 100%">
|
|
<uni-data-select style="padding: 20rpx" v-model="priority" :localdata="priorityList" :clear="false"></uni-data-select>
|
|
</view>
|
|
</view>
|
|
<view class="split_line"></view>
|
|
<view class="split_line"></view>
|
|
<view class="uni-flex uni-row" style="align-items: center; background-color: #fff; margin-right: 20rpx; border-radius: 8rpx">
|
|
<view class="uni-center" style="width: 25%; font-size: 32rpx"> 优先级 </view>
|
|
<view style="width: 100%">
|
|
<uni-data-select style="padding: 20rpx" v-model="priority" :localdata="priorityList" :clear="false"></uni-data-select>
|
|
</view>
|
|
</view>
|
|
<view class="uni-flex uni-row padding title u-col-center">
|
|
<text>位置:</text>
|
|
<view class="uni-flex u-col-center uni-row" @click="showSelect">
|
|
<view class="" style="margin-left: 20rpx">
|
|
{{ positionInfo }}
|
|
</view>
|
|
<u-select v-model="show" mode="mutil-column-auto" :list="positionList" @confirm="confirmSelect"></u-select>
|
|
</view>
|
|
</view>
|
|
<view class="split_line"></view>
|
|
|
|
<view class="title padding" style="display: flex">
|
|
<text style="flex-shrink: 0">物料:</text>
|
|
<view class="" style="width: 100%">
|
|
{{ itemCode }}
|
|
</view>
|
|
<view class="">
|
|
<image src="/static/search.svg" mode="" style="width: 40rpx; height: 40rpx; margin-left: 20rpx" @click="itemCodeClick"> </image>
|
|
</view>
|
|
</view>
|
|
|
|
<view class="split_line"></view>
|
|
<view class="uni-flex uni-row padding title u-col-center">
|
|
<text>数量: </text>
|
|
<view class="uni-flex uni-row uni-center" style="display: flex; align-items: center; margin-left: 20rpx; justify-content: center">
|
|
<input style="text-align: center" class="qty_input" v-model="counQty" type="number" @confirm="confirm()" :focus="numberFocus" @input="checkNum" :maxlength="maxlength" />
|
|
|
|
<uomCom :uom="uom"></uomCom>
|
|
<view class="" v-if="stdPackInfo != undefined" style="display: flex; flex-direction: row; margin-left: 10rpx"> (<packQty :dataContent="stdPackInfo"></packQty>) </view>
|
|
</view>
|
|
</view>
|
|
<view class="split_line"></view>
|
|
</view>
|
|
</view>
|
|
</view>
|
|
<view class="uni-flex uni-row hide_border">
|
|
<button class="btn_edit_big_cancle" hover-class="btn_edit_big_after" @click="cancel()">取消</button>
|
|
<button class="btn_edit_big_confirm" hover-class="btn_edit_big_after" @click="confirm()">确认</button>
|
|
</view>
|
|
</view>
|
|
</u-popup>
|
|
<win-scan-item ref="scanPopup" title="物料代码" @getScanResult="getItemScanResult" :itemCodeTypeList="itemCodeTypeList"> </win-scan-item>
|
|
<com-message ref="comMessageRef" />
|
|
</view>
|
|
</template>
|
|
|
|
<script setup lang="ts">
|
|
import { ref, getCurrentInstance, nextTick } from 'vue'
|
|
import { getProductionlineItem, getWorkShopLineStation, getWarehouseCodeList } from '@/api/request2.js'
|
|
import { getLocationTypeName, getListLocationTypeDesc, checkDirectoryItemExist } from '@/common/directory.js'
|
|
import uomCom from '@/mycomponents/qty/uom.vue'
|
|
import packQty from '@/mycomponents/qty/packQty.vue'
|
|
import balanceStatus from '@/mycomponents/status/balanceStatus.vue'
|
|
import winScanItem from '@/mycomponents/scan/winScanItem.vue'
|
|
|
|
const { proxy } = getCurrentInstance()
|
|
const props = defineProps({
|
|
title: {
|
|
type: String,
|
|
default: '需求信息'
|
|
},
|
|
itemCodeTypeList: {
|
|
type: Array,
|
|
default: []
|
|
}
|
|
})
|
|
|
|
const workshopCode = ref('') // 车间
|
|
const workShopName = ref('')
|
|
const productionLineCode = ref('') // 生产线
|
|
const productionLineName = ref('')
|
|
const workStationCode = ref('') // 工位
|
|
const workStationName = ref('')
|
|
const itemCode = ref('请扫描物料信息')
|
|
const fromWarehouseCode = ref('请选择仓库代码')
|
|
const itemName = ref('')
|
|
const qty = ref(0)
|
|
const rawLocationCode = ref('')
|
|
const fgLocationCode = ref('')
|
|
const itemCodeFocus = ref(false)
|
|
const requestInfo = ref(null)
|
|
const itemCodeList = ref([])
|
|
const counQty = ref(undefined)
|
|
const editPosition = ref(true)
|
|
const numberFocus = ref(false)
|
|
const uom = ref('')
|
|
const positionInfo = ref('请选择位置')
|
|
const show = ref(false)
|
|
const isModifiedPosition = ref(true)
|
|
const positionList = ref([])
|
|
const stdQty = ref(0) // 标包
|
|
const maxlength = ref(10)
|
|
const stdPackInfo = ref(undefined)
|
|
const wareHouseList = ref([])
|
|
const showWareHouse = ref(false)
|
|
const priorityList = ref([
|
|
{
|
|
value: 0,
|
|
text: '低'
|
|
},
|
|
{
|
|
value: 1,
|
|
text: '中'
|
|
},
|
|
{
|
|
value: 2,
|
|
text: '高'
|
|
}
|
|
])
|
|
const priority = ref(1) // 优先级
|
|
const isShow = ref(false)
|
|
const comMessageRef = ref()
|
|
const scanPopup = ref()
|
|
const checkNum = (e) => {
|
|
const { value } = e.detail
|
|
const dot = value.indexOf('.') // 包含小数点
|
|
const reg = /^[0-9]+$/ // 正整数
|
|
if (dot > -1) {
|
|
maxlength.value = dot + 7 // 长度是小数点后两位
|
|
if (value.length > dot + 7) {
|
|
}
|
|
}
|
|
if (reg.test(value)) {
|
|
// 如果是正整数不包含小数点
|
|
maxlength.value = 10
|
|
}
|
|
change(value)
|
|
}
|
|
const openRequestPopup = (editPositionParams) => {
|
|
if (positionList.value.length == 0) {
|
|
getWorkShopLineStation()
|
|
.then((res) => {
|
|
if (res.data != null && res.data.length > 0) {
|
|
positionList.value = res.data
|
|
} else {
|
|
showErrorMessage('未查找到位置信息')
|
|
}
|
|
})
|
|
.catch((error) => {
|
|
showErrorMessage(error)
|
|
})
|
|
}
|
|
|
|
editPosition.value = editPositionParams
|
|
if (isModifiedPosition.value) {
|
|
isModifiedPosition.value = false
|
|
} else {
|
|
itemCode.value = '请扫描物料信息'
|
|
show.value = false
|
|
showWareHouse.value = false
|
|
uom.value = ''
|
|
qty.value = 0
|
|
stdPackInfo.value = undefined
|
|
counQty.value = undefined
|
|
numberFocus.value = false
|
|
itemCodeGetFocus()
|
|
}
|
|
|
|
setTimeout((res) => {
|
|
isShow.value = true
|
|
}, 500)
|
|
}
|
|
const initData = () => {
|
|
positionList.value = []
|
|
wareHouseList.value = []
|
|
showWareHouse.value = false
|
|
editPosition.value = true
|
|
itemCode.value = '请扫描物料信息'
|
|
rawLocationCode.value = ''
|
|
positionInfo.value = '请选择位置'
|
|
priority.value = ''
|
|
fromWarehouseCode.value = '请选择仓库代码'
|
|
workshopCode.value = '' // 车间
|
|
workShopName.value = ''
|
|
productionLineCode.value = '' // 生产线
|
|
productionLineName.value = ''
|
|
workStationCode.value = '' // 工位
|
|
workStationName.value = ''
|
|
show.value = false
|
|
uom.value = ''
|
|
qty.value = 0
|
|
stdPackInfo.value = undefined
|
|
counQty.value = undefined
|
|
numberFocus.value = false
|
|
}
|
|
|
|
const closeRequestPopup = () => {
|
|
isShow.value = false
|
|
}
|
|
|
|
const locationConfirm = () => {
|
|
// 查询库位信息
|
|
checkLocatioCode()
|
|
}
|
|
const itemCodeClick = () => {
|
|
scanPopup.value.openScanPopup()
|
|
}
|
|
const itemCodeGetFocus = () => {
|
|
itemCodeFocus.value = true
|
|
}
|
|
const itemCodeLoseFocus = () => {
|
|
itemCodeFocus.value = false
|
|
}
|
|
|
|
const confirm = () => {
|
|
if (priority.value === '') {
|
|
showErrorMessage('请输入优先级', 'priority')
|
|
return
|
|
}
|
|
if (positionInfo.value == '请选择位置') {
|
|
showErrorMessage('请选择位置')
|
|
return
|
|
}
|
|
|
|
// if (fromWarehouseCode.value == '请选择仓库代码') {
|
|
// showErrorMessage('请选择仓库代码')
|
|
// return
|
|
// }
|
|
|
|
if (itemCode.value == '请扫描物料信息') {
|
|
showErrorMessage('请输入物料', 'itemCode')
|
|
return
|
|
}
|
|
if (counQty.value == undefined) {
|
|
showErrorMessage('请输入数量')
|
|
return
|
|
}
|
|
|
|
if (qty.value == 0) {
|
|
showErrorMessage('数量必须大于0')
|
|
return
|
|
}
|
|
|
|
if (rawLocationCode.value == '') {
|
|
showErrorMessage(`${workStationName.value}的原材料库位为空`)
|
|
return
|
|
}
|
|
callback('add')
|
|
}
|
|
|
|
const callback = (action) => {
|
|
const item = {
|
|
positionInfo: positionInfo.value,
|
|
workshopCode: workshopCode.value, // 车间
|
|
workShopName: workShopName.value,
|
|
productionLineCode: productionLineCode.value, // 生产线
|
|
productionLineName: productionLineName.value,
|
|
workStationCode: workStationCode.value, // 工位
|
|
workStationName: workStationName.value,
|
|
rawLocationCode: rawLocationCode.value,
|
|
fgLocationCode: fgLocationCode.value,
|
|
fromWarehouseCode: fromWarehouseCode.value,
|
|
toWarehouseCode: fromWarehouseCode.value,
|
|
priority: priority.value,
|
|
itemCode: itemCode.value,
|
|
itemName: itemName.value,
|
|
uom: uom.value,
|
|
qty: qty.value
|
|
}
|
|
console.log(777, item)
|
|
closeRequestPopup()
|
|
emit('confirm', action, item)
|
|
}
|
|
|
|
const showErrorMessage = (message, type) => {
|
|
setTimeout((r) => {
|
|
comMessageRef.value.showErrorMessage(message, (res) => {
|
|
if (type == 'itemCode') {
|
|
itemCodeGetFocus()
|
|
} else {
|
|
numberFocus.value = true
|
|
}
|
|
})
|
|
if (type == 'itemCode') {
|
|
itemCode.value = '请扫描物料信息'
|
|
}
|
|
})
|
|
}
|
|
const change = (value) => {
|
|
qty.value = value
|
|
}
|
|
const cancel = (e) => {
|
|
closeRequestPopup()
|
|
}
|
|
const showSelect = () => {
|
|
if (editPosition.value) {
|
|
show.value = true
|
|
}
|
|
}
|
|
|
|
const showWarseHouseSelect = () => {
|
|
if (editPosition.value) {
|
|
wareHouseClick()
|
|
}
|
|
}
|
|
const confirmSelect = (e) => {
|
|
positionInfo.value = `${e[0].label}-${e[1].label}-${e[2].label}`
|
|
workshopCode.value = e[0].value
|
|
productionLineCode.value = e[1].value
|
|
workStationCode.value = e[2].value
|
|
workShopName.value = e[0].label
|
|
productionLineName.value = e[1].label
|
|
workStationName.value = e[2].label
|
|
|
|
const shop = positionList.value.find((shop) => shop.value == workshopCode.value)
|
|
if (shop != undefined && shop.children != undefined) {
|
|
const prodLine = shop.children.find((line) => line.value == productionLineCode.value)
|
|
if (prodLine != undefined && prodLine.children != undefined) {
|
|
const station = prodLine.children.find((r) => r.value == workStationCode.value)
|
|
if (station.rawLocationCode == '' && station.rawLocationCode == null) {
|
|
showErrorMessage(`${workStationName.value}的原材料库位为空,请重新选择`)
|
|
} else {
|
|
rawLocationCode.value = station.rawLocationCode
|
|
fgLocationCode.value = station.fgLocationCode
|
|
}
|
|
} else {
|
|
showErrorMessage('生产线-工位基础信息维护错误')
|
|
}
|
|
} else {
|
|
showErrorMessage('车间-生产线基础信息维护错误')
|
|
}
|
|
}
|
|
|
|
const getItemScanResult = (code, scanResult) => {
|
|
itemCode.value = code
|
|
itemName.value = scanResult.name
|
|
uom.value = scanResult.uom
|
|
stdPackInfo.value = scanResult.package
|
|
numberFocus.value = true
|
|
}
|
|
const wareHouseClick = () => {
|
|
proxy.$modal.loading('查询中....')
|
|
getWarehouseCodeList(1, 100)
|
|
.then((res) => {
|
|
uni.hideLoading()
|
|
if (res.data != null && res.data.list.length > 0) {
|
|
res.data.list.forEach((item) => {
|
|
item.value = item.code
|
|
item.label = item.name
|
|
})
|
|
wareHouseList.value = res.data.list
|
|
showWareHouse.value = true
|
|
} else {
|
|
showErrorMessage('未查找到仓库代码')
|
|
}
|
|
})
|
|
.catch((error) => {
|
|
uni.hideLoading()
|
|
showErrorMessage(error)
|
|
})
|
|
}
|
|
|
|
const confirmWareHouse = (e) => {
|
|
fromWarehouseCode.value = e[0].value
|
|
}
|
|
|
|
// 传递给父类
|
|
const emit = defineEmits(['confirm'])
|
|
defineExpose({
|
|
openRequestPopup
|
|
})
|
|
</script>
|
|
|
|
<style lang="scss">
|
|
.title {
|
|
font-size: 30rpx;
|
|
}
|
|
</style>
|
|
|