From c69381abad1f04776407eef4356a4fc1d07d4146 Mon Sep 17 00:00:00 2001 From: 1708-huayu <57060237+1708-huayu@users.noreply.github.com> Date: Thu, 14 Aug 2025 18:53:07 +0800 Subject: [PATCH] =?UTF-8?q?feat:=E6=97=A5=E5=8E=86=E8=AE=BE=E7=BD=AE?= =?UTF-8?q?=E4=B8=AD=E6=96=87?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/app/task/layout.tsx | 7 ++- src/ui/task/TitleOperation.tsx | 14 ++++- src/ui/task/calendar/CalShow.tsx | 82 ++++++++++++++++------------ src/ui/task/project/TreeTablePro.tsx | 3 +- 4 files changed, 65 insertions(+), 41 deletions(-) diff --git a/src/app/task/layout.tsx b/src/app/task/layout.tsx index 9c2a4c3..92b86e0 100644 --- a/src/app/task/layout.tsx +++ b/src/app/task/layout.tsx @@ -3,9 +3,12 @@ import React, {Fragment} from "react"; import {TitleOperation} from "@/ui/task/TitleOperation"; import LocalContext from "@/ui/LocalContent"; import dayjs from "dayjs"; +import 'dayjs/locale/zh-cn'; import {ConfigProvider} from "antd"; +import locale from "antd/locale/zh_CN"; export default function Layout({children}: { children: React.ReactNode }) { + dayjs.locale('zh-cn'); const [taskState, setTaskState] = React.useState('8,9,10') let expectStartTimeList = []; expectStartTimeList.push({'name': "expectedStartTime", 'value': dayjs().subtract(7, 'day'), 'operateType': ">="}); @@ -22,6 +25,7 @@ export default function Layout({children}: { children: React.ReactNode }) { return ( + }} + > diff --git a/src/ui/task/TitleOperation.tsx b/src/ui/task/TitleOperation.tsx index 409f697..7e4929c 100644 --- a/src/ui/task/TitleOperation.tsx +++ b/src/ui/task/TitleOperation.tsx @@ -142,10 +142,18 @@ export const TitleOperation: React.FC = ({ allowClear style={{minWidth: '100px'}} placeholder="任务状态" - defaultValue={data.taskState.split(",")} + defaultValue={data.taskState!=''&&data.taskState.split(",").length>0?data.taskState.split(","):[]} onChange={(value) => { - console.log('onChange') - setTaskState(value.join(',')) + console.log('onChange',{value}) + if(value.length == 0){ + setTaskState("") + }else { + setTaskState(value.join(',')) + } + }} + onClear={()=>{ + console.log('onChange,点击了清除无效果') + setTaskState("") }} options={taskStateList.map(item => { return {label: item.name, value: item.code} diff --git a/src/ui/task/calendar/CalShow.tsx b/src/ui/task/calendar/CalShow.tsx index d6aa791..dbc63f9 100644 --- a/src/ui/task/calendar/CalShow.tsx +++ b/src/ui/task/calendar/CalShow.tsx @@ -2,6 +2,7 @@ import React, {Fragment, useCallback, useContext, useEffect, useMemo, useRef, useState} from "react"; import {Calendar, dateFnsLocalizer, dayjsLocalizer, Event, SlotInfo, View} from 'react-big-calendar' import dayjs, {Dayjs} from 'dayjs' +import 'dayjs/locale/zh-cn'; 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' @@ -16,10 +17,11 @@ import {TaskEvent} from "@/lib/task/calendar/data"; import {editExpectAPI, getTaskAndScheduleRecordAPI} from "@/lib/task/calendar/service"; import TaskNameAndIcon from "@/components/TaskNameAndIcon"; import {TaskWebSelectVO} from "@/lib/task/project/definitions"; -import {message} from "antd"; +import {message,Modal} from "antd"; import ClickRecord from "@/components/ClickRecord"; import {editClickRecordRangeAPI} from "@/components/service/ScheduleTask"; - +import {ExclamationCircleFilled} from "@ant-design/icons"; +const { confirm } = Modal; /** * https://github.com/jquense/react-big-calendar?tab=readme-ov-file * @constructor @@ -46,8 +48,9 @@ const CalShow: React.FC = () => { start: dayjs(date).startOf('week').toDate(), end: dayjs(date).endOf('week').toDate() }); + // const [state,setState]=useState( useContext(LocalContext).taskState) + // const [taskTypeList,setTaskTypeList] = useState(useContext(LocalContext).taskTypeList) const {taskState:state,taskTypeList} = useContext(LocalContext); - const [searchObject,setSearchObject] = useState>({ pageSize: 9999, @@ -87,6 +90,7 @@ const CalShow: React.FC = () => { useEffect(() => { console.log("CalShow:useEffect:range", range) + // const searchListE = [] if (pid != null) { // searchListE.push( @@ -109,7 +113,7 @@ const CalShow: React.FC = () => { return () => { clearClickTimeout() } - }, [useContext(LocalContext), range]); + }, [state,taskTypeList,range]); const calMessages = { week: '周', work_week: '工作周', @@ -121,13 +125,8 @@ const CalShow: React.FC = () => { agenda: '日程' } const loadData = (searchList?: SearchObject[]) => { - if (state.length > 0) { - // searchList.push({name: 'state', value: state, operateType: "IN"}) - searchObject.data.state=state - } - if (taskTypeList.length>0){ - searchObject.data.taskTypeList=taskTypeList - } + searchObject.data.state=state + searchObject.data.taskTypeList=taskTypeList searchObject.data.expectedStartTime=range.start searchObject.data.expectedEndTime=range.end setSearchObject({...searchObject}) @@ -232,31 +231,42 @@ const CalShow: React.FC = () => { message.error("计划双击完成,非计划双击无效果。") return; } - // 数据落库 - commonUpdate({ - updateColumnList: [{ - name: '任务状态', - code: 'state', - value: 7 - }], - conditionColumnList: [{ - name: 'id', - code: 'id', - operateType: '=', - value: 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); - let result: TaskEvent[] = []; - if (existing !== undefined && filtered !== undefined) { - result = [...filtered, {...existing, state: 7}]; - } - let strings = state.split(","); - console.log('result', result, strings) - return result.filter((ev: TaskEvent) => !ev.state || strings.indexOf(ev.state.toString()) >= 0); - }) + confirm({ + title: '完成任务', + icon: , + content: `确认要完成任务${event.name}吗?`, + onOk() { + // 数据落库 + commonUpdate({ + updateColumnList: [{ + name: '任务状态', + code: 'state', + value: 7 + }], + conditionColumnList: [{ + name: 'id', + code: 'id', + operateType: '=', + value: 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); + let result: TaskEvent[] = []; + if (existing !== undefined && filtered !== undefined) { + result = [...filtered, {...existing, state: 7}]; + } + let strings = state.split(","); + console.log('result', result, strings) + return result.filter((ev: TaskEvent) => !ev.state || strings.indexOf(ev.state.toString()) >= 0); + }) + }, + onCancel() { + console.log('Cancel'); + }, + }); + }, 250) } diff --git a/src/ui/task/project/TreeTablePro.tsx b/src/ui/task/project/TreeTablePro.tsx index e57d200..a76840f 100644 --- a/src/ui/task/project/TreeTablePro.tsx +++ b/src/ui/task/project/TreeTablePro.tsx @@ -173,7 +173,7 @@ const TreeTablePro: React.FC = (props: { joinId?: string }) => { { setSwitchChecked(checked); - actionRef.current?.reset?.(); + actionRef.current?.reload?.(); }}/>, ]; if (switchChecked) { @@ -239,6 +239,7 @@ const TreeTablePro: React.FC = (props: { joinId?: string }) => { // data: searchList // }) // // const response = await getTaskTreeResult(request) + console.log({params}) const search: TaskWebSelectVO = { pid: pid,