diff --git a/public/img/文件夹.png b/public/img/文件夹.png new file mode 100644 index 0000000..27e2f81 Binary files /dev/null and b/public/img/文件夹.png differ diff --git a/src/api/business/process-config.js b/src/api/business/process-config.js index a43262c..a8aa28e 100644 --- a/src/api/business/process-config.js +++ b/src/api/business/process-config.js @@ -13,11 +13,14 @@ export const getDetail = (id, waybillId) => ...(waybillId === undefined ? {} : { waybillId }), }, }); -export const getVoucherImages = waybillId => +export const getVoucherImages = (waybillId, params = {}) => request({ url: '/blade-transport/process-config/voucher-images', method: 'get', - params: { waybillId }, + params: { + waybillId, + ...params, + }, }); export const submit = api.submit; export const remove = api.remove; diff --git a/src/api/business/voucher-manage.js b/src/api/business/voucher-manage.js index b4a3152..2b65bfe 100644 --- a/src/api/business/voucher-manage.js +++ b/src/api/business/voucher-manage.js @@ -26,6 +26,8 @@ export const replaceFolderByObject = (voucherId, plateNo, fileInfo) => export const removeFolder = (voucherId, plateNo) => request({ url: `${baseUrl}/folder-remove`, method: 'post', params: { voucherId, plateNo } }); export const submit = data => request({ url: `${baseUrl}/submit`, method: 'post', data }); +export const changeWaybillBatch = data => + request({ url: `${baseUrl}/change-waybill-batch`, method: 'post', data }); export const createUploadDraft = data => request({ url: `${baseUrl}/upload-draft`, method: 'post', data }); export const completeUploadFile = data => diff --git a/src/views/business/components/waybill-manage-page.vue b/src/views/business/components/waybill-manage-page.vue index 8b08153..3e5c39c 100644 --- a/src/views/business/components/waybill-manage-page.vue +++ b/src/views/business/components/waybill-manage-page.vue @@ -1949,18 +1949,61 @@ label="批量补录" name="batchSupplement" > +
+ + 返回文件夹 + + {{ waybillVoucherFolderName(waybillVoucherFolder) }} +
- + +
+ {{ waybillVoucherFolderName(image) }} +
{ this.waybillVoucherImages = extractRecords(res); + this.waybillVoucherFolders = this.waybillVoucherImages.filter(item => + this.isWaybillVoucherFolder(item) + ); + this.waybillVoucherFolder = null; + this.waybillVoucherFolderView = false; if (this.waybillVoucherImages.length) this.waybillHasRelatedVoucher = true; this.waybillVoucherImagesLoaded = true; }) @@ -4229,11 +4283,49 @@ export default { this.waybillVoucherImagesLoading = false; }); }, + isWaybillVoucherFolder(item) { + return Boolean(item && (item.isFolder === true || item.type === 'folder')); + }, + waybillVoucherFolderName(folder) { + return folder?.folderName || folder?.name || folder?.plateNo || '凭证文件夹'; + }, + openWaybillVoucherFolder(folder) { + if (!this.detailRow.id || !this.isWaybillVoucherFolder(folder)) return; + if (!folder.voucherId || !folder.folderName) { + this.$message.warning('凭证文件夹信息不完整'); + return; + } + this.waybillVoucherImagesLoading = true; + getProcessConfigVoucherImages(this.detailRow.id, { + voucherId: folder.voucherId, + folderName: folder.folderName, + }) + .then(res => { + this.waybillVoucherFolder = folder; + this.waybillVoucherImages = extractRecords(res).filter( + item => !this.isWaybillVoucherFolder(item) + ); + this.waybillVoucherFolderView = true; + }) + .finally(() => { + this.waybillVoucherImagesLoading = false; + }); + }, + backToWaybillVoucherFolders() { + this.waybillVoucherImages = [...this.waybillVoucherFolders]; + this.waybillVoucherFolder = null; + this.waybillVoucherFolderView = false; + }, previewWaybillVoucherImage(index) { - this.attachmentImagePreviewUrls = this.waybillVoucherImages + const imageRows = this.waybillVoucherImages.filter( + image => !this.isWaybillVoucherFolder(image) + ); + const currentImage = this.waybillVoucherImages[index]; + const imageIndex = imageRows.findIndex(image => image === currentImage); + this.attachmentImagePreviewUrls = imageRows .map(image => image.url) .filter(Boolean); - this.attachmentImagePreviewIndex = index; + this.attachmentImagePreviewIndex = imageIndex >= 0 ? imageIndex : 0; this.attachmentImagePreviewVisible = this.attachmentImagePreviewUrls.length > 0; }, buildWaybillRouteNodes(rows = []) { @@ -8984,6 +9076,7 @@ export default { } &__voucher-image-item { + position: relative; aspect-ratio: 1; overflow: hidden; cursor: pointer; @@ -8995,6 +9088,42 @@ export default { width: 100%; height: 100%; } + + &--folder { + display: flex; + flex-direction: column; + align-items: center; + justify-content: center; + gap: 6px; + padding: 12px; + background: #fff; + + .el-image { + width: 64px; + height: 64px; + flex: none; + } + } + } + + &__voucher-folder-toolbar { + display: flex; + align-items: center; + gap: 8px; + min-height: 32px; + margin-bottom: 8px; + color: #606266; + font-size: 13px; + } + + &__voucher-folder-name { + width: 100%; + overflow: hidden; + color: #606266; + font-size: 13px; + text-align: center; + text-overflow: ellipsis; + white-space: nowrap; } &__route-change-dialog { diff --git a/src/views/business/project-apply.vue b/src/views/business/project-apply.vue index a176e10..96f3623 100644 --- a/src/views/business/project-apply.vue +++ b/src/views/business/project-apply.vue @@ -1389,7 +1389,7 @@ export default { this.page.total = result.total || 0; this.data = result.records || []; this.selectionClear(); - this.refreshFundRiskStats({ ...params, ...this.query, allDept: this.allDept }); + // this.refreshFundRiskStats({ ...params, ...this.query, allDept: this.allDept }); }) .finally(() => { this.loading = false; diff --git a/src/views/business/voucher-manage-detail.vue b/src/views/business/voucher-manage-detail.vue index 93851ab..5b68a91 100644 --- a/src/views/business/voucher-manage-detail.vue +++ b/src/views/business/voucher-manage-detail.vue @@ -22,7 +22,7 @@ - +
@@ -39,15 +39,23 @@