From bb3a75636a921e502b1248cd24d3f5e9e682abcc Mon Sep 17 00:00:00 2001 From: qb <1191961160@qq.com> Date: Thu, 11 Jan 2024 23:57:52 +0800 Subject: [PATCH] =?UTF-8?q?=E8=87=AA=E6=8F=90=E7=AD=BE=E6=94=B6=E9=A1=B5?= =?UTF-8?q?=E9=9D=A2=E4=BC=98=E5=8C=96?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/api/distribution/truckLoadingDetails.js | 11 + src/option/distribution/TripartiteTransfer.js | 44 +- .../artery/TripartiteTransfer.vue | 11 +- .../artery/VehicleArrivalManagement.vue | 166 +++--- .../distribution/artery/VehicleStowage.vue | 1 + .../artery/truckLoadingDetails.vue | 491 ++++++++++++++---- .../distributionStockArticleDetails.vue | 9 - .../inventory/distrilbutionBillLadingList.vue | 29 +- .../inventory/distrilbutionBillLadingView.vue | 354 +++++++++---- 9 files changed, 805 insertions(+), 311 deletions(-) diff --git a/src/api/distribution/truckLoadingDetails.js b/src/api/distribution/truckLoadingDetails.js index 3b65ded5..19d69738 100644 --- a/src/api/distribution/truckLoadingDetails.js +++ b/src/api/distribution/truckLoadingDetails.js @@ -10,3 +10,14 @@ export const postLoadingDetail = (data = {}) => { data, }); }; + +/** + * 批量卸车 + */ +export const postBatchUnload = (data = {}) => { + return request({ + url: '/api/logpm-trunkline/carsLoad/batchUnload', + method: 'post', + data, + }); +}; diff --git a/src/option/distribution/TripartiteTransfer.js b/src/option/distribution/TripartiteTransfer.js index 5bc89b94..2614b8ce 100644 --- a/src/option/distribution/TripartiteTransfer.js +++ b/src/option/distribution/TripartiteTransfer.js @@ -311,7 +311,7 @@ export const detailsColumnList = [ { prop: 'scanStatusName', label: '装卸状态', - type: 1, + type: 3, values: '', width: '130', checkarr: [], @@ -401,6 +401,16 @@ export const detailsColumnList = [ { prop: 'typeName', label: '类型', + type: 3, + values: '', + width: '130', + checkarr: [], + fixed: false, + sortable: true, + }, + { + prop: 'num', + label: '数量', type: 1, values: '', width: '130', @@ -411,7 +421,7 @@ export const detailsColumnList = [ { prop: 'isDataName', label: '有无数据', - type: 1, + type: 3, values: '', width: '130', checkarr: [], @@ -419,9 +429,9 @@ export const detailsColumnList = [ sortable: true, }, { - prop: 'isAbnormalName', - label: '是否异常', - type: 1, + prop: 'loadingAbnormalName', + label: '是否装车异常', + type: 3, values: '', width: '130', checkarr: [], @@ -429,9 +439,19 @@ export const detailsColumnList = [ sortable: true, }, { - prop: 'chargeType', + prop: 'unloadAbnormalName', + label: '是否卸车异常', + type: 3, + values: '', + width: '130', + checkarr: [], + fixed: false, + sortable: true, + }, + { + prop: 'isSuppleName', label: '是否补录', - type: 1, + type: 3, values: '', width: '130', checkarr: [], @@ -518,6 +538,16 @@ export const detailsColumnList = [ // fixed: false, // sortable: true, // }, + { + prop: '', + label: '操作', + type: 6, + values: '', + width: '200', + checkarr: [], + fixed: true, + sortable: true, + }, ]; /** 运单池列表 */ diff --git a/src/views/distribution/artery/TripartiteTransfer.vue b/src/views/distribution/artery/TripartiteTransfer.vue index 07ee6e84..7dd55d7c 100644 --- a/src/views/distribution/artery/TripartiteTransfer.vue +++ b/src/views/distribution/artery/TripartiteTransfer.vue @@ -679,7 +679,16 @@ const beforeClose = done => { }; /** 显示装车详情 */ -const handleShowTruckLoadingDetails = ({ row }) => {}; +const handleShowTruckLoadingDetails = ({ row }) => { + $router.push({ + path: '/distribution/artery/truckLoadingDetails', + query: { + loadId: row.id, + name: row.carsNo + '--' + '装车明细', + type: 'TripartiteTransfer' + }, + }); +}; /** 跳转零担补录 */ const handleShowzeroAdditionalRecording = ({ row }) => { diff --git a/src/views/distribution/artery/VehicleArrivalManagement.vue b/src/views/distribution/artery/VehicleArrivalManagement.vue index 57a1dd9d..19937d71 100644 --- a/src/views/distribution/artery/VehicleArrivalManagement.vue +++ b/src/views/distribution/artery/VehicleArrivalManagement.vue @@ -124,92 +124,91 @@ - - - - - - {{ - slotProps.scope.row.carsNo - }} - - - - - - - - 网点: - {{ item.nodeName }} - - - 运单总件数: - {{ item.nodeName }} - - - 实际装车件数: - {{ item.nodeName }} - - - 操作人: - {{ item.nodeName }} - - - 状态: - {{ item.nodeName }} - - - {{ item.nodeName }} - - + + + + {{ + slotProps.scope.row.carsNo + }} + + + + + + + + 网点: + {{ item.nodeName }} + + + 运单总件数: + {{ item.nodeName }} + + + 实际装车件数: + {{ item.nodeName }} + + + 操作人: + {{ item.nodeName }} + + + 状态: + {{ item.nodeName }} + + + {{ item.nodeName }} + + - - - - - - {{ slotProps.scope.row.loadStatusName }} - - - - 装车明细 - 编辑 - + + - - + + + {{ slotProps.scope.row.loadStatusName }} + + + + 装车明细 + 编辑 + + + @@ -652,6 +651,7 @@ const handleShowTruckLoadingDetails = ({ row }) => { query: { loadId: row.id, name: row.carsNo + '--' + '装车明细', + type: 'VehicleStowage', }, }); diff --git a/src/views/distribution/artery/VehicleStowage.vue b/src/views/distribution/artery/VehicleStowage.vue index d93f2c43..ce7c8fe0 100644 --- a/src/views/distribution/artery/VehicleStowage.vue +++ b/src/views/distribution/artery/VehicleStowage.vue @@ -755,6 +755,7 @@ const handleShowTruckLoadingDetails = ({ row }) => { query: { loadId: row.id, name: row.carsNo + '--' + '装车明细', + type: 'VehicleStowage', }, }); diff --git a/src/views/distribution/artery/truckLoadingDetails.vue b/src/views/distribution/artery/truckLoadingDetails.vue index 08001105..bcafc11c 100644 --- a/src/views/distribution/artery/truckLoadingDetails.vue +++ b/src/views/distribution/artery/truckLoadingDetails.vue @@ -1,6 +1,6 @@ - + @@ -44,10 +44,27 @@ - 计划仓更改 - - 批量卸车 + + + 计划仓更改 + + 批量卸车 + + + + + + 中转批量签收 + + 删除 + + + + + 批量卸车 + + 删除 二维码 @@ -61,21 +78,37 @@ - - - - - - + + + + + + 零担卸车 + + + 包件卸车 + + + @@ -99,6 +132,32 @@ + + + + + + + + + 取 消 + 提 交 + + + ({ loadingObj: { /** 列表加载loading */ list: false, + /** 页面loading */ + pageLoading: false, }, /** 列表复选框选中的数据 */ selectionList: [], @@ -186,9 +250,50 @@ const details = reactive({ /** 列表Dom节点 */ listNode: '', form: {}, + /** 页面数据 */ pageInfo: { + /** 配送ID */ loadId: '', + /** 页面类型 + * TripartiteTransfer -- 三方中转 + * VehicleStowage -- 车辆配载 + * */ + type: '', }, + /** 被选中的零担数据 */ + zeroItem: {}, + // 字典 + /** 装卸状态 */ + scanStatusOption: [ + { label: '装车', value: 1 }, + { label: '卸车', value: 2 }, + { label: '签收', value: 3 }, + ], + /** 有无数据 */ + isDataOption: [ + { label: '是', value: 1 }, + { label: '否', value: 0 }, + ], + /** 类型 */ + typeOption: [ + { label: '包件', value: 1 }, + { label: '零担', value: 2 }, + ], + /** 是否装车异常 */ + loadingAbnormalOption: [ + { label: '是', value: 1 }, + { label: '否', value: 0 }, + ], + /** 是否卸车异常 */ + unloadAbnormalOption: [ + { label: '是', value: 1 }, + { label: '否', value: 0 }, + ], + /** 是否补录 */ + isSuppleOption: [ + { label: '是', value: 1 }, + { label: '否', value: 0 }, + ], }); const { @@ -212,14 +317,17 @@ const $route = useRoute(); const permission = computed(() => mapGetters(['permission', 'tagWel', 'tagList'])); console.log('permission :>> ', permission); -onMounted(() => { - const timer = setTimeout(() => { - details.listNode = document.querySelector('.maboxhi'); - details.listNode.style.transition = 'all .5s ease-out'; - console.log('details.listNode :>> ', details.listNode); - clearTimeout(timer); - }, 100); +/** 初始化表格表头 */ +const initTableSelect = () => { + for (const iterator of details.detailsColumnList) { + console.log('iterator :>> ', iterator); + iterator.checkarr = details[iterator.prop.replace('Name', '') + 'Option'] || []; + } +}; +initTableSelect(); + +onMounted(() => { /** * 初始化获取本地缓存的编辑隐藏的列表 * 固定搭配,不能更改 @@ -293,6 +401,12 @@ onMounted(() => { } }); +/** 转译数据 */ +const initData = (data, row) => { + const _item = details[data + 'Option'].find(val => val.value == Number(row[data])); + row[data + 'Name'] = _item ? _item.label : '暂无数据'; +}; + /** 请求页面数据 */ const onLoad = async (params = {}) => { try { @@ -306,6 +420,16 @@ const onLoad = async (params = {}) => { const { code, data } = res.data; if (code !== 200) return; details.data = data.records; + + for (const iterator of details.data) { + initData('scanStatus', iterator); + initData('type', iterator); + initData('isData', iterator); + initData('loadingAbnormal', iterator); + initData('unloadAbnormal', iterator); + initData('isSupple', iterator); + } + details.page.total = data.total; } catch (error) { console.log('error :>> ', error); @@ -314,9 +438,6 @@ const onLoad = async (params = {}) => { } }; -details.pageInfo.loadId = $route.query.loadId; -onLoad(); - /** 搜索 */ const searchChange = () => { onLoad(details.page); @@ -405,44 +526,6 @@ const selectionChange = (list: any) => { details.selectionList = list; }; -/** 表格表头输入框搜索 */ -const newInputsc = (index, row) => { - details.newQuery[row.prop] = index; - onLoad(details.page); -}; - -/** 表格表头时间选择 */ -const newTimesc = (index, row) => { - console.log(index, row); - if (!!index) { - index = dayjs(index).format('YYYY-MM-DD'); - } - details.newQuery[row.prop] = index; - if (!index) { - delete details.newQuery[row.prop]; - } - onLoad(details.page); -}; - -/** 表格表头输入框搜索 */ -const newBtnsc = () => {}; - -/** 表格表头下拉框选择 */ -const newSelectsc = (index, row) => { - details.newQuery[row.prop] = index; - if (!index) delete details.newQuery[row.prop]; - if (row.prop === 'certificateTypeName') { - details.newQuery['certificateType'] = index; - if (!index) delete details.newQuery['certificateType']; - } - onLoad(details.page); -}; - -/** 表格表头复选框选择 */ -const newSelectionChange = (list: any) => { - details.newSelectionList = list; -}; - /** 每页数量改变执行的回调 */ const sizeChange = (pageSize: number) => { details.page.pageSize = pageSize; @@ -477,24 +560,6 @@ const beforeClose = done => { details.view = false; }; -/** 显示装车详情 */ -const handleShowTruckLoadingDetails = ({ row }) => { - details.popUpShow.truckLoadingDetailVisited = true; - - nextTick(() => { - // 获取弹窗内表格元素节点, 并设置高度 - const _node = document.querySelector('.truckLoadingDetailPopUp .maboxhi'); - _node.style.height = '550px'; - console.log('_node :>> ', _node); - }); -}; - -/** 跳转零担补录 */ -const handleShowzeroAdditionalRecording = ({ row }) => { - // 跳转到零担补录页面 - $router.push('/distribution/artery/zeroAdditionalRecording'); -}; - /** 新增中转 */ const addTransfer = async () => { return null; @@ -530,13 +595,251 @@ const handleShowTransfer = async (_type: string) => { }); }; -watch($route, (newVal, oldVal) => { - console.log('newVal :>> ', newVal); - console.log('oldVal :>> ', oldVal); - if (newVal.path !== '/distribution/artery/truckLoadingDetails') return; - details.pageInfo.loadId = $route.query.loadId; - onLoad(); -}); +/** 批量卸车 */ +const handleBatchUnLoad = async () => { + try { + details.loadingObj.pageLoading = true; + + if (details.selectionList.length === 0) return ElMessage.warning('请选择需要卸车的数据'); + + const myWarehouseData = await getMyCurrentWarehouse(); + + if (!myWarehouseData) return ElMessage.warning('请先选择一个仓库'); + + // 当前登录人的仓库Id + const myWarehouseId = myWarehouseData.warehouseId; + + // 包件列表 + const _orderArr = []; + // 零担列表 + const _zeroArr = []; + + // 是否含有异常 + let isHaveAbnormalData = false; + + for (const iterator of details.selectionList) { + if (Number(iterator.scanStatus) === 1) { + // 包件 + if (Number(iterator.type) === 1) { + _orderArr.push({ orderPackageCode: iterator.scanCode }); + } else { + _zeroArr.push({ + waybillNo: iterator.waybillNo, + enterNum: iterator.num, + orderCode: iterator.orderCode, + }); + } + + // 不重复判断是否有异常 + if (!isHaveAbnormalData) { + isHaveAbnormalData = iterator.warehouseId === myWarehouseId; + } + } + } + + if ([..._zeroArr, ..._orderArr].length === 0) return ElMessage.warning('没有符合要求的数据'); + + // 判断是否含有异常 + if (isHaveAbnormalData) { + const submitData = { + loadId: details.pageInfo.loadId, + unloadPackageList: _orderArr, + unloadZeroList: _zeroArr, + }; + + const res = await postBatchUnload(submitData); + const { code } = res.data; + + if (code !== 200) return; + ElMessage.success('卸车成功'); + onLoad(); + return; + } + + ElMessageBox.confirm('包含已卸车数据或计划不在本节点卸车的数据', '异常提交', { + confirmButtonText: '提交包含不在本节点数据', + cancelButtonText: '仅提交装车数据', + type: 'warning', + center: true, + distinguishCancelAndClose: true, + }) + // 异常提交 + .then(async () => { + try { + details.loadingObj.pageLoading = true; + + const submitData = { + loadId: details.pageInfo.loadId, + unloadPackageList: _orderArr, + unloadZeroList: _zeroArr, + }; + + const res = await postBatchUnload(submitData); + const { code } = res.data; + + if (code !== 200) return; + ElMessage.success('卸车成功'); + onLoad(); + } catch (error) { + console.log('error :>> ', error); + } finally { + details.loadingObj.pageLoading = false; + } + }) + // 仅去除已装车和已签收数据 + .catch(async (action: Action) => { + if (action !== 'cancel') return; + + try { + details.loadingObj.pageLoading = true; + + const submitData = { + loadId: details.pageInfo.loadId, + unloadPackageList: _orderArr.filter(val => val.warehouseId === myWarehouseId), + unloadZeroList: _zeroArr.filter(val => val.warehouseId === myWarehouseId), + }; + + const res = await postBatchUnload(submitData); + const { code } = res.data; + + if (code !== 200) return; + ElMessage.success('卸车成功'); + onLoad(); + } catch (error) { + console.log('error :>> ', error); + } finally { + details.loadingObj.pageLoading = false; + } + }); + } catch (error) { + console.log('error :>> ', error); + } finally { + details.loadingObj.pageLoading = false; + } +}; + +/** 卸车 -- 订单 */ +const handleOrderUnLoad = async ({ row }) => { + try { + details.loadingObj.pageLoading = true; + + const myWarehouseData = await getMyCurrentWarehouse(); + if (!myWarehouseData) return ElMessage.warning('请先选择一个仓库'); + + // 当前登录人的仓库Id + const myWarehouseId = myWarehouseData.warehouseId; + + if (row.warehouseId !== myWarehouseId) + return ( + ElMessageBox.confirm('包含已卸车数据或计划不在本节点卸车的数据', '异常提交', { + confirmButtonText: '提交包含不在本节点数据', + cancelButtonText: '取消', + type: 'warning', + center: true, + }) + // 异常提交 + .then(async () => { + try { + details.loadingObj.pageLoading = true; + + const submitData = { + loadId: details.pageInfo.loadId, + unloadPackageList: [{ orderPackageCode: row.scanCode }], + unloadZeroList: [], + }; + + const res = await postBatchUnload(submitData); + const { code } = res.data; + + if (code !== 200) return; + ElMessage.success('卸车成功'); + onLoad(); + } catch (error) { + console.log('error :>> ', error); + } finally { + details.loadingObj.pageLoading = false; + } + }) + ); + + const submitData = { + loadId: details.pageInfo.loadId, + unloadPackageList: [{ orderPackageCode: row.scanCode }], + unloadZeroList: [], + }; + + const res = await postBatchUnload(submitData); + const { code } = res.data; + + if (code !== 200) return; + ElMessage.success('卸车成功'); + onLoad(); + } catch (error) { + console.log('error :>> ', error); + } finally { + details.loadingObj.pageLoading = false; + } +}; + +/** 卸车 -- 零担 */ +const handleZeroUnLoad = async ({ row }) => { + const myWarehouseData = await getMyCurrentWarehouse(); + if (!myWarehouseData) return ElMessage.warning('请先选择一个仓库'); + + if (myWarehouseData.warehouseId !== row.warehouseId) + return ElMessage.warning('未在目的仓, 无法卸车'); + + details.zeroItem = { ...row }; + details.zeroItem.enterNum = row.num; + details.popUpShow.transferVisited = true; +}; + +/** 卸车 -- 零担 -- 提交 */ +const handleZeroUnLoadSubmit = async () => { + try { + details.popUpShow.transferVisited = false; + details.loadingObj.pageLoading = true; + + const submitData = { + loadId: details.pageInfo.loadId, + unloadPackageList: [], + unloadZeroList: [ + { + waybillNo: details.zeroItem.waybillNo, + enterNum: details.zeroItem.num, + orderCode: details.zeroItem.orderCode, + }, + ], + }; + + const res = await postBatchUnload(submitData); + const { code } = res.data; + + if (code !== 200) return; + ElMessage.success('卸车成功'); + onLoad(); + } catch (error) { + console.log('error :>> ', error); + } finally { + details.loadingObj.pageLoading = false; + } +}; + +watch( + $route, + (newVal, oldVal) => { + console.log('newVal :>> ', newVal); + console.log('oldVal :>> ', oldVal); + if (newVal.path !== '/distribution/artery/truckLoadingDetails') return; + details.pageInfo.loadId = $route.query.loadId; + details.pageInfo.type = $route.query.type; + console.log('details.pageInfo :>> ', details.pageInfo); + onLoad(); + }, + { + immediate: true, + } +);