vue2人力资源项目6角色管理

news2025/1/10 20:54:20

elementUi编写表格样式及分页组件

<template>
  <div class="container">
    <div class="app-container">
      <!--角色管理内容-->
      <div class="role-operate">
        <el-button type="primary">添加角色</el-button>
      </div>
      <el-table>
        <!--放置列-->

        <el-table-column align="center" width="200" label="角色" />

        <el-table-column align="center" width="200" label="启用" />
        <el-table-column align="center" label="描述" />
        <el-table-column align="center" label="操作" />
      </el-table>
      <!--分页组件外层-->
      <el-row type="flex" style="height:60px" align="middle" justify="end">
        <!--放置分页组件-->
        <el-pagination
          layout="prev,pager,next"
        />
      </el-row>
    </div></div>
</template>
<script>
export default {
  name: 'Role'
}
</script>
<style scoped>
.role-operate{
padding:10px;
}
</style>

获取数据

1.api/role.js里封装接口

import request from '@/utils/request'

// 获取角色列表
export function getRoleList(params) {
  return request({
    // 有地址参数,要拼接到地址上
    url: '/sys/role',
    // data是请求体参数
    // params是查询参数,要拼接到地址上
    params })
}

2.views/ index.vue里封装一个同名方法

 methods: {

    // 定义了与 getRoleList同名的方法

    async  getRoleList() {

      const { rows } = await getRoleList()

      this.list = rows

    }

  }

3.created里调用上面封装的方法

created() {
    // 调用下面定义的方法
    this.getRoleList()
  }

4.先声明一个list

 data() {
    return {
      list: []
    }
  }

5.给表格绑定数据

 <el-table :data="list">
        <!--放置列-->

        <el-table-column align="center" prop="name" width="200" label="角色" />

        <el-table-column align="center" prop="state" width="200" label="启用" />
        <el-table-column align="center" prop="description" label="描述" />
        <el-table-column align="center" label="操作" />
      </el-table>
      <!--分页组件外层

6.插槽使用(插槽使用必须要有template,双花括号,这里的row需要解构)

 <template v-slot="{row}">
          {{ row.state }}
        </template>

7.表格列自定义

 <el-table :data="list">
        <!--放置列-->

        <el-table-column align="center" prop="name" width="200" label="角色" />
        <el-table-column align="center" prop="state" width="200" label="启用" />
        <!--自定义列结构-->
        <template v-slot="{row}">
          {{ row.state === 1?'已启用':row.state === 0?"未启用" :'无' }}
        </template>
        <el-table-column align="center" prop="description" label="描述" />
        <el-table-column align="center" label="操作" />
        <!--放置操作按钮-->
        <template>
          <el-button size="mini" type="text">分配权限</el-button>
          <el-button size="mini" type="text">编辑</el-button>
          <el-button size="mini" type="text">删除</el-button>
        </template>
      </el-table>

 分页功能

1.先把分页信息存储到一个对象中

data() {
    return {
      list: [],
      // 将分页信息放到一个对象中
      pageParams: {
        page: 1, // 第几页
        pagesize: 5, // 每页多少条
        total: 0
      }
    }
  }

2.把准备好的数据绑定到分页组件

 <!--分页组件外层-->
      <el-row type="flex" style="height:60px" align="middle" justify="end">
        <!--放置分页组件-->
        <el-pagination
          :page-size="pageParams.pagesize"
          :page="pageParams.size"
          :total="pageParams.total"
          layout="prev,pager,next"
  @current-change="changePage"
        />
      </el-row>

3.用方法获取数据

methods: {
    // 定义了与 getRoleList同名的方法
    async  getRoleList() {
      const { rows, total } = await getRoleList(this.pageParams)
      this.list = rows
      this.pageParams.total = total
    },
    changePage(newPage) {
      this.pageParams.page = newPage
      this.getRoleList()
    }
  }
}

添加角色弹出层

data() {
    return {
      showDialog: false,
      list: [],
      // 将分页信息放到一个对象中
      pageParams: {
        page: 1, // 第几页
        pagesize: 5, // 每页多少条
        total: 0
      }
    }
  },
 <el-button type="primary" @click="showDialog = true">添加角色</el-button>

注意   :visible.sync="showDialog" 要加sync

  <!--放置弹层
    -->
    <el-dialog
      width="500px"
      title="新增角色"
      :visible.sync="showDialog"
    />
    <!--表单内容-->

 添加角色-表单校验

提供数据(数据要和接口文档对应)

 roleForm: {
        name: '',
        description: '',
        state: 0
      }

注:这里用了switch,需要设置“:active-value=1”   “:inactive-value=0” 

角色管理中新增角色的确定和取消

编辑角色 

1.行内编辑

 

遍历每一项,增加isEdit变量 

methods: {
    // 定义了与 getRoleList同名的方法
    async  getRoleList() {
      const { rows, total } = await getRoleList(this.pageParams)
      this.list = rows
      this.pageParams.total = total
      this.list.forEach(item => {
        item.isEdit = false
      })
    }

使用v-if判断渲染什么内容

    <el-table-column align="center" prop="name" width="200" label="角色">
          <template v-slot="{row}">
            <!--条件判断是渲染名称还是渲染一个输入框-->
            <em-input v-if="row.isEdit" size="mini" />
          </template>
        </el-table-column>

注:添加的isEdit不具有响应式,所以这里使用了$set方法,添加一个响应式数据

this.$set(目标对象,属性名称,初始值)可以针对目标对象 添加的属性 添加响应式

 this.list.forEach(item => {
        this.$set(item, 'isEdit', false)
      })

实现当点击编辑时,变为编辑状态:设定一个变量,点击编辑时,这个变量就改变,利用插槽和v-if实现样式变幻

 <template v-slot="{row}">
          <template v-if="row.isEdit">
            <el-button type="primary" size="mini">确定</el-button>
            <el-button type="primary" size="mini">取消</el-button>
            <!--编辑状态-->
          </template>
          <template v-else>
            <el-button size="mini" type="text">分配权限</el-button>
            <el-button size="mini" type="text" @click="btnEditRow(row)">编辑</el-button>
            <el-button size="mini" type="text">删除</el-button>
          </template>
        </template></el-table>

添加响应式属性行内编辑数据缓存

1.初始化时定义缓存数据

 methods: {
    // 定义了与 getRoleList同名的方法
    async  getRoleList() {
      const { rows, total } = await getRoleList(this.pageParams)
      this.list = rows
      this.pageParams.total = total
      this.list.forEach(item => {
        this.$set(item, 'isEdit', false)
        this.$set(item, 'editRow', {
          name: item.name,
          description: item.description,
          state: item.state
        })
      })
    }

2。数据绑定表单(注意:绑定的是设置的缓存里的数据)

 <template v-slot="{row}">
          <el-switch v-if="row.isEdit" v-model="roe.isEdit.state" active-value="1" inactive-value="0" />
          {{ row.state === 1?'已启用':row.state === 0?"未启用" :'无' }}
        </template>
<template v-slot="{row}">
            <!--条件判断是渲染名称还是渲染一个输入框-->
            <em-input v-if="row.isEdit" v-model="roe.isEdit.input" size="mini" />
          </template>
<template v-slot="{row}">
            <el-input v-if="row.isEdit" v-model="roe.isEdit.description" type="textarea" />
            <span v-else>="{{ row.description }}"</span>
          </template>

 3.更新缓存数据

  btnEditRow(row) {
      row.isEdit = true// 改变行的编辑状态
      row.editRow.name = row.name
      row.editRow.state = row.state
      row.editRow.description = row.description
    }

 角色管理的确定和取消

确定的代码逻辑

async   btnEditOk(row) {
      if (row.editRow.name && row.editRow.description) {
        await updateRole({ ...row.editRow, id: row.id })
        this.$message.success('success')
        Object.assign(row, {
          ...row.assign(row, {
            ...row.editRow,
            isEdit: false
          })
        })
      } else {
        this.$message.warning('不能为空')
      }
    } }}

取消的代码逻辑

@click="roe.isEdit = false"

删除功能

添加气泡确认框(记得用插槽和根据文档添加事件)

<el-popconfirm
              title="Are you sure to delete this?"
  @OnConfirm="confirmDel(row.id)"
            >
              <el-button slot="reference" size="mini" type="text">删除</el-button>
            </el-popconfirm>

 封装删除角色的接口

// 删除角色
export function delRole(id) {
  return request({
    url: `/sys/role/${id}`,
    method: 'delete'
  })
}

删除的逻辑

async confirmDel(id) {
      // 调用接口
      await delRole(id)
      this.$message.success('删除角色成功')
      // 删除的如果是最后一个
      if (this.list.length === 1) {
        this.pageParams.page--
        this.getRoleList()
      }
    } 

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

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

相关文章

高级个人主页

高级个人主页 效果图部分代码领取源码下期更新预报 效果图 部分代码 <!DOCTYPE html> <html lang"en"><head><meta charset"utf-8" name"viewport" content"widthdevice-width, initial-scale1, maximum-scale1, use…

2024年3月 电子学会 青少年等级考试机器人理论真题五级

202403 青少年等级考试机器人理论真题五级 第 1 题 下图程序运行后&#xff0c;串口监视器显示的结果是&#xff1f;&#xff08; &#xff09; A&#xff1a;0 B&#xff1a;1 C&#xff1a;3 D&#xff1a;4 第 2 题 下列选项中&#xff0c;关于74HC595移位寄存器芯片的…

【ARM Cortex-M 系列 2.3 -- Cortex-M7 Debug event 详细介绍】

请阅读【嵌入式开发学习必备专栏】 文章目录 Cortex-M7 Debug eventDebug events Cortex-M7 Debug event 在ARM Cortex-M7架构中&#xff0c;调试事件&#xff08;Debug Event&#xff09;是由于调试原因而触发的事件。一个调试事件会导致以下几种情况之一发生&#xff1a; 进…

2024第16届四川教育后勤装备展6月1日举办 欢迎参观

2024第16届四川教育后勤装备展6月1日举办 欢迎参观 邀请函 主办单位&#xff1a; 中国西部教体融合博览会组委会 承办单位&#xff1a;重庆港华展览有限公司 博览会主题&#xff1a;责任教育 科教兴邦 组委会&#xff1a;交易会159交易会2351交易会9466 展会背景 成都…

matlab使用2-基础绘图

matlab使用2-基础绘图 文章目录 matlab使用2-基础绘图1. 二维平面绘图2. 三维立体绘图3. 图形窗口的分割 1. 二维平面绘图 % 创建一些二维数据 x 0:0.01:10; % x轴的数据点&#xff0c;从0到10&#xff0c;间隔为0.01 y sin(x); % y轴的数据点&#xff0c;是x的正弦…

实时“秒回”,像真人一样语音聊天,GPT-4o模型强到恐怖

今天凌晨OpenAl发布了 GPT-4o&#xff0c;这是一种新的人工智能模式&#xff0c;集合了文本、图片、视频、语音的全能模型。 能实时响应用户的需求&#xff0c;并通过语音来实时回答你&#xff0c;你可以随时打断它。还具有视觉能力&#xff0c;能识别物体并根据视觉做出快速的…

基准电流源电路仿真

1.补全电路 2.更改vpluse属性 3.添加tran仿真&#xff0c;因为加入启动电路主要看的就是tran仿真 4.启动仿真 5.看电路曲线 先点这个main form 不用选择ok&#xff0c;直接点中四条线&#xff0c;中间第2条曲线如果出现那样一个小波动后面没有起伏就说明成功了。

什么是Keycloak?怎么样使用Keycloak实现登录和权限验证?

什么是Keycloak&#xff1f;怎么样使用Keycloak实现登录和权限验证&#xff1f; 文章目录 什么是Keycloak&#xff1f;怎么样使用Keycloak实现登录和权限验证&#xff1f;Open Source Identity and Access Management(开源身份和访问管理)1、支持的协议&#xff1a;2、安装与部…

如何在 Mac 上恢复已删除的文件

点击“删除”后立即后悔&#xff1f;不用担心。我们的教程介绍了如何恢复已删除的 Mac 文件、电子邮件、iTunes 音乐等&#xff0c;即使您没有 Time Machine 备份并且无需支付软件费用。 在 macOS 中丢失文件可能会非常痛苦&#xff0c;如果您是点击删除的人&#xff0c;情况会…

稳定网络的诀窍:静态住宅代理解决方案

在数字化时代&#xff0c;网络稳定性对于个人和企业都至关重要。然而&#xff0c;由于多种因素的影响&#xff0c;如地理位置、网络拥堵或网络安全问题等&#xff0c;网络稳定性常常受到挑战。为了应对这些挑战&#xff0c;静态住宅代理作为一种高效且可靠的网络解决方案&#…

c++ 各版本特性介绍

c C是一种高级编程语言&#xff0c;以其强大的功能、灵活性和高效性而闻名。它是由Bjarne Stroustrup在20世纪80年代初期在贝尔实验室开发的&#xff0c;作为C语言的一个扩展。C不仅包含了C语言的所有特性&#xff0c;还引入了面向对象编程&#xff08;OOP&#xff09;的概念&…

Poe是什么?怎样订阅Poe?

Poe&#xff08;全称“开放探索平台”&#xff0c;Platform for Open Exploration&#xff09;是一款由Quora开发的移动应用程序&#xff0c;于2022年12月推出。该应用程序内置建基于AI技术的聊天机器人&#xff0c;可供用户向机器人询问专业知识、食谱、日常生活&#xff0c;甚…

智能AI数字人系统 打造无人直播间 主播形象任意选择!

系统概述 智能AI数字人系统是一种结合人工智能、计算机图形学、语音合成等技术的综合性系统。该系统能够模拟人类的外貌、行为和语言&#xff0c;为用户提供逼真的交互体验。在无人直播间场景下&#xff0c;智能AI数字人系统可以扮演主播角色&#xff0c;与观众进行实时互动&a…

Jenkins构建流程

Jenkins是DevOps【(Development和Operations的混成词&#xff09;是一种重视“软件开发人员&#xff08;Dev&#xff09;”和“IT运维技术人员&#xff08;Ops&#xff09;”之间沟通合作的文化、运动或惯例)】的重要一环&#xff0c;是一款开源的CI&CD软件。也就是持续集成…

MongoDB 推出新项目,助力企业构建生成式 AI 现代应用程序

MongoDB AI Applications Program可为组织提供战略路线图、行业专业知识及所需技术&#xff0c;加速从构思到大规模部署生成式 AI 应用程序 MongoDB (纳斯达克股票代码&#xff1a;MDB) 近日宣布推出 MongoDB AI Applications Program (MongoDB AI应用项目&#xff0c;简称&am…

【PostgreSQL支持中文的全文检索插件(zhparser)】

PostgreSQL本身是支持全文检索的&#xff0c;提供两个数据类型&#xff08;tsvector,tsquery&#xff09;&#xff0c;并且通过动态检索自然语言文档的集合&#xff0c;定位到最匹配的查询结果。其内置的默认的分词解析器采用空格进行分词&#xff0c;但是因为中文的词语之间没…

使用java.io库序列化Java对象

在我们使用诸如Redis这类缓存系统时&#xff0c;我们往往会存在如下需求&#xff1a;将Java对象保存到Redis缓存中&#xff0c;然后在其他机器上还原回来。 Json方案 我们可以引入Json库等方式&#xff0c;将Java对象序列化为Json字符串来实现这个目的&#xff0c;但是这样的…

【JS面试题】this

this取什么值&#xff0c;是在函数执行的时候确定的&#xff0c;不是在函数定义的时候确定的&#xff01; this的6种使用场景&#xff1a; ① 在普通函数中使用&#xff1a;返回window对象 ② 使用call apply bind 调用&#xff1a;绑定的是哪个对象就返回哪个对象 ③ 在对象…

IP应用场景查询API接口

IP应用场景查询API接口指的是输入IP地址&#xff0c;查询IP应用场景信息。那么IP地址应用场景查询接口如何对接呢&#xff1f; 首先我们找到一家有IP地址应用场景查询API的服务商数脉API,然后注册账号&#xff0c;购买免费套餐 接下来就需要技术同学把IP应用场景查询接口对接到…

【线性系统理论】笔记一

一&#xff1a;状态空间表达式 电路系统状态空间描述列写 1&#xff1a;选取状态变量 状态变量定义&#xff1a;线性无关极大组属性。 2&#xff1a;列出电路原始回路方程 ps&#xff1a;状态变量有两个&#xff0c;理论上需要列写2个方程 3&#xff1a;规范形势 4&#xf…