From d538273edf9a0e8984e3684a57cc68654b611a9c Mon Sep 17 00:00:00 2001
From: qb <1191961160@qq.com>
Date: Wed, 20 Mar 2024 09:08:56 +0800
Subject: [PATCH] =?UTF-8?q?=E5=B9=B2=E7=BA=BF=E6=96=B0=E5=A2=9E=E6=88=90?=
 =?UTF-8?q?=E6=9C=AC=E5=88=86=E6=91=8A?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit

---
 src/api/distribution/VehicleStowageDetails.js |  22 +++
 src/option/distribution/VehicleStowage.js     |   2 +-
 src/option/waybill/TemporaryStorageList.js    |  22 +--
 src/utils/print.js                            |  17 +-
 .../artery/VehicleArrivalManagement.vue       |  12 +-
 .../artery/VehicleStowageDetails.vue          | 146 ++++++++++++++++--
 .../distribution/artery/directGoMarket.vue    |   2 +-
 .../artery/truckLoadingDetails.vue            |   6 +-
 8 files changed, 190 insertions(+), 39 deletions(-)

diff --git a/src/api/distribution/VehicleStowageDetails.js b/src/api/distribution/VehicleStowageDetails.js
index fcc43b08..67f8f808 100644
--- a/src/api/distribution/VehicleStowageDetails.js
+++ b/src/api/distribution/VehicleStowageDetails.js
@@ -65,3 +65,25 @@ export const postFindFinanceList = data => {
     data,
   });
 };
+
+/**
+ * 查询是否存在异常数据
+ */
+export const postFindCostShareBefore = data => {
+  return request({
+    url: '/api/logpm-trunkline/carsLoad/findCostShareBefore',
+    method: 'post',
+    data,
+  });
+};
+
+/**
+ * 成本分摊
+ */
+export const postCostShareByLoadId = data => {
+  return request({
+    url: '/api/logpm-trunkline/carsLoad/costShareByLoadId',
+    method: 'post',
+    data,
+  });
+};
diff --git a/src/option/distribution/VehicleStowage.js b/src/option/distribution/VehicleStowage.js
index 4fb505cb..cd10b161 100644
--- a/src/option/distribution/VehicleStowage.js
+++ b/src/option/distribution/VehicleStowage.js
@@ -774,7 +774,7 @@ export const packageColumnList = [
     head: false,
   },
   {
-    prop: 'scanCode',
+    prop: 'orderPackageCode',
     label: '包条码',
     width: '130',
     type: 2,
diff --git a/src/option/waybill/TemporaryStorageList.js b/src/option/waybill/TemporaryStorageList.js
index 84ad6e80..b895fe63 100644
--- a/src/option/waybill/TemporaryStorageList.js
+++ b/src/option/waybill/TemporaryStorageList.js
@@ -85,6 +85,17 @@ export const columnList = [
     fixed: false,
     sortable: true,
   },
+  {
+    prop: 'totalNum',
+    label: '数量',
+    type: 1,
+    values: '',
+    width: '130',
+    checkarr: [],
+    fixed: false,
+    sortable: true,
+    isshowSummary: true,
+  },
   {
     prop: 'senderFactory',
     label: '发货单位',
@@ -165,17 +176,6 @@ export const columnList = [
     fixed: false,
     sortable: true,
   },
-  {
-    prop: 'totalNum',
-    label: '数量',
-    type: 1,
-    values: '',
-    width: '130',
-    checkarr: [],
-    fixed: false,
-    sortable: true,
-    isshowSummary: true,
-  },
   {
     prop: 'trainNumber',
     label: '客户车次',
diff --git a/src/utils/print.js b/src/utils/print.js
index d160f000..1c3f685f 100644
--- a/src/utils/print.js
+++ b/src/utils/print.js
@@ -1,5 +1,5 @@
 import { getLodop } from '@/utils/LodopFuncs';
-import hwyPrintNew  from '@/utils/print/index';
+import hwyPrintNew from '@/utils/print/index';
 /**
  * 根据传入的元素列表进行打印
  * @param nodeList 元素节点列表
@@ -7,23 +7,23 @@ import hwyPrintNew  from '@/utils/print/index';
 const print = nodeList => {
   // 直接调用时使用默认节点列表
   if (!nodeList) nodeList = document.querySelectorAll('.el-dialog__body>div>div>div');
-  
+
   // 初始化打印实例
   let LODOP = getLodop();
-  
+
   // 当列表内没有元素时, 退出函数
   if (nodeList.length === 0) return;
 
   LODOP.PRINT_INITA(1, 1, 900, 660, '测试预览功能');
   LODOP.SET_PRINT_MODE('WINDOW_DEFPRINTER', 'Godex G500');
   LODOP.SET_PRINT_STYLEA(0, 'TextNeatRow', true); //允许标点溢出,且英文单词拆开
+  // LODOP.SET_PRINT_STYLE('FontColor', '#000000');
   // // 设置打印整宽且不变形
   LODOP.SET_PRINT_MODE('PRINT_PAGE_PERCENT', 'Auto-Width');
   // // 设置打印后自动关闭
   LODOP.SET_PRINT_MODE('AUTO_CLOSE_PREWINDOW', 1);
   // 循环列表内元素并打印
   nodeList.forEach(orderNode => {
-
     console.log(orderNode, 'orderNode');
 
     let templateData = orderNode.innerHTML;
@@ -35,20 +35,17 @@ const print = nodeList => {
   // LODOP.PREVIEW(); //预览(预览打印无脚标)
 };
 
-const newPrint = nodeName =>{
-  if(nodeName) return hwyPrintNew(nodeName)
+const newPrint = nodeName => {
+  if (nodeName) return hwyPrintNew(nodeName);
   // const nodeList = document.querySelectorAll('.el-dialog__body>div>div>div')
 
-
-
   // for (const iterator of nodeList) {
   //   //$Print(iterator)
 
   //   console.log(iterator, 'iterator');
   // }
 
-
   hwyPrintNew('.el-dialog__body>div>div>div');
-} 
+};
 
 export default print;
diff --git a/src/views/distribution/artery/VehicleArrivalManagement.vue b/src/views/distribution/artery/VehicleArrivalManagement.vue
index 8a7aaf6b..d3819e48 100644
--- a/src/views/distribution/artery/VehicleArrivalManagement.vue
+++ b/src/views/distribution/artery/VehicleArrivalManagement.vue
@@ -195,7 +195,13 @@
               >编辑</el-text
             >
 
-            <el-dropdown>
+            <el-dropdown
+              v-if="
+                Mydata.id === slotProps.scope.row.nowWarehouseId &&
+                Number(slotProps.scope.row.loadingType) === 1 &&
+                Number(slotProps.scope.row.loadStatus) === 20
+              "
+            >
               <span class="el-dropdown-link">
                 <el-text>
                   更多 <el-icon class="el-icon--right"><arrow-down /></el-icon
@@ -203,7 +209,7 @@
               </span>
               <template #dropdown>
                 <el-dropdown-menu>
-                  <el-dropdown-item v-if="Mydata.id === slotProps.scope.row.nowWarehouseId">
+                  <!-- <el-dropdown-item v-if="Mydata.id === slotProps.scope.row.nowWarehouseId">
                     <el-text @click="handleNodeCost(slotProps.scope)"> 节点费用 </el-text>
                   </el-dropdown-item>
 
@@ -217,7 +223,7 @@
                     <el-text @click="handleDirectGoMarketDetails(slotProps.scope)">
                       签收详情
                     </el-text>
-                  </el-dropdown-item>
+                  </el-dropdown-item> -->
 
                   <el-dropdown-item
                     v-if="
diff --git a/src/views/distribution/artery/VehicleStowageDetails.vue b/src/views/distribution/artery/VehicleStowageDetails.vue
index 8cc99626..969bee33 100644
--- a/src/views/distribution/artery/VehicleStowageDetails.vue
+++ b/src/views/distribution/artery/VehicleStowageDetails.vue
@@ -161,7 +161,7 @@
           <!-- 控件 -->
           <div style="margin-bottom: 10px" class="flex-c-sb">
             <div>
-              <el-button type="primary" icon="Promotion" @click="searchReset()">
+              <el-button type="primary" icon="Promotion" @click="handleCostApportionments">
                 成本分摊确认
               </el-button>
             </div>
@@ -308,9 +308,8 @@
     </div>
   </basic-container>
 
-  <!-- 打印二维码 -->
+  <!-- 添加运输合同图片 -->
   <el-dialog
-    class="el-dialog-QRCode"
     title="添加运输合同图片"
     :visible.sync="details.popUpShow.addImgVisible"
     width="780px"
@@ -332,6 +331,35 @@
     </span>
   </el-dialog>
 
+  <!-- 处理异常数据 -->
+  <el-dialog
+    title="异常数据"
+    width="70vw"
+    v-model="details.popUpShow.abnormalVisible"
+    :align-center="true"
+  >
+    <div class="flex">
+      <el-button type="primary" icon="Delete" @click="handleBatchDelete">批 量 删 除</el-button>
+    </div>
+    <tablecmt
+      class="abnormalTableRef mt10"
+      style="height: 60vh"
+      :columnList="details.abnormalColumn"
+      :tableData="details.abnormalData"
+      :loading="loadingObj.abnormalLoading"
+      ref="abnormalTableRef"
+      @selection="list => (details.abnormalSelectionList = list)"
+      :isShowRefresh="false"
+    >
+      <template #default="slotProps"> </template>
+    </tablecmt>
+
+    <div class="flex-c-c mt10">
+      <el-button @click="details.popUpShow.abnormalVisible = false">关 闭</el-button>
+      <el-button type="primary" @click="handleSubmitAbnormal">成本分摊</el-button>
+    </div>
+  </el-dialog>
+
   <edittablehead
     @setcolum="setnewcolum"
     @closce="showdrawer"
@@ -340,7 +368,7 @@
   >
   </edittablehead>
 </template>
-<!-- activeTab: 'tab1' -->
+
 <script setup lang="ts">
 import { ref, reactive, toRefs, computed, onMounted, nextTick, watch } from 'vue';
 import functions from '@/utils/functions';
@@ -348,8 +376,10 @@ import dayjs from 'dayjs';
 import { mapGetters } from 'vuex';
 /** 获取字典 */
 import { getDictionaryBiz } from '@/api/system/dict';
-import { downloadXls, computeNumber, setNodeHeight, debounce } from '@/utils/util';
+import { downloadXls, computeNumber, setNodeHeight, debounce, deepClone } from '@/utils/util';
 import { detailsColumnList, nodeInfoColumnList } from '@/option/distribution/addVehicleStowage';
+import { detailsColumnList as abnormalColumn } from '@/option/distribution/TripartiteTransfer';
+
 import { getToken } from '@/utils/auth';
 
 import {
@@ -358,10 +388,13 @@ import {
   postFindContractList,
   postAddContractByLoadId,
   postFindFinanceList,
+  postFindCostShareBefore,
+  postCostShareByLoadId,
 } from '@/api/distribution/VehicleStowageDetails.js';
+import { postRemoveCarsLoadScan } from '@/api/distribution/truckLoadingDetails';
 import { useRouter, useRoute } from 'vue-router';
 import { useStore } from 'vuex';
-import { ElMessage } from 'element-plus';
+import { ElMessage, ElMessageBox } from 'element-plus';
 
 /** 被合并的列 */
 const mergeColumn = [];
@@ -385,6 +418,8 @@ const ruleFormRef = ref();
 // 表格实例
 const oldColumnListNode = ref();
 
+const abnormalTableRef = ref();
+
 // 节点信息
 const nodeInfoRef = ref();
 
@@ -444,6 +479,8 @@ const details = reactive<any>({
     oldListLoading: false,
     /** 页面loading */
     pageLoading: false,
+    /** 异常列表 */
+    abnormalLoading: false,
   },
   /** 列表复选框选中的数据 */
   selectionList: [],
@@ -451,12 +488,10 @@ const details = reactive<any>({
   drawerShow: false,
   /** 弹出层显示 */
   popUpShow: {
-    /** 装车详情 */
-    truckLoadingDetailVisited: false,
-    /** 零担补录 */
-    transferVisited: false,
     /** 运输图片添加弹窗 */
     addImgVisible: false,
+    /** 异常数据处理 */
+    abnormalVisible: false,
   },
   /** 列表Dom节点 */
   listNode: '',
@@ -500,6 +535,12 @@ const details = reactive<any>({
   carriageContractList: [],
   /** 上传图片list */
   updateImgList: [],
+  /** 异常数据 */
+  abnormalData: [],
+  /** 异常列表表头 */
+  abnormalColumn: deepClone(abnormalColumn),
+  /** 异常被选中数据 */
+  abnormalSelectionList: [],
 });
 
 const {
@@ -903,6 +944,91 @@ const back = () => {
   $router.push({ path: '/distribution/artery/TripartiteTransfer' });
 };
 
+/** 成本分摊 */
+const handleCostApportionments = async () => {
+  ElMessageBox.confirm('确定要进行费用分摊吗?', '提示', {
+    confirmButtonText: '确定',
+    cancelButtonText: '取消',
+    type: 'warning',
+  }).then(async () => {
+    try {
+      details.loadingObj.pageLoading = true;
+
+      const submitData = {
+        loadId: $route.query.loadId,
+      };
+
+      const res = await postFindCostShareBefore(submitData);
+      const { code, data, msg } = res.data;
+
+      if (code !== 200) return;
+
+      // 没有异常数据, 进行分摊
+      if (data.noDataLoadScanList.length === 0) {
+        const response = await postCostShareByLoadId(submitData);
+
+        const { code, data, msg } = response.data;
+        if (code !== 200) return;
+        ElMessage.success(msg);
+      } else {
+        // 存在异常数据, 处理异常数据
+        details.popUpShow.abnormalVisible = true;
+        details.abnormalData = data.noDataLoadScanList;
+        await nextTick();
+        setNodeHeight(abnormalTableRef.value.$el, '60vh');
+        setTabelHeight();
+      }
+    } catch (error) {
+      console.log('error :>> ', error);
+    } finally {
+      details.loadingObj.pageLoading = false;
+    }
+  });
+};
+
+const handleSubmitAbnormal = () => {
+  if (details.abnormalData.length === 0)
+    return ElMessage.warning('还存在异常数据, 请先处理完异常数据');
+
+  handleCostApportionments();
+};
+
+/** 异常数据批量删除 */
+const handleBatchDelete = () => {
+  if (details.abnormalSelectionList.length === 0) return ElMessage.warning('请选择要删除的数据');
+
+  ElMessageBox.confirm('确定要删除吗?', '提示', {
+    confirmButtonText: '确定',
+    cancelButtonText: '取消',
+    type: 'warning',
+  }).then(async () => {
+    try {
+      details.loadingObj.abnormalLoading = true;
+
+      const res = await postRemoveCarsLoadScan({
+        carsLoadScanIds: details.abnormalSelectionList.map(val => val.id).join(','),
+      });
+
+      if (res.data.code !== 200) return;
+      ElMessage.success(res.data.msg);
+
+      const submitData = {
+        loadId: $route.query.loadId,
+      };
+      const response = await postFindCostShareBefore(submitData);
+      const { code, data } = response.data;
+
+      if (code !== 200) return;
+
+      details.abnormalData = data.noDataLoadScanList;
+    } catch (error) {
+      console.log('error :>> ', error);
+    } finally {
+      details.loadingObj.abnormalLoading = false;
+    }
+  });
+};
+
 watch(
   () => $route.query,
   () => {
diff --git a/src/views/distribution/artery/directGoMarket.vue b/src/views/distribution/artery/directGoMarket.vue
index c10754aa..0d7d3051 100644
--- a/src/views/distribution/artery/directGoMarket.vue
+++ b/src/views/distribution/artery/directGoMarket.vue
@@ -315,7 +315,7 @@ const initNewData = debounce(async function (params = {}) {
     details.loadingObj.newListLoading = true;
     const submitData = {
       ...details.newPage,
-      ...details.oldQuery,
+      ...details.newQuery,
       loadId: details.pageInfo.loadId,
       ...params,
     };
diff --git a/src/views/distribution/artery/truckLoadingDetails.vue b/src/views/distribution/artery/truckLoadingDetails.vue
index 7d28247e..c386c150 100644
--- a/src/views/distribution/artery/truckLoadingDetails.vue
+++ b/src/views/distribution/artery/truckLoadingDetails.vue
@@ -182,8 +182,8 @@
     </div>
     <span slot="footer" class="dialog-footer flex-c-c mt10">
       <!--    <el-button type="primary" @click="ddd">导 出</el-button>-->
-      <el-button type="primary" @click="printTemplate">打 印</el-button>
-      <el-button @click="details.popUpShow.QRCodeVisible = false">取 消</el-button>
+      <el-button @click="details.popUpShow.QRCodeVisible = false">关 闭</el-button>
+      <el-button type="primary" icon="Printer" @click="printTemplate">打 印</el-button>
     </span>
   </el-dialog>
 
@@ -1075,7 +1075,7 @@ const handleBatchBarcode = async () => {
 
 /** 打印包条码 */
 const printTemplate = () => {
-  const orderNodeList = document.querySelectorAll('.el-dialog-QRCode .el-dialog__body>div>div>div');
+  const orderNodeList = document.querySelectorAll('.el-dialog-QRCode-container>div>div');
   print(orderNodeList);
 };