assistant-todo/src/ui/task/OperationButton.tsx

221 lines
8.4 KiB
TypeScript
Raw Normal View History

2024-04-12 06:43:55 -04:00
import React, {Fragment} from "react";
2025-03-19 06:59:45 -04:00
import {Button, Dropdown, MenuProps, message, Modal, Popconfirm, Radio, Space} from "antd";
2024-04-12 06:43:55 -04:00
import {DownOutlined, QuestionCircleOutlined} from "@ant-design/icons";
2025-03-19 06:59:45 -04:00
import {
commonUpdate,
deleteTask,
OPERATION_BUTTON_TYPE,
taskPriorityList,
} from "@/lib/task/project/data";
2024-04-17 22:38:47 -04:00
import Link from "next/link";
import {DetailModelForm} from "@/ui/task/project/DetailModelForm";
2024-04-12 06:43:55 -04:00
export interface OperationButtonProps {
2024-11-29 06:24:50 -05:00
itemId: string,
2025-03-19 06:59:45 -04:00
priority?:string,
2024-11-29 06:24:50 -05:00
pid: string,
pPid: string,
2024-04-16 04:11:21 -04:00
operationId?: string,
2024-04-25 04:36:40 -04:00
refreshDate?: () => void,
2024-04-12 06:43:55 -04:00
}
2024-04-16 04:11:21 -04:00
2024-04-12 06:43:55 -04:00
interface OperationModelProps {
operationId: number,
2024-11-29 06:24:50 -05:00
pPid: string,
pid: string,
2025-03-19 06:59:45 -04:00
openModal: boolean,
updatePriority:boolean,
priority?:string,
updatePriorityValue?:string,
2024-04-12 06:43:55 -04:00
}
2024-04-16 04:11:21 -04:00
class OperationButton extends React.Component<OperationButtonProps, OperationModelProps> {
2024-04-12 06:43:55 -04:00
constructor(props: OperationButtonProps) {
super(props);
this.state = {
2024-04-16 04:11:21 -04:00
pid: props.pid,
pPid: props.pPid,
operationId: 0,
2025-03-19 06:59:45 -04:00
openModal: false,
updatePriority:false,
priority: props.priority,
2024-04-12 06:43:55 -04:00
};
}
2024-04-16 04:11:21 -04:00
2024-04-12 06:43:55 -04:00
render() {
2024-04-16 04:11:21 -04:00
const handleCancel = () => {
this.setState({...this.state, openModal: false})
if (this.state.operationId !== OPERATION_BUTTON_TYPE.DETAIL) {
this.props.refreshDate?.()
}
2024-04-12 06:43:55 -04:00
}
2024-04-16 04:11:21 -04:00
const onClick: MenuProps['onClick'] = ({key}) => {
console.log(key)
};
2025-03-19 06:59:45 -04:00
const priorityHandleOk =async ()=>{
console.log(this.props.itemId,this.state.priority,this.state.updatePriorityValue)
if (this.state.priority==this.state.updatePriorityValue){
return
}
// 修改任务优先级
const res = await commonUpdate({
updateColumnList:[{
name:'priority',
code:'priority',
value:this.state.updatePriorityValue
}],
conditionColumnList:[{
name:'id',
code:'id',
operateType:'=',
value:this.props.itemId
}]
})
// 关闭弹窗
this.setState({updatePriority:false})
if (res.status.success) {
// 全局提示
message.success("完成任务成功")
// 更新任务
this.props.refreshDate?.()
}else {
message.error(res.status.message)
}
}
2024-04-12 06:43:55 -04:00
const items: MenuProps['items'] = [
{
2024-04-16 04:11:21 -04:00
key: OPERATION_BUTTON_TYPE.DETAIL,
2024-04-12 06:43:55 -04:00
label: <a onClick={(e) => {
2024-04-16 04:11:21 -04:00
this.setState({openModal: true, operationId: OPERATION_BUTTON_TYPE.DETAIL})
}}></a>,
2024-04-12 06:43:55 -04:00
},
{
2024-04-16 04:11:21 -04:00
key: OPERATION_BUTTON_TYPE.ADD_CHILD,
2024-04-12 06:43:55 -04:00
label: <a onClick={(e) => {
2024-04-16 04:11:21 -04:00
this.setState({openModal: true, operationId: OPERATION_BUTTON_TYPE.ADD_CHILD})
}}>线</a>,
2024-04-12 06:43:55 -04:00
},
{
2024-04-16 04:11:21 -04:00
key: OPERATION_BUTTON_TYPE.UPDATE,
2024-04-12 06:43:55 -04:00
label: <a onClick={(e) => {
2024-04-16 04:11:21 -04:00
this.setState({openModal: true, operationId: OPERATION_BUTTON_TYPE.UPDATE})
}}></a>,
2024-04-25 04:36:40 -04:00
},
2024-04-12 06:43:55 -04:00
{
2024-04-16 04:11:21 -04:00
key: OPERATION_BUTTON_TYPE.DELETE,
2024-04-12 06:43:55 -04:00
label: <Popconfirm
title="删除任务"
description="确认要删除任务?"
icon={<QuestionCircleOutlined style={{color: 'red'}}/>}
okText="确认"
cancelText="取消"
2024-04-16 04:11:21 -04:00
onConfirm={() => {
deleteTask(this.props.itemId).then((response => {
console.log('response', response)
if (response.status.success) {
message.success("删除任务成功:" + response.data)
this.props.refreshDate?.()
}
}));
}}
><a></a></Popconfirm>,
},
2024-04-12 06:43:55 -04:00
{
2024-04-16 04:11:21 -04:00
key: OPERATION_BUTTON_TYPE.COMPLETE,
2024-04-12 06:43:55 -04:00
label: <Popconfirm
title="完成任务"
description="确认要完成任务?"
okText="确认"
cancelText="取消"
2024-04-25 21:10:31 -04:00
onConfirm={() => {
commonUpdate({
2024-05-30 02:32:17 -04:00
updateColumnList:[{
2024-04-25 21:10:31 -04:00
name:'state',
code:'state',
value:'7'
}],
2024-05-30 02:32:17 -04:00
conditionColumnList:[{
2024-04-25 21:10:31 -04:00
name:'id',
code:'id',
operateType:'=',
value:this.props.itemId
}]
}).then((response => {
console.log('response', response)
if (response.status.success) {
message.success("完成任务成功")
this.props.refreshDate?.()
}
}));
}}
2024-04-16 04:11:21 -04:00
><a></a></Popconfirm>,
},
2025-03-19 06:59:45 -04:00
{
key: OPERATION_BUTTON_TYPE.UPDATE_PRIORITY,
label: <a onClick={(e) => {
this.setState({updatePriority: true})
}}></a>,
},
2025-01-06 05:55:20 -05:00
{
key: OPERATION_BUTTON_TYPE.SHOW_TREE,
label: <Link href={"/task/project?pid=" + this.props.itemId}></Link>,
},
2024-04-16 04:11:21 -04:00
{
key: OPERATION_BUTTON_TYPE.SHOW_FOUR,
2024-04-25 04:36:40 -04:00
label: <Link href={"/task/four?pid=" + this.props.itemId}></Link>,
2024-05-28 06:54:58 -04:00
},
{
key: OPERATION_BUTTON_TYPE.SHOW_CALENDAR,
label: <Link href={"/task/calendar?pid=" + this.props.itemId}></Link>,
2024-04-12 06:43:55 -04:00
}
];
return <Fragment>
2024-04-16 04:11:21 -04:00
<Dropdown menu={{items, onClick}}>
2024-04-12 06:43:55 -04:00
<a onClick={(e) => {
e.preventDefault()
}}>
<Space>
<DownOutlined/>
</Space>
</a>
</Dropdown>
2025-03-19 06:59:45 -04:00
<Modal
title="修改任务优先级"
open={this.state.updatePriority}
onOk={priorityHandleOk}
onCancel={()=>{this.setState({updatePriority:false})}}
destroyOnClose={true}
okText='确认'
cancelText='取消'
>
<Radio.Group
options={taskPriorityList.map(taskPriority=> {return {
label:taskPriority.name,value:taskPriority.code
}})}
defaultValue={this.state.priority}
optionType="button"
buttonStyle="solid"
onChange={e=>{
console.log({e})
this.setState({updatePriorityValue:e.target.value})
}}
/>
</Modal>
{this.state.openModal&&<DetailModelForm
haveButton={false}
2024-06-03 06:39:42 -04:00
itemId={this.state.operationId === OPERATION_BUTTON_TYPE.UPDATE||this.state.operationId === OPERATION_BUTTON_TYPE.DETAIL?this.props.itemId:undefined}
pPid={this.props.pPid}
2024-06-03 06:39:42 -04:00
pid={this.state.operationId === OPERATION_BUTTON_TYPE.ADD_CHILD ?this.props.itemId:undefined}
operationId={this.state.operationId}
description={this.state.operationId === OPERATION_BUTTON_TYPE.DETAIL ? '任务详情' :
2024-04-16 04:11:21 -04:00
this.state.operationId === OPERATION_BUTTON_TYPE.ADD_CHILD ? '添加支线任务' :
this.state.operationId === OPERATION_BUTTON_TYPE.UPDATE ? '修改任务' : '未知操作'}
open={this.state.openModal}
reloadData={handleCancel}/>}
2024-04-12 06:43:55 -04:00
</Fragment>
}
}
export default OperationButton;