# OperateLayer

搜索层-operateLayer

用于对表格数据进行增删改查(CRUD)等一系列操作

# 说明

增、删、改、查中key是相对固定的,也就是说要保持一一对应,最好不要试图改变它们;其他的可以自定义key。

  • add-增
  • remove-删
  • edit-改
  • search-查



 



















<template>
  <ry-layer-page
    :search-layer="searchLayer"
    :operate-layer="operateLayer"
    :display-layer="displayLayer"
  />
</template>
<script>
export default {
  data() {
    return {
      operateLayer: {
        add: { label: '新增' },
        edit: { label: '编辑' },
        remove: { label: '删除' },
        search: { label: '查看' },
        warn: { label: '预警' }
      }
    }
  }
}
</script>

此时页面操作层就会有对应的操作按钮,但是这些按钮还没有赋予任何的功能。如下图:

# 配置

让我们来为钮添加一些功能,在添加之前,我们需要对按钮进行装饰,装饰成我们需要的样子

# 使用示例

解释说明

操作层-operateLayer中的每一个对象为一个操作项。

在增删改查接口调取中,希望后端通过post、delete、put、get 来对增删改查(CRUD)区分,这样我们只需要通过method 属性来区分不同接口即可,可以保持url 接口不需要来回改变;

操作项中的params 是向接口传递的表单信息,可以设置默认自带信息,具体的信息需要在mode 参数中配置;当我们需要向接口传递表单信息的时候,此时params 为必传项,即使设置为{}空对象,操作项中params 对象就是表单中的双向绑定对象。

当我们需要对按钮做按钮级权限的时候,使用hasPermi 属性,routeName 根据若依框架的路由配置,直接获取当前页面的路由名。

<script>
export default {
  data() {
    const routeName = this.$route.name.toLowerCase()
    const BASE_URL = '/his/office'
    return {
      operateLayer: {
        add: {
          size: 'mini',
          type: 'primary',
          label: '新增',
          plain: true,
          circle: true,
          url: `${BASE_URL}`,
          method: 'post',
          params: {},
          hasPermi: `${routeName}:add`,
          mode: {}
        },
        edit: {
          size: 'mini',
          type: 'primary',
          label: '修改',
          disabled: 'single',
          method: 'put',
          url: `${BASE_URL}`,
          params: {
            show: true //可设置默认参数
          },
          hasPermi: `${routeName}:edit`,
          mode: {}
        }
      }
    }
  }
}
</script>

mode属性

对于按钮操作方式的具体配置mode 我们在下面进行详细的说明。

# 操作项隐藏

支持回调函数,返回Boolean值类型,只支持在行内隐藏。在上方一般是控制 disabled

<script>
import Custom from './Custom'
export default {
  data() {
     // 搜索层
    const sear={
      size: 'mini',
      type: 'text',
      label: '修改',
      show: 'table',
      params: {},
      hidden(row) {
        return row.status !== '1';
      },
      method: 'put',
      url: `${BASE_URL}/group/update`,
      mode: {
       ...
      }
    },
    return {
    }
  }
}
</script>

# beforeSubmit 前置提交钩子

  • 前置钩子用于前置判断或更改参数
  • 可返回一个promise的Boolean值,用于中止提交操作
<script>
import Custom from './Custom'
export default {
  data() {
      // 搜索层
    const sear={
      size: 'mini',
      type: 'text',
      label: '修改',
      show: 'table',
      params: {},
      method: 'put',
      url: `${BASE_URL}/group/update`,
      beforeSubmit: this.handleSubmitUpdate / addCallback,
      mode: {
        type: 'Dialog',
        top: '25vh',
        labelWidth: '150px',
        closeOnClickModal: false,
        width: '1000px',
        row: true,
        form
      }
    },
    return {
    }
  }
  methods: {
    /** 可直接修改参数信息 */
    addCallback(params) {
      params.dpModelBusinessProjectDTOList = params.dpModelBusinessProjectDTOList.map((r) => {
        return {
          projectId: r
        };
      });
    },
    /** 返回false就中止调取接口,否则调用接口数据 */
    handleSubmitUpdate(val) {
      return new Promise((resolve) => {
        deletecheck({ groupId: val.params.groupId }).then((res) => {
          const flag = !!res.data.content;
          if (!flag) {
            this.$message({
              showClose: true,
              message: `请先删除相应的库表资源再进行修改操作`,
              type: 'warning'
            });
          }
          resolve(flag);
        });
      });
    },
  },
}
</script>

# beforeRouter 路由跳转前置钩子

返回一个Boolean值,判断能不能跳转

<script>
import Custom from './Custom'
export default {
  data() {
      // 搜索层
    const preview = {
      size: 'mini',
      type: 'text',
      label: '预览',
      show: 'table',
      params: {},
      method: 'put',
      url: `${BASE_URL}/group/update`,
      mode: {
        type: 'RouterPage',
        detail: true,
        beforeRouter: this.handleJump,
        router: {
          target: '_blank',
          path: '/genneralView',
          query: {
            row_id: '',
            preview: true
          }
        }
      }
    },
    return {
    }
  }
  methods: {
    /** 跳转前的判断 */
    handleJump(item) {
      const nums = item[0].associationNum;
      if (!nums) {
        this.$message({
          message: '该模型下没有任务...',
          type: 'warning'
        });
      }
      return nums;
    },
  },
}
</script>

# 属性

属性 说明 类型 可选值 默认值
show 是否显示,以及按钮的位置,默认在表格上,可配置在表格内; string table
size 尺寸 string
type 类型 string success / info / warning / error
icon 图标类名 string
plain 是否朴素按钮 boolean false
round 是否圆角按钮 boolean false
circle 是否圆形按钮 boolean false
disabled 单选/多选/自定义 string /function(row) single/multipe
disabledType 当disabled为函数时,用该属性来判断是单选还是多选 string single/multipe single
label 标题 string
hasPermi 权限 string
url 操作按钮最后需要调的接口 string
method 接口类型 string
params 接口的参数 object
hidden 操作项在行内展示时隐藏 object
multiPath 查看详情时,path传参多个字段,不仅仅传id了,multiPath: ["id", "tjzt"]多个参数,并且这些参数要在row中或获取详情的对象中出现! function(row) / Boolean
beforeSubmit 提交前置钩子用于前置判断或更改参数 function(row)
mode 按钮的操作方式 object

# 操作方式

当我们点击按钮的时候,我们怎么知道每个按钮是干嘛的呢,新增功能具体新增哪些内容,删除功能怎么确认删除?此时就要用到mode 这个参数了

# mode的七种类型

类型 功能 说明
Dialog 弹框,用于比较简单的弹框场景 弹框
warning、info、success、error 确认弹框,用于删除操作等 确认消息弹框
CustomDialog 向当前页面中插入一个有dialog的组件,dialog组件中内容完全自定义,用于比较复杂的弹框场景 自定义弹框
CustomPage 点击按钮后,跳转到一个新的组件页面,可在该组件内完成某些操作后返回主页面,用于比较复杂的场景 自定义页面
RouterPage 点击按钮后,跳转到一个路由页面,可在该路由页面内完成某些操作后返回主页面,用于比较复杂的场景 自定义路由页面
Export 可根据表格的选中状态导出文件和一键全部导出 导出列表文件

让我们来逐一了解下每种不同操作类型的使用情况;

提示

每种类型的操作方式,各属性配置略有不同,需要针对每种类型操作配置不同的属性!