Files
fastmovieai/fastmovie-admin/app/expose/helper/Menus.php
T
李建琦 eae151fd57 FastMovieAI AI短剧创作平台 二开基线
- 源码: xhadmincn/FastMovieAI (Apache 2.0)
- 二开: Docker部署, Swoole改Select, route.php修复, 补update/VERSION
- vendor/示例资源已gitignore
2026-08-26 18:37:36 +08:00

117 lines
3.4 KiB
PHP

<?php
namespace app\expose\helper;
use app\expose\utils\DataModel;
class Menus extends DataModel
{
public $data = [];
public $itemData = [
# 菜单标题
"title" => "Title",
# 菜单图标,element-plus中的Icon名称,如:ElementPlus
"icon" => "",
# 路由路径
"path" => "",
# 使用组件,table:表格列表,form:表单,images:图片列表
"component" => "default",
# 请求方式,GET,POST,PUT,DELETE
"methods" => ["GET"],
# 是否显示,0:隐藏,1:显示
"show" => 1,
# 排序,正序
"sort" => 9999,
# 携带地址栏参数
"query" => [],
# 携带post参数
"params" => [],
# 路由meta
"meta" => [
"login" => true,
],
# 子级和父级参数一致
"children" => []
];
/**
* 构造函数
*
* @param object $Install 需实现 getMenus 方法的类返回菜单数据
*/
public function __construct($Install)
{
$request = request();
$lang = null;
if ($request && $request->lang) {
$lang = $request->lang;
}
$data = $Install->getMenus();
if ($lang) {
$this->translateChildren($data, $request->app,$lang);
}
foreach (glob(base_path('plugin/*')) as $path) {
$plugin_name = basename($path);
$class = 'plugin\\' . $plugin_name . '\\api\\Install';
$plugin = new $class;
$menus = $plugin->getMenus();
if ($menus) {
if ($lang&&$plugin->getPlugin()) {
$request->plugin = $plugin_name;
$this->translateChildren($menus, $request->app,$lang);
}
$data[] = $menus;
}
}
$this->builder($data);
}
public function translateChildren(&$data, $domain,$lang)
{
if (is_array($data) && isset($data[0])) {
foreach ($data as $key => &$item) {
if (isset($item['title'])) {
$data[$key]['title'] = trans($item['title'], [], $domain, $lang);
}
if (!empty($item['children'])) {
$this->translateChildren($item['children'],$domain, $lang);
}
}
} else {
if (isset($data['title'])) {
$data['title'] = trans($data['title'], [], $domain, $lang);
}
if (!empty($data['children'])) {
$this->translateChildren($data['children'],$domain, $lang);
}
}
}
/**
* 递归合并
*
* @param array $data
* @return $data
*/
public function mergeMenus(array $data): array
{
$result = [];
foreach ($data as $key => $item) {
$temp = array_merge($this->itemData, $item);
if (!empty($temp['children'])) {
$temp['children'] = $this->mergeMenus($temp['children']);
}
$result[] = $temp;
}
return $result;
}
/**
* 构建菜单
*
* @param array $data
* @return Menus
*/
public function builder(array $data)
{
$this->data = $this->mergeMenus($data);
return $this;
}
}