From c7f432f6875e6295796f39abcdd1017358048506 Mon Sep 17 00:00:00 2001 From: weizong song Date: Tue, 11 Aug 2026 22:27:47 +0800 Subject: [PATCH] =?UTF-8?q?=E6=89=B9=E9=87=8F=E6=8E=92=E5=BA=8F?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/api/budget/budgetCollectionPackage.js | 9 +++ src/views/budget/collection/package.vue | 99 +++++++++++++++++++++++ 2 files changed, 108 insertions(+) diff --git a/src/api/budget/budgetCollectionPackage.js b/src/api/budget/budgetCollectionPackage.js index 01c2433..507e962 100644 --- a/src/api/budget/budgetCollectionPackage.js +++ b/src/api/budget/budgetCollectionPackage.js @@ -57,6 +57,15 @@ export function batchDeleteBudgetCollectionPackage(ids) { }) } +// 批量保存当前年度预算包的排序值 +export function batchUpdateBudgetCollectionPackageSortOrder(yearId, items) { + return request({ + url: `${BUDGET_API_PREFIX}/budget-collection-package/batch-update-sort-order`, + method: 'post', + data: { year_id: yearId, items } + }) +} + // 手工重新计算单个大包的自动汇总金额 export function recalculateBudgetCollectionPackageAmount(id) { return request({ diff --git a/src/views/budget/collection/package.vue b/src/views/budget/collection/package.vue index c4a9e37..328e647 100644 --- a/src/views/budget/collection/package.vue +++ b/src/views/budget/collection/package.vue @@ -33,6 +33,7 @@ + @@ -850,6 +851,34 @@ + + +
+ 按同级排序值从小到大展示;可集中修改后一次性保存。排序值相同则按创建顺序排列。 +
+ + + + + + + + + + + + +
+ { + const safeItems = items || [] + safeItems.forEach(item => { + rows.push({ + id: item.id, + name: item.name, + level: item.level || depth, + sort_order: Number(item.sort_order) > 0 ? Number(item.sort_order) : 1 + }) + flatten(item.children, depth + 1) + }) + } + flatten(tree) + + if (!rows.length) { + this.$Message.warning('当前年度暂无可排序的预算包') + return + } + + this.batchSortRows = rows + this.batchSortDialogVisible = true + } catch (error) { + console.error('加载批量排序数据失败:', error) + this.$Message.error('加载批量排序数据失败') + } + }, + + async submitBatchSort() { + const invalidRow = this.batchSortRows.find(item => !Number.isInteger(Number(item.sort_order)) || Number(item.sort_order) < 1) + if (invalidRow) { + this.$Message.warning(`“${invalidRow.name}”的排序值必须是大于 0 的整数`) + return + } + + this.batchSortSubmitting = true + try { + const items = this.batchSortRows.map(item => ({ + id: item.id, + sort_order: Number(item.sort_order) + })) + const response = await batchUpdateBudgetCollectionPackageSortOrder(this.searchFields.year_id, items) + const result = response && response.data ? response.data : response + this.$Message.success(`排序已保存,共更新 ${(result && result.updated_count) || 0} 条记录`) + this.batchSortDialogVisible = false + this.load() + } catch (error) { + console.error('批量保存排序失败:', error) + this.$Message.error('批量保存排序失败') + } finally { + this.batchSortSubmitting = false + } + }, + batchDelete() { if (this.selectedRows.length === 0) { this.$Message.warning('请选择要删除的记录')