feat:协作计划按钮处理
This commit is contained in:
parent
354fb92d28
commit
e1a40a8980
|
@ -1,7 +1,7 @@
|
||||||
import {unstable_noStore as noStore} from 'next/cache';
|
import {unstable_noStore as noStore} from 'next/cache';
|
||||||
import {AxiosResponse} from "axios";
|
import {AxiosResponse} from "axios";
|
||||||
import {httpReq} from "@/utils/axiosReq";
|
import {httpReq} from "@/utils/axiosReq";
|
||||||
import {DataType, DictType, Request, ResponseVO, ResultPage} from "@/lib/definitions";
|
import {DataType, DictType, Request, ResponseVO, ResultPage, TaskMessage} from "@/lib/definitions";
|
||||||
import {TaskWebSelectVO} from "@/lib/task/project/definitions";
|
import {TaskWebSelectVO} from "@/lib/task/project/definitions";
|
||||||
|
|
||||||
export async function getTaskTreeResult(requestParam: string): Promise<ResponseVO<ResultPage<DataType>>> {
|
export async function getTaskTreeResult(requestParam: string): Promise<ResponseVO<ResultPage<DataType>>> {
|
||||||
|
@ -52,12 +52,20 @@ export async function getTask(id: string): Promise<ResponseVO<DataType>> {
|
||||||
return response.data;
|
return response.data;
|
||||||
}
|
}
|
||||||
|
|
||||||
export async function addTask(task: DataType): Promise<ResponseVO<string>> {
|
export function addTask(task: DataType): Promise<AxiosResponse<ResponseVO<TaskMessage>>> {
|
||||||
noStore();
|
noStore();
|
||||||
// 使用 Axios 发送 POST 请求添加数据
|
// 使用 Axios 发送 POST 请求添加数据
|
||||||
const response: AxiosResponse<ResponseVO<string>> = await httpReq.post(process.env.NEXT_PUBLIC_TODO_REQUEST_URL + '/task', task);
|
switch(task.taskType){
|
||||||
// 从响应中提取数据并返回
|
// 常规任务
|
||||||
return response.data;
|
case '0':return httpReq.post(process.env.NEXT_PUBLIC_TODO_REQUEST_URL + '/V2/task', task);
|
||||||
|
// 团队任务
|
||||||
|
case '1':return httpReq.post(process.env.NEXT_PUBLIC_TODO_REQUEST_URL + '/V2/task', task);
|
||||||
|
// 顺序
|
||||||
|
case '2':return httpReq.post(process.env.NEXT_PUBLIC_TODO_REQUEST_URL + '/task/step/sort', task);
|
||||||
|
// 周期
|
||||||
|
case '3':return httpReq.post(process.env.NEXT_PUBLIC_TODO_REQUEST_URL + '/task/schedule', task);
|
||||||
|
default:throw new Error("创建任务必选任务类型");
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
export async function updateTask(task: DataType): Promise<ResponseVO<string>> {
|
export async function updateTask(task: DataType): Promise<ResponseVO<string>> {
|
||||||
|
|
|
@ -268,6 +268,7 @@ const CalShow: React.FC = () => {
|
||||||
{open && <DetailModelForm operationId={operationId} description={description} open={open} haveButton={false}
|
{open && <DetailModelForm operationId={operationId} description={description} open={open} haveButton={false}
|
||||||
itemId={itemId}
|
itemId={itemId}
|
||||||
reloadData={reloadData} expectedStartTime={expectedStartTime}
|
reloadData={reloadData} expectedStartTime={expectedStartTime}
|
||||||
|
closeOpen={()=>setOpen(false)}
|
||||||
expectedEndTime={expectedEndTime}/>}
|
expectedEndTime={expectedEndTime}/>}
|
||||||
<DragAndDropCalendar
|
<DragAndDropCalendar
|
||||||
// 本地设置
|
// 本地设置
|
||||||
|
|
|
@ -30,11 +30,12 @@ export type DetailModelFormProps = {
|
||||||
// 标题描述
|
// 标题描述
|
||||||
description: string,
|
description: string,
|
||||||
// 任务内容描述
|
// 任务内容描述
|
||||||
taskContent?:string,
|
taskContent?: string,
|
||||||
// 是否打开界面,用于非按钮操作
|
// 是否打开界面,用于非按钮操作
|
||||||
open: boolean,
|
open: boolean,
|
||||||
// 使用按钮操作
|
// 使用按钮操作
|
||||||
haveButton: boolean,
|
haveButton: boolean,
|
||||||
|
closeOpen?: () => void,
|
||||||
expectedStartTime?: Dayjs,
|
expectedStartTime?: Dayjs,
|
||||||
expectedEndTime?: Dayjs,
|
expectedEndTime?: Dayjs,
|
||||||
// 重新加载数据
|
// 重新加载数据
|
||||||
|
@ -44,14 +45,12 @@ export type PidSelectTree = { label: string; value: string; pid: string; childre
|
||||||
|
|
||||||
export const DetailModelForm: React.FC<DetailModelFormProps> = (props) => {
|
export const DetailModelForm: React.FC<DetailModelFormProps> = (props) => {
|
||||||
console.log("DetailModelForm:props:", props)
|
console.log("DetailModelForm:props:", props)
|
||||||
const [closeButton,setCloseButton] =useState(false)
|
|
||||||
const [form] = Form.useForm<DataType>();
|
const [form] = Form.useForm<DataType>();
|
||||||
const [requestTask,setRequestTask]=useState<DataType>()
|
const [requestTask, setRequestTask] = useState<DataType>()
|
||||||
const [editFormDisable, setEditFormDisable] = useState(props.operationId === OPERATION_BUTTON_TYPE.DETAIL)
|
const [editFormDisable, setEditFormDisable] = useState(props.operationId === OPERATION_BUTTON_TYPE.DETAIL)
|
||||||
// 团队第一层 pid必须为0
|
// 团队第一层 pid必须为0
|
||||||
const [taskType, setTaskType] = useState('0')
|
const [taskType, setTaskType] = useState('0')
|
||||||
useEffect(() => {
|
useEffect(() => {
|
||||||
setCloseButton(false)
|
|
||||||
if (props.itemId != undefined && (
|
if (props.itemId != undefined && (
|
||||||
props.operationId === OPERATION_BUTTON_TYPE.DETAIL || props.operationId === OPERATION_BUTTON_TYPE.UPDATE)) {
|
props.operationId === OPERATION_BUTTON_TYPE.DETAIL || props.operationId === OPERATION_BUTTON_TYPE.UPDATE)) {
|
||||||
getTask(props.itemId).then(task => {
|
getTask(props.itemId).then(task => {
|
||||||
|
@ -65,8 +64,8 @@ export const DetailModelForm: React.FC<DetailModelFormProps> = (props) => {
|
||||||
task.data.expectedTimeRange = [task.data.expectedStartTime ? dayjs(task.data.expectedStartTime) : undefined,
|
task.data.expectedTimeRange = [task.data.expectedStartTime ? dayjs(task.data.expectedStartTime) : undefined,
|
||||||
task.data.expectedEndTime ? dayjs(task.data.expectedEndTime) : undefined];
|
task.data.expectedEndTime ? dayjs(task.data.expectedEndTime) : undefined];
|
||||||
form.setFieldsValue(task.data)
|
form.setFieldsValue(task.data)
|
||||||
if (task.data.pid=="0"){
|
if (task.data.pid == "0") {
|
||||||
form.setFieldValue("pid",undefined)
|
form.setFieldValue("pid", undefined)
|
||||||
}
|
}
|
||||||
setRequestTask(task.data)
|
setRequestTask(task.data)
|
||||||
console.log("form.setFieldsValue(task.data)" + JSON.stringify(task.data))
|
console.log("form.setFieldsValue(task.data)" + JSON.stringify(task.data))
|
||||||
|
@ -79,8 +78,8 @@ export const DetailModelForm: React.FC<DetailModelFormProps> = (props) => {
|
||||||
let data = {
|
let data = {
|
||||||
'expectedTimeRange': [props.expectedStartTime ? props.expectedStartTime : dayjs(), props.expectedEndTime],
|
'expectedTimeRange': [props.expectedStartTime ? props.expectedStartTime : dayjs(), props.expectedEndTime],
|
||||||
'pid': props.pid,
|
'pid': props.pid,
|
||||||
'description':props.taskContent,
|
'description': props.taskContent,
|
||||||
'name':props.taskContent&&props.taskContent?.length>10?props.taskContent.substring(0,10):props.taskContent,
|
'name': props.taskContent && props.taskContent?.length > 10 ? props.taskContent.substring(0, 10) : props.taskContent,
|
||||||
};
|
};
|
||||||
form.setFieldsValue(data)
|
form.setFieldsValue(data)
|
||||||
}
|
}
|
||||||
|
@ -106,7 +105,7 @@ export const DetailModelForm: React.FC<DetailModelFormProps> = (props) => {
|
||||||
return (
|
return (
|
||||||
<ModalForm<DataType>
|
<ModalForm<DataType>
|
||||||
title={props.description}
|
title={props.description}
|
||||||
open={props.open && !props.haveButton&&!closeButton}
|
open={props.open && !props.haveButton}
|
||||||
trigger={props.haveButton ?
|
trigger={props.haveButton ?
|
||||||
<Button type="primary">
|
<Button type="primary">
|
||||||
<PlusOutlined/>
|
<PlusOutlined/>
|
||||||
|
@ -115,22 +114,16 @@ export const DetailModelForm: React.FC<DetailModelFormProps> = (props) => {
|
||||||
}
|
}
|
||||||
form={form}
|
form={form}
|
||||||
autoFocusFirstInput
|
autoFocusFirstInput
|
||||||
onOpenChange={(state)=>{
|
|
||||||
console.log("state",{state})
|
|
||||||
if(!state) {
|
|
||||||
setCloseButton(state)
|
|
||||||
}
|
|
||||||
}}
|
|
||||||
modalProps={{
|
modalProps={{
|
||||||
destroyOnClose: true,
|
destroyOnClose: true,
|
||||||
onCancel: () => {
|
onCancel: () => {
|
||||||
console.log('run');
|
|
||||||
props.reloadData?.();
|
props.reloadData?.();
|
||||||
},
|
},
|
||||||
}}
|
}}
|
||||||
|
readonly={editFormDisable}
|
||||||
submitter={props.itemId !== undefined && props.itemId !== '-1' ? {
|
submitter={props.itemId !== undefined && props.itemId !== '-1' ? {
|
||||||
render: (prop, defaultDoms) => {
|
render: (prop, defaultDoms) => {
|
||||||
prop.resetButtonProps
|
console.log("submitter render: ", {prop})
|
||||||
let result = [
|
let result = [
|
||||||
editFormDisable ? <Button
|
editFormDisable ? <Button
|
||||||
key="edit"
|
key="edit"
|
||||||
|
@ -138,9 +131,7 @@ export const DetailModelForm: React.FC<DetailModelFormProps> = (props) => {
|
||||||
// props.submit();
|
// props.submit();
|
||||||
setEditFormDisable(false)
|
setEditFormDisable(false)
|
||||||
}}
|
}}
|
||||||
>
|
>编辑</Button> : undefined,
|
||||||
编辑
|
|
||||||
</Button> : undefined,
|
|
||||||
props.operationId === OPERATION_BUTTON_TYPE.DETAIL || props.operationId === OPERATION_BUTTON_TYPE.UPDATE ?
|
props.operationId === OPERATION_BUTTON_TYPE.DETAIL || props.operationId === OPERATION_BUTTON_TYPE.UPDATE ?
|
||||||
<Popconfirm
|
<Popconfirm
|
||||||
key='delete'
|
key='delete'
|
||||||
|
@ -161,29 +152,50 @@ export const DetailModelForm: React.FC<DetailModelFormProps> = (props) => {
|
||||||
}
|
}
|
||||||
}}
|
}}
|
||||||
>
|
>
|
||||||
<Button type="primary" danger>
|
<Button type="primary" key="delete" danger>
|
||||||
删除
|
删除
|
||||||
</Button>
|
</Button>
|
||||||
</Popconfirm> : undefined
|
</Popconfirm> : undefined,
|
||||||
,
|
requestTask && requestTask.id ?
|
||||||
requestTask&&requestTask.id?<DiaryOption taskId={requestTask.id} taskName={requestTask.name}/>:undefined,
|
<DiaryOption key="diary" taskId={requestTask.id} taskName={requestTask.name}/> : undefined,
|
||||||
]
|
]
|
||||||
|
|
||||||
// 非新增或者编辑状态不展示
|
// 非新增或者编辑状态不展示
|
||||||
if (!editFormDisable) {
|
if (!editFormDisable) {
|
||||||
result.push(...defaultDoms)
|
result.push(...defaultDoms)
|
||||||
}else {
|
} else {
|
||||||
result.push(<Button type="primary" onClick={()=>setCloseButton(true)}>
|
result.push(<Button type="primary" key="join"
|
||||||
关闭
|
onClick={() => props.closeOpen?.()}>邀请小伙伴加入</Button>)
|
||||||
</Button>)
|
result.push(<Button type="primary" key="close"
|
||||||
|
onClick={() => props.closeOpen?.()}>关闭</Button>)
|
||||||
}
|
}
|
||||||
return result;
|
return result;
|
||||||
},
|
},
|
||||||
} : undefined}
|
} : {
|
||||||
|
render: (prop, defaultDoms) => {
|
||||||
|
console.log("submitter render: ", {prop}, {props},{taskType},{defaultDoms})
|
||||||
|
// if ( prop.searchConfig) {
|
||||||
|
// if (taskType == '1') {
|
||||||
|
// prop.searchConfig.submitText = "创建团队"
|
||||||
|
// }else {
|
||||||
|
// prop.searchConfig.submitText = "确认"
|
||||||
|
// }
|
||||||
|
// }
|
||||||
|
// return defaultDoms;
|
||||||
|
const result = defaultDoms.filter(defaultButton=>defaultButton.key=='rest');
|
||||||
|
result.push(<Button type="primary" key="create-team" onClick={() => form.submit()}>{taskType=='1'?"创建团队":"确认"}
|
||||||
|
</Button>)
|
||||||
|
return result;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
onFinish={async (values) => {
|
onFinish={async (values) => {
|
||||||
console.log('Received values of form: ', values,{...requestTask,...values});
|
{/* onFinish 返回true关闭窗口,范湖false不关闭窗口 */
|
||||||
|
}
|
||||||
|
console.log('Received values of form: ', values, {...requestTask, ...values});
|
||||||
if (requestTask) {
|
if (requestTask) {
|
||||||
const {sortNo}=requestTask;
|
const {sortNo} = requestTask;
|
||||||
values.sortNo=sortNo;
|
values.sortNo = sortNo;
|
||||||
}
|
}
|
||||||
if (values.pid === undefined) {
|
if (values.pid === undefined) {
|
||||||
values.pid = '0'
|
values.pid = '0'
|
||||||
|
@ -231,16 +243,16 @@ export const DetailModelForm: React.FC<DetailModelFormProps> = (props) => {
|
||||||
} else {
|
} else {
|
||||||
await addTask(values).then(response => {
|
await addTask(values).then(response => {
|
||||||
console.log('response', response)
|
console.log('response', response)
|
||||||
if (response.status.success) {
|
if (response.data.status.success) {
|
||||||
message.success("添加任务成功:" + response.data)
|
message.success(`添加计划${response.data.data.name}成功`)
|
||||||
// 树任务重新刷新
|
// 树任务重新刷新
|
||||||
// 四象限任务重新刷新
|
// 四象限任务重新刷新
|
||||||
// 如果可以直接更新列表而不请求。。。。。。
|
// 如果可以直接更新列表而不请求。。。。。。
|
||||||
console.log('props.reloadData?.()', props.reloadData)
|
console.log('props.reloadData?.()', props.reloadData)
|
||||||
|
result = (taskType!='1')
|
||||||
props.reloadData?.()
|
props.reloadData?.()
|
||||||
result = true
|
|
||||||
} else {
|
} else {
|
||||||
message.error(response.status.message)
|
message.error(response.data.status.message)
|
||||||
result = false
|
result = false
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -259,7 +271,7 @@ export const DetailModelForm: React.FC<DetailModelFormProps> = (props) => {
|
||||||
width="sm"
|
width="sm"
|
||||||
name="taskType"
|
name="taskType"
|
||||||
label="任务类型"
|
label="任务类型"
|
||||||
initialValue='0'
|
initialValue={taskType}
|
||||||
disabled={editFormDisable}
|
disabled={editFormDisable}
|
||||||
onChange={(value: string, option) => {
|
onChange={(value: string, option) => {
|
||||||
setTaskType(value)
|
setTaskType(value)
|
||||||
|
@ -330,52 +342,48 @@ export const DetailModelForm: React.FC<DetailModelFormProps> = (props) => {
|
||||||
/>
|
/>
|
||||||
</ProForm.Group>
|
</ProForm.Group>
|
||||||
<ProFormTextArea
|
<ProFormTextArea
|
||||||
// width="md"
|
width="xl"
|
||||||
name="description"
|
name="description"
|
||||||
label="任务描述"
|
label="任务描述"
|
||||||
// tooltip="最长为 24 位"
|
tooltip="最长255个字"
|
||||||
placeholder="请输入任务描述"
|
placeholder="请输入任务描述"
|
||||||
disabled={editFormDisable}
|
disabled={editFormDisable}
|
||||||
/>
|
/>
|
||||||
|
|
||||||
<ProForm.Group>
|
<ProForm.Group>
|
||||||
<ProFormSelect
|
<ProFormSelect
|
||||||
request={async () => taskPriorityList.map(taskState => {
|
request={async () =>
|
||||||
return {
|
taskPriorityList.map
|
||||||
'label': taskState.name,
|
(
|
||||||
'value': taskState.code
|
taskState => {
|
||||||
|
return {'label': taskState.name, 'value': taskState.code}
|
||||||
|
}
|
||||||
|
)
|
||||||
}
|
}
|
||||||
})}
|
|
||||||
width="sm"
|
width="sm"
|
||||||
name="priority"
|
name="priority"
|
||||||
label="任务优先级"
|
label="任务优先级"
|
||||||
initialValue='3'
|
initialValue='3'
|
||||||
disabled={editFormDisable}
|
disabled={editFormDisable}
|
||||||
rules={[
|
rules={[{required: true, message: "请选择计划优先级"}]}
|
||||||
{
|
|
||||||
required: true,
|
|
||||||
message: "请选择计划优先级"
|
|
||||||
}
|
|
||||||
]}
|
|
||||||
/>
|
/>
|
||||||
<ProFormSelect
|
<ProFormSelect
|
||||||
width="sm"
|
width="sm"
|
||||||
options={taskStateList.map(taskState => {
|
options={taskStateList.map(taskState => {
|
||||||
return {
|
return {'label': taskState.name, 'value': taskState.code}
|
||||||
'label': taskState.name,
|
|
||||||
'value': taskState.code
|
|
||||||
}
|
|
||||||
})}
|
})}
|
||||||
name="state"
|
name="state"
|
||||||
label="任务状态"
|
label="任务状态"
|
||||||
initialValue='8'
|
initialValue='8'
|
||||||
disabled={editFormDisable}
|
disabled={editFormDisable}
|
||||||
rules={[
|
rules={
|
||||||
|
[
|
||||||
{
|
{
|
||||||
required: true,
|
required: true,
|
||||||
message: "请选择计划状态"
|
message: "请选择计划状态"
|
||||||
}
|
}
|
||||||
]}
|
]
|
||||||
|
}
|
||||||
/>
|
/>
|
||||||
</ProForm.Group>
|
</ProForm.Group>
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue