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

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-paginationlayout="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 = rowsthis.pageParams.total = total},changePage(newPage) {this.pageParams.page = newPagethis.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-dialogwidth="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 = rowsthis.pageParams.total = totalthis.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 = rowsthis.pageParams.total = totalthis.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.namerow.editRow.state = row.staterow.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-popconfirmtitle="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.mzph.cn/bicheng/10072.shtml

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

相关文章

一键开启,盲盒小程序里的梦幻奇遇

在这个充满惊喜与未知的数字时代&#xff0c;盲盒小程序以其独特的魅力成为了许多人的新宠。只需一键开启&#xff0c;你就能踏入一个充满梦幻奇遇的世界&#xff0c;探索未知的惊喜与乐趣。 盲盒小程序不仅仅是一个简单的购物平台&#xff0c;它更是一个充满神秘与惊喜的宝藏库…

ETL中如何执行Python脚本

Python的解读 Python 是一种高级、通用的编程语言&#xff0c;由荷兰程序员吉多范罗苏姆&#xff08;Guido van Rossum&#xff09;于1990年代初设计并发布。Python的设计哲学强调代码的可读性和简洁性&#xff0c;它的语法清晰且表达力强&#xff0c;使得开发者能够以更少的代…

GT2512-STBA 三菱触摸屏12.1寸型

T2512-STBA参数说明&#xff1a;12.1"、SVGA 800*600、65536色、TFT彩色液晶显示屏、AC电源、32MB内存 三菱触摸屏GT2512-STBA性能规格详细说明&#xff1a; [显示部] 显示软元件&#xff1a;TFT彩色液晶显示屏 画面尺寸&#xff1a;12.1寸 分辨率&#xff1a;SVGA 80…

【Vue】Vue的核心

目录 计算属性-computed插值语法实现methods实现计算属性实现使用使用总结&#xff1a; 监视属性-watch监视的两种写法&#xff1a;深度监视备注&#xff1a; computed和watch之间的区别 绑定样式class样式绑定字符串写法数组写法对象写法 style样式绑定对象式1对象式2数组式 条…

Web数字孪生引擎

Web数字孪生引擎是指用于在Web上创建和运行数字孪生的软件平台。它们通常提供一组API和工具&#xff0c;用于连接到实时数据源、可视化数据并创建交互式体验。Web数字孪生引擎被广泛应用于各种应用&#xff0c;例如工业物联网、智能建筑、城市管理和公共安全等。北京木奇移动技…

Unable to locate the .NET SDK

问题描述&#xff1a; vs2019 加载项目时&#xff0c;提示如下&#xff1a; Unable to locate the .NET SDK as specified by global.json, please check that the specified version is installed. 项目中没有globan找al.json 文件 先使用&#xff1a; dotnet --list-sdks 命…

玩游戏专用远程控制软件

玩游戏专用远程控制软件&#xff1a;实现远程游戏的新体验 随着网络技术的不断发展和创新&#xff0c;远程控制软件已经逐渐渗透到我们生活的方方面面&#xff0c;尤其是在游戏领域。玩游戏专用远程控制软件&#xff0c;作为这一趋势下的产物&#xff0c;为玩家提供了全新的游…

杭州打的样,适合全国推广

房地产 昨天&#xff0c;杭州和西安全面解除房地产限购。 在房价跌跌不休的今天&#xff0c;这两大城市取消限购其实并不意外。 尤其是杭州&#xff0c;土地财政依赖全国第一&#xff0c;绷不住很正常。 近十年&#xff0c;杭州依靠于亚运会、G20 和阿里巴巴&#xff0c;涨得飞…

霍金《时间简史 A Brief History of Time》书后索引(E--H)

A–D部分见&#xff1a;霍金《时间简史 A Brief History of Time》书后索引&#xff08;A–D&#xff09; 图源&#xff1a;Wikipedia INDEX E Earth: circumference, motion, shape Eclipses Eddington, Arthur Einstein, Albert: biography, see also Relativity; Special…

RabbitMQ高级(MQ的问题,消息可靠性,死信交换机,惰性队列,MQ集群)【详解】

目录 一、MQ的问题 1. 问题说明 2. 准备代码环境 1 创建project 2 创建生产者模块 3 创建消费者模块 二、消息可靠性 1. 介绍 2. 生产者确认机制 3. MQ消息持久化 4. 消费者确认机制 5. 消费者auto模式的失败重试 6. 小结 三、死信交换机和延迟消息 1. 介绍 2. …

时间序列预测模型实战案例(三)(LSTM)(Python)(深度学习)时间序列预测(包括运行代码以及代码讲解)

目录 引言 LSTM的预测效果图 LSTM机制 了解LSTM的结构 忘记门 输入门 输出门 LSTM的变体 只有忘记门的LSTM单元 独立循环(IndRNN)单元 双向RNN结构(LSTM) 运行代码 代码讲解 引言 LSTM&#xff08;Long Short-Term Memory&#xff09;是一种常用的循环神经网络&a…

Android 如何启用user版本的adb源码分析

通过adb shell中执行getprop persist.sys.usb.config&#xff0c;可以看到系统usb的相关选项&#xff0c;persist.sys.usb.config显示的就是当前系统关于usb选项的系统配置【RK3188Android4.4刚移植的例子】: 全编脚本中make命令会调用build/core/main.mk,在里面可以看到一段…

安全工程师面试题

安全工程师面试题安全工程师是一个非常重要的职位&#xff0c;他们负责保护公司的网络和系统免受黑客和恶意软件的攻击。如果你想成为一名安全工程师&#xff0c;那么你需要准备好面试。下面是一… 1安全工程师面试题 安全工程师是一个非常重要的职位&#xff0c;他们负责保护…

图解HTTP(2、简单的 HTTP 协议)

HTTP 协议用于客户端和服务器端之间的通信 请求访问文本或图像等资源的一端称为客户端&#xff0c;而提供资源响应的一端称为服务器端。 通过请求和响应的交换达成通信 请求必定由客户端发出&#xff0c;而服务器端回复响应报文 请求报文是由请求方法、请求 URI、协议版本、…

鸿蒙HarmonyOS开发:List列表组件的使用详解及案例演示(二)

文章目录 一、List组件简介1、List组件2、ListItem组件3、ListItemGroup组件 二、使用ForEach渲染列表三、设置列表分割线四、设置List排列方向五、索引值计算规则六、示例演示1、AlphabetIndexer组件2、代码3、效果 一、List组件简介 在我们常用的手机应用中&#xff0c;经常…

SinoDB数据库导入导出工具External table

External table又叫SinoDB外部表&#xff0c;外部表采用多线程机制&#xff0c;支持多线程读取、写入数据文件以及多线程数据转换、插入操作。多线程机制只需要消耗相对较少的系统资源&#xff0c;但是能提供高速数据导入、导出&#xff0c;可以应用在数据采集、表重建、数据库…

OpenGL入门第四步:摄像机视角变换与交互

OpenGL入门第一步:创建窗口、重写虚函数-CSDN博客 OpenGL入门第二步:颜色、纹理设置(解析)-CSDN博客 OpenGL入门第三步:矩阵变换、坐标系统-CSDN博客 目录 函数解析 具体代码 函数解析 相机视角变换需要与鼠标键盘进行交互,需要重写鼠标和键盘响应函数。 初始化 …

【机器学习】 人工智能和机器学习辅助决策在空战中的未来选择

&#x1f680;传送门 &#x1f680;文章引言&#x1f512;技术层面&#x1f4d5;作战结构&#x1f308;替代决策选项&#x1f3ac;选项 1&#xff1a;超级战争&#xff08;Hyperwar&#xff09;&#x1f320;选项 2&#xff1a;超越OODA&#x1f302;选项 3&#xff1a;阻止其他…

MySQL的表级锁

&#x1f4dd;个人主页&#xff1a;五敷有你 &#x1f525;系列专栏&#xff1a;面经 ⛺️稳中求进&#xff0c;晒太阳 表级锁 介绍 对于表锁&#xff0c;分为两类&#xff1a; 表共享读锁表独占写锁 语法 1. 加锁&#xff1a;lock tables 表名... read/write 2.…

MySQL数据库的安装和部署

1.数据库的相关介绍 关系型数据库管理系统&#xff1a;&#xff08;英文简称&#xff1a;RDBMS&#xff09; 为我们提供了一种存储数据的特定格式&#xff0c;所谓的数据格式就是表&#xff0c; 在数据库中一张表就称为是一种关系. 在关系型数据库中表由两部分组成&#xf…