day22_用户模块

day22_用户模块

1查询

image-20250822093250732

sql分析

-- 定制系统
-- 查询分段记录
select au1.*,au2.username create_uname from admin_user au1 left join admin_user au2 on au1.create_uid = au2.uidwhere au1.username like CONCAT('%','a','%')
AND   au1.isvalid = 0limit 0,3-- 统计总记录数
select count(1) from admin_user au1where au1.username like CONCAT('%','a','%')
AND   au1.isvalid = 0

dao代码

<select id="listUserByCondition" resultMap="AdminUserMap">select au1.*,au2.username create_uname from admin_user au1 left join admin_user au2 on au1.create_uid = au2.uid<where><if test="inputUser.username !=null and inputUser.username != ''">au1.username like CONCAT('%',#{inputUser.username},'%')</if><if test="inputUser.isvalid !=null">AND   au1.isvalid = #{inputUser.isvalid}</if></where>limit #{startIdx},#{pageSize}</select><select id="countUserByCondition" resultType="java.lang.Integer">select count(1) from admin_user au1<where><if test="inputUser.username !=null and inputUser.username != ''">au1.username like CONCAT('%',#{inputUser.username},'%')</if><if test="inputUser.isvalid !=null">AND   au1.isvalid = #{inputUser.isvalid}</if></where></select>

查询接口

    protected void listUser(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {String username = req.getParameter("username");String isvalidStr = req.getParameter("isvalid");String pageStr = req.getParameter("page");String pageSizeStr = req.getParameter("pageSize");Integer isvalid = null;if(isvalidStr!=null&&!"".equals(isvalidStr)){isvalid = Integer.valueOf(isvalidStr);}AdminUser inputUser = new AdminUser(username, isvalid);Integer page = 1;Integer pageSize = 3;if(pageStr!=null&&!"".equals(pageStr)){page = Integer.valueOf(pageStr);}if(pageSizeStr!=null&&!"".equals(pageSizeStr)){pageSize = Integer.valueOf(pageSizeStr);}//调用serviceAdminUserService adminUserService = new AdminUserServiceImpl();//1查总记录数Integer total = adminUserService.countUserByCondition(inputUser);Integer totalPage = PageInfo.getTotalPage(total, pageSize);//2控制超页if(page>totalPage&&page!=1){page = totalPage;}//3查询分段记录List<AdminUser> adminUsers = adminUserService.listUserByCondition(inputUser, page, pageSize);//反馈数据Result result = null;if(adminUsers.size()>0){PageInfo pageInfo = new PageInfo(page,pageSize,total);result =  new Result(ReturnCode.QUERY_SUCCESS.getCode(),ReturnCode.QUERY_SUCCESS.getMsg(),adminUsers,pageInfo);}else{result =  new Result(ReturnCode.QUERY_NODATA.getCode(),ReturnCode.QUERY_NODATA.getMsg());}resp.setContentType("application/json;charset=utf-8");PrintWriter writer = resp.getWriter();writer.print(JSON.toJSONString(result));writer.close();}

查询界面

<template><el-form ref="queryFormRef" :model="queryForm" :inline="true"><el-form-item label="用户名称" prop="username"><el-input v-model="queryForm.username" style="width: 240px;" placeholder="username" clearable /></el-form-item><el-form-item label="用户状态" prop="isvalid"><el-select v-model="queryForm.isvalid" placeholder="请选择" style="width: 240px;" clearable><el-option label="离职" :value="0" /><el-option label="在职" :value="1" /><el-option label="休假" :value="2" /></el-select></el-form-item><el-form-item><el-button type="primary" @click="querySubmit">查询</el-button><el-button @click="queryReset">重置</el-button></el-form-item></el-form><el-table height="450" :data="tableData.tableList" style="width: 100%"><el-table-column prop="uid" fixed  label="编号" width="180" /><el-table-column prop="username" label="用户名" width="180" /><el-table-column prop="password" label="密码" width="180"><template #default="scope"><el-text type="info">{{ transPassword(scope.row.password) }} </el-text></template></el-table-column><el-table-column prop="isvalid" label="用户状态" width="180"><template #default="scope"><el-text v-if="scope.row.isvalid == 1"  type="success">在职</el-text><el-text v-else-if="scope.row.isvalid == 0" type="danger">离职</el-text><el-text v-else-if="scope.row.isvalid == 2" type="warning">休假</el-text></template></el-table-column><el-table-column prop="createUid" label="创建人" width="180"/><el-table-column prop="createUname" label="创建名称" width="180"/><el-table-column prop="regTime" label="注册时间" width="180"><template #default="scope"><el-tag type="primary">{{scope.row.regTime}}</el-tag></template></el-table-column><el-table-column prop="loginTime" label="最后登录时间" width="180"><template #default="scope"><el-tag type="primary">{{scope.row.loginTime}}</el-tag></template></el-table-column><el-table-column prop="headImg" label="头像地址" width="180"><template #default="scope"><img :src="scope.row.headImg"></img></template></el-table-column></el-table><el-paginationv-model:current-page="tableData.pageInfo.page"v-model:page-size="tableData.pageInfo.pageSize":total="tableData.pageInfo.total":page-sizes="[3, 6, 9]"layout="total, sizes, prev, pager, next, jumper"@size-change="handleSizeChange"@current-change="handleCurrentChange"/></template><script setup>
import { ref,reactive,onMounted } from 'vue'
import {Check,Delete,Edit,Message,Search,Star,Share} from '@element-plus/icons-vue'
import { myGet, myPost } from '@/myaxios'
import { ElMessage, ElMessageBox } from 'element-plus'/**查询功能 */
//table绑定的数据
const tableData = reactive({tableList:[],pageInfo:{page:1,pageSize:3,total:55}
})
//查询表单对象
const queryFormRef = ref()//查询表单
const queryForm = reactive({username:'',isvalid:''
})
//查询按钮
const querySubmit = ()=>{myQuery(queryForm)
}
//重置按钮
const queryReset = ()=>{//清数据queryFormRef.value.resetFields()//重新查myQuery({})
}//page改变
const handleCurrentChange = (page)=>{//改页码参数tableData.pageInfo.page = pagelet params1 = tableData.pageInfolet params2 = queryForm//查询请求myQuery({...params1,...params2})
}
//pageSize改变
const handleSizeChange = (pageSize)=>{//改页码参数tableData.pageInfo.page = 1tableData.pageInfo.pageSize = pageSizelet params1 = tableData.pageInfolet params2 = queryForm//查询请求myQuery({...params1,...params2})
}/**公共函数 */
//密码脱敏(把密码字段通过程序逻辑做部分隐藏)
const transPassword = (pwd)=>{let pwdStart = pwd.substr(0,1)let pwdEnd = pwd.substr(pwd.length-1,1)return `${pwdStart}***${pwdEnd}`;
}//查询函数
const myQuery = async (params)=>{
/*** await  异步同步等待* async  异步同步控制* 回调地狱 .then互相嵌套调用 代码结构显得杂乱* * 语法糖 简化和优化语法的语法功能*        使用了await语法之后 ajax请求代码结构更简洁*///await 主线程会等待 await的函数 执行完 主线程才会继续执行let resp = await myGet("/users/listUser",params)if(resp.data.code == 20000){tableData.tableList = resp.data.returnDatatableData.pageInfo  = resp.data.pageInfo}else if(resp.data.code == 20001){tableData.tableList = []tableData.pageInfo  = {page:1,pageSize:3,total:0}}}/**页面加载结束 加载查询数据 */
onMounted(()=>{myQuery({})
})</script><style scoped>img{width: 50px;height: 50px;}
</style>

2添加

sql分析

-- 添加语句                                                                                 
insert into admin_user (username,`password`,reg_time,isvalid,create_uid,head_img) VALUES ('test1','abc123',NOW(),1,7,'/test1')
--                         界面     默认      系统函数    默认   session后端取 界面

dao

    <insert id="insertAdminUser">insert into admin_user(username,`password`,reg_time,isvalid,create_uid,head_img)VALUES(#{username},'abc123',NOW(),1,#{createUid},#{headImg})</insert>

插入接口

    protected void insertUser(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {String username = req.getParameter("username");String headImg = req.getParameter("headImg");//把当前登录的用户编号 存入createUidAdminUser loginUser =(AdminUser) req.getSession().getAttribute("loginUser");//createUid是创建人编号AdminUser inputUser = new AdminUser(loginUser.getUid(), username, headImg);//调用serviceAdminUserService adminUserService = new AdminUserServiceImpl();Integer resNum = adminUserService.insertAdminUser(inputUser);Result result = null;if(resNum>0){result = new Result(ReturnCode.OPERATION_DATA_SUCCESS.getCode(), ReturnCode.OPERATION_DATA_SUCCESS.getMsg());}else{result = new Result(ReturnCode.OPERATION_DATA_FAILED.getCode(), ReturnCode.OPERATION_DATA_FAILED.getMsg());}resp.setContentType("application/json;charset=utf-8");PrintWriter writer = resp.getWriter();writer.print(JSON.toJSONString(result));writer.close();}

添加界面

  <el-drawer title="添加" size="30%" v-model="drawerVisable" direction="rtl"><el-form ref="insertFromRef"  :model="insertForm" label-width="70"style="max-width: 600px"><el-form-item label="用户名称" prop="username"><el-input v-model="insertForm.username" /></el-form-item><el-form-item label="头像地址" prop="headImg"><el-input v-model="insertForm.headImg" /></el-form-item><el-form-item><el-button type="primary" @click="insertSubmit">保存</el-button></el-form-item></el-form><!-- <template #footer><div style="flex: auto"><el-button @click="cancelClick">cancel</el-button><el-button type="primary" @click="confirmClick">confirm</el-button></div></template> --></el-drawer>
/**添加功能 */
//抽屉显示 隐藏 bol值
const drawerVisable = ref(false)
//添加表单对象
const insertForm = reactive({username:'',headImg:''
})//添加表单对象
const insertFromRef = ref()//添加提交
const insertSubmit = async ()=>{let resp =  await myPost('/users/insertUser',insertForm);if(resp.data.code==20010){drawerVisable.value = falseElMessage.success(resp.data.msg)//当前查询条件let params1 = tableData.pageInfolet params2 = queryForm//查询请求myQuery({...params1,...params2})//清空表单insertFromRef.value.resetFields()}else{ElMessage.error(resp.data.msg)}}//抽屉开框
const openInsert = ()=>{drawerVisable.value = true
}

3修改

这次修改直接从页面table取值 (简化做法) 减少了从后端取修改数据的接口

sql分析

update admin_user set  username = '测试用户',`password` = 'bbcccb',reg_time = '2011-11-11 11:11:11',isvalid =0,head_img ='/测试'where  uid = 5562

dao

    <update id="updateAdminUser">update admin_user setusername =  #{username},`password` = #{password},reg_time = #{regTime},isvalid =   #{isvalid}, head_img = #{headImg}where  uid = #{uid}</update>

修改接口

    protected void updateUser(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {String username = req.getParameter("username");String password = req.getParameter("password");String regTime = req.getParameter("regTime");String isvalidStr = req.getParameter("isvalid");String headImg = req.getParameter("headImg");String uidStr = req.getParameter("uid");Integer isvalid = null;Long uid = null;if(isvalidStr!=null&&!"".equals(isvalidStr)){isvalid =  Integer.valueOf(isvalidStr);}if(uidStr!=null&&!"".equals(uidStr)){uid =  Long.valueOf(uidStr);}AdminUser inputUser = new AdminUser(uid, username, password, regTime, isvalid, headImg);//调用serviceAdminUserService adminUserService = new AdminUserServiceImpl();Integer resNum = adminUserService.updateAdminUser(inputUser);Result result = null;if(resNum>0){result = new Result(ReturnCode.OPERATION_DATA_SUCCESS.getCode(), ReturnCode.OPERATION_DATA_SUCCESS.getMsg());}else{result = new Result(ReturnCode.OPERATION_DATA_FAILED.getCode(), ReturnCode.OPERATION_DATA_FAILED.getMsg());}resp.setContentType("application/json;charset=utf-8");PrintWriter writer = resp.getWriter();writer.print(JSON.toJSONString(result));writer.close();}

修改界面

<!-- table加一列 --><el-table-column fixed="right" label="操作" width="180"><template #default="scope"><el-button type="primary" @click="openUpdate(scope.row)">修改</el-button></template></el-table-column>
<!-- 修改弹出框(抽屉) --><el-drawer title="修改" size="30%" v-model="updateVisable" direction="rtl"><el-form  :model="editForm.editData" label-width="70"style="max-width: 600px"><el-form-item label="用户编号" ><el-input disabled v-model="editForm.editData.uid" /></el-form-item><el-form-item label="用户名称"><el-input v-model="editForm.editData.username" /></el-form-item><el-form-item label="用户密码"><el-input v-model="editForm.editData.password" /></el-form-item><el-form-item label="注册时间"><!-- <el-input v-model="editForm.editData.regTime" /> --><el-date-pickerv-model="editForm.editData.regTime"type="datetime"placeholder="请选择日期"value-format="YYYY-MM-DD HH:mm:ss" style="width: 100%;"/></el-form-item><el-form-item label="用户状态"><el-select v-model="editForm.editData.isvalid" placeholder="请选择" ><el-option label="离职" :value="0" /><el-option label="在职" :value="1" /><el-option label="休假" :value="2" /></el-select></el-form-item><el-form-item label="头像地址" ><el-input v-model="editForm.editData.headImg" /></el-form-item><el-form-item><el-button type="primary" @click="updateSubmit">保存</el-button></el-form-item></el-form><!-- <template #footer><div style="flex: auto"><el-button @click="cancelClick">cancel</el-button><el-button type="primary" @click="confirmClick">confirm</el-button></div></template> --></el-drawer>
/**修改功能 */
//修改抽屉显示 隐藏
const updateVisable = ref(false)
//修改表单对象
const editForm = reactive({editData:{uid:'',username:'',password:'',regTime:'',isvalid:'',headImg:'',
}})//打开修改框
const openUpdate = (currentRow)=>{updateVisable.value = true// console.log(currentRow);// console.log(JSON.parse(JSON.stringify(currentRow))  );//需要做对象复制 不能直接传引用editForm.editData = JSON.parse(JSON.stringify(currentRow))  }
//提交修改
const updateSubmit = async ()=>{let resp = await myPost("/users/updateUser", editForm.editData)if(resp.data.code==20010){updateVisable.value = falseElMessage.success(resp.data.msg)//当前查询条件let params1 = tableData.pageInfolet params2 = queryForm//查询请求myQuery({...params1,...params2})}else{ElMessage.error(resp.data.msg)}}

4删除

单条删除 table中 每条数据后放一个删除按钮 配合单条删除的接口

sql分析

delete  from admin_user where uid = 5557

dao

    <delete id="deleteAdminUser">delete  from admin_user where uid = #{uid}</delete>

删除接口

protected void deleteUser(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {String uidStr = req.getParameter("uid");Long uid = null;if(uidStr!=null&&!"".equals(uidStr)){uid =  Long.valueOf(uidStr);}AdminUserService adminUserService = new AdminUserServiceImpl();Integer resNum = adminUserService.deleteAdminUser(uid);Result result = null;if(resNum>0){result = new Result(ReturnCode.OPERATION_DATA_SUCCESS.getCode(), ReturnCode.OPERATION_DATA_SUCCESS.getMsg());}else{result = new Result(ReturnCode.OPERATION_DATA_FAILED.getCode(), ReturnCode.OPERATION_DATA_FAILED.getMsg());}resp.setContentType("application/json;charset=utf-8");PrintWriter writer = resp.getWriter();writer.print(JSON.toJSONString(result));writer.close();}

删除界面

        <el-table-column fixed="right" label="操作" width="180"><template #default="scope"><el-button type="primary" @click="openUpdate(scope.row)">修改</el-button><el-button type="primary" @click="openDelete(scope.row.uid)">删除</el-button></template></el-table-column>
/**删除功能 */
const openDelete =   (uid)=>{ElMessageBox.confirm(`确定要删除编号为[${uid}]记录么?`,'注意',{confirmButtonText: '确定',cancelButtonText: '取消',type: 'warning',}).then(async () => {//发送请求let resp =  await myPost("/users/deleteUser",{uid:uid})if(resp.data.code==20010){ElMessage.success(resp.data.msg)//当前查询条件let params1 = tableData.pageInfolet params2 = queryForm//查询请求myQuery({...params1,...params2})}else{ElMessage.error(resp.data.msg)}     }).catch(() => {})
}

5用户授权

image-20250822165403337

1点击授权按钮 弹出授权框

用tree列出所有的权限菜单 去要查出完整的菜单列表

2用户勾选 提交给后端保存

sql分析

开框 加载数据

-- 查询所有的权限菜单select am2.*,am1.* from admin_menu am1 right join admin_menu am2 on am1.pid = am2.midwhere am2.pid = 0-- 当前用户的已有权限编号列表 通过tree组件 默认选中
-- select mid from rel_admin_user_menu where uid = 3

保存授权信息

-- 处理权限信息时的sql-- 先删除
delete from rel_admin_user_menu where uid = 3-- 再添加insert into rel_admin_user_menu(uid,mid) VALUES (3,11001),(3,11002),(3,12001),(3,13001)

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

做招聘网站多少钱网站找不到首页

一切从“/”开始 在Linux系统中&#xff0c;目录、字符设备、块设备、套接字、打印机等都被抽象成了文件&#xff0c;一切皆为件 与windows操作系统不同&#xff0c;Linux系统内不存在C/D/E/F盘等&#xff0c;一切文件都是从根&#xff08;/&#xff09;目录开始的 Linux系统…

常州网站建设要多少钱wordpress 全站ajax

随着物联网、大数据、人工智能等技术的快速发展&#xff0c;边缘计算已成为当前信息技术领域的一个热门话题。在物联网领域&#xff0c;边缘计算被广泛应用于智慧交通、智能安防、工业等多个领域。因此&#xff0c;基于边缘计算技术的工业主板设计方案也受到越来越多人的关注。…

2025 丹东店推荐:丽格门窗,用 20 年技术沉淀守护家的舒适

在四季分明、冬季严寒的丹东,门窗的隔热保温、密封抗风性能直接决定着家居生活的幸福感。2025 年装修选门窗,坐落于丹东市振兴区兴六路大昌建材隔壁的丽格门窗店,带来了专为北方气候定制的系统门窗解决方案,其深厚…

NOIP2025模拟赛23

T1 T2 T3 T4\(\color{#52C41A} 普及+/提高\) \(\color{#3498DB} 提高+/省选-\) \(\color{#52C41A} 普及+/提高\) \(\color{#9D3DCF} 省选/NOI-\)参赛网址:https://oj.33dai.cn/d/TYOI/contest/689d2670c5d9c2f14c2250…

step

action被输入到机器人的控制器之前,做一个预处理,做一个clip截断,乘以一个scale,做完之后,再apply到机器人,计算reward和done(超时或者terminate),有done就reset,apply interval event,最后计算观测。 acti…

2025 呼和浩特店推荐:丽格门窗,用 20 年技术沉淀守护家的温度

在呼和浩特寒冷漫长的冬季与多风的气候环境中,门窗的隔热保温、抗风压性能直接决定着居住的舒适度与能耗成本。2025 年装修选门窗,位于呼和浩特市新城区欧亚达家具一楼的丽格门窗,凭借二十余年系统门窗专业积淀与针…

深入解析:浏览器端音视频处理新选择:Mediabunny 让 Web 媒体开发飞起来

深入解析:浏览器端音视频处理新选择:Mediabunny 让 Web 媒体开发飞起来pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !important; font-family:…

2025 宁波门窗店推荐:丽格门窗,甬城品质家居的安心之选

在宁波四季分明且湿润多雨的气候下,门窗的隔热、防水、隔音性能直接决定居家舒适度。2025 年装修或换窗,位于宁波市鄞州区宁穿路 988 号筑入空间 2 楼北侧的丽格门窗,凭借 20 余年系统门窗专业积淀与针对性产品设计…

移动硬盘上的文件消失了?以下是Mac电脑解除方法

pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !important; font-family: "Consolas", "Monaco", "Courier New", …

2025 贵阳门窗店优选:丽格门窗,用 20 年匠心适配高原宜居需求

在 2025 年的贵阳门窗市场,若想挑选兼具品质与适配性的系统门窗,位于贵阳市北京西路云岩区红星美凯龙中后庭 4 楼的丽格门窗绝对值得优先考量。作为深耕系统门窗领域 20 余载的知名品牌,丽格门窗凭借全产业链实力与…

2025 济南门窗店选购指南:丽格门窗凭硬实力圈粉品质家庭

在 2025 年济南门窗市场消费升级浪潮中,越来越多业主将性能优先、品质可控、环保节能作为选购核心标准。深耕系统门窗领域 20 余年的丽格门窗,凭借全产业链优势与硬核产品力,成为济南改善型住房与品质家装的优选品牌…

移动wap站点京东云建站

一个隐形的九宫格 规划的内容 根据前面关于因子分析、知识表征和结构特征等个方面和智能聊天工具的沟通和分析&#xff0c;我重新梳理了一下&#xff0c;对全量知识系统运营的组织结构及其组织层次和组织模式 的设计&#xff0c;得出一个大致的内容框架。如下&#xff1a; 知…

邹城建网站网站建设征税标准

zen-Coding是一款快速编写HTML,CSS&#xff08;或其他格式化语言&#xff09;代码的编辑器插件&#xff0c;这个插件可以用缩写方式完成大量重复的编码工作&#xff0c;是web前端从业者的利器。 zen-Coding插件支持多种编辑器&#xff0c;如UltraEdit&#xff0c;Notepad等。 温…

“鹏云杯”第十二届山东省大学生网络安全技能大赛 -- Crypto -- WriteUp

“鹏云杯”第十二届山东省大学生网络安全技能大赛 -- Crypto -- WriteUp“鹏云杯”第十二届山东省大学生网络安全技能大赛 -- Crypto -- WriteUp rsaaa task from Crypto.Util.number import * # from flag import fla…

服务器系统时间不对?Linux系统时间修改与同步全面指南

前言:时间不对会有什么问题? 在实际运维工作中,服务器系统时间不准是一个常见但影响严重的问题。它可能导致:日志时间混乱:故障排查时无法确定事件发生的真实顺序 证书验证失败:HTTPS、SSL证书等基于时间的认证会…

处理限流、缓存与数据一致性:1688 API 实时数据采集的强大的技术细节

处理限流、缓存与数据一致性:1688 API 实时数据采集的强大的技术细节2025-09-27 21:30 tlnshuju 阅读(0) 评论(0) 收藏 举报pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto…

9/27

今天放假,休息一下

2025 常熟门窗店优选:丽格门窗,20 年技术沉淀的品质之选

在家居装修中,门窗作为 “家的第一道屏障”,其品质直接关乎居住的舒适与安全。2025 年常熟门窗选购,丽格门窗凭借二十余年的技术积淀、全产业链品控实力与适配本地需求的产品优势,成为不容错过的靠谱之选,其常熟门…

2025上海门窗店选购选丽格!20 年系统门窗经验,徐汇宜山路店品质之选

在上海挑选门窗,既要适配潮湿多雨的气候,又要满足家居节能、隔音与安全需求,丽格门窗无疑是值得信赖的优选,其上海门店位于徐汇区宜山路 450 号家饰佳 5 楼,方便本地用户实地考察选购。 丽格门窗隶属于沈阳辽沈企…

2025GUI工程实践:Unity编辑模式下GUI运行

pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !important; font-family: "Consolas", "Monaco", "Courier New", …