Day05-组织架构-角色管理

news2024/12/23 1:26:17

提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档

文章目录

  • 1.组织架构-编辑部门-弹出层获取数据
  • 2.组织架构-编辑部门-编辑表单校验
  • 3.组织架构-编辑部门-确认取消
  • 4.组织架构-删除部门
  • 5.角色管理-搭建页面结构
  • 6.角色管理-获取数据
  • 7.角色管理-表格自定义结构
  • 8.角色管理-分页功能
  • 9.角色管理-新增
  • 10.角色管理-表单数据校验
  • 11.角色管理-新增角色-确定取消


1.组织架构-编辑部门-弹出层获取数据

  • 🍕🍕🍕编辑部门和新增部门会共用一个组件,也就是add-dept组件要支持两种场景-新增场景-编辑场景
    在这里插入图片描述
  • 获取部门详情的API-代码位置(src/api/department.js)
//获取部门详情
export function getDepartmentDetail(id){
    return request({
        url:`/company/department/${id}`
    })
}
  • 点击编辑时,弹出层,通过ref获取组件实例,调用获取详情的方法-代码位置(src/views/department/index.vue)
   <addDept ref="addDept" :current-node-id="currentNodeId"  :show-dialog.sync="showDialog" @updateDepartment="getDepartment" />
  • 调用子组件方法-代码位置(src/views/department/index.vue)
 //操作部门方法
    operateDept(type,id){
      // this.$message('click' + type)
      if(type === 'add'){
        //添加子部门
        this.showDialog = true;//显式弹窗
        this.currentNodeId = id
      }else if(type === 'edit'){
        //编辑部门
        this.showDialog = true;
        this.currentNodeId = id;//记录id 用它获取数据
        //更新props-异步动作
        //直接调用了子组件的方法,同步的方法
        //要在子组件获取数据 父组件调用子组件的方法来获取数据
        this.$nextTick(()=>{
          this.$refs.addDept.getDepartmentDetail();//this.$refs.addDept等同于子组件的this
        })
      }
    }
  • 子组件提供方法-位置(src/views/department/components/add-dept.vue)
  async getDepartmentDetail(){
      this.formData = await  getDepartmentDetail(this.currentNodeId)
    }

2.组织架构-编辑部门-编辑表单校验

在这里插入图片描述

  • 编辑部门表单校验和新增部门表单校验的区别就是编辑的数据已经在数据库存在了,必然是存在重复的
    在这里插入图片描述
  • 编辑场景下排除自身
  • 检查部门编码-代码位置(src/views/department/components/add-dept.vue)
 //部门编码
            code:[
                {
                    required:true,
                    message:'部门编码不能为空',
                    trigger:'blur'
                },
                {
                    min:2,max:10,message:'部门编码的长度为2-10个字符',
                    trigger:'blur',
                    //自定义校验模式
                    validator:async(rule,value,callback)=>{
                        //value是输入的编码
                        let result =await getDepartment();
                        console.log(result)
                        //判断是否是编辑模式
                        if(this.formData.id){
                            //编辑场景
                            result = result.filter(item=>item.id !== this.formData.id)
                            console.log(result)
                        }
                        //result数组中是否存在value值
                        if(result.some(item=>item.code === value)){
                            callback(new Error('部门中已经有该编码了'))
                        }else{
                            callback()
                        }
                    }
                }
            ],
  • 部门名称-位置(src/views/department/components/add-dept.vue)
 //部门名称
            name:[
                {
                    required:true,
                    message:'部门名称不能为空',
                    trigger:'blur',
                    validator:async(rule,value,callback)=>{
                        //value就是输入的名称
                        let result = await getDepartment();
                        if(this.formData.id){
                            //编辑 排除自身 id不相等说明不是自身
                            result = result.filter(item=>{
                                return item.id !== this.formData.id
                            })
                        }
                        //result 数组中是否存在value值
                        if(result.some(item=>item.name === value)){
                            callback(new Error('部门中已经有该名称了'))
                        }else{
                            callback()
                        }
                    }
                }
            ]

3.组织架构-编辑部门-确认取消

示例:pandas 是基于NumPy 的一种工具,该工具是为了解决数据分析任务而创建的。
在这里插入图片描述

  • 更新部门的API-代码位置(src/api/department.js)
//更新部门
export function updateDepartment(data){
    return request({
        method:'put',
        url:`/company/department/${data.id}`,
        data
    })
}
  • 确认时区分当前是编辑还是新增-代码位置(src/views/department/components/add-dept.vue)
 btnOk(){
        this.$refs.addDept.validate(async isOK=>{
            if(isOK){
                let msg = '新增'
                //通过formData中的id
                if(this.formData.id){
                    //编辑
                    msg = '更新'
                    await updateDepartment(this.formData)
                }else{
                    //新增
                    await addDepartment({
                        ...this.formData,pid:this.currentNodeId
                    })
                }
             
                //通知父组件更新
                this.$emit('updateDepartment')
                //提示消息
                this.$message.success(`${msg}部门成功`)
                this.close()
            }
        })
    },
  • 使用计算属性生成当前显示的弹层标题-代码位置(src/views/department/components/add-dept.vue)
<el-dialog :title="showTitle" :visible="showDialog" @close="close">
computed:{
showTitle(){
  return this.formData.id ?'编辑部门':'新增部门'
 }
}

4.组织架构-删除部门

在这里插入图片描述

  • 删除部门的API-代码位置(src/api/department.js)
//删除部门
export function delDepartment(id){
    return request({
        method:'delete',
        url:`/company/department/${id}`
    })
}
  • 在删除场景下调用API删除-代码位置(src/views/department/index.vue)
operateDept(type,id){
  if(type === 'add'){
   //添加子部门
   this.showDialog = true;//显式弹窗
   this.currentNodeId = id;
   }else if(type === 'edit'){
     //编辑部门场景
     this.showDialog = true;
     this.currentNodeId = id;//记录id 
     this.$nextTick(()=>{
       this.$refs.addDept.getDepartmentDetail();//this.$refs.addDept等同于子组件的this 
     }) 
   }else{
     //删除部门
     this.$confirm('确认要删除该部门吗?').then(async()=>{
        await delDepartment(id)
        //提示信息
        this.$message.success('删除部门成功')
        this.getDepartment()
      })
   }
}

5.角色管理-搭建页面结构

在这里插入图片描述

  • 角色管理对应的路由-位置(src/router/modules/role.js)
import layout from '@/layout'
export default{
    path:'/role',
    component:layout,
    children:[{
        path:'',
        name:'role',
        component:()=>import('@/views/role'),
        meta:{
            title:'角色',
            icon:'tree'
        }
    }]
}
  • 根路由文件(src/router/index.js)
import roleRouter from '@/router/modules/role'
export const constantRoutes = [
  departmentRouter,roleRouter,
]
  • 搭建角色管理的页面结构-代码位置(src/views/role/index.vue)
<template>
  <div class="container">
    <div class="app-container">
      <!-- 角色管理内容 -->
      <div class="role-operate">
        <el-button size="mini" type="primary">
          添加角色
        </el-button>
      </div>
      <!-- 放置table组件 -->
      <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>
<style scoped>
  .role-operate{
    padding:10px;
   }
</style>

6.角色管理-获取数据

在这里插入图片描述

  • 封装获取角色API-代码位置(src/api/role.js)
import request from '@/utils/request'
export function getRoleList(params){
  return request({
   url:'/sys/role',
   params//查询参数
   })
}
  • 在初始化时调用API-赋值给数据-代码位置(src/views/role/index.vue)
import {getRoleList} from '@/api/role'
data() {
    return {
      list:[]
    }
  },
  components: {

 },
  created(){
    this.getRoleList()
  },
  methods:{
   async getRoleList(){
      const {rows} = await getRoleList()
      this.list = rows;//赋值
    }
  }
  • 绑定表格属性-代码位置(src/views/role/index.vue)
 <!-- 放置table组件 -->
      <el-table :data="list">
        <!-- 列 -->
        <el-table-column prop="name" align="center" width="200" label="角色" />
        <el-table-column prop="state" align="center" width="200" label="启用" />
        <el-table-column prop="description" align="center"  label="描述" />
        <el-table-column align="center"  label="操作" />
      </el-table>

7.角色管理-表格自定义结构

在这里插入图片描述

  • 自定义启用列和操作列的结构-代码位置(src/views/role/index.vue)
 <el-table-column prop="state" align="center" width="200" label="启用" >
          <template v-slot="{row}">
            <span>{{ row.state === 1 ?'已启用':row.state === 0 ?"未启用":'无' }}</span>
          </template>
        </el-table-column>
  • 自定义操作列结构-代码位置(src/views/role/index.vue)
  <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-column>

8.角色管理-分页功能

  • 分页
  • 展示页面
  • 切换分页获取数据
  • 分页组件属性
  • 当前页码
  • 每页条数
  • 总数
    在这里插入图片描述
  • 定义分页信息-代码位置(src/views/role/index.vue)
 pageParams:{
        page:1,//第几页
        pagesize:5,//每页多少条
        total:0
      }
  • 绑定分页信息-(src/views/role/index.vue)
 <el-pagination :page-size="pageParams.pagesize" :current-page="pageParams.page" :total="pageParams.total" @current-change="changePage" layout="prev,pager,next" />
      </el-row>
  • 初始化时将总数赋值-(src/views/role/index.vue)
async getRoleList(){
  const {rows,total} = await getRoleList(this.pageParams);
  this.list = rows;//赋值
  this.pageParams.total = total
}
  • 切换分页时,获取对应页码的数据-代码位置(src/views/role/index.vue)
//切换分页时,请求新的数据
changePage(newPage){
  this.pageParams.page = newPage;
  this.getRoleList()
}

9.角色管理-新增

在这里插入图片描述
在这里插入图片描述

  • 放置弹层组件-代码位置(src/views/role/index.vue)
<el-dialog width="500px" title="新增角色" :visible.sync="showDialog">
      <!-- 表单 -->
      <el-form label-width="120px">
        <el-form-item label="角色名称">
          <el-input style="width:300px" size="mini"></el-input>
        </el-form-item>
        <el-form-item label="启用">
          <el-switch size="mini"></el-switch>
        </el-form-item>>
        <el-form-item label="角色描述">
          <el-input type="textarea" :rows="3" style="width:300px;" size="mini"></el-input>
        </el-form-item>
        <el-form-item>
          <el-row type="flex" justify="center">
            <el-col :span="12">
              <el-button type="primary" size="mini">确定</el-button>
              <el-button size="mini">取消</el-button>
            </el-col>
          </el-row>
        </el-form-item>
      </el-form>
    </el-dialog>
  • 变量控制弹窗
showDialog:false

10.角色管理-表单数据校验

在这里插入图片描述

  • 声明数据和规则(src/views/role/index.vue)
export default{
  data(){
    roleForm:{
      name:'',
      description:'',
      state:0 //默认未启用 1 关闭0
     },
     rules:{
      name:[
       {
         required:true,
         message:'角色名称不能为空',
         trigger:'blur' 
       } 
      ],
      description:[
        {
          required:true,
          message:'角色描述不能为空',
          trigger:'blur' 
        } 
      ]
      }
   }
}
  • 绑定表单校验和数据
 <el-form ref="roleForm" :model="roleForm" :rules="rules" label-width="120px">
        <el-form-item prop="name" label="角色名称">
          <el-input v-model="roleForm.name" style="width:300px" size="mini"></el-input>
        </el-form-item>
        <el-form-item prop="" label="启用">
          <!-- 如果不需要校验 就不需要写prop属性 -->
          <el-switch v-model="roleForm.state" :active-value="1" :inactive-value="0" size="mini"></el-switch>
        </el-form-item>>
        <el-form-item prop="description" label="角色描述">
          <el-input type="textarea" v-model="roleForm.description" :rows="3" style="width:300px;" size="mini"></el-input>
        </el-form-item>
        <el-form-item>
          <el-row type="flex" justify="center">
            <el-col :span="12">
              <el-button type="primary" size="mini">确定</el-button>
              <el-button size="mini">取消</el-button>
            </el-col>
          </el-row>
        </el-form-item>
      </el-form>

11.角色管理-新增角色-确定取消

在这里插入图片描述

  • 新增角色的api-(src/api/role.js)
export function addRole{data}{
  return request({
    url:'/sys/role',
    method:'post',
    data 
  })
}
  • 确定和取消
btnOK(){
  this.$refs.roleForm.validate(async valid=>{
     if(valid){
       await addRole(this.roleForm) 
       this.$message.success('新增角色成功')
       this.getRoleList()
       this.btnCancel()
     }
  })
},
btnCancel(){
  this.$refs.roleForm.resetFields();
  this.showDialog = false;
}

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

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

相关文章

蓝蜂网关接入天津粉尘涉爆企业风险监测预警系统指导案例

一、应用背景 按天津市应急管理部要求&#xff0c;参照《粉尘涉爆企业安全生产风险监测预警数据接入规范》。天津市已有的粉尘涉爆企业需接入物联网感知汇聚平台&#xff0c;实现数据监测。在市平台系统上实现统一的数据查询分析。通过蓝蜂MQTT网关LF220来实现与物联网感知汇聚…

磁钢生产领域上下料解决方案

随着智能制造技术的不断革新&#xff0c;磁钢生产领域正逐步引入自动化生产线。然而&#xff0c;传统的人工上下料方式存在诸多问题&#xff0c;难以满足现代生产需求。富唯智能提出了一款复合机器人磁钢上下料解决方案&#xff0c;通过先进的自动化技术&#xff0c;提高生产效…

vue3 + 百度地图 实现多坐标生成轨迹的两种种方式

本次依然是关于百度地图中常见的一个问题&#xff0c;此次共使用了两种方式并做了一些分析及处理&#xff0c;希望有所帮助。如有问题可以评论或私信。 一、便捷方式 优点&#xff1a;便捷&#xff0c;所用的api方法是根据坐标进行计算后绘制路线&#xff0c;所以路线相对准确…

【UML用户指南】-29-对体系结构建模-协作

目录 1、概念 1.1、名称 1.2、结构 1.3、行为 1.4、组织协作 2、常用建模技术 2.1、对角色建模 2.2、对用例的实现建模 2.3、对操作的实现建模 2.4、对机制建模 在UML中&#xff0c;用协作来对机制建模。协作为系统中的交互构造块指定一个名称&#xff0c;其中既包含…

Aigtek电压放大器参数有哪些

电压放大器是广泛应用于电子电路中的一种重要电路元件&#xff0c;它主要用于将输入信号的电压放大到所需的输出电压水平。在设计和使用电压放大器时&#xff0c;我们需要了解并考虑一系列的参数和特性。本文将详细介绍电压放大器的主要参数&#xff0c;包括放大倍数、带宽、输…

JAVA 对象存储OSS工具类(腾讯云)

对象存储OSS工具类 import com.qcloud.cos.COSClient; import com.qcloud.cos.ClientConfig; import com.qcloud.cos.auth.BasicCOSCredentials; import com.qcloud.cos.auth.COSCredentials; import com.qcloud.cos.model.ObjectMetadata; import com.qcloud.cos.model.PutObj…

机器学习之模型训练

前言 模型训练一般分为四个步骤&#xff1a; 构建数据集。定义神经网络模型。定义超参、损失函数及优化器。输入数据集进行训练与评估。 有了数据集和模型后&#xff0c;可以进行模型的训练与评估。 构建数据集 定义神经网络模型 class Network(nn.Cell):def __init__(sel…

第一篇——导论:数学通识课的体系和学习攻略

目录 一、背景介绍二、思路&方案三、过程1.思维导图2.文章中经典的句子理解3.学习之后对于投资市场的理解4.通过这篇文章结合我知道的东西我能想到什么&#xff1f; 四、总结五、升华 一、背景介绍 数学的认知大厦&#xff1b;之前听的时候就觉得很重要&#xff0c;本次又…

性能压测 -优化 Nginx的动静分离

两件事情 1.以后将所有的项目的静态资源都应该放在nginx里面 2.nginx 规则&#xff1a;/static/***所有请求都有nginx直接返回 nginx 配置一下配置文件&#xff0c;然后把html 的静态资源&#xff0c;绑定好是Nginx优先级高的静态资源路径&#xff0c;就去交给nginx静态资源…

h5 video 标签播放经过 java 使用 ws.schild( jave、ffmpeg ) 压缩后的 mp4 视频只有声音无画面的问题排查记录

1. 引入 ws.schild MAVEN 依赖&#xff1a; <dependency><groupId>ws.schild</groupId><artifactId>jave-all-deps</artifactId><version>3.5.0</version></dependency><dependency><groupId>ws.schild</grou…

基于Spring Boot框架的EAM系统设计与实现

摘 要&#xff1a;文章设计并实现一个基于Spring Boot框架的EAM系统&#xff0c;以应对传统人工管理模式存在的低效与信息管理难题。系统利用Java语言、JSP技术、MySQL数据库等技术栈&#xff0c;构建了一个B/S架构的高效管理平台&#xff0c;提升了资产管理的信息化水平。该系…

分班查询系统怎么制作?

新学年的临近&#xff0c;教师们的工作清单再次膨胀&#xff0c;充满各种任务。开学前的准备总是让人忙碌不已&#xff0c;从课程规划到教室布置&#xff0c;再到与家长的沟通&#xff0c;每一个环节都至关重要。尤其是分班结果的公布&#xff0c;这项工作虽然看起来简单&#…

Qwen1.5-1.8b部署

仿照ChatGLM3部署&#xff0c;参考了Qwen模型的文档&#xff0c;模型地址https://modelscope.cn/models/qwen/Qwen1.5-1.8B-Chat/summary http接口 服务端代码api.py from fastapi import FastAPI, Request from transformers import AutoTokenizer, AutoModelForCausalLM, …

强化学习后的数学原理:随机近似与梯度下降

概述 这节课的作用&#xff1a; 本节课大纲如下&#xff1a; Motivating examples 先回顾一下 mean estimation &#xff1a; 为什么总数反复提到这个 mean estimation&#xff0c;就是因为 RL 当中有非常多的 expectation&#xff0c;后面就会知道除了 state value 这些定义…

PySide6 实现资源的加载:深入解析与实战案例

目录 1. 引言 2. 加载内置资源 3. 使用自定义资源文件&#xff08;.qrc&#xff09; 创建.qrc文件 编译.qrc文件 加载资源 4. 动态加载UI文件 使用Qt Designer设计UI 加载UI文件 5. 注意事项与最佳实践 6. 结论 在开发基于PySide6的桌面应用程序时&…

博途通讯笔记1:1200与1200之间S7通讯

目录 一、添加子网连接二、创建PUT GET三、各个参数的意义 一、添加子网连接 二、创建PUT GET 三、各个参数的意义

新手高效指南:电子元器件BOM表创建/制作及配单全教程

在科技日新月异的今天&#xff0c;电子产品设计与制造不仅是创新精神的展现&#xff0c;更是对精确度与效率的不懈追求。在这个过程中&#xff0c;一份精细且全面的BOM&#xff08;物料清单&#xff09;犹如一座桥梁&#xff0c;连接着创意与现实世界。BOM不仅细致记录了产品所…

如何优化圆柱晶振32.768KHz的外壳接地?

圆柱晶振32.768KHz在电子设备中扮演着重要的角色&#xff0c;其精确的时钟信号对于许多应用至关重要。为了确保晶振的稳定性和准确性&#xff0c;外壳接地是一个关键步骤。 一、外壳接地的目的 外壳接地的主要目的是为了防止信号干扰。当晶振的外壳接地后&#xff0c;它相当于…

16-JS封装:extend方法

目录 一、封装需求 二、实现1&#xff1a;jQuery.extend 三、实现2&#xff1a;通过原型jQuery.fn.extend 四、优化 一、封装需求 封装需求&#xff1a; $.extend&#xff1a; var obj{ name:"xxx",age:18} var obj3{ gender:"女"} var obj2{}; 将obj、…

S7-1200PLC学习记录

文章目录 前言一、S7-12001.数字量输入模块2. PNP接法和NPN接法 二、博图软件1. 位逻辑运算Part1. 添加新设备&#xff08;添加PLC&#xff09;Part2. 添加信号模块Part3. 添加信号板中模块Part4. 添加新块Part5. Main编程文件案例1案例2 -( S )- 和 -( R )-完整操作过程&#…