操作员管理 微人事 项目 SpringBooot + Vue 前后端分离

这篇具有很好参考价值的文章主要介绍了操作员管理 微人事 项目 SpringBooot + Vue 前后端分离。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

操作员管理接口设计

HrController

@RestController
@RequestMapping("/system/hr")
public class HrController {

    @Autowired
    HrService hrService;

    @GetMapping("/")
    public List<Hr> getAllHr(){

        return hrService.getAllHr();
    }

}

HrService

操作员管理 微人事 项目 SpringBooot + Vue 前后端分离,vue.js,前端,spring boot

 public List<Hr> getAllHr() {
        Hr principal = (Hr) SecurityContextHolder.getContext().getAuthentication().getPrincipal();//获取存储在Security当前用户信息
        return hrMapper.getAllHr(principal.getId());
    }

HrMapper

    List<Hr> getAllHr(Integer id);

  <resultMap id="BaseResultMap2" type="com.xyg.pojo.Hr" extends="BaseResultMap">
    <collection property="roles" ofType="com.xyg.pojo.Role" >
      <result column="id" property="id"></result>
      <result column="name" property="name"></result>
      <result column="namezh" property="namezh"></result>
    </collection>
  </resultMap>

  <select id="getAllHr" resultMap="BaseResultMap2">
    select * from hr  LEFT JOIN hr_role as hrr  on hr.id=hrr.hrid LEFT JOIN role on role.id = hrr.rid where hr.id!=#{id}
  </select>

mysql逻辑: 查询Hr 和 角色之间的信息 每个Hr有哪些角色,除了当前用户不查

操作员管理页面展示

SysHr.vue

<template>
    <div>
        <div style="display: flex ; justify-content: center;margin-top: 20px">
            <el-input type="text" placeholder="请输入用户名" style="width: 500px"></el-input>
            <el-button type="primary" icon="el-icon-search">搜索</el-button>
        </div>
        <div style="display: flex; flex-wrap: wrap; justify-content: space-around ;">
            <el-card style="width: 400px; margin-top: 20px"  v-for="(hr,index) in Hrs" :key="index">
                <div slot="header" class="clearfix" >
                    <span>{{hr.name}}</span>
                    <el-button style="float: right; padding: 3px 0;color: red" type="text" icon="el-icon-delete"></el-button>
                </div>
                <div>
                   <img  style="width: 120px;height: 120px; border-radius: 60px; margin-left: 120px" :src="hr.userface" :alt="hr.name" :title="hr.name"/>
                </div>
                <div style="font-family: 幼圆;color:orange;margin-top: 5px;line-height: 30px ">
                    <div>用户名: {{hr.name}}</div>
                    <div>手机号码: {{hr.phone}}</div>
                    <div>地址: {{hr.telephone}}</div>
                    <div>用户状态: <el-switch
                            v-model="hr.enabled"
                            active-text="启用"
                            inactive-text="禁用">
                    </el-switch>
                    </div>
                    <div>用户角色:
                        <el-tag type="success" style="margin-left: 8px" v-for="(role,index) in hr.roles" :key="index">{{role.namezh}}
                        </el-tag>
                        <el-button size="small" style="" icon="el-icon-more"></el-button>
                    </div>
                    <div>备注:{{hr.remark}}</div>


                </div>
            </el-card>
        </div>
    </div>
</template>

<script>
    export default {
        name: "SysHr",
        data(){
            return{
                Hrs:[]
            }
        },

        mounted(){
            this.initHr()
        },
        methods:{
            initHr(){
                this.getRequest("/system/hr/").then(resp=>{
                    if (resp){
                        this.Hrs=resp
                    }
                })
            }
        }
    }
</script>

<style scoped>

</style>

展示效果
操作员管理 微人事 项目 SpringBooot + Vue 前后端分离,vue.js,前端,spring boot

问题Bug解决

操作员管理 微人事 项目 SpringBooot + Vue 前后端分离,vue.js,前端,spring boot
还有一个BUG

因:org.apache.ibatis.reflection.ReflectionException:非法重载getter方法,在类class
com.chb.vhr.bean.Hr中启用属性类型不明确。这违反了JavaBeans规范,并可能导致不可预测的结果

解决方式
SpringSecurity 实现UserDetails 重写isEnabled 不能有重复的可能重复生成,或者加了个@Data也重复生成了去掉它就好了

用户状态更新

HrController

    @PutMapping("/")
    public RespBean updateHr(@RequestBody Hr hr){
        if(hrService.updateHr(hr)==1){
            return RespBean.ok("更新成功");
        }
        return RespBean.err("更新失败");
    }

HrService

    public int updateHr(Hr hr) {
        return hrMapper.updateByPrimaryKey(hr);
    }

HrMapper

    int updateByPrimaryKey(Hr record);
  <update id="updateByPrimaryKey" parameterType="com.xyg.pojo.Hr" >
    update hr
    set name = #{name,jdbcType=VARCHAR},
      phone = #{phone,jdbcType=CHAR},
      telephone = #{telephone,jdbcType=VARCHAR},
      address = #{address,jdbcType=VARCHAR},
      enabled = #{enabled,jdbcType=BIT},
      username = #{username,jdbcType=VARCHAR},
      password = #{password,jdbcType=VARCHAR},
      userface = #{userface,jdbcType=VARCHAR},
      remark = #{remark,jdbcType=VARCHAR}
    where id = #{id,jdbcType=INTEGER}
  </update>

前端对接

操作员管理 微人事 项目 SpringBooot + Vue 前后端分离,vue.js,前端,spring boot

eanbledChange(hr){
                console.log(hr)
                this.putRequest("/system/hr/",hr).then(resp=>{
                    if(resp){
                        this.initHr()
                    }
                })
           },

操作员角色更新

具体思路是前端传递用户id和需要更新多个角色id,后端接收用户id和数组角色id
先删除原来的角色和用户关联,在重新新增角色和用户关联

HrController

    @PostMapping("/")
    public RespBean updateHrRole(Integer hrid,Integer[] rid){
        System.out.println(rid);
        if(hrService.updateHrRole(hrid,rid)==rid.length){
            return RespBean.ok("更新成功");
        }
        return RespBean.err("更新失败");
    }

操作员管理 微人事 项目 SpringBooot + Vue 前后端分离,vue.js,前端,spring boot

HrService

    @Transactional
    public Integer updateHrRole(Integer hrid, Integer[] rid) {
        hrRoleMapper.deleteByHrId(hrid);

        return  hrRoleMapper.updateHrRole(hrid,rid);
    }

HrRoleMapper

    void deleteByHrId(Integer hrid);

    Integer updateHrRole(@Param("hrid") Integer hrid,@Param("rids") Integer[] rids);
 <delete id="deleteByHrId">
    delete
    from hr_role
    where  hrid=#{hrid};
  </delete>


  <insert id="updateHrRole">
    insert into hr_role  (hrid, rid) values
    <foreach collection="rids" item="rid" separator=",">
      (#{hrid},#{rid})
    </foreach>
  </insert>

前端布局对接后端

加一个弹出框
操作员管理 微人事 项目 SpringBooot + Vue 前后端分离,vue.js,前端,spring boot
操作员管理 微人事 项目 SpringBooot + Vue 前后端分离,vue.js,前端,spring boot

 </el-tag>
                            <el-popover
                                    @hide="hidePop(hr)"
                                    @show="showPop(hr)"
                                    placement="bottom"
                                    title="角色列表"
                                    width="100"
                                    trigger="click">
                                <el-button slot="reference" size="mini" style="color: red" icon="el-icon-more">
                                </el-button>
                                <div>
                                    <el-select  v-model="selectrole"  multiple  placeholder="">
                                        <el-option
                                                v-for="(r,indexk) in allRoles"
                                                :key="indexk"
                                                :label="r.namezh"
                                                :value="r.id">
                                        </el-option>
                                    </el-select>
                                </div>
                            </el-popover>

操作员管理 微人事 项目 SpringBooot + Vue 前后端分离,vue.js,前端,spring boot

          hidePop(hr){
                let url ='/system/hr/?hrid='+hr.id

                this.selectrole.forEach(r=>{   //selectrole[]数组存储了角色id
                    url+= '&rid='+r
                })

                this.postRequest(url).then(resp=>{
                    if(resp){
                        this.initHr()
                    }
                })

            },
            showPop(role){
                console.log(role)

                let roles=role.roles;
                this.selectrole=[]
                roles.forEach(r=>{
                    this.selectrole.push(r.id)
                })

弹出的时候进行修改角色,关闭框的时候就更新成功

问题解决

发现并没有选择修改角色,隐藏弹出框会进行网络请求。
具体思路
对比两个数组是否一样长
进行遍历对比两个数组的数据角色id是否一样

两个条件符合那就是用户并没有修改数据

  hidePop(hr){
                let roles = []
                Object.assign(roles,hr.roles);//拷贝hr.roles数据到roles
                let fla = false;
                if(roles.length != this.selectrole.length){//如果数组长度不相等说明修改了角色
                    fla=true;
                }else {
                    for(let i=0;i<roles.length;i++){//
                        let role=roles[i]
                        for (let j=0;j<this.selectrole.length;j++){
                            let sr=this.selectrole[j]//和selectrole每个数据进行比较
                            if(role.id == sr){//如果有相等的
                                roles.splice(i,1);//数组中剔除掉
                                i--;//并且数组roles减少长度
                                break//退出当前循环,进入外层循环,进行遍历判断
                            }
                        }

                    }
                    if(roles.length != 0){//遍历完后就判断,roles数组为0说明数组数据都相等的就不放行,程序结束
                        fla=true
                    }
                }

                if(fla){
                    let url ='/system/hr/?hrid='+hr.id

                    this.selectrole.forEach(r=>{   //selectrole[]数组存储了角色id
                        url+= '&rid='+r
                    })

                    this.postRequest(url).then(resp=>{
                        if(resp){
                            this.initHr()
                        }
                    })
                }
            },

操作员搜索

HrController

在查询用户中加个用户名参数

操作员管理 微人事 项目 SpringBooot + Vue 前后端分离,vue.js,前端,spring boot

HrService

    public List<Hr> getAllHr(String keyW) {
        Hr principal = (Hr) SecurityContextHolder.getContext().getAuthentication().getPrincipal();
        return hrMapper.getAllHr(principal.getId(),keyW);
    }

HrMapper

    List<Hr> getAllHr(@Param("id") Integer id, @Param("keywords") String keywords);

操作员管理 微人事 项目 SpringBooot + Vue 前后端分离,vue.js,前端,spring boot

前端接口对接

操作员管理 微人事 项目 SpringBooot + Vue 前后端分离,vue.js,前端,spring boot
操作员管理 微人事 项目 SpringBooot + Vue 前后端分离,vue.js,前端,spring boot
操作员管理 微人事 项目 SpringBooot + Vue 前后端分离,vue.js,前端,spring boot
操作员管理 微人事 项目 SpringBooot + Vue 前后端分离,vue.js,前端,spring boot

操作员删除

HrController

    @DeleteMapping("/{hid}")
    public RespBean deleteHr(@PathVariable Integer hid){
        if(hrService.deleteHr(hid)==1){
         return RespBean.ok("删除成功");
        }
        return RespBean.err("用户状态开启,请先禁用");
    }

HrService

    public int deleteHr(Integer hid) {
        Hr hr = hrMapper.selectByPrimaryKey(hid);
        if(!hr.isEnabled()){
            return hrMapper.deleteByPrimaryKey(hid);
        }
        return 0;
    }

HrMapper

    Hr selectByPrimaryKey(Integer id);

  <select id="selectByPrimaryKey" resultMap="BaseResultMap" parameterType="java.lang.Integer" >
    select 
    <include refid="Base_Column_List" />
    from hr
    where id = #{id,jdbcType=INTEGER}
  </select>

删除接口对接前端

操作员管理 微人事 项目 SpringBooot + Vue 前后端分离,vue.js,前端,spring boot
操作员管理 微人事 项目 SpringBooot + Vue 前后端分离,vue.js,前端,spring boot文章来源地址https://www.toymoban.com/news/detail-668819.html

 deleteHr(hr){
                this.deleteRequest("/system/hr/"+hr.id).then(resp=>{
                    if(resp){
                        this.initHr()
                    }
                })

            },

到了这里,关于操作员管理 微人事 项目 SpringBooot + Vue 前后端分离的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 基于springboot实现教师人事档案管理系统项目【项目源码+论文说明】

    基于springboot实现在线商城系统演示 现代经济快节奏发展以及不断完善升级的信息化技术,让传统数据信息的管理升级为软件存储,归纳,集中处理数据信息的管理方式。本ONLY在线商城系统就是在这样的大环境下诞生,其可以帮助管理者在短时间内处理完毕庞大的数据信息,

    2024年04月11日
    浏览(44)
  • python+java+nodejs基于vue的企业人事工资管理系统

    根据系统功能需求分析,对系统功能的进行设计和分解。功能分解的过程就是一个由抽象到具体的过程。 作为人事数据库系统,其主要实现的功能应包括以下几个模块: 1.登录模块 登录模块是由管理员、员工2种不同身份进行登录。 2.系统管理模块 用户管理:新用户的添加和

    2024年02月03日
    浏览(57)
  • node.js+vue企业人事管理系统q731f

    中小企业人事管理系统的主要开发目标如下: (1)实现管理系统信息关系的系统化、规范化和自动化; (2)减少维护人员的工作量以及实现员工对信息的控制和管理。 (3)方便查询信息及管理信息等; (4)通过网络操作,改善处理问题的效率,提高操作人员利用率; (

    2024年02月10日
    浏览(51)
  • PHP+mysql+Vue高校人事教师管理系统15i6f

    利用php、vscode和mysql数据库等知识点,结合相关设计模式、以及软件工程的相关知识,设计一个高校人事管理系统,来进行记录用户的信息,以及系统信息的增删改查的功能,根据实现需求,系统需完成这些基本功能: (1)系统合理显示职称申报界面、招聘界面等界面。 (

    2024年01月21日
    浏览(47)
  • 课程《JavaWeb基础框架程序设计》考试题下篇——数据库与表单操作用题(人事管理平台的添加员工档案信息的操作题)

    这篇文章是大学课程《JavaWeb基础框架程序设计》考试题目的内容,包括了原题和答案。题目只包括了三道编程题,分值为30分、30分和40分,这篇文章继上一篇(课程《JavaWeb基础框架程序设计》考试题上篇——基础应用题(计算应用、水仙花数)),介绍40分的那题,以及代码

    2024年02月04日
    浏览(62)
  • 基于springboot人事管理系统

    末尾获取源码 开发语言:Java Java开发工具:JDK1.8 后端框架:SpringBoot 前端:Vue 数据库:MySQL5.7和Navicat管理工具结合 开发软件:IDEA / Eclipse 是否Maven项目:是 基于springboot人事管理系统有管理员与员工两大角色: 管理员:首页、个人中心、员工管理、部门管理、员工考勤管理

    2024年02月05日
    浏览(81)
  • SpringBoot 微人事 职称管理模块(十三)

    在职称管理页面添加输入框 效果图 添加一个下拉框 v-model的值为当前被选中的el-option的 value 属性值 效果图 添加按钮 效果图 增加数据表格 添加一个删除,修改按钮 创建一个JobLevelConroller类 JobLevelConroller JobLevelService JoblevelMapper.xml 添加个查询所有Joblevel,其它接口用自动生成

    2024年02月12日
    浏览(35)
  • 微人事项目在线聊天(一)

    添加一个消息按钮 Home.vue 添加点击事件方法 创建聊天页面组件 添加路由

    2024年02月12日
    浏览(42)
  • SpringBoot + Vue 微人事(十二)

    编写后端接口 PositionController PositionsService PositionMapper PositionMapper.xml 添加批量删除按钮 没有选中肯定默认是禁用批量删除按钮的,添加一个 赋值就是当前选择的项 定义一个变量,空数组变量 添加一个点击事件,这个是一个点击多选框会触发的点击事件 赋值给这个空数组变量

    2024年02月12日
    浏览(32)
  • SpringBoot + Vue 微人事(十)

    先把table中的数据展示出来,table里面的数据实际上是positions里面的数据,就是要给positions:[] 赋上值 可以在methods中定义一个initPosition方法 定义好之后去看职位管理的页面看有没有渲染出数据。 为什么没数据呢?我们可以看到我们定义的initPositions并没有调用,我们以前是登录

    2024年02月12日
    浏览(33)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包