From b3540bbb650eda7ce2a846709ccdf84af2992fb3 Mon Sep 17 00:00:00 2001
From: sen <sen@qq.com>
Date: 星期三, 10 九月 2025 11:25:16 +0800
Subject: [PATCH] 增加过期时间

---
 ui/admin-ui3/src/views/cwgl/dispatchOrder/index.vue |  416 +++++++++++++++++++++++++++++++++++++++++++----------------
 1 files changed, 302 insertions(+), 114 deletions(-)

diff --git a/ui/admin-ui3/src/views/cwgl/dispatchOrder/index.vue b/ui/admin-ui3/src/views/cwgl/dispatchOrder/index.vue
index 3752ace..2cc278c 100644
--- a/ui/admin-ui3/src/views/cwgl/dispatchOrder/index.vue
+++ b/ui/admin-ui3/src/views/cwgl/dispatchOrder/index.vue
@@ -1,37 +1,51 @@
 <template>
   <basicContainer>
-    <avue-crud
-        :option="option"
-        :table-loading="pageF.loading"
-        :data="tableData"
-        :page="page"
-        :permission="permissionList"
-        :before-open="beforeOpen"
-        v-model="form"
-        ref="crudRef"
-        @row-update="rowUpdate"
-        @row-save="rowSave"
-        @refresh-change="refreshChange"
-        @row-del="rowDel"
-        @search-change="searchChange"
-        @search-reset="searchReset"
-        @selection-change="selectionChange"
-        @current-change="currentChange"
-        @size-change="sizeChange"
-        @on-load="onLoad"
-    >
+    <avue-crud :option="option" :table-loading="pageF.loading" :data="tableData" :page="page"
+      :permission="permissionList" :before-open="beforeOpen" v-model="form" ref="crudRef" @row-update="rowUpdate"
+      @row-save="rowSave" @refresh-change="refreshChange" @row-del="rowDel" @search-change="searchChange"
+      @search-reset="searchReset" @selection-change="selectionChange" @current-change="currentChange"   v-model:search="queryParams"
+      @size-change="sizeChange" @on-load="onLoad">
       <template #menu-left>
 
-        <el-button
-            type="warning"
-            plain
-            icon="Download"
-            @click="handleExport"
-            v-hasPermi="['cwgl:dispatchOrder:export']"
-        >瀵煎嚭
+        <el-button type="warning" plain icon="Download" @click="handleExport"
+          v-hasPermi="['cwgl:dispatchOrder:export']">瀵煎嚭
+        </el-button>
+        <el-button type="success" plain icon="Download" @click="handleExport2"
+          v-hasPermi="['cwgl:dispatchOrder:export']">鐢熸垚鍙拌处鎶ヨ〃
         </el-button>
       </template>
+      <template #menu="{ size, row, index }">
+        <el-link class="link-btn" type="primary" :underline="false" plain :size="size" icon="View"
+          @click="handleFy(row)" v-hasPermi="['cwgl:dispatchOrder:query']"> 鏌ョ湅璐圭敤
+        </el-link>
+        <el-link class="link-btn" type="primary" :underline="false" plain icon="View" @click="handleFj(row)"
+          v-hasPermi="['cwgl:dispatchOrder:query']"> 鏌ョ湅闄勪欢
+        </el-link>
+      </template>
     </avue-crud>
+    <el-dialog title="鏌ョ湅璐圭敤" v-model="open1" class="avue-dialog avue-dialog--top" width="60%">
+      <avue-crud :option="itemTableOption1" :data="itemTableData1" :table-loading="itemTableLoading1">
+
+      </avue-crud>
+    </el-dialog>
+    <el-dialog title="鏌ョ湅闄勪欢" v-model="open2" class="avue-dialog avue-dialog--top" width="60%">
+
+      <avue-crud :option="itemTableOption2" :data="itemTableData2" :page="pageAttachment"
+        :table-loading="itemTableLoading2" @current-change="handleAttachmentCurrentChange"
+        @size-change="handleAttachmentSizeChange">
+        <template #imageUrl="{ row }">
+          <el-image :src="row.imageUrl" style="width: 100px; height: 100px" fit="cover"
+            :preview-src-list="[row.imageUrl]" :preview-teleported="true" hide-on-click-modal
+            class="attachment-image" />
+        </template>
+      </avue-crud>
+      <template #footer>
+        <div class="dialog-footer">
+          <el-button type="primary" v-if="itemTableData2.length>0" @click="downPZ">涓嬭浇闄勪欢</el-button>
+        </div>
+      </template>
+
+    </el-dialog>
   </basicContainer>
 </template>
 
@@ -43,16 +57,17 @@
   exportDispatchOrder,
   getDispatchOrder,
   listDispatchOrder,
-  updateDispatchOrder
+  updateDispatchOrder, cwglDispatchOrderItem, cwglDispatchOrderattAchment, exportDispatchOrder2, downloadFJ
 } from "@/api/cwgl/dispatchOrder";
 import useCurrentInstance from "@/utils/useCurrentInstance";
-import {computed, reactive, ref, toRefs} from "vue";
-import {PagesInterface, PageQueryInterface} from "@/utils/globalInterface";
-import {usePagePlus} from "@/hooks/usePagePlus";
-import {hasPermission} from "@/utils/permissionUtils";
-import {useTableColumnWidth} from "@/hooks/useAvueTableWidths";
+import { computed, reactive, ref, toRefs } from "vue";
+import { PagesInterface, PageQueryInterface } from "@/utils/globalInterface";
+import { usePagePlus } from "@/hooks/usePagePlus";
+import { hasPermission } from "@/utils/permissionUtils";
+import {blobValidate} from "@/utils/ruoyi";
+import {saveAs} from "file-saver";
 
-const {proxy} = useCurrentInstance();
+const { proxy } = useCurrentInstance();
 const crudRef = ref();
 
 const permissionList = computed(() => {
@@ -72,20 +87,36 @@
     total: 0,
     currentPage: 1,
   },
+  pageAttachment: <PagesInterface>{
+    pageSize: 10,
+    total: 0,
+    currentPage: 1,
+  },
   selectionList: [],
+  itemTableData1: [],
+  itemTableData2: [],
+  open1: false,
+  open2: false,
+  itemTableLoading1: false,
+  itemTableLoading2: false,
 })
-const {queryParams, form, page, selectionList} = toRefs(data);
+const { queryParams, form, page, selectionList, itemTableData1, itemTableData2, open1, open2, itemTableLoading1, itemTableLoading2,
+  pageAttachment
+} = toRefs(data);
 const option = ref({
   pageKey: 'DispatchOrder',
   rowKey: 'id',
-  addBtn:false,
-  editBtn:false,
-  delBtn:false,
-  viewBtn:false,
-  selection:false,
+  addBtn: false,
+  editBtn: false,
+  delBtn: false,
+  viewBtn: false,
+  selection: false,
+  searchSpan: 5,
+  searchLabelWidth: 100,
   column: {
     dispatchNo: {
-      label: '璋冨害鍗曞彿',search:true,width: 120,
+      fixed: 'left',
+      label: '璋冨害鍗曞彿', search: true, minWidth: 180,
       rules: [
         {
           required: true,
@@ -94,83 +125,86 @@
       ],
     },
     transportMode: {
-      label: '杩愯緭鏂瑰紡',width: 120,
+      label: '杩愯緭鏂瑰紡', width: 120,
     },
     productName: {
-      label: '鏈嶅姟浜у搧鍚嶇О',width: 120,
+      label: '鏈嶅姟浜у搧鍚嶇О', width: 120, showOverflowTooltip: true
+    },
+    customerName: {
+      label: '瀹㈡埛鍚嶇О', search: true,  minWidth: 220, showOverflowTooltip: true
     },
     carrierName: {
-      label: '鎵胯繍鍟�',search:true,width: 120,
+      label: '鎵胯繍鍟�', search: true,  minWidth: 220, showOverflowTooltip: true
     },
     departureLocationName: {
-      label: '鍑哄彂鍦板悕绉�',width: 120,
+      label: '鍑哄彂鍦板悕绉�', minWidth: 220, showOverflowTooltip: true
     },
     arrivalLocationName: {
-      label: '鐩殑鍦板悕绉�',width: 120,
+      label: '鐩殑鍦板悕绉�',   minWidth: 220, showOverflowTooltip: true
     },
     licensePlateNumber: {
-      label: '杞︾墝',search:true,width: 120,
+      label: '杞︾墝', search: true, width: 120,
     },
     vehiclePlateId: {
-      label: '杞︽澘鍙�',width: 120,
+      label: '杞︽澘鍙�', width: 120,
     },
-    mainDriverName: {
-      label: '涓婚┚椹跺憳',width: 120,
-    },
-    assistantDriverName: {
-      label: '鍓┚椹跺憳',width: 120,
-    },
-    pointNum: {
-      label: '鎻愰�佽揣鐐规暟',width: 120,
-    },
-    quantity: {
-      label: '浠舵暟',width: 120,
-    },
-    actualDepartureTime: {
-      label: '瀹為檯鍑哄彂鏃堕棿',width: 180,
-    },
-    actualDepartureTimeRange: {
-      label: '瀹為檯鍑哄彂鏃堕棿',display: false,search: true, searchRange: true, type: 'date',
-      format: 'YYYY-MM-DD',hide: true,searchSpan: 6,searchLabelWidth: 110,
-      valueFormat: 'YYYY-MM-DD',
-    },
-    requiredArrivalTime: {
-      label: '瑕佹眰鍒拌揪鏃堕棿',width: 180,
-    },
-    requiredArrivalTimeRange: {
-      label: '瑕佹眰鍒拌揪鏃堕棿',display: false,search: true, searchRange: true, type: 'date',
-      format: 'YYYY-MM-DD',hide: true,searchSpan: 6,searchLabelWidth: 110,
-      valueFormat: 'YYYY-MM-DD',
-    },
-    actualArrivalTime: {
-      label: '瀹為檯鍒拌揪鏃堕棿',width: 180,
-    },
-    actualArrivalTimeRange: {
-      label: '瑕佹眰鍒拌揪鏃堕棿',display: false,search: true, searchRange: true, type: 'date',
-      format: 'YYYY-MM-DD',hide: true,searchSpan: 6,searchLabelWidth: 110,
-      valueFormat: 'YYYY-MM-DD',
-    },
-    beReturn: {
-      label: '鏄惁鍥炵▼',dataType:'string',width: 100,
-      type: 'select', dicUrl: '/system/dict/data/type/dispatch_order_status',
-    },
-    dispatchQuantity: {
-      label: '瀹炲彂浠舵暟',width: 100,
-    },
-    dispatchWeight: {
-      label: '瀹炲彂閲嶉噺',width: 100,
-    },
-    dispatchVolume: {
-      label: '瀹炲彂浣撶Н(绔嬫柟锛�',width: 100,
-    },
-    status: {
-      label: '鐘舵��',search: true,dataType:'string',width: 100,
-      type: 'select', dicUrl: '/system/dict/data/type/dispatch_order_status',
-    },
-    remark: {
-      label: '澶囨敞',width: 120,
-      type: 'textarea', minRows: 3, maxRows: 5,
-    },
+    // mainDriverName: {
+    //   label: '涓婚┚椹跺憳', width: 120,
+    // },
+    // assistantDriverName: {
+    //   label: '鍓┚椹跺憳', width: 120,
+    // },
+    // pointNum: {
+    //   label: '鎻愰�佽揣鐐规暟', width: 120,
+    // },
+    // quantity: {
+    //   label: '浠舵暟', width: 120,
+    // },
+    // actualDepartureTime: {
+    //   label: '瀹為檯鍑哄彂鏃堕棿', width: 180,
+    // },
+    // actualDepartureTimeRange: {
+    //   label: '瀹為檯鍑哄彂鏃堕棿', display: false, search: true, searchRange: true, type: 'date',
+    //   format: 'YYYY-MM-DD', hide: true, searchSpan: 5, searchLabelWidth: 120,
+    //   valueFormat: 'YYYY-MM-DD',
+    // },
+    // requiredArrivalTime: {
+    //   label: '瑕佹眰鍒拌揪鏃堕棿', width: 180,
+    // },
+    // requiredArrivalTimeRange: {
+    //   label: '瑕佹眰鍒拌揪鏃堕棿', display: false, search: true, searchRange: true, type: 'date',
+    //   format: 'YYYY-MM-DD', hide: true, searchSpan: 5, searchLabelWidth: 120,
+    //   valueFormat: 'YYYY-MM-DD',
+    // },
+    // actualArrivalTime: {
+    //   label: '瀹為檯鍒拌揪鏃堕棿', width: 180,
+    // },
+    // actualArrivalTimeRange: {
+    //   label: '瑕佹眰鍒拌揪鏃堕棿', display: false, search: true, searchRange: true, type: 'date',
+    //   format: 'YYYY-MM-DD', hide: true, searchSpan: 5, searchLabelWidth: 120,
+    //   valueFormat: 'YYYY-MM-DD',
+    // },
+    // beReturn: {
+    //   label: '鏄惁鍥炵▼', dataType: 'string', width: 100,
+    //   type: 'select', dicUrl: '/system/dict/data/type/dispatch_order_status',
+    // },
+    // dispatchQuantity: {
+    //   label: '瀹炲彂浠舵暟', width: 100,
+    // },
+    // dispatchWeight: {
+    //   label: '瀹炲彂閲嶉噺', width: 100,
+    // },
+    // dispatchVolume: {
+    //   label: '瀹炲彂浣撶Н(绔嬫柟锛�', width: 160,
+    // },
+    // status: {
+    //   label: '鐘舵��', search: true, dataType: 'string', width: 100,
+    //   type: 'select', dicUrl: '/system/dict/data/type/dispatch_order_status',
+    // },
+    // remark: {
+    //   label: '澶囨敞', width: 120,
+    //   type: 'textarea', minRows: 3, maxRows: 5,
+    // },
     // createBy: {
     //   label: '鍒涘缓浜�',
     // },
@@ -183,9 +217,9 @@
     // updateTime: {
     //   label: '淇敼鏃堕棿',
     // },
-    isDeleted: {
-      label: '鏄惁鍒犻櫎(0-鍚�,1-鏄�)',
-    },
+    // isDeleted: {
+    //   label: '鏄惁鍒犻櫎(0-鍚�,1-鏄�)',
+    // },
   }
 })
 
@@ -221,17 +255,171 @@
   handleUpdateFunc: () => {
     crudRef.value.rowEdit(selectionList.value[0]);
   },
-  getBeginListFunc(params:any = {}){
-    params = proxy.addDateRangeNew(params, params?.actualDepartureTimeRange, 'actualDepartureTime') || {};
-    params = proxy.addDateRangeNew(params, params?.requiredArrivalTimeRange, 'requiredArrivalTime') || {};
-    params = proxy.addDateRangeNew(params, params?.actualArrivalTimeRange, 'actualArrivalTime') || {};
-    return params;
+  getBeginListFunc() {
+    queryParams.value = proxy.addDateRangeNew(queryParams.value, queryParams.value?.actualDepartureTimeRange, 'actualDepartureTime') || {};
+    queryParams.value = proxy.addDateRangeNew(queryParams.value, queryParams.value?.requiredArrivalTimeRange, 'requiredArrivalTime') || {};
+    queryParams.value = proxy.addDateRangeNew(queryParams.value, queryParams.value?.actualArrivalTimeRange, 'actualArrivalTime') || {};
   },
   handleSelectionChangeFunc: (selection: any) => {
     selectionList.value = selection;
   }
 })
-useTableColumnWidth(option.value, crudRef); // 浣跨敤 Hook 绠$悊鍒楀
+const itemTableOption1 = ref({
+  addBtn: false,
+  selection: false,
+  menu: false,
+  header: false,
+  column: {
+    feeItem: {
+      label: '璐圭敤绫诲瀷', minWidth: 180, fixed: 'left'
+    },
+    receivableFee: {
+      label: '搴旀敹璐圭敤', minWidth: 180,
+    },
+    receivableFeeCurrency: {
+      label: '搴旀敹甯佸埗绫诲瀷', minWidth: 180,
+    },
+    actualFee: {
+      label: '搴斾粯璐圭敤', minWidth: 180,
+    },
+    actualFeeCurrency: {
+      label: '搴斾粯璐圭敤甯佸埗绫诲瀷', minWidth: 180,
+    },
+    isSettlement: {
+      label: '鏄惁鍙粯娆�', dataType: 'string', minWidth: 180,
+      type: 'select',
+      dicUrl: '/system/dict/data/type/sys_whether_type',
+    },
+   
+  }
+})
 
+const itemTableOption2 = ref({
+  addBtn: false,
+  selection: false,
+  menu: false,
+  header: false,
+  column: {
+    feeItem: {
+      label: '璐圭敤绫诲瀷', minWidth: 180, fixed: 'left'
+    },
+    account: {
+      label: '閲戦', minWidth: 180,
+    },
+    currency: {
+      label: '甯佸��', minWidth: 180,
+    },
+    imageUrl: {
+      label: '鍥剧墖',
+      prop: 'img',
+      dataType: 'string',
+      type: 'img'
+    },
+
+  }
+})
+
+
+
+const handleFy = (row: DispatchOrderI) => {
+
+  cwglDispatchOrderItem({ no: row.dispatchNo }).then((res: any) => {
+    if (res.code == 200) {
+      itemTableData1.value = res.data || [];
+      open1.value = true;
+    }
+  })
+}
+const pangeIshow = ref(false);
+const handleFj = (row: DispatchOrderI) => {
+   pageAttachment.value  ={
+    pageSize: 10,
+    pageNum: 1,
+    no:row.dispatchNo
+  }
+  pangeIshow.value = true;
+  cwglDispatchOrderattAchment(pageAttachment.value).then((res: any) => {
+    if (res.code == 200) {
+      itemTableData2.value = res.rows || [];
+      pageAttachment.value.total = res.total || 0;
+      open2.value = true;
+    }
+  })
+}
+
+// 澶勭悊闄勪欢鍒嗛〉椤电爜鍙樺寲
+const handleAttachmentCurrentChange = (currentPage: number) => {
+  pageAttachment.value.pageNum = currentPage;
+  loadAttachmentData();
+}
+
+// 澶勭悊闄勪欢鍒嗛〉澶у皬鍙樺寲
+const handleAttachmentSizeChange = (pageSize: number) => {
+  pageAttachment.value.pageSize = pageSize;
+  // pageAttachment.value.currentPage = 1; // 閲嶇疆鍒扮涓�椤�
+  loadAttachmentData();
+}
+
+// 鍔犺浇闄勪欢鏁版嵁鐨勫嚱鏁�
+const loadAttachmentData = () => {
+  itemTableLoading2.value = true;
+  cwglDispatchOrderattAchment({
+    no: pageAttachment.value.no,
+    pageNum:  pageAttachment.value.pageNum,
+    pageSize: pageAttachment.value.pageSize
+  }).then((res: any) => {
+    if (res.code == 200) {
+      itemTableData2.value = res.rows || [];
+      pageAttachment.value.total = res.total || 0;
+    }
+    itemTableLoading2.value = false;
+  }).catch(() => {
+    itemTableLoading2.value = false;
+  });
+}
+
+// 闄勪欢琛ㄦ牸鍔犺浇浜嬩欢
+const attachmentChange = () => {
+  // loadAttachmentData();
+}
+const handleExport2 =()=>{
+  queryParams.value = proxy.addDateRangeNew(queryParams.value, queryParams.value?.actualDepartureTimeRange, 'actualDepartureTime') || {};
+  queryParams.value = proxy.addDateRangeNew(queryParams.value, queryParams.value?.requiredArrivalTimeRange, 'requiredArrivalTime') || {};
+  queryParams.value = proxy.addDateRangeNew(queryParams.value, queryParams.value?.actualArrivalTimeRange, 'actualArrivalTime') || {};
+  exportDispatchOrder2(queryParams.value);
+}
+
+const downPZ =()=>{
+  downloadFJ({no:pageAttachment.value.no}).then(res=>{
+    console.log(res)
+      const blob = new Blob([res])
+    console.log(blob)
+      saveAs(blob, decodeURI(pageAttachment.value.no+"闄勪欢.pdf"))
+
+  })
+
+}
 
 </script>
+<style lang="scss" scoped>
+.avue-dialog .el-dialog__body {
+  padding: 20px 20px;
+  flex: 1;
+  overflow: scroll;
+}
+
+.attachment-image {
+  .el-image__preview {
+    z-index: 9999 !important;
+  }
+}
+
+:deep(.avue-crud__table) {
+  overflow-y: auto;
+}
+
+:deep(.el-scrollbar__bar.is-horizontal) {
+  pointer-events: auto;
+}
+
+</style>
\ No newline at end of file

--
Gitblit v1.8.0