【vue2.7.16系列】手把手教你搭建后台系统__登录接口返回信息调整(16)

需要获取菜单信息

app/adminapi/services/system/admin;/SystemAdminServices.php中调整login方法

/*** 管理员登陆* @param string $account* @param string $password* @return array|\think\Model* @throws \think\db\exception\DataNotFoundException* @throws \think\db\exception\DbException* @throws \think\db\exception\ModelNotFoundException*/public function verifyLogin(string $account, string $password){$adminInfo = $this->dao->accountByAdmin($account);if (!$adminInfo) {throw new AdminException('管理员不存在!');}if (!$adminInfo->status) {throw new AdminException('您已被禁止登录!');}if (!password_verify($password, $adminInfo->pwd)) {throw new AdminException('账号或密码错误,请重新输入');}$adminInfo->last_time = time();$adminInfo->last_ip = app('request')->ip();$adminInfo->login_count++;$adminInfo->save();return $adminInfo;}
/*** 后台登陆获取菜单获取token* @param string $account* @param string $password* @param string $type* @return array* @throws \think\db\exception\DataNotFoundException* @throws \think\db\exception\DbException* @throws \think\db\exception\ModelNotFoundException*/public function login(string $account, string $password, string $type){$adminInfo = $this->verifyLogin($account, $password);$tokenInfo = $this->createToken($adminInfo->id, $type);/** @var SystemMenusServices $services */$services = app()->make(SystemMenusServices::class);[$menus, $uniqueAuth] = $services->getMenusList($adminInfo->roles, (int)$adminInfo['level']);return ['menus' => $menus,'unique_auth' => $uniqueAuth,'token' => $tokenInfo['token'],'expire_time' =>  $tokenInfo['params']['exp'],'user_info' => ['id' => $adminInfo->getData('id'),'account' => $adminInfo->getData('account'),'head_pic' => $adminInfo->getData('head_pic'),],'logo' => '','version' => config('app.version'),];}

获取菜单实现

SystemMenusServices中实现getMenusList方法

use xkadmin\utils\Arr;
......
......
....../*** 获取后台权限菜单和权限* @param $rouleId* @param int $level* @return array* @throws \think\db\exception\DataNotFoundException* @throws \think\db\exception\DbException* @throws \think\db\exception\ModelNotFoundException*/
public function getMenusList($rouleId, int $level)
{/** @var SystemRoleServices $systemRoleServices */$systemRoleServices = app()->make(SystemRoleServices::class);// 获取角色权限数组$rules = $systemRoleServices->getRoleArray(['status' => 1, 'id' => $rouleId], 'rules');// 去重$rulesStr = Arr::unique($rules);// 获取菜单权限$menusList = $this->dao->getMenusRoule(['route' => $level ? $rulesStr : '']);// 获取唯一菜单$unique = $this->dao->getMenusUnique(['unique' => $level ? $rulesStr : '']);return [Arr::getMenuEleList($this->getMenusData($menusList)), $unique];
}

xkadmin\utils命名空间下,新建Arr.php文件,内容如下:

<?phpnamespace xkadmin\utils;/*** 操作数组帮助类* Class Arr* @package xkadmin\utils*/
class Arr
{/*** 对数组增加默认值* @param array $keys* @return array*/public static function getDefaultValue(array $keys, array $configList = []){$value = [];foreach ($keys as $val) {if (is_array($val)) {$k = $val[0] ?? '';$v = $val[1] ?? '';} else {$k = $val;$v = '';}$value[$k] = $configList[$k] ?? $v;}return $value;}/*** 获取Ele菜单列表* @param array $data* @return array*/public static function getMenuEleList(array $data){return Arr::toEleUi(Arr::getTree($data));}/*** 转化EleUi需要的key值* @param $data* @return array*/public static function toEleUi($data){$newData = [];foreach ($data as $k => $v) {$temp = [];$temp['path'] = $v['menu_path'];$temp['title'] = $v['menu_name'];$temp['icon'] = $v['icon'];$temp['header'] = $v['header'];$temp['is_header'] = $v['is_header'];if ($v['is_show_path']) {$temp['auth'] = ['hidden'];}if (!empty($v['children'])) {$temp['children'] = self::toEleUi($v['children']);}$newData[] = $temp;}return $newData;}/*** 获取树型菜单* @param $data* @param int $pid* @param int $level* @return array*/public static function getTree($data, $pid = 0, $level = 1){$childs = self::getChild($data, $pid, $level);$dataSort = array_column($childs, 'sort');array_multisort($dataSort, SORT_DESC, $childs);foreach ($childs as $key => $navItem) {$resChild = self::getTree($data, $navItem['id']);if (null != $resChild) {$childs[$key]['children'] = $resChild;}}return $childs;}/*** 获取子菜单* @param $arr* @param $id* @param $lev* @return array*/private static function getChild(&$arr, $id, $lev){$child = [];foreach ($arr as $k => $value) {if ($value['pid'] == $id) {$value['level'] = $lev;$child[] = $value;}}return $child;}/*** 格式化数据* @param array $array* @param $value* @param int $default* @return mixed*/public static function setValeTime(array $array, $value, $default = 0){foreach ($array as $item) {if (!isset($value[$item]))$value[$item] = $default;else if (is_string($value[$item]))$value[$item] = (float)$value[$item];}return $value;}/*** 获取二维数组中某个值的集合重新组成数组,并判断数组中的每一项是否为真* @param array $data* @param string $filed* @return array*/public static function getArrayFilterValeu(array $data, string $filed){return array_filter(array_unique(array_column($data, $filed)), function ($item) {if ($item) {return $item;}});}/*** 数组转字符串去重复* @param array $data* @return false|string[]*/public static function unique(array $data){return array_unique(explode(',', implode(',', $data)));}/*** 获取数组中去重复过后的指定key值* @param array $list* @param string $key* @return array*/public static function getUniqueKey(array $list, string $key){return array_unique(array_column($list, $key));}
}

开源地址:https://gitee.com/qqcode/xkadmin

至此完成。。。未有详尽之处,后续迭代。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.xdnf.cn/news/6663.html

如若内容造成侵权/违法违规/事实不符,请联系一条长河网进行投诉反馈,一经查实,立即删除!

相关文章

跨境电商营销:Pinterest的5个便捷营销工具

Pinterest是消费者寻找创意灵感的首选平台之一&#xff0c;同时&#xff0c;根据Global Web Index的调查数据&#xff0c;人们使用Pinterest的首要原因是寻找新产品和品牌&#xff0c;这意味着用户在使用Pinterest时已经有消费意愿和倾向。 因此&#xff0c;让更多目标受众注意…

JAVA基础:多重循环、方法、递归 (习题笔记)

一&#xff0c;编码题 1.打印九九乘法表 import java.util.*;public class PanTi {public static void main(String[] args) {Scanner input new Scanner(System.in);for (int i 0; i < 9; i) {//i控制行数/* System.out.println("。\t。\t。\t。\t。\t。\t。\t。\…

小林渗透入门:burpsuite+proxifier抓取小程序流量

目录 前提&#xff1a; 代理&#xff1a; proxifier&#xff1a; 步骤&#xff1a; bp证书安装 bp设置代理端口&#xff1a; proxifier设置规则&#xff1a; proxifier应用规则&#xff1a; 结果&#xff1a; 前提&#xff1a; 在介绍这两个工具具体实现方法之前&#xff0…

[笔记] Centos7 安装 Docker 和 Docker Compose 及 Docker 命令大全

Docker 和 Docker Compose 是相辅相成的工具&#xff0c;它们共同提供了一个强大的容器化解决方案。Docker 提供了容器化的基础功能&#xff0c;而 Docker Compose 则提供了更高级的编排和管理能力&#xff0c;使得部署和管理多个容器变得更加容易和高效。 Docker&#xff1a;…

el-message 同时弹出多个【改写el-message】

因为服务断开了 但是拦截器里对每个失败的接口都做了message弹出&#xff0c;因此改写el-message逻辑&#xff0c;仅展示一个同等类型的message窗体 1. 新建 /utils/rewriteElMessage.js /*** Event 解决 el-message 同类型重复打开的问题* description:* author: mhf* time:…

SSM宿舍管理系统-计算机毕业设计源码03732

目 录 1 绪论 1.1研究背景 1.2开发现状 1.3研究内容 1.4论文结构与章节安排 2 宿舍管理系统系统分析 2.1 可行性分析 2.2 系统流程分析 2.2.1 数据流程 3.3.2 业务流程 2.3 系统功能分析 2.3.1 功能性分析 2.3.2 非功能性分析 2.4 系统用例分析 2.5本章小结 3 …

淘宝商品描述,一键“爬”回家 —— Java爬虫的奇妙冒险

引言&#xff1a; 在这个信息爆炸的时代&#xff0c;我们每天都在被各种商品信息轰炸。你是否曾想过&#xff0c;如何能快速、准确地获取淘宝商品的描述信息&#xff1f;今天&#xff0c;就让我们一起开启一段Java爬虫的奇妙冒险&#xff0c;探索如何通过代码一键“爬”取淘宝…

线性代数:Matrix2x2和Matrix3x3

今天整理自己的框架代码&#xff0c;将Matrix2x2和Matrix3x3给扩展了一下&#xff0c;发现网上unity数学计算相关挺少的&#xff0c;所以记录一下。 首先扩展Matrix2x2&#xff1a; using System.Collections; using System.Collections.Generic; using Unity.Mathemati…

windows在两台机器上测试 MySQL 集群实现实时备份

在两台机器上测试 MySQL 集群实现实时备份的基本步骤&#xff1a; 一、环境准备 机器配置 确保两台机器&#xff08;假设为服务器 A 和服务器 B&#xff09;能够互相通信&#xff0c;例如它们在同一个局域网内&#xff0c;并且开放了 MySQL 通信所需的端口&#xff08;默认是 …

【stm32】RTC时钟的介绍与使用

RTC时钟的介绍与使用 一、时间戳1、Unix时间戳2、UTC/GMT3、时间戳转换 二、BKP简介及代码编写1、BKP简介2、BKP基本结构3、BKP库函数介绍&#xff1a;4、程序编写&#xff1a; 三、RTC简介及代码编写1、RTC简介2、RTC框图2、RTC基本结构3、RTC相关库函数介绍&#xff1a;4、程…

界面控件DevExpress JS ASP.NET Core v24.1亮点 - 支持Angular 18

DevExtreme拥有高性能的HTML5 / JavaScript小部件集合&#xff0c;使您可以利用现代Web开发堆栈&#xff08;包括React&#xff0c;Angular&#xff0c;ASP.NET Core&#xff0c;jQuery&#xff0c;Knockout等&#xff09;构建交互式的Web应用程序。从Angular和Reac&#xff0c…

如何检索 LINEMOD 数据集的相机内参

简介 BOP (Benchmark for 6D Object Pose Estimation) 是一个专为6D物体姿态估计而设计的基准测试平台。它为研究人员提供了多种数据集&#xff0c;以帮助评估和比较物体识别和姿态估计算法的性能。官方网站是 BOP&#xff0c;你可以在这里找到丰富的资源和信息。 检索 LINEM…

机器学习与数据挖掘_使用梯度下降法训练线性回归模型

目录 实验内容 实验步骤 1. 导入必要的库 2. 加载数据并绘制散点图 3. 设置模型的超参数 4. 实现梯度下降算法 5. 打印训练后的参数和损失值 6. 绘制损失函数随迭代次数的变化图 7. 绘制线性回归拟合曲线 8. 基于训练好的模型进行新样本预测 实验代码 实验结果 实验…

web——sqliabs靶场——第一关

今天开始搞这个靶场&#xff0c;从小白开始一点点学习,加油&#xff01;&#xff01;&#xff01;&#xff01; 1.搭建靶场 注意点&#xff1a;1.php的版本问题&#xff0c;要用老版本 2.小p要先改数据库的密码&#xff0c;否则一直显示链接不上数据库 2.第一道题&#xff0…

Xamarin 实现播放视频 MP4

我的想法是在App启动时播放一段视频&#xff0c;实现方式如下&#xff1a; 准备一个视频&#xff1a; Logo.mp4 添加到资源中&#xff1a;Assets 然后将资源设置为 AndroidAsset 启动时&#xff0c;将资源文件拷贝到程序目录的files下&#xff1a; protected override void On…

4070显卡只要一毛钱?这个双十一太疯狂了

2024年双十一大战正酣&#xff0c;各大商家使尽浑身解数&#xff0c;奇招频出&#xff0c;真是让人看得目瞪口呆。每日口令红包、攒火力值领裂变红包、限时抢免定金红包……还有各类满减和打折优惠活动&#xff0c;玩法千奇百怪&#xff0c;算来算去索性放弃&#xff0c;真是没…

C++优选算法四 前缀和

前缀和算法是一种常用的优化技术&#xff0c;主要用于加速某些涉及连续子数组或子序列求和的问题。 一、定义与原理 定义&#xff1a;前缀和是指数组中某个位置之前&#xff08;包括该位置&#xff09;所有元素的和。前缀和算法则是通过提前计算并存储这些前缀和&#xff0c;…

yum安装指定版本Redis

一&#xff0c;yum安装Redis 1&#xff0c;列出可用的redis版本 yum --showduplicates list redis 只有5.0.3.5版本&#xff0c;如果已经满足需求&#xff0c;可以直接安装 2&#xff0c;安装redis yum -y install 如果显示installed&#xff0c; 说明安装成功了 也可以通过…

DAY21|二叉树Part08|LeetCode: 669. 修剪二叉搜索树、108.将有序数组转换为二叉搜索树、538.把二叉搜索树转换为累加树

目录 LeetCode: 669. 修剪二叉搜索树 基本思路 C代码 LeetCode: 108.将有序数组转换为二叉搜索树 基本思路 C代码 LeetCode: 538.把二叉搜索树转换为累加树 基本思路 C代码 LeetCode: 669. 修剪二叉搜索树 力扣代码链接 文字讲解&#xff1a;LeetCode: 669. 修剪二叉搜…