assistant-todo-mobile/src/pages/DetailSearchContext/index.js

242 lines
11 KiB
JavaScript
Raw Normal View History

2024-12-30 06:24:34 -05:00
import {Button, Checkbox, DatePicker, Form, Input, Space, Switch, Tag} from "antd-mobile";
import ParentTask from "../../components/ParentTask";
2025-01-15 06:35:44 -05:00
import React, {useContext, useEffect} from "react";
2025-01-13 06:33:16 -05:00
import dayjs from "dayjs";
2024-12-30 06:24:34 -05:00
import {CloseCircleFill} from "antd-mobile-icons";
import {useLocation, useNavigate, useOutletContext} from "react-router-dom";
2025-01-01 08:16:32 -05:00
import {getDictionary} from "../../utils/dictUtil";
2025-01-15 06:35:44 -05:00
import {MyRootContext, UPDATE_SEARCH} from "../../components/MyRootContext";
2025-01-01 08:16:32 -05:00
2024-12-30 06:24:34 -05:00
const DetailSearchContext = () => {
const navigate = useNavigate();
const [form] = Form.useForm();
const [visible, setVisible] = React.useState(false);
2025-01-15 06:35:44 -05:00
const { state, dispatch } = useContext(MyRootContext);
const search = state.search
2025-01-01 08:16:32 -05:00
const [stateList, setStateList] = React.useState([]);
const [priorityList, setPriorityList] = React.useState([]);
// 使用Outlet,传值修改标题
const {setTitle} = useOutletContext();
useEffect(() => {
// 使用Outlet,传值修改标题
setTitle("搜索查询")
initDate()
}, [])
async function initDate() {
let stateDictionary = await getDictionary("2");
let priorityDictionary = await getDictionary("1");
setStateList(Array.from(stateDictionary.values()));
setPriorityList(Array.from(priorityDictionary.values()));
if (!search) {
return
}
2025-01-14 06:47:19 -05:00
if (search.data && search.data.orSearchModel && search.data.orSearchModel.andList) {
let searchMap = new Map(
search.data.orSearchModel.andList.map(searchObj => [searchObj.name, searchObj]));
if (searchMap.has("pid")) {
2025-01-11 04:53:51 -05:00
2025-01-14 06:47:19 -05:00
// form.setFieldValue(task.name);
}
if (searchMap.has("state")) {
form.setFieldValue("state", searchMap.get("state").value.split(','))
}
if (searchMap.has("priority")) {
form.setFieldValue("priority", searchMap.get("priority").value.split(','))
}
if (searchMap.has("name")) {
form.setFieldValue("name", searchMap.get("name").value)
}
2025-01-01 08:16:32 -05:00
}
2025-01-08 06:28:29 -05:00
// 结束时间大于todo日开始时间小于结束日
2025-01-14 06:47:19 -05:00
search.data?.orSearchModel?.andSearchModel?.andList?.forEach((searchObj) => {
2025-01-13 06:33:16 -05:00
if (searchObj.name === "expectedEndTime") {
form.setFieldValue("todoDay", dayjs(searchObj.value).toDate())
}
})
2025-01-14 06:47:19 -05:00
if (search.data && search.data.andList) {
let orMap = new Map(search.data.andList.map(searchObj => [searchObj.name, searchObj]));
if (orMap.has("state") && orMap.get("state").value === "10") {
form.setFieldValue("allOverdueTasks", 'checked')
}
2025-01-01 08:16:32 -05:00
}
}
2024-12-30 06:24:34 -05:00
return (
<Form
form={form}
layout='horizontal'
2025-01-01 08:16:32 -05:00
onFinish={(values) => {
2025-01-08 06:28:29 -05:00
console.log("Form", values)
2025-01-13 06:33:16 -05:00
let andList = []
2025-01-14 06:47:19 -05:00
let searchCondition = []
2025-01-13 06:33:16 -05:00
let andSearchModel = {}
2025-01-14 06:47:19 -05:00
let orSearchModel = {"andList": searchCondition, andSearchModel}
2025-01-13 06:33:16 -05:00
2025-01-08 06:28:29 -05:00
const {pidArray, name, priority, state, todoDay, allOverdueTasks} = values;
2025-01-01 08:16:32 -05:00
if (pidArray && pidArray.length !== 0) {
searchCondition.push({"name": "name", "value": pidArray[pidArray.length - 1], "operateType": "="})
}
if (name && name !== "") {
searchCondition.push({"name": "name", "value": name, "operateType": "LIKE"})
}
if (priority && priority.length !== 0) {
searchCondition.push({"name": "priority", "value": priority.join(","), "operateType": "IN"})
}
if (state && state.length !== 0) {
searchCondition.push({"name": "state", "value": state.join(","), "operateType": "IN"})
}
2025-01-08 06:28:29 -05:00
if (todoDay) {
2025-01-13 06:33:16 -05:00
andSearchModel.andList = [{
2025-01-08 06:28:29 -05:00
"name": "expectedStartTime",
"value": dayjs(todoDay).add(1, "d").set('h', 0).set('m', 0).set('s', 0).set('ms', 0).format(),
"operateType": "<"
2025-01-13 06:33:16 -05:00
}, {
2025-01-08 06:28:29 -05:00
"name": "expectedEndTime",
"value": dayjs(todoDay).set('h', 0).set('m', 0).set('s', 0).set('ms', 0).format(),
"operateType": ">"
2025-01-13 06:33:16 -05:00
}]
andSearchModel.orSearchModel = {
"andList": [
{
"name": "expectedStartTime",
"value": dayjs(todoDay).add(1, "d").set('h', 0).set('m', 0).set('s', 0).set('ms', 0).format(),
"operateType": "<"
}, {
"name": "expectedStartTime",
"value": dayjs(todoDay).set('h', 0).set('m', 0).set('s', 0).set('ms', 0).format(),
"operateType": ">"
}, {
"name": "expectedEndTime",
"operateType": "NULL"
}
], orSearchModel: {
"andList": [
{
"name": "expectedEndTime",
"value": dayjs(todoDay).add(1, "d").set('h', 0).set('m', 0).set('s', 0).set('ms', 0).format(),
"operateType": "<"
}, {
"name": "expectedEndTime",
"value": dayjs(todoDay).set('h', 0).set('m', 0).set('s', 0).set('ms', 0).format(),
"operateType": ">"
}, {
"name": "expectedStartTime",
"operateType": "NULL"
}
]
}
}
2025-01-01 08:16:32 -05:00
}
2025-01-08 06:28:29 -05:00
if (allOverdueTasks) {
2025-01-13 06:33:16 -05:00
andList.push({"name": "state", "value": "10", "operateType": "="})
2025-01-08 06:28:29 -05:00
}
2025-01-15 06:35:44 -05:00
dispatch({type:UPDATE_SEARCH,search:{
"pageSize": 12,
"pageNumber": 1,
"data": {
andList,
orSearchModel
2025-01-08 06:28:29 -05:00
}
2025-01-15 06:35:44 -05:00
}})
navigate("/mobile/listTask")
2024-12-30 06:24:34 -05:00
}}
footer={
<Button block type='submit' color='primary' size='large'>
搜索
</Button>
}
>
<ParentTask form={form}/>
<Form.Item
name='name'
label='任务信息'
>
<Input onChange={console.log} placeholder='任务信息'/>
</Form.Item>
2025-01-01 08:16:32 -05:00
<Form.Item name='state' label='任务状态'>
2024-12-30 06:24:34 -05:00
<Checkbox.Group>
<Space direction='vertical'>
2025-01-01 08:16:32 -05:00
{
stateList.map(stateDict =>
2025-01-08 06:28:29 -05:00
<Checkbox key={stateDict.itemCode} value={stateDict.itemCode}>
<Tag key={stateDict.itemCode}
color={stateDict.jsonValue?.color}>{stateDict.itemName}</Tag>
2025-01-01 08:16:32 -05:00
</Checkbox>
)
}
2024-12-30 06:24:34 -05:00
</Space>
</Checkbox.Group>
</Form.Item>
<Form.Item name='priority' label='任务优先级'>
<Checkbox.Group>
<Space direction='vertical'>
2025-01-01 08:16:32 -05:00
{
priorityList.map(stateDict =>
2025-01-08 06:28:29 -05:00
<Checkbox key={stateDict.itemCode} value={stateDict.itemCode}>
<Tag key={stateDict.itemCode}
color={stateDict.jsonValue?.color}>{stateDict.itemName}</Tag>
2025-01-01 08:16:32 -05:00
</Checkbox>
)
}
2024-12-30 06:24:34 -05:00
</Space>
</Checkbox.Group>
</Form.Item>
<Form.Item noStyle
2025-01-13 06:33:16 -05:00
shouldUpdate={(prevValues, curValues) => {
console.log("prevValues,curValues", prevValues, curValues)
return prevValues.todoDay !== curValues.todoDay
}
2024-12-30 06:24:34 -05:00
}
>
2025-01-01 08:16:32 -05:00
{({getFieldValue, setFieldsValue}) => (
2024-12-30 06:24:34 -05:00
<Form.Item
name='todoDay'
2025-01-08 06:28:29 -05:00
initialValue={null}
2024-12-30 06:24:34 -05:00
trigger='onConfirm'
label='TODO日'
help='期望开始时间和期望结束时间包含当日时间段'
arrow={
getFieldValue('todoDay') ? (
<CloseCircleFill
style={{
color: 'var(--adm-color-light)',
fontSize: 14,
}}
onClick={e => {
e.stopPropagation()
2025-01-01 08:16:32 -05:00
setFieldsValue({todoDay: null})
2024-12-30 06:24:34 -05:00
}}
/>) : true
}
onClick={() => {
setVisible(true)
}}
>
<DatePicker
visible={visible}
onClose={() => {
setVisible(false)
}}
>
{value =>
value ? dayjs(value).format('YYYY-MM-DD') : '请选择日期'
}
</DatePicker>
</Form.Item>
)}
</Form.Item>
2025-01-08 06:28:29 -05:00
<Form.Item
name='allOverdueTasks'
label='所有逾期任务'
childElementPosition='right'
initialValue={false}
valuePropName='checked' // 确保为 Switch 设置正确的 prop
>
<Switch/>
</Form.Item>
2024-12-30 06:24:34 -05:00
</Form>)
}
export default DetailSearchContext;