$filters * @return array */ protected function withLedgerRemarkFilter(array $filters, string $tab): array { $remark = trim((string) ($filters['ledger_remark'] ?? '')); if ($remark === '') { return $filters; } $groups = $this->ledgerRemarkMap()->billItemGroupsForTab($tab, $remark); $filters['bill_item_groups'] = $groups; $items = []; foreach ($groups as $group) { foreach ($group['items'] as $item) { $items[$item] = true; } } $filters['bill_items'] = array_keys($items); if ($filters['bill_items'] === []) { $filters['bill_items'] = [self::LEDGER_REMARK_NO_MATCH_ITEM]; } return $filters; } /** * 分页结果(含 data 行数组)补总账备注。 * * @param array $data * @return array */ protected function withLedgerRemarks(array $data, string $tab): array { if (! empty($data['data']) && is_array($data['data'])) { $map = $this->ledgerRemarkMap(); $data['data'] = array_map( static fn (mixed $row): mixed => is_array($row) ? $map->decorate($row, $tab) : $row, $data['data'], ); } return $data; } /** * 导出/流式行补总账备注。 * * @param iterable> $rows * @return iterable> */ protected function ledgerRemarkRows(iterable $rows, string $tab): iterable { return $this->ledgerRemarkMap()->decorateAll($rows, $tab); } }