From cc41746818af3b619167947ecb4401ccdfbec2d8 Mon Sep 17 00:00:00 2001
From: sen <sen@qq.com>
Date: 星期二, 31 三月 2026 10:40:47 +0800
Subject: [PATCH] 修改搜索

---
 ui/admin-ui3/src/views/tms/tmsDispatchOrder/index.vue |  525 +++++++++++++++++++++++++++++++++++++++++++++++----------
 1 files changed, 428 insertions(+), 97 deletions(-)

diff --git a/ui/admin-ui3/src/views/tms/tmsDispatchOrder/index.vue b/ui/admin-ui3/src/views/tms/tmsDispatchOrder/index.vue
index a820932..617f7c9 100644
--- a/ui/admin-ui3/src/views/tms/tmsDispatchOrder/index.vue
+++ b/ui/admin-ui3/src/views/tms/tmsDispatchOrder/index.vue
@@ -90,22 +90,24 @@
 
       <template #menu="{ row, index, size }">
         <el-tooltip content="鏌ョ湅" placement="top" :enterable="false">
-          <el-link type="primary" icon="el-icon-view" :underline="false" class="link-btn"
-                   v-hasPermi="['tms:tmsDispatchOrder:query']"
-            @click="$refs.crudRef.rowView(row, index)">
+          <el-link type="primary" icon="el-icon-view" underline="never" class="link-btn"
+            v-hasPermi="['tms:tmsDispatchOrder:query']" @click="$refs.crudRef.rowView(row, index)">
+            &nbsp;
           </el-link>
         </el-tooltip>
         <el-tooltip content="鍒犻櫎" placement="top" :enterable="false">
-          <el-link type="primary" icon="el-icon-delete" :underline="false" class="link-btn"
-                   v-hasPermi="['tms:tmsDispatchOrder:remove']" v-if="row.status == 0"
+          <el-link type="primary" icon="el-icon-delete" underline="never" class="link-btn"
+            v-hasPermi="['tms:tmsDispatchOrder:remove']" v-if="row.status == 0"
             @click="$refs.crudRef.rowDel(row, index)">
+            &nbsp;
           </el-link>
         </el-tooltip>
 
         <el-tooltip content="缂栬緫" placement="top" :enterable="false">
-          <el-link type="primary" icon="el-icon-edit" :underline="false" class="link-btn"
-                   v-hasPermi="['tms:tmsDispatchOrder:edit']" v-if="[0, 1].includes(row.status)"
+          <el-link type="primary" icon="el-icon-edit" underline="never" class="link-btn"
+            v-hasPermi="['tms:tmsDispatchOrder:edit']" v-if="[0, 1].includes(row.status)"
             @click="$refs.crudRef.rowEdit(row, index)">
+            &nbsp;
           </el-link>
         </el-tooltip>
 
@@ -114,53 +116,70 @@
 
 
         <el-tooltip content="杩愯緭璐у搧鐧昏" placement="top">
-        <el-link size="small" type="primary" @click="handleAddGoods(row)" class="link-btn"
-                 v-hasPermi="['tms:tmsGoodsDetail:add']" v-if="[0,1,2].includes(row.status)"
-                 :underline="false" icon="el-icon-document-add">
-        </el-link>
+          <el-link size="small" type="primary" @click="handleAddGoods(row)" class="link-btn"
+            v-hasPermi="['tms:tmsGoodsDetail:add']" v-if="[0, 1, 2].includes(row.status)" underline="never"
+            icon="el-icon-document-add">
+            &nbsp;
+          </el-link>
         </el-tooltip>
         <el-tooltip content="瀹為檯杩愯緭璁板綍" placement="top">
-        <el-link size="small" type="primary" @click="handleActual(row)" class="link-btn"
-                 v-hasPermi="['tms:tmsDispatchOrder:update']" v-if="[0,1,2].includes(row.status)"
-                 :underline="false" icon="el-icon-set-up">
-        </el-link>
+          <el-link size="small" type="primary" @click="handleActual(row)" class="link-btn"
+            v-hasPermi="['tms:tmsDispatchOrder:update']" v-if="[0, 1, 2].includes(row.status)" underline="never"
+            icon="el-icon-set-up">
+            &nbsp;
+          </el-link>
         </el-tooltip>
         <el-tooltip content="纭畾" placement="top">
-        <el-link size="small" type="primary" v-if="row.status == 0" @click="handleConfirm(row)" class="link-btn"
-                 v-hasPermi="['tms:tmsDispatchOrder:confirmOrder']"
-                 :underline="false" icon="el-icon-pointer">
-        </el-link>
+          <el-link size="small" type="primary" v-if="row.status == 0" @click="handleConfirm(row)" class="link-btn"
+            v-hasPermi="['tms:tmsDispatchOrder:confirmOrder']" underline="never" icon="el-icon-pointer">
+            &nbsp;
+          </el-link>
         </el-tooltip>
         <el-tooltip content="浣滃簾" placement="top">
-        <el-link size="small" type="primary" v-if="[0,1,2].includes(row.status)" @click="handleClose(row)" class="link-btn"
-                 v-hasPermi="['tms:tmsDispatchOrder:closeOrder']"
-                 :underline="false" icon="el-icon-close">
-        </el-link>
+          <el-link size="small" type="primary" v-if="[0, 1, 2].includes(row.status)" @click="handleClose(row)"
+            class="link-btn" v-hasPermi="['tms:tmsDispatchOrder:closeOrder']" underline="never" icon="el-icon-close">
+            &nbsp;
+          </el-link>
         </el-tooltip>
         <el-tooltip content="澶嶅埗" placement="top">
-        <el-link size="small" type="primary" @click="handleCopy(row)" class="link-btn" :underline="false"
-                 v-hasPermi="['tms:tmsDispatchOrder:copyOrder']"
-                 icon="el-icon-connection">
-        </el-link>
+          <el-link size="small" type="primary" @click="handleCopy(row)" class="link-btn" underline="never"
+            v-hasPermi="['tms:tmsDispatchOrder:copyOrder']" icon="el-icon-connection">
+            &nbsp;
+          </el-link>
         </el-tooltip>
         <el-tooltip content="涓婁紶琛岀▼" placement="top">
-        <el-link size="small" type="primary" v-if="[1,2].includes(row.status)" @click="handleUploadItinerary(row)"
-                 v-hasPermi="['tms:tmsTrip:add']"
-                 class="link-btn" :underline="false" icon="el-icon-upload">
-        </el-link>
+          <el-link size="small" type="primary" v-if="[1, 2].includes(row.status)" @click="handleUploadItinerary(row)"
+            v-hasPermi="['tms:tmsTrip:add']" class="link-btn" underline="never" icon="el-icon-upload">
+            &nbsp;
+          </el-link>
         </el-tooltip>
         <el-tooltip content="鏌ョ湅琛岀▼" placement="top">
-        <el-link size="small" type="primary" v-if="![0,1].includes(row.status)" @click="handleLogItinerary(row)"
-                 v-hasPermi="['tms:tmsTrip:list']"
-                 class="link-btn" :underline="false" icon="el-icon-view">
-        </el-link>
+          <el-link size="small" type="primary" v-if="![0, 1].includes(row.status)" @click="handleLogItinerary(row)"
+            v-hasPermi="['tms:tmsTrip:list']" class="link-btn" underline="never" icon="Finished">
+            &nbsp;
+          </el-link>
         </el-tooltip>
         <el-tooltip content="瀹屾垚琛岀▼" placement="top">
-        <el-link size="small" type="primary" v-if="[2].includes(row.status)" @click="handleOk(row)" class="link-btn"
-                 v-hasPermi="['tms:tmsDispatchOrder:okOrder']"
-                 :underline="false" icon="el-icon-circle-check">
-        </el-link>
+          <el-link size="small" type="primary" v-if="[2].includes(row.status)" @click="handleOk(row)" class="link-btn"
+            v-hasPermi="['tms:tmsDispatchOrder:okOrder']" underline="never" icon="el-icon-circle-check">
+            &nbsp;
+          </el-link>
         </el-tooltip>
+        <!-- 
+        <el-tooltip content="瀹屾垚琛岀▼" placement="top">
+          <el-link size="small" type="primary" v-if="[2].includes(row.status)" @click="handleOk(row)" class="link-btn"
+            v-hasPermi="['tms:tmsDispatchOrder:okOrder']" underline="never" icon="el-icon-circle-check">
+            &nbsp;
+          </el-link>
+        </el-tooltip> -->
+
+        <el-tooltip content="鏃ュ織" placement="top">
+          <el-link size="small" type="primary" @click="handleFlow(row)" class="link-btn"
+            v-hasPermi="['cwgl:estimatedReceivable:flog']" underline="never" icon="el-icon-document">
+            &nbsp;
+          </el-link>
+        </el-tooltip>
+
 
       </template>
 
@@ -195,7 +214,7 @@
             min="0"></el-input-number>
         </template>
       </avue-crud>
-      <h2 v-if="optionType == 'addFinance'">瀹炴姤瀹為攢璐圭敤1</h2>
+      <h2 v-if="optionType == 'addFinance'">瀹炴姤瀹為攢璐圭敤</h2>
       <avue-form v-if="optionType == 'addItinerary' || optionType == 'addFinance'" v-model="boxForm" ref="boxFormRef"
         :option="boxFormOption">
 
@@ -329,7 +348,7 @@
       </avue-crud>
 
       <div v-if="active === 'tab4'">
-        <h2>瀹炴姤瀹為攢璐圭敤</h2>
+        <h2>瀹炴姤瀹為攢璐圭敤3</h2>
         <!-- <avue-form v-model="boxForm" ref="boxFormRef" :option="boxFormOption">
 
         </avue-form> -->
@@ -338,7 +357,6 @@
             <el-input-number v-model="row.actualFeeAmount" :precision="2" :min="0" controls-position="right"
               placeholder="杈撳叆閲戦" style="width: 100%" />
           </template>
-
           <template #currency="{ row }">
             <el-radio-group v-model="row.currency">
               <el-radio v-for="item in sys_currency" :key="item.value" :label="item.value">
@@ -347,8 +365,19 @@
             </el-radio-group>
           </template>
           <template #voucherUrl="{ row }">
-            <avue-upload v-model="row.voucherUrl" :action="'/common/upload2'" type="upload" accept="image/*"
-              @upload-after="(res, done, loading, column) => handleUploadAfter(res, done, loading, column, row)"></avue-upload>
+            <!-- <avue-upload v-model="row.voucherUrl" :action="'/common/upload2'" type="upload" accept="image/*"
+              @upload-after="(res, done, loading, column) => handleUploadAfter(res, done, loading, column, row)"></avue-upload> -->
+
+            <!-- 鍑瘉鍥剧墖 -->
+            <el-upload class="upload-demo" ref="uploadRef" :limit="1" drag :action="urlApi + '/common/upload2'" multiple
+              :show-file-list="true" :on-success="(res) => handleUploadAfter(res, row)"
+              :on-exceed="(files) => handleExceed(files, row)">
+              <el-icon class="el-icon--upload"><upload-filled /></el-icon>
+              <div class="el-upload__text">
+                鐐瑰嚮鎴栧皢鍥剧墖鎷栨嫿鍒版鍖哄煙涓婁紶
+              </div>
+
+            </el-upload>
           </template>
           <template #remark="{ row }">
             <el-input v-model="row.remark" placeholder="濉啓澶囨敞" clearable />
@@ -484,7 +513,7 @@
         <div class="dialog-footer">
           <el-button @click="print = 0" v-if="print == 1">閲嶆柊濉啓</el-button>
           <el-button type="primary" :loading="pageF.isUploading" @click="submitForm6">
-            {{ pageF.isUploading ? '鎻愪氦涓�' : '纭� 瀹�2' }}
+            {{ pageF.isUploading ? '鎻愪氦涓�' : '纭� 瀹�' }}
           </el-button>
 
           <el-button @click="open6 = false">鍙� 娑�</el-button>
@@ -502,7 +531,7 @@
         <template #tip>
           <div class="el-upload__tip text-center">
             <span>浠呭厑璁稿鍏ls銆亁lsx鏍煎紡鏂囦欢銆�</span>
-            <el-link type="primary" :underline="false" style="font-size:12px;vertical-align: baseline;"
+            <el-link type="primary" underline="never" style="font-size:12px;vertical-align: baseline;"
               @click="importTemplate">涓嬭浇妯℃澘</el-link>
           </div>
         </template>
@@ -559,10 +588,16 @@
       <avue-crud :data="importLogData" :option="importLogOption" :table-loading="importLogLoading"
         @on-load="getImportLogList"></avue-crud>
     </el-dialog>
+
+    <flowLog ref="flowLogIshow" :isShow="false" :flowParams="flowParams"></flowLog>
+
   </basicContainer>
+
+
 </template>
 
 <script setup name="tmsDispatchOrder" lang="ts">
+import { listTmsDispatchOrderLog } from "@/api/tms/tmsDispatchOrderLog";
 import {
   TmsDispatchOrderI,
   addTmsDispatchOrder,
@@ -571,6 +606,7 @@
   getTmsDispatchOrder,
   listTmsDispatchOrder,
   updateTmsDispatchOrder,
+  tmsDispatchOrderRecord,
   confirmOrder,
   copyOrder,
   okOrder,
@@ -585,10 +621,11 @@
   printDispatchOrder,
   importTemplateTmsDispatchOrder, ypdddjSumbit,
   tmsTmsDispatchOrderImportLog,
-  saveTmsFinanceDetail2
+  saveTmsFinanceDetail2,
+  getLastLicensePlate
 } from "@/api/tms/tmsDispatchOrder";
 import useCurrentInstance from "@/utils/useCurrentInstance";
-import { computed, onMounted, reactive, ref, toRefs, watch, getCurrentInstance, nextTick } from "vue";
+import { computed, onMounted, onBeforeUnmount, reactive, ref, toRefs, watch, getCurrentInstance, nextTick } from "vue";
 import { PagesInterface, PageQueryInterface } from "@/utils/globalInterface";
 import { usePagePlus } from "@/hooks/usePagePlus";
 import { hasPermission } from "@/utils/permissionUtils";
@@ -621,7 +658,7 @@
 import { pushTmsQuoteFee } from "@/api/tms/tmsQuoteFee";
 import { $Print } from '@smallwei/avue'
 import { getToken } from "@/utils/auth";
-import {useAvueTableShowHide} from "@/hooks/useAvueTableShowHide";
+import { useAvueTableShowHide } from "@/hooks/useAvueTableShowHide";
 
 const { appContext } = getCurrentInstance();
 
@@ -647,11 +684,30 @@
     return true;
   }
 };
+const getNextDayMidnight = () => {
+  const date = new Date();
+
+  // 1. 灏嗘棩鏈熸帹杩涘埌鏄庡ぉ
+  date.setDate(date.getDate() + 1);
+
+  // 2. 灏嗘椂鍒嗙姣鍏ㄩ儴娓呴浂
+  date.setHours(0, 0, 0, 0);
+
+  const year = date.getFullYear();
+  const month = String(date.getMonth() + 1).padStart(2, '0');
+  const day = String(date.getDate()).padStart(2, '0');
+  const hours = String(date.getHours()).padStart(2, '0');
+  const minutes = String(date.getMinutes()).padStart(2, '0');
+  const seconds = String(date.getSeconds()).padStart(2, '0');
+
+  // 杩斿洖鏍煎紡锛�2024-01-20 00:00:00
+  return `${year}-${month}-${day} ${hours}:${minutes}:${seconds}`;
+};
 const data = reactive({
   form: <TmsDispatchOrderI>{},
   queryParams: <TmsDispatchOrderI & PageQueryInterface>{},
   page: <PagesInterface>{
-    pageSize: 10,
+    pageSize: 30,
     total: 0,
     currentPage: 1,
   },
@@ -684,6 +740,7 @@
 } = toRefs(data);
 const option = ref({
   menuType: 'icon',
+
   viewBtn: false, // 鍏抽棴鍘熺敓鏌ョ湅
   editBtn: false, // 鍏抽棴鍘熺敓缂栬緫
   delBtn: false, // 鍏抽棴鍘熺敓缂栬緫
@@ -697,7 +754,7 @@
   labelWidth: 130,
   searchSpan: 6,
   searchLabelWidth: 150,
-  menuWidth: 300,
+  menuWidth: 350,
   height: 530,
   group: [
     {
@@ -1062,6 +1119,7 @@
         },
         latestDeparture: {
           label: '瑕佹眰鏈�鏅氬嚭鍙戞椂闂�',
+          value: getNextDayMidnight(),
           type: 'datetime',  // 鏀逛负 datetime 绫诲瀷
           format: 'YYYY-MM-DD HH:mm:ss', labelWidth: 150,
           valueFormat: 'YYYY-MM-DD HH:mm:ss',
@@ -1075,6 +1133,7 @@
         },
         latestArrival: {
           label: '瑕佹眰鏈�鏅氬埌杈炬椂闂�', labelWidth: 150,
+          value: getNextDayMidnight(),
           type: 'datetime',  // 鏀逛负 datetime 绫诲瀷
           format: 'YYYY-MM-DD HH:mm:ss',
           valueFormat: 'YYYY-MM-DD HH:mm:ss',
@@ -1104,7 +1163,6 @@
             }
           ],
           change: ({ value }: any) => {
-            console.log(value)
             option.value.group.forEach((item: any) => {
               if (item.prop == 'pcxx') {
                 item.column.commissionModel.display = value != 1;
@@ -1227,24 +1285,64 @@
             }
           ],
           change: (val: any) => {
+            // 闃叉閲嶅鎵ц
+            if (data.isChanging) return;
+            data.isChanging = true;
+
             const table = crudRef.value?.getPropRef?.('mainDriverId')?.$refs?.temp;
-            if (!table) return;
+            if (!table) {
+              data.isChanging = false;
+              return;
+            }
+
             let active = table.active;
             if (Array.isArray(active)) active = active[0];
+
             if (active) {
               Object.assign(form.value, {
                 mainDriverId: active.id,
                 mainDriverName: active.driverName,
               });
+
+              // 鑾峰彇杞︾墝鍙峰苟璧嬪��
+              getLastLicensePlate(active.driverName).then(res => {
+                if (res.code == 200) {
+                  form.value.licensePlate = res.data.licensePlate;
+                    form.value.vehicleId = res.data.vehicleId
+                }
+              }).finally(() => {
+                data.isChanging = false;
+              });
+            } else {
+              data.isChanging = false;
             }
           },
+          // change: (val: any) => {
+          //   const table = crudRef.value?.getPropRef?.('mainDriverId')?.$refs?.temp;
+          //   if (!table) return;
+          //   let active = table.active;
+          //   if (Array.isArray(active)) active = active[0];
+          //   console.log(active,'888');
+
+          //   if (active) {
+          //     Object.assign(form.value, {
+          //       mainDriverId: active.id,
+          //       mainDriverName: active.driverName,
+          //     });
+          //     console.log(active.driverName,'44');
+          //     getLastLicensePlate(active.driverName).then(res => { 
+          //       console.log(res);
+
+          //     })
+          //   }
+          // },
           type: 'table', suffixIcon: 'search',
           children: {
             border: true,
             searchMenuSpan: 5,
             column: {
               vehicleProviderName: {
-                label: '杞﹁締鏈嶅姟鍟�', minWidth: 130,
+                label: '杞﹁締鏈嶅姟鍟�1', minWidth: 130,
                 search: true,
               },
               driverName: {
@@ -1355,7 +1453,7 @@
 
         },
         vehicleId: {
-          label: '杞︾墝鍙�', dataType: 'string',
+          label: '杞︾墝鍙�1', dataType: 'string',
           display: true,
           rules: [
             {
@@ -1721,21 +1819,25 @@
       label: '璋冨害鍗曞彿', minWidth: 180,
       display: false,
       search: true,
+      overHidden: true
     },
     licensePlate: {
       label: '杞︾墝鍙�', minWidth: 120,
       display: false,
       search: true,
+      overHidden: true
     },
     customerName: {
       label: '瀹㈡埛',
       display: false, minWidth: 250,
       search: true,
+      overHidden: true
     },
     mainDriverName: {
       label: '涓婚┚椹跺憳',
       display: false, minWidth: 120,
       search: true,
+      overHidden: true
     },
     requiredVehicleTypes: {
       label: '涓嬪崟杞﹀瀷', minWidth: 130,
@@ -1745,35 +1847,67 @@
 
     },
     createTimeRange: {
-      label: '鍒涘缓鏃堕棿', display: false, search: true, searchRange: true, type: 'date',
-      format: 'YYYY-MM-DD', hide: true, searchSpan: 5,
+      label: '鍒涘缓鏃堕棿', display: false, searchRange: true, type: 'date',
+      format: 'YYYY-MM-DD', hide: true, searchSpan: 6,
       valueFormat: 'YYYY-MM-DD',
+      overHidden: true
+    },
+    createTimeRangeArray: {
+      label: '鍒涘缓鏃堕棿',
+      minWidth: 150,
+      search: true,
+      searchRange: true,
+      addDisplay: false,  // 鏂板鏃朵笉鏄剧ず
+      editDisplay: false, // 淇敼鏃朵笉鏄剧ず
+      type: 'daterange',
+      startPlaceholder: '寮�濮嬫棩鏈�',
+      endPlaceholder: '缁撴潫鏃ユ湡',
+      valueFormat: 'YYYY-MM-DD',
+      hide: true
     },
     updateTimeRange: {
-      label: '鏇存柊鏃堕棿', display: false, search: true, searchRange: true, type: 'date',
-      format: 'YYYY-MM-DD', hide: true, searchSpan: 5,
+      label: '鏇存柊鏃堕棿', display: false, searchRange: true, type: 'date',
+      format: 'YYYY-MM-DD', hide: true, searchSpan: 6,
       valueFormat: 'YYYY-MM-DD',
+      overHidden: true
+    },
+    updateTimeRangeArray: {
+      label: '鏇存柊鏃堕棿',
+      minWidth: 150,
+      search: true,
+      searchRange: true,
+      addDisplay: false,  // 鏂板鏃朵笉鏄剧ず
+      editDisplay: false, // 淇敼鏃朵笉鏄剧ず
+      type: 'daterange',
+      startPlaceholder: '寮�濮嬫棩鏈�',
+      endPlaceholder: '缁撴潫鏃ユ湡',
+      valueFormat: 'YYYY-MM-DD',
+      hide: true
     },
     loadingServiceProviderName: {
       label: '瑁呰揣鏈嶅姟鍟嗗悕绉�', minWidth: 150,
       display: false,
       search: true,
+      overHidden: true
     },
     customsServiceProviderName: {
       label: '鎶ュ叧鏈嶅姟鍟嗗悕绉�', minWidth: 150,
       display: false,
       search: true,
+      overHidden: true
     },
     projectName: {
       label: '椤圭洰鍚嶇О',
       display: false, minWidth: 250,
       search: true,
+      overHidden: true
     },
 
     contractName: {
       label: '鍏宠仈鍚堝悓鍚嶇О', minWidth: 250,
       display: false,
       search: true,
+      overHidden: true
     },
     orderType: {
       label: '璁㈠崟绫诲瀷',
@@ -1801,6 +1935,7 @@
       label: '杞﹁締鏈嶅姟鍟嗗悕绉�', minWidth: 150,
       display: false,
       search: true,
+      overHidden: true
     },
 
 
@@ -1853,11 +1988,13 @@
       label: '瑁呰揣鐐瑰悕绉�',
       display: false, minWidth: 200,
       search: true,
+      overHidden: true
     },
     receiverName: {
       label: '鍗歌揣鐐瑰悕绉�', minWidth: 200,
       display: false,
       search: true,
+      overHidden: true
     },
     // accountsReceivableStatus: {
     //   label: '搴旀敹璐圭敤鐢熸垚鐘舵��', minWidth: 160,
@@ -1898,16 +2035,18 @@
 
     },
     confirmTime: {
-      label: '纭鏃堕棿', minWidth: 180,
+      label: '纭鏃堕棿', minWidth: 200,
       display: false,
       hide: false,
       search: false,
+      searchSpan: 6,
     },
     orderTime: {
       label: '涓嬪崟鏃堕棿', minWidth: 180,
       display: false,
       hide: false,
       search: false,
+      searchSpan: 6,
     },
     createBy: {
       label: '鍒涘缓浜�', minWidth: 150,
@@ -1924,6 +2063,8 @@
       viewDisplay: false,
       hide: false,
       search: false,
+      overHidden: true,
+      searchSpan: 6,
     },
 
     updateBy: {
@@ -1941,22 +2082,64 @@
       viewDisplay: false,
       hide: false,
       search: false,
+      overHidden: true,
+      searchSpan: 6,
+
     },
 
     confirmTimeRange: {
-      label: '纭鏃堕棿', display: false, search: true, searchRange: true, type: 'date',
-      format: 'YYYY-MM-DD', hide: true, searchSpan: 5,
+      label: '纭鏃堕棿', display: false, searchRange: true, type: 'date',
+      format: 'YYYY-MM-DD', hide: true, searchSpan: 6,
       valueFormat: 'YYYY-MM-DD',
+    },
+    confirmTimeRangeArray: {
+      label: '纭鏃堕棿',
+      minWidth: 150,
+      search: true,
+      searchRange: true,
+      addDisplay: false,  // 鏂板鏃朵笉鏄剧ず
+      editDisplay: false, // 淇敼鏃朵笉鏄剧ず
+      type: 'daterange',
+      startPlaceholder: '寮�濮嬫棩鏈�',
+      endPlaceholder: '缁撴潫鏃ユ湡',
+      valueFormat: 'YYYY-MM-DD',
+      hide: true
     },
     okTimeRange: {
-      label: '瀹屾垚鏃堕棿', display: false, search: true, searchRange: true, type: 'date',
-      format: 'YYYY-MM-DD', hide: true, searchSpan: 5,
+      label: '瀹屾垚鏃堕棿', display: false, searchRange: true, type: 'date',
+      format: 'YYYY-MM-DD', hide: true, searchSpan: 6,
       valueFormat: 'YYYY-MM-DD',
     },
-    orderTimeRange: {
-      label: '涓嬪崟鏃堕棿', display: false, search: true, searchRange: true, type: 'date',
-      format: 'YYYY-MM-DD', hide: true, searchSpan: 5,
+    okTimeRangeArray: {
+      label: '瀹屾垚鏃堕棿',
+      minWidth: 150,
+      search: true,
+      searchRange: true,
+      addDisplay: false,  // 鏂板鏃朵笉鏄剧ず
+      editDisplay: false, // 淇敼鏃朵笉鏄剧ず
+      type: 'daterange',
+      startPlaceholder: '寮�濮嬫棩鏈�',
+      endPlaceholder: '缁撴潫鏃ユ湡',
       valueFormat: 'YYYY-MM-DD',
+      hide: true
+    },
+    orderTimeRange: {
+      label: '涓嬪崟鏃堕棿', display: false, searchRange: true, type: 'date',
+      format: 'YYYY-MM-DD', hide: true, searchSpan: 6,
+      valueFormat: 'YYYY-MM-DD',
+    },
+    orderTimeRangeArray: {
+      label: '涓嬪崟鏃堕棿',
+      minWidth: 150,
+      search: true,
+      searchRange: true,
+      addDisplay: false,  // 鏂板鏃朵笉鏄剧ず
+      editDisplay: false, // 淇敼鏃朵笉鏄剧ず
+      type: 'daterange',
+      startPlaceholder: '寮�濮嬫棩鏈�',
+      endPlaceholder: '缁撴潫鏃ユ湡',
+      valueFormat: 'YYYY-MM-DD',
+      hide: true
     },
 
   }
@@ -2049,7 +2232,7 @@
     },
   }
 })
-
+const urlApi = ref(import.meta.env.VITE_APP_BASE_API)
 const itineraryTableOption = ref({
   menu: false,
   addBtn: false,
@@ -2128,19 +2311,19 @@
       ],
     },
     currency: {
-      label: '甯佺',
+      label: '甯佸埗',
       display: true,
       type: 'radio', dataType: 'string', dicUrl: '/system/dict/data/type/sys_currency',
       rules: [
         {
           required: true,
-          message: "甯佺涓嶈兘涓虹┖", trigger: "change"
+          message: "甯佸埗涓嶈兘涓虹┖", trigger: "change"
         }
       ],
 
     },
     voucherUrl: {
-      label: '璐圭敤鍑瘉',
+      label: '璐圭敤鍑瘉1',
       display: true,
       accept: 'string', dataType: 'string',
       type: 'upload',
@@ -2191,7 +2374,7 @@
       display: true,
     },
     currency: {
-      label: '甯佺',
+      label: '甯佸埗',
       display: true,
       type: 'radio', dataType: 'string', dicUrl: '/system/dict/data/type/sys_currency',
     },
@@ -2977,13 +3160,71 @@
       zxhdjSingle.value = false;
     }
   },
+
   getBeginListFunc: (params = {}) => {
-    queryParams.value = proxy.addDateRangeNew(queryParams.value, queryParams.value?.createTimeRange, 'createTime') || {};
-    queryParams.value = proxy.addDateRangeNew(queryParams.value, queryParams.value?.updateTimeRange, 'updateTime') || {};
-    queryParams.value = proxy.addDateRangeNew(queryParams.value, queryParams.value?.confirmTimeRange, 'confirmTime') || {};
-    queryParams.value = proxy.addDateRangeNew(queryParams.value, queryParams.value?.okTimeRange, 'okTime') || {};
-    queryParams.value = proxy.addDateRangeNew(queryParams.value, queryParams.value?.orderTimeRange, 'orderTime') || {};
-    return params;
+    // 1. 鏃ユ湡杞崲
+    let newParams = <any>{ ...params };
+    if (newParams) {
+      // 1. 瀹氫箟鏃ユ湡瀛楁鏄犲皠 (鏁扮粍鍚� : 鎺ュ彛闇�瑕佺殑鍓嶇紑)
+      // 杩欐牱鍐欑殑濂藉鏄細濡傛灉浣犳湁澶氫釜鏃ユ湡锛岀洿鎺ュ湪杩欓噷娣诲姞涓�琛屽嵆鍙�
+      const dateMap = {
+        confirmTimeRangeArray: 'confirmTimeRange',
+        createTimeRangeArray: 'createTime',
+        updateTimeRangeArray: 'updateTimeRange',
+        okTimeRangeArray: 'okTime',
+        orderTimeRangeArray: 'orderTime'
+      };
+
+      // 2. 閬嶅巻澶勭悊鏃ユ湡
+      Object.keys(dateMap).forEach(arrayKey => {
+        const prefix = dateMap[arrayKey];
+        const range = newParams[arrayKey];
+
+        if (Array.isArray(range) && range.length > 0) {
+          // 璧嬪�� Begin 鍜� End
+          newParams[`${prefix}Begin`] = range[0];
+          newParams[`${prefix}End`] = range[1];
+        }
+
+        // 銆愭牳蹇冩敼鍔ㄣ�戯細鏃犺鏄惁鏈夊�硷紝澶勭悊瀹屽悗閮芥妸鍘熷鐨� Array 瀛楁鍒犳帀
+        // 杩欐牱璇锋眰閲屽氨涓嶄細鍑虹幇 confirmTimeRangeArray: [...]
+        delete newParams[arrayKey];
+      });
+
+      // 3. 閫氱敤娓呮礂锛氬垹闄ゆ墍鏈夌┖瀛楃涓层�乶ull 鎴� undefined 鐨勫叾浠栧瓧娈�
+      Object.keys(newParams).forEach(key => {
+        const val = newParams[key];
+        if (val === '' || val === null || val === undefined) {
+          delete newParams[key];
+        }
+      });
+
+    } else {
+      newParams = {};
+    }
+
+    return newParams;
+    // newParams = proxy.addDateRangeNew(queryParams.value, queryParams.value?.createTimeRangeArray, 'createTime');
+    // newParams = proxy.addDateRangeNew(queryParams.value, queryParams.value?.updateTimeRangeArray, 'updateTime');
+    // newParams = proxy.addDateRangeNew(queryParams.value, queryParams.value?.confirmTimeRangeArray, 'confirmTime');
+    // newParams = proxy.addDateRangeNew(queryParams.value, queryParams.value?.okTimeRangeArray, 'okTime');
+    // newParams =  proxy.addDateRangeNew(queryParams.value, queryParams.value?.orderTimeRangeArray, 'orderTime');
+
+    // delete newParams.createTimeRangeArray;
+    // delete newParams.updateTimeRangeArray;
+    // delete newParams.confirmTimeRangeArray;
+    // delete newParams.okTimeRangeArray;
+    // delete newParams.orderTimeRangeArray;
+
+
+
+
+    // delete newParams.updateTimeArray;
+    // delete newParams.businessTimeArray;
+    // delete newParams.payableConfirmTimeArray;
+
+    queryParams.value = newParams;
+    return newParams;
   },
   handleBeforeOpenFunc: (type: string) => {
     if (type == 'add') {
@@ -3047,7 +3288,6 @@
 const handleUploadItinerary = (row: any) => {
   optionType.value = 'addItinerary';
   boxFormOption.value = itineraryOption.value;
-  console.log(itineraryOption.value);
 
   boxTableOption.value = itineraryTableOption.value;
   listTmsTrip({ dispatchOrderId: row.id, pageNum: 1, pageSize: 999 }).then(res => {
@@ -3063,7 +3303,6 @@
       vehicleNumber: row.licensePlate,
       vehicleId: row.vehicleId,
     }
-    console.log(boxForm.value);
 
   })
 }
@@ -3334,7 +3573,7 @@
 }
 
 const submitForm3 = () => {
-  updateTmsDispatchOrder(actualForm.value).then(res => {
+  tmsDispatchOrderRecord(actualForm.value).then(res => {
     ElMessage({
       message: "鎿嶄綔鎴愬姛锛�",
       type: 'success'
@@ -3707,7 +3946,6 @@
                   form2.value.districtId = districtCode;
                   form2.value.streetId = townshipCode;
                   form2.value.dispatchTransportArea = params.regeocode.formatted_address || params.regeocode.formattedAddress;
-                  console.log(form2.value, "form2")
                 }
               });
             }
@@ -3916,7 +4154,6 @@
 getQuotationItems();
 
 const getTabData = (val: string) => {
-  console.log(val)
   let filter = quotationItems.value.filter((item: any) => {
     return item.remark == val;
   });
@@ -3934,9 +4171,7 @@
     dispatchOrderId: form.value.id, financeType: 2,
     pageNum: 1, pageSize: 999
   }).then(async res => {
-
     boxTableData.value = res.rows || [];
-
     boxForm.value = {
       dispatchOrderId: form.value.id,
       dataSource: 0,
@@ -3963,7 +4198,7 @@
     //boxForm.value.rowItems = boxTableData.value;
     // console.log(tmsFinanceDetails.value);
     // console.log(boxForm.value);
-// 1. 鎻愬彇濉啓浜嗛噾棰濈殑鏁版嵁锛堥噾棰濆ぇ浜�0锛�
+    // 1. 鎻愬彇濉啓浜嗛噾棰濈殑鏁版嵁锛堥噾棰濆ぇ浜�0锛�
     const validDetails = tmsFinanceDetails.value.filter(item => item.actualFeeAmount && item.actualFeeAmount > 0);
 
     if (validDetails.length === 0) {
@@ -3980,8 +4215,12 @@
 
     // 3. 澶勭悊鍑瘉 URL (濡傛灉鏈夊崟寮犳垨澶氬紶涓婁紶鐨勯�昏緫)
     // 鍋囪鍚庣闇�瑕佺殑鏄�楀彿鍒嗛殧鐨勫瓧绗︿覆
-    const submitData = validDetails.map(item => {
+    const submitData = validDetails.map((item: any) => {
       let url = item.voucherUrl;
+      item.dispatchOrderId = form.value.id;
+      item.financeType = 2;
+      item.status = 0;
+      item.dataSource = 1;
       if (Array.isArray(url)) {
         url = url.join(',');
       }
@@ -3994,8 +4233,8 @@
         message: "鎿嶄綔鎴愬姛锛�",
         type: 'success'
       })
-        open4.value = false;
-        onLoad(page.value)
+      open4.value = false;
+      onLoad(page.value)
       boxFormRef.value?.resetFields();
       getTab4Data();
     })
@@ -4542,13 +4781,12 @@
     },
     {
 
-      label: '璐圭敤鍑瘉',
+      label: '璐圭敤鍑瘉2',
       display: true,
       span: 24,
       accept: 'string', dataType: 'object',
       type: 'upload',
       // action: '/common/upload2',
-
       prop: 'voucherUrl', // 杩欓噷鏀规垚 prop 灞炴��
       slot: true,        // 寮�鍚彃妲�
       width: 200
@@ -4562,6 +4800,7 @@
 });
 // 3. 鍥炴樉鍒濆鍖�
 const initExpenditureData = () => {
+  tmsFinanceDetails.value = []
   if (fee_type.value && fee_type.value.length > 0 && tmsFinanceDetails.value.length === 0) {
     tmsFinanceDetails.value = fee_type.value.map(item => ({
       feeType: item.value,
@@ -4579,18 +4818,39 @@
     initExpenditureData();
   }
 });
-const handleUploadAfter = (res, done, loading, column, row) => {
+const handleUploadAfter = (res: any, row: any) => {
   // res 鏄帴鍙h繑鍥炵殑瀹屾暣鏁版嵁
-  if (res && res.url) {
+  if (res.code === 200) {
     // 鎵嬪姩缁欒繖涓�琛岀殑鏁版嵁璧嬪��
-    row.voucherUrl = res.url;
-    console.log('涓婁紶鎴愬姛锛屽綋鍓嶈鏁版嵁锛�', row);
+    row.voucherUrl = res.data.url;
   } else if (res.data && res.data.url) {
     // 濡傛灉杩斿洖鐨勬暟鎹寘瑁瑰湪 data 閲�
     row.voucherUrl = res.data.url;
   }
-  done(); // 蹇呴』璋冪敤 done 缁撴潫涓婁紶鐘舵��
 };
+/** 褰撴枃浠惰秴鍑洪檺鍒舵椂锛堝疄鐜拌嚜鍔ㄦ浛鎹㈤�昏緫锛� */
+const handleExceed = (files: any, row: any) => {
+  // 1. 娓呴櫎褰撳墠鏄剧ず鐨勬枃浠跺垪琛�
+  uploadRef.value.clearFiles();
+  // 2. 鎵嬪姩鎶婃柊閫夋嫨鐨勬枃浠舵坊鍔犺繘鍘婚噸鏂颁笂浼�
+  const file = files[0];
+  uploadRef.value.handleStart(file);
+  uploadRef.value.submit();
+};
+
+const flowLogIshow = ref()
+const flowParams = ref([])
+
+const handleFlow = (row: string) => {
+  let data = {
+    headId: row.id,
+  }
+  listTmsDispatchOrderLog(data).then((res) => {
+    flowParams.value = res.rows
+    flowLogIshow.value.openModel()
+
+  })
+}
 </script>
 <style lang="scss" scoped>
 ::v-deep .cydprint .el-dialog__body {
@@ -4662,7 +4922,78 @@
   padding: 1px 11px;
   box-shadow: 0 0 0 1px var(--el-disabled-border-color) inset;
 }
-.link-btn{
+
+.link-btn {
   font-size: 18px;
 }
+
+/*  */
+/* 鐜版湁鐨勬牱寮忎繚鎸佷笉鍙�... */
+.specific-drag-area {
+  width: 100%;
+
+  :deep(.full-width-drag) {
+
+    // 1. 鏍稿績锛氶殣钘� Avue 榛樿鍦� dragger 涓嬫柟鐢熸垚鐨勯偅涓�滅偣鍑讳笂浼犫�濇寜閽�
+    // 鍦� 3.x 鐗堟湰涓紝瀹冩槸 el-upload 鍚庣殑涓�涓厔寮熻妭鐐规垨鑰呮槸鍐呴儴鑺傜偣
+    .el-button--primary {
+      display: none !important;
+    }
+
+    .el-upload {
+      width: 100%;
+      display: block; // 纭繚鍧楃骇鏄剧ず
+
+      .el-upload-dragger {
+        width: 100%;
+        height: 120px;
+        background-color: #fcfdfe;
+        border: 2px dashed #dcdfe6;
+        border-radius: 8px;
+        display: flex;
+        flex-direction: column;
+        align-items: center;
+        justify-content: center;
+        padding: 0 !important;
+
+        // 瑕嗙洊 Element Plus 榛樿鐨勫唴閮ㄦ枃瀛楁帓鐗堬紝闃叉鍐茬獊
+        .el-upload__text {
+          display: none !important;
+        }
+
+        &:hover {
+          border-color: #409eff;
+          background-color: #f5f7fa;
+        }
+      }
+    }
+  }
+
+  // 3. 鑷畾涔夊唴瀹圭殑鏍峰紡锛堢‘淇濆畠涓嶈 display:none 褰卞搷锛�
+  .drag-zone-inner {
+    pointer-events: none;
+    text-align: center;
+
+    .upload-icon {
+      font-size: 32px !important;
+      color: #909399;
+      margin-bottom: 8px;
+    }
+
+    .drag-text {
+      .main-title {
+        font-size: 14px;
+        color: #606266;
+        font-weight: bold;
+        line-height: 1.5;
+      }
+
+      .sub-title {
+        font-size: 12px;
+        color: #a8abb2;
+        margin-top: 4px;
+      }
+    }
+  }
+}
 </style>

--
Gitblit v1.8.0