fix: 优化登录相关权限问题 添加按键权限判断
This commit is contained in:
@@ -13,6 +13,7 @@ import {
|
||||
} from 'ant-design-vue';
|
||||
import { useBannerModel, BANNER_STATUS_OPTIONS } from './model/useBannerModel';
|
||||
import { useContainerSize } from '@/hooks';
|
||||
import { usePermissionStore } from '@/stores/permissionStore';
|
||||
import BannerFormModal from './components/BannerFormModal';
|
||||
import pageStyles from '@/assets/styles/pageLayout.module.less';
|
||||
|
||||
@@ -28,6 +29,7 @@ function renderBodyCell({
|
||||
onEdit,
|
||||
onToggleStatus,
|
||||
onDelete,
|
||||
permissions,
|
||||
}: {
|
||||
column: any;
|
||||
text: any;
|
||||
@@ -37,6 +39,11 @@ function renderBodyCell({
|
||||
onEdit: (record: any) => void;
|
||||
onToggleStatus: (record: any) => void;
|
||||
onDelete: (record: any) => void;
|
||||
permissions: {
|
||||
canEdit: boolean;
|
||||
canToggleStatus: boolean;
|
||||
canDelete: boolean;
|
||||
};
|
||||
}) {
|
||||
// 图片列
|
||||
if (column.key === 'image') {
|
||||
@@ -92,17 +99,26 @@ function renderBodyCell({
|
||||
// 操作列
|
||||
if (column.key === 'action') {
|
||||
const isEnabled = record.status === '1';
|
||||
const { canEdit, canToggleStatus, canDelete } = permissions;
|
||||
if (!canEdit && !canToggleStatus && !canDelete) return <span>-</span>;
|
||||
|
||||
return (
|
||||
<Space>
|
||||
<Button type="link" size="small" onClick={() => onEdit(record)}>
|
||||
编辑
|
||||
</Button>
|
||||
<Button type="link" size="small" onClick={() => onToggleStatus(record)}>
|
||||
{isEnabled ? '禁用' : '启用'}
|
||||
</Button>
|
||||
<Button type="link" size="small" danger onClick={() => onDelete(record)}>
|
||||
删除
|
||||
</Button>
|
||||
{canEdit && (
|
||||
<Button type="link" size="small" onClick={() => onEdit(record)}>
|
||||
编辑
|
||||
</Button>
|
||||
)}
|
||||
{canToggleStatus && (
|
||||
<Button type="link" size="small" onClick={() => onToggleStatus(record)}>
|
||||
{isEnabled ? '禁用' : '启用'}
|
||||
</Button>
|
||||
)}
|
||||
{canDelete && (
|
||||
<Button type="link" size="small" danger onClick={() => onDelete(record)}>
|
||||
删除
|
||||
</Button>
|
||||
)}
|
||||
</Space>
|
||||
);
|
||||
}
|
||||
@@ -136,6 +152,13 @@ export default defineComponent({
|
||||
} = useBannerModel();
|
||||
|
||||
const { containerRef, height } = useContainerSize();
|
||||
const { hasPermission } = usePermissionStore();
|
||||
const canAdd = hasPermission('events.banner.add');
|
||||
const operationPermissions = {
|
||||
canEdit: hasPermission('events.banner.edit'),
|
||||
canToggleStatus: hasPermission('events.banner.toggle_status'),
|
||||
canDelete: hasPermission('events.banner.delete'),
|
||||
};
|
||||
|
||||
const confirmDelete = (record: any) => {
|
||||
Modal.confirm({
|
||||
@@ -200,9 +223,11 @@ export default defineComponent({
|
||||
查询
|
||||
</Button>
|
||||
<Button onClick={handleReset}>重置</Button>
|
||||
<Button type="primary" onClick={handleAdd}>
|
||||
新增
|
||||
</Button>
|
||||
{canAdd && (
|
||||
<Button type="primary" onClick={handleAdd}>
|
||||
新增
|
||||
</Button>
|
||||
)}
|
||||
</Space>
|
||||
</Form.Item>
|
||||
</Form>
|
||||
@@ -226,6 +251,7 @@ export default defineComponent({
|
||||
onEdit: handleEdit,
|
||||
onToggleStatus: confirmToggleStatus,
|
||||
onDelete: confirmDelete,
|
||||
permissions: operationPermissions,
|
||||
}),
|
||||
}}
|
||||
</Table>
|
||||
|
||||
@@ -21,6 +21,7 @@ import {
|
||||
import { useEventListColumns } from './model/useEventListColumns';
|
||||
import { getProvinceCityCascaderOptions } from '@/utils/areaData';
|
||||
import { useContainerSize } from '@/hooks';
|
||||
import { usePermissionStore } from '@/stores/permissionStore';
|
||||
import EventRegulationModal from './components/EventRegulationModal';
|
||||
import EventDetailModal from './components/EventDetailModal';
|
||||
import EventAuditModal from './components/EventAuditModal';
|
||||
@@ -63,6 +64,9 @@ export default defineComponent({
|
||||
|
||||
const { columns } = useEventListColumns();
|
||||
const { containerRef, height } = useContainerSize();
|
||||
const { hasPermission } = usePermissionStore();
|
||||
const canToggleStatus = hasPermission('events.list.toggle_status');
|
||||
const canViewRegulation = hasPermission('events.regulation.view');
|
||||
|
||||
/** 省市两级 Cascader 数据(无区) */
|
||||
const provinceCityOptions = getProvinceCityCascaderOptions();
|
||||
@@ -91,14 +95,16 @@ export default defineComponent({
|
||||
<Button type="link" size="small" onClick={() => openDetailModal(record)}>
|
||||
查看
|
||||
</Button>
|
||||
<Button
|
||||
type="link"
|
||||
size="small"
|
||||
loading={togglingId.value === record.id}
|
||||
onClick={() => handleToggleShelf(record)}
|
||||
>
|
||||
下架
|
||||
</Button>
|
||||
{canToggleStatus && (
|
||||
<Button
|
||||
type="link"
|
||||
size="small"
|
||||
loading={togglingId.value === record.id}
|
||||
onClick={() => handleToggleShelf(record)}
|
||||
>
|
||||
下架
|
||||
</Button>
|
||||
)}
|
||||
</Space>
|
||||
);
|
||||
}
|
||||
@@ -109,14 +115,16 @@ export default defineComponent({
|
||||
<Button type="link" size="small" onClick={() => openDetailModal(record)}>
|
||||
查看
|
||||
</Button>
|
||||
<Button
|
||||
type="link"
|
||||
size="small"
|
||||
loading={togglingId.value === record.id}
|
||||
onClick={() => handleToggleShelf(record)}
|
||||
>
|
||||
上架
|
||||
</Button>
|
||||
{canToggleStatus && (
|
||||
<Button
|
||||
type="link"
|
||||
size="small"
|
||||
loading={togglingId.value === record.id}
|
||||
onClick={() => handleToggleShelf(record)}
|
||||
>
|
||||
上架
|
||||
</Button>
|
||||
)}
|
||||
</Space>
|
||||
);
|
||||
}
|
||||
@@ -145,9 +153,15 @@ export default defineComponent({
|
||||
width: 100,
|
||||
align: 'center' as const,
|
||||
customRender: ({ record }: { record: any }) => (
|
||||
<a style={{ cursor: 'pointer' }} onClick={() => openRegulationModal(record)}>
|
||||
查看
|
||||
</a>
|
||||
<>
|
||||
{canViewRegulation ? (
|
||||
<a style={{ cursor: 'pointer' }} onClick={() => openRegulationModal(record)}>
|
||||
查看
|
||||
</a>
|
||||
) : (
|
||||
<span>-</span>
|
||||
)}
|
||||
</>
|
||||
),
|
||||
},
|
||||
{
|
||||
|
||||
@@ -17,6 +17,7 @@ interface OrderDetailModalProps {
|
||||
uniqueId: string;
|
||||
onClose: () => void;
|
||||
onReRefund: () => void;
|
||||
canReRefund?: boolean;
|
||||
}
|
||||
|
||||
const GENDER_MAP: Record<string, string> = { '1': '男', '2': '女' };
|
||||
@@ -118,6 +119,7 @@ export default defineComponent({
|
||||
uniqueId: { type: String, default: '' },
|
||||
onClose: { type: Function, default: null },
|
||||
onReRefund: { type: Function, default: null },
|
||||
canReRefund: { type: Boolean, default: false },
|
||||
},
|
||||
setup(props: OrderDetailModalProps) {
|
||||
const [detail, setDetail] = useState<TournamentAdminOrderInfoVO | null>(null);
|
||||
@@ -360,7 +362,7 @@ export default defineComponent({
|
||||
<div class={styles.modalFooter}>
|
||||
<Button onClick={props.onClose}>取消</Button>
|
||||
{/* 只有存在退款失败记录时才显示重新退款按钮 */}
|
||||
{hasRefundFailed.value ? (
|
||||
{props.canReRefund && hasRefundFailed.value ? (
|
||||
<Button danger onClick={props.onReRefund}>
|
||||
重新退款
|
||||
</Button>
|
||||
|
||||
@@ -15,6 +15,7 @@ import {
|
||||
import { useOrderModel, ORDER_STATUS_OPTIONS, REFUND_STATUS_OPTIONS } from './model/useOrderModel';
|
||||
import { retryRefundOrder } from './model/services';
|
||||
import { useContainerSize, useState } from '@/hooks';
|
||||
import { usePermissionStore } from '@/stores/permissionStore';
|
||||
import OrderDetailModal from './components/OrderDetailModal';
|
||||
import pageStyles from '@/assets/styles/pageLayout.module.less';
|
||||
|
||||
@@ -58,12 +59,14 @@ function renderBodyCell({
|
||||
record,
|
||||
onView,
|
||||
onReRefund,
|
||||
canReRefund,
|
||||
}: {
|
||||
column: any;
|
||||
text: any;
|
||||
record: any;
|
||||
onView: (record: any) => void;
|
||||
onReRefund: (record: any) => void;
|
||||
canReRefund: boolean;
|
||||
}) {
|
||||
// 赛事名称:最多15字符,超出显示 Tooltip
|
||||
if (column.dataIndex === 'name') {
|
||||
@@ -82,7 +85,7 @@ function renderBodyCell({
|
||||
if (column.key === 'action') {
|
||||
// 退款状态:1=无退款,2=退款成功,3=退款失败,-1=其他
|
||||
// 只有退款失败(3)时显示重新退款按钮
|
||||
const showReRefund = record.refundStatus === '3';
|
||||
const showReRefund = canReRefund && record.refundStatus === '3';
|
||||
return (
|
||||
<Space>
|
||||
<Button type="link" size="small" onClick={() => onView(record)}>
|
||||
@@ -119,6 +122,8 @@ export default defineComponent({
|
||||
} = useOrderModel();
|
||||
|
||||
const { containerRef, height } = useContainerSize();
|
||||
const { hasPermission } = usePermissionStore();
|
||||
const canReRefund = hasPermission('events.orders.refund');
|
||||
|
||||
// 详情弹窗状态
|
||||
const [detailVisible, setDetailVisible] = useState<boolean>(false);
|
||||
@@ -257,6 +262,7 @@ export default defineComponent({
|
||||
...args,
|
||||
onView: handleView,
|
||||
onReRefund: handleReRefund,
|
||||
canReRefund,
|
||||
}),
|
||||
}}
|
||||
</Table>
|
||||
@@ -286,6 +292,7 @@ export default defineComponent({
|
||||
setDetailVisible(false);
|
||||
promptReRefund(currentRecord.value);
|
||||
}}
|
||||
canReRefund={canReRefund}
|
||||
/>
|
||||
)}
|
||||
</div>
|
||||
|
||||
@@ -3,6 +3,7 @@ import { Button, Input, Table, Form, Space, Select, Pagination } from 'ant-desig
|
||||
import { useUserModel, USER_STATUS_OPTIONS } from './model/useUserModel';
|
||||
import { useUserColumns } from './model/useUserColumns';
|
||||
import { useContainerSize } from '@/hooks';
|
||||
import { usePermissionStore } from '@/stores/permissionStore';
|
||||
import pageStyles from '@/assets/styles/pageLayout.module.less';
|
||||
|
||||
/**
|
||||
@@ -30,9 +31,13 @@ export default defineComponent({
|
||||
|
||||
const { columns } = useUserColumns();
|
||||
const { containerRef, height } = useContainerSize();
|
||||
const { hasPermission } = usePermissionStore();
|
||||
const canToggleStatus = hasPermission('events.users.toggle_status');
|
||||
|
||||
/** 渲染操作列 */
|
||||
const renderAction = (record: any) => {
|
||||
if (!canToggleStatus) return <span>-</span>;
|
||||
|
||||
const isActive = record.status === '1';
|
||||
return (
|
||||
<Button
|
||||
|
||||
Reference in New Issue
Block a user