From 12f9ee5c761e251b6a8da6b5d1442838f2970dac Mon Sep 17 00:00:00 2001 From: yueyang <2495544247@qq.com> Date: Tue, 27 Oct 2026 15:17:38 +0800 Subject: [PATCH 1/6] =?UTF-8?q?feat:=20=E6=96=B0=E5=A2=9E=E6=B5=81?= =?UTF-8?q?=E7=A8=8B=E6=95=B0=E6=8D=AE=E5=AF=BC=E8=88=AA=E5=B9=B6=E6=94=B9?= =?UTF-8?q?=E5=90=8DOA=E6=B5=81=E7=A8=8B?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- app/Utilities/BusinessNavigation.php | 24 ++++++++++ .../business_navigation_page_extensions.php | 13 ++++-- .../Http/Controllers/ProcessDetails.php | 18 ++++---- modules/EcommerceFinance/Routes/admin.php | 29 +++++++++--- .../View/ProcessDetailsPageData.php | 2 +- .../process-details-content.blade.php | 8 ++-- .../process-details.blade.php | 8 ++-- .../Business/ProcessDetailsNavigationTest.php | 44 ++++++++++++++++++ .../Business/ProcessDetailsPageTest.php | 45 ++++++++++++++----- .../ProcessDetailsPageDataTest.php | 2 +- 10 files changed, 156 insertions(+), 37 deletions(-) create mode 100644 tests/Feature/Business/ProcessDetailsNavigationTest.php diff --git a/app/Utilities/BusinessNavigation.php b/app/Utilities/BusinessNavigation.php index 556b645b..49517a36 100644 --- a/app/Utilities/BusinessNavigation.php +++ b/app/Utilities/BusinessNavigation.php @@ -12,6 +12,30 @@ class BusinessNavigation $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'] ?? ''); diff --git a/config/business_navigation_page_extensions.php b/config/business_navigation_page_extensions.php index 981e6a08..c61ac703 100644 --- a/config/business_navigation_page_extensions.php +++ b/config/business_navigation_page_extensions.php @@ -10,10 +10,17 @@ return [ | Entries are appended to an existing section in configuration order. | */ - 'financial-operations' => [ + 'module_sections' => [ [ - 'slug' => 'process-details', - 'title' => '流程明细', + 'position_after' => 'inventory-management', + 'section' => [ + 'slug' => 'process-data', + 'title' => '流程数据', + 'icon' => 'account_tree', + 'pages' => [ + ['slug' => 'oa-process', 'title' => 'OA流程'], + ], + ], ], ], ]; diff --git a/modules/EcommerceFinance/Http/Controllers/ProcessDetails.php b/modules/EcommerceFinance/Http/Controllers/ProcessDetails.php index bdb0f0f4..3e977652 100644 --- a/modules/EcommerceFinance/Http/Controllers/ProcessDetails.php +++ b/modules/EcommerceFinance/Http/Controllers/ProcessDetails.php @@ -28,8 +28,8 @@ class ProcessDetails extends Controller $options = $this->repository->filterOptions(); return view('business.pages.financial-operations.process-details', [ - 'section' => ['slug' => 'financial-operations', 'title' => '财务经营报表'], - 'page' => ['slug' => 'process-details', 'title' => '流程明细'], + 'section' => ['slug' => 'process-data', 'title' => '流程数据'], + 'page' => ['slug' => 'oa-process', 'title' => 'OA流程'], 'processRows' => new LengthAwarePaginator( $result['data'], $result['total'], @@ -53,8 +53,8 @@ class ProcessDetails extends Controller report($exception); return view('business.pages.financial-operations.process-details', [ - 'section' => ['slug' => 'financial-operations', 'title' => '财务经营报表'], - 'page' => ['slug' => 'process-details', 'title' => '流程明细'], + 'section' => ['slug' => 'process-data', 'title' => '流程数据'], + 'page' => ['slug' => 'oa-process', 'title' => 'OA流程'], 'processRows' => new LengthAwarePaginator([], 0, $perPage, $page, [ 'path' => $request->url(), 'query' => $request->except('page'), @@ -74,7 +74,7 @@ class ProcessDetails extends Controller 'mirrorStale' => false, 'mirrorStaleAfterMinutes' => 15, 'scope' => $this->repository->scope(), - 'error' => '流程明细镜像尚未完成导入,请稍后重试。', + 'error' => 'OA流程镜像尚未完成导入,请稍后重试。', ]); } } @@ -84,10 +84,10 @@ class ProcessDetails extends Controller if (! $this->repository->ready()) { return redirect() ->route('business.pages.show', [ - 'section' => 'financial-operations', - 'page' => 'process-details', + 'section' => 'process-data', + 'page' => 'oa-process', ]) - ->withErrors(['export' => '流程明细镜像尚未完成导入,暂时不能导出。']); + ->withErrors(['export' => 'OA流程镜像尚未完成导入,暂时不能导出。']); } $filters = $this->filters($request); @@ -124,7 +124,7 @@ class ProcessDetails extends Controller } fclose($stream); - }, '流程明细_' . now()->format('Ymd_His') . '.csv', [ + }, 'OA流程_' . now()->format('Ymd_His') . '.csv', [ 'Content-Type' => 'text/csv; charset=UTF-8', ]); } diff --git a/modules/EcommerceFinance/Routes/admin.php b/modules/EcommerceFinance/Routes/admin.php index d128dda9..0ac456fd 100644 --- a/modules/EcommerceFinance/Routes/admin.php +++ b/modules/EcommerceFinance/Routes/admin.php @@ -11,15 +11,34 @@ Route::admin('ecommerce-finance', function () { // 模块路由在 register 阶段先注册,因此这里的精确路由会优先命中。沿用 // business.pages.show 名称,侧边栏仍能生成与通用页面一致的可访问 URL。 Route::admin('ecommerce-finance', function (): void { - Route::get('workspace/financial-operations/process-details', [ProcessDetails::class, 'show']) + Route::get('workspace/process-data/oa-process', [ProcessDetails::class, 'show']) ->middleware('business.page.viewer') - ->defaults('section', 'financial-operations') - ->defaults('page', 'process-details') + ->defaults('section', 'process-data') + ->defaults('page', 'oa-process') ->name('business.pages.show'); - Route::get('workspace/financial-operations/process-details/export', [ProcessDetails::class, 'export']) + Route::get('workspace/process-data/oa-process/export', [ProcessDetails::class, 'export']) + ->middleware('business.page.viewer') + ->defaults('section', 'process-data') + ->defaults('page', 'oa-process') + ->name('business.process-details.export'); + + Route::get('workspace/financial-operations/process-details', function (\Illuminate\Http\Request $request) { + return redirect()->route('business.pages.show', array_merge($request->query(), [ + 'section' => 'process-data', + 'page' => 'oa-process', + ])); + }) ->middleware('business.page.viewer') ->defaults('section', 'financial-operations') ->defaults('page', 'process-details') - ->name('business.process-details.export'); + ->name('business.process-details.legacy'); + + Route::get('workspace/financial-operations/process-details/export', function (\Illuminate\Http\Request $request) { + return redirect()->route('business.process-details.export', $request->query()); + }) + ->middleware('business.page.viewer') + ->defaults('section', 'financial-operations') + ->defaults('page', 'process-details') + ->name('business.process-details.legacy.export'); }, ['prefix' => '', 'as' => '']); diff --git a/modules/EcommerceFinance/View/ProcessDetailsPageData.php b/modules/EcommerceFinance/View/ProcessDetailsPageData.php index eaaa432e..9f92dbfc 100644 --- a/modules/EcommerceFinance/View/ProcessDetailsPageData.php +++ b/modules/EcommerceFinance/View/ProcessDetailsPageData.php @@ -67,7 +67,7 @@ class ProcessDetailsPageData 'mirrorStale' => false, 'mirrorStaleAfterMinutes' => 15, 'scope' => $this->repository->scope(), - 'error' => '流程明细镜像尚未完成导入,请稍后重试。', + 'error' => 'OA流程镜像尚未完成导入,请稍后重试。', ]; } } diff --git a/resources/views/business/pages/financial-operations/process-details-content.blade.php b/resources/views/business/pages/financial-operations/process-details-content.blade.php index a8ac6126..73c4f718 100644 --- a/resources/views/business/pages/financial-operations/process-details-content.blade.php +++ b/resources/views/business/pages/financial-operations/process-details-content.blade.php @@ -551,7 +551,7 @@ @endif -