Browse Source

盘点+其他功能

dev
常熟吴彦祖 2 weeks ago
parent
commit
26142adbeb
  1. 4
      src/api/haianAutoWarehouse/callOut.js
  2. 12
      src/views/modules/haianAutoWarehouse/haianCallOut.vue
  3. 6
      src/views/modules/haianAutoWarehouse/haianCallOutForHetuo.vue
  4. 2
      src/views/modules/haianAutoWarehouse/haianEmptyPalletAssembly.vue
  5. 2
      src/views/modules/haianAutoWarehouse/haianPalletAssembly.vue
  6. 15
      src/views/modules/haianAutoWarehouse/haianPalletSearch.vue
  7. 65
      src/views/modules/haianAutoWarehouse/haianPalletSorting.vue

4
src/api/haianAutoWarehouse/callOut.js

@ -6,8 +6,8 @@ export const getPalletList = data => createAPI(`/haiAnWcsIntegration/palletListF
// 海安-旧页面兼容占位:当前页面未实际使用IFS查料接口 - rqrq
export const getShopOrderFromIFSWithOrderNo = data => createAPI(`/haiAnWcsIntegration/palletListForPartNo`, 'post', data)
// 海安-立库特殊操作/Call料:固定目标区域“出库口”的下达接口 - rqrq
// 海安-立库特殊操作/Call料:固定下达到整托出库口 - rqrq
export const callOutToOutboundPort = data => createAPI(`/haiAnWcsIntegration/callOutToOutboundPort`, 'post', data)
// 海安-立库特殊操作/合托Call板:扫描托盘后直接下达(目的地固定入库口)- rqrq
// 海安-立库特殊操作/合托Call板:扫描托盘后直接下达(目的地固定整托出库口,与 Call料同一出口)- rqrq
export const scanAndCallPalletForHetuo = data => createAPI(`/haiAnWcsIntegration/scanAndCallPalletForHetuo`, 'post', data)

12
src/views/modules/haianAutoWarehouse/haianCallOut.vue

@ -43,9 +43,9 @@
/>
</div>
<!-- 固定出库口提示此页面下达目标区域固定不允许页面改写 - rqrq -->
<!-- 固定整托出库口提示此页面下达目标固定不允许页面改写 - rqrq -->
<div class="input-group">
<label class="input-label">默认目标区域</label>
<label class="input-label">固定目标</label>
<el-input
:value="fixedTargetArea"
class="form-input"
@ -114,8 +114,8 @@ export default {
name: 'haianCallOut',
data() {
return {
// - rqrq
fixedTargetArea: '出库口',
// - rqrq
fixedTargetArea: '整托出库口',
formData: {
palletId: '',
partNo: '',
@ -218,13 +218,13 @@ export default {
isSelected(pallet) {
return this.selectedPallet && this.selectedPallet.palletId === pallet.palletId
},
// 沿 - rqrq
// 沿 - rqrq
handleDispatch() {
if (!this.selectedPallet) {
this.$alert('请选择一个栈板', '提示', { confirmButtonText: '确定' })
return
}
this.$confirm('确定下达Call料任务到出库口?', '提示', {
this.$confirm('确定下达Call料任务到整托出库口?', '提示', {
confirmButtonText: '确认',
cancelButtonText: '取消',
type: 'warning'

6
src/views/modules/haianAutoWarehouse/haianCallOutForHetuo.vue

@ -25,10 +25,10 @@
/>
</div>
<!-- 目标固定提醒合托Call板统一下达到入库口 - rqrq -->
<!-- 目标固定提醒合托Call板 Call料都下达到整托出库口 - rqrq -->
<div class="input-group">
<label class="input-label">固定目标</label>
<el-input value="库口" class="form-input" readonly />
<el-input value="整托出库口" class="form-input" readonly />
</div>
<div v-if="scanLoading" class="status-tip loading">
@ -121,7 +121,7 @@ export default {
now.getMinutes().toString().padStart(2, '0') + ':' +
now.getSeconds().toString().padStart(2, '0')
},
// - rqrq
// - rqrq
handleScanAndCall() {
const palletId = this.formData.palletId ? this.formData.palletId.trim() : ''
if (!this.formData.site) {

2
src/views/modules/haianAutoWarehouse/haianEmptyPalletAssembly.vue

@ -148,7 +148,7 @@ export default {
currentPalletType: '',
palletTypeOptions: [],
count: 1,
// - rqrq
// 1/2 - rqrq
inboundPortDialogVisible: false,
selectedInboundPort: '',
inboundPortOptions: [

2
src/views/modules/haianAutoWarehouse/haianPalletAssembly.vue

@ -305,7 +305,7 @@
</div>
</el-dialog>
<!-- 直接组盘推送弹窗必须选择入库口1/入库口2 - rqrq -->
<!-- 直接组盘推送弹窗必须选择入库口1/入库口2待确认站点实际编码当前仍用旧值 - rqrq -->
<el-dialog
title="请选择入库口"
:visible.sync="pushAssemblyDialogVisible"

15
src/views/modules/haianAutoWarehouse/haianPalletSearch.vue

@ -171,14 +171,14 @@
<button
class="action-btn danger"
@click="handleBatchCancelReserve"
:disabled="cancelReserveLoading || reservedLabels.length === 0 || locationCode === '1101'"
:disabled="cancelReserveLoading || reservedLabels.length === 0 || errorStationFlag"
v-if="reservedLabels.length > 0"
>
{{ cancelReserveLoading ? '取消中...' : '一键取消预留' }}
</button>
</div>
<!-- 库位1101提示 - rqrq -->
<div v-if="locationCode === '1101'" class="reserve-warning">
<!-- 异常位提示以后端 errorStationFlag 为准不再写死 1101 - rqrq -->
<div v-if="errorStationFlag" class="reserve-warning">
<i class="el-icon-warning"></i> 栈板在立库异常位上不允许取消预留
</div>
</el-dialog>
@ -211,6 +211,8 @@ export default {
// - rqrq
locationCode: '',
// ERROR_STATIONS 1101 - rqrq
errorStationFlag: false,
// - rqrq
reserveModalVisible: false,
@ -356,21 +358,24 @@ export default {
this.reservedLabels = data.data.reservedLabels || [];
this.reserveCount = data.data.reserveCount || 0;
this.locationCode = data.data.locationCode || '';
this.errorStationFlag = data.data.errorStationFlag === true;
} else {
this.reservedLabels = [];
this.reserveCount = 0;
this.errorStationFlag = false;
}
}).catch(error => {
console.error('获取预留标签列表失败:', error);
this.reservedLabels = [];
this.reserveCount = 0;
this.errorStationFlag = false;
});
},
// - rqrq
handleBatchCancelReserve() {
if (this.locationCode === '1101') {
this.$alert('栈板在库位1101上,不允许取消预留', '错误', { confirmButtonText: '确定' });
if (this.errorStationFlag) {
this.$alert('栈板在异常位上,不允许取消预留', '错误', { confirmButtonText: '确定' });
return;
}

65
src/views/modules/haianAutoWarehouse/haianPalletSorting.vue

@ -18,7 +18,7 @@
v-model="palletCode"
placeholder="请扫描栈板编码"
class="form-input"
style="flex: 0.75;"
:style="{ flex: sortedSourceFlag ? '1' : '0.75' }"
clearable
inputmode="none"
autocomplete="off"
@ -27,7 +27,7 @@
@keyup.enter.native="handlePalletScan"
ref="palletInput"
/>
<button class="action-btn secondary" style="flex: 0.25; margin: 0;" @click="submitFinishSorting" :disabled="interfaceBusy || finishSortingLoading || detailList.length === 0">
<button class="action-btn secondary" style="flex: 0.25; margin: 0;" @click="submitFinishSorting" v-if="!sortedSourceFlag" :disabled="interfaceBusy || finishSortingLoading || detailList.length === 0">
{{ finishSortingLoading ? '处理中...' : '结束分拣' }}
</button>
</div>
@ -101,6 +101,10 @@
刷新
</button>
</div>
<!-- 被分拣源盘提示站点命中 R1-R4 后按放回标签处理 - rqrq -->
<div v-if="sortedSourceFlag" style="margin-top: 6px; color: #e6a23c; font-size: 12px;">
当前为被分拣站点扫进=放回标签提交=通知回库
</div>
</div>
<!-- 第四行扫进/扫回 + 扫描按钮保持与原PDA页面一致 - rqrq -->
@ -108,8 +112,8 @@
<div style="display: flex; gap: 8px; align-items: center;">
<div style="flex: 0.75;">
<el-radio-group v-model="operationType" style="display: flex;">
<el-radio label="in" style="margin-right: 0px; white-space: nowrap;">扫进</el-radio>
<el-radio label="out" style="white-space: nowrap;">扫回</el-radio>
<el-radio label="in" style="margin-right: 0px; white-space: nowrap;">{{ sortedSourceFlag ? '放回' : '扫进' }}</el-radio>
<el-radio label="out" style="white-space: nowrap;">{{ sortedSourceFlag ? '解绑' : '扫回' }}</el-radio>
</el-radio-group>
</div>
<button
@ -134,7 +138,7 @@
<label style="margin-left: 5px;">条码数:{{ detailList.length }}</label>
</div>
<button class="action-btn primary" style="flex: 0.25; margin: 0;" @click="submitSorting" :disabled="interfaceBusy || submitSortingLoading">
{{ submitSortingLoading ? '处理中...' : '提交分拣' }}
{{ submitSortingLoading ? '处理中...' : (sortedSourceFlag ? '通知回库' : '提交分拣') }}
</button>
</div>
<div class="detail-table">
@ -277,6 +281,7 @@ import {
getPalletDetails,
savePalletDetail,
restorePalletDetail,
deletePalletDetail,
getLabelInfo,
getPalletInfo,
getPalletTypeList,
@ -299,6 +304,8 @@ export default {
currentPalletType: '',
currentAutoSort: 'N',
currentPalletStation: '',
// location_code R1-R4 - rqrq
sortedSourceFlag: false,
forceFullPalletOut: false,
palletTypeDisabled: false,
autoSortDisabled: false,
@ -397,6 +404,7 @@ export default {
this.currentPalletType = ''
this.currentAutoSort = 'N'
this.currentPalletStation = ''
this.sortedSourceFlag = false
this.forceFullPalletOut = false
this.palletTypeDisabled = false
this.autoSortDisabled = false
@ -451,6 +459,7 @@ export default {
this.palletCode = data.palletId
this.positionOptions = data.positions || []
this.palletScanned = true
this.sortedSourceFlag = data.sortedSourceFlag === true
this.scanCode = ''
this.scanPosition = ''
this.scanLayer = 1
@ -715,7 +724,7 @@ export default {
throw new Error((data && data.msg) || '获取分拣清单失败')
})
},
// - rqrq
// == - rqrq
handleLabelScan() {
if (!this.ensureSite()) {
return
@ -743,14 +752,18 @@ export default {
return
}
this.scanRequestLoading = true
this.loadSortingListIfNeeded()
.then((list) => {
const scanInPromise = this.sortedSourceFlag
? Promise.resolve()
: this.loadSortingListIfNeeded().then((list) => {
if (list.length === 0) {
throw new Error('当前不存在分拣任务')
}
if (!list.includes(this.scanCode)) {
throw new Error('该标签不在分拣清单中')
}
})
scanInPromise
.then(() => {
return getLabelInfo({
site: this.site,
serialNo: this.scanCode
@ -765,7 +778,7 @@ export default {
sortFlag: 1
}).then(({ data: saveData }) => {
if (saveData && saveData.code === 0) {
if (original) {
if (!this.sortedSourceFlag && original) {
this.originalDetailCache[this.scanCode] = {
palletId: original.palletId || '',
position: original.position || '',
@ -777,25 +790,50 @@ export default {
wcsFlag: original.wcsFlag === null || original.wcsFlag === undefined ? 0 : original.wcsFlag
}
}
this.$message.success('分拣扫进成功')
this.$message.success(this.sortedSourceFlag ? '放回标签成功' : '分拣扫进成功')
this.needRefreshOnClose = true
this.scanCode = ''
this.loadLayerOptions()
this.moveFocusToScanInput()
return
}
throw new Error((saveData && saveData.msg) || '分拣扫进失败')
throw new Error((saveData && saveData.msg) || (this.sortedSourceFlag ? '放回标签失败' : '分拣扫进失败'))
})
})
})
.catch((error) => {
this.$alert(error.message || '分拣扫进失败', '错误', { confirmButtonText: '确定' })
this.$alert(error.message || (this.sortedSourceFlag ? '放回标签失败' : '分拣扫进失败'), '错误', { confirmButtonText: '确定' })
this.scanCode = ''
this.moveFocusToScanInput()
})
.finally(() => {
this.scanRequestLoading = false
})
} else if (this.sortedSourceFlag) {
// = restore - rqrq
this.scanRequestLoading = true
deletePalletDetail({
site: this.site,
palletId: this.palletCode,
serialNo: this.scanCode
}).then(({ data }) => {
if (data && data.code === 0) {
this.$message.success('解绑标签成功')
this.needRefreshOnClose = true
this.scanCode = ''
this.moveFocusToScanInput()
} else {
this.scanCode = ''
this.$alert((data && data.msg) || '解绑标签失败', '错误', { confirmButtonText: '确定' })
this.moveFocusToScanInput()
}
}).catch((error) => {
this.scanCode = ''
this.$alert(error.message || '解绑标签失败', '错误', { confirmButtonText: '确定' })
this.moveFocusToScanInput()
}).finally(() => {
this.scanRequestLoading = false
})
} else {
const original = this.originalDetailCache[this.scanCode]
if (!original) {
@ -855,7 +893,8 @@ export default {
}).then(({ data }) => {
if (data && data.code === 0) {
this.sortingList = []
this.$message.success('分拣提交成功')
const resultRow = data.row || {}
this.$message.success(resultRow.message || (this.sortedSourceFlag ? '已通知托盘回库' : '分拣提交成功'))
} else {
this.$alert((data && data.msg) || '分拣提交失败', '错误', { confirmButtonText: '确定' })
}

Loading…
Cancel
Save