wjx 2 weeks ago
parent
commit
92e35e488a

+ 14 - 1
src/pages/weComTask/API/businessPlan/create.ts

@@ -52,6 +52,19 @@ export async function getProjectDetailsApi(projectId: string) {
     });
 }
 
+/**
+ * 计划添加至项目组
+ * @param param0 
+ * @returns 
+ */
+export async function addProjectToGroupApi({ groupId, projectIds }: { groupId: number, projectIds: number[] }) {
+    return request({
+        url: api + `/corpOperation/corp/create/project/addProjectToGroup/${groupId}`,
+        method: 'POST',
+        data: projectIds
+    });
+}
+
 /**
  * 获取计划详情
  * @param projectId 
@@ -83,7 +96,7 @@ export async function delProjectApi(data: { projectIds: number[] }) {
  * @param data 
  * @returns 
  */
-export async function cancelProjectApi(data: { projectIds: number[],  pause: boolean }) {
+export async function cancelProjectApi(data: { projectIds: number[], pause: boolean }) {
     return request({
         url: api + `/corpOperation/corp/create/project/cancel/${data.pause}`,
         method: 'POST',

+ 14 - 0
src/pages/weComTask/API/groupChat/index.ts

@@ -117,6 +117,20 @@ export async function delProjectApi(data: { projectIds: number[] }) {
     });
 }
 
+
+/**
+ * 计划添加至项目组
+ * @param param0 
+ * @returns 
+ */
+export async function addProjectToGroupPullApi({ groupId, projectIds }: { groupId: number, projectIds: number[] }) {
+    return request({
+        url: api + `/corpOperation/corp/pullGroup/project/addProjectToGroup/${groupId}`,
+        method: 'POST',
+        data: projectIds
+    });
+}
+
 /**
  * 停止计划
  * @param data 

+ 98 - 0
src/pages/weComTask/page/businessPlan/taskList/components/addToGroup/index.tsx

@@ -0,0 +1,98 @@
+import { useAjax } from '@/Hook/useAjax';
+import { addProjectToGroupApi } from '@/pages/weComTask/API/businessPlan/create';
+import { addProjectToGroupPullApi } from '@/pages/weComTask/API/groupChat';
+import { getProjectGroupsAllListApi } from '@/pages/weComTask/API/groupManage';
+import { App, Form, Modal, Select } from 'antd';
+import React, { useEffect } from 'react';
+
+interface AddToGroupProps {
+    data: any[];
+    isPull?: boolean;
+    visible?: boolean;
+    onClose?: () => void;
+    onChange?: () => void;
+}
+
+/**
+ * 加入项目组
+ * @param param0 
+ * @returns 
+ */
+const AddToGroup: React.FC<AddToGroupProps> = ({ data, isPull = false, visible, onClose, onChange }) => {
+
+    /****************************************/
+    const { message } = App.useApp()
+    const [form] = Form.useForm();
+    const getProjectGroupsAllList = useAjax(() => getProjectGroupsAllListApi())
+    const addProjectToGroup = useAjax((params) => addProjectToGroupApi(params)) // 群发
+    const addProjectToGroupPull = useAjax((params) => addProjectToGroupPullApi(params)) // 拉群
+    /****************************************/
+
+    useEffect(() => {
+        getProjectGroupsAllList.run()
+    }, [])
+
+    const handleOk = () => {
+        form.validateFields().then((values) => {
+            if (isPull) {
+                addProjectToGroupPull.run({ ...values, projectIds: data.map(item => item.id) }).then((res) => {
+                if (res?.data) {
+                    message.success('添加成功')
+                    onChange?.()
+                }
+            })
+            } else {
+                addProjectToGroup.run({ ...values, projectIds: data.map(item => item.id) }).then((res) => {
+                    if (res?.data) {
+                        message.success('添加成功')
+                        onChange?.()
+                    }
+                })
+            }
+
+        }).catch((err) => {
+            console.log('err', err)
+            form.submit()
+        });
+    }
+
+    return <Modal
+        title={<strong>加入到项目组</strong>}
+        open={visible}
+        onCancel={onClose}
+        width={500}
+        onOk={handleOk}
+        confirmLoading={addProjectToGroup.loading || addProjectToGroupPull.loading}
+    >
+        <Form
+            form={form}
+            name="addToGRoup"
+            labelAlign='left'
+            labelCol={{ span: 5 }}
+            colon={false}
+            scrollToFirstError={{
+                behavior: 'smooth',
+                block: 'center'
+            }}
+            onFinishFailed={({ errorFields }) => {
+                message.error(errorFields?.[0]?.errors?.[0])
+            }}
+            preserve={true}
+        >
+            <Form.Item label={<strong>项目组名称</strong>} name="groupId" rules={[{ required: true, message: '请选择项目组!' }]}>
+                <Select
+                    showSearch
+                    allowClear
+                    placeholder="请选择项目组"
+                    filterOption={(input, option) =>
+                        ((option?.label ?? '') as string).toLowerCase().includes(input.toLowerCase())
+                    }
+                    options={getProjectGroupsAllList?.data?.data?.map((item: any) => ({ label: item.name, value: item.id }))}
+                    loading={getProjectGroupsAllList.loading}
+                />
+            </Form.Item>
+        </Form>
+    </Modal>
+};
+
+export default AddToGroup;

+ 25 - 2
src/pages/weComTask/page/businessPlan/taskList/index.tsx

@@ -4,10 +4,11 @@ import { App, Button, Card, DatePicker, Input, Popconfirm, Space, Table } from '
 import React, { useEffect, useState } from 'react';
 import taskListColumns from './tableConfig';
 import dayjs from 'dayjs';
-import { SearchOutlined, DeleteOutlined, PauseCircleOutlined } from '@ant-design/icons';
+import { SearchOutlined, DeleteOutlined, PauseCircleOutlined, PlusCircleOutlined } from '@ant-design/icons';
 import Log from './log';
 import { inject, observer } from 'mobx-react';
-import { toJS } from 'mobx';
+import { set, toJS } from 'mobx';
+import AddToGroup from './components/addToGroup';
 
 /**
  * 任务列表
@@ -23,6 +24,7 @@ const TaskList: React.FC<{ weComTaskStore: { data: { bookList: TASK_CREATE.BookL
     const [queryFormNew, setQueryFormNew] = useState<BUSINES_SPLAN_API.GetProjectListProps>({ pageNum: 1, pageSize: 20, projectName })
     const [logOpenData, setLogOpenData] = useState<{ visible: boolean, data: any }>({ visible: false, data: {} })
     const [selectedRows, setselectedRows] = useState<any[]>([])
+    const [addToGroupData, setAddToGroupData] = useState<{ visible: boolean, data: any[] }>({ visible: false, data: undefined })
 
     const getProjectList = useAjax((params) => getProjectListApi(params))
     const delProject = useAjax((params) => delProjectApi(params))
@@ -116,6 +118,14 @@ const TaskList: React.FC<{ weComTaskStore: { data: { bookList: TASK_CREATE.BookL
                 }}
                 icon={<SearchOutlined />}
             >搜索</Button>
+            <Button
+                type='primary'
+                icon={<PlusCircleOutlined />}
+                disabled={selectedRows.length === 0}
+                onClick={() => {
+                    setAddToGroupData({ visible: true, data: selectedRows })
+                }}
+            >添加到项目组</Button>
             <Popconfirm
                 title="确定删除?"
                 onConfirm={() => { handleDel({ projectIds: selectedRows.map(i => i.id) }, 'del') }}
@@ -200,6 +210,19 @@ const TaskList: React.FC<{ weComTaskStore: { data: { bookList: TASK_CREATE.BookL
                 setLogOpenData({ visible: false, data: undefined })
             }}
         />}
+
+        {/* 加入到项目组 */}
+        {addToGroupData?.visible && <AddToGroup
+            {...addToGroupData}
+            onClose={() => {
+                setAddToGroupData({ visible: false, data: undefined })
+            }}
+            onChange={() => {
+                setAddToGroupData({ visible: false, data: undefined })
+                setselectedRows([])
+                getProjectList.refresh()
+            }}
+        />}
     </Card>
 };
 

+ 25 - 1
src/pages/weComTask/page/groupChat/taskList/index.tsx

@@ -2,12 +2,13 @@ import { useAjax } from '@/Hook/useAjax';
 import { cancelProjectApi, delProjectApi, getProjectListApi } from '@/pages/weComTask/API/groupChat';
 import { App, Button, Card, DatePicker, Input, Popconfirm, Space, Table } from 'antd';
 import React, { useEffect, useState } from 'react';
-import { DeleteOutlined, PauseCircleOutlined, SearchOutlined } from '@ant-design/icons';
+import { DeleteOutlined, PauseCircleOutlined, PlusCircleOutlined, SearchOutlined } from '@ant-design/icons';
 import dayjs from 'dayjs';
 import taskListColumns from './tableConfig';
 import { toJS } from 'mobx';
 import { inject, observer } from 'mobx-react';
 import Details from './details';
+import AddToGroup from '../../businessPlan/taskList/components/addToGroup';
 
 const TaskList: React.FC<{ weComTaskStore: { data: { bookList: TASK_CREATE.BookListProps[], bookPlatForm: TASK_CREATE.BookPlatFormProps[] } } }> = ({ weComTaskStore }) => {
 
@@ -20,6 +21,7 @@ const TaskList: React.FC<{ weComTaskStore: { data: { bookList: TASK_CREATE.BookL
     const [queryFormNew, setQueryFormNew] = useState<GROUP_CHAT_API.GetProjectListProps>({ pageNum: 1, pageSize: 20, projectName })
     const [selectedRows, setselectedRows] = useState<any[]>([])
     const [logOpenData, setLogOpenData] = useState<{ visible: boolean, data: any }>({ visible: false, data: {} })
+    const [addToGroupData, setAddToGroupData] = useState<{ visible: boolean, data: any[] }>({ visible: false, data: undefined })
 
     const getProjectList = useAjax((params) => getProjectListApi(params))
     const delProject = useAjax((params) => delProjectApi(params))
@@ -112,6 +114,14 @@ const TaskList: React.FC<{ weComTaskStore: { data: { bookList: TASK_CREATE.BookL
                 }}
                 icon={<SearchOutlined />}
             >搜索</Button>
+            <Button
+                type='primary'
+                icon={<PlusCircleOutlined />}
+                disabled={selectedRows.length === 0}
+                onClick={() => {
+                    setAddToGroupData({ visible: true, data: selectedRows })
+                }}
+            >添加到项目组</Button>
             <Popconfirm
                 title="确定删除?"
                 onConfirm={() => { handleDel({ projectIds: selectedRows.map(i => i.id) }, 'del') }}
@@ -197,6 +207,20 @@ const TaskList: React.FC<{ weComTaskStore: { data: { bookList: TASK_CREATE.BookL
                 setLogOpenData({ visible: false, data: undefined })
             }}
         />}
+
+        {/* 加入到项目组 */}
+        {addToGroupData?.visible && <AddToGroup
+            {...addToGroupData}
+            isPull={true}
+            onClose={() => {
+                setAddToGroupData({ visible: false, data: undefined })
+            }}
+            onChange={() => {
+                setAddToGroupData({ visible: false, data: undefined })
+                setselectedRows([])
+                getProjectList.refresh()
+            }}
+        />}
     </Card>
 };
 

+ 25 - 1
src/pages/weComTask/page/groupChatSend/official/taskList/index.tsx

@@ -4,13 +4,14 @@ import { App, Button, Card, DatePicker, Input, Popconfirm, Space, Table } from '
 import React, { useEffect, useState } from 'react';
 import taskListColumns from './tableConfig';
 import dayjs from 'dayjs';
-import { SearchOutlined, DeleteOutlined, PauseCircleOutlined } from '@ant-design/icons';
+import { SearchOutlined, DeleteOutlined, PauseCircleOutlined, PlusCircleOutlined } from '@ant-design/icons';
 import Log from './log';
 import { inject, observer } from 'mobx-react';
 import { toJS } from 'mobx';
 import { getBindMpListApi } from '@/pages/weComTask/API/corpUserAssign';
 import { getCorpAllListApi } from '@/API/global';
 import { DefaultOptionType } from 'antd/es/select';
+import AddToGroup from '../../../businessPlan/taskList/components/addToGroup';
 
 /**
  * 任务列表
@@ -28,6 +29,7 @@ const TaskList: React.FC<{ weComTaskStore: { data: { bookList: TASK_CREATE.BookL
     const [selectedRows, setselectedRows] = useState<any[]>([])
     const [mpList, setMpList] = useState<DefaultOptionType[]>([])
     const [corpList, setCorpList] = useState<DefaultOptionType[]>([])
+    const [addToGroupData, setAddToGroupData] = useState<{ visible: boolean, data: any[] }>({ visible: false, data: undefined })
 
     const getProjectList = useAjax((params) => getProjectListApi(params))
     const delProject = useAjax((params) => delProjectApi(params))
@@ -134,6 +136,14 @@ const TaskList: React.FC<{ weComTaskStore: { data: { bookList: TASK_CREATE.BookL
                 }}
                 icon={<SearchOutlined />}
             >搜索</Button>
+            <Button
+                type='primary'
+                icon={<PlusCircleOutlined />}
+                disabled={selectedRows.length === 0}
+                onClick={() => {
+                    setAddToGroupData({ visible: true, data: selectedRows })
+                }}
+            >添加到项目组</Button>
             <Popconfirm
                 title="确定删除?"
                 onConfirm={() => { handleDel({ projectIds: selectedRows.map(i => i.id) }, 'del') }}
@@ -218,6 +228,20 @@ const TaskList: React.FC<{ weComTaskStore: { data: { bookList: TASK_CREATE.BookL
                 setLogOpenData({ visible: false, data: undefined })
             }}
         />}
+
+
+        {/* 加入到项目组 */}
+        {addToGroupData?.visible && <AddToGroup
+            {...addToGroupData}
+            onClose={() => {
+                setAddToGroupData({ visible: false, data: undefined })
+            }}
+            onChange={() => {
+                setAddToGroupData({ visible: false, data: undefined })
+                setselectedRows([])
+                getProjectList.refresh()
+            }}
+        />}
     </Card>
 };
 

+ 24 - 1
src/pages/weComTask/page/groupChatSend/robot/taskList/index.tsx

@@ -4,13 +4,14 @@ import { App, Button, Card, DatePicker, Input, Popconfirm, Space, Table } from '
 import React, { useEffect, useState } from 'react';
 import taskListColumns from './tableConfig';
 import dayjs from 'dayjs';
-import { SearchOutlined, DeleteOutlined, PauseCircleOutlined } from '@ant-design/icons';
+import { SearchOutlined, DeleteOutlined, PauseCircleOutlined, PlusCircleOutlined } from '@ant-design/icons';
 import Log from './log';
 import { inject, observer } from 'mobx-react';
 import { toJS } from 'mobx';
 import { getBindMpListApi } from '@/pages/weComTask/API/corpUserAssign';
 import { getCorpAllListApi } from '@/API/global';
 import { DefaultOptionType } from 'antd/es/select';
+import AddToGroup from '../../../businessPlan/taskList/components/addToGroup';
 
 /**
  * 任务列表
@@ -28,6 +29,7 @@ const TaskList: React.FC<{ weComTaskStore: { data: { bookList: TASK_CREATE.BookL
     const [selectedRows, setselectedRows] = useState<any[]>([])
     const [mpList, setMpList] = useState<DefaultOptionType[]>([])
     const [corpList, setCorpList] = useState<DefaultOptionType[]>([])
+    const [addToGroupData, setAddToGroupData] = useState<{ visible: boolean, data: any[] }>({ visible: false, data: undefined })
 
     const getProjectList = useAjax((params) => getProjectListApi(params))
     const delProject = useAjax((params) => delProjectApi(params))
@@ -134,6 +136,14 @@ const TaskList: React.FC<{ weComTaskStore: { data: { bookList: TASK_CREATE.BookL
                 }}
                 icon={<SearchOutlined />}
             >搜索</Button>
+            <Button
+                type='primary'
+                icon={<PlusCircleOutlined />}
+                disabled={selectedRows.length === 0}
+                onClick={() => {
+                    setAddToGroupData({ visible: true, data: selectedRows })
+                }}
+            >添加到项目组</Button>
             <Popconfirm
                 title="确定删除?"
                 onConfirm={() => { handleDel({ projectIds: selectedRows.map(i => i.id) }, 'del') }}
@@ -218,6 +228,19 @@ const TaskList: React.FC<{ weComTaskStore: { data: { bookList: TASK_CREATE.BookL
                 setLogOpenData({ visible: false, data: undefined })
             }}
         />}
+
+        {/* 加入到项目组 */}
+        {addToGroupData?.visible && <AddToGroup
+            {...addToGroupData}
+            onClose={() => {
+                setAddToGroupData({ visible: false, data: undefined })
+            }}
+            onChange={() => {
+                setAddToGroupData({ visible: false, data: undefined })
+                setselectedRows([])
+                getProjectList.refresh()
+            }}
+        />}
     </Card>
 };