控制权限按钮的显示隐藏

权限按钮的显示隐藏

 <template slot="top-right">
            <el-button
                v-if="fn('organizationManage-new')"
                type="primary"
                icon="el-icon-plus"
                :disabled="!hasCurrentNodeData"
                @click="showAddOrg"
            >新增组织</el-button>
            <!-- v-if="$checkBtnAuth('delete', authData, true)" -->
            <el-button
                v-if="fn('organizationManage-delete')"
                :disabled="!selected_rows||selected_rows.length<=0"
                @click="handleClickDelete"
            >删除</el-button>
        </template>
//修改权限显示
  fn(btn) {
    let arr = JSON.parse(sessionStorage.getItem('vuex')).all_has_permission_code
    let flag = arr.indexOf(btn)
    if (flag == -1) {
      return false
    } else {
      return true
    }
  }

控制按钮权限操作

<template>
    <div class="app-container">
        <el-button
            type="primary"
            icon="el-icon-plus"
            @click="addOneRow"
        >新增一行</el-button>
        <el-table
            v-loading="item_menu_permission_loading"
            :data="itemMenuPermissionTable"
            max-height="400px"
            height="400px"
            border
            fit
            highlight-current-row
            style="width: 100%;"
        >
            <el-table-column
                type="index"
                align="center"
                label="ID"
                width="40"
            ></el-table-column>

            <el-table-column
                min-width="140px"
                align="center"
                label="权限名称"
            >
                <template slot-scope="{row}">
                    <template v-if="row.edit">
                        <div class="edit">
                            <el-input
                                v-model="row.actionName"
                                class="edit-input"
                            />
                            <el-button
                                class="cancel-btn"
                                type="text"
                                icon="el-icon-refresh"
                                @click="cancelEdit(row)"
                            >取消</el-button>
                        </div>
                    </template>
                    <span v-else>{{ row.actionName }}</span>
                </template>
            </el-table-column>

            <el-table-column
                min-width="260px"
                label="权限编码"
            >
                <template slot-scope="{row}">
                    <template v-if="row.edit">
                        <div class="edit">
                            <el-input
                                v-model.trim="row.actionCode"
                                class="edit-input"
                            />
                            <el-button
                                class="cancel-btn"
                                icon="el-icon-refresh"
                                type="text"
                                @click="cancelEdit(row)"
                            >取消</el-button>
                        </div>
                    </template>
                    <span v-else>{{ row.actionCode }}</span>
                </template>
            </el-table-column>

            <el-table-column
                width="110px"
                label="权限类型"
            >
                <template slot-scope="{row}">
                    <el-select
                        v-model="row.actionOperation"
                        placeholder
                    >
                        <el-option
                            v-for="item in action_operation_options"
                            :key="item.value"
                            :label="item.label"
                            :value="item.value"
                        ></el-option>
                    </el-select>
                </template>
            </el-table-column>

            <el-table-column
                width="110px"
                label="请求类型"
            >
                <template slot-scope="{row}">
                    <el-select
                        v-model="row.actionType"
                        placeholder
                    >
                        <el-option
                            v-for="item in actionTypeOptions"
                            :key="item.value"
                            :label="item.value"
                            :value="item.value"
                        ></el-option>
                    </el-select>
                </template>
            </el-table-column>
            <el-table-column
                min-width="100px"
                label="请求地址"
            >
                <template slot-scope="{row}">
                    <template v-if="row.edit">
                        <div class="edit">
                            <el-input
                                v-model.trim="row.actionURL"
                                class="edit-input"
                            />
                            <el-button
                                class="cancel-btn"
                                icon="el-icon-refresh"
                                type="text"
                                @click="cancelEdit(row)"
                            >取消</el-button>
                        </div>
                    </template>
                    <span v-else>{{ row.actionURL }}</span>
                </template>
            </el-table-column>
            <el-table-column
                width="80px"
                label="启用"
            >
                <template slot-scope="{row}">
                    <el-switch
                        v-model="row.ifUse"
                        :active-value="1"
                        :inactive-value="0"
                        @change="singleControlSwitch(row)"
                    ></el-switch>
                </template>
            </el-table-column>

            <el-table-column
                align="center"
                label="操作"
                width="140"
            >
                <template slot-scope="{row,$index}">
                    <el-button
                        v-if="row.edit"
                        type="success"
                        plain
                        @click="confirmEdit(row)"
                    >完成</el-button>
                    <el-button
                        v-else
                        type="primary"
                        plain
                        @click="handleEdit(row)"
                    >编辑</el-button>
                    <el-button
                        type="text"
                        @click="handleDelete(row,$index)"
                    >删除</el-button>
                </template>
            </el-table-column>
        </el-table>
    </div>
</template>
export default class ItemPermissionTable extends Vue {
  filters = {
    statusFilter(status) {
      const statusMap = {
        published: 'success',
        draft: 'info',
        deleted: 'danger'
      }
      return statusMap[status]
    }
  }

  listLoading = true
  // 权限类型
  //请求类型
  actionTypeOptions = [
    {
      value: 'GET'
    },
    {
      value: 'POST'
    },
    {
      value: 'PUT'
    },
    {
      value: 'DELETE'
    }
  ]

  @vuexSystemMenu.State current_menu!: IMenuDetail
  @vuexSystemMenu.State item_menu_permission_loading
  @vuexSystemMenu.State action_operation_options
  // 权限列表
  @vuexSystemMenu.State item_menu_permission

  get itemMenuPermissionTable(): IItemMenuPermissionForm[] {
    return this.item_menu_permission
  }

  set itemMenuPermissionTable(val: IItemMenuPermissionForm[]) {
    this.itemMenuPermissionTable = val
  }

  singleControlSwitch({ ifUse, id }) {
    // console.log(ifUse, id, 2)

    getRestart(id, ifUse)
      .then(res => {
        //console.log(res)
        this.$notify.success(`${['禁用', '启用'][ifUse]}成功!`)
      })
      .catch(e => {
        // this.$notify.error(`${['禁用', '启用'][ifUse]}失败: ${e.message}`)
      })
  }

  handleEdit(row) {
    this.$set(row, 'edit', true)
  }

  handleDelete(row, $index) {
    this.$confirm(`确定删除选择的权限?`, { type: 'warning' }).then(() => {
      if (!row.id) {
        this.itemMenuPermissionTable.splice($index, 1)
        return
      }
      deleteMenuPermission([row.id])
        .then(res => {
          this.itemMenuPermissionTable.splice($index, 1)
        })
        .catch(e => {
          this.$notify.error(`删除失败: ${e.message}`)
        })
    })
  }

  addOneRow() {
    this.itemMenuPermissionTable.push({
      menuId: this.current_menu.id,
      actionOperation: 'check',
      actionCode: '',
      actionName: '',
      actionType: 'GET',
      actionURL: '',
      ifUse: 1,
      edit: true
    })
  }

  cancelEdit(row) {
    row.edit = false
    this.$message({
      message: '已取消编辑,将不保存修改!',
      type: 'warning'
    })
  }

  confirmEdit(row) {
    this.$set(row, 'edit', false)
    postMenuPermission(row)
      .then(res => {
        this.$notify.success(`保存成功!`)
      })
      .catch(e => {
        this.$notify.error(`保存失败: ${e.message}`)
      })
  }
}
前端根据权限控制某些元素的显示隐藏,通常可以采用以下两种方式: 1. 通过 v-if 或 v-show 控制元素的显示隐藏Vue.js 中,可以通过 v-if 或 v-show 指令来控制元素的显示隐藏。v-if 指令可以根据表达式的值来动态添加或移除元素,而 v-show 指令则是根据表达式的值来控制元素的显示隐藏。 例如,以下代码中的按钮只有在用户具备某个权限时才会显示: ```html <template> <div> <button v-if="hasPermission">操作</button> </div> </template> <script> export default { data() { return { hasPermission: false // 根据用户权限来设置 }; } }; </script> ``` 2. 通过 CSS 样式控制元素的显示隐藏 通过设置 CSS 样式的 display 属性来控制元素的显示隐藏,这种方式通常需要在 HTML 元素上添加一个 CSS 类名,并在 CSS 样式中定义该类名的显示隐藏样式。 例如,以下代码中的按钮只有在用户具备某个权限时才会显示: ```html <template> <div> <button class="btn-permission">操作</button> </div> </template> <style> .btn-permission { display: none; /* 默认隐藏 */ } .has-permission .btn-permission { display: inline-block; /* 具备权限显示 */ } </style> <script> export default { data() { return { hasPermission: false // 根据用户权限来设置 }; }, computed: { classObject() { return { 'has-permission': this.hasPermission }; } } }; </script> ``` 以上两种方式都可以根据用户权限控制某些元素的显示隐藏,具体使用哪种方式可以根据实际情况来选择。
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值