Files
timeline-frontend/src/pages/story/components/TimelineItemDrawer.tsx

137 lines
4.0 KiB
TypeScript
Raw Normal View History

2025-07-22 22:52:55 +08:00
import TimelineImage from '@/components/TimelineImage';
2025-08-05 19:02:14 +08:00
import AddTimeLineItemModal from '@/pages/story/components/AddTimeLineItemModal';
import SubTimeLineItemModal from '@/pages/story/components/SubTimeLineItemModal';
import { StoryItem } from '@/pages/story/data';
import { queryStoryItemImages } from '@/pages/story/service';
2025-07-22 22:52:55 +08:00
import { EditOutlined, PlusCircleOutlined } from '@ant-design/icons';
import { useRequest } from '@umijs/max';
import { Button, Drawer, Space } from 'antd';
import React, { useEffect } from 'react';
interface Props {
storyItem: StoryItem;
open: boolean;
setOpen: React.Dispatch<React.SetStateAction<boolean>>;
}
const TimelineItemDrawer = (props: Props) => {
const { storyItem, open, setOpen } = props;
const [editModalVisible, setEditModalVisible] = React.useState(false);
const [openAddSubItemModal, setOpenAddSubItemModal] = React.useState(false);
const [openEditMainItemModal, setOpenEditMainItemModal] = React.useState(false);
const { data: imagesList, run } = useRequest(
async (itemId) => {
return await queryStoryItemImages(itemId);
},
{
manual: true,
},
);
useEffect(() => {
if (open) {
2025-08-05 19:02:14 +08:00
run(storyItem.instanceId);
2025-07-22 22:52:55 +08:00
}
}, [open]);
const closeDrawer = () => {
setOpen(false);
};
const handleEditMainItem = (updatedItem: any) => {
const mergedEvent = {
...storyItem,
...updatedItem,
};
setOpenEditMainItemModal(false);
};
const handleAddSubItem = () => {
setOpenAddSubItemModal(false);
};
return (
<div>
{/* 主时间点详情抽屉 */}
<Drawer
width={1000}
placement="right"
onClose={closeDrawer}
2025-07-22 22:52:55 +08:00
open={open}
title={storyItem.title}
footer={
<div style={{ textAlign: 'right' }}>
<Space>
<Button
icon={<PlusCircleOutlined />}
type="primary"
onClick={() => setOpenAddSubItemModal(true)}
>
</Button>
<Button icon={<EditOutlined />} onClick={() => setEditModalVisible(true)}>
</Button>
<Button onClick={closeDrawer}></Button>
</Space>
</div>
}
>
<p>
<strong></strong> {storyItem.description}
</p>
<p>
<strong></strong> {storyItem.storyItemTime}
</p>
<p>
<strong></strong> {storyItem.location}
</p>
{/* 封面图 */}
{storyItem.coverInstanceId && (
<>
<p>
<strong></strong>
</p>
<TimelineImage
title={storyItem.title + 'cover'}
imageInstanceId={storyItem.coverInstanceId}
/>
</>
)}
{/* 时刻图库 */}
{imagesList && imagesList.length > 0 && (
<>
<p>
<strong></strong>
</p>
<div style={{ display: 'flex', flexWrap: 'wrap', gap: '10px', marginBottom: '20px' }}>
{imagesList.map((imageInstanceId, index) => (
<TimelineImage
key={imageInstanceId + index}
title={imageInstanceId}
imageInstanceId={imageInstanceId}
/>
))}
</div>
</>
)}
{/* 添加子时间点模态框 */}
<AddTimeLineItemModal
visible={openAddSubItemModal}
onOk={handleAddSubItem}
onCancel={() => setOpenAddSubItemModal(false)}
2025-08-05 19:02:14 +08:00
lineId={storyItem.storyInstanceId}
storyItemId={storyItem.instanceId}
2025-07-22 22:52:55 +08:00
/>
{/* 编辑主时间点模态框 */}
<SubTimeLineItemModal
visible={openEditMainItemModal}
onOk={handleEditMainItem}
onCancel={() => setOpenEditMainItemModal(false)}
initialValues={storyItem}
/>
</Drawer>
</div>
);
};
export default TimelineItemDrawer;