import React, { useImperativeHandle, forwardRef, useState, useEffect } from "react"; import { DownOutlined, PlusOutlined, DeleteOutlined } from "@ant-design/icons"; import type { MenuProps } from "antd"; import { Dropdown, Space, Drawer, Button, Checkbox, Input, Popover, Radio, Tooltip, } from "antd"; import { useModel } from "umi"; import { TodoItem } from "@/type"; import { uuid } from "@repo/utils"; import noData from "@/assets/no-data.png"; const TodoDrawer = forwardRef((props: {}, ref) => { const [open, setOpen] = React.useState(false); const { project, setProject } = useModel("erModel"); const [activeKey, setActiveKey] = React.useState(""); const [todoList, setTodoList] = useState(project.todos); useEffect(() => { setTodoList(project.todos); }, [project.todos]); useImperativeHandle(ref, () => ({ open: () => setOpen(true), close: () => setOpen(false), })); const items: MenuProps["items"] = [ { key: "1", label: "按优先级排序", }, { key: "2", label: "按完成时间排序", }, { key: "3", label: "按创建时间排序", }, ]; const levelMap = { 0: { label: "无", color: "#1890ff", }, 1: { label: "低", color: "#52c41a", }, 2: { label: "中", color: "#d89614", }, 3: { label: "高", color: "#ff4d4f", }, }; const handleChange = (index: number, key: string, value: any) => { const newTodos = [...todoList]; newTodos[index] = { ...newTodos[index], [key]: value, }; setTodoList(newTodos); setProject( { ...project, todos: newTodos, }, false, false, true ); }; const addToto = () => { setProject( { ...project, todos: [ ...todoList, { id: uuid(), dataModelId: project.id, name: "", text: "", isDone: false, level: 1, }, ], }, false, false, true ); }; const handleDelete = (index: number) => { const newTodos = [...todoList]; newTodos.splice(index, 1); setProject( { ...project, todos: newTodos, }, false, false, true ); }; return ( 待办事项} onClose={() => setOpen(false)} >
排序方式
{todoList.map((todo: TodoItem, index: number) => (
setActiveKey(todo.id)} >
{ handleChange(index, "isDone", e.target.checked); }} />
handleChange(index, "name", e.target.value)} />
优先级:
handleChange(index, "level", e.target.value)}>
} >
handleChange(index, "text", e.target.value)} />
优先级:{" "} {levelMap[todo.level].label}
))} {project.todos.length === 0 && (
暂无数据
暂无待办项!
)}
); }); export default TodoDrawer;