import React, { useCallback, useEffect, useState } from 'react'; import style from '../../businessPlan/create/index.less' import { App, Button, Card, Empty, Form, Input, Popconfirm, Select, Space, Spin, Table } from 'antd'; import { welcomeMsgJobTypeApi } from '@/pages/weComTask/API/weMaterial/weMaterial'; import { useAjax } from '@/Hook/useAjax'; import { inject, observer } from 'mobx-react'; import { toJS } from 'mobx'; import Strategy from './components/strategy'; import GroupUser from './components/groupUser'; import { SaveOutlined, RedoOutlined, SearchOutlined, PlusOutlined } from '@ant-design/icons'; import { getCorpUserChatAllListApi } from '@/pages/weComTask/API/groupLeaderManage'; import SelectCorpUserChatUser from '../../groupLeaderManage/selectCorpUserChatUser'; import { PreviewColumns } from './tableConfig'; import SelectCorpUser from '../../corpUserManage/selectCorpUser'; import { getBindMpListApi } from '@/pages/weComTask/API/corpUserAssign'; import { getCorpAllListApi } from '@/API/global'; import { removeEmptyValues } from '@/utils/utils'; import SubmitModal from '../../businessPlan/create/submitModal'; import { addPullGroupTaskApi, getCreateDetailsApi, updateGroupTaskApi } from '@/pages/weComTask/API/groupChat'; import { useNavigate } from 'react-router-dom'; import { getPullGroupData } from './const'; import SelectGroupLeader from '../../groupLeaderManage/selectGroupLeader'; export const DispatchGroupChatCreate = React.createContext(null); /** * 群聊任务创建组件 * @returns */ const GroupChatCreate: React.FC<{ weComTaskStore: { data: { bookList: TASK_CREATE.BookListProps[], bookPlatForm: TASK_CREATE.BookPlatFormProps[] } } }> = ({ weComTaskStore }) => { /***********************************************/ const navigate = useNavigate(); const { bookList, bookPlatForm } = toJS(weComTaskStore.data) const { message, modal } = App.useApp() const [settings, setSettings] = useState(); const [msgJobTypeList, setMsgJobTypeList] = useState<{ value: string, label: string }[]>([]) const [previewData, setPreviewData] = useState([]) const [previewDataOld, setPreviewDataOld] = useState([]) const [mpList, setMplist] = useState<{ label: string, value: string }[]>([]) const [subVisible, setSubVisible] = useState(false) // 选择设置名称弹窗控制 const [projectId, setProjectId] = useState() const welcomeMsgJobType = useAjax(() => welcomeMsgJobTypeApi())//获取业务类型 const getBindMpList = useAjax(() => getBindMpListApi()) const getCorpAllList = useAjax((params) => getCorpAllListApi(params)) const addPullGroupTask = useAjax((params) => addPullGroupTaskApi(params)) const updateGroupTask = useAjax((params) => updateGroupTaskApi(params)) const getCreateDetails = useAjax((params) => getCreateDetailsApi(params)) /***********************************************/ console.log('settings--->', settings) useEffect(() => { const project = sessionStorage.getItem('PG_OFFICIALTASKID') if (project) { const { id, isCopy } = JSON.parse(project) if (!isCopy) { setProjectId(id) } getCreateDetails.run(id).then(res => { sessionStorage.removeItem('PG_OFFICIALTASKID') if (res?.data) { const { bizType, platform, templateProductId, corpUsers, corpChatUserList, corpRobots, strategyList } = res.data const data = getPullGroupData(strategyList || []) console.log('data-->', data) let newSettings: GROUP_CHAT_CREATE.SettingsProps = { bizType, platform: Number(platform) as any, templateProductId, corpUserChat: corpChatUserList.map(item => { return { label: `${item.name}(${item.corpName})`, value: item.id, name: item.name, corpName: item.corpName, corpId: item.corpId, corpUserId: item.corpUserId } }), corpUsers: corpUsers?.map(item => { return { name: item.corpUserName, corpUserId: item.corpUserId, corpName: item.corpName, corpId: item.corpId } }), robotCorpUsers: corpRobots?.map(item => { return { name: item.corpUserName, corpUserId: item.corpUserId, corpName: item.corpName, corpId: item.corpId } }), strategyDTO: { ...data } } console.log('------------->', newSettings) setSettings(newSettings) } }) } else { const task = localStorage.getItem('TASK_GROUP_CHAT_CREATE') if (task) { setSettings(JSON.parse(task).settings) } } }, []) useEffect(() => { welcomeMsgJobType.run().then(res => { if (res?.data) { setMsgJobTypeList(Object.keys(res.data).map(key => ({ value: key, label: res.data[key] }))) } }) getBindMpList.run().then(res => { setMplist(res?.data?.map((item: any) => ({ label: item.name, value: item.id + '' }))) }) getCorpAllList.run({}) }, []) const severBd = () => { localStorage.setItem('TASK_GROUP_CHAT_CREATE', JSON.stringify({ settings })) message.success('存储成功') } const preview = () => { const { corpUserChat, corpUsers, robotCorpUsers, bizType, platform, templateProductId } = settings if (!corpUserChat || corpUserChat?.length === 0) { message.error('请先选择群主号') return } if (!corpUsers || corpUsers?.length === 0) { message.error('请先选择客服号') return } // if (!robotCorpUsers || robotCorpUsers?.length === 0) { // message.error('请先选择机器人号') // return // } if (!bizType) { message.error('请选择业务类型') return } if (!platform) { message.error('请选择书城') return } if (!(settings?.strategyDTO && Object.keys(settings?.strategyDTO).length > 0)) { message.error('请先设置策略') return } if (!settings?.strategyDTO?.strategyList?.every(item => item?.groupObjectList?.length > 0)) { message.error('请先设置群配置') return } const dto = settings.strategyDTO.strategyList.reduce((pre, cur, strategyIndex) => { const { groupObjectList, ...its } = cur groupObjectList.forEach((item, index) => { pre.push({ ...item, ...its, strategyIndex, goIndex: index, taskName: settings.strategyDTO.taskName }) }) return pre }, []) let id = 1 const list = corpUsers.reduce((pre, corpUser) => { return pre.concat(dto.map(item => { return { ...item, corpUser, corpUserChat, robotCorpUsers, bizType, platform, templateProductId, id: id++ } })) }, []) console.log('==================>', list) setPreviewData(list) setPreviewDataOld(list) } // 重置表格 const onPreviewReset = () => { setPreviewData([]) setPreviewDataOld([]) } const tableSearch = useCallback((values) => { console.log(values) const obj = removeEmptyValues(values) if (Object.keys(obj).length) { const newPreviewData = previewDataOld.filter(item => { const weChatAppid = item?.weChatAppid?.split('_')?.[1] return (obj?.mpAccountIds?.length > 0 ? obj.mpAccountIds.includes(weChatAppid) : true) && (obj?.corpId ? item?.corpUser?.corpId === obj?.corpId : true) && (obj?.corpUserIds?.length > 0 ? obj?.corpUserIds?.map(item => item.corpUserId)?.includes(item?.corpUser?.corpUserId) : true) && (obj?.groupCorpId ? item?.corpUserChat?.map(item => item.corpId)?.includes(obj?.groupCorpId) : true) && (obj?.robotCorpId ? item?.robotCorpUsers?.[0]?.corpId === obj?.robotCorpId : true) && (obj?.groupObjectName ? item?.groupObjectName?.includes(obj?.groupObjectName) : true) }) setPreviewData(newPreviewData) } else { setPreviewData(previewDataOld) } }, [previewDataOld, previewData]) const onSubmit = (values: any) => { const { bizType, platform, templateProductId, corpUsers, corpUserChat, robotCorpUsers, strategyDTO } = settings console.log('--->', values) const params: { [x: string]: any } = { taskName: values.projectName, bizType, platform, templateProductId, corpChatUserIds: corpUserChat.map(item => item.value), corpRobots: robotCorpUsers?.map(item => ({ corpId: item.corpId, corpUserId: item.corpUserId, corpUserName: item.name, corpName: item.corpName })), corpUsers: corpUsers.map(item => ({ corpId: item.corpId, corpUserId: item.corpUserId, corpUserName: item.name, corpName: item.corpName })), strategyList: strategyDTO.strategyList.map(({ groupObjectList, ...item }) => { return { ...item, taskDetail: groupObjectList.map(go => { const { externalUserType, externalUserFilter, groupObjectName, tagDTO, weChatAppid, ...itgo } = go const detail = { ...itgo, groupName: groupObjectName, msgTagDTO: tagDTO } if (externalUserType === 'specify') { detail.externalUserFilter = { configName: externalUserFilter.configName, ...externalUserFilter.configContent } } if (weChatAppid) { detail.mpAccountId = weChatAppid.split('_')[1] } return detail }) } }) } console.log('提交参数--->', params) if (projectId) { params.projectId = projectId updateGroupTask.run(params).then(res => { console.log(res) if (res?.data) { message.success('修改提交成功') setProjectId(undefined) sessionStorage.setItem('CAMPCORP_PG', values?.projectName) navigate('/weComTask/groupChat/taskList') } }) } else { addPullGroupTask.run(params).then(res => { console.log(res) if (res?.data) { modal.success({ content: '任务提交成功', styles: { body: { fontWeight: 700 } }, okText: '跳转任务列表', closable: true, onOk: () => { sessionStorage.setItem('CAMPCORP_PG', values?.projectName) navigate('/weComTask/groupChat/taskList') }, onCancel: () => { setSubVisible(false) } }) } }) } } return
{projectId ? getCreateDetails?.data?.data?.taskName + '任务编辑' : ''}配置区} className={`${style.card} ${style.config}`}> { setSettings({ ...settings, corpUserChat: corpUserChat, corpUsers: undefined, robotCorpUsers: undefined }) onPreviewReset() }} /> {settings?.corpUserChat?.length > 0 && <> item.value)} value={settings?.corpUsers} onChange={(value) => { setSettings({ ...settings, corpUsers: value, }) onPreviewReset() }} /> item.value)} value={settings?.robotCorpUsers} onChange={(value) => { setSettings({ ...settings, robotCorpUsers: value, }) onPreviewReset() }} /> } ((option?.label ?? '') as string).toLowerCase().includes(input.toLowerCase()) } value={settings?.platform} onChange={(e) => { setSettings({ ...settings, platform: e }) onPreviewReset() }} options={bookPlatForm.map(item => ({ value: item.id, label: item.platformName }))} /> { setSettings({ ...settings, channel: e.target.value }) onPreviewReset() }} /> : undefined}
{/* 策略配置 */} {/* 进群对象 */}
{ setSettings(undefined) onPreviewReset() localStorage.removeItem('TASK_GROUP_CHAT_CREATE') }} >
0 ? : undefined} > {previewDataOld?.length > 0 ?
公众号} style={{ marginBottom: 10 }} name="mpAccountIds"> ((option?.label ?? '') as string).toLowerCase().includes(input.toLowerCase()) } allowClear options={getCorpAllList?.data?.data?.map((item: any) => ({ label: item.corpName, value: item.corpId }))} /> 群主号主体} style={{ marginBottom: 10 }} name="groupCorpId"> ((option?.label ?? '') as string).toLowerCase().includes(input.toLowerCase()) } allowClear options={getCorpAllList?.data?.data?.map((item: any) => ({ label: item.corpName, value: item.corpId }))} /> 群配置名称} style={{ marginBottom: 10 }} name="groupObjectName">
:
} {/* 提交配置 */} {subVisible && { onSubmit(values) }} onClose={() => { setSubVisible(false) }} />} }; export default inject('store')(observer((props: any) => GroupChatCreate(props.store)))