feat(baTable):独立出表格内部组件自动调用的鉴权方法,便于开发者重写

This commit is contained in:
妙码生花 2023-09-05 12:22:09 +08:00
parent daae1db4e7
commit e3a36267f3
3 changed files with 25 additions and 51 deletions

View File

@ -114,9 +114,11 @@
/> />
<!-- 按钮组 --> <!-- 按钮组 -->
<!-- 只对默认的编辑删除排序按钮进行鉴权其他按钮请通过 display 属性控制按钮是否显示 -->
<div v-if="field.render == 'buttons' && field.buttons"> <div v-if="field.render == 'buttons' && field.buttons">
<template v-for="(btn, idx) in field.buttons" :key="idx"> <template v-for="(btn, idx) in field.buttons" :key="idx">
<template v-if="btn.display ? btn.display(row, field) : true"> <template v-if="btn.display ? btn.display(row, field) : true">
<!-- 常规按钮 -->
<el-button <el-button
v-if="btn.render == 'basicButton'" v-if="btn.render == 'basicButton'"
v-blur v-blur
@ -130,28 +132,15 @@
<Icon :name="btn.icon" /> <Icon :name="btn.icon" />
<div v-if="btn.text" class="table-operate-text">{{ btn.text }}</div> <div v-if="btn.text" class="table-operate-text">{{ btn.text }}</div>
</el-button> </el-button>
<!-- 带提示信息的按钮 -->
<el-tooltip <el-tooltip
v-if="btn.render == 'tipButton'" v-if="btn.render == 'tipButton' && ((btn.name == 'edit' && baTable.auth('edit')) || btn.name != 'edit')"
:disabled="btn.title && !btn.disabledTip ? false : true" :disabled="btn.title && !btn.disabledTip ? false : true"
:content="btn.title ? t(btn.title) : ''" :content="btn.title ? t(btn.title) : ''"
placement="top" placement="top"
> >
<el-button <el-button
v-if="btn.name == 'edit'"
v-auth="'edit'"
v-blur
@click="onButtonClick(btn)"
:class="btn.class"
class="table-operate"
:type="btn.type"
:disabled="btn.disabled && btn.disabled(row, field)"
v-bind="btn.attr"
>
<Icon :name="btn.icon" />
<div v-if="btn.text" class="table-operate-text">{{ btn.text }}</div>
</el-button>
<el-button
v-else
v-blur v-blur
@click="onButtonClick(btn)" @click="onButtonClick(btn)"
:class="btn.class" :class="btn.class"
@ -164,8 +153,10 @@
<div v-if="btn.text" class="table-operate-text">{{ btn.text }}</div> <div v-if="btn.text" class="table-operate-text">{{ btn.text }}</div>
</el-button> </el-button>
</el-tooltip> </el-tooltip>
<!-- 带确认框的按钮 -->
<el-popconfirm <el-popconfirm
v-if="btn.render == 'confirmButton'" v-if="btn.render == 'confirmButton' && ((btn.name == 'delete' && baTable.auth('del')) || btn.name != 'delete')"
:disabled="btn.disabled && btn.disabled(row, field)" :disabled="btn.disabled && btn.disabled(row, field)"
v-bind="btn.popconfirm" v-bind="btn.popconfirm"
@confirm="onButtonClick(btn)" @confirm="onButtonClick(btn)"
@ -174,20 +165,6 @@
<div class="ml-6"> <div class="ml-6">
<el-tooltip :disabled="btn.title ? false : true" :content="btn.title ? t(btn.title) : ''" placement="top"> <el-tooltip :disabled="btn.title ? false : true" :content="btn.title ? t(btn.title) : ''" placement="top">
<el-button <el-button
v-if="btn.name == 'delete'"
v-auth="'del'"
v-blur
:class="btn.class"
class="table-operate"
:type="btn.type"
:disabled="btn.disabled && btn.disabled(row, field)"
v-bind="btn.attr"
>
<Icon :name="btn.icon" />
<div v-if="btn.text" class="table-operate-text">{{ btn.text }}</div>
</el-button>
<el-button
v-else
v-blur v-blur
:class="btn.class" :class="btn.class"
class="table-operate" class="table-operate"
@ -202,27 +179,15 @@
</div> </div>
</template> </template>
</el-popconfirm> </el-popconfirm>
<!-- 带提示的可拖拽按钮 -->
<el-tooltip <el-tooltip
v-if="btn.render == 'moveButton'" v-if="btn.render == 'moveButton' && ((btn.name == 'weigh-sort' && baTable.auth('sortable')) || btn.name != 'weigh-sort')"
:disabled="btn.title && !btn.disabledTip ? false : true" :disabled="btn.title && !btn.disabledTip ? false : true"
:content="btn.title ? t(btn.title) : ''" :content="btn.title ? t(btn.title) : ''"
placement="top" placement="top"
> >
<el-button <el-button
v-if="btn.name == 'weigh-sort'"
v-auth="'sortable'"
:class="btn.class"
class="table-operate move-button"
:type="btn.type"
:disabled="btn.disabled && btn.disabled(row, field)"
v-bind="btn.attr"
>
<Icon :name="btn.icon" />
<div v-if="btn.text" class="table-operate-text">{{ btn.text }}</div>
</el-button>
<el-button
v-else
v-blur
:class="btn.class" :class="btn.class"
class="table-operate move-button" class="table-operate move-button"
:type="btn.type" :type="btn.type"

View File

@ -17,20 +17,20 @@
</el-button> </el-button>
</el-tooltip> </el-tooltip>
<slot name="refreshAppend"></slot> <slot name="refreshAppend"></slot>
<el-tooltip v-if="props.buttons.includes('add') && auth('add')" :content="t('Add')" placement="top"> <el-tooltip v-if="props.buttons.includes('add') && baTable.auth('add')" :content="t('Add')" placement="top">
<el-button v-blur @click="onAction('add')" class="table-header-operate" type="primary"> <el-button v-blur @click="onAction('add')" class="table-header-operate" type="primary">
<Icon name="fa fa-plus" /> <Icon name="fa fa-plus" />
<span class="table-header-operate-text">{{ t('Add') }}</span> <span class="table-header-operate-text">{{ t('Add') }}</span>
</el-button> </el-button>
</el-tooltip> </el-tooltip>
<el-tooltip v-if="props.buttons.includes('edit') && auth('edit')" :content="t('Edit selected row')" placement="top"> <el-tooltip v-if="props.buttons.includes('edit') && baTable.auth('edit')" :content="t('Edit selected row')" placement="top">
<el-button v-blur @click="onAction('edit')" :disabled="!enableBatchOpt" class="table-header-operate" type="primary"> <el-button v-blur @click="onAction('edit')" :disabled="!enableBatchOpt" class="table-header-operate" type="primary">
<Icon name="fa fa-pencil" /> <Icon name="fa fa-pencil" />
<span class="table-header-operate-text">{{ t('Edit') }}</span> <span class="table-header-operate-text">{{ t('Edit') }}</span>
</el-button> </el-button>
</el-tooltip> </el-tooltip>
<el-popconfirm <el-popconfirm
v-if="props.buttons.includes('delete') && auth('del')" v-if="props.buttons.includes('delete') && baTable.auth('del')"
@confirm="onAction('delete')" @confirm="onAction('delete')"
:confirm-button-text="t('Delete')" :confirm-button-text="t('Delete')"
:cancel-button-text="t('Cancel')" :cancel-button-text="t('Cancel')"
@ -125,7 +125,7 @@
<script setup lang="ts"> <script setup lang="ts">
import { reactive, computed, inject } from 'vue' import { reactive, computed, inject } from 'vue'
import { debounce, auth } from '/@/utils/common' import { debounce } from '/@/utils/common'
import type baTableClass from '/@/utils/baTable' import type baTableClass from '/@/utils/baTable'
import ComSearch from '/@/components/table/comSearch/index.vue' import ComSearch from '/@/components/table/comSearch/index.vue'
import { useI18n } from 'vue-i18n' import { useI18n } from 'vue-i18n'

View File

@ -1,5 +1,5 @@
import { reactive } from 'vue' import { reactive } from 'vue'
import { getArrayKey } from '/@/utils/common' import { auth, getArrayKey } from '/@/utils/common'
import type { baTableApi } from '/@/api/common' import type { baTableApi } from '/@/api/common'
import Sortable from 'sortablejs' import Sortable from 'sortablejs'
import { findIndexRow } from '/@/components/table' import { findIndexRow } from '/@/components/table'
@ -69,6 +69,15 @@ export default class baTable {
this.initComSearch(!isUndefined(route) ? route.query : {}) this.initComSearch(!isUndefined(route) ? route.query : {})
} }
/**
*
* addedit
*
*/
auth(node: string) {
return auth(node)
}
/** /**
* *
* @param funName * @param funName