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 -
+
@@ -619,7 +619,7 @@ 金额合计按审批费用明细汇总,付款合计按结构化付款明细汇总,同一笔付款不会因关联多条费用而重复计算。 付款状态按钉钉“出纳打款”节点判断;付款差额按“费用合计 − 已付款合计”单独计算,不参与付款状态判断。 “出纳状态待同步”表示尚未取得出纳节点任务,不能据此推断已付款或未付款。 - 当前展示的是当前账号权限范围内可读取的钉钉审批流程明细;审批中的金额和行项目仍可能随流程变化。 + 当前展示的是当前账号权限范围内可读取的钉钉OA审批流程;审批中的金额和行项目仍可能随流程变化。 企业级全量数据待领导开通 OA 权限后切换。

@@ -675,7 +675,7 @@ @empty - 当前筛选条件没有流程明细。可以调整月份、单据类型、状态或关键词后重试。 + 当前筛选条件没有OA流程数据。可以调整月份、单据类型、状态或关键词后重试。 @endforelse @@ -694,7 +694,7 @@ 本页 {{ number_format($processRows->count()) }} 行
-