feat: 新增权限按钮

This commit is contained in:
JiangQiming 2023-03-07 20:05:07 +08:00
parent ef26b169d4
commit 9b5e6b21c6
4 changed files with 150 additions and 236 deletions

View File

@ -17,7 +17,13 @@
:gridColumn="2"
>
<template #headerTitle>
<a-button type="primary" @click="handleAdd"> 新增 </a-button>
<PermissionButton
type="primary"
@click="handleAdd"
hasPermission="media/Cascade:add"
>
<template #icon><AIcon type="PlusOutlined" />新增</template>
</PermissionButton>
</template>
<template #card="slotProps">
<CardBox
@ -58,48 +64,14 @@
</Ellipsis>
</template>
<template #actions="item">
<a-tooltip
v-bind="item.tooltip"
:title="item.disabled && item.tooltip.title"
>
<a-popconfirm
v-if="item.popConfirm"
v-bind="item.popConfirm"
:disabled="item.disabled"
>
<a-button
:disabled="item.disabled"
v-if="item.key === 'delete'"
>
<AIcon type="DeleteOutlined" />
</a-button>
<a-button
:disabled="item.disabled"
@click="item.onClick"
v-else
>
<AIcon :type="item.icon" />
<span>{{ item.text }}</span>
</a-button>
</a-popconfirm>
<template v-else>
<a-button
:disabled="item.disabled"
@click="item.onClick"
>
<AIcon :type="item.icon" />
<span>{{ item.text }}</span>
</a-button>
</template>
</a-tooltip>
<!-- <PermissionButton
<PermissionButton
:disabled="item.disabled"
:popConfirm="item.popConfirm"
:tooltip="{
...item.tooltip,
}"
@click="item.onClick"
:hasPermission="`media/Cascade:${item.key}`"
:hasPermission="'media/Cascade:' + item.key"
>
<AIcon
type="DeleteOutlined"
@ -109,7 +81,7 @@
<AIcon :type="item.icon" />
<span>{{ item?.text }}</span>
</template>
</PermissionButton> -->
</PermissionButton>
</template>
</CardBox>
</template>
@ -141,38 +113,7 @@
</template>
<template #action="slotProps">
<a-space :size="16">
<a-tooltip
v-for="i in getActions(slotProps, 'table')"
:key="i.key"
v-bind="i.tooltip"
>
<a-popconfirm
v-if="i.popConfirm"
v-bind="i.popConfirm"
:disabled="i.disabled"
>
<a-button
:disabled="i.disabled"
style="padding: 0"
type="link"
><AIcon :type="i.icon"
/></a-button>
</a-popconfirm>
<a-button
style="padding: 0"
type="link"
v-else
@click="i.onClick && i.onClick(slotProps)"
>
<a-button
:disabled="i.disabled"
style="padding: 0"
type="link"
><AIcon :type="i.icon"
/></a-button>
</a-button>
</a-tooltip>
<!-- <template
<template
v-for="i in getActions(slotProps, 'table')"
:key="i.key"
>
@ -185,11 +126,11 @@
@click="i.onClick"
type="link"
style="padding: 0px"
:hasPermission="`device/Instance:${i.key}`"
:hasPermission="'media/Cascade:' + i.key"
>
<template #icon><AIcon :type="i.icon" /></template>
</PermissionButton>
</template> -->
</template>
</a-space>
</template>
</JProTable>
@ -331,7 +272,7 @@ const getActions = (
if (!data) return [];
const actions = [
{
key: 'edit',
key: 'update',
text: '编辑',
tooltip: {
title: '编辑',
@ -348,7 +289,7 @@ const getActions = (
},
},
{
key: 'view',
key: 'channel',
text: '选择通道',
tooltip: {
title: '选择通道',
@ -365,7 +306,7 @@ const getActions = (
},
},
{
key: 'debug',
key: 'push',
text: '推送',
tooltip: {
title:

View File

@ -15,7 +15,13 @@
:params="params"
>
<template #headerTitle>
<a-button type="primary" @click="handleAdd"> 新增 </a-button>
<PermissionButton
type="primary"
@click="handleAdd"
hasPermission="media/Device:add"
>
<template #icon><AIcon type="PlusOutlined" />新增</template>
</PermissionButton>
</template>
<template #card="slotProps">
<CardBox
@ -64,65 +70,47 @@
</a-row>
</template>
<template #actions="item">
<a-tooltip
v-bind="item.tooltip"
:title="item.disabled && item.tooltip.title"
<PermissionButton
:disabled="item.disabled"
:popConfirm="item.popConfirm"
:tooltip="{
...item.tooltip,
}"
@click="item.onClick"
:hasPermission="'media/Device:' + item.key"
>
<a-popconfirm
v-if="item.popConfirm"
v-bind="item.popConfirm"
:disabled="item.disabled"
>
<a-button :disabled="item.disabled">
<AIcon type="DeleteOutlined" />
</a-button>
</a-popconfirm>
<AIcon
type="DeleteOutlined"
v-if="item.key === 'delete'"
/>
<template v-else>
<a-button
:disabled="item.disabled"
@click="item.onClick"
>
<AIcon :type="item.icon" />
<span>{{ item.text }}</span>
</a-button>
<AIcon :type="item.icon" />
<span>{{ item?.text }}</span>
</template>
</a-tooltip>
</PermissionButton>
</template>
</CardBox>
</template>
<template #action="slotProps">
<a-space :size="16">
<a-tooltip
<template
v-for="i in getActions(slotProps, 'table')"
:key="i.key"
v-bind="i.tooltip"
>
<a-popconfirm
v-if="i.popConfirm"
v-bind="i.popConfirm"
<PermissionButton
:disabled="i.disabled"
>
<a-button
:disabled="i.disabled"
style="padding: 0"
type="link"
><AIcon :type="i.icon"
/></a-button>
</a-popconfirm>
<a-button
style="padding: 0"
:popConfirm="i.popConfirm"
:tooltip="{
...i.tooltip,
}"
@click="i.onClick"
type="link"
v-else
@click="i.onClick && i.onClick(slotProps)"
style="padding: 0px"
:hasPermission="'media/Device:' + i.key"
>
<a-button
:disabled="i.disabled"
style="padding: 0"
type="link"
><AIcon :type="i.icon"
/></a-button>
</a-button>
</a-tooltip>
<template #icon><AIcon :type="i.icon" /></template>
</PermissionButton>
</template>
</a-space>
</template>
</JProTable>
@ -254,7 +242,7 @@ const getActions = (
if (!data) return [];
const actions = [
{
key: 'edit',
key: 'update',
text: '编辑',
tooltip: {
title: '编辑',
@ -278,9 +266,6 @@ const getActions = (
},
icon: 'PartitionOutlined',
onClick: () => {
// router.push(
// `/media/device/Channel?id=${data.id}&type=${data.provider}`,
// );
menuStory.jumpPage(
'media/Device/Channel',
{},
@ -292,7 +277,7 @@ const getActions = (
},
},
{
key: 'debug',
key: 'view', // updateChannel
text: '更新通道',
tooltip: {
title:
@ -311,6 +296,7 @@ const getActions = (
icon: 'SyncOutlined',
onClick: () => {
// updateChannel()
console.log('updateChannel: ', data);
},
},
{

View File

@ -17,16 +17,22 @@
>
<template #headerTitle>
<a-space>
<a-button type="primary" @click="handleAdd">
<PermissionButton
type="primary"
@click="handleAdd"
hasPermission="notice/Config:add"
>
新增
</a-button>
</PermissionButton>
<a-upload
name="file"
accept="json"
:showUploadList="false"
:before-upload="beforeUpload"
>
<a-button>导入</a-button>
<PermissionButton hasPermission="notice/Config:import">
导入
</PermissionButton>
</a-upload>
<a-popconfirm
title="确认导出?"
@ -34,7 +40,9 @@
cancel-text="取消"
@confirm="handleExport"
>
<a-button>导出</a-button>
<PermissionButton hasPermission="notice/Config:export">
导出
</PermissionButton>
</a-popconfirm>
</a-space>
</template>
@ -95,34 +103,45 @@
v-for="(o, i) in item.children"
:key="i"
>
<a-button
<PermissionButton
type="link"
@click="o.onClick"
:hasPermission="`notice/Config:${o.key}`"
>
<AIcon :type="o.icon" />
<template #icon>
<AIcon :type="o.icon" />
</template>
<span>{{ o.text }}</span>
</a-button>
</PermissionButton>
</a-menu-item>
</a-menu>
</template>
</a-dropdown>
<a-popconfirm
<j-popconfirm
v-else-if="item.key === 'delete'"
v-bind="item.popConfirm"
:disabled="item.disabled"
>
<a-button :disabled="item.disabled">
<AIcon type="DeleteOutlined" />
</a-button>
</a-popconfirm>
<PermissionButton
:disabled="item.disabled"
:hasPermission="`notice/Config:${item.key}`"
>
<template #icon>
<AIcon type="DeleteOutlined" />
</template>
</PermissionButton>
</j-popconfirm>
<template v-else>
<a-button
<PermissionButton
:disabled="item.disabled"
@click="item.onClick"
:hasPermission="`notice/Config:${item.key}`"
>
<AIcon :type="item.icon" />
<template #icon>
<AIcon :type="item.icon" />
</template>
<span>{{ item.text }}</span>
</a-button>
</PermissionButton>
</template>
</a-tooltip>
</template>
@ -130,37 +149,24 @@
</template>
<template #action="slotProps">
<a-space :size="16">
<a-tooltip
<template
v-for="i in getActions(slotProps, 'table')"
:key="i.key"
v-bind="i.tooltip"
>
<a-popconfirm
v-if="i.popConfirm"
v-bind="i.popConfirm"
<PermissionButton
:disabled="i.disabled"
>
<a-button
:disabled="i.disabled"
style="padding: 0"
type="link"
><AIcon :type="i.icon"
/></a-button>
</a-popconfirm>
<a-button
style="padding: 0"
:popConfirm="i.popConfirm"
:tooltip="{
...i.tooltip,
}"
@click="i.onClick"
type="link"
v-else
@click="i.onClick && i.onClick(slotProps)"
style="padding: 0px"
:hasPermission="'notice/Config:' + i.key"
>
<a-button
:disabled="i.disabled"
style="padding: 0"
type="link"
><AIcon :type="i.icon"
/></a-button>
</a-button>
</a-tooltip>
<template #icon><AIcon :type="i.icon" /></template>
</PermissionButton>
</template>
</a-space>
</template>
</JProTable>
@ -324,7 +330,7 @@ const getActions = (
if (!data) return [];
const actions = [
{
key: 'edit',
key: 'update',
text: '编辑',
tooltip: {
title: '编辑',
@ -349,7 +355,7 @@ const getActions = (
},
},
{
key: 'debug',
key: 'log',
text: '通知记录',
tooltip: {
title: '通知记录',
@ -385,7 +391,7 @@ const getActions = (
icon: 'EllipsisOutlined',
children: [
{
key: 'debug',
key: 'export',
text: '导出',
tooltip: {
title: '导出',
@ -396,7 +402,7 @@ const getActions = (
},
},
{
key: 'sync',
key: 'bind',
text: '同步用户',
tooltip: {
title: '同步用户',

View File

@ -17,16 +17,24 @@
>
<template #headerTitle>
<a-space>
<a-button type="primary" @click="handleAdd">
<PermissionButton
type="primary"
@click="handleAdd"
hasPermission="notice/Template:add"
>
新增
</a-button>
</PermissionButton>
<a-upload
name="file"
accept="json"
:showUploadList="false"
:before-upload="beforeUpload"
>
<a-button>导入</a-button>
<PermissionButton
hasPermission="notice/Template:import"
>
导入
</PermissionButton>
</a-upload>
<a-popconfirm
title="确认导出?"
@ -34,7 +42,11 @@
cancel-text="取消"
@confirm="handleExport"
>
<a-button>导出</a-button>
<PermissionButton
hasPermission="notice/Template:export"
>
导出
</PermissionButton>
</a-popconfirm>
</a-space>
</template>
@ -77,42 +89,24 @@
</a-row>
</template>
<template #actions="item">
<a-tooltip
v-bind="item.tooltip"
:title="item.disabled && item.tooltip.title"
<PermissionButton
:disabled="item.disabled"
:popConfirm="item.popConfirm"
:tooltip="{
...item.tooltip,
}"
@click="item.onClick"
:hasPermission="'notice/Template:' + item.key"
>
<a-popconfirm
v-if="item.popConfirm"
v-bind="item.popConfirm"
:disabled="item.disabled"
>
<a-button :disabled="item.disabled">
<AIcon
type="DeleteOutlined"
v-if="item.key === 'delete'"
/>
<template v-else>
<AIcon :type="item.icon" />
<span>{{ item.text }}</span>
</template>
</a-button>
</a-popconfirm>
<AIcon
type="DeleteOutlined"
v-if="item.key === 'delete'"
/>
<template v-else>
<a-button
:disabled="item.disabled"
@click="item.onClick"
>
<AIcon
type="DeleteOutlined"
v-if="item.key === 'delete'"
/>
<template v-else>
<AIcon :type="item.icon" />
<span>{{ item.text }}</span>
</template>
</a-button>
<AIcon :type="item.icon" />
<span>{{ item?.text }}</span>
</template>
</a-tooltip>
</PermissionButton>
</template>
</CardBox>
</template>
@ -126,37 +120,24 @@
</template>
<template #action="slotProps">
<a-space :size="16">
<a-tooltip
<template
v-for="i in getActions(slotProps, 'table')"
:key="i.key"
v-bind="i.tooltip"
>
<a-popconfirm
v-if="i.popConfirm"
v-bind="i.popConfirm"
<PermissionButton
:disabled="i.disabled"
>
<a-button
:disabled="i.disabled"
style="padding: 0"
type="link"
><AIcon :type="i.icon"
/></a-button>
</a-popconfirm>
<a-button
style="padding: 0"
:popConfirm="i.popConfirm"
:tooltip="{
...i.tooltip,
}"
@click="i.onClick"
type="link"
v-else
@click="i.onClick && i.onClick(slotProps)"
style="padding: 0px"
:hasPermission="'notice/Template:' + i.key"
>
<a-button
:disabled="i.disabled"
style="padding: 0"
type="link"
><AIcon :type="i.icon"
/></a-button>
</a-button>
</a-tooltip>
<template #icon><AIcon :type="i.icon" /></template>
</PermissionButton>
</template>
</a-space>
</template>
</JProTable>
@ -286,7 +267,7 @@ const handleAdd = () => {
* 导入
*/
const beforeUpload = (file: any) => {
console.log('file: ', file);
// console.log('file: ', file);
const reader = new FileReader();
reader.readAsText(file);
reader.onload = async (result) => {
@ -330,7 +311,7 @@ const getActions = (
if (!data) return [];
const actions = [
{
key: 'edit',
key: 'update',
text: '编辑',
tooltip: {
title: '编辑',
@ -355,7 +336,7 @@ const getActions = (
},
},
{
key: 'debug',
key: 'export',
text: '导出',
tooltip: {
title: '导出',
@ -366,7 +347,7 @@ const getActions = (
},
},
{
key: 'debug',
key: 'log',
text: '通知记录',
tooltip: {
title: '通知记录',