import { useAjax } from '@/Hook/useAjax'; import React, { useEffect, useState } from 'react'; import { getCorpExternalUserRepeatListApi, getExternalUserRepeatByCorpAtlasApi, getExternalUserRepeatByCorpListApi, getExternalUserRepeatCorpApi, getExternalUserRepeatCorpUserApi } from '../../API/home'; import { Avatar, Card, Checkbox, Col, Divider, Flex, Input, Row, Select, 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'; import UuidTem from './uuidTem'; import { getCorpAllListApi } from '@/API/global'; const Home: React.FC = () => { /*******************************************/ const { Bar } = useEcharts() const [queryParmas, setQueryParmas] = useState<{ pageNum: number, pageSize: number, corpIdList?: string[] }>({ pageNum: 1, pageSize: 30 }) const [queryParmasZt, setQueryParmasZt] = useState<{ pageNum: number, pageSize: number, corpIdList?: 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('3') 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 [oldFiltered, setOldFiltered] = useState<{ label: string, value: string }[]>([]); const [filtered, setFiltered] = useState<{ label: string, value: string }[]>([]); const [filtered1, setFiltered1] = useState<{ label: string, value: string }[]>([]); const getExternalUserRepeatCorp = useAjax(() => getExternalUserRepeatCorpApi()) const getExternalUserRepeatCorpUser = useAjax(() => getExternalUserRepeatCorpUserApi()) const getExternalUserRepeatByCorpAtlas = useAjax(() => getExternalUserRepeatByCorpAtlasApi()) const getExternalUserRepeatByCorpList = useAjax((params) => getExternalUserRepeatByCorpListApi(params)) const getCorpExternalUserRepeatList = useAjax((params) => getCorpExternalUserRepeatListApi(params)) const getCorpAllList = useAjax((params) => getCorpAllListApi(params)) /*******************************************/ useEffect(() => { getCorpAllList.run({}).then(res => { console.log('getCorpAllList', res) setFiltered(res?.data?.map(item => ({ label: item.corpName, value: item.corpId }))) setFiltered1(res?.data?.map(item => ({ label: item.corpName, value: item.corpId }))) setOldFiltered(res?.data?.map(item => ({ label: item.corpName, value: item.corpId }))) }) }, []) useEffect(() => { getExternalUserRepeatByCorpList.run(queryParmas) }, [queryParmas]) useEffect(() => { if (activeKey === '1') getCorpExternalUserRepeatList.run(queryParmasZt) }, [queryParmasZt, activeKey]) useEffect(() => { if (activeKey === '2') { 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([]) } }) } else if (activeKey === '3') { 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([]) } }) } }, [activeKey]) useEffect(() => { getExternalUserRepeatByCorpAtlas.run().then(res => { if (res?.data) { setUserData(res?.data?.map(item => { return { name: item.corpName, '主体粉丝总数': item.corpExternalUserCount, '主体内重粉数': item.corpExternalUserRepeatCount } })) } else { setUserData([]) } }) }, []) const handleSearch = (val, isOne?: boolean) => { const f = oldFiltered.filter((item) => { const inputStr = val.replace(/[,,\s]/g, ','); if (inputStr && inputStr.includes(',')) { const inputList = inputStr.split(',').filter((it) => it).map(i => i.toLowerCase()); return inputList.includes(((item?.label ?? '') as string).toLowerCase()) } return ((item?.label ?? '') as string).toLowerCase().includes(val.toLowerCase()) }); !isOne ? setFiltered(f) : setFiltered1(f); }; 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={2} suffix="%" />
<RetweetOutlined style={{ color: '#1890ff' }} /> 单主体内重粉分布