import { Modal, Spin, Typography } from 'antd'; import React, { useEffect, useState } from 'react'; import '../../tencentAdPutIn/index.less'; import './index.less'; import { getCorpDepartmentListApi, getWechatPagesCsgroupUserApi, updateCustomerServiceGroupApi } from '@/services/adqV3/global'; import { CloseOutlined, UserOutlined } from '@ant-design/icons'; import { useAjax } from '@/Hook/useAjax'; import { DataNode } from 'antd/lib/tree'; import NTree from './nTree'; interface IProps { adAccountId: number; data: { corpName: string; tencentCorpId: string; groupId: number; groupName: string; userInfoList: { userId: string, userName: string, msg: string, state: 0 | 1 }[] }; visible: boolean; onClose?: () => void; onChange?: () => void; } // 定义接口 interface Department { corpId: string; departmentId: number; name: string; parentid: number; orderIn: number; createTime: string; children: Department[]; } const updateTreeData = (list: DataNode[], key: React.Key, children: DataNode[], childrenLen?: number): DataNode[] => list.map(node => { if (node.key === key) { if (childrenLen && node?.children) { return { ...node, children: [...node.children, ...children,] }; } return { ...node, children, }; } if (node.children) { return { ...node, children: updateTreeData(node.children, key, children, childrenLen), }; } return node; }); /** * 初始化数据 * @param data * @returns */ const getInitializationData = (data: Department[]): DataNode[] => { return data.map((item: Department) => { return { title: item.name, key: item.departmentId, checkable: false, children: item?.children?.length ? getInitializationData(item.children) : [] } }) } /** * 修改客服组 * @returns */ const SettingsEnterprise: React.FC = ({ adAccountId, data, visible, onClose, onChange }) => { /*********************************/ const [treeData, setTreeData] = useState([]); const [loading, setLoading] = useState(false); const [userInfoList, setUserInfoList] = useState<{ userId: string, userName: string, state?: 0 | 1, msg?: string }[]>(data.userInfoList || []) const getCorpDepartmentList = useAjax((params) => getCorpDepartmentListApi(params)) const updateCustomerServiceGroup = useAjax((params) => updateCustomerServiceGroupApi(params)) /*********************************/ useEffect(() => { const getData = async () => { try { const res = await getCorpDepartmentList.run({ corpName: data.corpName }) let dataTree: DataNode[] = [] if (res?.length > 0) { dataTree = getInitializationData(res) } setLoading(true) const list = await getWechatPagesCsgroupUserApi({ adAccountId, tencentCorpId: data.tencentCorpId, corpName: data.corpName }) if (list.data?.length) { dataTree.push(...list.data.map((item: any) => ({ title: item.userName, key: item.userId, isLeaf: true }))) } setLoading(false) setTreeData(dataTree) } catch (error) { console.error(error) } } if (adAccountId) getData() }, [adAccountId]) const handleOk = () => { updateCustomerServiceGroup.run({ adAccountId, tencentCorpId: data.tencentCorpId, groupId: data.groupId, groupName: data.groupName, userIdList: userInfoList.map(item => item.userId) }).then((res) => { if (res) { onChange?.() } }) } const onLoadData = ({ key, children }: any) => { return new Promise(resolve => { getWechatPagesCsgroupUserApi({ adAccountId, tencentCorpId: data.tencentCorpId, corpName: data.corpName, departmentId: key }).then((res) => { setTreeData(origin => updateTreeData(origin, key, res.data.map((item: any) => ({ title: item.userName, key: item.userId, isLeaf: true })), children?.length), ); resolve(); }) }); } return 设置客服组} open={visible} onCancel={onClose} onOk={handleOk} className='modalResetCss' width={750} bodyStyle={{ padding: 0 }} confirmLoading={updateCustomerServiceGroup.loading} >
{ console.log('selected', selectedKeys); setUserInfoList(selectedKeys.map((item: any) => ({ userId: item.value, userName: item.label, ...item }))) }} selectedKeys={userInfoList.map(({ userId, userName, ...item }) => ({ value: userId, label: userName, ...item }))} />
已选 {userInfoList?.length || 0} 个客服
{userInfoList.map(item => { return })}
}; export default React.memo(SettingsEnterprise);