day19_添加 修改

day19_添加 修改

1添加场景分析

image-20250819094059391

1使用弹出框 承载添加界面

2弹出框输入菜单信息 提交到添加接口

3添加接口处理完毕 反馈信息

弹窗处理结果 关闭弹出框 刷新table数据

2sql分析

-- 逻辑主键  一般不加自增 由使用人员维护编号 
-- 页面使用了动态图标 图标名称 不能使用ElementPlus图标库之外的字符 会影响table数据显示
insert into admin_menu(mid,menuname,pid,url,glyphicon) VALUES (99,'测试菜单',0,'#','Compass')-- 添加数据校验 如果编号已存在 不能添加
select * from admin_menu where mid = 98

3dao编写

    //添加菜单Integer insertAdminMenu(AdminMenu inputMenu);//通过ID查菜单数据AdminMenu getAdminMenuByMid(Long mid);
    <insert id="insertAdminMenu">insert into admin_menu(mid,menuname,pid,url,glyphicon)VALUES (#{mid},#{menuname},#{pid},#{url},#{glyphicon})</insert><select id="getAdminMenuByMid" resultMap="AdminMenuBaseMap">select * from admin_menu where mid = #{mid}</select>

4添加接口

1.添加菜单信息时验证mid重复

    protected void insertMenu(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {req.setCharacterEncoding("utf-8");String midStr = req.getParameter("mid");String menuname = req.getParameter("menuname");String pidStr = req.getParameter("pid");String url = req.getParameter("url");String glyphicon = req.getParameter("glyphicon");Long mid = null;Long pid = null;if(midStr!=null&&!"".equals(midStr)){mid = Long.valueOf(midStr);}if(pidStr!=null&&!"".equals(pidStr)){pid = Long.valueOf(pidStr);}AdminMenu inputMenu = new AdminMenu(mid,  menuname,  pid,  url,  glyphicon);AdminMenuService adminMenuService = new AdminMenuServiceImpl();AdminMenu menuById = adminMenuService.getAdminMenuByMid(mid);Result result = null;if(menuById!=null){//主键重复 直接返回错误 跳过添加流程result =  new Result(ReturnCode.OPERATION_DATA_FAILED2.getCode(), ReturnCode.OPERATION_DATA_FAILED2.getMsg());}else{//主键可用 执行添加流程//添加流程Integer resNum = adminMenuService.insertAdminMenu(inputMenu);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();}

2.用户输入完毕后 单独校验mid是否重复

    protected void insertCheck(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {String midStr = req.getParameter("mid");Long mid = null;if(midStr!=null&&!"".equals(midStr)){mid = Long.valueOf(midStr);}AdminMenuService adminMenuService = new AdminMenuServiceImpl();AdminMenu menuById = adminMenuService.getAdminMenuByMid(mid);Result result = null;if(menuById!=null){//主键重复 直接返回错误 跳过添加流程result =  new Result(ReturnCode.OPERATION_DATA_FAILED2.getCode(), ReturnCode.OPERATION_DATA_FAILED2.getMsg());}else{result =  new Result(ReturnCode.QUERY_SUCCESS.getCode(), ReturnCode.QUERY_SUCCESS.getMsg());}resp.setContentType("application/json;charset=utf-8");PrintWriter writer = resp.getWriter();writer.print(JSON.toJSONString(result));writer.close();}

5添加界面

1.没有使用elementPlus表单校验

增加弹出框交互界面

<template><el-dialog v-model="insertDialogVisible" title="添加" width="500"><!--    没有使用elementPlus表单校验--><el-form :model="insertForm" label-width="auto" style="max-width: 600px"><el-form-item label="菜单编号"><el-input v-model="insertForm.mid" @blur="insertCheck"/></el-form-item><el-form-item label="菜单名称"><el-input v-model="insertForm.menuname" /></el-form-item><el-form-item label="上级编号"><el-input v-model="insertForm.pid" /></el-form-item><el-form-item label="访问地址"><el-input v-model="insertForm.url" /></el-form-item><el-form-item label="菜单图标"><el-input v-model="insertForm.glyphicon" /></el-form-item></el-form><template #footer><div class="dialog-footer"><el-button @click="insertDialogVisible = false">关闭</el-button><el-button type="primary" @click="insertSubmit">保存</el-button></div></template></el-dialog></template><script setup>/**添加功能 */
//添加对话框 显示/隐藏
const insertDialogVisible = ref(false)//添加表单对象
const insertForm = reactive({mid: '',menuname: '',pid: '',url: '',glyphicon: ''
})/**没有使用elementPlus表单校验 */
//添加数据校验 mid字段
const insertCheck = ()=>{myGet('/menus/insertCheck',{mid:insertForm.mid}).then(resp=>{if(resp.data.code == 20012){ElMessage.warning('菜单编号重复  ' + resp.data.msg)}})
}//添加提交
const insertSubmit = ()=>{let params = insertForm//发请求处理数据myPost('/menus/insertMenu',params).then(resp=>{console.log(resp.data);if(resp.data.code == 20010){//关框insertDialogVisible.value = false//显示操作结果ElMessage.success(resp.data.msg)//刷新数据 保留当前页码和查询条件//把改后的page 作为参数 通过请求传走let params1 = tableData.pageInfo;let params2 = queryForm;//json对象组合语法let allParam = {...params1,...params2}//发送请求myQuery(allParam)//直接重新查询//myQuery({})}else if(resp.data.code == 20012){ElMessage.warning('菜单编号重复  ' + resp.data.msg)}})}</script>

2.使用elementPlus表单校验

增加弹出框交互界面(form设置参数不同)

<template><el-dialog v-model="insertDialogVisible" title="添加" width="500"><!--    没有使用elementPlus表单校验<el-form :model="insertForm" label-width="auto" style="max-width: 600px"><el-form-item label="菜单编号"><el-input v-model="insertForm.mid" @blur="insertCheck"/></el-form-item><el-form-item label="菜单名称"><el-input v-model="insertForm.menuname" /></el-form-item><el-form-item label="上级编号"><el-input v-model="insertForm.pid" /></el-form-item><el-form-item label="访问地址"><el-input v-model="insertForm.url" /></el-form-item><el-form-item label="菜单图标"><el-input v-model="insertForm.glyphicon" /></el-form-item></el-form> --><el-form ref="insertFromRef" status-icon :rules="rules" :model="insertForm" label-width="auto"style="max-width: 600px"><el-form-item label="菜单编号" prop="mid"><el-input v-model="insertForm.mid" /></el-form-item><el-form-item label="菜单名称" prop="menuname"><el-input v-model="insertForm.menuname" /></el-form-item><el-form-item label="上级编号" prop="pid"><!-- <el-input v-model="insertForm.pid" /> --><el-select v-model="insertForm.pid" placeholder="请选择" style="width: 100%;"><el-option label="无" value="0" /><el-option v-for="option in menuList" :label="option.menuname" :value="option.mid" /></el-select></el-form-item><el-form-item label="访问地址" prop="url"><el-input v-model="insertForm.url" /></el-form-item><el-form-item label="菜单图标" prop="glyphicon"><!-- <el-input v-model="insertForm.glyphicon" /> --><el-select v-model="insertForm.glyphicon" placeholder="请选择" style="width: 100%;"><el-option  value="User" > <el-icon><User /></el-icon> User</el-option><el-option  value="More" > <el-icon><More /></el-icon> More</el-option><el-option  value="ZoomIn" > <el-icon><ZoomIn /></el-icon> ZoomIn</el-option><el-option  value="TurnOff" > <el-icon><TurnOff /></el-icon> TurnOff</el-option></el-select></el-form-item></el-form><template #footer><div class="dialog-footer"><el-button @click="insertDialogVisible = false">关闭</el-button><el-button type="primary" @click="insertSubmit">保存</el-button></div></template></el-dialog>
</template><script steup>/**添加功能 */
//添加对话框 显示/隐藏
const insertDialogVisible = ref(false)//添加表单对象
const insertForm = reactive({mid: '',menuname: '',pid: '',url: '',glyphicon: ''
})//输入框的值  用于输出错误信息
const validateMid = (rule, value, callback) => {myGet('/menus/insertCheck', { mid: value }).then(resp => {if (resp.data.code == 20012) {callback(new Error(resp.data.msg))} else if (resp.data.code == 20000) {callback()}})
}
//form校验规则 使用自定义校验
const rules = reactive({mid: [{ validator: validateMid, trigger: 'blur' }],
})//表单统一校验 如果有红框 不让提交
//添加表单对象
const insertFromRef = ref()const insertSubmit = () => {insertFromRef.value.validate((valid, fields) => {if (valid) {console.log("提交表单数据", insertForm);//let params = insertForm//发请求处理数据myPost('/menus/insertMenu', insertForm).then(resp => {console.log(resp.data);if (resp.data.code == 20010) {//关框insertDialogVisible.value = false//显示操作结果ElMessage.success(resp.data.msg)//刷新数据 保留当前页码和查询条件//把改后的page 作为参数 通过请求传走let params1 = tableData.pageInfo;let params2 = queryForm;//json对象组合语法let allParam = { ...params1, ...params2 }//发送请求myQuery(allParam)queryMenuLevel1()//直接重新查询//myQuery({})//清空表单的数据insertFromRef.value.resetFields()}})}})
}</script>

6修改场景分析

image-20250819144104589

7修改sql分析

-- 加载需要修改的语句
select * from admin_menu where mid = 98-- 修改语句
update admin_menu set  menuname = '测试77',pid = 20,url= '/test77', glyphicon = 'Setting'
where mid = 77

8修改dao

加载修改数据时 使用的sql语句 通过Mid 查询doa方法 可以复用

Integer updateAdminMenu(AdminMenu inputMenu);
    <update id="updateAdminMenu">update admin_menu set  menuname = #{menuname},pid = #{pid},url= #{url}, glyphicon = #{glyphicon}where mid = #{mid}</update>

9修改接口

1 准备修改的数据

  protected void updateMenuInfo(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {String midStr = req.getParameter("mid");Long mid = null;if(midStr!=null&&!"".equals(midStr)){mid = Long.valueOf(midStr);}AdminMenuService adminMenuService = new AdminMenuServiceImpl();AdminMenu menuById = adminMenuService.getAdminMenuByMid(mid);Result result = null;if(menuById!=null){//返回查到的需要修改的完整数据result =  new Result(ReturnCode.QUERY_SUCCESS.getCode(), ReturnCode.QUERY_SUCCESS.getMsg(),menuById);}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();}

注意: 这个接口跟 添加时 校验mid是否重复的接口有些相似 但是 功能不同的接口不要随意合并

​ 业务场景不同 接口尽量分开

2实际的修改数据请求

protected void updateMenu(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {req.setCharacterEncoding("utf-8");String midStr = req.getParameter("mid");String menuname = req.getParameter("menuname");String pidStr = req.getParameter("pid");String url = req.getParameter("url");String glyphicon = req.getParameter("glyphicon");Long mid = null;Long pid = null;if(midStr!=null&&!"".equals(midStr)){mid = Long.valueOf(midStr);}if(pidStr!=null&&!"".equals(pidStr)){pid = Long.valueOf(pidStr);}AdminMenu inputMenu = new AdminMenu(mid,  menuname,  pid,  url,  glyphicon);AdminMenuService adminMenuService = new AdminMenuServiceImpl();Integer resNum = adminMenuService.updateAdminMenu(inputMenu);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();}

10 修改界面

修改界面与添加界面 基本效果有类似 细节不同

<template><!-- table多加一列 操作列  加到table中间 --><el-table-column prop="menuname" label="操作" ><template #default="scope"><el-button type="primary" @click="openUpdateDialog(scope.row)">修改</el-button></template></el-table-column><!-- 修改对话框 --><el-dialog v-model="updateDialogVisible" title="修改" width="500"><el-form  :model="updateForm.updateData" label-width="auto"style="max-width: 600px"><el-form-item label="菜单编号" prop="mid"><el-input disabled v-model="updateForm.updateData.mid" /></el-form-item><el-form-item label="菜单名称" prop="menuname"><el-input v-model="updateForm.updateData.menuname" /></el-form-item><el-form-item label="上级编号" prop="pid"><el-select v-model="updateForm.updateData.pid" placeholder="请选择" style="width: 100%;"><el-option label="无" :value="0" /><el-option v-for="option in menuList" :label="option.menuname" :value="option.mid" /></el-select></el-form-item><el-form-item label="访问地址" prop="url"><el-input v-model="updateForm.updateData.url" /></el-form-item><el-form-item label="菜单图标" prop="glyphicon"><el-select v-model="updateForm.updateData.glyphicon" placeholder="请选择" style="width: 100%;"><el-option  value="User" > <el-icon><User /></el-icon> User</el-option><el-option  value="More" > <el-icon><More /></el-icon> More</el-option><el-option  value="ZoomIn" > <el-icon><ZoomIn /></el-icon> ZoomIn</el-option><el-option  value="TurnOff" > <el-icon><TurnOff /></el-icon> TurnOff</el-option></el-select></el-form-item></el-form><template #footer><div class="dialog-footer"><el-button @click="updateDialogVisible = false">关闭</el-button><el-button type="primary" @click="updateSubmit">保存</el-button></div></template></el-dialog></template>
<script setup>
/**修改功能 *///修改提交
const updateSubmit = ()=>{//关框updateDialogVisible.value = false//发请求处理数据myPost('/menus/updateMenu', updateForm.updateData).then(resp => {console.log(resp.data);if (resp.data.code == 20010) {//显示操作结果ElMessage.success(resp.data.msg)//刷新数据 保留当前页码和查询条件//把改后的page 作为参数 通过请求传走let params1 = tableData.pageInfo;let params2 = queryForm;//json对象组合语法let allParam = { ...params1, ...params2 }//发送请求myQuery(allParam)queryMenuLevel1()//直接重新查询//myQuery({})}})}//修改开框
const openUpdateDialog = (currentRow)=>{console.log(currentRow);//加载修改数据myGet("/menus/updateMenuInfo",{mid:currentRow.mid}).then(resp=>{console.log(resp.data.returnData);//把后端读到的完整数据 加载到updateForm上updateForm.updateData = resp.data.returnData})//打开弹出框updateDialogVisible.value = true
}
//对话框显示/隐藏 bol值
const updateDialogVisible = ref(false)
//修改表单数据
const updateForm = reactive({updateData:{mid: '',menuname: '',pid: '',url: '',glyphicon: ''
}})</script>

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

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

相关文章

day18_查询功能 合并servlet

day18_查询功能 合并servlet 1.sql分析 -- 分页+条件 查询 select am1.*,IFNULL(am2.menuname,无) as pname from admin_menu am1 left join admin_menu am2 on am1.pid = am2.mid-- 动态查询条件 where am1.menuna…

NOIP模拟赛 十七

倍增+DP+DP+可持久化平衡树A. 对于一个 \(x\) ,如果 \(x\bmod a < x\) ,称其为有效的。我们断言,有效次取模只会发生 \(\log\) 次。 如果发生有效取模,则 \(a<x\) 。\(a\le \frac{x}{2}\) 则 \(x\bmod a <…

day22_用户模块

day22_用户模块 1查询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…

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

一切从“/”开始 在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

今天放假,休息一下