实战7 部门查询和新增

目录

1、部门管理后端

1.1 Department

1.2.DepartmentQueryVo

1.3.DepartmentTree

1.4 DepartmentService

1.5 DepartmentServiceImp

1.6 DepartmentController

2、前端查询部门

2.1 效果图

2.2页面原型代码 

​2.3编写前端api脚本

2.4编写页面组件

3、前端新增部门

3.1页面效果

3.2 封装通用窗口组件

3.3编写新增部门弹窗代码 

3.4 选择所属部门

3.5表单数据快速清空

3.6新增部门 


1、部门管理后端

1.1 Department

1.2.DepartmentQueryVo

public class DepartmentQueryVo extends Department {

}

1.3.DepartmentTree

package com.cizhu.utils;import com.cizhu.entity.Department;
import org.springframework.beans.BeanUtils;import java.nio.file.OpenOption;
import java.util.ArrayList;
import java.util.List;
import java.util.Optional;/** * 生成部门树 */
public class DepartmentTree {public static List<Department> makeDepartmentTree(List<Department> departmentList,Long pid){List<Department> list = new ArrayList<>();Optional.ofNullable(departmentList).orElse(new ArrayList<Department>()).stream().filter(item->item!=null && item.getPid() == pid).forEach(item->{Department department = new Department();BeanUtils.copyProperties(item,department);List<Department> children = makeDepartmentTree(departmentList,item.getPid());department.setChildren(children);list.add(department);});return list;}
}

1.4 DepartmentService

public interface IDepartmentService extends IService<Department> {/*** 查询部门列表* @param departmentQueryVo* @return*/List<Department> findDepartmentList(DepartmentQueryVo departmentQueryVo);/*** 查询上级部门列表** * @return**/List<Department> findParentDepartment();/*** * 判断部门下是否有子部门* * @param id* * @return* */boolean hasChildrenOfDepartment(Long id);/*** * 判断部门下是否存在用户* * @param id* * @return* */boolean hasUserOfDepartment(Long id);}

1.5 DepartmentServiceImp

 

    @Overridepublic boolean hasChildrenOfDepartment(Long id) {
//创建条件构造器对象QueryWrapper<Department> queryWrapper = new QueryWrapper<Department>();queryWrapper.eq("pid",id);
//如果数量大于0,表示存在if(baseMapper.selectCount(queryWrapper)>0){return true;}return false;}/*** 判断部门下是否存在用户** @param id* @return*/@Overridepublic boolean hasUserOfDepartment(Long id) {
//创建条件构造器对象QueryWrapper<User> queryWrapper = new QueryWrapper<User>();queryWrapper.eq("department_id", id);
//如果数量大于0,表示存在if (userMapper.selectCount(queryWrapper) > 0) {return true;}return false;}

1.6 DepartmentController

@RestController
@RequestMapping("/api/department")
public class DepartmentController {@Resourceprivate IDepartmentService departmentService;/*** 查询部门列表* @param departmentQueryVo* @return*/@GetMapping("/list")public Result list(DepartmentQueryVo departmentQueryVo){
//调用查询部门列表方法List<Department> departmentList =departmentService.findDepartmentList(departmentQueryVo);
//返回数据return Result.ok(departmentList);}/*** 查询上级部门列表* @return*/@GetMapping("/parent/list")public Result getParentDepartment(){
//调用查询上级部门列表方法List<Department> departmentList =departmentService.findParentDepartment();
//返回数据return Result.ok(departmentList);}/*** 添加部门* @param department* @return*/@PostMapping("/add")public Result add(@RequestBody Department department){if(departmentService.save(department)){return Result.ok().message("部门添加成功");}return Result.error().message("部门添加失败");}/*** 修改部门* @param department* @return*/@PutMapping("/update")public Result update(@RequestBody Department department){if(departmentService.updateById(department)){return Result.ok().message("部门修改成功");}return Result.error().message("部门修改失败");}/*** 查询某个部门下是否存在子部门* @param id* @return*/@GetMapping("/check/{id}")public Result check(@PathVariable Long id){
//调用查询部门下是否存在子部门的方法if(departmentService.hasChildrenOfDepartment(id)){return Result.exist().message("该部门下存在子部门,无法删除");}
//调用查询部门下是否存在用户的方法if(departmentService.hasUserOfDepartment(id)){return Result.exist().message("该部门下存在用户,无法删除");}return Result.ok();}/*** 删除部门* @param id* @return*/@DeleteMapping("/delete/{id}")public Result delete(@PathVariable Long id){if(departmentService.removeById(id)){return Result.ok().message("部门删除成功");}return Result.error().message("部门删除失败");}
}

2、前端查询部门

2.1 效果图

2.2页面原型代码 

 使用中文语言包注释下面两行代码

// import enLang from 'element-ui/lib/locale/lang/en'// 如果使用中文语言包请默认支持,无需额外引入,请删除该依赖
Vue.use(Element, {size: Cookies.get('size') || 'medium', // set element-ui default size// locale: enLang // 如果使用中文,无需设置,请删除
})

dashboard显示为首页

 2.3编写前端api脚本

import http from '@/utils/request'export default{/*** 查询部门列表* @param {*} params * @returns */async getDepartmentList(params){return await http.get("/api/department/list",params)}
}

2.4编写页面组件

<template><el-main><el-form ref="searchForm" label-width="80px" :inline="true" size="small"><el-form-item><el-input v-model="searchModel.departmentName" placeholder="请输入部门名称" /></el-form-item><el-form-item><el-button type="primary" icon="el-icon-search" @click=search>查询</el-button><el-button @click="reset" icon="el-icon-refresh-right">重置</el-button><el-button type="success" @click="add" icon="el-icon-plus">新增</el-button></el-form-item></el-form><el-table :data="tableData" style="width: 100%;margin-bottom: 20px;" row-key="id" border stripe default-expand-all:tree-props="{ children: 'children', hasChildren: 'hasChildren' }"><el-table-column prop="departmentName" label="部门名称"></el-table-column><el-table-column prop="parentName" label="所属部门"></el-table-column><el-table-column prop="phone" label="部门电话"></el-table-column><el-table-column prop="address" label="部门地址"></el-table-column><el-table-column label="操作"><template slot-scope="scope"><el-button size="mini" icon="el-icon-edit-outline" type="primary" @click="handleEdit(scope.row)">编辑</el-button><el-button size="mini" icon="el-icon-delete-solid" type="danger" @click="handleDelete(scope.row)">删除</el-button></template></el-table-column></el-table></el-main>
</template>
<script>import departmentApi from '@/api/department'
export default {name: "department",data() {return {searchModel: {departmentName: "",},tableData: []}},//初始化时调用created() {//调用查询部门列表this.search()},methods: {/*** 查询部门列表*/async search() {let res = await departmentApi.getDepartmentList(this.searchModel)if (res.success) {this.tableData = res.data}}}
}
</script>
<style lang="scss" scoped></style>

3、前端新增部门

3.1页面效果

3.2 封装通用窗口组件

 

3.3编写新增部门弹窗代码 

 <!-- 选择所属部门窗口 --><system-dialog :title="parentDialog.title" :visible="parentDialog.visible" :width="parentDialog.width":height="parentDialog.height" @onClose="parentOnClose" @onConfirm="parentOnConfirm"><div slot="content"><el-tree ref="parentTree" :data="treeList" node-key="id" :props="defaultProps" empty-text="暂无数据":default-expand-all="true" :highlight-current="true" :expand-on-click-node="false"@node-click="handleNodeClick"><div class="customer-tree-node" slot-scope="{node,data}"><!-- 判断当前节点是否有子节点 --><span v-if="data.children.length === 0"><i class="el-icon-document"></i></span><span v-else @click="changeIcon(data)"><svg-icon v-if="data.open" icon-class="add-s"></svg-icon><svg-icon v-else icon-class="sub-s"></svg-icon></span><span style="margin-left:3px">{{ node.label }}</span></div></el-tree></div></system-dialog>
 methods: {/*** 选择所属部门取消事件*/parentOnClose() {this.parentDialog.visible = false;},/*** 选择所属部门确认事件*/parentOnConfirm() {this.parentDialog.visible = false;},/*** 弹窗取消事件*/onClose() {//关闭窗口this.deptDialog.visible = false;},/*** 弹窗确认事件*/onConfirm() {//表单验证this.$refs.deptForm.validate(async (valid) => {//如果验证通过if (valid) {let res = null// 判断是新增还是修改操作(dept.id是否为空)if (this.dept.id === "") {// 发送新增部门请求res = await departmentApi.addDept(this.dept)} else {// 发送修改部门请求res = await departmentApi.updateDept(this.dept)}if (res.success) {// 提示成功this.$message.success(res.message)// 刷新数据this.search()//关闭窗口this.deptDialog.visible = false;} else {this.$message.error(res.message)}}});},/*** 打开添加部门窗口*/openAddWindow() {// 清空表单数据this.$resetForm("deptForm", this.dept);//设置窗口标题this.deptDialog.title = "新增部门";//显示添加部门窗口this.deptDialog.visible = true;},

3.4 选择所属部门

 <!-- 添加和编辑部门窗口 --><system-dialog :title="deptDialog.title" :visible="deptDialog.visible" :width="deptDialog.width":height="deptDialog.height" @onClose="onClose" @onConfirm="onConfirm"><div slot="content"><el-form :model="dept" ref="deptForm" :rules="rules" label-width="80px" :inline="true" size="small"><el-form-item label="所属部门" prop="parentName"><el-input v-model="dept.parentName" :readonly="true" @click.native="openSelectDeptWindow()"></el-input></el-form-item><el-form-item label="部门名称" prop="departmentName"><el-input v-model="dept.departmentName"></el-input></el-form-item><el-form-item label="部门电话"><el-input v-model="dept.phone"></el-input></el-form-item><el-form-item label="部门地址"><el-input v-model="dept.address"></el-input></el-form-item><el-form-item label="序号"><el-input v-model="dept.orderNum"></el-input></el-form-item></el-form></div></system-dialog><!-- 选择所属部门窗口 --><system-dialog :title="parentDialog.title" :visible="parentDialog.visible" :width="parentDialog.width":height="parentDialog.height" @onClose="parentOnClose" @onConfirm="parentOnConfirm"><div slot="content"><el-tree ref="parentTree" :data="treeList" node-key="id" :props="defaultProps" empty-text="暂无数据":default-expand-all="true" :highlight-current="true" :expand-on-click-node="false"@node-click="handleNodeClick"><div class="customer-tree-node" slot-scope="{node,data}"><!-- 判断当前节点是否有子节点 --><span v-if="data.children.length === 0"><i class="el-icon-document"></i></span><span v-else @click="changeIcon(data)"><svg-icon v-if="data.open" icon-class="add-s"></svg-icon><svg-icon v-else icon-class="sub-s"></svg-icon></span><span style="margin-left:3px">{{ node.label }}</span></div></el-tree></div></system-dialog>
 // 获取所属部门列表async getParentTreeList(){return await http.get("/api/department/parent/list")},

3.5表单数据快速清空

 

3.6新增部门 

(1)前端新增部门API

 // 新增部门async addDept(params){return await http.post("/api/department/add",params)},

(2)新增部门表单验证

  /*** 弹窗确认事件*/onConfirm() {//表单验证this.$refs.deptForm.validate(async (valid) => {//如果验证通过if (valid) {let res = null// 判断是新增还是修改操作(dept.id是否为空)if (this.dept.id === "") {// 发送新增部门请求res = await departmentApi.addDept(this.dept)} else {// 发送修改部门请求res = await departmentApi.updateDept(this.dept)}if (res.success) {// 提示成功this.$message.success(res.message)// 刷新数据this.search()//关闭窗口this.deptDialog.visible = false;} else {this.$message.error(res.message)}}});},

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

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

相关文章

零基础制作宠物用品小程序

随着人们对宠物用品的需求不断增长&#xff0c;越来越多的人开始探索如何制作一个专业的宠物用品小程序。而乔拓云作为一款功能强大的在线商城制作工具&#xff0c;成为了许多商家的首选。本文将详细介绍如何使用乔拓云制作宠物用品小程序&#xff0c;让你轻松上手&#xff0c;…

Shell脚本应用实战

1、实验环境 随着业务的不断发展&#xff0c;某公司所使用的Linux服务器也越来越多。在系统管理和维护过程中&#xff0c;经常需要编写一些实用的小脚本&#xff0c;以辅助运维工作&#xff0c;提高工作效率。 2、需求描述 1、编写一个名为getarp.sh的小脚本&#xff0c;记录…

慢调用链诊断利器-ARMS 代码热点

作者&#xff1a;铖朴、义泊 可观测技术背景 从最早的 Google 发表的一篇名为《Dapper, a Large-Scale Distributed Systems Tracing Infrastructure》的论文开始&#xff0c;到后来以&#xff1a;Metrics&#xff08;指标&#xff09;、Tracing&#xff08;链路追踪&#xf…

系列九(实战)、生产环境服务器变慢,请你谈谈诊断思路和性能评估?

一、生产环境服务器变慢&#xff0c;诊断思路和性能评估 1.1、概述 Linux对于后端程序员来说并不陌生&#xff0c;但是结合生产环境服务器变慢的性能诊断和问题排查可能了解的就没那么多了&#xff0c;很多程序员的日常主要工作还是结合需求进行编码&#xff0c;至于Linux中如…

State of PostgreSQL 2023 报告解读

基于 PostgreSQL 内核的时序数据库厂商 Timescale 发布了一年一度的 State of Postgres 2023 报告。 Timescale 介绍 简单先介绍一下 Timescale 这家公司的历史。它最早是提供了一个 PG 的插件&#xff0c;引入了 Hypertable 这个概念&#xff0c;来高效地处理时序数据&…

【Amazon 实验②】Amazon WAF功能增强之使用Cloudfront、Lambda@Edge阻挡攻击

文章目录 一、方案介绍二、架构图三、部署方案1. 进入Cloud9 编辑器&#xff0c;新打开一个teminal2. 克隆代码3. 解绑上一个实验中Cloudfront 分配绑定的防火墙4. 使用CDK部署方案5. CDK部署完成6. 关联LambdaEdge函数 四、方案效果 一、方案介绍 采用 LambdaEdge DynamoDB 架…

Zookeeper的学习笔记

Zookeeper概念 Zookeeper是一个树形目录服务&#xff0c;简称zk。 Zookeeper是一个分布式的、开源的分布式应用程序的协调服务 Zookeeper提供主要的功能包括&#xff1a;配置管理&#xff0c;分布式锁&#xff0c;集群管理 Zookeeper命令操作 zk数据模型 zk中的每一个节点…

【网络安全】学习Web安全必须知道的一本书

【文末送书】今天推荐一本网络安全领域优质书籍。 目录 正文实战案例1&#xff1a;使用Docker搭建LAMP环境实战案例2&#xff1a;使用Docker搭建LAMP环境文末送书 正文 学习Web安全离不开Web&#xff0c;那么&#xff0c;需要先来学习网站的搭建。搭建网站是每一个Web安全学习…

深入理解依赖反转原则(DIP)

依赖反转原则是一个比较重要的架构原则&#xff0c;从定义上看是要依赖于抽象&#xff0c;不要依赖于细节&#xff0c; 这个听起来很简单&#xff0c;好像加个接口就完事了&#xff0c;大家的service都是一个接口配一个实现类&#xff0c;是不是依赖倒置呢&#xff1f;很显然不…

【原理图PCB专题】原理图图纸锁定/解锁与PCB文件加密方式

在工作中我们会遇到需要冻结原理图进行评审和加密图纸防止被他人盗用的需求。那么在OrCAD Capture中如何对图纸进行锁定与解锁,如何在Allegro中对PCB工程进行加密呢? 原理图锁定与解锁 打开原理图,在图纸中单击右键,选择lock/unlock就可以进行锁定与解锁。 锁定时图纸图…

第一部分 数理逻辑

目录 什么是命题 注意&#xff1a; 例1 下列句子中那些是命题&#xff1f; 联结词 例2 将下列命题符号化. 注意&#xff1a; 例4 设 p&#xff1a;天冷&#xff0c;q&#xff1a;小王穿羽绒服&#xff0c;将下列命题符号化 例5 求下列复合命题的真值 例如 真值表: 例&#xff1…

k8s集群核心概念 Pod进阶

k8s集群核心概念 Pod进阶 一、场景 Pod在kubernetes集群中是核心资源对象之一&#xff0c;前期我们已经在《kubernetes极速入门》课程中讲解了Pod创建及Pod删除方法&#xff0c;但是实际企业应用中&#xff0c;Pod使用远比我们想像复杂&#xff0c;本次课程我们接着为大家讲解…