import { useAjax } from "@/Hook/useAjax" import { getProjectLogDetailsListApi, getProjectLogListApi, getProjectTaskLogCountApi, getProjectTaskLogListApi } from "@/pages/weComTask/API/groupChat" import FilterUserTooltip from "@/pages/weComTask/components/filterUser/filterUserTooltip"; import { Badge, Button, Drawer, Flex, Modal, Popover, Space, Table, Typography } from "antd" import React, { useEffect, useState } from "react" import { QuestionCircleFilled } from "@ant-design/icons" import { businessPlanData, LQTaskStatus, TIME_TYPE_ZJ } from "../../businessPlan/create/const"; import PreviewTime from "@/pages/weComTask/components/previewTime"; const { Text, Paragraph, Title } = Typography; interface Props { data: any, bookPlatForm: TASK_CREATE.BookPlatFormProps[] bookList: TASK_CREATE.BookListProps[] visible?: boolean, onClose?: () => void, } const Details: React.FC = ({ data, bookPlatForm, bookList, visible, onClose }) => { /*******************************************/ const getProjectLogList = useAjax((params) => getProjectLogListApi(params)) /*******************************************/ useEffect(() => { getProjectLogList.run(data.id) }, []) return {data.taskName} 运营计划 } onClose={onClose} open={visible} width={1400} styles={{ body: { paddingTop: 5 } }} > {TIME_TYPE_ZJ[value] || '--'} {value !== 'TIME_TYPE_SINGLE_TIMELY' && } styles={{ body: { width: 300, overflow: 'hidden', overflowY: 'auto', maxHeight: 400 } }} > } }, }, { title: '是否开启已有旧群聊补缺', dataIndex: 'isRepair', key: 'isRepair', width: 150, ellipsis: true, render(value, record: any) { return value ? 近{record.repairTimes}天 : }, }, { title: '进群对象', dataIndex: 'corpCondition', key: 'corpCondition', width: 90, align: 'center', render(value) { return !value?.[0]?.allCorpUser ?
指定
({ label: item.platformName, value: item.platformKey }))} configName={'进群对象'} data={value?.[0]} />} >
: '全部' }, }, { title: '群递增起始编号', dataIndex: 'groupIndex', key: 'groupIndex', width: 60, align: 'center' }, { title: '群固定人数', dataIndex: 'groupUserCount', key: 'groupUserCount', width: 50, align: 'center' }, { title: '邀请客户进群完毕后客服号是否退群', dataIndex: 'autoOutGroup', key: 'autoOutGroup', width: 85, align: 'center', render(value) { return value ? : }, }, { title: '是否排除已在群的客户', dataIndex: 'excludeInGroup', key: 'excludeInGroup', width: 60, align: 'center', render(value) { return value ? : }, }, { title: '拉群完成后自动删除拉群标签', dataIndex: 'excludeInGroup', key: 'excludeInGroup', width: 70, align: 'center', render(value) { return value ? : }, }, { title: '群聊关联公众号', dataIndex: 'mpAccountInfo', key: 'mpAccountInfo', width: 100, align: 'center', ellipsis: true, render(value) { return value?.name || '--' }, }, { title: '拉群完成后群聊备注', dataIndex: 'remark', key: 'remark', width: 140, ellipsis: true, render(value) { return value || '--' }, }, { title: '拉群完成后群聊智能标签', dataIndex: 'msgTagDTO', key: 'msgTagDTO', width: 200, ellipsis: true, render(value) { return value && Object.keys(value)?.length > 0 ? {Object.keys(value).map(key => { if (key === 'business' && value[key]) { return `业务(来源渠道):${businessPlanData.find(i => i.value === value.business)?.label || '<空>'}` } else if (key === 'bookCity' && value[key]) { return `书城(来源渠道):${bookPlatForm.find(i => i.id === value.bookCity)?.platformName || '<空>'}` } else if (key === 'product' && value[key]) { return `产品(来源渠道):${bookList.find(i => i.id === value.product)?.bookName || '<空>'}` } return '' }).join('、')} : '--' }, }, { title: '建群成功发送内容', dataIndex: 'groupSendMsg', key: 'groupSendMsg', width: 140, ellipsis: true, render(value) { return value ? value : '--' }, }, { title: '创建人', dataIndex: 'createBy', key: 'createBy', width: 80, align: 'center', ellipsis: true, render(value) { return value?.nickname || '--' } } ]} expandable={{ fixed: 'left', expandRowByClick: true, expandedRowRender: (record) => }} /> } const ExpandedRow: React.FC<{ record: any }> = ({ record }) => { /*****************************************/ const [detalisData, setDetalisData] = useState<{ visible?: boolean, taskLogId?: number }>() const [queryForm, setQueryForm] = useState<{ pageNum: number, pageSize: number }>({ pageNum: 1, pageSize: 20 }) const [failedUserDetails, setFailedUserDetails] = useState<{ visible?: boolean, list: any[] }>({ visible: false, list: [] }) const [total, setTotal] = useState<{ pullGroupCount?: number, pullGroupUserCount?: number, pullGroupUserSuccessCount?: number, pullSuccessCount?: number }>({}) const getProjectTaskLogList = useAjax((params) => getProjectTaskLogListApi(params)) const getProjectTaskLogCount = useAjax((params) => getProjectTaskLogCountApi(params)) /*****************************************/ useEffect(() => { getProjectTaskLogList.run({ ...queryForm, taskId: record.id }) }, [record.id, queryForm]) useEffect(() => { getProjectTaskLogCount.run(record.id).then(res => { setTotal(res?.data || {}) }) }, [record.id, queryForm]) return
{record?.taskName} 任务列表 预计拉群数:{total?.pullGroupCount || 0} 预计拉群客户数:{total?.pullGroupUserCount || 0} 拉群成功总客户数:{total?.pullGroupUserSuccessCount || 0} 拉群成功总数数:{total?.pullSuccessCount || 0}
setDetalisData({ visible: true, taskLogId: record.id })}>详情 } }, { title: '预计拉群数', dataIndex: 'pullGroupCount', key: 'pullGroupCount', width: 120 }, { title: '预计拉群客户数', dataIndex: 'pullGroupUserCount', key: 'pullGroupUserCount', width: 120 }, { title: '上次失败补拉数量', dataIndex: 'lastFailedRetryCount', key: 'lastFailedRetryCount', width: 120 }, { title: '实际拉群客户数', dataIndex: 'pullSuccessUserCount', key: 'pullSuccessUserCount', width: 120 }, { title: '实际拉群数', dataIndex: 'pullSuccessCount', key: 'pullSuccessCount', width: 120 }, { title: '失败客户数', dataIndex: 'pullFailedUserCount', key: 'pullFailedUserCount', width: 120, render: (a, b) => { return setFailedUserDetails({ visible: true, list: b?.pullFailedUserDetail || [] })}>{a} } }, { title: '执行时间', dataIndex: 'createTime', key: 'createTime' } ]} pagination={{ total: getProjectTaskLogList?.data?.data?.total || 0, current: queryForm.pageNum, pageSize: queryForm.pageSize, showTotal: (total) => `共 ${total} 条数据`, onChange: (pageNum, pageSize) => setQueryForm({ pageNum, pageSize }) }} /> {/* 详情 */} {detalisData?.visible && setDetalisData(undefined)} />} {/* 失败客户详情 */} {failedUserDetails?.visible && setFailedUserDetails({ visible: false, list: [] })} />} } const TaskDetails: React.FC<{ visible?: boolean, taskLogId?: number, onClose?: () => void }> = ({ visible, taskLogId, onClose }) => { /*******************************************/ const getProjectLogDetailsList = useAjax((params) => getProjectLogDetailsListApi(params)) /*******************************************/ useEffect(() => { getProjectLogDetailsList.run(taskLogId) }, [taskLogId]) return 任务详情} open={visible} onCancel={onClose} width={900} footer={null} >
} const FailedUserDetails: React.FC<{ visible?: boolean, list?: any[], onClose?: () => void }> = ({ visible, list, onClose }) => { return 任务详情} open={visible} onCancel={onClose} width={900} footer={null} >
} export default React.memo(Details)