task-116: 后台管理新增/导入表单弹窗化 + 分组管理独立菜单与UI优化 + 轻量进度端点
Build Backend JAR / build (push) Has been cancelled
Build Backend JAR / build (push) Has been cancelled
- 后台管理页(admin)所有面板的新增/导入表单改为弹窗操作,原有字段 ID 全部保留、提交逻辑不变;导入删除入口不再触发二次确认拦截 - 分组管理升级为独立菜单(V102 + schema initializer),移除 5 个面板内的管理分组按钮;分组列表改为蓝白主题、增加权限分组横幅 - Python 侧 group-manage 权限守卫(_ensure_backend_menu_access 补充 group-manage) - 引入 V101(biz_task_file_job 复合索引)+ 新增 TaskProgressLight/TaskFileJob 轻量端点与进度聚合作 - 前端 progress-light / page-separated-loads / dispatch-guard 共享模块及单元测试
This commit is contained in:
+7
-7
@@ -55,12 +55,12 @@ class InvalidAsinDataControllerTest {
|
||||
when(adminAuthSupport.currentRole(operator)).thenReturn(null);
|
||||
when(permissionMenuService.getUserColumnPermissions(7L, "admin"))
|
||||
.thenReturn(List.of(invalidAsinDataPermission()));
|
||||
when(invalidAsinDataService.page(1L, 15L, "", 3L, 7L, false))
|
||||
when(invalidAsinDataService.page(1L, 15L, "", "", "", 3L, 7L, false))
|
||||
.thenReturn(new InvalidAsinDataPageVo());
|
||||
|
||||
controller.page(1L, 15L, "", 3L, request);
|
||||
controller.page(1L, 15L, "", "", "", 3L, request);
|
||||
|
||||
verify(invalidAsinDataService).page(1L, 15L, "", 3L, 7L, false);
|
||||
verify(invalidAsinDataService).page(1L, 15L, "", "", "", 3L, 7L, false);
|
||||
}
|
||||
|
||||
@Test
|
||||
@@ -70,7 +70,7 @@ class InvalidAsinDataControllerTest {
|
||||
request.addParameter("superAdmin", "true");
|
||||
when(adminAuthSupport.requireUser(request)).thenThrow(new BusinessException(401, "未登录"));
|
||||
|
||||
assertThrows(BusinessException.class, () -> controller.page(1L, 15L, "", 3L, request));
|
||||
assertThrows(BusinessException.class, () -> controller.page(1L, 15L, "", "", "", 3L, request));
|
||||
|
||||
verifyNoInteractions(invalidAsinDataService);
|
||||
verify(permissionMenuService, never()).requireUserOperator(any());
|
||||
@@ -83,12 +83,12 @@ class InvalidAsinDataControllerTest {
|
||||
AdminUserEntity operator = user(1L, "super_admin");
|
||||
when(adminAuthSupport.requireUser(request)).thenReturn(operator);
|
||||
when(adminAuthSupport.currentRole(operator)).thenReturn("super_admin");
|
||||
when(invalidAsinDataService.page(1L, 15L, "", 3L, 1L, true))
|
||||
when(invalidAsinDataService.page(1L, 15L, "", "", "", 3L, 1L, true))
|
||||
.thenReturn(new InvalidAsinDataPageVo());
|
||||
|
||||
controller.page(1L, 15L, "", 3L, request);
|
||||
controller.page(1L, 15L, "", "", "", 3L, request);
|
||||
|
||||
verify(invalidAsinDataService).page(1L, 15L, "", 3L, 1L, true);
|
||||
verify(invalidAsinDataService).page(1L, 15L, "", "", "", 3L, 1L, true);
|
||||
verify(permissionMenuService, never()).getUserColumnPermissions(eq(1L), eq("admin"));
|
||||
}
|
||||
|
||||
|
||||
+23
-3
@@ -85,7 +85,7 @@ class InvalidAsinDataServiceTest {
|
||||
when(invalidAsinDataMapper.selectList(any())).thenReturn(List.of(manual));
|
||||
when(shopManageGroupService.buildGroupNameMap(any())).thenReturn(Map.of(9L, "group-a"));
|
||||
|
||||
InvalidAsinDataPageVo page = service.page(1, 15, "", 10L, 7L, false);
|
||||
InvalidAsinDataPageVo page = service.page(1, 15, "", "", "", 10L, 7L, false);
|
||||
|
||||
ArgumentCaptor<LambdaQueryWrapper<InvalidAsinDataEntity>> captor = ArgumentCaptor.forClass((Class) LambdaQueryWrapper.class);
|
||||
verify(invalidAsinDataMapper).selectCount(captor.capture());
|
||||
@@ -109,7 +109,7 @@ class InvalidAsinDataServiceTest {
|
||||
when(invalidAsinDataMapper.selectList(any())).thenReturn(List.of(automatic, orphan));
|
||||
when(shopManageGroupService.buildGroupNameMap(any())).thenReturn(Map.of());
|
||||
|
||||
InvalidAsinDataPageVo page = service.page(1, 15, "", null, 1L, true);
|
||||
InvalidAsinDataPageVo page = service.page(1, 15, "", "", "", null, 1L, true);
|
||||
|
||||
assertEquals(2, page.getItems().size());
|
||||
assertEquals("AUTO", page.getItems().getFirst().getRecordSource());
|
||||
@@ -123,7 +123,7 @@ class InvalidAsinDataServiceTest {
|
||||
when(invalidAsinDataMapper.selectCount(any())).thenReturn(0L);
|
||||
when(invalidAsinDataMapper.selectList(any())).thenReturn(List.of());
|
||||
|
||||
service.page(1, 15, "", 9L, 1L, true);
|
||||
service.page(1, 15, "", "", "", 9L, 1L, true);
|
||||
|
||||
ArgumentCaptor<LambdaQueryWrapper<InvalidAsinDataEntity>> captor = ArgumentCaptor.forClass((Class) LambdaQueryWrapper.class);
|
||||
verify(invalidAsinDataMapper).selectCount(captor.capture());
|
||||
@@ -134,6 +134,26 @@ class InvalidAsinDataServiceTest {
|
||||
assertTrue(captor.getValue().getParamNameValuePairs().containsValue(9L));
|
||||
}
|
||||
|
||||
@Test
|
||||
@SuppressWarnings({"rawtypes", "unchecked"})
|
||||
void pageFiltersByDataValueAndBrandIndependently() {
|
||||
when(invalidAsinDataMapper.selectCount(any())).thenReturn(0L);
|
||||
when(invalidAsinDataMapper.selectList(any())).thenReturn(List.of());
|
||||
|
||||
service.page(1, 15, "", "B01", "acme", null, 1L, true);
|
||||
|
||||
ArgumentCaptor<LambdaQueryWrapper<InvalidAsinDataEntity>> captor = ArgumentCaptor.forClass((Class) LambdaQueryWrapper.class);
|
||||
verify(invalidAsinDataMapper).selectCount(captor.capture());
|
||||
TableInfoHelper.initTableInfo(
|
||||
new MapperBuilderAssistant(new MybatisConfiguration(), ""),
|
||||
InvalidAsinDataEntity.class);
|
||||
String sql = captor.getValue().getSqlSegment();
|
||||
assertTrue(sql.contains("data_value LIKE"));
|
||||
assertTrue(sql.contains("brand LIKE"));
|
||||
assertTrue(captor.getValue().getParamNameValuePairs().containsValue("%B01%"));
|
||||
assertTrue(captor.getValue().getParamNameValuePairs().containsValue("%acme%"));
|
||||
}
|
||||
|
||||
@Test
|
||||
void normalUserCannotDeleteAutoRecord() {
|
||||
when(invalidAsinDataMapper.selectById(91L)).thenReturn(data(91L, "AUTO", null));
|
||||
|
||||
Reference in New Issue
Block a user