day04-组织架构

news2024/11/26 6:09:13

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

文章目录

  • 1.组织架构-树组件应用
        • 树形组件-用层级结构展示信息,可展开或折叠。
  • 2.组织架构-树组件自定义结构
  • 3.组织架构-获取组织架构数据
  • 4.组织架构-递归转化树形结构
        • 总结:递归的特点
  • 5.组织架构-添加子部门-新建弹层组件
  • 6.组织架构-添加子部门-表单结构
  • 7.组织架构-添加子部门-表单基本校验
  • 8.组织架构-添加子部门-表单业务校验
  • 9.组织架构-添加子部门-获取负责人数据
  • 10.组织架构-添加子部门-记录部门
  • 11.组织架构-添加子部门-确定取消

1.组织架构-树组件应用

树形组件-用层级结构展示信息,可展开或折叠。

在这里插入图片描述

  • element-ui提供了树组件el-tree的应用
  • data(绑定数据)
  • props (设置属性) - children(设置子节点的字段名) / label(设置显示内容的字段名)
  • default-expand-all (默认展开所有节点)
  • 在组织架构组件中放置树形组件-代码位置(src/views/department/index.vue)
<el-tree default-expand-all :data="depts" :props="defaultProps" />
  • 声明树组件相关的数据
export default {
  name: 'Department',
  data() {
    return  {
      depts: [{
        name: '教育',
        children: [
          { name: '总裁办'},
          { name: '行政部'},
          { name: '财务部'}
        ]
      }],
      defaultProps: {
        children: 'children',
        label: 'name'
      }
    }
  }
}

2.组织架构-树组件自定义结构

示例:pandas 是基于NumPy 的一种工具,该工具是为了解决数据分析任务而创建的。

  • 通过在el-tree中传入插槽内容,就可以渲染数据
  • 自定义树形结构-代码位置(src/views/department/index.vue)
<el-tree default-expand-all :data="depts" :props="defaultProps">
        <!-- 节点结构 -->
        <!-- v-slot="{ node, data }" 只能作用在template -->
        <template v-slot="{ data }">
          <el-row style="width:100%;height:40px" type="flex" justify="space-between" align="middle">
            <el-col>{{ data.name }}</el-col>
            <el-col :span="4">
              <span class="tree-manager">{{ data.managerName }}</span>
              <!-- $event 实参 表示类型 -->
              <el-dropdown >
                <!-- 显示区域内容 -->
                <span class="el-dropdown-link">
                  操作<i class="el-icon-arrow-down el-icon--right" />
                </span>
                <!-- 下拉菜单选项 -->
                <el-dropdown-menu slot="dropdown">
                  <el-dropdown-item command="add">添加子部门</el-dropdown-item>
                  <el-dropdown-item command="edit">编辑部门</el-dropdown-item>
                  <el-dropdown-item command="del">删除</el-dropdown-item>
                </el-dropdown-menu>
              </el-dropdown>
            </el-col>
          </el-row>
        </template>
  </el-tree>
  • 样式-代码位置(src/views/department/index.vue)
<style scoped>
.app-container {
  padding: 30px 140px;
  font-size: 14px;
}
.tree-manager {
  width: 50px;
  display: inline-block;
  margin: 10px;
}
</style>

3.组织架构-获取组织架构数据

  • 封装获取组织的API-代码位置(src/api/department.js)
import request from '@/utils/request'
// 获取组织架构数据
export function getDepartment(){
    return request({
        url:'/company/department'
    })
}
  • 在组织架构初始化时调用方法-代码位置(src/views/department/index.vue)
<script>
import { getDepartment } from '@/api/department'
export default {
  name: 'Department',
  data() {
    return  {
      depts: [],
      defaultProps: {
        children: 'children',
        label: 'name'
      }
    }
  },
  created() {
    this.getDepartment()
  },
  methods: {
   async getDepartment() {
    const result = await getDepartment()
    this.depts = result
   }
  }
}
  </script>

4.组织架构-递归转化树形结构

在这里插入图片描述

  • 首先分析数据的关联关系
  • 递归函数根据关联关系转化层级结构
    在这里插入图片描述
  • 父级的id为子级的pid
  • 封装公共方法-代码位置(src/utils/index.js)
// 列表型数据转化树型
export function transListToTreeData(list,rootValue){
	const arr = []
    list.forEach(item=>{
    if(item.pid === rootValue){
      //找到了匹配的节点
      //当前节点的id 和当前节点的子节点的pid是相等的
      const children = transListToTreeData(list,item.id)//找到的节点的子节点
      item.children = children;//将子节点赋值给当前节点
      arr.push(item)
    }
  })
  return arr
}
  • 获取完的组织数据使用转化方法转化成树形-代码位置(src/views/department/index.vue)
import { transListToTreeData } from '@/utils/index.js'
  methods:{
    async getDepartment(){
      const result = await getDepartment()
      // this.depts = result
      this.depts = transListToTreeData(result,0)
    }
  },
总结:递归的特点
  • 一般用来处理未知层级的数据
  • 递归要有跳出条件
  • 自身调用自身时参数不能重复

5.组织架构-添加子部门-新建弹层组件

在这里插入图片描述
步骤:

  • 注册添加子部门事件
  • 封装弹层组件
  • 控制弹层显示隐藏
  • 注册下拉菜单点击事件-代码位置(src/views/department/index.vue)
<el-dropdown @command="operateDept">
      <!-- 显示区域内容 -->
      <span class="el-dropdown-link">
            操作<i class="el-icon-arrow-down el-icon--right" />
      </span>
                <!-- 下拉菜单选项 -->
      <el-dropdown-menu slot="dropdown">
            <el-dropdown-item command="add">添加子部门</el-dropdown-item>
            <el-dropdown-item command="edit">编辑部门</el-dropdown-item>
            <el-dropdown-item command="del">删除</el-dropdown-item>
      </el-dropdown-menu>
</el-dropdown>
  • 声明变量控制弹层显示隐藏-代码位置(src/views/department/index.vue)
showDialog:false,
 operateDept(type){
      if(type === 'add'){
        this.showDialog = true;
      }
    }
  • 封装新增组织部门组件-代码位置(src/views/department/components/add-dept.vue)
<template>
    <el-dialog title="新增部门" :visible="showDialog" @close="close">
    
    </el-dialog>
</template>

<script>
export default {
  name: 'AddDept',
  props: {
    showDialog: {
      type: Boolean,
      default: false
    }
  },
  methods: {
    close() {
      this.$emit('update:showDialog', false)
    }
  },

}
</script>

-在组织架构中放置新增部门组件-代码位置(src/views/department/index.vue)

//使用
<addDept  :show-dialog.sync="showDialog"  />
//引入
import addDept from './components/add-dept'
 components: {
    addDept
  }
  • sync修饰符,可以监听子组件传过来的update:属性名的事件,直接将父组件的值进行修改
  • 设置el-tree组件的点击属性-(点击树不可以折叠,只有点击折叠展开图标才可以)-代码位置(src/views/department/index.vue)
<el-tree :expand-on-click-node="false" ></el-tree>

6.组织架构-添加子部门-表单结构

在这里插入图片描述

  • 新增组织架构结构-代码位置(src/views/department/components/add-dept.vue)
 <el-form label-width="120px">
        <el-form-item prop="name" label="部门名称">
            <el-input placeholder="2-10个字符" style="width: 80%;" size="mini">
            </el-input>
        </el-form-item>
        <el-form-item prop="name" label="部门编码">
            <el-input placeholder="2-10个字符" style="width: 80%;" size="mini">
            </el-input>
        </el-form-item>
        <el-form-item prop="name" label="部门负责人">
            <el-input placeholder="请选择负责人" style="width: 80%;" size="mini">
            </el-input>
        </el-form-item>
        <el-form-item prop="name" label="部门介绍">
            <el-input placeholder="1-100个字符" style="width: 80%;" size="mini" type="textarea" :rows="4">
            </el-input>
        </el-form-item>
        <el-form-item>
            <!-- 按钮 -->
            <el-row type="flex" justify="center">
                <el-col :span="12">
                 <el-button size="mini" type="primary">确定</el-button>
                 <el-button size="mini">取消</el-button>
                </el-col>
            </el-row>
        </el-form-item>
    </el-form>

7.组织架构-添加子部门-表单基本校验

在这里插入图片描述
表单校验规则

  • 规则表单项必填/表单项长度限制
  • 部门名称和已有部门不重复
  • 部门编码和已有编码不重复
    步骤
  • 定义数据架构
  • 绑定属性
  • 定义规则
    基本校验
  • 声明数据和规则-代码位置(src/views/department/components/add-dept.vue)
data(){
    return{
        formData:{
            code:'',//部门编码
            introduce:'',//部门介绍
            managerId:'',//部门负责人id
            name:'',//部门名称
            pid:''//父级部门的id
        },
        rules:{
            //部门编码
            code:[
                {required:true,message:'部门编码不能为空',trigger:'blur'},
                {
                    min:2,max:10,message:'部门编码的长度为2-10个字符',trigger:'blur'
                }
            ],
            //部门介绍
            introduce:[
                {
                    required:true,
                    message:'部门介绍不能为空',
                    trigger:'blur'
                },
                {
                    min:1,max:100,message:'部门介绍的长度为1-100个字符',
                    trigger:'blur'
                }
            ],
            //部门负责人id
            managerId:[
                {
                    required:true,
                    message:'部门负责人不能为空',
                    trigger:'blur'
                }
            ],
            //部门名称
            name:[
                {
                    required:true,
                    message:'部门名称不能为空',
                    trigger:'blur'
                }
            ]


        }
    }
  },
  • 绑定属性-代码位置(src/views/department/components/add-dept.vue)
<el-form label-width="120px" ref="addDept" :model="formData" :rules="rules" >
        <el-form-item prop="name" label="部门名称">
            <el-input v-model="formData.name" placeholder="2-10个字符" style="width: 80%;" size="mini">
            </el-input>
        </el-form-item>
        <el-form-item prop="code" label="部门编码">
            <el-input v-model="formData.code" placeholder="2-10个字符" style="width: 80%;" size="mini">
            </el-input>
        </el-form-item>
        <el-form-item prop="managerId" label="部门负责人">
            <el-input v-model="formData.managerId" placeholder="请选择负责人" style="width: 80%;" size="mini">
            </el-input>
        </el-form-item>
        <el-form-item prop="introduce" label="部门介绍">
            <el-input v-model="formData.introduce" placeholder="1-100个字符" style="width: 80%;" size="mini" type="textarea" :rows="4">
            </el-input>
        </el-form-item>
        <el-form-item>
            <!-- 按钮 -->
            <el-row type="flex" justify="center">
                <el-col :span="12">
                 <el-button size="mini" type="primary">确定</el-button>
                 <el-button size="mini">取消</el-button>
                </el-col>
            </el-row>
        </el-form-item>
    </el-form>

8.组织架构-添加子部门-表单业务校验

  • 部门名称和已有部门不重复
  • 部门编码和已有编码不重复
    在这里插入图片描述
  • 部门和编码的重复校验-代码位置(src/views/department/components/add-dept.vue)
 //自定义校验模式
                    validator:async(rule,value,callback)=>{
                        //value是输入的编码
                        let result =await getDepartment();
                        //result数组中是否存在value值
                        if(result.some(item=>item.code === value)){
                            callback(new Error('部门中已经有该编码了'))
                        }else{
                            callback()
                        }
                    }
  • 部门的校验规则
 validator:async(rule,value,callback)=>{
                        let result = await getDepartment();
                        if(result.some(item=>item.name === value)){
                            callback(new Error('部门中已经有该名称了'))
                        }else{
                            callback()
                        }
                    }

9.组织架构-添加子部门-获取负责人数据

在这里插入图片描述

  • 步骤
  • 获取负责人列表
  • 绑定下拉组件
  • 获取负责人的API-代码位置(src/api/department.js)
//获取部门负责人的数据
export function getManagerList(){
    return request({
        url:'/sys/user/simple'
    })
}
  • 在组件初始化时,调用-位置src/views/department/components/add-dept.vue
import { getManagerList } from '@/api/department'
export default {
  data () {
    return {
      managerList: [], // 存储负责人列表
    }
  },
  created() {
    this.getManagerList()
  },
  methods: {
   async getManagerList() {
     this.managerList = await getManagerList()
    }
  }
}
  • select渲染下拉选项-位置(src/views/department/components/add-dept.vue)
<el-select v-model="formData.managerId" placeholder="请选择负责人" style="width: 80%" size="mini">
   <!-- 下拉选项 循环 负责人数据 label表示显示的字段 value 存储字段 -->
    <el-option v-for="item in managerList" 
      :key="item.id" 
      :label="item.username"
      :value="item.id" />
</el-select>

10.组织架构-添加子部门-记录部门

  • 因为添加子部门是基于当前部门,所有需要记录当前是在哪个部门添加的
    在这里插入图片描述
  • 点击添加子部门时传递id-代码位置(src/views/department/index.vue)
 <!-- $event 实参 表示类型 -->
            <el-dropdown @command = "operateDept($event,data.id)" >
  • 声明一个响应式数据记录该id-代码位置(src/views/department/index.vue)
return  {
      currentNodeId: null, // 存储当前点击的id
    }
  • 添加子部门方法-记录id-代码位置(src/views/department/index.vue)
   // 操作部门方法
    operateDept(type, id) {
      if (type === 'add') {
        // 添加子部门
        this.showDialog = true // 显示弹层
        this.currentNodeId = id
      } 
    }
  • 通过组件传递id-代码位置(src/views/department/index.vue)
 <addDept :current-node-id="currentNodeId"  :show-dialog.sync="showDialog"  />
  • 子组件接收id-代码位置(src/views/department/components/add-dept.vue)
  currentNodeId:{
        type:Number,
        default:null
    }

11.组织架构-添加子部门-确定取消

在这里插入图片描述

  • 新增部门的Api-代码位置(src/api/department.js)
// 新增组织
export function addDepartment(data){
    return request({
        method:'post',
        url:'/company/department',
        data
    })
}
  • 确定方法-代码位置(src/views/department/components/add-dept.vue)
btnOk(){
        this.$refs.addDept.validate(async isOK=>{
            if(isOK){
               await addDepartment({
                    ...this.formData,pid:this.currentNodeId
                })
                //通知父组件更新
                this.$emit('updateDepartment')
                //提示消息
                this.$message.success('新增部门成功')
                this.close()
            }
        })
    }
  • 取消方法-位置(src/views/department/components/add-dept.vue)
  close() {
      this.$refs.addDept.resetFields();//重置表单
      this.$emit('update:showDialog', false);
    },

-父组件监听updateDepartment事件

 <addDept :current-node-id="currentNodeId"  :show-dialog.sync="showDialog" @updateDepartment="getDepartment" />

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

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

相关文章

【持续更新】vs 编译过程中的问题及其解决方案

独立寒秋&#xff0c;湘江北去&#xff0c;橘子洲头。 目录 问题 1 &#xff1a; 无法查看或者打开 PDB 文件。 问题 2 &#xff1a; 命令提示符中查看运行结果&#xff0c;控制台闪退。 问题 3 &#xff1a; 某功能的判断条件&#xff1a;int val > 1e9&#xff0c;逻辑…

004 线程的状态

文章目录 Java线程可能的状态&#xff1a; 状态名称说明NEW初始状态&#xff0c;线程被构建&#xff0c;但是还没有调用start()方法RUNNABLE运行状态&#xff0c;Java线程将操作系统中的就绪和运行两种状态笼统地称作"运行中"BLOCKED阻塞状态&#xff0c;表示线程阻…

轻松实现百度大模型ERNIE对话

该代码直接可用&#xff0c;实现了流式输出&#xff0c;只需要在你自己的开发环境配置百度申请的QIANFAN_AK和QIANFAN_SK即可使用啦。// # 在.env文件中&#xff0c;设置以下内容&#xff0c;安全认证Access Key替换your_iam_ak&#xff0c;Secret Key替换your_iam_sk 不过需要…

秋招Java后端开发冲刺——并发篇2(JMM与锁机制)

本文对Java的内存管理模型、volatile关键字和锁机制进行详细阐述&#xff0c;包括synchronized关键字、Lock接口及其实现类ReentrantLock、AQS等的实现原理和常见方法。 一、JMM&#xff08;Java内存模型&#xff09; 1. 介绍 JMM定义了共享内存中多线程程序读写操作的行为规…

JAVA案例模拟电影信息系统

一案例要求&#xff1a; 二具体代码(需要在同一个包下创建三个类) Ⅰ&#xff1a;实现类 package 重修;import java.util.Random; import java.util.Scanner;public class first {public static void main(String[] args) {javabean[]moviesnew javabean[4];movies[0] new ja…

身边有填报志愿需求别错过!张雪峰透露今年志愿填报技巧:报专业,别报行业!(文末附稳定高薪专业推荐)

高考填报志愿是每个考生和家长都要面对的重大抉择。在当前就业形势日趋严峻、部分行业发展前景不明朗的大背景下,考生在填报志愿时更需要全面了解各个专业的就业前景,理性权衡自身兴趣特长与社会需求&#xff0c;而不是盲目跟风报考所谓的"热门专业"。 今天跟大家分…

航空数据管控系统-①项目准备阶段:任务1:项目需求描述

任务描述 从用户的角度阐述项目的开发背景、使用范围及功能需求&#xff0c;从而指导学生独立完成项目的设计与开发。 任务指导 目录 标题 内容 备注 1. 项目概述 1.1 项目背景介绍 &#xff08;1&#xff09;说明产品是什么&#xff0c;什么用途 &#xff08;2&#xff…

KUKA机器人中断编程3—暂停功能的编程

在KUKA机器人的使用过程中&#xff0c;对于调试一个项目&#xff0c;当遇到特殊情况时需要暂停机器人&#xff0c;等异常情况处理完成后再继续机器人的程序运行。wait for指令是等待一个输入信号指令&#xff0c;没有输入信号&#xff0c;机器人一直等待。在一定程度上程序也不…

黑马点评DAY5|商户查询缓存

商户查询缓存 缓存的定义 缓存就是数据交换的缓冲区&#xff08;Cache&#xff09;&#xff0c;是存储数据的临时地方&#xff0c;一般读写性能较高。 比如计算机的CPU计算速度非常快&#xff0c;但是需要先从内存中读取数据再放入CPU的寄存器中进行运算&#xff0c;这样会限…

67.WEB渗透测试-信息收集- WAF、框架组件识别(7)

免责声明&#xff1a;内容仅供学习参考&#xff0c;请合法利用知识&#xff0c;禁止进行违法犯罪活动&#xff01; 内容参考于&#xff1a; 易锦网校会员专享课 上一个内容&#xff1a;66.WEB渗透测试-信息收集- WAF、框架组件识别&#xff08;6&#xff09;-CSDN博客 关于w…

6年铲屎官测评宠物空气净化器哪款好,热门养宠空气净化器排名

作为一名资深猫奴&#xff0c;发现很多铲屎官每到春秋换季就开始疯狂打喷嚏、突然开始全身过敏。其原因是猫毛一到换季就开始疯狂掉毛&#xff0c;相对于可见猫毛&#xff0c;漂浮在空气中的浮毛就是罪灰祸首。微小的浮毛在空气总容易被人体吸入体内&#xff0c;而浮毛上面附带…

通义灵码AI编程助手怎么样?通义灵码详解(亲测)

通义灵码是阿里云推出的一款基于通义大模型的AI智能编程辅助工具&#xff0c;通义灵码提供行级/函数级实时续写、自然语言生成代码、单元测试生成、代码优化、注释生成、代码解释、研发智能问答、异常报错排查等能力&#xff0c;阿小云axiaoyun.com整理通义灵码介绍、使用场景、…

澳蓝荣耀时刻,6款产品入选2024年第一批《福州市名优产品目录》

近日&#xff0c;福州市工业和信息化局公布2024年第一批《福州市名优产品目录》&#xff0c;澳蓝自主研发生产的直接蒸发冷却空调、直接蒸发冷却组合式空调机组、间接蒸发冷水机组、高效间接蒸发冷却空调机、热泵式热回收型溶液调湿新风机组、防火湿帘6款产品成功入选。 以上新…

二叉树与堆相关的时间复杂度问题

目录 满二叉树与完全二叉树高度h和树中节点个数N的关系 向上调整算法&#xff1a; 介绍&#xff1a; 复杂度推导&#xff1a; 向下调整算法&#xff1a; 介绍&#xff1a; 复杂度推导&#xff1a; 向上调整建堆&#xff1a; 介绍&#xff1a; 复杂度推导&#xff1a;…

自然语言处理学习--3

对自然语言处理领域相关文献进行梳理和总结&#xff0c;对学习的文献进行梳理和学习记录。希望和感兴趣的小伙伴们一起学习。欢迎大家在评论区进行学习交流&#xff01; 论文&#xff1a;《ChineseBERT: Chinese Pretraining Enhanced by Glyph and Pinyin Information》 下面…

sublime 3 背景和字体颜色修改

sublime 4 突然抽风&#xff0c;每次打开都显示 “plugin_host-3.3 has exited unexpectedly, some plugin functionality won’t be available until Sublime Text has been restarted” 一直没调好&#xff0c;所以我退回到sublime 3了。下载好了软件没问题&#xff0c;但是一…

基于opencv的斜光测距及python实现

1.前言 最近做了一个基于opencv的斜光测距的小项目&#xff0c;东西不多&#xff0c;但是很有意思&#xff0c;值得拿出来学一学。项目里面需要比较精确的定位功能&#xff0c;将前人matlab代码移植到python上&#xff0c;并且做了一些优化&#xff0c;简化逻辑(毕竟我是专业的…

Spring Boot中使用SpringEvent组件

Spring的事件机制是基于观察者模式的实现&#xff0c;主要由以下三个部分组成&#xff1a; 事件&#xff08;Event&#xff09;&#xff1a;事件是应用中发生的重要事情&#xff0c;通常是一个继承自ApplicationEvent的类。 事件发布器&#xff08;Publisher&#xff09;&…

iPhone白苹果怎么修复?4个方法解决你的烦恼!

其实iPhone手机出现“白苹果”这事&#xff0c;如果是iPhone轻度用户&#xff0c;可能大家一辈子都不会遇到一次。但如果是iPhone重度用户、越狱爱好者、软件收集狂&#xff0c;可能就会遇到了。 白苹果&#xff0c;一般指iOS设备出现软、硬件故障&#xff0c;卡在一个类似于启…

AI智能对话绘画音乐三合一创作神器源码系统 带完整的源代码包以及搭建部署教程

系统概述 该系统旨在通过先进的AI技术&#xff0c;实现用户与机器的深度交互&#xff0c;从而在对话中创作出独一无二的艺术作品——无论是细腻的画作、动人的乐曲&#xff0c;还是两者兼备的多媒体体验&#xff0c;都能在这个平台上轻松实现。本文将详细介绍该系统的系统概述…