import { useAjax } from '@/Hook/useAjax'; import React, { useEffect, useState } from 'react'; import { getCorpExternalUserRepeatListApi, getExternalUserRepeatByCorpAtlasApi, getExternalUserRepeatByCorpListApi, getExternalUserRepeatCorpApi, getExternalUserRepeatCorpUserApi } from '../../API/home'; import { Avatar, Card, Col, Flex, Input, Row, Space, Spin, Statistic, Table, Tabs, Tooltip, Typography } from 'antd'; import { BarChartOutlined, CheckOutlined, DeleteOutlined, ExclamationOutlined, GlobalOutlined, QuestionCircleOutlined, RetweetOutlined, UserOutlined } from '@ant-design/icons'; import useEcharts from '@/Hook/useEcharts'; const { Title } = Typography; import style from './index.less' import { CorpExternalUserColumns, ExternalUserColumns } from './tableConfig'; const Home: React.FC = () => { /*******************************************/ const { Bar } = useEcharts() const [queryParmas, setQueryParmas] = useState<{ pageNum: number, pageSize: number, corpName?: string }>({ pageNum: 1, pageSize: 30 }) const [queryParmasZt, setQueryParmasZt] = useState<{ pageNum: number, pageSize: number, corpName?: string }>({ pageNum: 1, pageSize: 30 }) const [corpRepeat, setCorpRepeat] = useState<{ [x: string]: any }>({}) const [corpUserRepeat, setCorpUserRepeat] = useState<{ [x: string]: any }>({}) const [barCorpData, setBarCorpData] = useState[]>([]) const [barCorpUserData, setBarCorpUserData] = useState[]>([]) const [activeKey, setActiveKey] = useState('1') const [userData, setUserData] = useState[]>([]) const [overflowData, setOverflowData] = useState<{ avgCorpRepeatUserRate: number, repeatUserRate: number, userCount: number, qcUuidCount: number, qcUuidCountRate: number, qcUuidNullCount: number, qcUuidNullCountRate: number, deletedUserCount: number, deletedUserCountRate: number qcUuidUserCount: number }>({ avgCorpRepeatUserRate: 0, repeatUserRate: 0, userCount: 0, qcUuidCount: 0, qcUuidCountRate: 0, qcUuidNullCount: 0, qcUuidNullCountRate: 0, deletedUserCount: 0, deletedUserCountRate: 0, qcUuidUserCount: 0 }) const getExternalUserRepeatCorp = useAjax(() => getExternalUserRepeatCorpApi()) const getExternalUserRepeatCorpUser = useAjax(() => getExternalUserRepeatCorpUserApi()) const getExternalUserRepeatByCorpAtlas = useAjax(() => getExternalUserRepeatByCorpAtlasApi()) const getExternalUserRepeatByCorpList = useAjax((params) => getExternalUserRepeatByCorpListApi(params)) const getCorpExternalUserRepeatList = useAjax((params) => getCorpExternalUserRepeatListApi(params)) /*******************************************/ useEffect(() => { getExternalUserRepeatByCorpList.run(queryParmas) }, [queryParmas]) useEffect(() => { getCorpExternalUserRepeatList.run(queryParmasZt) }, [queryParmasZt]) useEffect(() => { getExternalUserRepeatCorp.run().then(res => { if (res?.data) { const cr = res.data setCorpRepeat(cr) setBarCorpData([ { name: '仅添加1个主体', '人数': cr?.oneRepeatCount }, { name: '添加2个主体', '人数': cr?.twoRepeatCount }, { name: '添加3个主体', '人数': cr?.threeRepeatCount }, { name: '添加4个主体', '人数': cr?.fourRepeatCount }, { name: '添加5个主体', '人数': cr?.fiveRepeatCount }, { name: '添加5个主体以上', '人数': cr?.gtFiveRepeatCount } ]) } else { setCorpRepeat({}) setBarCorpData([]) } }) getExternalUserRepeatCorpUser.run().then(res => { if (res?.data) { const cur = res.data setCorpUserRepeat(cur) setOverflowData({ avgCorpRepeatUserRate: cur?.avgCorpRepeatUserRate || 0, repeatUserRate: cur?.repeatUserRate || 0, userCount: cur?.userCount || 0, qcUuidCount: cur?.qcUuidCount || 0, qcUuidCountRate: cur?.qcUuidCountRate || 0, qcUuidNullCount: cur?.qcUuidNullCount || 0, qcUuidNullCountRate: cur?.qcUuidNullCountRate || 0, deletedUserCount: cur?.deletedUserCount || 0, deletedUserCountRate: cur?.deletedUserCountRate || 0, qcUuidUserCount: cur?.qcUuidUserCount || 0, }) setBarCorpUserData([ { name: '仅添加1名客服', '人数': cur?.oneRepeatCount }, { name: '添加2名客服', '人数': cur?.twoRepeatCount }, { name: '添加3名客服', '人数': cur?.threeRepeatCount }, { name: '添加4名客服', '人数': cur?.fourRepeatCount }, { name: '添加5名客服', '人数': cur?.fiveRepeatCount }, { name: '添加5名客服以上', '人数': cur?.gtFiveRepeatCount } ]) } else { setCorpUserRepeat({}) setOverflowData({ avgCorpRepeatUserRate: 0, repeatUserRate: 0, userCount: 0, qcUuidCount: 0, qcUuidCountRate: 0, qcUuidNullCount: 0, qcUuidNullCountRate: 0, deletedUserCount: 0, deletedUserCountRate: 0, qcUuidUserCount: 0 }) setBarCorpUserData([]) } }) getExternalUserRepeatByCorpAtlas.run().then(res => { if (res?.data) { setUserData(res?.data?.map(item => { return { name: item.corpName, '主体粉丝总数': item.corpExternalUserCount, '主体内重粉数': item.corpExternalUserRepeatCount } })) } else { setUserData([]) } }) }, []) return
集团总企微用户数} value={overflowData.userCount} style={{ flex: 1 }} /> 集团跨主体去重企微用户数 } style={{ flex: 1 }} value={overflowData.qcUuidUserCount} /> 已识别用户数} value={overflowData.qcUuidCount} style={{ flex: 1 }} suffix={
()
} />
未识别用户数} value={overflowData?.qcUuidNullCount} style={{ flex: 1 }} suffix={
( 0.05 ? { color: '#cf1322' } : { color: '#3f8600' }} />)
} />
双删用户数} value={overflowData?.deletedUserCount} style={{ flex: 1 }} suffix={
( 0.4 ? { color: '#cf1322' } : { color: '#3f8600' }} />)
} />
集团重粉率 } style={{ flex: 1 }} value={overflowData.repeatUserRate ? overflowData.repeatUserRate * 100 : 0} precision={4} suffix="%" />
<RetweetOutlined style={{ color: '#1890ff' }} /> 单主体内重粉分布 { setQueryParmas({ ...queryParmas, corpName: e, pageNum: 1 }); }} style={{ width: 200 }} allowClear /> { let { current, pageSize } = pagination let newQueryForm = JSON.parse(JSON.stringify(queryParmas)) if (sortData && sortData?.order) { newQueryForm['sortType'] = sortData?.order === 'ascend' ? 'ASC' : 'DESC' newQueryForm['orderByField'] = sortData?.field } else { delete newQueryForm['sortType'] delete newQueryForm['orderByField'] } newQueryForm.pageNum = current || newQueryForm.pageNum newQueryForm.pageSize = pageSize || newQueryForm.pageSize setQueryParmas({ ...newQueryForm }) }} /> <BarChartOutlined style={{ color: '#22c55e' }} /> 用户在集团内重粉分布 { setQueryParmasZt({ ...queryParmasZt, corpName: e, pageNum: 1 }); }} style={{ width: 200 }} allowClear />} items={[ { key: '1', label: '主体内用户分布', children:
{ let { current, pageSize } = pagination let newQueryForm = JSON.parse(JSON.stringify(queryParmasZt)) if (sortData && sortData?.order) { newQueryForm['sortType'] = sortData?.order === 'ascend' ? 'ASC' : 'DESC' newQueryForm['orderByField'] = sortData?.field } else { delete newQueryForm['sortType'] delete newQueryForm['orderByField'] } newQueryForm.pageNum = current || newQueryForm.pageNum newQueryForm.pageSize = pageSize || newQueryForm.pageSize setQueryParmasZt({ ...newQueryForm }) }} /> }, { key: '2', label: '用户添加主体分布', children: 用户添加主体分布重粉详细数据
粉丝总数
集团跨主体去重企微用户数
未识别用户数
0.1 ? { color: '#cf1322', fontSize: 14 } : { color: '#3f8600', fontSize: 14 }} suffix="%" precision={4} />)
{`用户添加>1主体人数`}
0.2 ? { color: '#cf1322', fontSize: 14 } : { color: '#3f8600', fontSize: 14 }} suffix="%" precision={4} />)
仅添加1个主体人数
0.5 ? { color: '#cf1322', fontSize: 14 } : { color: '#3f8600', fontSize: 14 }} suffix="%" precision={4} />)
添加2个主体人数
0.1 ? { color: '#cf1322', fontSize: 14 } : { color: '#3f8600', fontSize: 14 }} suffix="%" precision={4} />)
添加3个主体人数
0.09 ? { color: '#cf1322', fontSize: 14 } : { color: '#3f8600', fontSize: 14 }} suffix="%" precision={4} />)
添加4个主体人数
0.08 ? { color: '#cf1322', fontSize: 14 } : { color: '#3f8600', fontSize: 14 }} suffix="%" precision={4} />)
添加5个主体人数
0.07 ? { color: '#cf1322', fontSize: 14 } : { color: '#3f8600', fontSize: 14 }} suffix="%" precision={4} />)
添加5个主体以上人数
0.06 ? { color: '#cf1322', fontSize: 14 } : { color: '#3f8600', fontSize: 14 }} suffix="%" precision={4} />)
}, { key: '3', label: '用户添加客服号分布', children: }, ]} onChange={(e) => { setActiveKey(e) }} activeKey={activeKey} /> }; const DetailsTemplate: React.FC<{ data: { [x: string]: any }, title: string }> = ({ data, title }) => { return {title || '详细数据'}
粉丝总数
集团跨主体去重企微用户数
未识别用户数
0.1 ? { color: '#cf1322', fontSize: 14 } : { color: '#3f8600', fontSize: 14 }} suffix="%" precision={4} />)
已激活集团客服号数
已禁用集团客服号数
0.1 ? { color: '#cf1322', fontSize: 14 } : { color: '#3f8600', fontSize: 14 }} suffix="%" precision={4} />)
退出集团客服号数
0.1 ? { color: '#cf1322', fontSize: 14 } : { color: '#3f8600', fontSize: 14 }} suffix="%" precision={4} />)
未激活集团客服号数
0.1 ? { color: '#cf1322', fontSize: 14 } : { color: '#3f8600', fontSize: 14 }} suffix="%" precision={4} />)
{`用户添加>1客服号人数`}
0.3 ? { color: '#cf1322', fontSize: 14 } : { color: '#3f8600', fontSize: 14 }} suffix="%" precision={4} />)
仅添加1名客服人数
0.5 ? { color: '#cf1322', fontSize: 14 } : { color: '#3f8600', fontSize: 14 }} suffix="%" precision={4} />)
添加2名客服人数
0.1 ? { color: '#cf1322', fontSize: 14 } : { color: '#3f8600', fontSize: 14 }} suffix="%" precision={4} />)
添加3名客服人数
0.09 ? { color: '#cf1322', fontSize: 14 } : { color: '#3f8600', fontSize: 14 }} suffix="%" precision={4} />)
添加4名客服人数
0.08 ? { color: '#cf1322', fontSize: 14 } : { color: '#3f8600', fontSize: 14 }} suffix="%" precision={4} />)
添加5名客服人数
0.07 ? { color: '#cf1322', fontSize: 14 } : { color: '#3f8600', fontSize: 14 }} suffix="%" precision={4} />)
添加5名客服以上人数
0.06 ? { color: '#cf1322', fontSize: 14 } : { color: '#3f8600', fontSize: 14 }} suffix="%" precision={4} />)
}; export default Home;