修复:根据图片字段选择前台列表布局
This commit is contained in:
@@ -208,6 +208,8 @@ public class PageThemeDefinitionServiceImpl implements IPageThemeDefinitionServi
|
||||
|
||||
Map<String, Object> layoutPolicy = parseObject(
|
||||
StringUtils.defaultIfEmpty(theme.getLayoutPolicyJson(), "{}"), "布局策略");
|
||||
layoutPolicy.remove("frontend.list");
|
||||
layoutPolicy.remove("frontend.current_user_list");
|
||||
for (Map.Entry<String, Object> entry : layoutPolicy.entrySet())
|
||||
{
|
||||
String[] parts = entry.getKey().split("\\.", 2);
|
||||
|
||||
@@ -275,29 +275,23 @@ public class PageCompositionService
|
||||
}
|
||||
if ("current_user_list".equals(pageType))
|
||||
{
|
||||
boolean useCard = imageCount > 0 || browsingScene || listCount <= 6;
|
||||
boolean useCard = imageCount > 0;
|
||||
decision.canvas = useCard ? "frontend-current-user-card-v1" : "frontend-current-user-list-v1";
|
||||
decision.addReason(useCard ? "个人记录适合卡片式浏览" : "个人记录字段较多,保留表格效率");
|
||||
decision.confidence = 0.84D;
|
||||
decision.addReason(useCard ? "检测到图片字段,个人记录采用卡片列表" : "未检测到图片字段,个人记录采用标准列表");
|
||||
decision.confidence = 0.98D;
|
||||
return decision;
|
||||
}
|
||||
if (categoryField && queryCount >= 2)
|
||||
{
|
||||
decision.canvas = "frontend-list-split-v1";
|
||||
decision.addReason("分类字段和筛选条件明显,采用分栏列表");
|
||||
decision.confidence = 0.88D;
|
||||
}
|
||||
else if (imageCount > 0 && (browsingScene || listCount <= 8))
|
||||
if (imageCount > 0)
|
||||
{
|
||||
decision.canvas = "frontend-list-card-v1";
|
||||
decision.addReason("记录包含图片且偏浏览场景,采用卡片列表");
|
||||
decision.confidence = 0.91D;
|
||||
decision.addReason("检测到图片字段,前台采用卡片列表");
|
||||
decision.confidence = 0.98D;
|
||||
}
|
||||
else
|
||||
{
|
||||
decision.canvas = "frontend-list-v1";
|
||||
decision.addReason("数据维护和检索特征更强,采用标准表格");
|
||||
decision.confidence = 0.72D;
|
||||
decision.addReason("未检测到图片字段,前台采用标准列表");
|
||||
decision.confidence = 0.98D;
|
||||
}
|
||||
return decision;
|
||||
}
|
||||
|
||||
@@ -504,8 +504,15 @@ public class PageStylePresetRegistry
|
||||
|
||||
public String preferredLayout(String scope, String pageType)
|
||||
{
|
||||
String normalizedScope = StringUtils.defaultIfEmpty(scope, "frontend");
|
||||
String normalizedPageType = StringUtils.defaultIfEmpty(pageType, "list");
|
||||
if ("frontend".equalsIgnoreCase(normalizedScope)
|
||||
&& ("list".equals(normalizedPageType) || "current_user_list".equals(normalizedPageType)))
|
||||
{
|
||||
return "";
|
||||
}
|
||||
return StringUtils.defaultString(layoutPolicy.get(
|
||||
StringUtils.defaultIfEmpty(scope, "frontend") + "." + StringUtils.defaultIfEmpty(pageType, "list")));
|
||||
normalizedScope + "." + normalizedPageType));
|
||||
}
|
||||
|
||||
public String shellValue(String name, String fallback)
|
||||
|
||||
@@ -60,6 +60,20 @@ public class PageThemeDefinitionServiceImplTest
|
||||
assertFalse(theme.getShellJson().contains("\"navigation\""));
|
||||
}
|
||||
|
||||
@Test
|
||||
public void insertRemovesFrontendListLayoutOverrides()
|
||||
{
|
||||
PageThemeDefinition theme = customTheme();
|
||||
theme.setLayoutPolicyJson("{\"frontend.list\":\"frontend-list-card-v1\","
|
||||
+ "\"frontend.current_user_list\":\"frontend-current-user-card-v1\"}");
|
||||
when(mapper.selectPageThemeByCode("ocean-blue")).thenReturn(null);
|
||||
|
||||
service.insertPageTheme(theme);
|
||||
|
||||
assertFalse(theme.getLayoutPolicyJson().contains("frontend.list"));
|
||||
assertFalse(theme.getLayoutPolicyJson().contains("frontend.current_user_list"));
|
||||
}
|
||||
|
||||
@Test
|
||||
public void insertRejectsInvalidTokenJson()
|
||||
{
|
||||
|
||||
@@ -24,7 +24,7 @@ public class PageCompositionServiceStylePresetTest
|
||||
private final PageCompositionService service = new PageCompositionService();
|
||||
|
||||
@Test
|
||||
public void cardPortalPresetKeepsAutomaticallySelectedFrontendCanvas()
|
||||
public void visualPresetDoesNotForceCardLayoutWithoutImage()
|
||||
{
|
||||
FrontProjectPageDesign design = design("frontend", "list");
|
||||
|
||||
@@ -33,7 +33,7 @@ public class PageCompositionServiceStylePresetTest
|
||||
column("status", "status", "1", "1", "1")), null, null, true, "card_portal");
|
||||
|
||||
Map<String, Object> layout = readLayout(design);
|
||||
assertEquals("frontend-list-card-v1", layout.get("canvas"));
|
||||
assertEquals("frontend-list-v1", layout.get("canvas"));
|
||||
assertEquals("card_portal", layout.get("stylePreset"));
|
||||
assertTrue(((Map<?, ?>) layout.get("styleTokens")).containsKey("primary"));
|
||||
Map<?, ?> composition = (Map<?, ?>) layout.get("composition");
|
||||
@@ -41,6 +41,22 @@ public class PageCompositionServiceStylePresetTest
|
||||
assertTrue(String.valueOf(composition.get("reasons")).contains("card_portal"));
|
||||
}
|
||||
|
||||
@Test
|
||||
public void visualPresetDoesNotForceStandardLayoutWithImage()
|
||||
{
|
||||
FrontProjectPageDesign design = design("frontend", "list");
|
||||
FrontProjectColumn cover = column("cover_url", "coverUrl", "0", "1", "1");
|
||||
cover.setHtmlType("imageUpload");
|
||||
|
||||
service.compose(design, table(), Arrays.asList(
|
||||
column("title", "title", "1", "1", "1"), cover),
|
||||
null, null, true, "minimal-white");
|
||||
|
||||
Map<String, Object> layout = readLayout(design);
|
||||
assertEquals("frontend-list-card-v1", layout.get("canvas"));
|
||||
assertEquals("minimal-white", layout.get("stylePreset"));
|
||||
}
|
||||
|
||||
@Test
|
||||
public void dataDensePresetKeepsAutomaticallySelectedAdminCanvas()
|
||||
{
|
||||
@@ -109,7 +125,25 @@ public class PageCompositionServiceStylePresetTest
|
||||
|
||||
Map<String, Object> layout = readLayout(design);
|
||||
assertEquals("current_user_list", design.getPageType());
|
||||
assertEquals("frontend-current-user-card-v1", layout.get("canvas"));
|
||||
assertEquals("frontend-current-user-list-v1", layout.get("canvas"));
|
||||
}
|
||||
|
||||
@Test
|
||||
public void myReaderListUsesCardsWhenItHasAnImage()
|
||||
{
|
||||
FrontProjectPageDesign design = design("frontend", "list");
|
||||
design.setPageCode("my_borrows_page");
|
||||
design.setPageName("My Borrows");
|
||||
design.setRoutePath("/my/borrows");
|
||||
FrontProjectColumn cover = column("book_cover", "bookCover", "0", "1", "0");
|
||||
cover.setHtmlType("imageUpload");
|
||||
|
||||
service.compose(design, table(), Arrays.asList(
|
||||
column("reader_id", "readerId", "0", "1", "0"), cover),
|
||||
null, null, true, "classic-admin");
|
||||
|
||||
assertEquals("current_user_list", design.getPageType());
|
||||
assertEquals("frontend-current-user-card-v1", readLayout(design).get("canvas"));
|
||||
}
|
||||
|
||||
@Test
|
||||
@@ -122,10 +156,10 @@ public class PageCompositionServiceStylePresetTest
|
||||
"modern-blue", PageLayoutTemplateRegistry.STABLE_RANDOM, Long.valueOf(42L));
|
||||
|
||||
Map<String, Object> layout = readLayout(design);
|
||||
assertTrue(!"frontend-list-card-v1".equals(layout.get("canvas")));
|
||||
assertTrue(!"frontend-list-v1".equals(layout.get("canvas")));
|
||||
Map<?, ?> composition = (Map<?, ?>) layout.get("composition");
|
||||
assertEquals(PageLayoutTemplateRegistry.STABLE_RANDOM, composition.get("variantMode"));
|
||||
assertEquals("frontend-list-card-v1", composition.get("recommendedCanvas"));
|
||||
assertEquals("frontend-list-v1", composition.get("recommendedCanvas"));
|
||||
assertEquals(layout.get("canvas"), composition.get("selectedCanvas"));
|
||||
assertEquals(42L, ((Number) composition.get("variantSeed")).longValue());
|
||||
|
||||
|
||||
Reference in New Issue
Block a user