| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328 |
- <?php
- // +----------------------------------------------------------------------
- // | LARAVEL8.0 框架 [ LARAVEL ][ RXThinkCMF ]
- // +----------------------------------------------------------------------
- // | 版权所有 2017~2021 LARAVEL研发中心
- // +----------------------------------------------------------------------
- // | 官方网站: http://www.laravel.cn
- // +----------------------------------------------------------------------
- // | Author: laravel开发员 <laravel.qq.com>
- // +----------------------------------------------------------------------
- namespace App\Services\Common;
- use App\Models\MenuModel;
- use App\Models\ActionLogModel;
- use App\Models\RoleModel;
- use App\Models\UserRoleModel;
- use App\Services\BaseService;
- /**
- * 菜单管理-服务类
- * @author laravel开发员
- * @since 2020/11/10
- * Class MenuService
- * @package App\Services\Common
- */
- class MenuService extends BaseService
- {
- /**
- * 构造函数
- * @author laravel开发员
- * @since 2020/11/11
- * MenuService constructor.
- */
- public function __construct()
- {
- $this->model = new MenuModel();
- }
- /**
- * 获取数据列表
- * @return array
- * @since 2020/11/11
- * @author laravel开发员
- */
- public function getList()
- {
- $param = request()->all();
- // 查询条件
- $map = [];
- // 上级ID
- $pid = intval(getter($param, 'pid', 0));
- if (!$pid) {
- $map[] = ['pid', '=', 0];
- } else {
- $map[] = ['pid', '=', $pid];
- }
- // 菜单标题
- $title = getter($param, "title");
- if ($title) {
- $map[] = ['title', 'like', "%{$title}%"];
- }
- $list = $this->model->getList($map, [['sort', 'asc']]);
- if (!empty($list)) {
- foreach ($list as &$val) {
- if ($val['type'] == 0) {
- $val['hasChildren'] = true;
- }
- }
- }
- return message("操作成功", true, $list);
- }
- /**
- * 获取菜单详情
- * @return array
- * @since 2021/4/10
- * @author laravel开发员
- */
- public function info()
- {
- // 记录ID
- $id = request()->input("id", 0);
- $info = [];
- if ($id) {
- $info = $this->model->getInfo($id);
- }
- // 获取权限节点
- $checkedList = array();
- if ($info['type'] == 0) {
- $permissionList = $this->model
- ->select("sort")
- ->where("pid", "=", $info['id'])
- ->where("mark", "=", 1)
- ->get()
- ->toArray();
- if (is_array($permissionList)) {
- $checkedList = array_key_value($permissionList, "sort");
- }
- $info['checkedList'] = $checkedList;
- }
- return message(MESSAGE_OK, true, $info);
- }
- /**
- * 添加或编辑
- * @return array
- * @since 2021/4/10
- * @author laravel开发员
- */
- public function edit()
- {
- // 参数
- $param = request()->all();
- // 权限节点
- $checkedList = isset($param['checkedList']) ? $param['checkedList'] : array();
- unset($param['checkedList']);
- // 保存数据
- $result = $this->model->edit($param);
- if (!$result) {
- return message("操作失败", false);
- }
- // 设置权限节点
- if ($param['type'] == 0 && !empty($param['path']) && !empty($checkedList)) {
- $item = explode("/", $param['path']);
- // 模块名称
- $moduleName = $item[count($item) - 1];
- // 模块标题
- $moduleTitle = str_replace("管理", "", $param['title']);
- // 遍历权限节点
- foreach ($checkedList as $val) {
- $data = [];
- $data['pid'] = $result;
- $data['type'] = 1;
- $data['status'] = 1;
- $data['sort'] = intval($val);
- $data['target'] = $param['target'];
- // 判断当前节点是否已存在
- $permissionInfo = $this->model
- ->where("pid", "=", $result)
- ->where("type", "=", 1)
- ->where("sort", "=", $val)
- ->where("mark", "=", 1)
- ->first();
- if ($permissionInfo) {
- $data['id'] = $permissionInfo['id'];
- }
- if ($val == 1) {
- // 查询
- $data['title'] = "查询" . $moduleTitle;
- $data['permission'] = "sys:{$moduleName}:index";
- } else if ($val == 5) {
- // 添加
- $data['title'] = "添加" . $moduleTitle;
- $data['permission'] = "sys:{$moduleName}:add";
- } else if ($val == 10) {
- // 修改
- $data['title'] = "修改" . $moduleTitle;
- $data['permission'] = "sys:{$moduleName}:edit";
- } else if ($val == 15) {
- // 删除
- $data['title'] = "删除" . $moduleTitle;
- $data['permission'] = "sys:{$moduleName}:delete";
- } else if ($val == 20) {
- // 状态
- $data['title'] = "设置状态";
- $data['permission'] = "sys:{$moduleName}:status";
- } else if ($val == 25) {
- // 批量删除
- $data['title'] = "批量删除";
- $data['permission'] = "sys:{$moduleName}:dall";
- } else if ($val == 30) {
- // 全部展开
- $data['title'] = "全部展开";
- $data['permission'] = "sys:{$moduleName}:expand";
- } else if ($val == 35) {
- // 全部折叠
- $data['title'] = "全部折叠";
- $data['permission'] = "sys:{$moduleName}:collapse";
- } else if ($val == 40) {
- // 添加子级
- $data['title'] = "添加子级";
- $data['permission'] = "sys:{$moduleName}:addz";
- } else if ($val == 45) {
- // 导出数据
- $data['title'] = "导出数据";
- $data['permission'] = "sys:{$moduleName}:export";
- } else if ($val == 50) {
- // 导入数据
- $data['title'] = "导入数据";
- $data['permission'] = "sys:{$moduleName}:import";
- } else if ($val == 55) {
- // 分配权限
- $data['title'] = "分配权限";
- $data['permission'] = "sys:{$moduleName}:permission";
- }
- if (empty($data['title'])) {
- continue;
- }
- $menuModel = new MenuModel();
- $menuModel->edit($data);
- }
- }
- return message();
- }
- /**
- * 获取权限菜单列表
- * @param $userId
- * @return array
- * @author laravel开发员
- * @since 2020/11/11
- */
- public function getPermissionList($userId)
- {
- $list = [];
- $check = UserRoleModel::where(['user_id'=>$userId,'role_id'=>1])->value('role_id');
- if ($userId == 1 || $check) {
- // 管理员拥有全部权限
- $list = $this->model->getChilds(0);
- } else {
- // 其他角色
- $list = $this->getPermissionMenu($userId, 0);
- }
- return message("操作成功", true, $list);
- }
- /**
- * 获取菜单权限列表
- * @param $userId 用户ID
- * @param $pid 上级ID
- * @return mixed
- * @since 2020/11/14
- * @author laravel开发员
- */
- public function getPermissionMenu($userId, $pid = 0)
- {
- $menuModel = new MenuModel();
- $menuList = $menuModel::from("menu as m")
- ->select('m.*')
- ->join('role_menu as rm', 'rm.menu_id', '=', 'm.id')
- ->join('user_role as ur', 'ur.role_id', '=', 'rm.role_id')
- ->distinct(true)
- ->where('ur.user_id', '=', $userId)
- ->where('m.type', '=', 0)
- ->where('m.pid', '=', $pid)
- ->where('m.status', '=', 1)
- ->where('m.mark', '=', 1)
- ->orderBy('m.pid')
- ->orderBy('m.sort')
- ->get()->toArray();
- if (!empty($menuList)) {
- foreach ($menuList as &$val) {
- $childList = $this->getPermissionMenu($userId, $val['id']);
- if (is_array($childList) && !empty($childList)) {
- $val['children'] = $childList;
- }
- }
- }
- return $menuList;
- }
- /**
- * 获取权限节点
- * @param $userId 用户ID
- * @return array
- * @author laravel开发员
- * @since 2021/4/9
- */
- public function getPermissionsList($userId)
- {
- $list = [];
- $check = UserRoleModel::where(['user_id'=>$userId,'role_id'=>1])->value('role_id');
- if ($userId == 1 && $check) {
- // 管理员拥有全部权限
- $permissionList = $this->model
- ->select("permission")
- ->where("type", "=", 1)
- ->where("mark", "=", 1)
- ->get()
- ->toArray();
- $list = empty($permissionList) ? array() : array_key_value($permissionList, 'permission');
- } else {
- // 其他角色
- $menuModel = new MenuModel();
- $permissionList = $menuModel::from("menu as m")
- ->select('m.permission')
- ->join('role_menu as rm', 'rm.menu_id', '=', 'm.id')
- ->join('user_role as ur', 'ur.role_id', '=', 'rm.role_id')
- ->distinct(true)
- ->where('ur.user_id', '=', $userId)
- ->where('m.type', '=', 1)
- ->where('m.status', '=', 1)
- ->where('m.mark', '=', 1)
- ->orderBy('m.pid')
- ->orderBy('m.sort')
- ->get()
- ->toArray();
- $list = empty($permissionList) ? array() : array_key_value($permissionList, 'permission');
- }
- return array_filter(array_values($list));
- }
- /**
- * 删除标记软删除的数据
- */
- public function delete()
- {
- // 设置日志标题
- ActionLogModel::setRecord(session('userId'), ['type' => 1, 'title' => "删除菜单信息", 'content' => json_encode(request()->post(), 256), 'module' => 'admin']);
- ActionLogModel::record();
- $id = request()->post('id',0);
- $this->model->where('mark', 0)->delete();
- $result = parent::delete();
- $success = isset($result['success'])?$result['success']:false;
- if($success){
- $this->model->where(['pid'=>$id])->update(['mark'=>0,'update_time'=>time()]);
- }
- return $result;
- }
- }
|