import React, {useEffect, useState} from 'react'; import {Avatar, Input, List, message} from 'antd'; import VirtualList from 'rc-virtual-list'; import {Button, Drawer} from 'antd'; import {ListDiary, SelectDiary} from "@/components/type/Diary"; import TextArea from "antd/es/input/TextArea"; import style from "@/components/DiaryOption.module.css" import dayjs from "dayjs"; import {addTaskLogAPI} from "@/components/service/Diary"; const CONTAINER_HEIGHT = 400; const PAGE_SIZE = 20; const DiaryOption = (props: SelectDiary) => { // 抽屉 start const [open, setOpen] = useState(false); const showDrawer = () => { setOpen(true); }; const onClose = () => { setOpen(false); }; // 抽屉 end // 头按钮设置 start const [currentIndex, setCurrentIndex] = useState(1); // 头按钮设置 end // 数据 start const [diaryList, setDiaryList] = useState([]); const [diaryReduceList, setDiaryReduceList] = useState([]) const [page, setPage] = useState(1); const noMore = {id: '0', keyId: 'o0',createdDate:new Date(), description: '没有更多了',taskId:props.taskId, enableFlag: 'day-separate'}; const [noMoreFlag, setNoMoreFlag] = useState(false) const [sendValue,setSendValue] = useState(); const [sendValueFlag,setSendValueFlag] =useState(false); const handleSend = ()=>{ if(sendValueFlag){ return } setSendValueFlag(true); if (!sendValue?.trim()) { message.info("发送信息不能为空"); return; } addTaskLogAPI({ description: sendValue!, taskId: props.taskId, enableFlag: '1' }).then(res => { setDiaryList([res.data.data, ...diaryList]) setSendValue(undefined) }).finally(() => { setSendValueFlag(false); }) } const appendData = (showMessage = true) => { const fakeDataUrl = process.env.NEXT_PUBLIC_TODO_REQUEST_URL + `/task/message/diary/select`; fetch(fakeDataUrl, { method: 'POST', headers: { 'Content-Type': 'application/json', // 指定 JSON 格式 'Authorization': `Bearer ${localStorage.getItem('platform-security')}`, }, body: JSON.stringify({pageNumber: page, pageSize: 100, data: {taskId: props.taskId}}) }) .then((res) => res.json()) .then((body) => { const results = Array.isArray(body.data.content) ? body.data.content : []; if (results.length === 0) { diaryList.push(noMore); setNoMoreFlag(true); } setDiaryList(diaryList.concat(results)); setPage(page + 1); showMessage && message.success(`${results.length} more items loaded!`); }); }; useEffect(() => { appendData(false); }, []); useEffect(() => { console.log("处理日志集合",diaryList) const returnResult: ListDiary[] = [] diaryList.filter(taskLog => { if (currentIndex === 0) { return true } else if (currentIndex === 1 && taskLog.enableFlag === "1") { return true } else if (currentIndex === 2 && taskLog.enableFlag === "0") { return true } else return false; }).reduce((map, taskLog) => { if (!map.has(dayjs(taskLog.createdDate).format("YYYY-MM-DD"))) { map.set(dayjs(taskLog.createdDate).format("YYYY-MM-DD"), []); } map.get(dayjs(taskLog.createdDate).format("YYYY-MM-DD"))?.push(taskLog); return map; }, new Map()).forEach((value, Key) => { returnResult.push(...value) returnResult.push({ description: dayjs(Key).isSame(dayjs(), 'date') ? "今天" : dayjs(Key).format("YYYY-MM-DD"), id: dayjs(Key).format("YYYY-MM-DD"), enableFlag: "day-separate", taskId: props.taskId, createdDate: new Date() }) }) setDiaryReduceList(returnResult); }, [diaryList]); const onScroll = (e: React.UIEvent) => { // Refer to: https://developer.mozilla.org/en-US/docs/Web/API/Element/scrollHeight#problems_and_solutions if ( Math.abs(e.currentTarget.scrollHeight - e.currentTarget.scrollTop - CONTAINER_HEIGHT) <= 1 && !noMoreFlag ) { appendData(); } }; // 数据 end // 点击操作 start const [clickTaskDiary, setClickTaskDiary] = useState() // 点击操作 end return ( <>