diff --git a/packages/order-system/src/views/dashboard/components/rebate/OrderDetailList.vue b/packages/order-system/src/views/dashboard/components/rebate/OrderDetailList.vue
index 2b40a0b37..c73cef239 100644
--- a/packages/order-system/src/views/dashboard/components/rebate/OrderDetailList.vue
+++ b/packages/order-system/src/views/dashboard/components/rebate/OrderDetailList.vue
@@ -16,7 +16,10 @@ export default {
data() {
return {
loading: false,
+ // 最终选中的“明细行”列表(与之前保持一致:emit 给父组件的是明细数组)
selectedList: [],
+ // 按 ordersNo 记录已选明细,用于 expand 展开后回显
+ selectedByOrdersNo: {},
queryParams: {
pageNum: 1,
pageSize: 20
@@ -24,14 +27,66 @@ export default {
};
},
computed: {
- // 选择的货物列表
- filterSelectedList() {
- return this.orderDetailList;
+ /**
+ * 将接口返回的订单明细按 ordersNo 合并为“同车一行”,明细放在 details 中
+ * - ordersNo 相同:认为同一车/同一订单组
+ * - 保留首条记录的公共字段用于汇总展示
+ */
+ groupedOrderList() {
+ const list = this.orderDetailList || [];
+ const map = {};
+ const keyOrder = [];
+
+ list.forEach(item => {
+ const key = item && item.ordersNo ? String(item.ordersNo) : '未知订单';
+ if (!map[key]) {
+ map[key] = {
+ ordersNo: key,
+ orderDate: item?.orderDate,
+ customer: item?.customer,
+ supplier: item?.supplier,
+ levelName: item?.levelName,
+ countingUnit: item?.countingUnit,
+ details: []
+ };
+ keyOrder.push(key);
+ }
+ map[key].details.push(item);
+ });
+
+ return keyOrder.map(key => {
+ const group = map[key];
+ return {
+ ...group,
+ detailCount: (group.details || []).length
+ };
+ });
+ }
+ },
+ watch: {
+ // 数据源变化(重新查询/翻页)时,保持与旧行为一致:清空选择
+ orderDetailList() {
+ this.selectedList = [];
+ this.selectedByOrdersNo = {};
}
},
methods: {
- handleSelectionChange(selection) {
- this.selectedList = selection;
+ // 明细选择变化:按 ordersNo 维护,再汇总到 selectedList
+ handleInnerSelectionChange(ordersNo, selection) {
+ const key = ordersNo ? String(ordersNo) : '未知订单';
+ this.$set(this.selectedByOrdersNo, key, selection || []);
+ const all = Object.keys(this.selectedByOrdersNo).reduce((acc, k) => {
+ return acc.concat(this.selectedByOrdersNo[k] || []);
+ }, []);
+ // 去重(同一明细不会重复,但防御性处理)
+ const uniqMap = {};
+ this.selectedList = all.filter(item => {
+ const id = item && item.id;
+ if (id === null || id === undefined) return false;
+ if (uniqMap[id]) return false;
+ uniqMap[id] = true;
+ return true;
+ });
},
submitSelectOrderDetail() {
this.$emit('handleSelect', this.selectedList);
@@ -39,6 +94,21 @@ export default {
// 对货物进行查询和筛选
handleQuery() {
this.$emit('handleQuery', this.queryParams);
+ },
+ // 展开行变化后回显已选明细
+ handleExpandChange(row, expandedRows) {
+ const ordersNo = row?.ordersNo ? String(row.ordersNo) : '未知订单';
+ this.$nextTick(() => {
+ const ref = this.$refs[`innerTable_${ordersNo}`];
+ const table = Array.isArray(ref) ? ref[0] : ref;
+ if (!table) return;
+
+ const selected = this.selectedByOrdersNo[ordersNo] || [];
+ table.clearSelection();
+ (selected || []).forEach(item => {
+ table.toggleRowSelection(item, true);
+ });
+ });
}
}
};
@@ -72,7 +142,7 @@ export default {
v-horizontal-scroll="'always'"
v-loading="loading"
border
- :data="filterSelectedList"
+ :data="groupedOrderList"
:cell-style="
() => {
return { padding: '.5px' };
@@ -80,32 +150,57 @@ export default {
"
max-height="700"
size="mini"
- @selection-change="handleSelectionChange"
+ row-key="ordersNo"
+ @expand-change="handleExpandChange"
>
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
+
-
- {{ scope.row.isIncludeTaxFactory }}
-
+ handleInnerSelectionChange(scope.row.ordersNo, val)"
+ >
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ {{ detailScope.row.isIncludeTaxFactory === 0 ? '否' : '是' }}
+
+
+
+
-
-
+
+
+
+
+
+
+
+