Day05-组织架构-角色管理

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

文章目录

  • 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;
}

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

第一次的pentest show总结

第一次的pentest show总结 前言 开始之前&#xff0c;我特别感谢TryHackMe(英)、HackTheBox(美)、zero-point security(英)、offsec(美)等平台&#xff0c;使我们能够通过网络以线上的方式学习与练习&#xff0c;打破传统线下各地区教育资源差异大的限制&#xff0c;对网络教…

探索Sui的面向对象模型和Move编程语言

Sui区块链作为一种新兴的一层协议&#xff08;L1&#xff09;&#xff0c;采用先进技术来解决常见的一层协议权衡问题。Cointelegraph Research详细剖析了这一区块链新秀。 Sui使用Move编程语言&#xff0c;该语言专注于资产表示和访问控制。本文探讨了Sui的对象中心数据存储模…

Python从0到100(三十七):数据提取的概念和数据分类

1. 爬虫中数据的分类 在爬虫开发过程中,我们会遇到多种类型的数据。了解这些数据的类型对于有效地提取和解析信息至关重要。 结构化数据 结构化数据是指具有固定格式和模式的数据,常见的结构化数据格式包括JSON和XML。 处理方式:可以直接转换为Python的字典或列表等数据类…

【UML用户指南】-27-对体系结构建模-制品

目录 1、组成结构 2、制品的种类 2.1、部署制品 &#xff08;deployment artifact&#xff09; 2.2、工作产品制品 &#xff08;work product artifact&#xff09; 2.3、执行制品 &#xff08;execution artifact&#xff09; 3、标准元素 4、常用建模技术 4.1、对可执…

Redis 7.x 系列【17】四种持久化策略

有道无术&#xff0c;术尚可求&#xff0c;有术无道&#xff0c;止于术。 本系列Redis 版本 7.2.5 源码地址&#xff1a;https://gitee.com/pearl-organization/study-redis-demo 文章目录 1. 概述2. 案例演示2.1 无持久化2.2 RDB2.3 AOF2.4 混合模式2.4.1 方式一&#xff1a;…

LLM - 神经网络的组成

1. 一个神经元的结构&#xff1a;即接受多个输入X向量&#xff0c;在一个权重向量W和一个偏执标量b的作用下&#xff0c;经过激活函数后&#xff0c;产生一个输出。 2. 一层神经网络的结构&#xff1a;该层网络里的每个神经元并行计算&#xff0c;得到各自的输出;计算方式是输入…

CISAW证书考完有什么用?值得投资吗?

CISAW证书&#xff0c;在信息安全领域内被公认为具有高价值的一种职业资格认证&#xff0c;它象征着持有者在该领域的专业技能和知识水平。 因此&#xff0c;CISAW证书不仅具有实质性的价值&#xff0c;还能为持有者带来诸多益处。 首先&#xff0c;拥有CISAW证书的专业人士更…

简过网:教师编制报考要求和条件,都给你汇总好了!

如果你想要考教师编&#xff0c;那么在考试之前你先要明白这些知识&#xff01; ​ 一、什么是教师编&#xff1f; 在编教师拥有的编制为事业编&#xff0c;即在编老师为事业单位工作人员 二、考教师编需要什么条件&#xff1f; 1、普通话 语文学科普通话要求达到二级甲等及…

5.基于SpringBoot的SSMP整合案例-数据层开发

目录 1.新建项目 2.实体类开发&#xff1a; 2.1在pom.xml中增加Lombok坐标&#xff1a; 2.2添加Book实体类 3.数据层开发&#xff1a; 3.1 配置MyBatisPlus与Druid 3.2创建数据层接口 3.3写测试类 3.4点击运行&#xff1a; 4.数据层快速开发&#xff1a; 4.1配置MyB…

Camera link(学习笔记)

Camera Link协议是一种专门针对机器视觉应用领域的串行通信协议&#xff0c;它使用低压差分信号(LVDS)进行数据的传输和通信。Camera Link标准是在ChannelLink标准的基础上多加了6对差分信号线&#xff0c;其中4对用于并行传输相机控制信号&#xff0c;另外2对用于相机和图像采…

植物学(书籍学习资料)

包含观赏植物学、植物学、植物学百科图鉴等多本植物学方面的书籍学习资料。 图2、3为观赏植物学截图&#xff1b; 图4、5为植物学百科图鉴截图&#xff1b; 图6、7为植物学学习指南截图。

YOLO V7项目使用

YOLO V7项目使用 根据官方论文中提供的项目地址&#xff1a;使用git clone将项目下载到本地。 https://github.com/WongKinYiu/yolov7 git clone https://github.com/WongKinYiu/yolov7 使用pycharm打开项目&#xff0c;根据官方提供的requirement.txt文件下载项目启动所需要的…

ERROR | Web server failed to start. Port 8080 was already in use.

错误提示&#xff1a; *************************** APPLICATION FAILED TO START ***************************Description:Web server failed to start. Port 8080 was already in use.Action:Identify and stop the process thats listening on port 8080 or configure thi…

ubuntu下后台启动程序

1.启动 nohup python detect_mq.py > output.out 2>&1 & 这个命令是用来在后台运行一个 Python 脚本 detect_mq.py&#xff0c;并将脚本的输出重定向到文件 output.out。下面是这个命令的详细解释&#xff1a; nohup&#xff1a;这是一个命令&#xff0c;它告诉…

【东奥会计-注册安全分析报告】

前言 由于网站注册入口容易被黑客攻击&#xff0c;存在如下安全问题&#xff1a; 暴力破解密码&#xff0c;造成用户信息泄露短信盗刷的安全问题&#xff0c;影响业务及导致用户投诉带来经济损失&#xff0c;尤其是后付费客户&#xff0c;风险巨大&#xff0c;造成亏损无底洞…

有哪些有效的策略可以提升独立站的外链数量?

有哪些有效的策略可以提升独立站的外链数量&#xff1f;提升独立站的外链数量并不难&#xff0c;难得是不被谷歌惩罚把你的网站判定为作弊&#xff0c;正因如此&#xff0c;了解并应用GNB自然外链策略是个不错的开始&#xff0c;GNB外链的核心价值在于它提高了网站外链资源的自…

2024亚太赛(中文)数学建模B题Python代码+结果表数据教学

B题题目&#xff1a;洪水灾害的数据分析与预测 完整论文也写完了 第二问代码&#xff08;1、3、4问、还有论文见文末&#xff09; import pandas as pd from sklearn.cluster import KMeans import matplotlib.pyplot as plt import seaborn as sns from matplotlib import rc…

2024年软件测试岗必问的100+个面试题【含答案】

一、基础理论 1、开场介绍 介绍要领&#xff1a;个人基本信息、工作经历、之前所做过的工作及个人专长或者技能优势。扬长避短&#xff0c;一定要口语化&#xff0c;语速适中。沟通好的就多说几句&#xff0c;沟通不好的话就尽量少说两句。举例如下&#xff1a; 面试官你好&…

.net core 的 winform 的 浏览器控件 WebView2

在.NET Core WinForms应用程序中&#xff0c;没有直接的“浏览器控件”&#xff0c;因为WinForms不支持像WebBrowser控件那样的功能。但是&#xff0c;你可以使用WebView2控件&#xff0c;它是一个基于Chromium的浏览器内核&#xff0c;可以在WinForms应用程序中嵌入Web内容。 …

Science Robotics 麻省理工学院最新研究,从仿真中学习的精确选择、定位和抓放物体的视触觉方法

现有的机器人系统在通用性和精确性两个性能目标上难以同时兼顾&#xff0c;往往会陷入一个机器人解决单个任务的情况&#xff0c;缺乏"精确泛化"。本文针对精准和通用的同时兼顾提出了解决方法。提出了SimPLE(Pick Localize和placE的仿真模拟)作为精确拾取和放置的解…