CaiWuXiTong/app/Utilities/BusinessNavigation.php
yueyang b3e6f85934 流程数据导航、OA流程改名及分页选项 (#689)
把原流程明细移入流程数据分类并改名OA流程,支持每页 50/100/200 条。
2026-10-27 16:29:04 +08:00

94 lines
3.2 KiB
PHP

<?php
namespace App\Utilities;
class BusinessNavigation
{
/**
* Return the configured business navigation with this company's title overrides applied.
*/
public static function all(): array
{
$navigation = config('business_navigation', []);
$pageExtensions = (array) config('business_navigation_page_extensions', []);
foreach ((array) ($pageExtensions['module_sections'] ?? []) as $definition) {
$section = (array) ($definition['section'] ?? []);
$sectionSlug = trim((string) ($section['slug'] ?? ''));
if ($sectionSlug === ''
|| collect($navigation)->contains(
static fn (array $existing): bool => ($existing['slug'] ?? null) === $sectionSlug,
)) {
continue;
}
$positionAfter = trim((string) ($definition['position_after'] ?? ''));
$anchorIndex = $positionAfter === ''
? false
: collect($navigation)->search(
static fn (array $existing): bool => ($existing['slug'] ?? null) === $positionAfter,
);
array_splice(
$navigation,
is_int($anchorIndex) ? $anchorIndex + 1 : count($navigation),
0,
[$section],
);
}
foreach ($navigation as &$section) {
$sectionSlug = (string) ($section['slug'] ?? '');
foreach ((array) ($pageExtensions[$sectionSlug] ?? []) as $extension) {
$extensionSlug = trim((string) ($extension['slug'] ?? ''));
if ($extensionSlug === '') {
continue;
}
$exists = collect($section['pages'] ?? [])->contains(
static fn (array $page): bool => (string) ($page['slug'] ?? '') === $extensionSlug
);
if (! $exists) {
$section['pages'][] = $extension;
}
}
}
unset($section);
$titles = (array) setting('navigation.titles', []);
$sectionTitles = (array) ($titles['sections'] ?? []);
$pageTitles = (array) ($titles['pages'] ?? []);
foreach ($navigation as &$section) {
$sectionSlug = $section['slug'];
$section['title'] = self::title($sectionTitles[$sectionSlug] ?? null, $section['title']);
foreach ($section['pages'] ?? [] as $pageIndex => $page) {
$section['pages'][$pageIndex]['title'] = self::title(
$pageTitles[$sectionSlug][$page['slug']] ?? null,
$page['title']
);
foreach ($page['children'] ?? [] as $childIndex => $child) {
$section['pages'][$pageIndex]['children'][$childIndex]['title'] = self::title(
$pageTitles[$sectionSlug][$child['slug']] ?? null,
$child['title']
);
}
}
}
unset($section);
return $navigation;
}
private static function title($value, string $default): string
{
$value = trim((string) $value);
return $value === '' ? $default : $value;
}
}