1.删除功能:

需求:就是点击删除会弹出弹框--根据选择---删除相应的内容

vue element 适配手机端 vue elementui 移动端_javascript

 实现的思路:1.利用element组件找到对话框或弹出层,然后进行相应的修改即可(注:这里需要传递id)

代码展示:

①布局忽略  只有js部分

//删除是需要调用接口的 并且需要传递相应的id 如:
(具体操作参照接口文档)

// 删除权限
export function delPermission(id) {
  return request({
    url: `/sys/permission/${id}`,
    method: 'delete'
  })
}

//给需要删除的按钮绑定点击事件,参数传相应的id
记得引入(此处代码不展示)
注意参数!---看接口返回的数据是什么,就传参数是什么!!!!!!是对象就传入row!!!

      <el-button type="text" @click="delPermission(row.id)"> 删除</el-button>

//设置相关的方法--处理相关的业务逻辑
①设置方法调用方法--先提示用户是否需要删除---然后进行调用删除的请求接口api--删除之后在调用页面的渲染接口---在提示删除成功
②此调用的情况可能会失败也会成功所以就得配合try和catch。和用async和await;如果是使用.then就可以不用try和catch了是吗?
  methods: {
     // 删除操作
    async delPermission(id) {
      try {
        await this.$confirm('确定要删除该数据吗')
        await delPermission(id)
        this.getPermissionList()
        this.$message.success('删除成功')
      } catch (error) {
        console.log(error)
      }
    }
}

2.添加功能

项目:6:组织架构的新增的功能。7.权限管理的新增角色! 8.新增员工!9.新增分配权限

vue element 适配手机端 vue elementui 移动端_vue.js_02

 需求:也就是点击新增的时候 会弹出一个弹出框==》其中有确定和取消和关闭!!!

思路:利用element组件的弹出层 ---进行代码的修改

代码的实现:

1)先发起请求--post请求!(具体的参考接口文档)==》传递参数data

vue element 适配手机端 vue elementui 移动端_vue element 适配手机端_03

2)新增窗口的页面布局--利用组件

注:这里需要自己定义一个数据在data---来控制弹出层的显示和隐藏!!!

注:也会定义相应的值来接收==》如果都是表单验证的数据就可以不用在定义???

3)绑定点击事件---(一般弹出框可以单独封装一个单独的组件)--会涉及组件传值   

一般是父传子(父组件来显示和隐藏),子通过props来接收,然后子组件修改数据

子传父(自定义事件)---代码展示:(分配角色:)

<script>
export default {
    4.设置相关的数据接收父组件的显示和隐藏+以及当前的用户的id
  props: {
    showRoleDialog: {
      type: Boolean,
      default: false
    },
    // 用户的id 用来查询当前用户的角色信息
    userId: {
      type: String,
      default: null
    }
  }
}
</script>

4) 主要的业务逻辑:就是传递参数,执行相关的业务逻辑

①就是显示弹出层

②然后进行相关的业务逻辑处理!

③涉及表单验证!(四步曲)

④也会涉及计算属性--与编辑弹出层同在时!

技巧:会在弹出层绑定关闭(与取消的点击和方法一样-- @close="btnCancel")

<el-dialog title="编辑弹层" :visible="showDialog" @close="btnCancel">
      <el-form ref="roleForm" :model="roleForm" :rules="rules" label-width="120px">
        <el-form-item label="角色名称" prop="name">
          <el-input v-model="roleForm.name" />
        </el-form-item>
        <el-form-item label="角色描述">
          <el-input v-model="roleForm.description" />
        </el-form-item>
      </el-form>
      <!-- 底部 -->
      <el-row slot="footer" type="flex" justify="center">
        <el-col :span="6">
          <el-button size="small" @click="btnCancel">取消</el-button>
          <el-button size="small" type="primary" @click="btnOK">确定</el-button>
        </el-col>
      </el-row>
    </el-dialog>

2.1添加功能--下拉菜单

①发起请求

②下拉菜单绑定的是foucs事件(光标聚焦)

③设置方法--调用方法

④渲染数据(数据一般是数组来接收的,所以可以循环遍历获取)==》(可参考组件!)

补充:复选框列表的循环依旧如此

------------------------------------------------------------------------------

2.2.添加功能---之确定功能

需求:当点击新增页面的确定按钮时,我们需要完成对表单的整体校验,如果校验成功,进行提交

1)给确定按钮绑定点击事件

2)在校验表单的时候 是需要获取个表整个表单的,那如何获取个表单呢?通过操作 DOM--$ref

3)给表单设置ref==》获取到表单

4)调用新增接口--重新获取数据--提示成功--关闭弹出层!!

注:这里调用接口点击确定时候一般都会传递参数

4)设置相关的方法==》提供了一个参数?-->这个参数表示的是什么?是什么打印就知道了啊!

返回的是true?===》如果为true表示效验通过

// 点击确定时触发
    btnOK() {
      this.$refs.deptForm.validate(async isOK => {
        if (isOK) {
          // 表示可以提交了
          await addDepartments({ ...this.formData, pid: this.treeNode.id }) // 调用新增接口 添加父部门的id
//会涉及在渲染数据--然后提示成功--关闭弹出层
        }
      })
    }

补充:这里提供了三种方式:

①回调函数:+配合使用async和await--回调传参数!

②通过.then==》这里使用.then就可以直接使用catch获取失败的提示信息

validate效验也可以是.then的方式,用then来接受成功的回调==》(角色权限)

btnOK() {
      this.$refs.perForm.validate().then(() => {
        if (this.formData.id) {
          return updatePermission(this.formData)
        }
        return addPermission(this.formData)
      }).then(() => {
        //  提示消息
        this.$message.success('新增成功')
        this.getPermissionList()
        this.showDialog = false
      })
    },

③通过async和await

// 点击确定时 校验整个表单
    async btnOK() {
      try {
          //validate()是组件的内部属性为表单的验证!
        await this.$refs.addEmployee.validate()
        // 调用新增接口--调用整个表单!
        await addEmployee(this.formData) // 新增员工
        // 告诉父组件更新数据
        // this.$parent 可以直接调用到父组件的实例 实际上就是父组件this
        // this.$emit
        this.$parent.getEmployeeList()
          //然后就关闭弹出层!
        this.$parent.showDialog = false
          //捕获错误!
      } catch (error) {
        console.log(error)
      }
    },

5)数据的渲染===》会涉及组件之间的传值!

-------------------------------------传递参数的补充:!!!!

vue element 适配手机端 vue elementui 移动端_数据_04

 

vue element 适配手机端 vue elementui 移动端_javascript_05

 扩展运算符扩展对象的话,会把对象的属性和他的属性值,拆解开来一一赋值给一个新对象

首先因为这个接口要的参数是一个对象,其次你解构对象后,必须要拿新对象接收之前那个为什么那样写,是因为那个isFrontDisplay不是一个表单的项所以我写外面了

4.添加功能---之关闭 / 取消功能(待续。。。。)

具体步骤:

①重新获取之前表单验证的数据--全清空操作

②在重新验证表单--利用组件的原有方法:resetFiedds()

③关闭弹出层!!!!

btnCancel() {
      this.formData = {
        name: '', // 名称
        code: '', // 标识
        description: '', // 描述
        type: '', // 类型 该类型 不需要显示 因为点击添加的时候已经知道类型了
        pid: '', // 因为做的是树 需要知道添加到哪个节点下了
        enVisible: '0' // 开启
      }
      this.$refs.perForm.resetFields() //组件的属性--表单重置!
      this.showDialog = false
    },

其他补充:

方法一:弹出层的关闭采取.sync或者取消的事件@click=“  btnCancel”

方法二:绑定取消事件(也会涉及组件的传值--一般是子传父--配合.sync)

// 子组件 update:固定写法 (update:props名称, 值)
this.$emit('update:showDialog', false) //触发事件
// 父组件 sync修饰符
<child  :showDialog.sync="showDialog" />
btnCancel() {
      this.$refs.deptForm.resetFields() // 重置校验字段
      this.$emit('update:showDialog', false) // 关闭
    }

----------------------------------------------------------------------------------------------

5..编辑功能(涉及回写)

项目:6.部分信息编辑,7.编辑角色

1..编辑部门功能实际上和新增窗口,采用的是一个组件,只不过我们需要将新增场景变成编辑场景

2.绑定点击事件--可能涉及组件传值(父传子或子传父)

2.显示弹出层以后需要获取接口的数据(其实也就是需要获取表单详情的接口)===》可以调用新增的窗口的数据!!!!???

怎么区分有时候需要在data里面要定义数据呢?

3.注:一样的,需要传递相应的数据

补充:如果父组件想拿到子组件的属性和方法===》可以通过ref来获取。

4.新增和编辑的区别在于:

①新增是弹出弹出层--然后调用接口数据--确定即可;

②编辑是先请求数据在弹出弹出层==》目的是为了不出现闪烁的问题!!!!

而且新增在绑定点击事件的时候是控制显示与隐藏。而编辑是方法名,并且需要传递id。

编辑确定的按钮会传递--新增的表单的数据!!!

async editRole(id) {
      this.roleForm = await getRoleDetail(id)
      this.showDialog = true // 为了不出现闪烁的问题 先获取数据 再弹出层
    },
      async btnOK() {
      try {
        await this.$refs.roleForm.validate()
        // 只有校验通过的情况下 才会执行await的下方内容
        // roleForm这个对象有id就是编辑 没有id就是新增
        if (this.roleForm.id) {
          await updateRole(this.roleForm)
        } else {
          // 新增业务
        }
        // 重新拉取数据
        this.getRoleList()
        this.$message.success('操作成功')
        this.showDialog = false
      } catch (error) {
        console.log(error)
      }
    },

----------------------------------------------------------------------------------------------------

7.编辑功能+新增功能一起合写!!!!!

①计算属性:显示标题

computed: {
    showTitle() {
      return this.formData.id ? '编辑部门' : '新增子部门'
    }
  },

async btnOK() {
      try {
        await this.$refs.roleForm.validate()
        // 只有校验通过的情况下 才会执行await的下方内容
        // roleForm这个对象有id就是编辑 没有id就是新增
        if (this.roleForm.id) {
          await updateRole(this.roleForm)
        } else {
          // 新增业务
          await addRole(this.roleForm)
        }
        // 重新拉取数据
        this.getRoleList()
        this.$message.success('操作成功')
        this.showDialog = false // 关闭弹层  =>  触发el-dialog的事件close事件
      } catch (error) {
        console.log(error)
      }
    },
    btnCancel() {
      this.roleForm = {
        name: '',
        description: ''
      }
      // 移除校验
      this.$refs.roleForm.resetFields()
      this.showDialog = false
    }

8.接口返回的是1.0代表男和女的整理!!!

9.组件传值的总结:

10.树状结构渲染页面的总结

11.权限篇和路由篇的总结

12.路由的页面的总结

13.token的总结:

14.接口的相关总结:

1.接口是根据restful的规则设计的   删除 delete  新增 post  修改put 获取 get

15.触发事件的总结:

1.下拉菜单的触发

①在本组件的下拉选项。==》练习:组织架构

vue element 适配手机端 vue elementui 移动端_vue.js_06

②在表单的下拉选项

2.点击下拉菜单的触发

16.插槽的使用总结: