快递应付 → 快递报价 下新增「快递入驻」页:生成入驻二维码发给快递方,
对方免登录在手机上填写主体、联系人、结算账户、报价并上传资质,
内部对接人初审、管理员财务复审后生成首版报价,协议签署完成后开通。
- 新增三张表 business_courier_onboardings / _files / _events(纯新增,不改旧表)
- 免登录填报页 /onboarding/courier/{token}:40 位随机 token,可暂存、提交、退回后补件,
链接有效期可延长、可作废;银行账号加密存储;附件存 uploads 盘
- 内置纯 PHP 二维码生成(App\Support\QrCode,SVG 输出,无新增依赖)
- 财务复审:确认系统快递名称(唯一),快递所填报价写成报价管理的 CourierQuoteVersion,
可直接在协议签署页发起报价确认单;初审人不能复审
- 开通:需匹配到已签署的协议签署任务,或填写线下签署说明
- 快递资料页新增「入驻快递」页签,列出已开通的入驻快递
- 新增 CourierOnboardingWorkflowTest(8 个用例),更新快递报价目录顺序断言
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_019gzfsnV3fJ89CoUy1D9V9g
33 lines
1.1 KiB
PHP
33 lines
1.1 KiB
PHP
<?php
|
|
|
|
use App\Http\Controllers\Integrations\EsignCallbacks;
|
|
use App\Http\Controllers\Onboarding\CourierOnboardingForms;
|
|
use Illuminate\Support\Facades\Route;
|
|
use Livewire\Livewire;
|
|
|
|
/**
|
|
* 'web' middleware applied to all routes
|
|
*
|
|
* @see \App\Providers\Route::mapWebRoutes
|
|
*/
|
|
|
|
Route::post('integrations/esign/callback', EsignCallbacks::class)
|
|
->middleware('throttle:120,1')
|
|
->name('integrations.esign.callback');
|
|
|
|
// 快递入驻:快递方扫码打开的免登录填报页,凭链接里的随机 token 访问。
|
|
Route::get('onboarding/courier/{token}', [CourierOnboardingForms::class, 'show'])
|
|
->middleware('throttle:60,1')
|
|
->where('token', '[A-Za-z0-9]{32,64}')
|
|
->name('courier-onboarding.form');
|
|
Route::post('onboarding/courier/{token}', [CourierOnboardingForms::class, 'update'])
|
|
->middleware('throttle:20,1')
|
|
->where('token', '[A-Za-z0-9]{32,64}')
|
|
->name('courier-onboarding.update');
|
|
|
|
Livewire::setScriptRoute(function ($handle) {
|
|
$base = request()->getBasePath();
|
|
|
|
return Route::get($base . '/vendor/livewire/livewire/dist/livewire.min.js', $handle);
|
|
});
|