README.md 4.0 KB

FrontMenu - 前端三级导航菜单插件

为 Bagisto 提供前台(Shop)三级导航菜单管理,支持在后台 Settings 菜单下进行菜单项的增删改查,并通过 GraphQL 接口对外提供数据查询。

功能特性

  • 后台 Settings 菜单下新增「前端导航菜单」管理入口
  • 菜单项字段:name(名称)、slug(唯一标识)、url(链接)、image(图片)、banner(横幅)、status(状态)、sort_order(排序)
  • imagebanner 支持图片上传(上传至 S3,自动返回 URL 存储)
  • 支持三级菜单层级(父级/子级/孙级)
  • 支持拖拽排序与拖拽调整层级
  • 级联删除(删除父级时自动删除子级)
  • GraphQL 接口提供单条、集合、树形三种查询

图片上传

  • 上传组件复用 Longyi\ImageUpload 包的 ImageUploadService,通过 admin.image_upload.upload 接口上传
  • 图片存储于 uploads/front-menu 目录,返回的 URL 写入 image / banner 字段

拖拽排序

  • 列表页使用 vuedraggable 组件,可拖拽调整菜单顺序与层级
  • 拖拽结束后通过 admin.frontmenu.reorder 接口保存新的 parent_idsort_order

依赖

  • PHP ^8.1|^8.2
  • Laravel ^10.0|^11.0
  • Bagisto 2.x
  • api-platform(用于 GraphQL,项目已内置)

安装步骤

1. 注册 Provider

bootstrap/providers.php 中已添加:

Longyi\FrontMenu\Providers\FrontMenuServiceProvider::class,

2. 运行数据库迁移

php artisan migrate

3. 初始化默认菜单(可选)

php artisan front-menu:init

4. 清理缓存

php artisan cache:clear
php artisan config:clear
php artisan view:clear
php artisan route:clear

5. 授权角色

在后台 Settings → Roles 中为对应角色勾选「前端导航菜单」权限,菜单即可在侧边栏 Settings 下显示。

GraphQL 查询

GraphQL 端点:/api/graphql(需携带 storefront key)。

树形查询(推荐,返回启用状态的三级菜单树)

{
  frontMenuTrees {
    edges {
      node {
        id
        name
        slug
        url
        image
        banner
        sortOrder
        status
        children {
          edges {
            node {
              id
              name
              slug
              url
              children {
                edges {
                  node {
                    id
                    name
                    slug
                    url
                  }
                }
              }
            }
          }
        }
      }
    }
  }
}

单条查询

{
  frontMenu(id: "1") {
    id
    name
    slug
    url
    image
    banner
    sortOrder
    status
  }
}

集合查询

{
  frontMenus {
    edges {
      node {
        id
        name
        slug
        url
      }
    }
  }
}

目录结构

packages/Longyi/FrontMenu/
├── composer.json
├── README.md
└── src/
    ├── Config/
    │   ├── menu.php          # 后台菜单配置
    │   └── acl.php           # ACL 权限配置
    ├── Console/
    │   └── Commands/
    │       └── InitializeFrontMenu.php
    ├── Database/
    │   ├── Migrations/
    │   │   └── 2026_08_28_000001_create_front_menu_items_table.php
    │   └── Seeders/
    │       └── FrontMenuItemSeeder.php
    ├── Http/
    │   └── Controllers/
    │       └── FrontMenuController.php
    ├── Models/
    │   └── FrontMenuItem.php
    ├── Providers/
    │   └── FrontMenuServiceProvider.php
    ├── Repositories/
    │   └── FrontMenuItemRepository.php
    ├── Resources/
    │   ├── lang/
    │   │   ├── en/app.php
    │   │   └── zh_CN/app.php
    │   └── views/
    │       └── admin/menu/
    └── Routes/
        └── admin-routes.php