用el-tree组件配合插槽完成主体布局
- <el-tree
- :data="list"
- :default-expand-all="true"
- >
- <!-- 作用域插槽 data拿到的是每一个子节点的对象 -->
- <!--
- #default === slot-scope
- 什么时候用到作用域插槽?父组件中如果想使用子组件中的数据进行自定义内容的渲染 (类似于table 单元格数据渲染)
- -->
- <template #default="{ data }">
- <el-row
- type="flex"
- justify="space-between"
- align="middle"
- style="height: 40px; width: 100%;"
- >
- <el-col :span="20">
- <span>{{ data.name }}</span>
- </el-col>
- <el-col :span="4">
- <el-row type="flex" justify="end">
- <!-- 两个内容 -->
- <el-col>{{ data.manager }}</el-col>
- <el-col>
- <!-- 下拉菜单 element -->
- <el-dropdown>
- <span> 操作<i class="el-icon-arrow-down" /> </span>
- <!-- 下拉菜单 -->
- <el-dropdown-menu slot="dropdown">
- <el-dropdown-item>添加子部门</el-dropdown-item>
- <el-dropdown-item>编辑部门</el-dropdown-item>
- <el-dropdown-item>删除部门</el-dropdown-item>
- </el-dropdown-menu>
- </el-dropdown>
- </el-col>
- </el-row>
- </el-col>
- </el-row>
- </template>
- </el-tree>
树形组件依赖一份结构为树形嵌套的数据结构
data 中默认 label 为节点标签的文字,children 为子节点 (可以通过 props 修改默认配置 )
- <script>
- export default {
- data() {
- return {
- // 依赖一份树形数据
- list: [{
- name: '财务部',
- manager: '刘备'
- children: [
- {
- name: '财务核算部',
- manager: '张飞'
- },
- {
- name: '税务核算部',
- manager: '关羽'
- }
- ]
- }]
- }
- }
- }
- </script>

扁平化数据处理树形结构

续新增弹层的实现完善

新增和编辑为一个弹窗
新增状态 处理新增和编辑弹窗状态

父组件的代码
补充数据项isEdit,来标识当前是否处于编辑状态
点击添加时,这个值是false
点击编辑时,这个值是true
把这个数据项传递给子组件
给编辑部门添加事件 弹窗获取id 传给子组件

在子组件中 根据id获取单个部门信息 实现数据回填

做数据回填时,由于form已经做了v-model双向绑定,所以,这里直接赋值:this.form = res.data,这样数据就回填了。
图解

图解

在src\api\departments.js中,添加一个用于更新部门数据的接口
封装更新接口
调用接口,保存数据;
保存成功之后,通知父组件:关闭弹层,更新数据;
补充doEdit 操作

async为微任务
微任务 =>dom加载 => 宏任务
加$nextTick或setTimeout 将微任务转宏任务
表单重新加载 重新获取数据

方法一
方法二 通过给组件添加ref $nextTick回调函数中调用请求时间

方法三
通过给id 添加事件监听 监听id变化

删除部门

优化删除

给取消按钮增加关闭弹层功能

表单校验



