diff --git a/src/pages/story/components/TimelineItem/TimelineItem.tsx b/src/pages/story/components/TimelineItem/TimelineItem.tsx index af478da..d6da5ae 100644 --- a/src/pages/story/components/TimelineItem/TimelineItem.tsx +++ b/src/pages/story/components/TimelineItem/TimelineItem.tsx @@ -12,13 +12,13 @@ import useStyles from './index.style'; // 格式化时间数组为易读格式 const formatTimeArray = (time: string | number[] | undefined): string => { if (!time) return ''; - + // 如果是数组格式 [2025, 12, 23, 8, 55, 39] if (Array.isArray(time)) { const [year, month, day, hour, minute, second] = time; return `${year}-${String(month).padStart(2, '0')}-${String(day).padStart(2, '0')} ${String(hour).padStart(2, '0')}:${String(minute).padStart(2, '0')}:${String(second).padStart(2, '0')}`; } - + // 如果已经是字符串格式,直接返回 return String(time); }; @@ -27,7 +27,8 @@ const TimelineItem: React.FC<{ item: StoryItem; handleOption: (item: StoryItem, option: 'add' | 'edit' | 'addSubItem' | 'editSubItem') => void; refresh: () => void; -}> = ({ item, handleOption, refresh }) => { + disableEdit?: boolean; +}> = ({ item, handleOption, refresh, disableEdit }) => { const { styles } = useStyles(); const intl = useIntl(); const [expanded, setExpanded] = useState(false); @@ -97,7 +98,7 @@ const TimelineItem: React.FC<{ }} extra={
- {showActions && ( + {showActions && !disableEdit && ( <>
} - footer={ + footer={ {disableEdit ??
- } - > + >}}

描述

@@ -204,4 +204,4 @@ const TimelineItemDrawer: React.FC = (props) => { ); }; -export default TimelineItemDrawer; \ No newline at end of file +export default TimelineItemDrawer; diff --git a/src/pages/story/data.d.ts b/src/pages/story/data.d.ts index ed5ab60..ceb6994 100644 --- a/src/pages/story/data.d.ts +++ b/src/pages/story/data.d.ts @@ -40,6 +40,7 @@ export interface StoryType { itemCount: number, updatedId?: string; updateTime?: string; + storyTime: string; logo?: string; } export interface BaseResponse { @@ -90,4 +91,4 @@ export interface TimelineEvent { subItems?: TimelineEvent[]; } -export type PermissionType = '' \ No newline at end of file +export type PermissionType = '' diff --git a/src/pages/story/detail.tsx b/src/pages/story/detail.tsx index e70fec6..b99b2b0 100644 --- a/src/pages/story/detail.tsx +++ b/src/pages/story/detail.tsx @@ -12,17 +12,18 @@ import { useParams } from 'react-router'; import AutoSizer from 'react-virtualized-auto-sizer'; import { VariableSizeList as List } from 'react-window'; import './index.css'; +import {judgePermission} from "@/pages/story/utils/utils"; // 格式化时间数组为易读格式 const formatTimeArray = (time: string | number[] | undefined): string => { if (!time) return ''; - + // 如果是数组格式 [2025, 12, 23, 8, 55, 39] if (Array.isArray(time)) { const [year, month, day, hour, minute, second] = time; return `${year}-${String(month).padStart(2, '0')}-${String(day).padStart(2, '0')} ${String(hour).padStart(2, '0')}:${String(minute).padStart(2, '0')}:${String(second).padStart(2, '0')}`; } - + // 如果已经是字符串格式,直接返回 return String(time); }; @@ -274,6 +275,7 @@ const Index = () => { setCurrentOption(option); setOpenAddItemModal(true); }} + disableEdit={!judgePermission(detail.permissionType, 'edit')} refresh={() => { // 刷新当前页数据 setPagination((prev) => ({ ...prev, current: 1 })); @@ -480,6 +482,7 @@ const Index = () => {
最近更新人 -

{updateName}

+

{updateName ?? ownerName}

节点数

{itemCount}

- 开始时间 -

{createTime}

+ 故事时间 +

{storyTime}

更新时间 @@ -190,6 +191,7 @@ export const BasicList: FC = () => { actions={[ { e.preventDefault(); showEditModal(item); @@ -200,6 +202,7 @@ export const BasicList: FC = () => { // 增加授权操作,可以授权给其他用户 { e.preventDefault(); setCurrent(item); @@ -210,6 +213,7 @@ export const BasicList: FC = () => { , { e.preventDefault(); deleteItem(item.instanceId ?? ''); diff --git a/src/pages/story/utils/utils.ts b/src/pages/story/utils/utils.ts new file mode 100644 index 0000000..44a0214 --- /dev/null +++ b/src/pages/story/utils/utils.ts @@ -0,0 +1,18 @@ +// judge user permission +/** + * current permissionType: 1 - creator, 2 - admin, 3 - editor, 4 - viewer + * @param permissionType + * @param actionType + */ +export function judgePermission(permissionType: number | null, actionType: string): boolean { + switch (actionType) { + case 'delete': + return permissionType === 1; + case 'auth': + return permissionType === 1 || permissionType === 2; + case 'edit': + return permissionType === 1 || permissionType === 2 || permissionType === 3; + default: + return false; + } +}