import {PlusOutlined, QuestionCircleOutlined} from '@ant-design/icons'; import { ModalForm, ProForm, ProFormDateRangePicker, ProFormDateTimeRangePicker, ProFormSelect, ProFormText, ProFormTextArea, ProFormTreeSelect, } from '@ant-design/pro-components'; import {Button, Form, message, Popconfirm} from 'antd'; import React, {useEffect, useState} from "react"; import { addTask, deleteTask, getTask, getTaskTreeResult, OPERATION_BUTTON_TYPE, TASK_TYPE, taskPriorityList, taskStateList, updateTask } from "@/lib/task/project/data"; import {DataType} from "@/lib/definitions"; import dayjs, {Dayjs} from "dayjs"; import DiaryOption from "@/components/DiaryOption"; export type DetailModelFormProps = { // 当前内容id itemId?: string, pid?: string, // 祖宗任务id pPid?: string, // 操作id operationId: OPERATION_BUTTON_TYPE, // 标题描述 description: string, // 是否打开界面,用于非按钮操作 open: boolean, // 使用按钮操作 haveButton: boolean, expectedStartTime?: Dayjs, expectedEndTime?: Dayjs, // 重新加载数据 reloadData?: () => void } export type PidSelectTree = { label: string; value: string; pid: string; children?: PidSelectTree[] } export const DetailModelForm: React.FC = (props) => { console.log("DetailModelForm:props:", props) const [form] = Form.useForm(); const [pid, setPid] = useState(props.pid ? props.pid : '0'); const [editFormDisable, setEditFormDisable] = useState(props.operationId === OPERATION_BUTTON_TYPE.DETAIL) // 团队第一层 pid必须为0 const [taskType, setTaskType] = useState('0') useEffect(() => { if (props.itemId != undefined && ( props.operationId === OPERATION_BUTTON_TYPE.DETAIL || props.operationId === OPERATION_BUTTON_TYPE.UPDATE)) { getTask(props.itemId).then(task => { console.log('DetailModelForm:getTask(props.itemId)', props.itemId, task); if (task.status.success) { // setTaskMessage(task.data) task.data.state = taskStateList.find(taskState => taskState.code === task.data.state?.toString())!.name; task.data.priority = taskPriorityList.find(taskPriority => taskPriority.code === task.data.priority?.toString())!.name; task.data.actualTimeRange = [task.data.actualStartTime ? dayjs(task.data.actualStartTime) : undefined, task.data.actualEndTime ? dayjs(task.data.actualEndTime) : undefined]; task.data.expectedTimeRange = [task.data.expectedStartTime ? dayjs(task.data.expectedStartTime) : undefined, task.data.expectedEndTime ? dayjs(task.data.expectedEndTime) : undefined]; form.setFieldsValue(task.data) console.log("form.setFieldsValue(task.data)" + JSON.stringify(task.data)) } else { message.error(task.status.message); props.reloadData?.() } }) } else if (props.operationId === OPERATION_BUTTON_TYPE.ADD || props.operationId === OPERATION_BUTTON_TYPE.ADD_CHILD) { let data = { 'expectedTimeRange': [props.expectedStartTime ? props.expectedStartTime : dayjs(), props.expectedEndTime], 'pid': props.pid }; form.setFieldsValue(data) } }, [props]) function childReduce(child: DataType[]): PidSelectTree[] { const result: PidSelectTree[] = []; child.map(data => { const resultData: PidSelectTree = {label: data.name, value: data.id, pid: data.pid}; if (data.children) { resultData.children = childReduce(data.children); } result.push(resultData); }) return result; } // 如果不是添加任务需要回显 return ( title={props.description} open={props.open && !props.haveButton} trigger={props.haveButton ? : undefined } form={form} autoFocusFirstInput modalProps={{ destroyOnClose: true, onCancel: () => { console.log('run'); props.reloadData?.(); }, }} submitter={props.itemId !== undefined && props.itemId !== '-1' ? { render: (prop, defaultDoms) => { return [ editFormDisable ? : undefined, props.operationId === OPERATION_BUTTON_TYPE.DETAIL || props.operationId === OPERATION_BUTTON_TYPE.UPDATE ? } okText="确认" cancelText="取消" onConfirm={() => { if (props.itemId !== undefined) { deleteTask(props.itemId).then((response => { console.log('response', response) if (response.status.success) { message.success("删除任务成功:" + response.data) props.reloadData?.() } })); } }} > : undefined , , ...defaultDoms ]; }, } : undefined} onFinish={async (values) => { console.log('Received values of form: ', values); if (values.pid === undefined) { values.pid = '0' } if (values.expectedTimeRange?.[0] != undefined) { values.expectedStartTime = dayjs(values.expectedTimeRange[0]).format() } if (values.expectedTimeRange?.[1] != undefined) { values.expectedEndTime = dayjs(values.expectedTimeRange[1]).format() } if (values.actualTimeRange?.[0] != undefined) { values.actualStartTime = dayjs(values.actualTimeRange[0]).toDate() } if (values.actualTimeRange?.[1] != undefined) { values.actualEndTime = dayjs(values.actualTimeRange[1]).toDate() } var result: boolean = false; let state = taskStateList.find(taskState => taskState.name === values.state?.toString()); if (state) { values.state = state.code } let priority = taskPriorityList.find(taskPriority => taskPriority.name === values.priority?.toString()) if (priority) { values.priority = priority.code } // todo 修改 if (props.operationId === OPERATION_BUTTON_TYPE.UPDATE || (props.operationId === OPERATION_BUTTON_TYPE.DETAIL && !editFormDisable)) { await updateTask(values).then(response => { console.log('response', response) if (response.status.success) { message.success("修改任务成功:" + response.data) // 树任务重新刷新 // 四象限任务重新刷新 // 如果可以直接更新列表而不请求。。。。。。 console.log('props.reloadData?.()', props.reloadData) props.reloadData?.() result = true } else { message.error(response.status.message) result = false } } ); } else { await addTask(values).then(response => { console.log('response', response) if (response.status.success) { message.success("添加任务成功:" + response.data) // 树任务重新刷新 // 四象限任务重新刷新 // 如果可以直接更新列表而不请求。。。。。。 console.log('props.reloadData?.()', props.reloadData) props.reloadData?.() result = true } else { message.error(response.status.message) result = false } } ); } return result; }} >