| |
|
开发:
C++知识库
Java知识库
JavaScript
Python
PHP知识库
人工智能
区块链
大数据
移动开发
嵌入式
开发工具
数据结构与算法
开发测试
游戏开发
网络协议
系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程 数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁 |
-> JavaScript知识库 -> 简单的权限分配 -> 正文阅读 |
|
[JavaScript知识库]简单的权限分配 |
user.jsp <%-- Created by IntelliJ IDEA. User: Wangwen Date: 2022/6/22 Time: 20:43 To change this template use File | Settings | File Templates. --%> <%@ page contentType="text/html;charset=UTF-8" language="java" %> <html> <head> <title>Title</title> <!--引入element得css样式--> <link type="text/css" rel="stylesheet" href="/css/index.css"/> <!--引入vue得js文件 这个必须在element之前引入--> <script type="text/javascript" src="/js/vue.js"></script> <script type="text/javascript" src="/js/axios.min.js"></script> <!--element得js文件--> <script type="text/javascript" src="/js/index.js"></script> </head> <body> <div id="app"> <%-- 模糊查询数据表单--%> <el-form :inline="true" :model="formInline" class="demo-form-inline" > <el-form-item label="姓名"> <el-input v-model="formInline.username" placeholder="姓名"></el-input> </el-form-item> <el-form-item label="角色"> <el-select v-model="formInline.roleid" placeholder="选择角色"> <el-option v-for="role in roles" :label="role.roledesc" :value="role.id"></el-option> </el-select> </el-form-item> <el-form-item> <el-button type="primary" @click="onSubmit">查询</el-button> <el-button type="success" icon="el-icon-check">添加</el-button> </el-form-item> </el-form> <%-- 用户表格 --%> <el-table :data="tableData" stripe style="width: 100%;height: 420px"> <el-table-column prop="id" label="编号" > </el-table-column> <el-table-column prop="username" label="姓名" > </el-table-column> <el-table-column prop="icon" label="头像" > <%-- temlate自定义标签--%> <template slot-scope="scope"> <img :src="scope.row.icon" height="50px" width="50px"/> </template> </el-table-column> <el-table-column prop="roledesc" label="职位"> <template slot-scope="scope"> {{scope.row.role.roledesc}} </template> </el-table-column> <el-table-column label="操作" > <template slot-scope="scope"> <el-button type="warning" icon="el-icon-edit" round @click="edit(scope.row)">编辑</el-button> <el-button type="danger" icon="el-icon-delete" round @click="deleteOne(scope.row.id)">删除</el-button> </template> </el-table-column> </el-table> <%-- 分页--%> <el-pagination background layout="prev, pager, next" @current-change="handleCurrentChange" :page-size="pageSize" :current-page="currentPage" :total="total"> </el-pagination> <%-- 编辑表单弹出层 --%> <el-dialog title="修改信息" :visible.sync="dialogVisible" width="30%" > <span> <el-form label-width="80px" :model="formLabelAlign"> <el-form-item label="姓名"> <el-input v-model="formLabelAlign.username"></el-input> </el-form-item> <el-form-item label="头像"> <el-upload class="avatar-uploader" action="/upload" :show-file-list="false" :on-success="handleAvatarSuccess" > <img v-if="formLabelAlign.icon" :src="formLabelAlign.icon" class="avatar"> <i v-else class="el-icon-plus avatar-uploader-icon"></i> </el-upload> </el-form-item> <el-form-item label="职位"> <el-select v-model="formLabelAlign.roleid" placeholder="请选择角色"> <el-option v-for="role in roles" :label="role.roledesc" :value="role.id"></el-option> </el-select> </el-form-item> </el-form> </span> <span slot="footer" class="dialog-footer"> <el-button @click="dialogVisible = false">取 消</el-button> <el-button type="primary" @click="confirmEditUser">确 定</el-button> </span> </el-dialog> </div> </body> <script> var app = new Vue({ el:"#app", data:{ formInline:{}, roles:[], tableData:[], //总条数 total:0, //每页显示数量 pageSize:5, //当前显示第几页 currentPage:1, //编辑表单 formLabelAlign:{}, //编辑回显表单 dialogVisible:false, }, //页面加载完毕执行 created(){ this.loadAllRole(); this.initTable(); }, //所有的方法 methods:{ //删除 deleteOne(id){ axios.post("/login/edit",this.formLabelAlign).then(function (result){ }) }, //确认修改 confirmEditUser(){ var that = this; axios.post("/login/edit",this.formLabelAlign).then(function (result){ //隐藏编辑层 that.dialogVisible = false; //重新加载数据 that.initTable(); }) }, //头像上传成功触发的函数 handleAvatarSuccess(res, file) { this.formLabelAlign.icon = res.data }, //编辑函数 edit(row){ this.dialogVisible=true; this.formLabelAlign = row; }, //onSubmit模糊查 onSubmit(){ this.initTable(); }, //页码发生改变时调用函数 handleCurrentChange(val) { this.currentPage=val; this.initTable(); }, //获取所有的角色 loadAllRole(){ var that = this; axios.get("/role/findAll").then(function (result){ if(result.data.code===2000){ that.roles = result.data.data; } }) }, //分页传值 initTable(){ var that = this; axios.post("/login/findAll?currentPage="+this.currentPage+"&pageSize="+this.pageSize,this.formInline).then(function (result){ if(result.data.code===2000){ that.tableData = result.data.data.list; that.total = result.data.data.total; } }) }, } }) </script> <style> .avatar-uploader .el-upload { border: 1px dashed #d9d9d9; border-radius: 6px; cursor: pointer; position: relative; overflow: hidden; } .avatar-uploader .el-upload:hover { border-color: #409EFF; } .avatar-uploader-icon { font-size: 28px; color: #8c939d; width: 178px; height: 178px; line-height: 178px; text-align: center; } .avatar { width: 178px; height: 178px; display: block; } </style> </html> role.jsp <%-- Created by IntelliJ IDEA. User: Wangwen Date: 2022/6/22 Time: 20:43 To change this template use File | Settings | File Templates. --%> <%@ page contentType="text/html;charset=UTF-8" language="java" %> <html> <head> <title>Title</title> <!--引入element得css样式--> <link type="text/css" rel="stylesheet" href="/css/index.css"/> <!--引入vue得js文件 这个必须在element之前引入--> <script type="text/javascript" src="/js/vue.js"></script> <script type="text/javascript" src="/js/axios.min.js"></script> <!--element得js文件--> <script type="text/javascript" src="/js/index.js"></script> </head> <body> <div id="app"> <%-- 用户表格 --%> <el-table :data="tableData" stripe style="width: 100%;height: 420px"> <el-table-column prop="id" label="编号" > </el-table-column> <el-table-column prop="roledesc" label="角色" > </el-table-column> <el-table-column prop="zid" label="链表id" > </el-table-column> <el-table-column label="操作" width="500px"> <template slot-scope="scope"> <el-button type="warning" icon="el-icon-edit" round >编辑</el-button> <el-button type="danger" icon="el-icon-delete" round >删除</el-button> <el-button type="success" icon="el-icon-edit" round @click="edit(scope.row.id)">权限管理</el-button> </template> </el-table-column> </el-table> <%-- 修改权限弹出层--%> <el-dialog title="修改信息" :visible.sync="dialogVisible" width="30%" > <%-- default-expanded-keys默认展开项 default-checked-keys默认选中项 --%> <el-tree :data="data" show-checkbox node-key="id" ref="tree" :default-expanded-keys="[checkedKeys]" :props="defaultProps"> </el-tree> <span slot="footer" class="dialog-footer"> <el-button @click="dialogVisible = false">取 消</el-button> <el-button type="primary" @click="confirmPermission">确 定</el-button> </span> </el-dialog> </div> </body> <script> var app = new Vue({ el:"#app", data:{ tableData:[], //控制权限的隐藏与显示 dialogVisible:false, //树形菜单数据 data: [], //被选中的id rid:0, //被选中的菜单项目 checkedKeys:[], defaultProps: { children: 'children',//子菜单 label: 'menuname'//菜单名称 } }, //页面加载完毕执行 created(){ this.initTable(); }, //所有的方法 methods:{ //确认分配权限 confirmPermission(){ var that = this; //获取所有被选中的节点 var checkedNodes = this.$refs.tree.getCheckedNodes(); //获取半选节点 var halfCheckedNodes = this.$refs.tree.getHalfCheckedNodes(); //声明一个变量存放被选中的节点id var menuid = []; checkedNodes.forEach((item,index)=>{ menuid.push(item.id); }) halfCheckedNodes.forEach((item,index)=>{ menuid.push(item.id); }) axios.post("/menu/confirmPermission?rid="+this.rid,menuid).then(function (result){ that.dialogVisible = false; }) }, //修改权限 edit(rid){ this.rid = rid; this.dialogVisible = true; var that = this; axios.get("/menu/allMenu?rid="+rid).then(function (result){ //查寻所有菜单 that.data = result.data.data.menus; //查询当前角色具有的菜单id that.checkedKeys=result.data.data.menuids; setTimeout(()=>{ that.checkedKeys.forEach(value=>{ that.$refs.tree.setChecked(value,true,false); }) },100) }) }, //初始界面 initTable(){ var that = this; axios.get("/role/findAll").then(function (result){ if(result.data.code===2000){ that.tableData = result.data.data; } }) }, } }) </script> </html> <%-- Created by IntelliJ IDEA. User: Wangwen Date: 2022/6/20 Time: 19:54 To change this template use File | Settings | File Templates. --%> <%@ page contentType="text/html;charset=UTF-8" language="java" %> <html> <head> <title>Title</title> <!--引入element得css样式--> <link type="text/css" rel="stylesheet" href="/css/index.css"/> <!--引入vue得js文件 这个必须在element之前引入--> <script type="text/javascript" src="/js/vue.js"></script> <script type="text/javascript" src="/js/axios.min.js"></script> <!--element得js文件--> <script type="text/javascript" src="/js/index.js"></script> <style> body{ margin: 0px; padding: 0px; } .el-header, .el-footer { background-color: #B3C0D1; color: #fff; line-height: 60px; } .el-aside::-webkit-scrollbar { display: none; } .el-aside { background-color: #545c64; color: #333; height: 600px; line-height: 600px; /*overflow: hidden;*/ } .el-main { background-color: #E9EEF3; color: #333; height: 600px; line-height: 600px; } body > .el-container { margin-bottom: 40px; } .el-container:nth-child(5) .el-aside, .el-container:nth-child(6) .el-aside { line-height: 260px; } .el-container:nth-child(7) .el-aside { line-height: 320px; } .el-menu{ border: none; } </style> </head> <body> <div id="app"> <el-container> <el-header> <span class="el-dropdown-link" style="float: right"> <el-dropdown @command="handleCommand"> <span style="margin-top: 10px;display: inline-block" > <el-avatar :src="loginInfo.icon"></el-avatar> </span> <el-dropdown-menu slot="dropdown"> <el-dropdown-item command="info" >用户信息</el-dropdown-item> <el-dropdown-item command="logout">退出登录</el-dropdown-item> </el-dropdown-menu> </el-dropdown> </span> </el-header> <el-dialog title="查看个人信息" :visible.sync="editDialogVisible" width="30%" > <!--:model==绑定表单数据--> <el-form :model="tableData" > <el-form-item label="编号" label-width="80px"> <el-input v-model="tableData.id" autocomplete="off" ></el-input> </el-form-item> <el-form-item label="姓名" label-width="80px"> <el-input v-model="tableData.username" autocomplete="off" ></el-input> </el-form-item> <el-form-item label="密码" label-width="80px"> <el-input v-model="tableData.password" autocomplete="off" ></el-input> </el-form-item> <el-form-item label="角色id" label-width="80px"> <el-input v-model="tableData.roleid" autocomplete="off" ></el-input> </el-form-item> <el-form-item label="头像地址" label-width="80px"> <el-input v-model="tableData.icon" autocomplete="off" ></el-input> </el-form-item> </el-form> </el-form> <span slot="footer" class="dialog-footer"> <el-button @click="editDialogVisible = false">取 消</el-button> <el-button type="primary" @click="editDialogVisible = false">确定</el-button> </span> </el-dialog> <el-container> <el-aside width="200px"> <el-menu default-active="2" class="el-menu-vertical-demo" background-color="#545c64" text-color="#fff" active-text-color="#ffd04b"> <el-submenu :index="menu.id+''" v-for="menu in leftMenu"> <template slot="title"> <i :class="menu.icon"></i> <span>{{menu.menuname}}</span> </template> <el-menu-item :index="second.id+''" v-for="second in menu.children"> <i :class="second.icon"></i> <span slot="title" > <a @click="showContent(second.href,second.menuname)">{{second.menuname}}</a></span> </el-menu-item> </el-submenu> </el-menu> </el-aside> <el-main> <%--标签页 v-model当前活跃的tab @tab-remove移除当前标签 --%> <el-tabs v-model="editableTabsValue" type="card" closable @tab-remove="removeTab(editableTabsValue)"> <%-- v-for循环所有tab标签 editableTabs表示所有tab --%> <el-tab-pane v-for="(item, index) in editableTabs" :key="item.name" :label="item.title" :name="item.name" > <%-- {{item.content}}--%> <iframe :src="item.url" frameborder="0" width="100%" height="600px;"></iframe> </el-tab-pane> </el-tabs> </el-main> </el-container> </el-container> </div> <script> var app = new Vue({ el: "#app", data:{ //登录者头像 loginInfo:"", //左侧菜单 leftMenu:[], myUser:[], tableData:[], editDialogVisible : false, //当前活跃的索引 editableTabsValue:'1', tabIndex:1, //表示所有tab editableTabs:[{ //当前活跃的索引 name:'1', //标签 title:"首页", url: 'index.jsp' }], }, created(){ this.loadAvatar(); this.leftMenus(); }, methods:{ //调用添加tab函数 addTab(url, menuname) { let newTabName = ++this.tabIndex + ''; //获取所有标签 let tabs = this.editableTabs; //定义是否已经存在标签 var isHaveTab = false; //循环所有标签判断该标签是否已经存在 tabs.forEach((tab,index) => { //判断如果为true,判断该tab已经存在 if(menuname===tab.title){ isHaveTab = true; newTabName = tab.name; } }); //如果不存在,则添加 if(!isHaveTab){ //数组editableTabs 添加新的tab this.editableTabs.push({ title: menuname, name: newTabName, url: url }); } this.editableTabsValue = newTabName; }, //移除标签的方法 removeTab(targetName){ let tabs = this.editableTabs; let activeName = this.editableTabsValue; if (activeName === targetName) { tabs.forEach((tab, index) => { if (tab.name === targetName) { let nextTab = tabs[index + 1] || tabs[index - 1]; if (nextTab) { activeName = nextTab.name; } } }); } this.editableTabsValue = activeName; this.editableTabs = tabs.filter(tab => tab.name !== targetName); }, //左侧点击事件 showContent(url,menuname){ this.addTab(url,menuname); }, //menu获取菜单 leftMenus(){ var that = this; axios.get("/menu/leftMenu").then(function (result){ that.leftMenu = result.data.data }) }, loadAvatar(){ var that = this; //用户登录 axios.get("/login/loginone").then(function (result){ that.loginInfo = result.data.data }) }, handleCommand(command) { //查看个人信息 if(command=='info'){ var that = this; axios.get("/login/info").then(function (result){ if(result.data.code===2000){ that.editDialogVisible=true that.tableData = result.data.data } }) //退出登录 }else if(command=='logout'){ axios.get("/login/logout").then(function (result){ if(result.data.code===2000){ location.href="/login.jsp"; } }) } } } }) </script> </body> </html> main.jsp <%-- Created by IntelliJ IDEA. User: Wangwen Date: 2022/6/20 Time: 19:54 To change this template use File | Settings | File Templates. --%> <%@ page contentType="text/html;charset=UTF-8" language="java" %> <html> <head> <title>Title</title> <!--引入element得css样式--> <link type="text/css" rel="stylesheet" href="/css/index.css"/> <!--引入vue得js文件 这个必须在element之前引入--> <script type="text/javascript" src="/js/vue.js"></script> <script type="text/javascript" src="/js/axios.min.js"></script> <!--element得js文件--> <script type="text/javascript" src="/js/index.js"></script> <style> body{ margin: 0px; padding: 0px; } .el-header, .el-footer { background-color: #B3C0D1; color: #fff; line-height: 60px; } .el-aside::-webkit-scrollbar { display: none; } .el-aside { background-color: #545c64; color: #333; height: 600px; line-height: 600px; /*overflow: hidden;*/ } .el-main { background-color: #E9EEF3; color: #333; height: 600px; line-height: 600px; } body > .el-container { margin-bottom: 40px; } .el-container:nth-child(5) .el-aside, .el-container:nth-child(6) .el-aside { line-height: 260px; } .el-container:nth-child(7) .el-aside { line-height: 320px; } .el-menu{ border: none; } </style> </head> <body> <div id="app"> <el-container> <el-header> <span class="el-dropdown-link" style="float: right"> <el-dropdown @command="handleCommand"> <span style="margin-top: 10px;display: inline-block" > <el-avatar :src="loginInfo.icon"></el-avatar> </span> <el-dropdown-menu slot="dropdown"> <el-dropdown-item command="info" >用户信息</el-dropdown-item> <el-dropdown-item command="logout">退出登录</el-dropdown-item> </el-dropdown-menu> </el-dropdown> </span> </el-header> <el-dialog title="查看个人信息" :visible.sync="editDialogVisible" width="30%" > <!--:model==绑定表单数据--> <el-form :model="tableData" > <el-form-item label="编号" label-width="80px"> <el-input v-model="tableData.id" autocomplete="off" ></el-input> </el-form-item> <el-form-item label="姓名" label-width="80px"> <el-input v-model="tableData.username" autocomplete="off" ></el-input> </el-form-item> <el-form-item label="密码" label-width="80px"> <el-input v-model="tableData.password" autocomplete="off" ></el-input> </el-form-item> <el-form-item label="角色id" label-width="80px"> <el-input v-model="tableData.roleid" autocomplete="off" ></el-input> </el-form-item> <el-form-item label="头像地址" label-width="80px"> <el-input v-model="tableData.icon" autocomplete="off" ></el-input> </el-form-item> </el-form> </el-form> <span slot="footer" class="dialog-footer"> <el-button @click="editDialogVisible = false">取 消</el-button> <el-button type="primary" @click="editDialogVisible = false">确定</el-button> </span> </el-dialog> <el-container> <el-aside width="200px"> <el-menu default-active="2" class="el-menu-vertical-demo" background-color="#545c64" text-color="#fff" active-text-color="#ffd04b"> <el-submenu :index="menu.id+''" v-for="menu in leftMenu"> <template slot="title"> <i :class="menu.icon"></i> <span>{{menu.menuname}}</span> </template> <el-menu-item :index="second.id+''" v-for="second in menu.children"> <i :class="second.icon"></i> <span slot="title" > <a @click="showContent(second.href,second.menuname)">{{second.menuname}}</a></span> </el-menu-item> </el-submenu> </el-menu> </el-aside> <el-main> <%--标签页 v-model当前活跃的tab @tab-remove移除当前标签 --%> <el-tabs v-model="editableTabsValue" type="card" closable @tab-remove="removeTab(editableTabsValue)"> <%-- v-for循环所有tab标签 editableTabs表示所有tab --%> <el-tab-pane v-for="(item, index) in editableTabs" :key="item.name" :label="item.title" :name="item.name" > <%-- {{item.content}}--%> <iframe :src="item.url" frameborder="0" width="100%" height="600px;"></iframe> </el-tab-pane> </el-tabs> </el-main> </el-container> </el-container> </div> <script> var app = new Vue({ el: "#app", data:{ //登录者头像 loginInfo:"", //左侧菜单 leftMenu:[], myUser:[], tableData:[], editDialogVisible : false, //当前活跃的索引 editableTabsValue:'1', tabIndex:1, //表示所有tab editableTabs:[{ //当前活跃的索引 name:'1', //标签 title:"首页", url: 'index.jsp' }], }, created(){ this.loadAvatar(); this.leftMenus(); }, methods:{ //调用添加tab函数 addTab(url, menuname) { let newTabName = ++this.tabIndex + ''; //获取所有标签 let tabs = this.editableTabs; //定义是否已经存在标签 var isHaveTab = false; //循环所有标签判断该标签是否已经存在 tabs.forEach((tab,index) => { //判断如果为true,判断该tab已经存在 if(menuname===tab.title){ isHaveTab = true; newTabName = tab.name; } }); //如果不存在,则添加 if(!isHaveTab){ //数组editableTabs 添加新的tab this.editableTabs.push({ title: menuname, name: newTabName, url: url }); } this.editableTabsValue = newTabName; }, //移除标签的方法 removeTab(targetName){ let tabs = this.editableTabs; let activeName = this.editableTabsValue; if (activeName === targetName) { tabs.forEach((tab, index) => { if (tab.name === targetName) { let nextTab = tabs[index + 1] || tabs[index - 1]; if (nextTab) { activeName = nextTab.name; } } }); } this.editableTabsValue = activeName; this.editableTabs = tabs.filter(tab => tab.name !== targetName); }, //左侧点击事件 showContent(url,menuname){ this.addTab(url,menuname); }, //menu获取菜单 leftMenus(){ var that = this; axios.get("/menu/leftMenu").then(function (result){ that.leftMenu = result.data.data }) }, loadAvatar(){ var that = this; //用户登录 axios.get("/login/loginone").then(function (result){ that.loginInfo = result.data.data }) }, handleCommand(command) { //查看个人信息 if(command=='info'){ var that = this; axios.get("/login/info").then(function (result){ if(result.data.code===2000){ that.editDialogVisible=true that.tableData = result.data.data } }) //退出登录 }else if(command=='logout'){ axios.get("/login/logout").then(function (result){ if(result.data.code===2000){ location.href="/login.jsp"; } }) } } } }) </script> </body> </html> sping.xml <?xml version="1.0" encoding="UTF-8"?> <beans xmlns="http://www.springframework.org/schema/beans" xmlns:mvc="http://www.springframework.org/schema/mvc" xmlns:context="http://www.springframework.org/schema/context" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd http://www.springframework.org/schema/mvc http://www.springframework.org/schema/mvc/spring-mvc.xsd http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context.xsd"> <!--1.包扫描--> <context:component-scan base-package="com.www"/> <!--2.静态资源放行--> <mvc:default-servlet-handler/> <!--3.特殊注解的开启--> <mvc:annotation-driven/> <!-- 文件上传解析器 --> <bean id="multipartResolver" class="org.springframework.web.multipart.commons.CommonsMultipartResolver"> <!--这里的单位为字节10M*1024K*1024--> <property name="maxUploadSize" value="10485760"/> </bean> <bean id="ds" class="com.alibaba.druid.pool.DruidDataSource"> <property name="driverClassName" value="com.mysql.cj.jdbc.Driver"/> <property name="url" value="jdbc:mysql://localhost:3306/achao?serverTimezone=Asia/Shanghai&characterEncoding=UTF-8"/> <property name="username" value="root"/> <property name="password" value="123456"/> <!--初始化连接数量:根据你项目的并发进行评估--> <property name="initialSize" value="5"/> <!--最大的连接个数--> <property name="maxActive" value="10"/> <!--等待时间 单位是毫秒--> <property name="maxWait" value="3000"/> </bean> <!--sqlSessionFactory 整合mybatis--> <bean id="sessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean"> <property name="dataSource" ref="ds"/> <!--设置mybatis映射文件的路径--> <property name="mapperLocations" value="classpath:mapper/*.xml"/> <!-- 分页配置--> <property name="plugins"> <array> <bean class="com.github.pagehelper.PageInterceptor"> </bean> </array> </property> </bean> <!--为指定dao接口生成代理实现类。交于spring容器来管理dao接口的代理实现类对象。--> <bean class="org.mybatis.spring.mapper.MapperScannerConfigurer"> <!--basePackage:为那些包下的dao接口生成代理实现类。--> <property name="basePackage" value="com.www.dao"/> </bean> </beans> UserDao.xml <?xml version="1.0" encoding="UTF-8" ?> <!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd"> <mapper namespace="com.www.dao.UserDao"> <resultMap id="baseUserMap" type="com.www.entity.User" autoMapping="true"> <id property="id" column="uid"/> <association property="role" javaType="com.www.entity.Role" autoMapping="true"> <id property="id" column="rid"/> </association> </resultMap> <sql id="usersql"> u.id uid,username,roleid,icon,r.id rid,roledesc </sql> <!-- 修改用户信息--> <update id="update"> update tbl_user set username = #{username},icon = #{icon},roleid = #{roleid} where id = #{id} </update> <select id="select" resultType="com.www.entity.User"> select * from tbl_user where username=#{username} and password=#{password} </select> <select id="findAll" resultMap="baseUserMap"> select <include refid="usersql"/> from tbl_user u join tbl_role r on u.roleid = r.id <where> <if test="username!=null and username!=''"> and username like '%${username}%' </if> <if test="roleid!=null"> and roleid=#{roleid} </if> </where> </select> </mapper> RoleDao.xml <?xml version="1.0" encoding="UTF-8" ?> <!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd"> <mapper namespace="com.www.dao.RoleDao"> <select id="findAll" resultType="com.www.entity.Role"> select * from tbl_role </select> </mapper> MenuDao.xml <?xml version="1.0" encoding="UTF-8" ?> <!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd"> <mapper namespace="com.www.dao.MenuDao"> <select id="findUserId" resultType="com.www.entity.Menu"> select tbl_menu.* from link_id join tbl_menu on link_id.mid=tbl_menu.id where link_id.rid=#{userid} </select> <!-- 查询所有--> <select id="findAllMenu" resultType="com.www.entity.Menu"> select * from tbl_menu </select> <select id="findAllMenuId" resultType="java.lang.Integer"> select mid from rolemenu where rid=#{rid} </select> <!--删除角色具有的菜单--> <delete id="delete"> delete from link_id where id = #{rid} </delete> <!-- 批量添加 collection如果有别名写别名 没的话写array--> <insert id="batchInsert"> insert into link_id values <foreach collection="menuid" item="mid" separator=","> (null,#{mid},#{rid}) </foreach> </insert> </mapper> OSSUtils package com.www.utils; import com.aliyun.oss.OSS; import com.aliyun.oss.OSSClientBuilder; import org.springframework.web.multipart.MultipartFile; import java.io.InputStream; import java.util.Calendar; import java.util.UUID; public class OSSUtils { public static String show(MultipartFile file)throws Exception { // Endpoint以华东1(杭州)为例,其它Region请按实际情况填写。 String endpoint = "111"; // 阿里云账号AccessKey拥有所有API的访问权限,风险很高。强烈建议您创建并使用RAM用户进行API访问或日常运维,请登录RAM控制台创建RAM用户。 String accessKeyId = "111"; String accessKeySecret = "111"; // 填写Bucket名称,例如examplebucket。 String bucketName = "11o11"; // 填写Object完整路径,完整路径中不能包含Bucket名称,例如exampledir/exampleobject.txt。 //你上传到oss后的名字 会根据日期帮你创建文件夹。 String objectName =fileName(file); // 创建OSSClient实例。 OSS ossClient = new OSSClientBuilder().build(endpoint, accessKeyId, accessKeySecret); try { InputStream inputStream = file.getInputStream(); ossClient.putObject(bucketName, objectName, inputStream); } catch (Exception oe) { } finally { if (ossClient != null) { ossClient.shutdown(); } } String url="https://"+bucketName+"."+endpoint+"/"+objectName; return url; } //获取上传到oss后的名字 private static String fileName(MultipartFile file){ Calendar calendar=Calendar.getInstance(); String name=calendar.get(Calendar.YEAR)+"/"+(calendar.get(Calendar.MONTH)+1)+"/"+ calendar.get(Calendar.DATE)+"/"+ UUID.randomUUID().toString().replace("-","")+ file.getOriginalFilename(); return name; } } UserService package com.www.service; import com.www.entity.User; import com.www.utils.CommonResult; import org.springframework.web.bind.annotation.RequestParam; import java.util.List; import java.util.Map; public interface UserService { //账号密码查询 public User select(Map map); //查询所有 public CommonResult findAll(Integer currentPage, Integer pageSize, Map map); //修改 public CommonResult update(User user); } RoleService package com.www.service; import com.www.entity.Role; import com.www.entity.User; import java.util.List; import java.util.Map; public interface RoleService { public List<Role> findAll(); } MenuService package com.www.service; import com.www.entity.Menu; import com.www.utils.CommonResult; import java.util.List; public interface MenuService { public List<Menu> findRoleId(Integer roleid); CommonResult findAllMenu(Integer rid); CommonResult confirmPermission(Integer rid, Integer[] menuid); } UserServiceImpl package com.www.service.impl; import com.github.pagehelper.PageHelper; import com.github.pagehelper.PageInfo; import com.www.dao.UserDao; import com.www.entity.User; import com.www.service.UserService; import com.www.utils.CommonResult; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; import java.util.List; import java.util.Map; @Service public class UserServiceImpl implements UserService { @Autowired private UserDao userDao; public User select(Map map) { User user = userDao.select(map); return user; } public CommonResult findAll(Integer currentPage, Integer pageSize, Map map) { PageHelper.startPage(currentPage,pageSize); List<User> list = userDao.findAll(map); PageInfo<User> pageInfo = new PageInfo<User>(list); return new CommonResult(2000,"分页查询成功",pageInfo); } // 修改 public CommonResult update(User user) { Integer update = userDao.update(user); if(update==1){ return new CommonResult(2000,"修改成功",null); } return new CommonResult(5000,"修改失败",null); } } RoleServiceImpl package com.www.service.impl; import com.www.dao.RoleDao; import com.www.dao.UserDao; import com.www.entity.Role; import com.www.entity.User; import com.www.service.RoleService; import com.www.service.UserService; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; import java.util.List; import java.util.Map; @Service public class RoleServiceImpl implements RoleService { @Autowired private RoleDao roleDao; public List<Role> findAll() { List<Role> list = roleDao.findAll(); return list; } } MenuServiceImpl package com.www.service.impl; import com.www.dao.MenuDao; import com.www.entity.Menu; import com.www.service.MenuService; import com.www.utils.CommonResult; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; import javax.smartcardio.CommandAPDU; import java.util.ArrayList; import java.util.HashMap; import java.util.List; import java.util.Map; @Service public class MenuServiceImpl implements MenuService { @Autowired private MenuDao menuDao; public List<Menu> findRoleId(Integer roleid) { List<Menu> userId = menuDao.findUserId(roleid); //一级菜单 List<Menu> menus = new ArrayList<Menu>(); for(Menu first:userId) { if(first.getZid()==0){ menus.add(first); } } for(Menu f:menus) { //二级菜单 List<Menu> menu = new ArrayList<Menu>(); for(Menu s:userId){ if(s.getZid().equals(f.getId())){ menu.add(s); } } f.setChildren(menu); } return menus; } public CommonResult findAllMenu(Integer rid) { List<Menu> list = menuDao.findAllMenu(); //一级菜单 List<Menu> menus = new ArrayList<Menu>(); for(Menu first:list) { if(first.getZid()==0){ menus.add(first); } } for(Menu f:menus) { //二级菜单 List<Menu> menu = new ArrayList<Menu>(); for(Menu s:list){ if(s.getZid().equals(f.getId())){ menu.add(s); } } f.setChildren(menu); } //查询当前角色具有的菜单id List<Integer> menuids = menuDao.findAllMenuId(rid); Map map = new HashMap(); map.put("menus",menus); map.put("menuids",menuids); return new CommonResult(2000,"查询成功",map); } //确认权限 public CommonResult confirmPermission(Integer rid, Integer[] menuid) { //删除rid具有的权限 menuDao.delete(rid); //添加rid的权限 menuDao.batchInsert(rid,menuid); return new CommonResult(2000,"分配成功",null); } } User package com.www.entity; import lombok.AllArgsConstructor; import lombok.Data; import lombok.NoArgsConstructor; @Data @AllArgsConstructor @NoArgsConstructor public class User { private Integer id; private String username; private String password; private Integer roleid; private String icon; private Role role;//用户的角色 public User(Integer id, String username, String password, Integer roleid, String icon) { this.id = id; this.username = username; this.password = password; this.roleid = roleid; this.icon = icon; } } Role package com.www.entity; import lombok.AllArgsConstructor; import lombok.Data; import lombok.NoArgsConstructor; @Data @AllArgsConstructor @NoArgsConstructor public class Role { private Integer id; private String roledesc; private Integer zid; } Menu package com.www.entity; import lombok.AllArgsConstructor; import lombok.Data; import lombok.NoArgsConstructor; import java.util.List; @Data @AllArgsConstructor @NoArgsConstructor public class Menu { private Integer id; private String menuname; private String href; private Integer zid; private String icon; private List<Menu> children; } UserDao package com.www.dao; import com.www.entity.User; import org.apache.ibatis.annotations.Param; import java.util.List; import java.util.Map; public interface UserDao { //查询按账号密码 public User select(Map map); //查询所有 public List<User> findAll(Map map); //修改User数据 public Integer update(User user); } RoleDao package com.www.dao; import com.www.entity.Role; import com.www.entity.User; import java.util.List; import java.util.Map; public interface RoleDao { public List<Role> findAll(); } MenuDao package com.www.dao; import com.www.entity.Menu; import org.apache.ibatis.annotations.Param; import java.util.List; public interface MenuDao { public List<Menu> findUserId(Integer userid); List<Menu> findAllMenu(); List<Integer> findAllMenuId(Integer roleid); void delete(Integer rid); void batchInsert(@Param("rid") Integer rid,@Param("menuid") Integer[] menuid); } UserController package com.www.controller;
import com.sun.corba.se.impl.resolver.SplitLocalResolverImpl;
import com.www.entity.User;
import com.www.service.UserService;
import com.www.utils.CommonResult;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;
import javax.servlet.http.HttpSession;
import java.util.List;
import java.util.Map;
@RestController
@RequestMapping("/login")
public class UserController {
@Autowired
private UserService userService;
//修改数据
@PostMapping("edit")
public CommonResult edit(@RequestBody User user){
return userService.update(user);
}
//获取用户
@RequestMapping("/loadUserInfo")
public CommonResult loadUserInfo(HttpSession session,@RequestBody Map map) {
User user = userService.select(map);
session.setAttribute("user",user);
if(user!=null){
return new CommonResult(2000,"获取当前用户成功",user);
}
return new CommonResult(5000,"获取当前用户失败",null);
}
//用户退出
@GetMapping("/logout")
public CommonResult logout(HttpSession session){
session.removeAttribute("user");
return new CommonResult(2000,"退出成功",null);
}
//用户人人信息
@GetMapping("/info")
public CommonResult info(HttpSession session){
User user = (User) session.getAttribute("user");
return new CommonResult(2000,"显示成功",user);
}
//用户登录
@GetMapping("/loginone")
public CommonResult login(HttpSession session){
User user =(User) session.getAttribute("user");
return new CommonResult(2000,"登录成功",user);
}
//查询用户
@RequestMapping("/findAll")
public CommonResult findAll(@RequestParam(defaultValue = "1") Integer currentPage,@RequestParam(defaultValue = "5") Integer pageSize, @RequestBody Map map){
return userService.findAll(currentPage,pageSize,map);
}
}
UploadController
package com.www.controller; import com.www.utils.CommonResult; import com.www.utils.OSSUtils; import org.springframework.web.bind.annotation.PostMapping; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RestController; import org.springframework.web.multipart.MultipartFile; @RestController @RequestMapping("/upload") public class UploadController { @PostMapping public CommonResult liftMenu(MultipartFile file) throws Exception { String path = OSSUtils.show(file); return new CommonResult(2000,"上传成功",path); } } RoleController package com.www.controller; import com.www.entity.Menu; import com.www.entity.Role; import com.www.entity.User; import com.www.service.MenuService; import com.www.service.RoleService; import com.www.utils.CommonResult; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.web.bind.annotation.GetMapping; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RestController; import java.util.List; @RestController @RequestMapping("/role") public class RoleController { @Autowired private RoleService roleService; @RequestMapping("/findAll") public CommonResult liftMenu(){ List<Role> list = roleService.findAll(); return new CommonResult(2000,"角色查询成功",list); } } MenuController package com.www.controller; import com.www.entity.Menu; import com.www.service.MenuService; import com.www.utils.CommonResult; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.web.bind.annotation.*; import java.util.List; import java.util.Map; @RestController @RequestMapping("menu") public class MenuController { @Autowired private MenuService menuService; @GetMapping("/leftMenu") public CommonResult liftMenu(){ int roleid = 1; List<Menu> roleId = menuService.findRoleId(roleid); return new CommonResult(2000,"左侧查询成功",roleId); } @GetMapping("/allMenu") public CommonResult allMenu(Integer rid){ return menuService.findAllMenu(rid); } @PostMapping("/confirmPermission") public CommonResult confirmPermission(Integer rid,@RequestBody Integer[] menuid){ return menuService.confirmPermission(rid,menuid); } } |
|
JavaScript知识库 最新文章 |
ES6的相关知识点 |
react 函数式组件 & react其他一些总结 |
Vue基础超详细 |
前端JS也可以连点成线(Vue中运用 AntVG6) |
Vue事件处理的基本使用 |
Vue后台项目的记录 (一) |
前后端分离vue跨域,devServer配置proxy代理 |
TypeScript |
初识vuex |
vue项目安装包指令收集 |
|
上一篇文章 下一篇文章 查看所有文章 |
|
开发:
C++知识库
Java知识库
JavaScript
Python
PHP知识库
人工智能
区块链
大数据
移动开发
嵌入式
开发工具
数据结构与算法
开发测试
游戏开发
网络协议
系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程 数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁 |
360图书馆 购物 三丰科技 阅读网 日历 万年历 2025年1日历 | -2025/1/11 10:42:44- |
|
网站联系: qq:121756557 email:121756557@qq.com IT数码 |