diff --git a/config/business_navigation.php b/config/business_navigation.php index 6ad65233..a3310bf7 100644 --- a/config/business_navigation.php +++ b/config/business_navigation.php @@ -203,6 +203,7 @@ return [ 'icon' => 'local_shipping', 'pages' => [ ['slug' => 'quote-management', 'title' => '报价管理'], + ['slug' => 'agreement-signing', 'title' => '协议签署'], ['slug' => 'freight-reconciliation', 'title' => '运费对账'], ['slug' => 'bookkeeping-details', 'title' => '记账明细'], ['slug' => 'compensation-details', 'title' => '赔偿明细'], diff --git a/resources/views/business/pages/courier-payables/agreement-signing.blade.php b/resources/views/business/pages/courier-payables/agreement-signing.blade.php new file mode 100644 index 00000000..254b37e5 --- /dev/null +++ b/resources/views/business/pages/courier-payables/agreement-signing.blade.php @@ -0,0 +1,1539 @@ +@php($agreementCompanyName = company()?->name ?: '当前公司') + +
+ + +
+
+ + + +
+ + + E签宝未连接 + +
+ +
+
+
+ + +
+
+ + +
+
+ + +
+ +
+ +
+ + + + + + + + + + + + + + + + + +
任务编号快递物流商业务类型签署状态发起人更新时间操作
+
+ + + + 还没有协议签署任务 +

完成E签宝接入后,发起、签署、拒签和归档记录会在这里统一追踪。

+ +
+
+
+ +
+ + 签署完成只生成可核验的电子协议,不会自动启用新收款账户;账户变更仍需独立财务复核和原档案电话核验。 +
+
+ + + + + +

+ + +
diff --git a/tests/Feature/Business/AgreementSigningPageTest.php b/tests/Feature/Business/AgreementSigningPageTest.php new file mode 100644 index 00000000..ddbbf745 --- /dev/null +++ b/tests/Feature/Business/AgreementSigningPageTest.php @@ -0,0 +1,136 @@ +user->attachPermission( + Permission::where('name', 'read-admin-panel')->firstOrFail() + ); + } + + public function testAgreementSigningPageRendersTheSigningWorkspace(): void + { + $this->grantWorkspaceAccess(); + + $this->loginAs() + ->get(route('business.pages.show', [ + 'section' => 'courier-payables', + 'page' => 'agreement-signing', + ])) + ->assertOk() + ->assertSeeText('协议签署') + ->assertSeeText('签署任务') + ->assertSeeText('发起签章') + ->assertSeeText('模板管理') + ->assertSeeText('E签宝未连接') + ->assertSeeText('还没有协议签署任务') + ->assertSeeText('收款账户变更证明.doc') + ->assertSeeText('收款账户证明文件.doc') + ->assertSeeText('公司主体变更证明.docx') + ->assertSeeText('共用合同证明.docx') + ->assertSeeText('授权委托书(快递).docx'); + } + + public function testAgreementSigningPageIncludesSinglePageRequestFormAndLivePreview(): void + { + $this->grantWorkspaceAccess(); + + $this->loginAs() + ->get(route('business.pages.show', [ + 'section' => 'courier-payables', + 'page' => 'agreement-signing', + 'agreement_view' => 'create', + ])) + ->assertOk() + ->assertSee('data-signing-request-form', false) + ->assertSee('data-agreement-preview', false) + ->assertSee('data-sign-request-send disabled', false) + ->assertDontSee('data-agreement-step-panel', false) + ->assertSeeText('发起签章请求') + ->assertSeeText('快递公司') + ->assertSeeText('文件类型') + ->assertSeeText('收款账户证明') + ->assertSeeText('TPL-ACCOUNT-CERT-V2') + ->assertSeeText('我方签署主体') + ->assertSeeText('公司全称') + ->assertSeeText('签署截止日期') + ->assertSeeText('对方E签宝账号') + ->assertSeeText('填写变量') + ->assertSeeText('签署完成后自动归档') + ->assertSeeText('人工确认后归档') + ->assertSeeText('刷新预览') + ->assertSeeText('推送至E签宝') + ->assertSeeText('收款帐户资料证明'); + } + + public function testAgreementSigningPageMapsEverySourceDocumentToItsOwnFieldsAndPreview(): void + { + $this->grantWorkspaceAccess(); + + $response = $this->loginAs() + ->get(route('business.pages.show', [ + 'section' => 'courier-payables', + 'page' => 'agreement-signing', + 'agreement_view' => 'create', + ])) + ->assertOk(); + + $response + ->assertSee('data-template-fields="account-proof"', false) + ->assertSee('data-template-preview="account-proof"', false) + ->assertSeeText('生效日期') + ->assertSeeText('银行帐户') + ->assertSeeText('我司同意自') + ->assertSee('data-template-fields="account-change"', false) + ->assertSee('data-template-preview="account-change"', false) + ->assertSeeText('原收款账户') + ->assertSeeText('原账户停止使用日期') + ->assertSeeText('新账户启用日期') + ->assertSeeText('之前相应的账户') + ->assertSee('data-template-fields="entity-change"', false) + ->assertSee('data-template-preview="entity-change"', false) + ->assertSeeText('变更前公司名称') + ->assertSeeText('变更后公司名称') + ->assertSeeText('变更后,原公司的各项事宜由变更后的公司继续执行') + ->assertSee('data-template-fields="shared-contract"', false) + ->assertSee('data-template-preview="shared-contract"', false) + ->assertSeeText('合同合作方') + ->assertSeeText('共用合同的快递名称') + ->assertSeeText('共用同一份合同,打款资料为同一份资料') + ->assertSee('data-template-fields="authorization"', false) + ->assertSee('data-template-preview="authorization"', false) + ->assertSeeText('委托方(个人或公司)') + ->assertSeeText('授权事项(可多选)') + ->assertSeeText('代签汇款账号变更') + ->assertSeeText('委托有效期:从'); + } + + public function testAgreementSigningPageRejectsUsersWithoutItsSidebarPermission(): void + { + $subject = 'user_' . $this->user->id; + + setting()->set('system.sidebar_permissions', json_encode([ + 'configured' => [$subject], + 'subjects' => [ + $subject => ['courier-payables/freight-reconciliation'], + ], + ], JSON_UNESCAPED_UNICODE)); + + try { + $this->loginAs()->get(route('business.pages.show', [ + 'section' => 'courier-payables', + 'page' => 'agreement-signing', + ])); + $this->fail('没有协议签署页面权限的用户不应访问该页面。'); + } catch (HttpException $exception) { + $this->assertSame(404, $exception->getStatusCode()); + } + } +}