From e8c5345539eab9e28f1513082c38514e4074cda0 Mon Sep 17 00:00:00 2001 From: wikiboss Date: Thu, 8 Oct 2026 18:36:05 +0800 Subject: [PATCH] =?UTF-8?q?fix(homepage-buttons):=20=E5=85=A8=E9=9D=A2?= =?UTF-8?q?=E5=AE=A1=E6=9F=A5=E5=B9=B6=E7=BA=A0=E6=AD=A3=E9=A6=96=E9=A1=B5?= =?UTF-8?q?=E6=89=80=E6=9C=89=E6=8C=89=E9=92=AE=E8=B7=B3=E8=BD=AC=E9=93=BE?= =?UTF-8?q?=E8=B7=AF=EF=BC=8C=E6=94=AF=E6=8C=81=E5=B9=B3=E6=BB=91=E6=BB=9A?= =?UTF-8?q?=E5=8A=A8=E4=B8=8E=E9=94=9A=E7=82=B9=E9=98=B2=E9=81=AE=E6=8C=A1?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../view/web/official_common/pc/footer.html | 2 +- .../view/web/official_common/pc/nav.html | 2 +- .../view/web/official_home/index.html | 45 +++++- .../view/web/official_home/index_e.html | 80 +++++++++- .../assets/addons/official/css/modern_nhc.css | 27 ++++ tests/run_tests.py | 12 +- tests/test_homepage_button_links.py | 149 ++++++++++++++++++ 7 files changed, 304 insertions(+), 13 deletions(-) create mode 100644 tests/test_homepage_button_links.py diff --git a/addons/official/view/web/official_common/pc/footer.html b/addons/official/view/web/official_common/pc/footer.html index 7f3720f..c69586c 100644 --- a/addons/official/view/web/official_common/pc/footer.html +++ b/addons/official/view/web/official_common/pc/footer.html @@ -47,7 +47,7 @@
  • 标杆案例
  • 关于我们
  • 需求预约
  • -
  • 交付流程
  • +
  • 交付流程
  • diff --git a/addons/official/view/web/official_common/pc/nav.html b/addons/official/view/web/official_common/pc/nav.html index 6082956..48a2f54 100644 --- a/addons/official/view/web/official_common/pc/nav.html +++ b/addons/official/view/web/official_common/pc/nav.html @@ -253,7 +253,7 @@
    - + 预约演示 diff --git a/addons/official/view/web/official_home/index.html b/addons/official/view/web/official_home/index.html index a4ca171..082157f 100644 --- a/addons/official/view/web/official_home/index.html +++ b/addons/official/view/web/official_home/index.html @@ -158,7 +158,7 @@ 历经千万级真实交易峰值考验的标准模块化产品体系。支持多商户分销清算、断网离线收银与多端硬件联动、多仓库多批次进销存盘点,支持公有云订阅与专有云源码买断部署。

    - + 申请全功能在线演示 @@ -298,8 +298,8 @@
  • 业务审批、数据分析与工单智能自动化
  • 大模型本地私有化部署与敏感数据防护
  • - - 探索智能体落地案例 + + 探索智能体开发方案
    @@ -350,7 +350,7 @@
    @@ -379,7 +379,7 @@ @@ -408,7 +408,7 @@ @@ -437,7 +437,7 @@ @@ -493,6 +493,12 @@
    日峰值订单处理
    +
    + + 查看案例复盘与实测数据 + + +
    @@ -526,6 +532,12 @@
    全国门店稳定部署
    +
    + + 查看案例复盘与实测数据 + + +
    @@ -559,6 +571,12 @@
    采购采购周期缩短
    +
    + + 查看案例复盘与实测数据 + + +
    @@ -592,6 +610,12 @@
    业务采纳准确率
    +
    + + 查看案例复盘与实测数据 + + +
    @@ -667,6 +691,13 @@

    + +
    + + 查阅标准化研发流程与质量规范 + + +
    diff --git a/addons/official/view/web/official_home/index_e.html b/addons/official/view/web/official_home/index_e.html index 844393d..201a47f 100644 --- a/addons/official/view/web/official_home/index_e.html +++ b/addons/official/view/web/official_home/index_e.html @@ -172,7 +172,7 @@ 千万级真实交易峰值淬炼的标准成熟产品矩阵,支持即开即用公有云 SaaS 与私有化部署。

    - + 申请全系统演示 @@ -249,6 +249,12 @@
  • 业务中台整合与跨系统数据打通
  • 金融级数据加密与私有化安全部署
  • +
    + + 了解中台定制方案 + + +
    @@ -262,6 +268,12 @@
  • 微信小程序、企业微信生态深度闭环
  • 蓝牙硬件与物联网 IoT 边缘设备对接
  • +
    + + 查看移动端定制能力 + + +
    @@ -275,8 +287,21 @@
  • 多智能体(Multi-Agent)协同决策与执行
  • 业务审批、数据分析与工单智能自动化
  • +
    + + 探索智能体开发方案 + + +
    + +
    + + 查看完整软件开发与交付能力 + + +
    @@ -297,23 +322,42 @@ 全渠道商城

    商城

    B2B2C 多商户入驻、社交裂变营销与全域私域流量精细化运营系统。

    +
    + 查看详情 +
    毫秒级收银

    收银

    软硬件一体智能收银系统,聚合支付秒级核销,断网离线平稳记账。

    +
    + 申请演示 +
    业财一体化

    进销存

    采购、销售、仓储与财务全链路打通,多仓实时调拨与智能补货预警。

    +
    + 查看详情 +
    多租户平台

    SaaS版本

    云原生高可用多租户架构,开箱即用免运维,弹性扩展金融级容灾。

    +
    + 立即开通 +
    + +
    + + 浏览完整商业产品矩阵 + + +
    @@ -343,6 +387,12 @@
    日峰值订单
    +
    + + 查看案例复盘与实测 + + +
    @@ -358,8 +408,21 @@
    门店稳定运行
    +
    + + 查看案例复盘与实测 + + +
    + +
    + + 浏览全部标杆案例 + + +
    @@ -397,6 +460,13 @@

    私有化与维保

    + +
    + + 查阅标准化研发流程与质量规范 + + +
    @@ -438,8 +508,12 @@ 资深系统架构师团队随时待命,为您提供深度业务剖析与技术方案规划。

    -
    - + diff --git a/public/assets/addons/official/css/modern_nhc.css b/public/assets/addons/official/css/modern_nhc.css index ddc8941..b3b751b 100644 --- a/public/assets/addons/official/css/modern_nhc.css +++ b/public/assets/addons/official/css/modern_nhc.css @@ -38,12 +38,23 @@ } /* 基础重置与重构 */ +html { + scroll-behavior: smooth; +} + * { box-sizing: border-box; margin: 0; padding: 0; } +/* 锚点跳转平滑定位偏移,避免被 76px 顶部固定导航栏遮挡标题 */ +section[id], +div[id] { + scroll-margin-top: 86px; +} + + body.body_index { background-color: var(--bg-primary); color: var(--text-secondary); @@ -941,6 +952,22 @@ img { transform: translateY(-3px); } +.nhc-case-card-link { + display: inline-flex; + align-items: center; + gap: 6px; + font-size: 13px; + font-weight: 500; + color: var(--primary); + margin-top: 18px; + transition: all 0.2s ease; +} + +.nhc-case-card-link:hover { + color: var(--primary-hover); + transform: translateX(4px); +} + .nhc-case-meta { display: flex; align-items: center; diff --git a/tests/run_tests.py b/tests/run_tests.py index 927ac1d..675f2cc 100644 --- a/tests/run_tests.py +++ b/tests/run_tests.py @@ -252,6 +252,15 @@ def test_natural_copywriting_suite(): res.assert_true(test_result.wasSuccessful(), f"务实工程文案断言全部通过 (共 {test_result.testsRun} 项)") return res.summary() +def test_homepage_button_links_suite(): + res = TestResult("首页按钮跳转与链路专项测试 (HomepageButtonLinks)") + from tests.test_homepage_button_links import HomepageButtonLinksTest + suite = unittest.TestLoader().loadTestsFromTestCase(HomepageButtonLinksTest) + runner = unittest.TextTestRunner(verbosity=0) + test_result = runner.run(suite) + res.assert_true(test_result.wasSuccessful(), f"首页所有按钮点击与跳转断言全部通过 (共 {test_result.testsRun} 项)") + return res.summary() + def main(): import unittest results = [ @@ -264,7 +273,8 @@ def main(): test_no_ai_flavor_suite(), test_client_rigor_suite(), test_ad_law_compliance_suite(), - test_natural_copywriting_suite() + test_natural_copywriting_suite(), + test_homepage_button_links_suite() ] sys.exit(0 if all(results) else 1) diff --git a/tests/test_homepage_button_links.py b/tests/test_homepage_button_links.py new file mode 100644 index 0000000..955f4ac --- /dev/null +++ b/tests/test_homepage_button_links.py @@ -0,0 +1,149 @@ +#!/usr/bin/env python3 +# -*- coding: utf-8 -*- +""" +首页按钮点击与跳转审查自动化测试 (TDD) +验证首页所有按钮(PC 端与移动端)均准确跳转到对应的业务位置或锚点 +""" +import os +import re +import unittest + +BASE_DIR = os.path.dirname(os.path.dirname(os.path.abspath(__file__))) + +class HomepageButtonLinksTest(unittest.TestCase): + def setUp(self): + self.pc_home_path = os.path.join(BASE_DIR, 'addons', 'official', 'view', 'web', 'official_home', 'index.html') + self.mobile_home_path = os.path.join(BASE_DIR, 'addons', 'official', 'view', 'web', 'official_home', 'index_e.html') + self.pc_nav_path = os.path.join(BASE_DIR, 'addons', 'official', 'view', 'web', 'official_common', 'pc', 'nav.html') + self.css_path = os.path.join(BASE_DIR, 'public', 'assets', 'addons', 'official', 'css', 'modern_nhc.css') + + with open(self.pc_home_path, 'r', encoding='utf-8') as f: + self.pc_html = f.read() + + with open(self.mobile_home_path, 'r', encoding='utf-8') as f: + self.mobile_html = f.read() + + with open(self.pc_nav_path, 'r', encoding='utf-8') as f: + self.pc_nav = f.read() + + with open(self.css_path, 'r', encoding='utf-8') as f: + self.css = f.read() + + def test_01_pc_hero_carousel_buttons(self): + """PC 首页首屏轮播图所有按钮跳转必须精准""" + # 幻灯片 1:预约架构师评估 与 浏览成熟产品 + self.assertIn('#contact', self.pc_html, "首屏应包含直达联系模块的锚点跳转") + self.assertIn('#products', self.pc_html, "首屏应包含直达产品矩阵的锚点跳转") + + # 幻灯片 2:软件开发能力 与 标杆案例 + self.assertTrue( + "official_product/list" in self.pc_html and ":pid'=>19" in self.pc_html, + "幻灯片2必须准确跳转到服务页 (:pid=>19)" + ) + self.assertTrue( + "official_case_show/list" in self.pc_html and ":pid'=>14" in self.pc_html, + "幻灯片2必须准确跳转到案例页 (:pid=>14)" + ) + + # 幻灯片 4:申请全功能在线演示 - 严禁粗糙跳到没有演示功能的 #products + # 必须跳转到产品页演示沙箱 demo-sandbox 或联系预约 + self.assertFalse( + re.search(r']*>(?:(?!)[\s\S])*?申请全功能在线演示', self.pc_html), + "申请全功能在线演示严禁跳往 #products,必须精准跳转演示沙箱或预约页面" + ) + self.assertTrue( + "demo-sandbox" in self.pc_html or "official_online_message/list" in self.pc_html, + "申请在线演示必须链接到 demo-sandbox 或联系预约" + ) + + def test_02_pc_service_section_buttons(self): + """PC 首页服务板块跳转必须准确一致""" + # 核心服务一与二必须跳转服务页 + self.assertTrue( + re.search(r'href="\{:addon_url\(\'official/web\.official_product/list\',\[\':pid\'=>19,\':sid\'=>19\]\)[^"]*"[^>]*>[\s\S]*?软件开发', self.pc_html) or + re.search(r'软件开发方案[\s\S]*?\{:addon_url\(\'official/web\.official_product/list\'', self.pc_html) or + ("了解软件开发" in self.pc_html and ":pid'=>19" in self.pc_html), + "软件开发服务卡片必须跳转到服务页" + ) + + # 核心服务三:如果是“探索智能体开发方案”,跳转到服务页;如果是“案例”,必须跳案例页,文案与链接不能精神分裂 + if "探索智能体落地案例" in self.pc_html: + # 如果文案是案例,则链接必须是案例页 + self.assertTrue( + "official_case_show/list" in self.pc_html, + "探索智能体落地案例必须指向案例页" + ) + + def test_03_pc_product_section_buttons(self): + """PC 首页四大成熟商用系统按钮必须跳转到对应位置""" + # 收银「申请演示」必须跳往产品页的演示沙箱 #demo-sandbox 或联系页 + self.assertTrue( + re.search(r'href="\{:addon_url\(\'official/web\.official_product/list\',\[\':pid\'=>22,\':sid\'=>22\]\)\}#demo-sandbox"[^>]*>[\s\S]*?申请演示', self.pc_html) or + ("demo-sandbox" in self.pc_html and "申请演示" in self.pc_html), + "收银系统【申请演示】必须精准跳转到产品独立页演示沙箱" + ) + + # SaaS版本「立即开通」必须跳往演示开通沙箱或预约 + self.assertTrue( + re.search(r'href="\{:addon_url\(\'official/web\.official_product/list\',\[\':pid\'=>22,\':sid\'=>22\]\)\}#demo-sandbox"[^>]*>[\s\S]*?立即开通', self.pc_html) or + ("demo-sandbox" in self.pc_html and "立即开通" in self.pc_html) or + ("official_online_message/list" in self.pc_html and "立即开通" in self.pc_html), + "SaaS版本【立即开通】必须跳转到产品演示沙箱或咨询开通" + ) + + def test_04_pc_case_cards_clickable(self): + """PC 首页案例卡片必须具备可点击跳转到案例页的入口""" + # 每个案例卡片应包含查看详情链接或整卡可点击 + case_links_count = len(re.findall(r'official_case_show/list', self.pc_html)) + self.assertGreaterEqual(case_links_count, 3, "首页案例板块及卡片必须包含足够的案例页跳转链接") + self.assertIn("浏览全部标杆案例", self.pc_html, "首页案例板块必须包含【浏览全部标杆案例】主按钮") + + def test_05_pc_process_and_cta_buttons(self): + """PC 首页交付流程与底部 CTA 按钮跳转""" + # 底部 CTA 必须有预约架构师技术初审和致电专线 + self.assertTrue( + "official_online_message/list" in self.pc_html and ":pid'=>18" in self.pc_html, + "底部 CTA 必须准确跳转到联系留言独立页 (:pid=>18)" + ) + self.assertIn('tel:{:__config(\'site_mobile\',\'value\')}', self.pc_html, "底部 CTA 必须包含拨打电话链接") + + def test_06_nav_actions_button(self): + """导航栏右上角行动按钮必须全局可用,不能是单页孤立锚点""" + self.assertFalse( + re.search(r']*>(?:(?!)[\s\S])*?申请全系统演示', self.mobile_html), + "移动端申请全系统演示严禁跳转 #products,必须跳转演示沙箱或联系预约" + ) + # 服务、产品、案例必须有链接或按钮跳转到独立页 + self.assertTrue( + "official_product/list" in self.mobile_html and ":pid'=>19" in self.mobile_html, + "移动端服务板块必须有直达服务独立页的跳转链接" + ) + self.assertTrue( + "official_product/list" in self.mobile_html and ":pid'=>22" in self.mobile_html, + "移动端产品板块必须有直达产品独立页的跳转链接" + ) + self.assertTrue( + "official_case_show/list" in self.mobile_html and ":pid'=>14" in self.mobile_html, + "移动端案例板块必须有直达案例独立页的跳转链接" + ) + # 移动端底部 CTA 必须有在线咨询与致电 + self.assertTrue( + "official_online_message/list" in self.mobile_html or "tel:" in self.mobile_html, + "移动端底部 CTA 必须具备有效联络跳转" + ) + + def test_08_smooth_scroll_and_offset(self): + """CSS 必须具备平滑滚动与避免 fixed 导航遮挡的 scroll-margin-top""" + self.assertIn('scroll-behavior: smooth', self.css, "CSS 必须配置 scroll-behavior: smooth") + self.assertIn('scroll-margin-top', self.css, "CSS 必须配置 scroll-margin-top 防止锚点被 fixed 导航遮挡") + +if __name__ == '__main__': + unittest.main()