diff --git a/addons/official/view/web/official_common/mobile/link.html b/addons/official/view/web/official_common/mobile/link.html
index 9211c21..487f76e 100644
--- a/addons/official/view/web/official_common/mobile/link.html
+++ b/addons/official/view/web/official_common/mobile/link.html
@@ -1,4 +1,4 @@
-
+
diff --git a/addons/official/view/web/official_common/pc/link.html b/addons/official/view/web/official_common/pc/link.html
index 041140f..ab55244 100644
--- a/addons/official/view/web/official_common/pc/link.html
+++ b/addons/official/view/web/official_common/pc/link.html
@@ -1,5 +1,5 @@
-
+
diff --git a/public/assets/addons/official/css/modern_nhc.css b/public/assets/addons/official/css/modern_nhc.css
index f0fad71..e7bc263 100644
--- a/public/assets/addons/official/css/modern_nhc.css
+++ b/public/assets/addons/official/css/modern_nhc.css
@@ -386,29 +386,29 @@ img {
z-index: 2;
}
-/* 轮播图幻灯片不同主题背景与中式意境光影 (浅色高雅、通透水墨微晕) */
+/* 轮播图幻灯片不同主题背景与中式意境光影 (浅色高雅、通透羽化、右侧鲜明视窗完全释放) */
.nhc-slide-theme-1 {
background:
- linear-gradient(90deg, rgba(255, 255, 255, 0.98) 0%, rgba(255, 255, 255, 0.92) 50%, rgba(255, 255, 255, 0.15) 100%),
- url('../images/banners/banner_lead.jpg') right center / cover no-repeat;
+ linear-gradient(90deg, #FFFFFF 0%, rgba(255, 255, 255, 0.98) 36%, rgba(255, 255, 255, 0.82) 44%, rgba(255, 255, 255, 0) 54%, rgba(255, 255, 255, 0) 100%),
+ url('../images/banners/banner_lead.svg') right center / cover no-repeat;
}
.nhc-slide-theme-2 {
background:
- linear-gradient(90deg, rgba(255, 255, 255, 0.98) 0%, rgba(255, 255, 255, 0.92) 50%, rgba(255, 255, 255, 0.15) 100%),
- url('../images/banners/banner_craft.jpg') right center / cover no-repeat;
+ linear-gradient(90deg, #FFFFFF 0%, rgba(255, 255, 255, 0.98) 36%, rgba(255, 255, 255, 0.82) 44%, rgba(255, 255, 255, 0) 54%, rgba(255, 255, 255, 0) 100%),
+ url('../images/banners/banner_craft.svg') right center / cover no-repeat;
}
.nhc-slide-theme-3 {
background:
- linear-gradient(90deg, rgba(255, 255, 255, 0.98) 0%, rgba(255, 255, 255, 0.92) 50%, rgba(255, 255, 255, 0.15) 100%),
- url('../images/banners/banner_agent.jpg') right center / cover no-repeat;
+ linear-gradient(90deg, #FFFFFF 0%, rgba(255, 255, 255, 0.98) 36%, rgba(255, 255, 255, 0.82) 44%, rgba(255, 255, 255, 0) 54%, rgba(255, 255, 255, 0) 100%),
+ url('../images/banners/banner_agent.svg') right center / cover no-repeat;
}
.nhc-slide-theme-4 {
background:
- linear-gradient(90deg, rgba(255, 255, 255, 0.98) 0%, rgba(255, 255, 255, 0.92) 50%, rgba(255, 255, 255, 0.15) 100%),
- url('../images/banners/banner_matrix.jpg') right center / cover no-repeat;
+ linear-gradient(90deg, #FFFFFF 0%, rgba(255, 255, 255, 0.98) 36%, rgba(255, 255, 255, 0.82) 44%, rgba(255, 255, 255, 0) 54%, rgba(255, 255, 255, 0) 100%),
+ url('../images/banners/banner_matrix.svg') right center / cover no-repeat;
}
/* 轮播图切换过渡微动画 */
@@ -1660,6 +1660,26 @@ img {
.nhc-carousel-dot.active .nhc-carousel-dot-bar {
width: 36px;
}
+ .nhc-slide-theme-1 {
+ background:
+ linear-gradient(180deg, rgba(255, 255, 255, 0.96) 0%, rgba(255, 255, 255, 0.90) 65%, rgba(255, 255, 255, 0.70) 100%),
+ url('../images/banners/banner_lead.svg') 80% center / cover no-repeat;
+ }
+ .nhc-slide-theme-2 {
+ background:
+ linear-gradient(180deg, rgba(255, 255, 255, 0.96) 0%, rgba(255, 255, 255, 0.90) 65%, rgba(255, 255, 255, 0.70) 100%),
+ url('../images/banners/banner_craft.svg') 80% center / cover no-repeat;
+ }
+ .nhc-slide-theme-3 {
+ background:
+ linear-gradient(180deg, rgba(255, 255, 255, 0.96) 0%, rgba(255, 255, 255, 0.90) 65%, rgba(255, 255, 255, 0.70) 100%),
+ url('../images/banners/banner_agent.svg') 80% center / cover no-repeat;
+ }
+ .nhc-slide-theme-4 {
+ background:
+ linear-gradient(180deg, rgba(255, 255, 255, 0.96) 0%, rgba(255, 255, 255, 0.90) 65%, rgba(255, 255, 255, 0.70) 100%),
+ url('../images/banners/banner_matrix.svg') 80% center / cover no-repeat;
+ }
.nhc-hero-title {
font-size: 32px;
}
diff --git a/public/assets/addons/official/images/banners/banner_agent.svg b/public/assets/addons/official/images/banners/banner_agent.svg
new file mode 100644
index 0000000..befbe67
--- /dev/null
+++ b/public/assets/addons/official/images/banners/banner_agent.svg
@@ -0,0 +1,218 @@
+
\ No newline at end of file
diff --git a/public/assets/addons/official/images/banners/banner_craft.svg b/public/assets/addons/official/images/banners/banner_craft.svg
new file mode 100644
index 0000000..c1c33d9
--- /dev/null
+++ b/public/assets/addons/official/images/banners/banner_craft.svg
@@ -0,0 +1,265 @@
+
\ No newline at end of file
diff --git a/public/assets/addons/official/images/banners/banner_lead.svg b/public/assets/addons/official/images/banners/banner_lead.svg
new file mode 100644
index 0000000..3a8ea88
--- /dev/null
+++ b/public/assets/addons/official/images/banners/banner_lead.svg
@@ -0,0 +1,279 @@
+
\ No newline at end of file
diff --git a/public/assets/addons/official/images/banners/banner_matrix.svg b/public/assets/addons/official/images/banners/banner_matrix.svg
new file mode 100644
index 0000000..d4dcac2
--- /dev/null
+++ b/public/assets/addons/official/images/banners/banner_matrix.svg
@@ -0,0 +1,290 @@
+
\ No newline at end of file
diff --git a/tests/generate_vivid_banners.py b/tests/generate_vivid_banners.py
new file mode 100644
index 0000000..b0904d1
--- /dev/null
+++ b/tests/generate_vivid_banners.py
@@ -0,0 +1,1100 @@
+# -*- coding: utf-8 -*-
+"""
+生成鲜明、高级、严谨商务的现代化轮播大图 (Generate Vivid Banner Showcases)
+严格遵循:现代中式浅色专业风、高饱和鲜明科技蓝 #2563EB、辅助青 #06B6D4、紫 #7C3AED、
+朱红印章 #DC2626、深空沉稳底色 #0F172A / #1E293B,彻底杜绝 AI 味与虚浮浅白!
+"""
+
+import os
+
+ROOT_DIR = os.path.abspath(os.path.join(os.path.dirname(__file__), ".."))
+BANNER_DIR = os.path.join(ROOT_DIR, "public", "assets", "addons", "official", "images", "banners")
+os.makedirs(BANNER_DIR, exist_ok=True)
+
+
+def build_svg_lead():
+ """Banner 1: 领航篇 - 企业级软件定制开发 · 数字化技术中台与自主可控系统"""
+ return ''''''
+
+
+def build_svg_craft():
+ """Banner 2: 定制篇 - 按需定制开发 · 源码完整移交 · 原生APP与微信小程序全生态"""
+ return ''''''
+
+
+def build_svg_agent():
+ """Banner 3: 智能篇 - 企业级私域 AI 智能体 · 垂直 RAG 知识库 · 多 Agent 协同"""
+ return ''''''
+
+
+def build_svg_matrix():
+ """Banner 4: 产品矩阵篇 - 商城、智能收银、进销存 ERP、云原生 SaaS"""
+ return ''''''
+
+
+def generate_all():
+ generators = {
+ "banner_lead.svg": build_svg_lead,
+ "banner_craft.svg": build_svg_craft,
+ "banner_agent.svg": build_svg_agent,
+ "banner_matrix.svg": build_svg_matrix,
+ }
+
+ for filename, func in generators.items():
+ svg_content = func()
+ target_path = os.path.join(BANNER_DIR, filename)
+ with open(target_path, "w", encoding="utf-8") as f:
+ f.write(svg_content)
+ print(f"Generated {filename}: {len(svg_content)} bytes")
+
+
+if __name__ == "__main__":
+ generate_all()
diff --git a/tests/test_vivid_banners.py b/tests/test_vivid_banners.py
new file mode 100644
index 0000000..b4b8361
--- /dev/null
+++ b/tests/test_vivid_banners.py
@@ -0,0 +1,82 @@
+# -*- coding: utf-8 -*-
+"""
+测试鲜明轮播图系统 (Test Vivid Banner Carousel System)
+验证首屏 4 张轮播图的鲜明度、专业业务实体感、无AI味、CSS通透遮罩以及全端结构完整性。
+"""
+
+import os
+import re
+import unittest
+
+ROOT_DIR = os.path.abspath(os.path.join(os.path.dirname(__file__), ".."))
+BANNER_DIR = os.path.join(ROOT_DIR, "public", "assets", "addons", "official", "images", "banners")
+CSS_PATH = os.path.join(ROOT_DIR, "public", "assets", "addons", "official", "css", "modern_nhc.css")
+PC_HOME_PATH = os.path.join(ROOT_DIR, "addons", "official", "view", "web", "official_home", "index.html")
+M_HOME_PATH = os.path.join(ROOT_DIR, "addons", "official", "view", "web", "official_home", "index_e.html")
+
+
+class VividBannerCarouselTest(unittest.TestCase):
+ """验证鲜明高质感轮播图组件"""
+
+ def test_01_banner_files_exist_and_non_empty(self):
+ """1. 验证 4 张核心轮播图资源物理存在且大小合理"""
+ banners = ["banner_lead", "banner_craft", "banner_agent", "banner_matrix"]
+ for b in banners:
+ svg_file = os.path.join(BANNER_DIR, f"{b}.svg")
+ jpg_file = os.path.join(BANNER_DIR, f"{b}.jpg")
+ # 必须至少有一种高质感格式存在,且文件大小大于 2KB
+ exists = False
+ if os.path.exists(svg_file) and os.path.getsize(svg_file) > 2048:
+ exists = True
+ elif os.path.exists(jpg_file) and os.path.getsize(jpg_file) > 2048:
+ exists = True
+ self.assertTrue(exists, f"轮播图文件不存在或过小: {b}")
+
+ def test_02_css_gradient_mask_not_obscuring_right_visual(self):
+ """2. 验证 CSS 渐变遮罩优化:右侧区域必须保持通透,严禁在 50% 处覆盖 >90% 重度白雾"""
+ with open(CSS_PATH, "r", encoding="utf-8") as f:
+ css_content = f.read()
+
+ # 检查 4 个 slide 主题
+ for i in range(1, 5):
+ theme_class = f".nhc-slide-theme-{i}"
+ self.assertIn(theme_class, css_content, f"CSS 中缺少主题定义: {theme_class}")
+
+ # 检查是否去除了原本在 50% 覆盖 0.92 白色的遮罩问题
+ # 原写法: rgba(255, 255, 255, 0.92) 50%
+ # 优化后右侧主体应通透,不再出现 50% 处 0.92 白
+ self.assertNotIn("rgba(255, 255, 255, 0.92) 50%", css_content,
+ "CSS 仍保留 50% 处 92% 重度白色遮罩,导致右侧鲜明视窗被严重冲淡泛白")
+
+ def test_03_banner_rich_content_and_vivid_colors(self):
+ """3. 验证轮播图包含真实工业级软件要素与鲜明品牌色彩 (科技蓝 #2563EB, 辅助青 #06B6D4, 紫 #7C3AED)"""
+ svg_banners = {
+ "banner_lead": ["2563EB", "06B6D4", "QPS", "微服务"],
+ "banner_craft": ["2563EB", "06B6D4", "小程序", "API"],
+ "banner_agent": ["7C3AED", "2563EB", "RAG", "Agent"],
+ "banner_matrix": ["2563EB", "POS", "ERP", "SaaS"]
+ }
+ for b, expected_keywords in svg_banners.items():
+ svg_file = os.path.join(BANNER_DIR, f"{b}.svg")
+ if os.path.exists(svg_file):
+ with open(svg_file, "r", encoding="utf-8") as f:
+ content = f.read()
+ for kw in expected_keywords:
+ self.assertTrue(
+ kw.lower() in content.lower(),
+ f"轮播图 {b}.svg 缺少业务要素或鲜明特征词: {kw}"
+ )
+
+ def test_04_pc_and_mobile_template_integrity(self):
+ """4. 验证 PC 与移动端模板幻灯片数量均为 4,包含对应的主题类名"""
+ for page_path in [PC_HOME_PATH, M_HOME_PATH]:
+ with open(page_path, "r", encoding="utf-8") as f:
+ html = f.read()
+ for i in range(1, 5):
+ self.assertIn(f"nhc-slide-theme-{i}", html, f"页面缺少主题类 nhc-slide-theme-{i}: {page_path}")
+ # 必须包含 4 个幻灯片标识
+ self.assertEqual(len(re.findall(r'nhc-slide-theme-\d', html)), 4, f"幻灯片数量不等于 4: {page_path}")
+
+
+if __name__ == "__main__":
+ unittest.main()