From 03626f9f584325c1a8228f7ceb36c5b5645515cb Mon Sep 17 00:00:00 2001 From: 1708-huayu <57060237+1708-huayu@users.noreply.github.com> Date: Mon, 11 Aug 2025 18:30:45 +0800 Subject: [PATCH] =?UTF-8?q?feat:=E6=89=93=E5=8D=A1=E6=97=A5=E5=8E=86?= =?UTF-8?q?=E6=98=BE=E7=A4=BA?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/app/task/layout.tsx | 5 +- src/components/ClickRecord.tsx | 75 +++++++++--- src/components/TaskNameAndIcon.tsx | 2 +- src/components/TaskRemind.module.css | 4 - src/components/service/ScheduleTask.tsx | 14 ++- src/components/type/TaskSchedule.d.tsx | 22 ++-- src/lib/task/calendar/data.tsx | 2 + src/lib/task/calendar/service.tsx | 13 ++ src/lib/task/drag/service.tsx | 2 +- src/lib/task/project/definitions.tsx | 8 +- src/ui/LocalContent.tsx | 3 +- src/ui/globals.css | 2 +- src/ui/task/TitleOperation.tsx | 51 +++++--- src/ui/task/calendar/CalShow.tsx | 151 +++++++++++++++++------- src/ui/task/drag/DroppableTable.tsx | 3 +- src/ui/task/four/DetailForm.tsx | 6 +- src/ui/task/project/DetailModelForm.tsx | 19 ++- 17 files changed, 271 insertions(+), 111 deletions(-) diff --git a/src/app/task/layout.tsx b/src/app/task/layout.tsx index d9c389b..9c2a4c3 100644 --- a/src/app/task/layout.tsx +++ b/src/app/task/layout.tsx @@ -11,6 +11,7 @@ export default function Layout({children}: { children: React.ReactNode }) { expectStartTimeList.push({'name': "expectedStartTime", 'value': dayjs().subtract(7, 'day'), 'operateType': ">="}); expectStartTimeList.push({'name': "expectedStartTime", 'value': dayjs().add(7, 'day'), 'operateType': "<"}) const [expectedStartTime, setExpectedStartTime] = React.useState(JSON.stringify(expectStartTimeList)) + const [taskTypeList,setTaskTypeList] = React.useState(["0,1,2,3","4"]) const [refreshDataFlag, setRefreshDataFlag] = React.useState(true) function refreshData() { @@ -38,9 +39,11 @@ export default function Layout({children}: { children: React.ReactNode }) {
{children} diff --git a/src/components/ClickRecord.tsx b/src/components/ClickRecord.tsx index 0e1162b..1c69e25 100644 --- a/src/components/ClickRecord.tsx +++ b/src/components/ClickRecord.tsx @@ -1,5 +1,5 @@ import {Button, Form} from "antd"; -import React, {useEffect} from "react"; +import React, {useEffect, useState} from "react"; import { ModalForm, ProFormDateTimeRangePicker, @@ -7,43 +7,82 @@ import { ProFormTextArea } from "@ant-design/pro-components"; import {TaskScheduleRecordForm, TaskScheduleRecordVO} from "@/components/type/TaskSchedule.d"; -import {clickRecordAPI} from "@/components/service/ScheduleTask"; +import {clickRecordAPI, getRecordById} from "@/components/service/ScheduleTask"; import dayjs, {UnitTypeShort} from "dayjs"; import {onceConsumerRead} from "@/utils/codeToReadName"; import {betweenTime} from "@/utils/timeFormatUtil"; interface ClickRecordProps { - taskId: string; + openClickRecord?:boolean; + recordId?:string; + taskId?: string; taskName: string; - onceConsume: string | undefined; + onceConsume?: string; + setOpenClickRecord?:(boolean: boolean) => void; } -const ClickRecord: React.FC = ({taskId, taskName, onceConsume}) => { +const ClickRecord: React.FC = ({recordId,openClickRecord,setOpenClickRecord,taskId, taskName, onceConsume}) => { const [form] = Form.useForm(); + const [editAble, setEditAble] = useState(true); useEffect(() => { - let data = { - 'recordTimeRange': [onceConsume ? dayjs().subtract(Number(onceConsume.split(",")[0]), onceConsume.split(",")[1] as UnitTypeShort) : dayjs(), dayjs()], - 'timeDifference': onceConsumerRead(onceConsume), - }; - form.setFieldsValue(data) - }, []); + console.log("ClickRecord:useEffect:",openClickRecord) + if (recordId){ + setEditAble(false) + getRecordById(recordId).then(res=>{ + if (res.data.status.success){ + form.setFieldsValue({...res.data.data, + recordTimeRange:[res.data.data.startDate?dayjs(res.data.data.startDate).toDate():undefined, + res.data.data.startDate?dayjs(res.data.data.recordDate).toDate():undefined]}) + } + }) + }else { + let data = { + 'recordTimeRange': [onceConsume ? dayjs().subtract(Number(onceConsume.split(",")[0]), onceConsume.split(",")[1] as UnitTypeShort) : dayjs(), dayjs()], + 'timeDifference': onceConsumerRead(onceConsume), + }; + form.setFieldsValue(data) + } + }, [recordId]); return ( title={`${taskName}打卡`} layout="horizontal" - trigger={ + trigger={(recordId?undefined: } + )} + modalProps={{ + destroyOnClose: true, + maskClosable: false, + onCancel: () => { + setOpenClickRecord?.(false) + }, + }} + submitter={{ + render: (prop, defaultDoms) => { + const result = []; + if (recordId&&!editAble){ + result.push() + result.push() + }else{ + result.push(defaultDoms) + } + return result; + } + }} + open={openClickRecord} form={form} autoFocusFirstInput - modalProps={{ - // destroyOnClose: true, - onCancel: () => console.log('run'), - }} + readonly={!editAble} onFinish={async (values) => { - values.taskId = taskId + if(taskId){ + values.taskId = taskId + } if (values.recordTimeRange[0]) { values.startDate = new Date(values.recordTimeRange[0]) } diff --git a/src/components/TaskNameAndIcon.tsx b/src/components/TaskNameAndIcon.tsx index 9646f5e..371b2de 100644 --- a/src/components/TaskNameAndIcon.tsx +++ b/src/components/TaskNameAndIcon.tsx @@ -18,7 +18,7 @@ const TaskNameAndIcon = (props: {task:TaskMessage}) => { } - {props.task.name} + {props.task.name} ) } export default TaskNameAndIcon; \ No newline at end of file diff --git a/src/components/TaskRemind.module.css b/src/components/TaskRemind.module.css index 0306f2c..b03faad 100644 --- a/src/components/TaskRemind.module.css +++ b/src/components/TaskRemind.module.css @@ -1,7 +1,3 @@ .localDiv{ margin-bottom: 24px; -} -.icon{ - font-size: 1rem; - font-color: orange; } \ No newline at end of file diff --git a/src/components/service/ScheduleTask.tsx b/src/components/service/ScheduleTask.tsx index 6ff7c10..6a3ec47 100644 --- a/src/components/service/ScheduleTask.tsx +++ b/src/components/service/ScheduleTask.tsx @@ -1,13 +1,21 @@ import {AxiosResponse} from "axios"; import {ResponseVO} from "@/lib/definitions"; import {httpReq} from "@/utils/axiosReq"; -import {TaskScheduleRecordVO} from "@/components/type/TaskSchedule.d"; +import {TaskScheduleRangeVO, TaskScheduleRecordForm, TaskScheduleRecordVO} from "@/components/type/TaskSchedule.d"; export const generateNextTimeAPI = (cron: string): Promise>> => { return httpReq.get(process.env.NEXT_PUBLIC_TODO_REQUEST_URL + `/task/schedule/nextTime?cron=${cron}`) } -export const clickRecordAPI = (data:TaskScheduleRecordVO)=>{ +export const clickRecordAPI = (data: TaskScheduleRecordVO) => { return httpReq.post(process.env.NEXT_PUBLIC_TODO_REQUEST_URL + - `/task/schedule/click`,data) + `/task/schedule/click`, data) +} +export const getRecordById = (recordId: string): Promise>> => { + return httpReq.get(process.env.NEXT_PUBLIC_TODO_REQUEST_URL + + `/task/schedule/id?id=${recordId}`) +} +export const editClickRecordAPI = (data:TaskScheduleRangeVO):Promise>> =>{ + return httpReq.post(process.env.NEXT_PUBLIC_TODO_REQUEST_URL + + `/task/schedule/updateRange`,data) } diff --git a/src/components/type/TaskSchedule.d.tsx b/src/components/type/TaskSchedule.d.tsx index edd7eb5..5961f5d 100644 --- a/src/components/type/TaskSchedule.d.tsx +++ b/src/components/type/TaskSchedule.d.tsx @@ -1,11 +1,15 @@ -export interface TaskScheduleRecordVO{ - id:string, - timeDifference:string, - remarks:string, - startDate:Date, - recordDate:Date, - taskId:string, +export interface TaskScheduleRangeVO { + id: string, + startDate: Date, + recordDate: Date, } -export interface TaskScheduleRecordForm extends TaskScheduleRecordVO{ - recordTimeRange:Date[] + +export interface TaskScheduleRecordVO extends TaskScheduleRangeVO{ + timeDifference: string, + remarks: string, + taskId: string, +} + +export interface TaskScheduleRecordForm extends TaskScheduleRecordVO { + recordTimeRange: (Date | undefined)[] } diff --git a/src/lib/task/calendar/data.tsx b/src/lib/task/calendar/data.tsx index afc84ab..8bdb949 100644 --- a/src/lib/task/calendar/data.tsx +++ b/src/lib/task/calendar/data.tsx @@ -1,6 +1,8 @@ import {Event} from "react-big-calendar"; export interface TaskEvent extends Event { id?: any; + name?:string; state?:any; + taskType?:string; priority?:any; } diff --git a/src/lib/task/calendar/service.tsx b/src/lib/task/calendar/service.tsx index bf09dd5..5c39035 100644 --- a/src/lib/task/calendar/service.tsx +++ b/src/lib/task/calendar/service.tsx @@ -1,5 +1,8 @@ import {httpReq} from "@/utils/axiosReq"; import {unstable_noStore as noStore} from "next/dist/server/web/spec-extension/unstable-no-store"; +import {DataType, Request, ResponseVO, ResultPage} from "@/lib/definitions"; +import {TaskWebSelectVO} from "@/lib/task/project/definitions"; +import {AxiosResponse} from "axios"; export const editExpectAPI = (requestParam: {}) =>{ noStore(); @@ -7,3 +10,13 @@ export const editExpectAPI = (requestParam: {}) =>{ process.env.NEXT_PUBLIC_TODO_REQUEST_URL + '/task/editExpect', requestParam) } +export async function getTaskAndScheduleRecordAPI(requestParam: Request): Promise>> { + noStore(); + // 使用 Axios 发送 POST 请求获取数据 + const response: AxiosResponse>> = await httpReq.post( + process.env.NEXT_PUBLIC_TODO_REQUEST_URL + '/V2/task/my/schedule/record',requestParam); + // 从响应中提取数据并返回 + console.log("response.data", response.data) + return response.data; +} + diff --git a/src/lib/task/drag/service.tsx b/src/lib/task/drag/service.tsx index 4a6266a..38a18e6 100644 --- a/src/lib/task/drag/service.tsx +++ b/src/lib/task/drag/service.tsx @@ -7,7 +7,7 @@ import {TaskSelectVO} from "@/lib/task/drag/data"; export async function selectTaskAPI(requestParam: Request): Promise>> { noStore(); - // 使用 Axios 发送 PUT 请求获取数据 + // 使用 Axios 发送 POST 请求获取数据 const response: AxiosResponse>> = await httpReq.post( process.env.NEXT_PUBLIC_TODO_REQUEST_URL + '/V2/task/select', requestParam); // 从响应中提取数据并返回 diff --git a/src/lib/task/project/definitions.tsx b/src/lib/task/project/definitions.tsx index 4bf6175..c778854 100644 --- a/src/lib/task/project/definitions.tsx +++ b/src/lib/task/project/definitions.tsx @@ -5,9 +5,13 @@ export type TaskWebSelectVO ={ description?:string, treeList:boolean, treeFilter?:boolean, + treeOrList?:boolean, pid?:string, - state?:string[], + state?:string[]|string, + taskTypeList?:string[], priority?:string[], expectedStartTimeStart?:Dayjs, - expectedStartTimeEnd?:Dayjs + expectedStartTimeEnd?:Dayjs, + expectedStartTime?:Dayjs|Date, + expectedEndTime?:Dayjs|Date, } \ No newline at end of file diff --git a/src/ui/LocalContent.tsx b/src/ui/LocalContent.tsx index fba12a4..e21f867 100644 --- a/src/ui/LocalContent.tsx +++ b/src/ui/LocalContent.tsx @@ -1,5 +1,6 @@ import React from 'react'; -const LocalContext = React.createContext({'taskState':'','expectedStartTime':'','refreshData':true}); +const LocalContext = React.createContext({'taskState':'','expectedStartTime':'','refreshData':true, +'taskTypeList':[""]}); export default LocalContext; diff --git a/src/ui/globals.css b/src/ui/globals.css index 3c4b158..2095d82 100644 --- a/src/ui/globals.css +++ b/src/ui/globals.css @@ -29,7 +29,7 @@ html { vertical-align: -0.15em; fill: currentColor; overflow: hidden; - padding-right: 0.5em; + /*padding-right: 0.5em;*/ } .displayFlexRow{ display: flex; diff --git a/src/ui/task/TitleOperation.tsx b/src/ui/task/TitleOperation.tsx index 17d563d..b8880ad 100644 --- a/src/ui/task/TitleOperation.tsx +++ b/src/ui/task/TitleOperation.tsx @@ -13,12 +13,14 @@ import Dropdown from "antd/es/dropdown/dropdown"; interface TitleOperationProps { setTaskState: (value: string) => void; + setTaskTypeList: (value: string[]) => void; setExpectedStartTime: (value: string) => void; refreshData: () => void; } export const TitleOperation: React.FC = ({ setTaskState, + setTaskTypeList, setExpectedStartTime, refreshData }: TitleOperationProps) => { @@ -30,7 +32,7 @@ export const TitleOperation: React.FC = ({ const [pathName, setPathName] = useState(pathname); console.log('usePathname()', pathname); - console.log('useSearchParams()',searchParams.toString(),searchParams.get('pName'), searchParams.get('pid')); + console.log('useSearchParams()', searchParams.toString(), searchParams.get('pName'), searchParams.get('pid')); const data = useContext(LocalContext); const {RangePicker} = DatePicker; const expectStartTimeParseResult: RequestDateType[] = data.expectedStartTime.length > 0 ? JSON.parse(data.expectedStartTime) : [undefined, undefined] @@ -41,26 +43,28 @@ export const TitleOperation: React.FC = ({ ]; const typeList: CheckboxOptionType[] = [ - { label: '计划', value: '0,1,2,3', }, - { label: '打卡', value: '4', }, - { label: '事件', value: '5', }, + {label: '计划', value: '0,1,2,3'}, + {label: '打卡', value: '4'}, + // { label: '事件', value: '5', }, ]; // ✅ 监听 searchParams 变化 useEffect(() => { const pName = searchParams.get("pName"); - if(pName&&pName!=document.title){ + if (pName && pName != document.title) { document.title = pName; } + setPathName(pathname) setPathParam(searchParams.toString()); }, [searchParams]); // searchParams 变化时触发 - const onClick: MenuProps['onClick'] = ({ key }) => { - if (key == "1"){ + const onClick: MenuProps['onClick'] = ({key}) => { + if (key == "1") { - }else if (key == "2"){ + } else if (key == "2") { replace(pathName) setPathParam(undefined) + refreshData() } }; @@ -88,28 +92,35 @@ export const TitleOperation: React.FC = ({ { !usePathname().startsWith("/task/project") && } { !usePathname().startsWith("/task/drag") && } { !usePathname().startsWith("/task/calendar") && } { - usePathname().startsWith("/task/calendar") && - ( - + usePathname().startsWith("/task/calendar") && ( +
*
+ { + if (checkedValue.length == 0) { + message.error("至少选择一个展示项") + } else { + setTaskTypeList(checkedValue) + } + }}/> +
) } { @@ -173,14 +184,16 @@ export const TitleOperation: React.FC = ({ { /*日历需要状态*/ !usePathname().startsWith("/task/project") && - + } - - + +
} diff --git a/src/ui/task/calendar/CalShow.tsx b/src/ui/task/calendar/CalShow.tsx index 4549072..d8719f4 100644 --- a/src/ui/task/calendar/CalShow.tsx +++ b/src/ui/task/calendar/CalShow.tsx @@ -6,16 +6,20 @@ import 'react-big-calendar/lib/css/react-big-calendar.css' import 'react-big-calendar/lib/sass/styles.scss' import 'react-big-calendar/lib/addons/dragAndDrop/styles.scss' import '@/ui/task/calendar/index.modules.css' -import {commonUpdate, getTaskTreeResult, OPERATION_BUTTON_TYPE} from "@/lib/task/project/data"; +import {commonUpdate, getTaskTreeResult, getTaskTreeResultAPI, OPERATION_BUTTON_TYPE} from "@/lib/task/project/data"; import {useSearchParams} from "next/dist/client/components/navigation"; import {DetailModelForm} from "@/ui/task/project/DetailModelForm"; -import {SearchObject} from "@/lib/definitions"; +import {Request, SearchObject} from "@/lib/definitions"; import LocalContext from "@/ui/LocalContent"; import withDragAndDrop, {EventInteractionArgs} from "react-big-calendar/lib/addons/dragAndDrop"; import {TaskEvent} from "@/lib/task/calendar/data"; -import {editExpectAPI} from "@/lib/task/calendar/service"; +import {editExpectAPI, getTaskAndScheduleRecordAPI} from "@/lib/task/calendar/service"; import TaskNamePrefixIcon from "@/components/TaskNameAndIcon"; import TaskNameAndIcon from "@/components/TaskNameAndIcon"; +import {TaskWebSelectVO} from "@/lib/task/project/definitions"; +import {message} from "antd"; +import ClickRecord from "@/components/ClickRecord"; +import {editClickRecordAPI} from "@/components/service/ScheduleTask"; /** * https://github.com/jquense/react-big-calendar?tab=readme-ov-file @@ -31,16 +35,32 @@ const CalShow: React.FC = () => { // 展示在页面的任务,默认获取当前月的信息。 const [events, setEvents] = useState([]); const [open, setOpen] = useState(false); + const [openClickRecord, setOpenClickRecord] = useState(false); const [description, setDescription] = useState(''); const [operationId, setOperationId] = useState(-1); const [itemId, setItemId] = useState('-1'); + const [recordId,setRecordId] = useState(); + const [taskName, setTaskName] = useState(""); const [expectedStartTime, setExpectedStartTime] = useState(); const [expectedEndTime, setExpectedEndTime] = useState(); const [range, setRange] = useState<{ start: Date; end: Date }>({ start: dayjs(date).startOf('week').toDate(), end: dayjs(date).endOf('week').toDate() }); - const state = useContext(LocalContext).taskState; + const {taskState:state,taskTypeList} = useContext(LocalContext); + + const [searchObject,setSearchObject] = + useState>({ + pageSize: 9999, + pageNumber: 1, + data:{ + treeList:true, + treeFilter:true, + treeOrList:false, + expectedStartTime:range.start, + expectedEndTime:range.end + } + }) const handleViewChange = (newView: View) => { setView(newView); @@ -60,23 +80,28 @@ const CalShow: React.FC = () => { {name: 'ALL-CHILD', value: "true", operateType: "ALL-CHILD"}, {name: 'TREE-FILTER', value: "true", operateType: "TREE-FILTER"}, ); + searchObject.data.pid=pid + setSearchObject({...searchObject}) } loadData(searchList); }; useEffect(() => { console.log("CalShow:useEffect:range", range) - const searchListE = [] + // const searchListE = [] if (pid != null) { - searchListE.push( - {name: "pid", value: pid, operateType: "="}, - {name: 'ALL-CHILD', value: "true", operateType: "ALL-CHILD"}, - {name: 'TREE-FILTER', value: "true", operateType: "TREE-FILTER"}, - ); + // searchListE.push( + // {name: "pid", value: pid, operateType: "="}, + // {name: 'ALL-CHILD', value: "true", operateType: "ALL-CHILD"}, + // {name: 'TREE-FILTER', value: "true", operateType: "TREE-FILTER"}, + // ); + searchObject.data.pid=pid + setSearchObject({...searchObject}) } // searchListE.push({name: 'expectedStartTime', value: range.start, operateType: ">="}) // searchListE.push({name: 'expectedStartTime', value: range.end, operateType: "<="}) - loadData(searchListE); + // loadData(searchListE); + loadData() /** * What Is This? * This is to prevent a memory leak, in the off chance that you @@ -86,7 +111,7 @@ const CalShow: React.FC = () => { clearClickTimeout() } }, [useContext(LocalContext), range]); - const message = { + const calMessages = { week: '周', work_week: '工作周', day: '天', @@ -96,39 +121,65 @@ const CalShow: React.FC = () => { today: '当下', agenda: '日程' } - const loadData = (searchList: SearchObject[]) => { + const loadData = (searchList?: SearchObject[]) => { if (state.length > 0) { - searchList.push({name: 'state', value: state, operateType: "IN"}) + // searchList.push({name: 'state', value: state, operateType: "IN"}) + searchObject.data.state=state } - // searchList.push({name: 'expectedEndTime', value: dayjs(date).endOf('month'), operateType: "NOT NULL"}) - let request = JSON.stringify({ - pageSize: 9999, - pageNumber: 1, - data: searchList, - startTime: range.start, - // startTime:dayjs(range.start).format('YYYY-MM-DD HH:mm:ss'), - endTime: range.end, - // endTime:dayjs(range.end).format('YYYY-MM-DD HH:mm:ss'), - startColumn: "expected_start_time", - endColumn: "expected_end_time" - }) - getTaskTreeResult(request).then(responseD => { + if (taskTypeList.length>0){ + searchObject.data.taskTypeList=taskTypeList + } + searchObject.data.expectedStartTime=range.start + searchObject.data.expectedEndTime=range.end + setSearchObject({...searchObject}) + getTaskAndScheduleRecordAPI(searchObject).then(responseD => { if (responseD.status.success) { let result: TaskEvent[] = responseD.data.content.map(taskState => { return { start: dayjs(taskState.expectedStartTime).toDate(), end: dayjs(taskState.expectedEndTime).toDate(), title: , + name:taskState.name, resource: taskState.id, id: taskState.id, state: taskState.state, - priority: taskState.priority + priority: taskState.priority, + taskType:taskState.taskType } }); console.log('responseD.data.content:', result) setEvents([...result]) } }) + // searchList.push({name: 'expectedEndTime', value: dayjs(date).endOf('month'), operateType: "NOT NULL"}) + // let request = JSON.stringify({ + // pageSize: 9999, + // pageNumber: 1, + // data: searchList, + // startTime: range.start, + // // startTime:dayjs(range.start).format('YYYY-MM-DD HH:mm:ss'), + // endTime: range.end, + // // endTime:dayjs(range.end).format('YYYY-MM-DD HH:mm:ss'), + // startColumn: "expected_start_time", + // endColumn: "expected_end_time" + // }) + // getTaskTreeResult(request).then(responseD => { + // if (responseD.status.success) { + // let result: TaskEvent[] = responseD.data.content.map(taskState => { + // return { + // start: dayjs(taskState.expectedStartTime).toDate(), + // end: dayjs(taskState.expectedEndTime).toDate(), + // title: , + // resource: taskState.id, + // id: taskState.id, + // state: taskState.state, + // priority: taskState.priority + // } + // }); + // console.log('responseD.data.content:', result) + // setEvents([...result]) + // } + // }) } const reloadData = () => { setOpen(false) @@ -146,15 +197,19 @@ const CalShow: React.FC = () => { ) const handleSelectEvent = useCallback( - (event: Event, e: React.SyntheticEvent) => { + (event: TaskEvent, e: React.SyntheticEvent) => { clearClickTimeout() clickRef.current = window.setTimeout(() => { - // window.alert(event.title); - console.log("event") - setOperationId(OPERATION_BUTTON_TYPE.DETAIL) - setDescription("任务详情") - setItemId(event.resource) - setOpen(true); + if(event.taskType=='4'){ + setTaskName(event.name||"") + setRecordId(event.id) + setOpenClickRecord(true); + }else { + setOperationId(OPERATION_BUTTON_TYPE.DETAIL) + setDescription("任务详情") + setItemId(event.resource) + setOpen(true); + } }, 250) }, [] @@ -170,6 +225,10 @@ const CalShow: React.FC = () => { const doubleClick = (event: TaskEvent, e: React.SyntheticEvent) => { clearClickTimeout() clickRef.current = window.setTimeout(() => { + if (event.taskType=='4'||event.taskType=='5'){ + message.error("计划双击完成,非计划双击无效果。") + return; + } // 数据落库 commonUpdate({ updateColumnList: [{ @@ -205,11 +264,19 @@ const CalShow: React.FC = () => { if (!allDay && droppedOnAllDaySlot) { event.allDay = true } - editExpectAPI({ - expectedStartTime: start, - expectedEndTime: end, - id: event.resource - }) + if (event.taskType=='4'){ + editClickRecordAPI({ + id:event.id, + startDate:dayjs(start!).toDate(), + recordDate:dayjs(end!).toDate(), + }); + }else { + editExpectAPI({ + expectedStartTime: start, + expectedEndTime: end, + id: event.resource + }) + } setEvents((prev: TaskEvent[]) => { const existing: TaskEvent | undefined = prev.find((ev: TaskEvent) => ev.resource === event.resource); const filtered: TaskEvent[] | undefined = prev.filter((ev: TaskEvent) => ev.resource !== event.resource); @@ -275,10 +342,12 @@ const CalShow: React.FC = () => { reloadData={reloadData} expectedStartTime={expectedStartTime} closeOpen={() => setOpen(false)} expectedEndTime={expectedEndTime}/>} + {openClickRecord && + } {
-
{record.name}
+
= (props) => { if (props.operationId === OPERATION_BUTTON_TYPE.ADD_CHILD) { addTask(request).then(response => { console.log('response', response) - if (response.status.success) { + if (response.data.status.success) { message.success("添加任务成功:" + response.data) props.handleCancel() } @@ -140,11 +140,11 @@ export const DetailForm: React.FC = (props) => { } updateTask(request).then(response => { console.log('response', response) - if (response.status.success) { + if (response.data.status.success) { message.success("修改任务成功:" + response.data) props.handleCancel() }else { - message.error(response.status.message) + message.error(response.data.status.message) } } ) diff --git a/src/ui/task/project/DetailModelForm.tsx b/src/ui/task/project/DetailModelForm.tsx index 8d930f5..8834e04 100644 --- a/src/ui/task/project/DetailModelForm.tsx +++ b/src/ui/task/project/DetailModelForm.tsx @@ -126,18 +126,25 @@ export const DetailModelForm: React.FC = (props) => { const cascaderOnChange: CascaderProps['onChange'] = (value: (string | number)[], selectedOptions: CascaderOption[]) => { - setOnceConsumeChange(value.map(toString)) + if (value.length>0){ + console.log({value}) + setOnceConsumeChange(value.map(valueMap=>valueMap.toString())) + }else { + setOnceConsumeChange([]) + } + }; const changeValueToLabel = ()=>{ + const onceConsumeShow = ["1", "小時"]; if (onceConsumeChange&&onceConsumeChange.length==2){ if(onceConsumeChange[1]=='m'){ - onceConsumeChange[1]='分钟' + onceConsumeShow[1]='分钟' }else if(onceConsumeChange[1]=='h'){ - onceConsumeChange[1]='小时' + onceConsumeShow[1]='小时' }else if(onceConsumeChange[1]=='d'){ - onceConsumeChange[1]='天' + onceConsumeShow[1]='天' } - return onceConsumeChange; + return onceConsumeShow; }else { return [] } @@ -384,6 +391,7 @@ export const DetailModelForm: React.FC = (props) => { if (priority) { values.priority = priority.code } + console.log('update:values:',{values}) // todo 修改 if (props.operationId === OPERATION_BUTTON_TYPE.UPDATE || (props.operationId === OPERATION_BUTTON_TYPE.DETAIL && !editFormDisable)) { await updateTask(values).then(response => { @@ -626,7 +634,6 @@ export const DetailModelForm: React.FC = (props) => { setOnceConsumeChange([])} clearIcon={true} // value={remindType.split(",")} />