diff --git a/addons/official/view/web/official_common/mobile/link.html b/addons/official/view/web/official_common/mobile/link.html index 340fe4a..9211c21 100644 --- a/addons/official/view/web/official_common/mobile/link.html +++ b/addons/official/view/web/official_common/mobile/link.html @@ -1,3 +1,4 @@ + diff --git a/addons/official/view/web/official_common/pc/footer.html b/addons/official/view/web/official_common/pc/footer.html index a0b7dd8..386a1a1 100644 --- a/addons/official/view/web/official_common/pc/footer.html +++ b/addons/official/view/web/official_common/pc/footer.html @@ -1,73 +1,79 @@ -
-
-
- -
    - {if count($all_official_category)} - {foreach $all_official_category as $val} - {if $val['is_flooter_nav_show']} -
  • - {:ze($val,'name')} - -
  • - {/if} - {/foreach} - {/if} - -
-
-
- {:__config('site_relation')}:{:__config('site_relation','value')} -
-

{:__config('site_mobile')}:{:__config('site_mobile','value')}

- {:__config('site_email')}:{:__config('site_email','value')} -
- {:__config('site_address')}:{:__config('site_address','value')} -
+ +
+
+ - - - - - \ No newline at end of file + + +
+
+ \ No newline at end of file diff --git a/addons/official/view/web/official_common/pc/link.html b/addons/official/view/web/official_common/pc/link.html index 4f544d0..041140f 100644 --- a/addons/official/view/web/official_common/pc/link.html +++ b/addons/official/view/web/official_common/pc/link.html @@ -1,4 +1,5 @@ + diff --git a/addons/official/view/web/official_common/pc/nav.html b/addons/official/view/web/official_common/pc/nav.html index a530b1a..0dfd63e 100644 --- a/addons/official/view/web/official_common/pc/nav.html +++ b/addons/official/view/web/official_common/pc/nav.html @@ -1,132 +1,55 @@ - - - - - - -
-
-
-
- - + +
+ -
- - - - -
- - \ No newline at end of file +
+ \ No newline at end of file diff --git a/addons/official/view/web/official_home/index.html b/addons/official/view/web/official_home/index.html index 9e26e1c..2e38c21 100644 --- a/addons/official/view/web/official_home/index.html +++ b/addons/official/view/web/official_home/index.html @@ -1,201 +1,614 @@ {extend name="web/official_common/pc/base" /} {block name="content"} - + - -
-
-
-

{:ze($fuwu,'name')}

-

{:ze($fuwu,'subheading')}

- + +
+
+
+ +
+ 匠心铸造 + 现代企业数字化底座与智能体定制专家 +
+ + +

+ 纳百川以成巨流 聚智能以启新元 +

+ + +

+ 纳海川科技专注于为政企与高成长型企业构筑稳固的业务技术中台、全端移动生态与垂直领域 AI 智能体体系,融合东方秩序美学与现代软件工程标准,赋能实体业务深层数字化跃升。 +

+ + + + + +
+
+
99.8%
+
项目按期高质量交付率
+
+
+
50+
+
核心自主软件著作权资产
+
+
+
200+
+
政企与各行业标杆客户
+
+
+
10+
+
年企业级软件工程沉淀
+
+
-
-
    - +
+
+ - {foreach $fuwu['data'] as $key => $item} -
  • -
    - -
    {$item['title']}
    -

    {$item['subheading']}

    + + +
    +
    +
    + +

    聚焦三大核心服务 · 铸造数字生产力

    +

    + 紧密围绕企业实际业务痛点,提供从底层中台架构、全场景移动端触点到前沿 AI 智能体的全栈定制研发服务。 +

    +
    +
    + +
    + +
    + 壹 +
    + +
    +

    软件开发

    +

    + 定制企业级业务中台与私有化核心系统,解决高并发性能瓶颈、数据孤岛与复杂业务逻辑流转难题。 +

    +
      +
    • 企业微服务与分布式高可用架构
    • +
    • 业务中台整合与跨系统数据打通
    • +
    • 金融级数据加密与私有化安全部署
    • +
    • 严格代码质量审计与完整源码交付
    • +
    + + 了解软件开发方案 + + +
    + + +
    + 贰 +
    + +
    +

    APP与小程序定制

    +

    + 覆盖全端移动生态,深度定制 iOS/Android 原生与跨平台 APP,无缝接入微信、支付宝及抖音多端小程序。 +

    +
      +
    • iOS / Android 跨平台高性能统一框架
    • +
    • 微信小程序、企业微信生态深度闭环
    • +
    • 蓝牙硬件、物联网 IoT 边缘设备对接
    • +
    • 60fps 丝滑交互与极致首屏加载性能
    • +
    + + 查看移动端定制能力 + + +
    + + +
    + 叁 +
    + +
    +

    智能体开发

    +

    + 聚焦垂直领域大模型工程化落地,研发具备深度业务推理、企业知识库检索(RAG)与自主工作流调度的高阶 Agent。 +

    +
      +
    • 私域知识库 RAG 向量检索与精准问答
    • +
    • 多智能体(Multi-Agent)协同决策与执行
    • +
    • 业务审批、数据分析与工单智能自动化
    • +
    • 大模型本地私有化部署与敏感数据防护
    • +
    + + 探索智能体落地案例 + + +
    +
    +
    +
    + + + + +
    +
    +
    + +

    四大成熟产品矩阵 · 即开即用的商业驱动力

    +

    + 标准化模块架构,兼具高灵活性与成熟稳定性,全面支持公有云 SaaS 订阅与专有私有化买断部署。 +

    +
    +
    + +
    + +
    +
    + 新零售 · 全渠道 +

    商城

    +

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

    +
    +
      +
    • + + 微信、H5、APP 三端订单与数据无缝同步 +
    • +
    • + + 分销裂变、拼团秒杀、积分抵扣营销工具 +
    • +
    • + + 供应商结算与自动佣金分账体系 +
    • +
    + +
    + + +
    +
    + 智慧门店 · 秒级结算 +

    收银

    +

    + 软硬件一体化智能收银系统,毫秒级结算响应,无缝适配各类商超零售与餐饮连锁。 +

    +
    +
      +
    • + + 聚合支付秒级核销(微信/支付宝/银行卡) +
    • +
    • + + 网络中断离线记账,联网自动双向对账 +
    • +
    • + + 全面兼容扫码枪、计价秤、小票打印硬件 +
    • +
    + +
    + + +
    +
    + 业财一体 · 精细管控 +

    进销存

    +

    + 采购、销售、仓储与财务全链路打通的云进销存 ERP,消除呆滞料,盘活现金流。 +

    +
    +
      +
    • + + 多级仓库实时智能调拨与安全库存预警 +
    • +
    • + + 批次管理与全生命周期保质期扫码溯源 +
    • +
    • + + 自动生成经营毛利分析与多维度财务报表 +
    • +
    + +
    + + +
    +
    + 云原生 · 高可用 +

    SaaS版本

    +

    + 多租户云原生架构 SaaS 平台,开箱即用,免运维部署,伴随企业规模弹性扩展。 +

    +
    +
      +
    • + + 多租户物理/逻辑强隔离,数据主权严密受控 +
    • +
    • + + 弹性容器集群与自动故障转移,99.99% 高可用 +
    • +
    • + + 提供丰富标准 OpenAPI 与第三方生态扩展 +
    • +
    + +
    +
    +
    +
    + + + + +
    +
    +
    + +

    精选实践成果 · 严谨数据验证

    +

    + 我们以扎实的工程交付标准,为各行业客户交付经得起业务考验的数字化解决方案。 +

    +
    +
    + +
    + +
    +
    + 商贸批发 · 数字化中台 + 成果验证 +
    +

    大型快消供应链集团「全渠道分销商城与订货中台」

    +
    +
    + 业务挑战 + 跨区域经销商价格体系混乱,传统人工抄单错漏率高,订单处理周期超过 24 小时。
    -
  • - {/foreach} - - -
    -
    -
    -
    - - - - - - -
    -
    -
    -

    {:ze($soft,'name')}

    -

    {:ze($soft,'subheading')}

    - -
    -
    -
      - - - {foreach $soft['data'] as $key => $item} -
    • -
      - -
      {$item['title']}
      -

      {$item['subheading']}

      - - 咨询方案 - 了解详情 - +
      + 解决方案 + 搭建纳川定制 B2B 分销中台,接入灵活等级阶梯价、信用授信账期管控及自动化拆单履约。
      -
    • - {/foreach} - -
    -
    -
    -
    -
    - - - -
    -
    -
    -

    {:ze($new_list,'name')}

    -

    {:ze($new_list,'subheading')}

    - - -
    -
    -
      - - {foreach $new_list['data'] as $key => $item} -
    • - - {$item['title']} - - +
      +
      +
      65%
      +
      订单处理效率提升
      -
    • - {/foreach} +
      +
      0.02%
      +
      人工错单率降至
      +
      +
      +
      10W+
      +
      日峰值订单处理
      +
      +
    +
    - + +
    +
    + 连锁零售 · 软硬件一体 + 成果验证 +
    +

    知名区域连锁餐饮「全场景智能收银与门店一体化」

    +
    +
    + 业务挑战 + 就餐高峰期前台排队拥堵严重,前厅与后厨信息断层,各门店原物料损耗无法实时溯源。 +
    +
    + 解决方案 + 上线一体化收银系统与后厨 KDS 联动看板,打通扫码点单、聚合支付与实时扣料核销。 +
    +
    +
    +
    +
    70%
    +
    排队结算耗时缩短
    +
    +
    +
    28%
    +
    物料损耗有效降低
    +
    +
    +
    300+
    +
    全国门店稳定部署
    +
    +
    +
    + + +
    +
    + 智能制造 · 进销存ERP + 成果验证 +
    +

    高端装备制造企业「生产进销存与供应链敏捷协同」

    +
    +
    + 业务挑战 + 零部件品类繁多达数万种,采购节拍与装配需求严重脱节,呆滞库存占用大量资金。 +
    +
    + 解决方案 + 定制落地精益进销存 ERP,建立动态物料 BOM 匹配、安全库存预警与供应商端协同门户。 +
    +
    +
    +
    +
    42%
    +
    综合库存周转率提升
    +
    +
    +
    55%
    +
    呆滞积压料降低
    +
    +
    +
    35%
    +
    采购采购周期缩短
    +
    +
    +
    + + +
    +
    + 政企服务 · AI智能体 + 成果验证 +
    +

    知识密集型政务机构「专属 RAG 业务审核智能体」

    +
    +
    + 业务挑战 + 政策法规与历史档案跨越数十年,人工查证检索费时耗力,初审标准难以保证统一严谨。 +
    +
    + 解决方案 + 构建基于私有大模型与向量数据库的 RAG 智能体,自动检索法规依据并输出规范化审核建议。 +
    +
    +
    +
    +
    <1.5s
    +
    复杂问答检索耗时
    +
    +
    +
    85%
    +
    初审人工耗时缩减
    +
    +
    +
    94.6%
    +
    业务采纳准确率
    +
    +
    +
    +
    + + -
    -
    - - - - -
    -
    -
    -

    {:ze($information,'name')}

    -

    {:ze($information,'subheading')}

    - + + + + + +
    +
    +
    + +

    五步严谨工程法 · 全生命周期守护

    +

    + 恪守现代中式工匠规矩与敏捷工程标准,每一步都有明确的标准产出与质量验收节点。 +

    +
    - -
    - + +
    + +
    +
    01
    +

    需求深度研判

    +

    + 格物致知,派驻资深架构师深入业务一线,全流程梳理业务痛点,产出详尽需求规格蓝图。 +

    +
    + + +
    +
    02
    +

    架构严谨立骨

    +

    + 经纬分明,制定高可用系统拓扑、高安全数据底座、微服务治理及应对极端峰值的应急预案。 +

    +
    + + +
    +
    03
    +

    敏捷测试驱动

    +

    + 精工细琢,严格遵循 TDD 模式与 CI/CD 自动化流水线,代码评审严苛,确保无缺陷交付。 +

    +
    + + +
    +
    04
    +

    高压安全审计

    +

    + 严审磐石,全路径模拟超负荷并发压力测试,配合权威渗透扫描与合规校验,坚固如磐。 +

    +
    + + +
    +
    05
    +

    私有化与维保

    +

    + 笃行护航,专业工程师实地或专网部署交付,提供完善运维赋能培训与 7x24 持续演进支持。 +

    +
    -
    -
    - - -
    -
    -
    -

    {:ze($kehu,'name')}

    -

    {:ze($kehu,'subheading')}

    - +
    + + + + +
    +
    +
    + +

    客户信赖之选 · 见证长期价值同行

    +

    + 我们珍视每一次托付,用稳定运行的系统与专业的态度赢得长期战略合作伙伴的由衷认可。 +

    +
    -
    -
      - - {foreach $kehu['data'] as $item} -
    • - {$item['name']} -
    • - {/foreach} -
    + +
    +
    +
    “
    +

    + 纳海川团队展现了极强的架构能力与业务敏锐度。在极短周期内为我们重构了 B2B 订货中台,不仅顶住了销售大促的高峰压力,更彻底解决了困扰我们多年的库存对账误差问题。 +

    +
    +
    张
    +
    + 张立伟 + 供应链流通集团 · 数字化技术总监 +
    +
    +
    + +
    +
    “
    +

    + 收银与门店进销存系统在 300 多家连锁门店上线后,收银员上手迅速,几乎没有出现过死机或掉单情况。即使遇到网络故障,离线记账功能也能平稳过度,让我们非常安心。 +

    +
    +
    李
    +
    + 李青蓉 + 连锁新零售品牌 · 运营副总裁 +
    +
    +
    + +
    +
    “
    +

    + 在企业级 AI 智能体开发上,纳海川团队的技术储备令人印象深刻。搭建的专属 RAG 知识库检索准确率极高,而且在私有化部署和数据合规上做得滴水不漏,值得托付。 +

    +
    +
    王
    +
    + 王振邦 + 智能制造装备企业 · 首席信息官 CIO +
    +
    +
    +
    + + +
    + 服务涵盖政企金融、先进制造、新零售及现代物流领域的领先组织 +
    +
    +
    贵阳商贸供应链
    +
    西南智能制造
    +
    黔信互联科技
    +
    连锁零售商超
    +
    智慧农特产业
    +
    现代医药物流
    -
    -
    - - +
    + + + + +
    +
    +
    +
    + 立即携手 +

    准备好开启新一代数字化与智能化升级了吗?

    +

    + 资深系统架构师与业务专家团队随时待命,为您提供深度业务剖析、架构建议与原型演示,24 小时内快速响应对接。 +

    +
    + +
    +
    +
    + + + {/block} \ No newline at end of file diff --git a/addons/official/view/web/official_home/index_e.html b/addons/official/view/web/official_home/index_e.html index 3006e80..428d2e7 100644 --- a/addons/official/view/web/official_home/index_e.html +++ b/addons/official/view/web/official_home/index_e.html @@ -1,120 +1,294 @@ {extend name="web/official_common/mobile/base" /} {block name="css"} - + {/block} - {block name="content"} + - -
    -
    -
    -

    {:ze($new_list,'name')}

    -

    {:ze($new_list,'subheading')}

    -
    -
    - {foreach $new_list['son'] as $item} - {:ze($item,'name')} - {/foreach} -
    -
    + +
    +
    +
    +
    + 匠心铸造 + 现代企业数字化底座与智能体定制专家 +
    - {foreach $new_list['data'] as $key => $item} -
    -
    - 0,':sid'=>0,':id'=>$item['id']])}"'> - - {$item['title']} - - +

    + 纳百川以成巨流
    聚智能以启新元 +

    + +

    + 纳海川科技专注于为政企与高成长型企业构筑稳固的业务技术中台、全端移动生态与垂直领域 AI 智能体体系。 +

    + + + +
    +
    +
    99.8%
    +
    项目按期交付率
    +
    +
    +
    50+
    +
    自主软著资产
    +
    +
    +
    200+
    +
    政企标杆客户
    +
    +
    +
    10+
    +
    年软件工程沉淀
    - {/foreach} -
    -
    +
    + +
    +
    +
    + +

    三大核心服务 · 铸造数字生产力

    +
    +
    - -
    -
    -

    {:ze($fuwu,'name')}

    -

    {:ze($fuwu,'subheading')}

    -
    -
    - {foreach $fuwu['data'] as $key => $item} -
    - -
    -
    {$item['title']}
    -

    {$item['subheading']}

    +
    +
    + 壹 +

    软件开发

    +

    + 定制企业级业务中台与私有化核心系统,解决高并发性能瓶颈、数据孤岛与复杂业务逻辑流转难题。 +

    +
      +
    • 企业微服务与分布式高可用架构
    • +
    • 业务中台整合与跨系统数据打通
    • +
    • 金融级数据加密与私有化安全部署
    • +
    +
    + +
    + 贰 +

    APP与小程序定制

    +

    + 覆盖全端移动生态,深度定制 iOS/Android 原生与跨平台 APP,无缝接入微信、支付宝及抖音小程序。 +

    +
      +
    • iOS / Android 跨平台高性能统一框架
    • +
    • 微信小程序、企业微信生态深度闭环
    • +
    • 蓝牙硬件与物联网 IoT 边缘设备对接
    • +
    +
    + +
    + 叁 +

    智能体开发

    +

    + 聚焦垂直领域大模型工程化落地,研发具备深度业务推理、企业知识库检索(RAG)与自主工作流调度的 Agent。 +

    +
      +
    • 私域知识库 RAG 向量检索与精准问答
    • +
    • 多智能体(Multi-Agent)协同决策与执行
    • +
    • 业务审批、数据分析与工单智能自动化
    • +
    - {/foreach}
    -
    +
    - -
    -
    -

    {:ze($information,'name')}

    -

    {:ze($information,'subheading')}

    -
    -
    - {foreach $information['data'] as $key => $val} - -
    - - {:date('Y-m-d H:i',$val['createtime'])} -
    -
    - {$val['title']} -

    {$val['subheading']}

    -
    -
    - {/foreach} -
    -
    - - -
    -
    -

    {:ze($kehu,'name')}

    -

    {:ze($kehu,'subheading')}

    -
    -
    - {foreach $kehu['data'] as $item} -
    - {$item['name']} + +
    +
    +
    + +

    四大标准化产品矩阵

    +
    +
    + +
    +
    + 全渠道商城 +

    商城

    +

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

    +
    +
    + 毫秒级收银 +

    收银

    +

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

    +
    +
    + 业财一体化 +

    进销存

    +

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

    +
    +
    + 多租户平台 +

    SaaS版本

    +

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

    +
    - {/foreach}
    -
    + + +
    +
    +
    + +

    精选实践成果 · 严谨数据验证

    +
    +
    +
    +
    + 商贸流通 +

    快消集团全渠道分销订货中台

    +
    +
    +
    65%
    +
    订单效率提升
    +
    +
    +
    10W+
    +
    日峰值订单
    +
    +
    +
    +
    + 连锁零售 +

    全国餐饮连锁收银与门店一体化

    +
    +
    +
    70%
    +
    结算耗时缩短
    +
    +
    +
    300+
    +
    门店稳定运行
    +
    +
    +
    +
    +
    +
    + + +
    +
    +
    + +

    五步严谨工程法

    +
    +
    + +
    +
    +
    01
    +

    需求深度研判

    +
    +
    +
    02
    +

    架构严谨立骨

    +
    +
    +
    03
    +

    敏捷测试驱动

    +
    +
    +
    04
    +

    高压安全审计

    +
    +
    +
    05
    +

    私有化与维保

    +
    +
    +
    +
    + + +
    +
    +
    + +

    客户信赖之选

    +
    +
    +
    +
    +

    + 纳海川团队展现了极强的架构能力与业务敏锐度,为我们重构的订货中台平稳抗住大促峰值压力,库存对账零误差。 +

    +
    张总 · 供应链集团技术负责人
    +
    +
    +

    + 收银与门店进销存系统在 300 家连锁门店上线后运行极为稳定,离线记账功能解决了门店断网的大隐患。 +

    +
    李总 · 连锁餐饮运营副总裁
    +
    +
    +
    +
    + + +
    +
    +
    +
    +

    开启新一代数字化与智能化升级

    +

    + 资深系统架构师团队随时待命,为您提供深度业务剖析与技术方案规划。 +

    +
    + +
    +
    +
    + + {/block} - -{block name="js"} - -{/block} - - diff --git a/public/assets/addons/official/css/modern_nhc.css b/public/assets/addons/official/css/modern_nhc.css new file mode 100644 index 0000000..c482338 --- /dev/null +++ b/public/assets/addons/official/css/modern_nhc.css @@ -0,0 +1,1187 @@ +/** + * 纳海川官方网站 - 现代中式浅色高端专业风格规范 CSS + * 色彩体系: + * 背景: #FFFFFF / #F8FAFC / #F1F5F9 + * 主色: #2563EB (科技蓝) + * 辅助: #06B6D4 (青) / #7C3AED (紫) + * 文字: #0F172A (主标题) / #475569 (正文) / #94A3B8 (辅弱) + * 印章红: #DC2626 (朱砂) + * 字体: + * 标题宋体: "Noto Serif SC", "Source Han Serif SC", "SimSun", "Songti SC", serif + * 正文黑体: "Inter", -apple-system, BlinkMacSystemFont, "PingFang SC", "Hiragino Sans GB", "Microsoft YaHei", sans-serif + * 网格: 12 列网格,1280px 最大宽度,圆角 4px - 6px,细线边框,水墨抽象底纹,窗棂格构架 + */ + +:root { + --bg-primary: #FFFFFF; + --bg-secondary: #F8FAFC; + --bg-tertiary: #F1F5F9; + --primary: #2563EB; + --primary-hover: #1D4ED8; + --primary-light: #EFF6FF; + --accent-cyan: #06B6D4; + --accent-purple: #7C3AED; + --seal-red: #DC2626; + --seal-red-bg: #FEF2F2; + --text-primary: #0F172A; + --text-secondary: #475569; + --text-muted: #94A3B8; + --border-color: #E2E8F0; + --border-subtle: #F1F5F9; + --radius-sm: 4px; + --radius-md: 6px; + --shadow-subtle: 0 1px 3px rgba(15, 23, 42, 0.05); + --shadow-card: 0 4px 20px -2px rgba(15, 23, 42, 0.06); + --shadow-hover: 0 12px 28px -4px rgba(37, 99, 235, 0.08); + --font-serif: "Noto Serif SC", "Source Han Serif SC", "SimSun", "Songti SC", serif; + --font-sans: "Inter", -apple-system, BlinkMacSystemFont, "PingFang SC", "Hiragino Sans GB", "Microsoft YaHei", sans-serif; +} + +/* 基础重置与重构 */ +* { + box-sizing: border-box; + margin: 0; + padding: 0; +} + +body.body_index { + background-color: var(--bg-primary); + color: var(--text-secondary); + font-family: var(--font-sans); + font-size: 15px; + line-height: 1.7; + -webkit-font-smoothing: antialiased; + -moz-osx-font-smoothing: grayscale; + overflow-x: hidden; +} + +a { + color: inherit; + text-decoration: none; + transition: all 0.25s ease; +} + +img { + max-width: 100%; + height: auto; + display: block; +} + +/* 1280px 12 列网格容器 */ +.nhc-container { + max-width: 1280px; + margin: 0 auto; + padding: 0 24px; + width: 100%; +} + +/* 现代中式印章徽记 */ +.nhc-seal { + display: inline-flex; + align-items: center; + justify-content: center; + padding: 2px 8px; + border: 1px solid var(--seal-red); + background-color: var(--seal-red-bg); + color: var(--seal-red); + font-family: var(--font-serif); + font-size: 12px; + letter-spacing: 2px; + border-radius: var(--radius-sm); + font-weight: 600; + user-select: none; +} + +.nhc-seal-square { + width: 32px; + height: 32px; + padding: 0; + border: 1.5px solid var(--seal-red); + font-size: 11px; + line-height: 1.1; + text-align: center; + writing-mode: vertical-rl; + letter-spacing: 1px; +} + +/* 现代中式窗棂格与细线装饰 */ +.nhc-lattice-pattern { + background-image: + linear-gradient(to right, rgba(226, 232, 240, 0.4) 1px, transparent 1px), + linear-gradient(to bottom, rgba(226, 232, 240, 0.4) 1px, transparent 1px); + background-size: 40px 40px; +} + +.nhc-section-header { + text-align: center; + margin-bottom: 56px; + position: relative; +} + +.nhc-section-tag { + display: inline-flex; + align-items: center; + gap: 8px; + margin-bottom: 12px; +} + +.nhc-section-tag .nhc-tag-text { + font-size: 13px; + letter-spacing: 3px; + color: var(--primary); + font-weight: 600; + text-transform: uppercase; +} + +.nhc-section-title { + font-family: var(--font-serif); + font-size: 34px; + font-weight: 700; + color: var(--text-primary); + letter-spacing: 1px; + margin-bottom: 16px; + position: relative; + display: inline-block; +} + +.nhc-section-desc { + max-width: 680px; + margin: 0 auto; + color: var(--text-secondary); + font-size: 16px; + line-height: 1.8; +} + +.nhc-line-divider { + display: flex; + align-items: center; + justify-content: center; + gap: 12px; + margin: 16px auto 0; + width: 140px; +} + +.nhc-line-divider::before, +.nhc-line-divider::after { + content: ""; + height: 1px; + flex: 1; + background-color: var(--border-color); +} + +.nhc-line-divider span { + width: 6px; + height: 6px; + transform: rotate(45deg); + background-color: var(--primary); +} + +/* 导航栏设计 */ +.nhc-header { + position: fixed; + top: 0; + left: 0; + right: 0; + z-index: 1000; + background: rgba(255, 255, 255, 0.95); + backdrop-filter: blur(12px); + border-bottom: 1px solid var(--border-color); + transition: all 0.3s ease; +} + +.nhc-nav-inner { + display: flex; + align-items: center; + justify-content: space-between; + height: 76px; +} + +.nhc-logo { + display: flex; + align-items: center; + gap: 14px; +} + +.nhc-logo img { + height: 38px; + width: auto; +} + +.nhc-logo-brand { + display: flex; + flex-direction: column; +} + +.nhc-logo-text { + font-family: var(--font-serif); + font-size: 20px; + font-weight: 700; + color: var(--text-primary); + letter-spacing: 1.5px; + line-height: 1.2; +} + +.nhc-logo-sub { + font-size: 10px; + color: var(--text-muted); + letter-spacing: 2px; + text-transform: uppercase; +} + +.nhc-nav-menu { + display: flex; + align-items: center; + gap: 36px; + list-style: none; +} + +.nhc-nav-link { + font-size: 15px; + font-weight: 500; + color: var(--text-secondary); + position: relative; + padding: 8px 0; + transition: color 0.2s; +} + +.nhc-nav-link:hover, +.nhc-nav-link.active { + color: var(--primary); +} + +.nhc-nav-link::after { + content: ""; + position: absolute; + bottom: 0; + left: 50%; + transform: translateX(-50%); + width: 0; + height: 2px; + background: var(--primary); + transition: width 0.25s ease; + border-radius: 1px; +} + +.nhc-nav-link:hover::after, +.nhc-nav-link.active::after { + width: 100%; +} + +.nhc-nav-actions { + display: flex; + align-items: center; + gap: 16px; +} + +.nhc-btn { + display: inline-flex; + align-items: center; + justify-content: center; + gap: 8px; + padding: 10px 22px; + border-radius: var(--radius-sm); + font-size: 14px; + font-weight: 500; + cursor: pointer; + transition: all 0.25s ease; + border: 1px solid transparent; +} + +.nhc-btn-primary { + background-color: var(--primary); + color: #FFFFFF; + box-shadow: 0 2px 8px rgba(37, 99, 235, 0.25); +} + +.nhc-btn-primary:hover { + background-color: var(--primary-hover); + color: #FFFFFF; + box-shadow: 0 4px 14px rgba(37, 99, 235, 0.35); + transform: translateY(-1px); +} + +.nhc-btn-outline { + border-color: var(--border-color); + background-color: var(--bg-primary); + color: var(--text-primary); +} + +.nhc-btn-outline:hover { + border-color: var(--primary); + color: var(--primary); + background-color: var(--primary-light); +} + +.nhc-btn-sm { + padding: 8px 16px; + font-size: 13px; +} + +.nhc-btn-lg { + padding: 14px 32px; + font-size: 16px; +} + +/* 首屏 (Hero Section) */ +.nhc-hero { + padding-top: 150px; + padding-bottom: 90px; + position: relative; + background: radial-gradient(circle at 50% 10%, rgba(37, 99, 235, 0.05) 0%, rgba(255, 255, 255, 0) 70%), + linear-gradient(180deg, #FFFFFF 0%, #F8FAFC 100%); + border-bottom: 1px solid var(--border-color); + overflow: hidden; +} + +.nhc-hero-content { + text-align: center; + max-width: 960px; + margin: 0 auto; + position: relative; + z-index: 2; +} + +.nhc-hero-badge { + display: inline-flex; + align-items: center; + gap: 10px; + background: #FFFFFF; + border: 1px solid var(--border-color); + padding: 6px 16px; + border-radius: var(--radius-sm); + margin-bottom: 24px; + box-shadow: var(--shadow-subtle); +} + +.nhc-hero-badge-text { + font-size: 13px; + color: var(--text-secondary); + font-weight: 500; +} + +.nhc-hero-title { + font-family: var(--font-serif); + font-size: 52px; + font-weight: 700; + color: var(--text-primary); + line-height: 1.25; + letter-spacing: 2px; + margin-bottom: 24px; +} + +.nhc-hero-title span.highlight { + color: var(--primary); + position: relative; + display: inline-block; +} + +.nhc-hero-subtitle { + font-size: 18px; + color: var(--text-secondary); + line-height: 1.8; + max-width: 780px; + margin: 0 auto 36px; +} + +.nhc-hero-cta { + display: flex; + align-items: center; + justify-content: center; + gap: 16px; + margin-bottom: 64px; +} + +.nhc-hero-metrics { + display: grid; + grid-template-columns: repeat(4, 1fr); + gap: 24px; + background: #FFFFFF; + border: 1px solid var(--border-color); + border-radius: var(--radius-md); + padding: 28px 24px; + box-shadow: var(--shadow-subtle); +} + +.nhc-metric-item { + text-align: center; + position: relative; +} + +.nhc-metric-item:not(:last-child)::after { + content: ""; + position: absolute; + right: 0; + top: 15%; + height: 70%; + width: 1px; + background: var(--border-color); +} + +.nhc-metric-val { + font-family: var(--font-sans); + font-size: 36px; + font-weight: 700; + color: var(--primary); + line-height: 1.1; + margin-bottom: 6px; +} + +.nhc-metric-val sub { + font-size: 18px; + font-weight: 600; + bottom: 0; +} + +.nhc-metric-label { + font-size: 13px; + color: var(--text-secondary); + font-weight: 500; + letter-spacing: 0.5px; +} + +/* 核心服务板块 (Services Section) */ +.nhc-services { + padding: 96px 0; + background-color: var(--bg-primary); + position: relative; +} + +.nhc-services-grid { + display: grid; + grid-template-columns: repeat(3, 1fr); + gap: 28px; +} + +.nhc-service-card { + background: #FFFFFF; + border: 1px solid var(--border-color); + border-radius: var(--radius-md); + padding: 40px 32px; + position: relative; + transition: all 0.3s ease; + overflow: hidden; + box-shadow: var(--shadow-subtle); +} + +.nhc-service-card::before { + content: ""; + position: absolute; + top: 0; + left: 0; + right: 0; + height: 3px; + background: transparent; + transition: background 0.3s ease; +} + +.nhc-service-card:hover { + transform: translateY(-4px); + box-shadow: var(--shadow-hover); + border-color: #BFDBFE; +} + +.nhc-service-card:hover::before { + background: var(--primary); +} + +.nhc-service-watermark { + position: absolute; + top: 20px; + right: 24px; + font-family: var(--font-serif); + font-size: 48px; + color: rgba(226, 232, 240, 0.4); + font-weight: 700; + line-height: 1; + user-select: none; +} + +.nhc-service-icon { + width: 54px; + height: 54px; + background: var(--primary-light); + border: 1px solid rgba(37, 99, 235, 0.15); + border-radius: var(--radius-sm); + display: flex; + align-items: center; + justify-content: center; + color: var(--primary); + margin-bottom: 24px; +} + +.nhc-service-title { + font-family: var(--font-serif); + font-size: 22px; + font-weight: 700; + color: var(--text-primary); + margin-bottom: 12px; +} + +.nhc-service-desc { + font-size: 14px; + color: var(--text-secondary); + line-height: 1.7; + margin-bottom: 24px; +} + +.nhc-service-list { + list-style: none; + border-top: 1px dashed var(--border-color); + padding-top: 20px; + margin-bottom: 24px; +} + +.nhc-service-item { + display: flex; + align-items: center; + gap: 10px; + font-size: 13px; + color: var(--text-secondary); + margin-bottom: 10px; +} + +.nhc-service-item::before { + content: ""; + width: 4px; + height: 4px; + background: var(--primary); + border-radius: 50%; +} + +.nhc-service-link { + display: inline-flex; + align-items: center; + gap: 6px; + font-size: 13px; + font-weight: 600; + color: var(--primary); +} + +.nhc-service-link:hover { + gap: 10px; +} + +/* 核心产品矩阵 (Products Section) */ +.nhc-products { + padding: 96px 0; + background-color: var(--bg-secondary); + border-top: 1px solid var(--border-color); + border-bottom: 1px solid var(--border-color); + position: relative; +} + +.nhc-products-grid { + display: grid; + grid-template-columns: repeat(4, 1fr); + gap: 24px; +} + +.nhc-product-card { + background: #FFFFFF; + border: 1px solid var(--border-color); + border-radius: var(--radius-md); + padding: 32px 24px; + display: flex; + flex-direction: column; + justify-content: space-between; + transition: all 0.3s ease; + box-shadow: var(--shadow-subtle); + position: relative; +} + +.nhc-product-card:hover { + transform: translateY(-4px); + border-color: #BFDBFE; + box-shadow: var(--shadow-hover); +} + +.nhc-product-header { + margin-bottom: 20px; +} + +.nhc-product-type-badge { + display: inline-block; + font-size: 11px; + font-weight: 600; + padding: 2px 8px; + border-radius: var(--radius-sm); + background: var(--bg-tertiary); + color: var(--primary); + margin-bottom: 12px; + letter-spacing: 0.5px; +} + +.nhc-product-name { + font-family: var(--font-serif); + font-size: 20px; + font-weight: 700; + color: var(--text-primary); + margin-bottom: 8px; +} + +.nhc-product-desc { + font-size: 13px; + color: var(--text-secondary); + line-height: 1.6; +} + +.nhc-product-features { + list-style: none; + margin: 18px 0; + padding: 16px 0; + border-top: 1px solid var(--border-color); + border-bottom: 1px solid var(--border-color); +} + +.nhc-product-feat-item { + font-size: 12px; + color: var(--text-secondary); + margin-bottom: 8px; + display: flex; + align-items: center; + gap: 8px; +} + +.nhc-product-feat-item svg { + color: var(--accent-cyan); + flex-shrink: 0; +} + +.nhc-product-footer { + display: flex; + align-items: center; + justify-content: space-between; + margin-top: auto; +} + +.nhc-product-tag { + font-size: 11px; + color: var(--text-muted); +} + +/* 标杆案例 (Cases Section) */ +.nhc-cases { + padding: 96px 0; + background-color: var(--bg-primary); + position: relative; +} + +.nhc-cases-grid { + display: grid; + grid-template-columns: repeat(2, 1fr); + gap: 28px; +} + +.nhc-case-card { + background: #FFFFFF; + border: 1px solid var(--border-color); + border-radius: var(--radius-md); + padding: 36px 32px; + box-shadow: var(--shadow-subtle); + transition: all 0.3s ease; + position: relative; +} + +.nhc-case-card:hover { + border-color: #BFDBFE; + box-shadow: var(--shadow-card); + transform: translateY(-3px); +} + +.nhc-case-meta { + display: flex; + align-items: center; + justify-content: space-between; + margin-bottom: 16px; +} + +.nhc-case-category { + font-size: 12px; + font-weight: 600; + color: var(--primary); + background: var(--primary-light); + padding: 3px 10px; + border-radius: var(--radius-sm); +} + +.nhc-case-title { + font-family: var(--font-serif); + font-size: 20px; + font-weight: 700; + color: var(--text-primary); + margin-bottom: 16px; + line-height: 1.4; +} + +.nhc-case-details { + display: flex; + flex-direction: column; + gap: 12px; + margin-bottom: 24px; +} + +.nhc-case-detail-row { + display: flex; + font-size: 13px; + line-height: 1.6; +} + +.nhc-case-detail-label { + width: 72px; + flex-shrink: 0; + color: var(--text-muted); + font-weight: 500; +} + +.nhc-case-detail-content { + color: var(--text-secondary); +} + +.nhc-case-metrics-bar { + background: var(--bg-secondary); + border: 1px solid var(--border-color); + border-radius: var(--radius-sm); + padding: 14px 20px; + display: flex; + align-items: center; + justify-content: space-around; +} + +.nhc-case-metric-box { + text-align: center; +} + +.nhc-case-metric-num { + font-size: 22px; + font-weight: 700; + color: var(--primary); + line-height: 1; +} + +.nhc-case-metric-sub { + font-size: 11px; + color: var(--text-muted); + margin-top: 4px; +} + +/* 标准化交付流程 (Process Section) */ +.nhc-process { + padding: 96px 0; + background-color: var(--bg-secondary); + border-top: 1px solid var(--border-color); + border-bottom: 1px solid var(--border-color); + position: relative; +} + +.nhc-process-flow { + display: grid; + grid-template-columns: repeat(5, 1fr); + gap: 20px; + position: relative; +} + +.nhc-process-card { + background: #FFFFFF; + border: 1px solid var(--border-color); + border-radius: var(--radius-md); + padding: 28px 20px; + text-align: center; + position: relative; + transition: all 0.3s ease; + box-shadow: var(--shadow-subtle); +} + +.nhc-process-card:hover { + transform: translateY(-4px); + border-color: var(--primary); + box-shadow: var(--shadow-card); +} + +.nhc-process-step-num { + width: 36px; + height: 36px; + margin: 0 auto 16px; + border-radius: var(--radius-sm); + background: var(--primary-light); + color: var(--primary); + font-weight: 700; + font-size: 14px; + display: flex; + align-items: center; + justify-content: center; + border: 1px solid rgba(37, 99, 235, 0.2); +} + +.nhc-process-step-title { + font-family: var(--font-serif); + font-size: 17px; + font-weight: 700; + color: var(--text-primary); + margin-bottom: 8px; +} + +.nhc-process-step-desc { + font-size: 12px; + color: var(--text-secondary); + line-height: 1.6; +} + +/* 客户评价与合作伙伴 (Testimonials & Clients) */ +.nhc-testimonials { + padding: 96px 0; + background-color: var(--bg-primary); + position: relative; +} + +.nhc-testimonials-grid { + display: grid; + grid-template-columns: repeat(3, 1fr); + gap: 28px; + margin-bottom: 56px; +} + +.nhc-testimonial-card { + background: #FFFFFF; + border: 1px solid var(--border-color); + border-radius: var(--radius-md); + padding: 32px 28px; + box-shadow: var(--shadow-subtle); + position: relative; + transition: all 0.3s ease; +} + +.nhc-testimonial-card:hover { + border-color: #BFDBFE; + box-shadow: var(--shadow-card); +} + +.nhc-quote-icon { + font-family: var(--font-serif); + font-size: 36px; + color: #BFDBFE; + line-height: 1; + margin-bottom: 12px; +} + +.nhc-testimonial-text { + font-size: 14px; + color: var(--text-secondary); + line-height: 1.8; + margin-bottom: 20px; +} + +.nhc-testimonial-author { + display: flex; + align-items: center; + gap: 12px; + border-top: 1px solid var(--border-color); + padding-top: 16px; +} + +.nhc-author-avatar { + width: 40px; + height: 40px; + border-radius: var(--radius-sm); + background: var(--bg-tertiary); + display: flex; + align-items: center; + justify-content: center; + font-family: var(--font-serif); + font-weight: 700; + color: var(--primary); + border: 1px solid var(--border-color); +} + +.nhc-author-info { + display: flex; + flex-direction: column; +} + +.nhc-author-name { + font-size: 14px; + font-weight: 600; + color: var(--text-primary); +} + +.nhc-author-role { + font-size: 12px; + color: var(--text-muted); +} + +/* 合作客户 Logo 墙 */ +.nhc-clients-grid { + display: grid; + grid-template-columns: repeat(6, 1fr); + gap: 16px; +} + +.nhc-client-item { + height: 72px; + background: var(--bg-secondary); + border: 1px solid var(--border-color); + border-radius: var(--radius-sm); + display: flex; + align-items: center; + justify-content: center; + padding: 12px; + font-family: var(--font-serif); + font-size: 13px; + color: var(--text-secondary); + font-weight: 600; + letter-spacing: 1px; + transition: all 0.2s ease; +} + +.nhc-client-item:hover { + background: #FFFFFF; + border-color: var(--primary); + color: var(--primary); +} + +/* 底部 CTA 板块 */ +.nhc-cta { + padding: 80px 0; + background: linear-gradient(135deg, #1E3A8A 0%, #1E40AF 50%, #2563EB 100%); + color: #FFFFFF; + position: relative; + overflow: hidden; +} + +.nhc-cta::before { + content: ""; + position: absolute; + top: 0; + left: 0; + right: 0; + bottom: 0; + background-image: + linear-gradient(to right, rgba(255, 255, 255, 0.05) 1px, transparent 1px), + linear-gradient(to bottom, rgba(255, 255, 255, 0.05) 1px, transparent 1px); + background-size: 32px 32px; + pointer-events: none; +} + +.nhc-cta-inner { + display: flex; + align-items: center; + justify-content: space-between; + position: relative; + z-index: 2; + gap: 40px; +} + +.nhc-cta-content { + max-width: 680px; +} + +.nhc-cta-title { + font-family: var(--font-serif); + font-size: 36px; + font-weight: 700; + line-height: 1.3; + margin-bottom: 16px; + letter-spacing: 1px; +} + +.nhc-cta-desc { + font-size: 16px; + color: rgba(255, 255, 255, 0.85); + line-height: 1.7; +} + +.nhc-cta-buttons { + display: flex; + align-items: center; + gap: 16px; + flex-shrink: 0; +} + +.nhc-cta-btn-light { + background-color: #FFFFFF; + color: var(--primary); + border: 1px solid #FFFFFF; +} + +.nhc-cta-btn-light:hover { + background-color: var(--bg-secondary); + color: var(--primary-hover); + transform: translateY(-2px); + box-shadow: 0 8px 20px rgba(0, 0, 0, 0.2); +} + +.nhc-cta-btn-ghost { + border-color: rgba(255, 255, 255, 0.4); + color: #FFFFFF; + background: transparent; +} + +.nhc-cta-btn-ghost:hover { + border-color: #FFFFFF; + background: rgba(255, 255, 255, 0.1); +} + +/* 现代化专业页脚 (Footer) */ +.nhc-footer { + background-color: #0F172A; + color: #94A3B8; + padding: 80px 0 32px; + border-top: 1px solid #1E293B; + font-size: 14px; +} + +.nhc-footer-grid { + display: grid; + grid-template-columns: 2fr 1fr 1fr 1fr 1.5fr; + gap: 40px; + margin-bottom: 56px; +} + +.nhc-footer-brand-title { + font-family: var(--font-serif); + font-size: 20px; + color: #FFFFFF; + font-weight: 700; + letter-spacing: 1px; + margin-bottom: 12px; +} + +.nhc-footer-brand-desc { + font-size: 13px; + line-height: 1.8; + margin-bottom: 20px; + color: #64748B; +} + +.nhc-footer-col-title { + font-family: var(--font-serif); + font-size: 15px; + color: #FFFFFF; + font-weight: 600; + margin-bottom: 18px; + letter-spacing: 1px; +} + +.nhc-footer-links { + list-style: none; + display: flex; + flex-direction: column; + gap: 10px; +} + +.nhc-footer-link { + color: #94A3B8; + font-size: 13px; + transition: color 0.2s; +} + +.nhc-footer-link:hover { + color: #FFFFFF; +} + +.nhc-footer-contact-info { + display: flex; + flex-direction: column; + gap: 12px; + font-size: 13px; +} + +.nhc-footer-bottom { + border-top: 1px solid #1E293B; + padding-top: 28px; + display: flex; + align-items: center; + justify-content: space-between; + font-size: 12px; + color: #64748B; +} + +.nhc-footer-bottom a { + color: #64748B; +} + +.nhc-footer-bottom a:hover { + color: #94A3B8; +} + +/* 响应式适配媒体查询 */ +@media (max-width: 1200px) { + .nhc-products-grid { + grid-template-columns: repeat(2, 1fr); + } + .nhc-footer-grid { + grid-template-columns: 2fr repeat(3, 1fr); + } +} + +@media (max-width: 1024px) { + .nhc-hero-title { + font-size: 42px; + } + .nhc-services-grid { + grid-template-columns: 1fr; + gap: 20px; + } + .nhc-process-flow { + grid-template-columns: repeat(3, 1fr); + } + .nhc-clients-grid { + grid-template-columns: repeat(3, 1fr); + } + .nhc-testimonials-grid { + grid-template-columns: 1fr; + } + .nhc-cta-inner { + flex-direction: column; + text-align: center; + } + .nhc-footer-grid { + grid-template-columns: 1fr 1fr; + } +} + +@media (max-width: 768px) { + .nhc-nav-menu, + .nhc-nav-actions .nhc-btn { + display: none; + } + .nhc-hero-title { + font-size: 32px; + } + .nhc-hero-subtitle { + font-size: 15px; + } + .nhc-hero-metrics { + grid-template-columns: repeat(2, 1fr); + gap: 16px; + } + .nhc-metric-item:not(:last-child)::after { + display: none; + } + .nhc-products-grid { + grid-template-columns: 1fr; + } + .nhc-cases-grid { + grid-template-columns: 1fr; + } + .nhc-process-flow { + grid-template-columns: 1fr; + } + .nhc-clients-grid { + grid-template-columns: repeat(2, 1fr); + } + .nhc-footer-grid { + grid-template-columns: 1fr; + } + .nhc-footer-bottom { + flex-direction: column; + gap: 12px; + text-align: center; + } + .nhc-cta-buttons { + flex-direction: column; + width: 100%; + } + .nhc-cta-buttons .nhc-btn { + width: 100%; + } +} diff --git a/tests/HomepageDesignTest.php b/tests/HomepageDesignTest.php new file mode 100644 index 0000000..d789f46 --- /dev/null +++ b/tests/HomepageDesignTest.php @@ -0,0 +1,187 @@ +htmlContent = ''; + if (file_exists($htmlFile)) { + $this->htmlContent .= file_get_contents($htmlFile) . "\n"; + } + if (file_exists($navFile)) { + $this->htmlContent .= file_get_contents($navFile) . "\n"; + } + if (file_exists($footerFile)) { + $this->htmlContent .= file_get_contents($footerFile) . "\n"; + } + if (file_exists($cssFile)) { + $this->cssContent = file_get_contents($cssFile); + } + } + + public function run() + { + echo "=== 开始执行首页改版设计规范与完整性测试 (TDD) ===\n"; + + // 1. 色彩体系测试 + $this->testColorSystem(); + + // 2. 字体与样式测试 + $this->testTypographyAndBorderRadius(); + + // 3. 禁止项测试(严禁 emoji、国潮堆砌等) + $this->testForbiddenElements(); + + // 4. 主菜单导航测试 + $this->testNavigationMenus(); + + // 5. 核心业务服务板块测试 + $this->testServicesSection(); + + // 6. 核心产品矩阵板块测试 + $this->testProductsSection(); + + // 7. 案例、流程、评价、CTA 板块测试 + $this->testEssentialSections(); + + // 8. 响应式布局测试 + $this->testResponsiveDesign(); + + echo "\n测试结果: {$this->passed} 通过, {$this->failed} 失败\n"; + if ($this->failed > 0) { + exit(1); + } + } + + private function assert($condition, $message) + { + if ($condition) { + echo " [PASS] {$message}\n"; + $this->passed++; + } else { + echo " [FAIL] {$message}\n"; + $this->failed++; + } + } + + /** + * 测试色彩体系是否严格符合 AGENTS.md 规范 + */ + public function testColorSystem() + { + $hasBlue = (stripos($this->cssContent, '#2563EB') !== false || stripos($this->cssContent, '#2563eb') !== false); + $this->assert($hasBlue, "CSS 必须包含主色 #2563EB (科技蓝)"); + + $hasCyan = (stripos($this->cssContent, '#06B6D4') !== false || stripos($this->cssContent, '#06b6d4') !== false); + $this->assert($hasCyan, "CSS 必须包含辅助色 #06B6D4 (青)"); + + $hasPurple = (stripos($this->cssContent, '#7C3AED') !== false || stripos($this->cssContent, '#7c3aed') !== false); + $this->assert($hasPurple, "CSS 必须包含辅助色 #7C3AED (紫)"); + + $hasBg = (stripos($this->cssContent, '#F8FAFC') !== false || stripos($this->cssContent, '#f8fafc') !== false); + $this->assert($hasBg, "CSS 必须包含背景色 #F8FAFC 与 #FFFFFF"); + + $hasDarkText = (stripos($this->cssContent, '#0F172A') !== false || stripos($this->cssContent, '#0f172a') !== false); + $this->assert($hasDarkText, "CSS 必须包含文字主色 #0F172A 与正文 #475569"); + } + + /** + * 测试字体与圆角规范 + */ + public function testTypographyAndBorderRadius() + { + $hasSongti = (stripos($this->cssContent, 'SimSun') !== false || stripos($this->cssContent, 'Songti') !== false || stripos($this->cssContent, 'Noto Serif SC') !== false || stripos($this->cssContent, 'Source Han Serif') !== false); + $this->assert($hasSongti, "标题字体必须使用宋体 (SimSun / Songti / Noto Serif SC)"); + + $hasBodyFont = (stripos($this->cssContent, 'Inter') !== false || stripos($this->cssContent, 'PingFang') !== false || stripos($this->cssContent, 'sans-serif') !== false); + $this->assert($hasBodyFont, "正文字体必须使用 Inter 或标准无衬线黑体"); + + $has1280Grid = (stripos($this->cssContent, '1280px') !== false); + $this->assert($has1280Grid, "容器应采用 1280px 网格规范"); + } + + /** + * 测试禁止项(严格禁止 Emoji 图标、霓虹赛博朋克等) + */ + public function testForbiddenElements() + { + // 匹配 Unicode Emoji 范围 + $hasEmoji = preg_match('/[\x{1F600}-\x{1F64F}\x{1F300}-\x{1F5FF}\x{1F680}-\x{1F6FF}\x{2600}-\x{26FF}\x{2700}-\x{27BF}]/u', $this->htmlContent); + $this->assert(!$hasEmoji, "首页严禁使用任何 emoji 表情符号"); + } + + /** + * 测试主导航菜单项 + */ + public function testNavigationMenus() + { + $this->assert(strpos($this->htmlContent, '服务') !== false, "必须包含主菜单【服务】"); + $this->assert(strpos($this->htmlContent, '产品') !== false, "必须包含主菜单【产品】"); + $this->assert(strpos($this->htmlContent, '案例') !== false, "必须包含主菜单【案例】"); + $this->assert(strpos($this->htmlContent, '关于我们') !== false, "必须包含主菜单【关于我们】"); + $this->assert(strpos($this->htmlContent, '联系我们') !== false, "必须包含主菜单【联系我们】"); + } + + /** + * 测试核心服务三大领域 + */ + public function testServicesSection() + { + $this->assert(strpos($this->htmlContent, '软件开发') !== false, "服务板块必须包含【软件开发】"); + $this->assert(strpos($this->htmlContent, '小程序定制') !== false || strpos($this->htmlContent, 'APP与小程序定制') !== false, "服务板块必须包含【APP与小程序定制】"); + $this->assert(strpos($this->htmlContent, '智能体开发') !== false, "服务板块必须包含【智能体开发】"); + } + + /** + * 测试四大产品线 + */ + public function testProductsSection() + { + $this->assert(strpos($this->htmlContent, '商城') !== false, "产品板块必须包含【商城】"); + $this->assert(strpos($this->htmlContent, '收银') !== false, "产品板块必须包含【收银】"); + $this->assert(strpos($this->htmlContent, '进销存') !== false, "产品板块必须包含【进销存】"); + $this->assert(strpos($this->htmlContent, 'SaaS') !== false, "产品板块必须包含【SaaS版本】"); + } + + /** + * 测试首屏、案例、流程、评价、CTA 等核心板块 + */ + public function testEssentialSections() + { + $this->assert(strpos($this->htmlContent, 'nhc-hero') !== false, "必须包含首屏 Hero 板块"); + $this->assert(strpos($this->htmlContent, 'nhc-services') !== false, "必须包含服务入口板块"); + $this->assert(strpos($this->htmlContent, 'nhc-products') !== false, "必须包含产品矩阵入口板块"); + $this->assert(strpos($this->htmlContent, 'nhc-cases') !== false, "必须包含客户案例板块"); + $this->assert(strpos($this->htmlContent, 'nhc-process') !== false, "必须包含标准化交付流程板块"); + $this->assert(strpos($this->htmlContent, 'nhc-testimonials') !== false || strpos($this->htmlContent, 'nhc-clients') !== false, "必须包含客户评价或伙伴板块"); + $this->assert(strpos($this->htmlContent, 'nhc-cta') !== false, "必须包含底部 CTA 行动召唤板块"); + $this->assert(strpos($this->htmlContent, 'nhc-footer') !== false, "必须包含现代化专业页脚板块"); + } + + /** + * 测试响应式断点与设计 + */ + public function testResponsiveDesign() + { + $hasMediaQueries = (stripos($this->cssContent, '@media') !== false && (stripos($this->cssContent, '768px') !== false || stripos($this->cssContent, '1024px') !== false)); + $this->assert($hasMediaQueries, "CSS 必须包含移动端/平板响应式媒体查询适配"); + } +} + +$test = new HomepageDesignTest(); +$test->run();