You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 
 

437 lines
11 KiB

<template>
<view class="page-wraper">
<view class="page-header">
<view class="header-view">
<view class="header_job_top">
<job-top :dataContent="jobContent"></job-top>
</view>
<view class="cen_card" style="padding: 5rpx;">
<view class="cell_box uni-flex uni-row">
<view class="cell_info">
<view class="text_lightblue">发货类型</view>
<view>{{ jobContent.deliverType }}</view>
</view>
<view class="cell_info">
<view class="text_lightblue">客户代码</view>
<view>{{ jobContent.customerCode }}</view>
</view>
<view class="cell_info">
<view class="text_lightblue">目标库位</view>
<view>{{ toLocationCode }}</view>
</view>
</view>
</view>
</view>
</view>
<view class="page-main">
<scroll-view scroll-y="true" class="page-main-scroll">
<view>
<comDeliverDetailCardBatch ref='comIssueDetailCard' :dataContent="detailSource" :settingParam="jobContent"
@updateData='updateData'>
</comDeliverDetailCardBatch>
</view>
</scroll-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>
<view class=" uni-flex uni-row">
<button class="btn_single_commit" hover-class="btn_commit_after" @click="submit()">提交</button>
</view>
</view>
</view>
<win-scan-button @goScan='openScanDetailPopup'></win-scan-button>
<comScanDeliverPackBatch ref="comScanIssuePack" @closeScan='closeScan' @updateData='updateData'>
</comScanDeliverPackBatch>
<comMessage ref="comMessage"></comMessage>
</view>
</template>
<script setup lang="ts">
import {
getDeliverDetail,
takeDeliverJob,
cancleTakeDeliverJob,
deliverJobSubmit
} from '@/api/request2.js';
import {
calc
} from '@/common/calc.js';
import {
goHome,
navigateBack,
getRemoveOption,
getCurrDateTime,
getPackingNumberAndBatch,
deepCopyData
} from '@/common/basic.js';
import {
getDataSource
} from '@/pages/issue/js/issue.js';
import {
getManagementPrecisions
} from '@/common/balance.js';
import jobDetailPopup from '@/mycomponents/job/jobDetailPopup.vue'
import winScanButton from '@/mycomponents/scan/winScanButton.vue'
import comDeliverDetailCardBatch from '@/pages/deliver/coms/comDeliverDetailCardBatch.vue'
import comScanDeliverPackBatch from '@/pages/deliver/coms/comScanDeliverPackBatch.vue'
import jobTop from '@/mycomponents/job/jobTop.vue'
import {ref} from 'vue';
import {onLoad, onNavigationBarButtonTap, onBackPress} from '@dcloudio/uni-app';
const id = ref('');
const jobContent = ref({});
const subList = ref([]);
const detailSource = ref([]);
const detailOptions = ref([]);
const scanOptions = ref([]);
const status = ref("");
const toLocationCode = ref("");
const jobStatus = ref("");
const dataContent = ref('')
const managementList = ref([]);
const comMessage = ref(null);
const scanPopup = ref(null);
const comScanIssuePack = ref(null);
import {useCountStore} from '@/store'
const store = useCountStore();
onLoad((option) => {
uni.setNavigationBarTitle({
title: option.title + '详情'
});
id.value = option.id;
if (id.value != undefined) {
// 新建的任务自动接收
if (option.status == "1") {
receive(() => {
getDetail();
});
} else {
getDetail();
}
}
});
onNavigationBarButtonTap((e) => {
if (e.index === 0) {
goHome();
}
});
onBackPress((e) => {
// 已经接收但是没提交任务
if (e.from == 'backbutton') {
if (jobStatus.value == "2") {
// 取消承接任务
cancleTakeDeliverJob(id.value).then(() => {
uni.navigateBack();
}).catch(() => {
uni.navigateBack();
});
} else {
uni.navigateBack();
}
return true;
}
});
const receive = (callback) => {
if (id.value != null) {
takeDeliverJob(id.value).then(() => {
callback();
}).catch((error) => {
showErrorMessage(error);
});
}
};
const getDetail = () => {
uni.showLoading({
title: "加载中....",
mask: true
});
getDeliverDetail(id.value).then((res) => {
uni.hideLoading();
if (res.data && res.data.subList.length > 0) {
jobContent.value = res.data;
jobStatus.value = res.data.status;
subList.value = res.data.subList;
detailSource.value = res.data;
toLocationCode.value = subList.value[0].toLocationCode;
resizeCollapse();
} else {
showMessage('未获取到详情');
}
}).catch((error) => {
uni.hideLoading();
showErrorMessage(error);
});
};
const closeScan = () => {
resizeCollapse();
};
const resizeCollapse = () => {
// 实现具体逻辑
};
const submit = () => {
uni.showLoading({
title: "提交中....",
mask: true
});
// 目前任务只到一个库位
const itemCodes = [];
const locationCode = detailSource.value.subList[0].toLocationCode;
detailSource.value.subList.forEach((item) => {
itemCodes.push(item.itemCode);
});
// 获取管理模式,封装参数
getManagementPrecisions(itemCodes, locationCode, (res) => {
if (res.success) {
managementList.value = res.list;
submitJob();
} else {
uni.hideLoading();
showErrorMessage(res.message);
}
});
};
const checkCount = () => {
let str = "";
let taskQty = 0;
let totalQty = 0;
detailSource.value.subList.forEach((item) => {
taskQty = calc.add(taskQty, item.qty);
const handleQty = item.qty ? item.qty : 0;
totalQty = calc.add(totalQty, handleQty);
// 实际扫描的数量
item.totalQty = totalQty;
});
// 如果允许部分提交任务有扫描记录就可以直接提交;如果不允许部分执行,任务数量和提交数量不一致给出提示
if (jobContent.value.allowPartialComplete == "FALSE") {
detailSource.value.subList.forEach((detail) => {
if (taskQty != totalQty) {
str += `物料号【${detail.itemCode}】任务数量【${taskQty}】与实际提交数量【${totalQty}】不一致\n`;
}
});
}
if (str) {
str = '不允许提交\n' + str;
showErrorMessage(str);
}
return str ? false : true;
};
const submitJob = () => {
const params = setParams();
console.log("提交参数", params);
if (params.subList.length == 0) {
uni.hideLoading();
comMessage.value.showConfirmMessageModal('请扫描箱码');
return;
}
if (!checkCount()) {
uni.hideLoading();
return;
}
deliverJobSubmit(params).then((res) => {
uni.hideLoading();
if (res.data) {
showCommitSuccessMessage("提交成功\n生成发货记录\n" + res.data);
} else {
showErrorMessage("提交失败[" + res.msg + "]");
}
}).catch((error) => {
uni.hideLoading();
showErrorMessage(error);
});
};
const setParams = () => {
const subList = [];
const createTime = getCurrDateTime();
const creator = store.id;
detailSource.value.subList.forEach((r) => {
if (r.scaned) {
const subItem = {...r};
subItem.recordList = [];
const record = {};
record.handleQty = r.handleQty;
record.toContainerNumber = r.ContainerNumber;
record.toInventoryStatus = r.inventoryStatus;
record.toLocationCode = subItem.toLocationCode;
record.supplierCode = r.supplierCode;
const info = getPackingNumberAndBatch(managementList.value, r.itemCode, r.packingNumber, r.batch);
record.toPackingNumber = info.packingNumber;
record.packingNumber = info.packingNumber;
record.fromPackingNumber = info.packingNumber;
record.toBatch = info.batch;
subItem.toPackingNumber = info.packingNumber;
subItem.packingNumber = info.packingNumber;
subItem.fromPackingNumber = info.packingNumber;
subItem.recordList.push(record);
subList.push(deepCopyData(subItem));
}
});
jobContent.value.subList = subList;
jobContent.value.createTime = createTime;
jobContent.value.creator = creator;
return jobContent.value;
};
const cancel = () => {
comMessage.value.showQuestionMessage('是否要清空已扫描的物料和目标库位信息?', (res) => {
if (res) {
clearInfo();
}
});
};
const clearInfo = () => {
dataContent.value.itemCodeList.forEach((res) => {
if (res.recommendList != null) {
res.recommendList.forEach((res1) => {
if (res1.locationCodeList != null) {
res1.locationCodeList.forEach((res2) => {
if (res2.packingCodeList != null) {
res2.packingCodeList.forEach((res3) => {
res3.itemCode = "";
res3.qty = 0;
});
}
});
}
});
}
});
};
const updateData = (record) => {
};
const scanPopupGetFocus = () => {
if (scanPopup.value != undefined) {
scanPopup.value.getfocus();
}
};
const showMessage = (message) => {
comMessage.value.showMessage(message, (res) => {
if (res) {
afterCloseMessage();
}
});
};
const showErrorMessage = (message) => {
comMessage.value.showErrorMessage(message, (res) => {
if (res) {
afterCloseMessage();
}
});
};
const showScanMessage = (message) => {
comMessage.value.showScanMessage(message);
};
const showCommitSuccess = () => {
comMessage.value.showCommitSuccess();
};
const showCommitSuccessMessage = (hint) => {
comMessage.value.showSuccessMessage(hint, (res) => {
navigateBack(1);
});
};
const showRescanMessage = (message) => {
comMessage.value.showRescanMessage(message);
};
const afterCloseMessage = () => {
scanPopupGetFocus();
};
const closeScanMessage = () => {
scanPopupGetFocus();
};
const confirm = (data) => {
dataContent.value = data;
};
const confirmResult = (result) => {
dataContent.value = result;
};
const openScanDetailPopup = () => {
const datacontent = {...detailSource.value}; // 深度克隆
comScanIssuePack.value.openScanPopup(datacontent, jobContent.value);
};
const closeScanPopup = () => {
// updateCommitBtn();
};
</script>
<style scoped lang="scss">
.uni-numbox__value {
width: 40px;
}
button[disabled] {
background-color: #3C9CFF;
color: #fff;
opacity: 0.7;
}
// /deep/ .input-value {
// font-size: 16px;
// }
// /deep/ .uni-collapse-item__title-text {
// font-size: 16px;
// }
// /deep/ .uni-collapse-item--border {
// border-bottom-width: 0px;
// border-bottom-color: #ebeef5;
// }
// /deep/ .uni-collapse-item--border {
// border-bottom-width: 1px;
// border-bottom-color: #ebeef5;
// }
</style>