assistant-todo-mobile/src/components/DetailForm/index.js

221 lines
9.1 KiB
JavaScript
Raw Normal View History

2025-01-11 04:53:51 -05:00
import React, {useEffect} from 'react'
2024-12-27 06:06:20 -05:00
import {
Form,
Input,
Button,
Dialog,
TextArea,
2025-01-11 04:53:51 -05:00
Space, Tag, Radio
2024-12-27 06:06:20 -05:00
} from 'antd-mobile'
import ParentTask from "../ParentTask";
import DatePickerItem from "../DataPickerItem"
import "./index.css"
2025-01-11 04:53:51 -05:00
import {addTask, getPTask, getTaskById, updateTask} from "../../utils";
import {useLocation, useNavigate, useOutletContext, useSearchParams} from "react-router-dom";
import dayjs from "dayjs";
2024-12-27 06:06:20 -05:00
export default () => {
2025-01-11 04:53:51 -05:00
// 进入此页面的操作:添加,修改,详情(按钮为添加任务日志)
const location = useLocation();
let [params] = useSearchParams();
2025-01-08 06:28:29 -05:00
// 设置标题栏
2024-12-30 06:24:34 -05:00
const {setTitle} = useOutletContext();
2025-01-11 04:53:51 -05:00
const [currentPath, setCurrentPath] = React.useState("");
const [updateFiledDisabled, setUpdateFiledDisabled] = React.useState(true);
const [pName, setPName] = React.useState();
const [pidArray, setPidArray] = React.useState([]);
2025-01-08 06:28:29 -05:00
// 路由
const navigate = useNavigate();
// 获取form引用
2024-12-29 03:54:01 -05:00
const [form] = Form.useForm();
2025-01-11 04:53:51 -05:00
useEffect(() => {
2025-01-14 06:47:19 -05:00
2025-01-11 04:53:51 -05:00
if (location.pathname.endsWith("addTask")) {
setTitle("添加任务");
setCurrentPath("addTask");
setUpdateFiledDisabled(false);
} else if (location.pathname.endsWith("updateTask")) {
setTitle("修改任务");
setCurrentPath("updateTask");
initData(params.get('id'));
setUpdateFiledDisabled(false);
} else if (location.pathname.endsWith("selectTask")) {
setTitle("任务详情");
setCurrentPath("selectTask");
initData(params.get('id'));
setUpdateFiledDisabled(true);
} else {
// todo 异常处理
}
}, [])
function editParentTask(id) {
if (id === '0') {
return;
}
// 获取父任务信息
getPTask(id).then(res => {
let parentMessageVOList = res[0].parentMessageVOList;
console.log({res, parentMessageVOList});
setPName(parentMessageVOList[parentMessageVOList.length - 1].name);
setPidArray(parentMessageVOList.map(parent => parent.id))
})
}
const initData = (id) => {
if (id) {
getTaskById(id).then((res) => {
let contentElement = res.content[0];
if (contentElement) {
console.log(contentElement.expectedStartTime, contentElement.expectedEndTime,
dayjs(contentElement.expectedStartTime).format(), dayjs(contentElement.expectedStartTime).toDate())
contentElement.expectedStartTime && (contentElement.expectedStartTime = dayjs(contentElement.expectedStartTime).toDate())
contentElement.expectedEndTime && (contentElement.expectedEndTime = dayjs(contentElement.expectedEndTime).toDate())
contentElement.actualStartTime && (contentElement.actualStartTime = dayjs(contentElement.actualStartTime).toDate())
contentElement.actualEndTime && (contentElement.actualEndTime = dayjs(contentElement.actualEndTime).toDate())
form.setFieldsValue(contentElement)
editParentTask(contentElement.pid)
}
})
}
}
2024-12-27 06:06:20 -05:00
const onFinish = (values) => {
2025-01-11 04:53:51 -05:00
if (currentPath === "selectTask") {
// 进入添加日志页面
2025-01-16 06:10:14 -05:00
navigate("/detail/logTask")
2025-01-11 04:53:51 -05:00
return;
2024-12-29 03:54:01 -05:00
}
2025-01-11 04:53:51 -05:00
console.log("提交:", values)
if (values.pidArray?.length > 0) {
values.pid = values.pidArray[values.pidArray.length - 1];
} else if (!values.pid) {
values.pid = '0'
}
if (currentPath === "addTask") {
addTask(values).then(values => {
Dialog.show({
content: `添加任务${values}成功`,
closeOnAction: true,
actions: [
[
{
key: 'back',
text: '回到列表',
onClick: () => {
2025-01-16 06:10:14 -05:00
navigate("/home/listTask")
2025-01-11 04:53:51 -05:00
}
},
{
key: 'create',
text: '创建下一条',
onClick: () => {
// 清空值
form.resetFields();
form.setFieldValue("pidArray", values.pidArray);
}
},
],
],
})
})
return;
}
if (currentPath === "updateTask") {
updateTask(values).then(values => {
Dialog.show({
content: `修改任务${values}成功`,
closeOnAction: true,
actions: [
[
{
key: 'back',
text: '回到列表',
onClick: () => {
2025-01-16 06:10:14 -05:00
navigate("/home/listTask")
2025-01-11 04:53:51 -05:00
}
2025-01-08 06:28:29 -05:00
}
2025-01-11 04:53:51 -05:00
],
2025-01-08 06:28:29 -05:00
],
2025-01-11 04:53:51 -05:00
})
2024-12-29 03:54:01 -05:00
})
2025-01-11 04:53:51 -05:00
}
2024-12-27 06:06:20 -05:00
}
return (
<>
<Form
2024-12-29 03:54:01 -05:00
form={form}
2024-12-27 06:06:20 -05:00
layout='horizontal'
onFinish={onFinish}
footer={
<Button block type='submit' color='primary' size='large'>
2025-01-11 04:53:51 -05:00
{currentPath === "selectTask" ? "日记/心得" : "提交"}
2024-12-27 06:06:20 -05:00
</Button>
}
>
2025-01-11 04:53:51 -05:00
<Form.Item
key='id'
name='id'
hidden={true}
>
</Form.Item>
<Form.Item
key='pid'
name='pid'
hidden={true}
>
</Form.Item>
<Form.Item
key='code'
name='code'
hidden={true}
></Form.Item>
<ParentTask pName={pName} pidArray={pidArray} disabled={updateFiledDisabled} form={form}/>
2024-12-27 06:06:20 -05:00
<Form.Item
name='name'
label='任务名称'
rules={[{required: true, message: '任务名称不能为空'}]}
2025-01-11 04:53:51 -05:00
disabled={updateFiledDisabled}
2024-12-27 06:06:20 -05:00
>
<Input onChange={console.log} placeholder='任务名称'/>
</Form.Item>
2025-01-11 04:53:51 -05:00
<Form.Item name='description' label='任务描述' disabled={updateFiledDisabled}>
2024-12-27 06:06:20 -05:00
<TextArea
2025-01-05 05:04:52 -05:00
placeholder='请输入任务描述'
2024-12-27 06:06:20 -05:00
maxLength={100}
rows={2}
showCount
/>
</Form.Item>
2025-01-16 06:10:14 -05:00
<Form.Item name='state' initialValue='8' label='任务状态' rules={[{required: true, message: '任务状态不能为空'}]} disabled={updateFiledDisabled}>
2024-12-27 06:06:20 -05:00
<Radio.Group>
<Space direction='vertical'>
2025-01-08 06:28:29 -05:00
<Radio value='8'><Tag color='primary'>未开始</Tag></Radio>
2024-12-29 03:54:01 -05:00
<Radio value='9'><Tag color='warning'>进行中</Tag></Radio>
<Radio value='7'><Tag color='success'>已完成</Tag></Radio>
2025-01-08 06:28:29 -05:00
<Radio value='10'><Tag color='danger'>已逾期</Tag></Radio>
2024-12-27 06:06:20 -05:00
</Space>
</Radio.Group>
</Form.Item>
2025-01-16 06:10:14 -05:00
<Form.Item name='priority' label='任务优先级' initialValue='2' rules={[{required: true, message: '任务优先级不能为空'}]} disabled={updateFiledDisabled}>
2024-12-27 06:06:20 -05:00
<Radio.Group>
<Space direction='vertical'>
2024-12-29 03:54:01 -05:00
<Radio value='3'><Tag color='danger'>紧急重要</Tag></Radio>
2024-12-27 06:06:20 -05:00
<Radio value='2'><Tag color='warning'>不紧急重要</Tag></Radio>
2024-12-29 03:54:01 -05:00
<Radio value='1'><Tag>紧急不重要</Tag></Radio>
<Radio value='0'><Tag color='success'>不紧急不重要</Tag></Radio>
2024-12-27 06:06:20 -05:00
</Space>
</Radio.Group>
</Form.Item>
2025-01-11 04:53:51 -05:00
<DatePickerItem disabled={updateFiledDisabled} fieldName={"expectedStartTime"}
labelName={"预计开始时间"}/>
<DatePickerItem disabled={updateFiledDisabled} fieldName={"expectedEndTime"}
labelName={"预计结束时间"}/>
<DatePickerItem disabled={updateFiledDisabled} fieldName={"actualStartTime"}
labelName={"实际开始时间"}/>
<DatePickerItem disabled={updateFiledDisabled} fieldName={"actualEndTime"} labelName={"实际结束时间"}/>
2024-12-27 06:06:20 -05:00
</Form>
</>
)
}