diff --git a/src/components/ClickRecord.tsx b/src/components/ClickRecord.tsx index 0668e5b..1ce9581 100644 --- a/src/components/ClickRecord.tsx +++ b/src/components/ClickRecord.tsx @@ -1,4 +1,4 @@ -import {Button, Form} from "antd"; +import {Button, Form, message, Popconfirm} from "antd"; import React, {useEffect, useState} from "react"; import { ModalForm, @@ -16,6 +16,8 @@ import { import dayjs, {UnitTypeShort} from "dayjs"; import {onceConsumerRead} from "@/utils/codeToReadName"; import {betweenTime} from "@/utils/timeFormatUtil"; +import {QuestionCircleOutlined} from "@ant-design/icons"; +import {deleteTask} from "@/lib/task/project/data"; interface ClickRecordProps { openClickRecord?: boolean; @@ -49,6 +51,12 @@ const ClickRecord: React.FC = ({ recordTimeRange: [res.data.data.startDate ? dayjs(res.data.data.startDate) : undefined, res.data.data.startDate ? dayjs(res.data.data.recordDate) : undefined] }) + if (res.data.data.startDate&&res.data.data.recordDate){ + let timeDif = betweenTime(dayjs(res.data.data.recordDate), dayjs(res.data.data.startDate)); + if (res.data.data.timeDifference!=timeDif){ + form.setFieldValue("timeDifference",timeDif) + } + } } }) } else { @@ -79,22 +87,31 @@ const ClickRecord: React.FC = ({ render: (prop, defaultDoms) => { const result = []; if (recordId && !editAble) { - result.push() result.push() - result.push() + result.push( + } + okText="确认" + cancelText="取消" + onConfirm={() => { + deleteClickRecordAPI(recordId).then(res => { + if (res.data.status.success) { + setOpenClickRecord?.(false) + reloadData?.() + } + }) + }} + > + ) } else { result.push(defaultDoms) } @@ -116,14 +133,19 @@ const ClickRecord: React.FC = ({ if (values.recordTimeRange[1]) { values.recordDate = new Date(values.recordTimeRange[1]) } - if (values.id) { - await editClickRecordAPI(values); - } else { - await clickRecordAPI(values); + try{ + if (values.id) { + await editClickRecordAPI(values); + } else { + await clickRecordAPI(values); + } + setOpenClickRecord?.(false) + reloadData?.() + return true + }catch (e){ + console.error(e) + return false } - setOpenClickRecord?.(false) - reloadData?.() - return true }} > = ({setCronFunction,setExpecte cron,canSetting}) => { const [showModal, setShowModal] = useState(false); const [current, setCurrent] = useState(0); - const [cronSeconds, setCronSeconds] = useState(cron ? cron.split(' ')[0] : '*'); + const [cronSeconds, setCronSeconds] = useState(cron ? cron.split(' ')[0] : '0'); const [cronMinutes, setCronMinutes] = useState(cron ? cron.split(' ')[1] : '0'); const [cronHours, setCronHours] = useState(cron ? cron.split(' ')[2] : '*'); const [cronDayOfMonth, setCronDayOfMonth] = useState(cron ? cron.split(' ')[3] : '*'); @@ -179,7 +179,10 @@ const CronGenerator: React.FC = ({setCronFunction,setExpecte setCurrent(index); }; useEffect(() => { - setCanReadCron(cronToChinese(fullCronExpression)) + if (cron){ + console.log({fullCronExpression}) + setCanReadCron(cronToChinese(fullCronExpression)) + } }, [fullCronExpression]); const onClickConfirmCron = () => { @@ -189,7 +192,7 @@ const CronGenerator: React.FC = ({setCronFunction,setExpecte setNextOccurrences(res.data.data.map((next: string) => dayjs(next))); setExpectedTimeRange([dayjs(res.data.data[0]), onceConsumer&&onceConsumer.length==2 ? dayjs(res.data.data[0]).add(Number(onceConsumer[0]), onceConsumer[1] as UnitTypeShort):undefined]) - setCronFunction(fullCronExpression); + setCronFunction("0 "+fullCronExpression); }); setShowModal(false) } catch (error) { diff --git a/src/lib/task/project/definitions.tsx b/src/lib/task/project/definitions.tsx index c778854..bcc53e9 100644 --- a/src/lib/task/project/definitions.tsx +++ b/src/lib/task/project/definitions.tsx @@ -3,7 +3,7 @@ import {Dayjs} from "dayjs"; export type TaskWebSelectVO ={ name?:string, description?:string, - treeList:boolean, + treeList?:boolean, treeFilter?:boolean, treeOrList?:boolean, pid?:string, diff --git a/src/ui/task/calendar/CalShow.tsx b/src/ui/task/calendar/CalShow.tsx index 204cef3..d6aa791 100644 --- a/src/ui/task/calendar/CalShow.tsx +++ b/src/ui/task/calendar/CalShow.tsx @@ -1,6 +1,6 @@ 'use client' import React, {Fragment, useCallback, useContext, useEffect, useMemo, useRef, useState} from "react"; -import {Calendar, dayjsLocalizer, Event, SlotInfo, View} from 'react-big-calendar' +import {Calendar, dateFnsLocalizer, dayjsLocalizer, Event, SlotInfo, View} from 'react-big-calendar' import dayjs, {Dayjs} from 'dayjs' import 'react-big-calendar/lib/css/react-big-calendar.css' import 'react-big-calendar/lib/sass/styles.scss' diff --git a/src/ui/task/project/DetailModelForm.tsx b/src/ui/task/project/DetailModelForm.tsx index ff21390..6be37b9 100644 --- a/src/ui/task/project/DetailModelForm.tsx +++ b/src/ui/task/project/DetailModelForm.tsx @@ -223,24 +223,89 @@ export const DetailModelForm: React.FC = (props) => { setSpinning(false) } }, [props]) - function childReduce(child: DataType[]): PidSelectTree[] { + // 使用示例 + const { trees, taskMap } = childReduceInner(child); + setPTaskMap(taskMap); // 一次性设置 + return trees; + } + + function childReduceInner(child: DataType[]): { trees: PidSelectTree[]; taskMap: Record } { const result: PidSelectTree[] = []; const parentTaskMap: Record = {}; - child.map(data => { + + child.forEach(data => { const resultData: PidSelectTree = { - label: data.name, value: data.id, pid: data.pid, - fId: data.fId, fName: data.fName + label: data.name, + value: data.id, + pid: data.pid, + fId: data.fId, + fName: data.fName }; - parentTaskMap[data.id] = {pid: data.id, pName: data.name, fId: data.fId, fName: data.fName}; + if (data.children) { - resultData.children = childReduce(data.children); + const childResult = childReduceInner(data.children); + resultData.children = childResult.trees; + Object.assign(parentTaskMap, childResult.taskMap); } + + parentTaskMap[data.id] = { + pid: data.id, + pName: data.name, + fId: data.fId, + fName: data.fName + }; result.push(resultData); - }) - setPTaskMap({...pTaskMap, ...parentTaskMap}) - return result; + }); + + return { trees: result, taskMap: parentTaskMap }; } + // 错误闭包使用 + // function childReduce(child: DataType[]): PidSelectTree[] { + // const result: PidSelectTree[] = []; + // const parentTaskMap: Record = {}; + // child.map(data => { + // const resultData: PidSelectTree = { + // label: data.name, value: data.id, pid: data.pid, + // fId: data.fId, fName: data.fName + // }; + // if (data.children) { + // resultData.children = childReduce(data.children); + // } + // parentTaskMap[data.id] = {pid: data.id, pName: data.name, fId: data.fId, fName: data.fName}; + // result.push(resultData); + // }) + // setPTaskMap({...pTaskMap, ...parentTaskMap}) + // return result; + // } + // function childReduce(child: DataType[]): PidSelectTree[] { + // const result: PidSelectTree[] = []; + // const parentTaskMap: Record = {}; + // + // child.forEach(data => { + // const resultData: PidSelectTree = { + // label: data.name, + // value: data.id, + // pid: data.pid, + // fId: data.fId, + // fName: data.fName + // }; + // if (data.children) { + // resultData.children = childReduce(data.children); + // } + // parentTaskMap[data.id] = { + // pid: data.id, + // pName: data.name, + // fId: data.fId, + // fName: data.fName + // }; + // result.push(resultData); + // }); + // + // setPTaskMap(prev => ({ ...prev, ...parentTaskMap })); + // return result; + // } + // 如果不是添加任务需要回显 // Form 当中的 initialValues @@ -327,7 +392,7 @@ export const DetailModelForm: React.FC = (props) => { if (taskType == '2') { result.push() } - if (taskType == '3') { + if (taskType == '3' && requestTask) { result.push() @@ -477,6 +542,10 @@ export const DetailModelForm: React.FC = (props) => { placeholder="请输入团队名称" disabled={editFormDisable} /> +