feat(nav): 导航栏增加服务与产品高端大气二级卡片面板(Mega Menu)

这个提交包含在:
wikiboss
2026-10-08 16:59:23 +08:00
父节点 39cfded738
当前提交 68abc83e86
共有 3 个文件被更改,包括 600 次插入 和 4 次删除

105
tests/NavMegaMenuTest.php 普通文件
查看文件

@@ -0,0 +1,105 @@
<?php
/**
* 导航栏二级卡片面板 (Mega Menu) 规范与完整性测试 (TDD 模式)
* 验证鼠标划过时弹出的二级卡片面板结构、业务内容、禁止项与现代中式质感
*/
class NavMegaMenuTest
{
private $passed = 0;
private $failed = 0;
private $navContent = '';
private $cssContent = '';
public function __construct()
{
$baseDir = dirname(__DIR__);
$navFile = $baseDir . '/addons/official/view/web/official_common/pc/nav.html';
$cssFile = $baseDir . '/public/assets/addons/official/css/modern_nhc.css';
if (file_exists($navFile)) {
$this->navContent = file_get_contents($navFile);
}
if (file_exists($cssFile)) {
$this->cssContent = file_get_contents($cssFile);
}
}
public function run()
{
echo "=== 开始执行导航栏二级卡片面板规范测试 (TDD) ===\n";
// 1. 基础结构测试
$this->testMegaMenuStructure();
// 2. 服务二级卡片面板业务内容测试
$this->testServicesMegaMenu();
// 3. 产品二级卡片面板业务内容测试
$this->testProductsMegaMenu();
// 4. CSS 交互与现代中式质感测试
$this->testMegaMenuCss();
// 5. 禁止项测试(严禁使用 emoji)
$this->testForbiddenElements();
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++;
}
}
public function testMegaMenuStructure()
{
$hasDropdownClass = (strpos($this->navContent, 'nhc-has-dropdown') !== false);
$this->assert($hasDropdownClass, "导航栏必须具备 nhc-has-dropdown 下拉菜单触发类");
$hasMegaPanel = (strpos($this->navContent, 'nhc-mega-panel') !== false);
$this->assert($hasMegaPanel, "导航栏必须具备高端大气的 nhc-mega-panel 二级卡片面板容器");
}
public function testServicesMegaMenu()
{
$this->assert(strpos($this->navContent, '软件开发') !== false, "服务二级面板必须包含【软件开发】卡片");
$this->assert(strpos($this->navContent, 'APP与小程序定制') !== false || (strpos($this->navContent, 'APP') !== false && strpos($this->navContent, '小程序') !== false), "服务二级面板必须包含【APP与小程序定制】卡片");
$this->assert(strpos($this->navContent, '智能体开发') !== false, "服务二级面板必须包含【智能体开发】卡片");
}
public function testProductsMegaMenu()
{
$this->assert(strpos($this->navContent, '商城') !== false, "产品二级面板必须包含【商城】卡片");
$this->assert(strpos($this->navContent, '收银') !== false, "产品二级面板必须包含【收银】卡片");
$this->assert(strpos($this->navContent, '进销存') !== false, "产品二级面板必须包含【进销存】卡片");
$this->assert(strpos($this->navContent, 'SaaS') !== false, "产品二级面板必须包含【SaaS版本】卡片");
}
public function testMegaMenuCss()
{
$hasPanelStyle = (strpos($this->cssContent, '.nhc-mega-panel') !== false);
$this->assert($hasPanelStyle, "CSS 中必须包含 .nhc-mega-panel 卡片面板样式");
$hasHoverTrigger = (strpos($this->cssContent, '.nhc-has-dropdown:hover') !== false || strpos($this->cssContent, '.nhc-mega-panel.active') !== false);
$this->assert($hasHoverTrigger, "CSS 中必须包含鼠标划过悬停展开交互样式");
}
public function testForbiddenElements()
{
$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->navContent);
$this->assert(!$hasEmoji, "导航栏及二级卡片面板严禁使用任何 emoji 表情");
}
}
$test = new NavMegaMenuTest();
$test->run();