Commit 6afee415a3a8007f13af57892d62759ffbcde5a5

Authored by zuihou
1 parent 8b2e0f66

feat(table): Table operation columns support permission codes

src/components/Table/src/components/TableAction.vue
... ... @@ -25,16 +25,17 @@
25 25 </template>
26 26 <script lang="ts">
27 27 import { defineComponent, PropType, computed, toRaw } from 'vue';
28   -
29 28 import { MoreOutlined } from '@ant-design/icons-vue';
  29 + import { Divider } from 'ant-design-vue';
  30 +
30 31 import Icon from '/@/components/Icon/index';
31 32 import { ActionItem, TableActionType } from '/@/components/Table';
32 33 import { PopConfirmButton } from '/@/components/Button';
33   - import { Divider } from 'ant-design-vue';
34 34 import { Dropdown } from '/@/components/Dropdown';
35 35  
36 36 import { useDesign } from '/@/hooks/web/useDesign';
37 37 import { useTableContext } from '../hooks/useTableContext';
  38 + import { usePermission } from '/@/hooks/web/usePermission';
38 39  
39 40 import { propTypes } from '/@/utils/propTypes';
40 41 import { ACTION_COLUMN_FLAG } from '../const';
... ... @@ -61,33 +62,42 @@
61 62 table = useTableContext();
62 63 }
63 64  
  65 + const { hasPermission } = usePermission();
64 66 const getActions = computed(() => {
65   - return (toRaw(props.actions) || []).map((action) => {
66   - const { popConfirm } = action;
67   - return {
68   - type: 'link',
69   - size: 'small',
70   - ...action,
71   - ...(popConfirm || {}),
72   - onConfirm: popConfirm?.confirm,
73   - onCancel: popConfirm?.cancel,
74   - enable: !!popConfirm,
75   - };
76   - });
  67 + return (toRaw(props.actions) || [])
  68 + .filter((action) => {
  69 + return hasPermission(action.auth);
  70 + })
  71 + .map((action) => {
  72 + const { popConfirm } = action;
  73 + return {
  74 + type: 'link',
  75 + size: 'small',
  76 + ...action,
  77 + ...(popConfirm || {}),
  78 + onConfirm: popConfirm?.confirm,
  79 + onCancel: popConfirm?.cancel,
  80 + enable: !!popConfirm,
  81 + };
  82 + });
77 83 });
78 84  
79 85 const getDropdownList = computed(() => {
80   - return (toRaw(props.dropDownActions) || []).map((action, index) => {
81   - const { label, popConfirm } = action;
82   - return {
83   - ...action,
84   - ...popConfirm,
85   - onConfirm: popConfirm?.confirm,
86   - onCancel: popConfirm?.cancel,
87   - text: label,
88   - divider: index < props.dropDownActions.length - 1 ? props.divider : false,
89   - };
90   - });
  86 + return (toRaw(props.dropDownActions) || [])
  87 + .filter((action) => {
  88 + return hasPermission(action.auth);
  89 + })
  90 + .map((action, index) => {
  91 + const { label, popConfirm } = action;
  92 + return {
  93 + ...action,
  94 + ...popConfirm,
  95 + onConfirm: popConfirm?.confirm,
  96 + onCancel: popConfirm?.cancel,
  97 + text: label,
  98 + divider: index < props.dropDownActions.length - 1 ? props.divider : false,
  99 + };
  100 + });
91 101 });
92 102  
93 103 const getAlign = computed(() => {
... ...
src/components/Table/src/types/tableAction.ts
1 1 import { ButtonProps } from 'ant-design-vue/es/button/buttonTypes';
  2 +import { RoleEnum } from '/@/enums/roleEnum';
2 3 export interface ActionItem extends ButtonProps {
3 4 onClick?: Fn;
4 5 label: string;
... ... @@ -7,6 +8,8 @@ export interface ActionItem extends ButtonProps {
7 8 popConfirm?: PopConfirm;
8 9 disabled?: boolean;
9 10 divider?: boolean;
  11 + // Permission code
  12 + auth?: RoleEnum | RoleEnum[] | string | string[];
10 13 }
11 14  
12 15 export interface PopConfirm {
... ...