Browse Source

打印接口 2024/7/31 16:58:31

hella_vue3
zhang_li 2 months ago
parent
commit
22760b8409
  1. 15
      src/api/request2.js
  2. 4
      src/mycomponents/item/itemCompareQty.vue
  3. 2
      src/mycomponents/package/PackageAndItemCard.vue
  4. 12
      src/pages.json
  5. 11
      src/pages/fg/coms/comNoReceiptPopup.vue
  6. 438
      src/pages/fg/fgChange.vue
  7. 2
      src/pages/fg/receiptByPlan.vue

15
src/api/request2.js

@ -2710,11 +2710,22 @@ export function getProductionlineAndWorkStation() {
* 打印机列表 * 打印机列表
*/ */
export function getPrintList(params) { export function getPrintList(params) {
return http.post("/wms/print/printerList") return http.get("/wms/print/printerList")
} }
/** /**
* 打印模板列表 * 打印模板列表
*/ */
export function getPrintTemplateList(params) { export function getPrintTemplateList(params) {
return http.post("/wms/print/modelList") return http.get("/wms/print/modelList")
}
//获取物料变更信息
export function getSpareitemcode(params) {
return http.get("/wms/productionitemcode-spareitemcode/getRelation",{params})
}
//获取物料变更信息
export function getProductreceiptDetailbByPackingNumber(packingNumber ) {
return http.get("/wms/productreceipt-detailb/getProductreceiptDetailbByPackingNumber?packingNumber="+packingNumber)
} }

4
src/mycomponents/item/itemCompareQty.vue

@ -1,9 +1,9 @@
<template> <template>
<view class="uni-flex uni-row space-between uni-inline-item" style="background-color: #fff"> <view class="uni-flex uni-row space-between uni-inline-item" style="background-color: #fff">
<view style="flex: 1"> <view>
<item :dataContent="dataContent"></item> <item :dataContent="dataContent"></item>
</view> </view>
<view style="width: 40%; display: flex; justify-content: flex-end; margin-right: 10rpx"> <view style="width: 40%; display: flex; justify-content: flex-end; margin-right: 10rpx; word-break: break-word">
<recommend-qty v-if="handleQty == 0" :dataContent="dataContent" :isShowStatus="false" :isShowStdPack="true"></recommend-qty> <recommend-qty v-if="handleQty == 0" :dataContent="dataContent" :isShowStatus="false" :isShowStdPack="true"></recommend-qty>
<compare-qty v-else :dataContent="dataContent" :recommendQty="Number(dataContent.qty)" :handleQty="Number(handleQty)" :isShowStatus="false" :isShowPackUnit="isShowPackUnit"> </compare-qty> <compare-qty v-else :dataContent="dataContent" :recommendQty="Number(dataContent.qty)" :handleQty="Number(handleQty)" :isShowStatus="false" :isShowPackUnit="isShowPackUnit"> </compare-qty>
</view> </view>

2
src/mycomponents/package/PackageAndItemCard.vue

@ -5,6 +5,7 @@
<item :dataContent="dataContent" style="margin-left: 4px; padding: 0px 5px 5px"></item> <item :dataContent="dataContent" style="margin-left: 4px; padding: 0px 5px 5px"></item>
<pack v-if="dataContent.packingNumber != null" :packingCode="dataContent.packingNumber"></pack> <pack v-if="dataContent.packingNumber != null" :packingCode="dataContent.packingNumber"></pack>
<batch v-if="dataContent.batch != null" :batch="dataContent.batch"></batch> <batch v-if="dataContent.batch != null" :batch="dataContent.batch"></batch>
<location v-if="dataContent.locationCode != null" :locationCode="dataContent.locationCode"></location>
</view> </view>
<view class="uni-flex uni-row" style="word-break: break-all"> <view class="uni-flex uni-row" style="word-break: break-all">
<recommend-qty :dataContent="dataContent" :isShowStdPack="false" :isShowStatus="true" :isShowPackCount="false"></recommend-qty> <recommend-qty :dataContent="dataContent" :isShowStdPack="false" :isShowStatus="true" :isShowPackCount="false"></recommend-qty>
@ -18,6 +19,7 @@ import { ref, getCurrentInstance, onMounted, nextTick, watch } from 'vue'
import item from '@/mycomponents/item/item.vue' import item from '@/mycomponents/item/item.vue'
import pack from '@/mycomponents/balance/pack.vue' import pack from '@/mycomponents/balance/pack.vue'
import batch from '@/mycomponents/balance/batch.vue' import batch from '@/mycomponents/balance/batch.vue'
import location from '@/mycomponents/balance/location.vue'
import recommendQty from '@/mycomponents/qty/recommendQty.vue' import recommendQty from '@/mycomponents/qty/recommendQty.vue'
const props = defineProps({ const props = defineProps({

12
src/pages.json

@ -2238,12 +2238,12 @@
} }
}, },
{ {
"path": "pages/material/materialDowngrade", "path": "pages/fg/fgChange",
"style": { "style": {
"navigationBarTitleText": "物料降级", "navigationBarTitleText": "物料变更",
"enablePullDownRefresh": false "enablePullDownRefresh": false
} }
}, },
{ {
"path": "pages/fg/receiptByPlan", "path": "pages/fg/receiptByPlan",
"style": { "style": {

11
src/pages/fg/coms/comNoReceiptPopup.vue

@ -17,7 +17,7 @@
<view class="customerBorder" @click="showSelectLine"> <view class="customerBorder" @click="showSelectLine">
{{ productionLineName }} {{ productionLineName }}
</view> </view>
<u-select v-model="showProductLineSelect" mode="mutil-column-auto" :list="productLineList" @confirm="confirmSelectLine"></u-select> <u-select v-model="showProductLineSelect" mode="mutil-column-auto" title="请选择生产线和工位" :list="productLineList" @confirm="confirmSelectLine"></u-select>
<view class=""> <view class="">
<image src="/static/icons/down.svg" mode="" style="width: 40rpx; height: 40rpx; margin-left: 20rpx" @click="showSelectLine"> </image> <image src="/static/icons/down.svg" mode="" style="width: 40rpx; height: 40rpx; margin-left: 20rpx" @click="showSelectLine"> </image>
@ -46,10 +46,11 @@
<image src="/static/icons/down.svg" mode="" style="width: 40rpx; height: 40rpx; margin-left: 20rpx" @click="showSelectItemCode"> </image> <image src="/static/icons/down.svg" mode="" style="width: 40rpx; height: 40rpx; margin-left: 20rpx" @click="showSelectItemCode"> </image>
</view> </view>
</view> </view>
<view class="split_line"></view>
<view class="title" style="display: flex; align-items: center; padding: 10rpx"> <view class="title" style="display: flex; align-items: center; padding: 10rpx">
<text style="flex-shrink: 0; width: 25%">数量</text> <text style="flex-shrink: 0; width: 25%">数量</text>
<uni-easyinput v-model="planQty"></uni-easyinput><view v-if="uom">({{ getUomInfo(uom) }})</view> <uni-easyinput v-model="planQty"></uni-easyinput>
<view v-if="uom">({{ getUomInfo(uom) }})</view>
<view class=""> <view class="">
<image src="" mode="" style="width: 40rpx; height: 40rpx; margin-left: 20rpx"> </image> <image src="" mode="" style="width: 40rpx; height: 40rpx; margin-left: 20rpx"> </image>
</view> </view>
@ -315,8 +316,8 @@ export default {
} }
}, },
showSelectItemCode() { showSelectItemCode() {
if (!this.planDate) { if (!this.productionLineCode) {
this.showErrorMessage('请先选择计划日期') this.showErrorMessage('请先选择生产线')
return return
} }
uni.showLoading({ uni.showLoading({

438
src/pages/fg/fgChange.vue

@ -0,0 +1,438 @@
<template>
<view class="page-wraper">
<view class="">
<com-blank-view @goScan="openScanPopup" v-if="currentPackage == null"></com-blank-view>
</view>
<view class="page-wraper" v-if="currentPackage != null">
<view class="page-main">
<uni-collapse>
<uni-collapse-item>
<template v-slot:title>
<view class="card_itemName" style="padding: 3px 5px; font-size: 28rpx"> 变更前包装信息 </view>
</template>
<PackageAndItemCard :dataContent="currentPackage"></PackageAndItemCard>
</uni-collapse-item>
</uni-collapse>
<view>
<scroll-view scroll-y="true" class="">
<view class="" v-for="(item, index) in fgList" :key="index">
<uni-swipe-action>
<uni-swipe-action-item :right-options="options">
<view class="uni-flex uni-row" style="margin-left: 50rpx; padding-top: 10rpx; padding-bottom: 10rpx">
<!-- scan_view -->
<view class="auto-wrap" style="font-size: 35rpx; font-weight: bold; width: 100%">
<text style="font-size: 30rpx; color: #b66463">唯一码 </text>
{{ item.remark }}
</view>
</view>
</uni-swipe-action-item>
</uni-swipe-action>
<u-line color="#D8D8D8"></u-line>
</view>
</scroll-view>
</view>
</view>
<view class="page-footer">
<view class="uni-flex u-col-center space-between padding_10" style="background-color: ghostwhite; width: 100%">
<view class="">
<view class="uni-flex uni-row u-col-center">
<text style="font-size: 28rpx">变更后物料</text>
<view class="uni-flex u-col-center uni-row" @click="showSelect">
<view class="card_itemCode" style="margin-left: 20rpx; color: blue">
{{ toItemCode }}
</view>
<view class="">
<image src="/static/icons/down.svg" mode="" style="width: 40rpx; height: 40rpx; margin-left: 20rpx" @click="showSelect"> </image>
</view>
<u-select v-model="show" mode="single-column" :list="toItemList" @confirm="confirmSelect"></u-select>
</view>
</view>
</view>
<view class="uni-flex uni-row">
<button class="btn_single_commit" hover-class="btn_commit_after" @click="commit">提交</button>
</view>
</view>
</view>
<win-scan-button @goScan="openScanPopup"></win-scan-button>
</view>
<win-com-scan-balance ref="scanPopup" @getBalance="getPackScanResult" :bussinessCode="bussinessCode"> </win-com-scan-balance>
<win-scan-fg-label ref="scanPopup" @getResult="getFgScanResult" title="制品标签"></win-scan-fg-label>
<!-- <win-scan-pack ref="scanPopup" @getResult='getScanResult' title="制品标签" headerType="HMQ"></win-scan-pack> -->
<comMessage ref="comMessage"></comMessage>
</view>
</template>
<script>
import { Decimal } from 'decimal.js' //
import { getSpareitemcode, getProductreceiptDetailbByPackingNumber } from '@/api/request2.js'
import { getPrecisionStrategyList } from '@/common/balance.js'
import { goHome, getPackingNumberAndBatchByList, deepCopyData, getRemoveOption } from '@/common/basic.js'
import { calc } from '@/common/calc.js'
import { getInventoryStatusDesc, getDirectoryItemArray } from '@/common/directory.js'
import { getBusinessType } from '@/common/record.js'
import winScanButton from '@/mycomponents/scan/winScanButton.vue'
import winScanPack from '@/mycomponents/scan/winScanPack.vue'
import comProductRecord from '@/pages/productReceipt/coms/comProductRecord.vue'
import comBlankView from '@/mycomponents/common/comBlankView.vue'
import PackageAndItemCard from '@/mycomponents/package/PackageAndItemCard.vue'
import winComScanBalance from '@/mycomponents/scan/winComScanBalance.vue'
import winScanFgLabel from '@/mycomponents/scan/winScanFgLabel.vue'
export default {
components: {
winScanButton,
winScanPack,
comProductRecord,
comBlankView,
PackageAndItemCard,
winComScanBalance,
winScanFgLabel
},
data() {
return {
detailSource: [], //
toLocationCode: '',
fromLocationTypeList: [],
fromLocationCode: '',
businessType: {},
dataContent: {},
managementList: [],
show: false,
toItemCode: '请选择变更后物料',
toItemList: [],
fgList: [],
options: [],
currentPackage: null,
bussinessCode: 'Relegate'
}
},
mounted() {},
onLoad(option) {
uni.setNavigationBarTitle({
title: option.title
})
this.getBusinessType()
this.options = getRemoveOption()
},
//
onNavigationBarButtonTap(e) {
if (e.index === 0) {
goHome()
}
},
//
onBackPress(e) {},
onPullDownRefresh() {},
mounted() {},
methods: {
getBusinessType() {
getBusinessType(this.bussinessCode, (res) => {
if (res.success) {
this.businessType = res.businessType
this.fromInventoryStatuses = getDirectoryItemArray(res.fromInventoryStatuses)
this.fromLocationAreaTypeList = res.fromLocationAreaTypeList
this.openScanPopup()
} else {
this.showErrorMessage(res.message)
}
})
},
getPackScanResult(result) {
const { label } = result
const pack = result.package
uni.showLoading({
title: '加载中...',
mask: true
})
const params = {
available: 'TRUE',
changeBeforeCode: pack.itemCode,
pageSize: 20,
pageNo: 1
}
getSpareitemcode(params)
.then((res) => {
uni.hideLoading()
if (res.data.list.length == 0) {
this.showErrorMessage('未查找到变更后的物料,请在《量产件备件关系中进行配置》')
} else {
this.closeScanPopup()
res.data.list.forEach((r) => {
r.value = r.code
r.label = `${r.code}(${r.name})`
})
this.toItemList = res.data.list
if (res.data.list.length == 1) {
this.toItemCode = res.data.list[0].code
} else {
this.show = true
}
//
getProductreceiptDetailbByPackingNumber(pack.number)
.then((res) => {
if (res.data.length > 0) {
this.fgList = res.data
const pack = result.package
const { balance } = result
this.currentPackage = result.package
this.currentPackage.packingNumber = pack.number
this.currentPackage.locationCode = balance.locationCode
this.currentPackage.inventoryStatus = balance.inventoryStatus
// this.getDataSource(result);
} else {
this.showErrorMessage(`箱码【${pack.number}】未查找到绑定的灯码信息`)
}
})
.catch((res) => {
this.showErrorMessage(res.message)
})
}
})
.catch((res) => {
this.showErrorMessage(res.message)
})
},
getFgScanResult(result) {
const that = this
const itemIndex = this.allList.findIndex((r) => r.content == result.content)
//
if (itemIndex == -1) {
// if (this.allList.length > this.dataContent.packQty) {
// this.showErrorMessage("")
// return;
// }
result.countTime = new Date()
this.allList.push(result)
this.allList.sort(compare('countTime')) //
this.initList()
this.scanPopupGetFocus()
this.calcFgQty()
} else {
this.$refs.comMessage.showQuestionMessage(`唯一码【${result.content}】已经扫描,是否移除`, (res) => {
if (res) {
this.allList.splice(itemIndex, 1)
this.allList.sort(compare('countTime')) //
this.initList()
that.calcFgQty()
}
})
}
},
openScanPopup() {
setTimeout((r) => {
this.$refs.scanPopup.openScanPopup(this.businessType)
this.scanPopupGetFocus()
})
},
commit() {
if (this.positionInfo == '请选择位置') {
this.showMessage('请先选择位置')
return
}
if (this.detailSource.length > 0 && this.detailSource[0].subList.length > 0) {
//
uni.showLoading({
title: '提交中....',
mask: true
})
this.managementList = []
const precisionStrategParams = this.setPrecisionStrategParams()
getPrecisionStrategyList(precisionStrategParams, (res) => {
if (res.success) {
this.managementList = res.list
const params = this.setParams()
console.log(`提交${JSON.stringify(params)}`)
productionReceiptRecordSubmit(params)
.then((res) => {
uni.hideLoading()
if (res.data) {
this.showCommitSuccessMessage(`提交成功<br>生成制品收货记录<br>${res.data}`)
} else {
this.showErrorMessage(`提交失败[${res.msg}]`)
}
})
.catch((error) => {
uni.hideLoading()
this.showErrorMessage(error)
})
} else {
uni.hideLoading()
this.showErrorMessage(res.message)
}
})
} else {
this.showErrorMessage('没有要提交的数据,请先扫描')
}
},
setPrecisionStrategParams() {
const itemList = []
this.detailSource.forEach((item) => {
item.subList.forEach((detail) => {
if (detail.scaned) {
detail.toLocationCode = this.fgLocationCode
const filterResult = itemList.filter((res) => {
if (res.itemCode == item.itemCode && detail.toLocationCode == res.locationCode) {
return res
}
})
//
if (filterResult.length == 0) {
const result = {
itemCode: item.itemCode,
locationCode: detail.toLocationCode
}
itemList.push(result)
}
}
})
})
return itemList
},
setParams() {
const subList = []
const creator = this.$store.state.user.id
this.detailSource.forEach((item) => {
item.subList.forEach((detail) => {
if (detail.scaned) {
const submitItem = deepCopyData(detail)
const info = getPackingNumberAndBatchByList(this.managementList, detail.itemCode, detail.packingNumber, detail.toLocationCode, detail.batch)
submitItem.itemCode = detail.itemCode
submitItem.itemName = detail.package.itemName
submitItem.itemDesc1 = detail.package.itemDesc1
submitItem.itemDesc2 = detail.package.itemDesc2
submitItem.inventoryStatus = detail.inventoryStatus
submitItem.fromPackingNumber = info.packingNumber
submitItem.toPackingNumber = info.packingNumber
submitItem.fromContainerNumber = detail.containerNumber
submitItem.toContainerNumber = detail.containerNumber
submitItem.fromBatch = info.batch
submitItem.toBatch = info.batch
submitItem.fromLocationCode = detail.locationCode
submitItem.toLocationCode = detail.toLocationCode
submitItem.productionlineCode = this.productionLineCode
submitItem.workStationCode = this.workStationCode
submitItem.qty = detail.handleQty
submitItem.package = ''
subList.push(submitItem)
}
})
})
this.dataContent.subList = subList
this.dataContent.creator = creator
this.dataContent.workshopCode = this.workshopCode
return this.dataContent
},
showMessage(message) {
setTimeout((r) => {
this.scanPopupLoseFocus()
this.$refs.comMessage.showMessage(message, (res) => {
if (res) {
this.scanPopupGetFocus()
}
})
})
},
showErrorMessage(message) {
setTimeout((r) => {
this.scanPopupLoseFocus()
this.$refs.comMessage.showErrorMessage(message, (res) => {
if (res) {
this.scanPopupGetFocus()
}
})
})
},
closeScanPopup() {
this.$refs.scanPopup.closeScanPopup()
},
scanPopupGetFocus() {
if (this.$refs.scanPopup != undefined) {
this.$refs.scanPopup.getfocus()
}
},
scanPopupLoseFocus() {
if (this.$refs.scanPopup != undefined) {
this.$refs.scanPopup.losefocus()
}
},
afterCloseMessage() {
this.scanPopupGetFocus()
},
closeScanMessage() {
this.scanPopupGetFocus()
},
showCommitSuccessMessage(hint) {
this.$refs.comMessage.showSuccessMessage(hint, (res) => {
this.clearData()
})
},
clearData() {
this.subList = []
this.detailSource = []
this.toLocationCode = ''
this.dataContent = {}
this.positionInfo = '请选择位置'
this.fgLocationCode = ''
},
removePack() {
for (let i = 0; i < this.detailSource.length; i++) {
const item = this.detailSource[i]
if (item.subList.length == 0) {
this.detailSource.splice(i, 1)
}
}
this.updateData()
},
removeItem(index, item) {
this.detailSource.splice(index, 1)
},
showSelect() {
this.show = !this.show
},
confirmSelect(e) {
this.toItemCode = e[0].value
}
}
}
</script>
<style scoped lang="scss"></style>

2
src/pages/fg/receiptByPlan.vue

@ -80,7 +80,7 @@
</view> </view>
<comReceiptPopup ref="comReceiptPopupRef" @confirm="requestConfirm"></comReceiptPopup> <comReceiptPopup ref="comReceiptPopupRef" @confirm="requestConfirm"></comReceiptPopup>
<win-scan-button v-if="dataContent" @goScan="openScanPopup"></win-scan-button> <win-scan-button v-if="dataContent" @goScan="openScanPopup"></win-scan-button>
<win-scan-fg-label ref=" " @getResult="getScanResult" title="制品标签"></win-scan-fg-label> <win-scan-fg-label ref=" " @getResult="getScanResult" title="灯码标签"></win-scan-fg-label>
<com-message ref="comMessageRef" /> <com-message ref="comMessageRef" />
</view> </view>
</template> </template>

Loading…
Cancel
Save