assistant-todo/src/app/task/four/layout.tsx

103 lines
4.6 KiB
TypeScript
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

/**
* A layout is UI that is shared between multiple routes. On navigation, layouts preserve state, remain interactive, and do not re-render.
*/
'use client'
import TreeTable from "@/ui/task/four/TreeTable";
import '@/ui/task/four/index.modules.css'
import {useContext, useEffect, useState} from "react";
import LocalContext from "@/ui/LocalContent";
import {useSearchParams} from "next/dist/client/components/navigation";
import {getTaskTreeResult, taskStateList} from "@/lib/task/project/data";
import {DataType, ResponseVO, ResultPage} from "@/lib/definitions";
export default function Layout({children}: { children: React.ReactNode }) {
const [resultDataTypeList, setResultDataTypeList] = useState<DataType[]>([]);
const [loadingState,setLoadingState] =useState(true)
const data = useContext(LocalContext);
console.log('data',data);
// 如果有pid,在前端过滤(防止中间数据不满足条件,导致子数据丢失),
// 无pid在后端过滤防止数据量过大
var pid = useSearchParams().get('pid');
console.log('pid!=null',pid!=null);
const refreshDate = (): void => {
const leftUp:{name:string,operateType:string,value:string|number|boolean}[] = []
setLoadingState(true)
if (pid!=null) {
leftUp.push({name:"pid",value:pid,operateType:"="},
{name:'TREE-FILTER',value:"true",operateType: "TREE-FILTER"},
{name:'ALL-CHILD',value:"true",operateType: "ALL-CHILD"},
);
}else {
if (data.taskState.length>0){
leftUp.push({name:"state",value:data.taskState,operateType:"IN"});
}
if (data.expectedStartTime.length>0){
const parse = JSON.parse(data.expectedStartTime);
leftUp.push(...parse);
}
}
getTaskTreeResult(JSON.stringify({
pageSize:1000,
pageNumber:1,
data: leftUp
})).then((result: ResponseVO<ResultPage<DataType>>) => {
if (result.status.success) {
// recursionActionChild(result.data.content);
result.data.content.forEach(dataType=>{
dataType.state=taskStateList.find(taskState=>taskState.code===dataType.state+'')!.name
})
setResultDataTypeList(result.data.content)
console.log("setResultDataTypeList(result.data.content)",result.data.content)
setLoadingState(false)
}
})
}
useEffect(() => {
// @ts-ignore
const divWidth = document.getElementById('tenUp').offsetWidth;
// @ts-ignore
document.getElementById('upUp').style.fontSize = divWidth + 'px';
// @ts-ignore
document.getElementById('upDown').style.fontSize = divWidth + 'px';
// @ts-ignore
const divHeight = document.getElementById('left').offsetHeight;
// @ts-ignore
document.getElementById('tenLeft').style.fontSize = divHeight/6*4 + 'px';
refreshDate()
}, [data]);
return (
<div>
<div className='firstRow' style={{display: 'flex'}}>
<div className='leftUp'>
<TreeTable loadingState={loadingState} refreshDate={refreshDate} priority='3' resultDataTypeList={resultDataTypeList}/>
</div>
<div id='tenUp' className='up'>
<span id='upUp'></span>
</div>
<div className='rightUp' >
<TreeTable loadingState={loadingState} refreshDate={refreshDate} priority='2' resultDataTypeList={resultDataTypeList}/>
</div>
</div>
<div id='left' className='left'>
<span id='tenLeft' style={{fontSize:'1vh'}}></span>
</div>
<div className='secondRow' style={{display: 'flex'}}>
<div className='leftDown'>
<TreeTable loadingState={loadingState} refreshDate={refreshDate} priority='1' resultDataTypeList={resultDataTypeList}/>
</div>
<div className='up'>
<span id='upDown'></span>
</div>
{/*<div style={{float:'left',width:'48%',height: '48vh',background:"gray"}}>{children}</div>*/}
<div className='rightDown'>
<TreeTable loadingState={loadingState} refreshDate={refreshDate} priority='0' resultDataTypeList={resultDataTypeList}/>
</div>
</div>
</div>
);
}