131 lines
3.5 KiB
PHP
131 lines
3.5 KiB
PHP
|
<?php
|
||
|
|
||
|
namespace app\common\library;
|
||
|
|
||
|
use app\manystore\model\ManystoreAuthRule;
|
||
|
use fast\Tree;
|
||
|
use think\Exception;
|
||
|
use think\exception\PDOException;
|
||
|
|
||
|
class ManystoreMenu
|
||
|
{
|
||
|
|
||
|
/**
|
||
|
* 创建菜单
|
||
|
* @param array $menu
|
||
|
* @param mixed $parent 父类的name或pid
|
||
|
*/
|
||
|
public static function create($menu, $parent = 0)
|
||
|
{
|
||
|
if (!is_numeric($parent)) {
|
||
|
$parentRule = ManystoreAuthRule::getByName($parent);
|
||
|
$pid = $parentRule ? $parentRule['id'] : 0;
|
||
|
} else {
|
||
|
$pid = $parent;
|
||
|
}
|
||
|
$allow = array_flip(['file', 'name', 'title', 'icon', 'condition', 'remark', 'ismenu']);
|
||
|
foreach ($menu as $k => $v) {
|
||
|
$hasChild = isset($v['sublist']) && $v['sublist'] ? true : false;
|
||
|
|
||
|
$data = array_intersect_key($v, $allow);
|
||
|
|
||
|
$data['ismenu'] = isset($data['ismenu']) ? $data['ismenu'] : ($hasChild ? 1 : 0);
|
||
|
$data['icon'] = isset($data['icon']) ? $data['icon'] : ($hasChild ? 'fa fa-list' : 'fa fa-circle-o');
|
||
|
$data['pid'] = $pid;
|
||
|
$data['status'] = 'normal';
|
||
|
try {
|
||
|
$menu = ManystoreAuthRule::create($data);
|
||
|
if ($hasChild) {
|
||
|
self::create($v['sublist'], $menu->id);
|
||
|
}
|
||
|
} catch (PDOException $e) {
|
||
|
throw new Exception($e->getMessage());
|
||
|
}
|
||
|
}
|
||
|
}
|
||
|
|
||
|
/**
|
||
|
* 删除菜单
|
||
|
* @param string $name 规则name
|
||
|
* @return boolean
|
||
|
*/
|
||
|
public static function delete($name)
|
||
|
{
|
||
|
$ids = self::getAuthRuleIdsByName($name);
|
||
|
if (!$ids) {
|
||
|
return false;
|
||
|
}
|
||
|
ManystoreAuthRule::destroy($ids);
|
||
|
return true;
|
||
|
}
|
||
|
|
||
|
/**
|
||
|
* 启用菜单
|
||
|
* @param string $name
|
||
|
* @return boolean
|
||
|
*/
|
||
|
public static function enable($name)
|
||
|
{
|
||
|
$ids = self::getAuthRuleIdsByName($name);
|
||
|
if (!$ids) {
|
||
|
return false;
|
||
|
}
|
||
|
ManystoreAuthRule::where('id', 'in', $ids)->update(['status' => 'normal']);
|
||
|
return true;
|
||
|
}
|
||
|
|
||
|
/**
|
||
|
* 禁用菜单
|
||
|
* @param string $name
|
||
|
* @return boolean
|
||
|
*/
|
||
|
public static function disable($name)
|
||
|
{
|
||
|
$ids = self::getAuthRuleIdsByName($name);
|
||
|
if (!$ids) {
|
||
|
return false;
|
||
|
}
|
||
|
ManystoreAuthRule::where('id', 'in', $ids)->update(['status' => 'hidden']);
|
||
|
return true;
|
||
|
}
|
||
|
|
||
|
/**
|
||
|
* 导出指定名称的菜单规则
|
||
|
* @param string $name
|
||
|
* @return array
|
||
|
*/
|
||
|
public static function export($name)
|
||
|
{
|
||
|
$ids = self::getAuthRuleIdsByName($name);
|
||
|
if (!$ids) {
|
||
|
return [];
|
||
|
}
|
||
|
$menuList = [];
|
||
|
$menu = ManystoreAuthRule::getByName($name);
|
||
|
if ($menu) {
|
||
|
$ruleList = collection(ManystoreAuthRule::where('id', 'in', $ids)->select())->toArray();
|
||
|
$menuList = Tree::instance()->init($ruleList)->getTreeArray($menu['id']);
|
||
|
}
|
||
|
return $menuList;
|
||
|
}
|
||
|
|
||
|
/**
|
||
|
* 根据名称获取规则IDS
|
||
|
* @param string $name
|
||
|
* @return array
|
||
|
*/
|
||
|
public static function getAuthRuleIdsByName($name)
|
||
|
{
|
||
|
$ids = [];
|
||
|
$menu = ManystoreAuthRule::getByName($name);
|
||
|
if ($menu) {
|
||
|
// 必须将结果集转换为数组
|
||
|
$ruleList = collection(ManystoreAuthRule::order('weigh', 'desc')->field('id,pid,name')->select())->toArray();
|
||
|
// 构造菜单数据
|
||
|
$ids = Tree::instance()->init($ruleList)->getChildrenIds($menu['id'], true);
|
||
|
}
|
||
|
return $ids;
|
||
|
}
|
||
|
|
||
|
}
|