feat(table): Table operation columns support permission codes
This commit is contained in:
parent
8b2e0f665f
commit
6afee415a3
|
|
@ -25,16 +25,17 @@
|
||||||
</template>
|
</template>
|
||||||
<script lang="ts">
|
<script lang="ts">
|
||||||
import { defineComponent, PropType, computed, toRaw } from 'vue';
|
import { defineComponent, PropType, computed, toRaw } from 'vue';
|
||||||
|
|
||||||
import { MoreOutlined } from '@ant-design/icons-vue';
|
import { MoreOutlined } from '@ant-design/icons-vue';
|
||||||
|
import { Divider } from 'ant-design-vue';
|
||||||
|
|
||||||
import Icon from '/@/components/Icon/index';
|
import Icon from '/@/components/Icon/index';
|
||||||
import { ActionItem, TableActionType } from '/@/components/Table';
|
import { ActionItem, TableActionType } from '/@/components/Table';
|
||||||
import { PopConfirmButton } from '/@/components/Button';
|
import { PopConfirmButton } from '/@/components/Button';
|
||||||
import { Divider } from 'ant-design-vue';
|
|
||||||
import { Dropdown } from '/@/components/Dropdown';
|
import { Dropdown } from '/@/components/Dropdown';
|
||||||
|
|
||||||
import { useDesign } from '/@/hooks/web/useDesign';
|
import { useDesign } from '/@/hooks/web/useDesign';
|
||||||
import { useTableContext } from '../hooks/useTableContext';
|
import { useTableContext } from '../hooks/useTableContext';
|
||||||
|
import { usePermission } from '/@/hooks/web/usePermission';
|
||||||
|
|
||||||
import { propTypes } from '/@/utils/propTypes';
|
import { propTypes } from '/@/utils/propTypes';
|
||||||
import { ACTION_COLUMN_FLAG } from '../const';
|
import { ACTION_COLUMN_FLAG } from '../const';
|
||||||
|
|
@ -61,33 +62,42 @@
|
||||||
table = useTableContext();
|
table = useTableContext();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
const { hasPermission } = usePermission();
|
||||||
const getActions = computed(() => {
|
const getActions = computed(() => {
|
||||||
return (toRaw(props.actions) || []).map((action) => {
|
return (toRaw(props.actions) || [])
|
||||||
const { popConfirm } = action;
|
.filter((action) => {
|
||||||
return {
|
return hasPermission(action.auth);
|
||||||
type: 'link',
|
})
|
||||||
size: 'small',
|
.map((action) => {
|
||||||
...action,
|
const { popConfirm } = action;
|
||||||
...(popConfirm || {}),
|
return {
|
||||||
onConfirm: popConfirm?.confirm,
|
type: 'link',
|
||||||
onCancel: popConfirm?.cancel,
|
size: 'small',
|
||||||
enable: !!popConfirm,
|
...action,
|
||||||
};
|
...(popConfirm || {}),
|
||||||
});
|
onConfirm: popConfirm?.confirm,
|
||||||
|
onCancel: popConfirm?.cancel,
|
||||||
|
enable: !!popConfirm,
|
||||||
|
};
|
||||||
|
});
|
||||||
});
|
});
|
||||||
|
|
||||||
const getDropdownList = computed(() => {
|
const getDropdownList = computed(() => {
|
||||||
return (toRaw(props.dropDownActions) || []).map((action, index) => {
|
return (toRaw(props.dropDownActions) || [])
|
||||||
const { label, popConfirm } = action;
|
.filter((action) => {
|
||||||
return {
|
return hasPermission(action.auth);
|
||||||
...action,
|
})
|
||||||
...popConfirm,
|
.map((action, index) => {
|
||||||
onConfirm: popConfirm?.confirm,
|
const { label, popConfirm } = action;
|
||||||
onCancel: popConfirm?.cancel,
|
return {
|
||||||
text: label,
|
...action,
|
||||||
divider: index < props.dropDownActions.length - 1 ? props.divider : false,
|
...popConfirm,
|
||||||
};
|
onConfirm: popConfirm?.confirm,
|
||||||
});
|
onCancel: popConfirm?.cancel,
|
||||||
|
text: label,
|
||||||
|
divider: index < props.dropDownActions.length - 1 ? props.divider : false,
|
||||||
|
};
|
||||||
|
});
|
||||||
});
|
});
|
||||||
|
|
||||||
const getAlign = computed(() => {
|
const getAlign = computed(() => {
|
||||||
|
|
|
||||||
|
|
@ -1,4 +1,5 @@
|
||||||
import { ButtonProps } from 'ant-design-vue/es/button/buttonTypes';
|
import { ButtonProps } from 'ant-design-vue/es/button/buttonTypes';
|
||||||
|
import { RoleEnum } from '/@/enums/roleEnum';
|
||||||
export interface ActionItem extends ButtonProps {
|
export interface ActionItem extends ButtonProps {
|
||||||
onClick?: Fn;
|
onClick?: Fn;
|
||||||
label: string;
|
label: string;
|
||||||
|
|
@ -7,6 +8,8 @@ export interface ActionItem extends ButtonProps {
|
||||||
popConfirm?: PopConfirm;
|
popConfirm?: PopConfirm;
|
||||||
disabled?: boolean;
|
disabled?: boolean;
|
||||||
divider?: boolean;
|
divider?: boolean;
|
||||||
|
// Permission code
|
||||||
|
auth?: RoleEnum | RoleEnum[] | string | string[];
|
||||||
}
|
}
|
||||||
|
|
||||||
export interface PopConfirm {
|
export interface PopConfirm {
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue