*/ public function columns(string $datasetKey): array { $columns = []; foreach ((array) $this->datasets->definitionValue($datasetKey, 'followed_columns', []) as $column) { $column = trim((string) $column); if ($column !== '' && ! str_starts_with($column, '_mirror')) { $columns[] = $column; } } return array_values(array_unique($columns)); } /** * 给页面字段列表补上自动跟随进来的列(字段名与标签都用上游列名)。 * * @param list> $fields * @return list> */ public function appendFields(string $datasetKey, array $fields): array { $existing = array_map(static fn (array $field): string => (string) ($field['name'] ?? ''), $fields); foreach ($this->columns($datasetKey) as $column) { if (in_array($column, $existing, true)) { continue; } $fields[] = ['name' => $column, 'label' => $column, 'followed' => true]; } return $fields; } }