From 69eefc78e21955d0e2b8afdd8acf26d353cd2a08 Mon Sep 17 00:00:00 2001
From: wujianwei <wjw@11.com>
Date: 星期一, 12 一月 2026 15:41:17 +0800
Subject: [PATCH] 修改发票新增
---
ui/admin-ui3/src/views/cwgl/dispatchOrder/index.vue | 416 +++++++++++++++++++++++++++++++++++-----------------------
1 files changed, 249 insertions(+), 167 deletions(-)
diff --git a/ui/admin-ui3/src/views/cwgl/dispatchOrder/index.vue b/ui/admin-ui3/src/views/cwgl/dispatchOrder/index.vue
index c14494e..2cc278c 100644
--- a/ui/admin-ui3/src/views/cwgl/dispatchOrder/index.vue
+++ b/ui/admin-ui3/src/views/cwgl/dispatchOrder/index.vue
@@ -1,79 +1,50 @@
<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="handleExport"
- v-hasPermi="['cwgl:dispatchOrder:export']"
- >鐢熸垚鍙拌处鎶ヨ〃
+ <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 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 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"
- >
+ <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"
- :table-loading="itemTableLoading2"
- >
+ <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>
@@ -86,15 +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 { 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(() => {
@@ -114,27 +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,
+ open1: false,
+ open2: false,
+ itemTableLoading1: false,
+ itemTableLoading2: false,
})
-const {queryParams, form, page, selectionList, itemTableData1, itemTableData2, open1, open2, itemTableLoading1, itemTableLoading2} = 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: {
- fixed:'left',
- label: '璋冨害鍗曞彿',search:true,minWidth: 180,
+ fixed: 'left',
+ label: '璋冨害鍗曞彿', search: true, minWidth: 180,
rules: [
{
required: true,
@@ -143,83 +125,86 @@
],
},
transportMode: {
- label: '杩愯緭鏂瑰紡',width: 120,
+ label: '杩愯緭鏂瑰紡', width: 120,
},
productName: {
- label: '鏈嶅姟浜у搧鍚嶇О',width: 120,showOverflowTooltip: true
+ label: '鏈嶅姟浜у搧鍚嶇О', width: 120, showOverflowTooltip: true
+ },
+ customerName: {
+ label: '瀹㈡埛鍚嶇О', search: true, minWidth: 220, showOverflowTooltip: true
},
carrierName: {
- label: '鎵胯繍鍟�',search:true,width: 200,showOverflowTooltip: true
+ label: '鎵胯繍鍟�', search: true, minWidth: 220, showOverflowTooltip: true
},
departureLocationName: {
- label: '鍑哄彂鍦板悕绉�',width: 210,showOverflowTooltip: true
+ label: '鍑哄彂鍦板悕绉�', minWidth: 220, showOverflowTooltip: true
},
arrivalLocationName: {
- label: '鐩殑鍦板悕绉�',width: 200,showOverflowTooltip: true
+ 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: 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,
- },
+ // 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: '鍒涘缓浜�',
// },
@@ -270,11 +255,10 @@
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;
@@ -286,18 +270,27 @@
menu: false,
header: false,
column: {
- packageTrackingNo: {
- label: '璐圭敤绫诲瀷',minWidth: 180,fixed: 'left'
+ feeItem: {
+ label: '璐圭敤绫诲瀷', minWidth: 180, fixed: 'left'
},
- ys: {
- label: '搴旀敹璐圭敤',minWidth: 180,
+ receivableFee: {
+ label: '搴旀敹璐圭敤', minWidth: 180,
},
- yf: {
- label: '搴斾粯璐圭敤',minWidth: 180,
+ receivableFeeCurrency: {
+ label: '搴旀敹甯佸埗绫诲瀷', minWidth: 180,
},
- isFY: {
- 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',
+ },
+
}
})
@@ -307,31 +300,105 @@
menu: false,
header: false,
column: {
- packageTrackingNo: {
- label: '璐圭敤绫诲瀷',minWidth: 180,fixed: 'left'
+ feeItem: {
+ label: '璐圭敤绫诲瀷', minWidth: 180, fixed: 'left'
},
- ys: {
- label: '閲戦',minWidth: 180,
+ account: {
+ label: '閲戦', minWidth: 180,
},
- yf: {
- label: '甯佸��',minWidth: 180,
+ currency: {
+ label: '甯佸��', minWidth: 180,
},
- isFY: {
- label: '鍥剧墖',minWidth: 180,
+ imageUrl: {
+ label: '鍥剧墖',
+ prop: 'img',
+ dataType: 'string',
+ type: 'img'
},
+
}
})
-const handleFy = (row:DispatchOrderI) => {
- open1.value = true;
+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 handleFj = (row:DispatchOrderI) => {
- 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>
@@ -340,4 +407,19 @@
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