## 任务占用与边界 - 任务名称:聚水潭聚工单-协同工单-打款工单-小额打款页面 - 实际开发者:yueyang - 任务来源/团队分工:退款数据子页面接入 - 目标结果:在“退款”下新增小额打款子页面,读取共享业务镜像,支持分页、筛选、汇总、导出和同步状态提示。 - 预计修改路径:Pages Controller、business_navigation、upstream_mirrors、镜像 Repository、Blade 页面、admin 路由、测试、镜像清单文档。 - 将写入的公共契约:页面 slug、管理路由、镜像数据集注册(jiansun 两张表)、Mirror Repository。 - 仅复用、明确不修改的公共契约:现有共享镜像连接、同步框架、权限校验、导航结构和通用分页/导出模式。 - 数据源、表/视图和字段:jiansun.dbo.jst_workOrderInfo、jiansun.dbo.jst_small_payment_order_map;固定小额打款工单类型 82D94F5C54544EE3833CD8A3AB8B9F73。 - 上游 source_key / scope:source_key=jiansun;沿用团队共享连接 scope。 - 明确不修改的范围:不执行共享数据库迁移、不执行首次全量同步、不修改 .env/APP_KEY、不配置 operations_replica。 ## 开工碰撞检查 - [x] 已执行团队预检并核对 origin/main 与远程任务分支 - [x] 已搜索主线既有页面、接口、Repository 和数据查询 - [x] 已区分将写入与仅复用的公共契约 - [x] 未发现实际写入重叠 ## 实际改动 - 新增退款“小额打款”页面及导航入口。 - 新增 SmallPaymentWorkOrderMirrorRepository:共享镜像分页、稳定排序、筛选、金额汇总、导出行和状态判断。 - 注册 jst_workOrderInfo 与 jst_small_payment_order_map 镜像数据集,并补充真实 businessFieldList 解析字段。 - 增加页面、Repository、导航和同步器相关测试。 ## 验证证据 - 相关测试:19 项通过,143 个断言通过。 - Blade 缓存、PHP 语法检查、git diff --check 通过。 - 实际本地页面已打开,导航显示“小额打款”;首次同步未执行时页面明确显示“业务镜像尚未建立”。 - route:cache 受项目已有重复 livewire.update 路由影响失败,与本次改动无关;普通路由列表和视图缓存正常。 ## 风险检查 - [x] 未提交 .env、密码、Token、私钥、真实财务数据、生产日志或构建产物 - [x] 不涉及共享数据库迁移或生产数据写入 - [x] 前端复用现有 VIP 黑金设计令牌和共享页面结构 ## 合并前复查 - [ ] PR 不再是 WIP,需在完成最终自审和测试后移除 WIP 前缀。 - [ ] Codex 已用 origin/main...任务分支复核完整 diff。 Reviewed-on: http://git.1080p.hk/WuYongJie/CaiWuXiTong/pulls/102
103 lines
3.7 KiB
PHP
103 lines
3.7 KiB
PHP
<?php
|
|
|
|
namespace Tests\Feature\Settings;
|
|
|
|
use App\Models\Auth\Permission;
|
|
use App\Models\Auth\Role;
|
|
use App\Utilities\BusinessNavigation;
|
|
use Tests\Feature\FeatureTestCase;
|
|
|
|
class NavigationTest extends FeatureTestCase
|
|
{
|
|
public function testAdminCanUpdateSidebarLabels()
|
|
{
|
|
$this->user->roles()->sync([
|
|
Role::where('name', 'admin')->firstOrFail()->id,
|
|
]);
|
|
|
|
$this->user->attachPermission(
|
|
Permission::where('name', 'read-admin-panel')->firstOrFail()
|
|
);
|
|
|
|
$this->loginAs()
|
|
->get(route('settings.navigation.manage'))
|
|
->assertOk()
|
|
->assertSeeText('侧边栏功能名称');
|
|
|
|
$this->patch(route('settings.navigation.save'), [
|
|
'section_titles' => [
|
|
'company-management' => '企业档案',
|
|
],
|
|
'page_titles' => [
|
|
'company-management' => [
|
|
'subject-operating-report' => '主体经营',
|
|
],
|
|
],
|
|
])->assertOk();
|
|
|
|
$navigation = BusinessNavigation::all();
|
|
$companyRegistration = collect($navigation[0]['pages'])->firstWhere('slug', 'subject-operating-report');
|
|
|
|
$this->assertSame('企业档案', $navigation[0]['title']);
|
|
$this->assertSame('主体经营', $companyRegistration['title']);
|
|
}
|
|
|
|
public function testOrderDataAndRefundAreConfiguredBetweenInvoiceAndReceivablesMenus()
|
|
{
|
|
$navigation = BusinessNavigation::all();
|
|
$slugs = array_column($navigation, 'slug');
|
|
|
|
$invoiceIndex = array_search('invoice-management', $slugs, true);
|
|
$orderIndex = array_search('order-data', $slugs, true);
|
|
$refundIndex = array_search('refunds', $slugs, true);
|
|
$receivablesIndex = array_search('store-receivables', $slugs, true);
|
|
$orderData = $navigation[$orderIndex] ?? null;
|
|
$refund = $navigation[$refundIndex] ?? null;
|
|
|
|
$this->assertNotFalse($invoiceIndex);
|
|
$this->assertNotFalse($orderIndex);
|
|
$this->assertNotFalse($refundIndex);
|
|
$this->assertNotFalse($receivablesIndex);
|
|
$this->assertGreaterThan($invoiceIndex, $orderIndex);
|
|
$this->assertGreaterThan($orderIndex, $refundIndex);
|
|
$this->assertLessThan($receivablesIndex, $refundIndex);
|
|
$this->assertSame('订单数据', $orderData['title']);
|
|
$this->assertSame(
|
|
['raw-data', 'bill-offset'],
|
|
array_column($orderData['pages'], 'slug')
|
|
);
|
|
$this->assertSame(
|
|
['原始数据', '账单冲减'],
|
|
array_column($orderData['pages'], 'title')
|
|
);
|
|
$this->assertSame(
|
|
['after-sales-expenses', 'promotion-expenses'],
|
|
array_column($orderData['pages'][0]['tabs'], 'slug')
|
|
);
|
|
$this->assertSame(
|
|
['订单售后费用明细', '商品推广费用明细'],
|
|
array_column($orderData['pages'][0]['tabs'], 'title')
|
|
);
|
|
$this->assertArrayNotHasKey('children', $orderData['pages'][0]);
|
|
$this->assertSame(
|
|
['bill-offset'],
|
|
array_column(array_slice($orderData['pages'], 1), 'slug')
|
|
);
|
|
$this->assertSame(
|
|
['账单冲减'],
|
|
array_column(array_slice($orderData['pages'], 1), 'title')
|
|
);
|
|
$this->assertSame('退款', $refund['title']);
|
|
$this->assertSame('assignment_return', $refund['icon']);
|
|
$this->assertSame(
|
|
['jingxi-refund-data', 'non-jingxi-refund-data', 'small-payment-work-orders'],
|
|
array_column($refund['pages'], 'slug')
|
|
);
|
|
$this->assertSame(
|
|
['京喜退款数据', '售后(退货退款)', '小额打款'],
|
|
array_column($refund['pages'], 'title')
|
|
);
|
|
}
|
|
|
|
}
|