|
@@ -7,6 +7,7 @@ import useEcharts from '@/Hook/useEcharts';
|
|
|
const { Title } = Typography;
|
|
const { Title } = Typography;
|
|
|
import style from './index.less'
|
|
import style from './index.less'
|
|
|
import { CorpExternalUserColumns, ExternalUserColumns } from './tableConfig';
|
|
import { CorpExternalUserColumns, ExternalUserColumns } from './tableConfig';
|
|
|
|
|
+import UuidTem from './uuidTem';
|
|
|
|
|
|
|
|
const Home: React.FC = () => {
|
|
const Home: React.FC = () => {
|
|
|
|
|
|
|
@@ -18,7 +19,7 @@ const Home: React.FC = () => {
|
|
|
const [corpUserRepeat, setCorpUserRepeat] = useState<{ [x: string]: any }>({})
|
|
const [corpUserRepeat, setCorpUserRepeat] = useState<{ [x: string]: any }>({})
|
|
|
const [barCorpData, setBarCorpData] = useState<Record<string, any>[]>([])
|
|
const [barCorpData, setBarCorpData] = useState<Record<string, any>[]>([])
|
|
|
const [barCorpUserData, setBarCorpUserData] = useState<Record<string, any>[]>([])
|
|
const [barCorpUserData, setBarCorpUserData] = useState<Record<string, any>[]>([])
|
|
|
- const [activeKey, setActiveKey] = useState<string>('1')
|
|
|
|
|
|
|
+ const [activeKey, setActiveKey] = useState<string>('3')
|
|
|
const [userData, setUserData] = useState<Record<string, any>[]>([])
|
|
const [userData, setUserData] = useState<Record<string, any>[]>([])
|
|
|
const [overflowData, setOverflowData] = useState<{
|
|
const [overflowData, setOverflowData] = useState<{
|
|
|
avgCorpRepeatUserRate: number,
|
|
avgCorpRepeatUserRate: number,
|
|
@@ -45,59 +46,64 @@ const Home: React.FC = () => {
|
|
|
}, [queryParmas])
|
|
}, [queryParmas])
|
|
|
|
|
|
|
|
useEffect(() => {
|
|
useEffect(() => {
|
|
|
- getCorpExternalUserRepeatList.run(queryParmasZt)
|
|
|
|
|
- }, [queryParmasZt])
|
|
|
|
|
|
|
+ if (activeKey === '1')
|
|
|
|
|
+ getCorpExternalUserRepeatList.run(queryParmasZt)
|
|
|
|
|
+ }, [queryParmasZt, activeKey])
|
|
|
|
|
|
|
|
useEffect(() => {
|
|
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([])
|
|
|
|
|
- }
|
|
|
|
|
|
|
+ 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([])
|
|
|
|
|
+ }
|
|
|
|
|
|
|
|
- })
|
|
|
|
|
- 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([])
|
|
|
|
|
- }
|
|
|
|
|
|
|
+ })
|
|
|
|
|
+ } 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([])
|
|
|
|
|
+ }
|
|
|
|
|
+
|
|
|
|
|
+ })
|
|
|
|
|
+ }
|
|
|
|
|
|
|
|
- })
|
|
|
|
|
getExternalUserRepeatByCorpAtlas.run().then(res => {
|
|
getExternalUserRepeatByCorpAtlas.run().then(res => {
|
|
|
if (res?.data) {
|
|
if (res?.data) {
|
|
|
setUserData(res?.data?.map(item => {
|
|
setUserData(res?.data?.map(item => {
|
|
@@ -107,7 +113,7 @@ const Home: React.FC = () => {
|
|
|
setUserData([])
|
|
setUserData([])
|
|
|
}
|
|
}
|
|
|
})
|
|
})
|
|
|
- }, [])
|
|
|
|
|
|
|
+ }, [activeKey])
|
|
|
|
|
|
|
|
return <div>
|
|
return <div>
|
|
|
<Spin spinning={getExternalUserRepeatCorpUser.loading}>
|
|
<Spin spinning={getExternalUserRepeatCorpUser.loading}>
|
|
@@ -125,12 +131,7 @@ const Home: React.FC = () => {
|
|
|
<Card variant="borderless" style={{ width: '20%' }}>
|
|
<Card variant="borderless" style={{ width: '20%' }}>
|
|
|
<Flex justify='space-between'>
|
|
<Flex justify='space-between'>
|
|
|
<Statistic
|
|
<Statistic
|
|
|
- title={<Space>
|
|
|
|
|
- <strong style={{ fontSize: 14 }}>集团跨主体去重企微用户数</strong>
|
|
|
|
|
- <Tooltip title="集团跨主体去重企微用户数=未识别人数+添加1个客服人数+添加多个(>1)客服人数">
|
|
|
|
|
- <QuestionCircleOutlined />
|
|
|
|
|
- </Tooltip>
|
|
|
|
|
- </Space>}
|
|
|
|
|
|
|
+ title={<strong style={{ fontSize: 14 }}>集团跨主体去重企微用户数</strong>}
|
|
|
style={{ flex: 1 }}
|
|
style={{ flex: 1 }}
|
|
|
value={overflowData.qcUuidUserCount}
|
|
value={overflowData.qcUuidUserCount}
|
|
|
/>
|
|
/>
|
|
@@ -146,7 +147,7 @@ const Home: React.FC = () => {
|
|
|
suffix={<div style={{ display: 'flex' }}>
|
|
suffix={<div style={{ display: 'flex' }}>
|
|
|
(<Statistic
|
|
(<Statistic
|
|
|
value={overflowData.qcUuidCountRate ? overflowData.qcUuidCountRate * 100 : 0}
|
|
value={overflowData.qcUuidCountRate ? overflowData.qcUuidCountRate * 100 : 0}
|
|
|
- precision={4}
|
|
|
|
|
|
|
+ precision={2}
|
|
|
suffix="%"
|
|
suffix="%"
|
|
|
valueStyle={overflowData?.qcUuidCountRate < 0.8 ? { color: '#cf1322' } : { color: '#3f8600' }}
|
|
valueStyle={overflowData?.qcUuidCountRate < 0.8 ? { color: '#cf1322' } : { color: '#3f8600' }}
|
|
|
/>)
|
|
/>)
|
|
@@ -164,7 +165,7 @@ const Home: React.FC = () => {
|
|
|
suffix={<div style={{ display: 'flex' }}>
|
|
suffix={<div style={{ display: 'flex' }}>
|
|
|
(<Statistic
|
|
(<Statistic
|
|
|
value={overflowData.qcUuidNullCountRate ? overflowData.qcUuidNullCountRate * 100 : 0}
|
|
value={overflowData.qcUuidNullCountRate ? overflowData.qcUuidNullCountRate * 100 : 0}
|
|
|
- precision={4}
|
|
|
|
|
|
|
+ precision={2}
|
|
|
suffix="%"
|
|
suffix="%"
|
|
|
valueStyle={overflowData?.qcUuidNullCountRate > 0.05 ? { color: '#cf1322' } : { color: '#3f8600' }}
|
|
valueStyle={overflowData?.qcUuidNullCountRate > 0.05 ? { color: '#cf1322' } : { color: '#3f8600' }}
|
|
|
/>)
|
|
/>)
|
|
@@ -182,7 +183,7 @@ const Home: React.FC = () => {
|
|
|
suffix={<div style={{ display: 'flex' }}>
|
|
suffix={<div style={{ display: 'flex' }}>
|
|
|
(<Statistic
|
|
(<Statistic
|
|
|
value={overflowData.deletedUserCountRate ? overflowData.deletedUserCountRate * 100 : 0}
|
|
value={overflowData.deletedUserCountRate ? overflowData.deletedUserCountRate * 100 : 0}
|
|
|
- precision={4}
|
|
|
|
|
|
|
+ precision={2}
|
|
|
suffix="%"
|
|
suffix="%"
|
|
|
valueStyle={overflowData?.deletedUserCountRate > 0.4 ? { color: '#cf1322' } : { color: '#3f8600' }}
|
|
valueStyle={overflowData?.deletedUserCountRate > 0.4 ? { color: '#cf1322' } : { color: '#3f8600' }}
|
|
|
/>)
|
|
/>)
|
|
@@ -196,13 +197,13 @@ const Home: React.FC = () => {
|
|
|
<Statistic
|
|
<Statistic
|
|
|
title={<Space>
|
|
title={<Space>
|
|
|
<strong style={{ fontSize: 14 }}>集团重粉率</strong>
|
|
<strong style={{ fontSize: 14 }}>集团重粉率</strong>
|
|
|
- <Tooltip title="所有主体的重复粉丝去重数量/集团粉丝数">
|
|
|
|
|
|
|
+ <Tooltip title="所有主体的重复粉丝去重数量/集团跨主体去重企微用户数">
|
|
|
<QuestionCircleOutlined />
|
|
<QuestionCircleOutlined />
|
|
|
</Tooltip>
|
|
</Tooltip>
|
|
|
</Space>}
|
|
</Space>}
|
|
|
style={{ flex: 1 }}
|
|
style={{ flex: 1 }}
|
|
|
value={overflowData.repeatUserRate ? overflowData.repeatUserRate * 100 : 0}
|
|
value={overflowData.repeatUserRate ? overflowData.repeatUserRate * 100 : 0}
|
|
|
- precision={4}
|
|
|
|
|
|
|
+ precision={2}
|
|
|
suffix="%"
|
|
suffix="%"
|
|
|
/>
|
|
/>
|
|
|
<Avatar style={{ backgroundColor: '#F3E8FF', color: '#9333ea' }} size={40}><GlobalOutlined /></Avatar>
|
|
<Avatar style={{ backgroundColor: '#F3E8FF', color: '#9333ea' }} size={40}><GlobalOutlined /></Avatar>
|
|
@@ -222,14 +223,14 @@ const Home: React.FC = () => {
|
|
|
/>
|
|
/>
|
|
|
</Flex>
|
|
</Flex>
|
|
|
<Row gutter={16}>
|
|
<Row gutter={16}>
|
|
|
- <Col span={12}>
|
|
|
|
|
|
|
+ <Col span={10}>
|
|
|
<Spin spinning={getExternalUserRepeatByCorpAtlas.loading}>
|
|
<Spin spinning={getExternalUserRepeatByCorpAtlas.loading}>
|
|
|
<Card style={{ height: '100%' }}>
|
|
<Card style={{ height: '100%' }}>
|
|
|
<Bar data={userData} title="粉丝前20单主体总用户数, 主体内重粉数" />
|
|
<Bar data={userData} title="粉丝前20单主体总用户数, 主体内重粉数" />
|
|
|
</Card>
|
|
</Card>
|
|
|
</Spin>
|
|
</Spin>
|
|
|
</Col>
|
|
</Col>
|
|
|
- <Col span={12}>
|
|
|
|
|
|
|
+ <Col span={14}>
|
|
|
<Card style={{ height: '100%' }}>
|
|
<Card style={{ height: '100%' }}>
|
|
|
<Table
|
|
<Table
|
|
|
columns={ExternalUserColumns()}
|
|
columns={ExternalUserColumns()}
|
|
@@ -274,37 +275,18 @@ const Home: React.FC = () => {
|
|
|
/>}
|
|
/>}
|
|
|
items={[
|
|
items={[
|
|
|
{
|
|
{
|
|
|
- key: '1',
|
|
|
|
|
- label: '主体内用户分布',
|
|
|
|
|
- children: <Card>
|
|
|
|
|
- <Table
|
|
|
|
|
- columns={CorpExternalUserColumns()}
|
|
|
|
|
- scroll={{ y: 300, x: 1000 }}
|
|
|
|
|
- bordered
|
|
|
|
|
- dataSource={getCorpExternalUserRepeatList.data?.data?.records}
|
|
|
|
|
- loading={getCorpExternalUserRepeatList.loading}
|
|
|
|
|
- rowKey="corpId"
|
|
|
|
|
- pagination={{
|
|
|
|
|
- total: getCorpExternalUserRepeatList.data?.data?.total,
|
|
|
|
|
- current: getCorpExternalUserRepeatList?.data?.data?.current || 1,
|
|
|
|
|
- pageSize: getCorpExternalUserRepeatList?.data?.data?.size || 20,
|
|
|
|
|
- }}
|
|
|
|
|
- onChange={(pagination: any, _: any, sortData: any) => {
|
|
|
|
|
- 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 })
|
|
|
|
|
- }}
|
|
|
|
|
- />
|
|
|
|
|
- </Card>
|
|
|
|
|
|
|
+ key: '3',
|
|
|
|
|
+ label: '用户添加客服号分布',
|
|
|
|
|
+ children: <Row gutter={16}>
|
|
|
|
|
+ <Col span={12}>
|
|
|
|
|
+ <Card style={{ height: '100%' }}>
|
|
|
|
|
+ <Bar data={barCorpUserData} title="用户添加客服号分布" horizontal />
|
|
|
|
|
+ </Card>
|
|
|
|
|
+ </Col>
|
|
|
|
|
+ <Col span={12}>
|
|
|
|
|
+ <DetailsTemplate data={corpUserRepeat} title='用户添加客服号详细数据' />
|
|
|
|
|
+ </Col>
|
|
|
|
|
+ </Row>
|
|
|
},
|
|
},
|
|
|
{
|
|
{
|
|
|
key: '2',
|
|
key: '2',
|
|
@@ -320,12 +302,7 @@ const Home: React.FC = () => {
|
|
|
<Title level={3} style={{ marginTop: 0, textAlign: 'center', fontSize: 18, color: '#313131' }}>用户添加主体分布重粉详细数据</Title>
|
|
<Title level={3} style={{ marginTop: 0, textAlign: 'center', fontSize: 18, color: '#313131' }}>用户添加主体分布重粉详细数据</Title>
|
|
|
<Flex vertical gap={7}>
|
|
<Flex vertical gap={7}>
|
|
|
<div className={style.item}>
|
|
<div className={style.item}>
|
|
|
- <Space>
|
|
|
|
|
- <span>粉丝总数</span>
|
|
|
|
|
- <Tooltip title="未识别+添加1个+添加多个(>1)">
|
|
|
|
|
- <QuestionCircleOutlined />
|
|
|
|
|
- </Tooltip>
|
|
|
|
|
- </Space>
|
|
|
|
|
|
|
+ <span>粉丝总数</span>
|
|
|
<div className={style.num}>
|
|
<div className={style.num}>
|
|
|
<Statistic value={corpRepeat?.userCount || 0} valueStyle={{ fontSize: 14 }} />
|
|
<Statistic value={corpRepeat?.userCount || 0} valueStyle={{ fontSize: 14 }} />
|
|
|
</div>
|
|
</div>
|
|
@@ -333,7 +310,7 @@ const Home: React.FC = () => {
|
|
|
<div className={style.item}>
|
|
<div className={style.item}>
|
|
|
<Space>
|
|
<Space>
|
|
|
<span>集团跨主体去重企微用户数</span>
|
|
<span>集团跨主体去重企微用户数</span>
|
|
|
- <Tooltip title="集团跨主体去重企微用户数=未识别人数+添加1个客服人数+添加多个(>1)客服人数">
|
|
|
|
|
|
|
+ <Tooltip title="集团跨主体去重企微用户数=未识别人数+添加1个主体人数+添加多个(>1)主体人数">
|
|
|
<QuestionCircleOutlined />
|
|
<QuestionCircleOutlined />
|
|
|
</Tooltip>
|
|
</Tooltip>
|
|
|
</Space>
|
|
</Space>
|
|
@@ -443,24 +420,46 @@ const Home: React.FC = () => {
|
|
|
</Row>
|
|
</Row>
|
|
|
},
|
|
},
|
|
|
{
|
|
{
|
|
|
- key: '3',
|
|
|
|
|
- label: '用户添加客服号分布',
|
|
|
|
|
- children: <Row gutter={16}>
|
|
|
|
|
- <Col span={12}>
|
|
|
|
|
- <Card style={{ height: '100%' }}>
|
|
|
|
|
- <Bar data={barCorpUserData} title="用户添加客服号分布" horizontal />
|
|
|
|
|
- </Card>
|
|
|
|
|
- </Col>
|
|
|
|
|
- <Col span={12}>
|
|
|
|
|
- <DetailsTemplate data={corpUserRepeat} title='用户添加客服号详细数据' />
|
|
|
|
|
- </Col>
|
|
|
|
|
- </Row>
|
|
|
|
|
- },
|
|
|
|
|
|
|
+ key: '1',
|
|
|
|
|
+ label: '主体内用户分布',
|
|
|
|
|
+ children: <Card>
|
|
|
|
|
+ <Table
|
|
|
|
|
+ columns={CorpExternalUserColumns()}
|
|
|
|
|
+ scroll={{ y: 300, x: 1000 }}
|
|
|
|
|
+ bordered
|
|
|
|
|
+ dataSource={getCorpExternalUserRepeatList.data?.data?.records}
|
|
|
|
|
+ loading={getCorpExternalUserRepeatList.loading}
|
|
|
|
|
+ rowKey="corpId"
|
|
|
|
|
+ pagination={{
|
|
|
|
|
+ total: getCorpExternalUserRepeatList.data?.data?.total,
|
|
|
|
|
+ current: getCorpExternalUserRepeatList?.data?.data?.current || 1,
|
|
|
|
|
+ pageSize: getCorpExternalUserRepeatList?.data?.data?.size || 20,
|
|
|
|
|
+ }}
|
|
|
|
|
+ onChange={(pagination: any, _: any, sortData: any) => {
|
|
|
|
|
+ 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 })
|
|
|
|
|
+ }}
|
|
|
|
|
+ />
|
|
|
|
|
+ </Card>
|
|
|
|
|
+ }
|
|
|
]}
|
|
]}
|
|
|
onChange={(e) => { setActiveKey(e) }}
|
|
onChange={(e) => { setActiveKey(e) }}
|
|
|
activeKey={activeKey}
|
|
activeKey={activeKey}
|
|
|
/>
|
|
/>
|
|
|
</Spin>
|
|
</Spin>
|
|
|
|
|
+
|
|
|
|
|
+ {/* uuid */}
|
|
|
|
|
+ <UuidTem />
|
|
|
</div>
|
|
</div>
|
|
|
};
|
|
};
|
|
|
|
|
|
|
@@ -471,39 +470,11 @@ const DetailsTemplate: React.FC<{ data: { [x: string]: any }, title: string }> =
|
|
|
<Title level={3} style={{ marginTop: 0, textAlign: 'center', fontSize: 18, color: '#313131' }}>{title || '详细数据'}</Title>
|
|
<Title level={3} style={{ marginTop: 0, textAlign: 'center', fontSize: 18, color: '#313131' }}>{title || '详细数据'}</Title>
|
|
|
<Flex vertical gap={7}>
|
|
<Flex vertical gap={7}>
|
|
|
<div className={style.item}>
|
|
<div className={style.item}>
|
|
|
- <Space>
|
|
|
|
|
- <span>粉丝总数</span>
|
|
|
|
|
- <Tooltip title="未识别+添加1名+添加多名(>1)">
|
|
|
|
|
- <QuestionCircleOutlined />
|
|
|
|
|
- </Tooltip>
|
|
|
|
|
- </Space>
|
|
|
|
|
|
|
+ <span>粉丝总数</span>
|
|
|
<div className={style.num}>
|
|
<div className={style.num}>
|
|
|
<Statistic value={data?.userCount || 0} valueStyle={{ fontSize: 14 }} />
|
|
<Statistic value={data?.userCount || 0} valueStyle={{ fontSize: 14 }} />
|
|
|
</div>
|
|
</div>
|
|
|
</div>
|
|
</div>
|
|
|
- <div className={style.item}>
|
|
|
|
|
- <Space>
|
|
|
|
|
- <span>集团跨主体去重企微用户数</span>
|
|
|
|
|
- <Tooltip title="集团跨主体去重企微用户数=未识别人数+添加1个客服人数+添加多个(>1)客服人数">
|
|
|
|
|
- <QuestionCircleOutlined />
|
|
|
|
|
- </Tooltip>
|
|
|
|
|
- </Space>
|
|
|
|
|
- <div className={style.num}>
|
|
|
|
|
- <Statistic value={data?.qcUuidUserCount || 0} valueStyle={{ fontSize: 14 }} />
|
|
|
|
|
- </div>
|
|
|
|
|
- </div>
|
|
|
|
|
- <div className={style.item}>
|
|
|
|
|
- <span>未识别用户数</span>
|
|
|
|
|
- <div className={style.num}>
|
|
|
|
|
- <Statistic value={data?.qcUuidNullCount || 0} valueStyle={{ fontSize: 14 }} />
|
|
|
|
|
- (<Statistic
|
|
|
|
|
- value={data?.qcUuidNullCountRate ? data?.qcUuidNullCountRate * 100 : 0}
|
|
|
|
|
- valueStyle={data?.qcUuidNullCountRate > 0.1 ? { color: '#cf1322', fontSize: 14 } : { color: '#3f8600', fontSize: 14 }}
|
|
|
|
|
- suffix="%"
|
|
|
|
|
- precision={4}
|
|
|
|
|
- />)
|
|
|
|
|
- </div>
|
|
|
|
|
- </div>
|
|
|
|
|
<div className={style.item}>
|
|
<div className={style.item}>
|
|
|
<span>已激活集团客服号数</span>
|
|
<span>已激活集团客服号数</span>
|
|
|
<div className={style.num}>
|
|
<div className={style.num}>
|
|
@@ -516,18 +487,6 @@ const DetailsTemplate: React.FC<{ data: { [x: string]: any }, title: string }> =
|
|
|
/>)
|
|
/>)
|
|
|
</div>
|
|
</div>
|
|
|
</div>
|
|
</div>
|
|
|
- <div className={style.item}>
|
|
|
|
|
- <span>已禁用集团客服号数</span>
|
|
|
|
|
- <div className={style.num}>
|
|
|
|
|
- <Statistic value={data?.disabledCorpUserCount || 0} valueStyle={{ fontSize: 14 }} />
|
|
|
|
|
- (<Statistic
|
|
|
|
|
- value={data?.disabledCorpUserCountRate ? data?.disabledCorpUserCountRate * 100 : 0}
|
|
|
|
|
- valueStyle={data?.disabledCorpUserCountRate > 0.1 ? { color: '#cf1322', fontSize: 14 } : { color: '#3f8600', fontSize: 14 }}
|
|
|
|
|
- suffix="%"
|
|
|
|
|
- precision={4}
|
|
|
|
|
- />)
|
|
|
|
|
- </div>
|
|
|
|
|
- </div>
|
|
|
|
|
<div className={style.item}>
|
|
<div className={style.item}>
|
|
|
<span>退出集团客服号数</span>
|
|
<span>退出集团客服号数</span>
|
|
|
<div className={style.num}>
|
|
<div className={style.num}>
|
|
@@ -552,6 +511,29 @@ const DetailsTemplate: React.FC<{ data: { [x: string]: any }, title: string }> =
|
|
|
/>)
|
|
/>)
|
|
|
</div>
|
|
</div>
|
|
|
</div>
|
|
</div>
|
|
|
|
|
+ <div className={style.item}>
|
|
|
|
|
+ <Space>
|
|
|
|
|
+ <span>集团跨主体去重企微用户数</span>
|
|
|
|
|
+ <Tooltip title="集团跨主体去重企微用户数=未识别人数+添加1个客服人数+添加多个(>1)客服人数">
|
|
|
|
|
+ <QuestionCircleOutlined />
|
|
|
|
|
+ </Tooltip>
|
|
|
|
|
+ </Space>
|
|
|
|
|
+ <div className={style.num}>
|
|
|
|
|
+ <Statistic value={data?.qcUuidUserCount || 0} valueStyle={{ fontSize: 14 }} />
|
|
|
|
|
+ </div>
|
|
|
|
|
+ </div>
|
|
|
|
|
+ <div className={style.item}>
|
|
|
|
|
+ <span>未识别用户数</span>
|
|
|
|
|
+ <div className={style.num}>
|
|
|
|
|
+ <Statistic value={data?.qcUuidNullCount || 0} valueStyle={{ fontSize: 14 }} />
|
|
|
|
|
+ (<Statistic
|
|
|
|
|
+ value={data?.qcUuidNullCountRate ? data?.qcUuidNullCountRate * 100 : 0}
|
|
|
|
|
+ valueStyle={data?.qcUuidNullCountRate > 0.1 ? { color: '#cf1322', fontSize: 14 } : { color: '#3f8600', fontSize: 14 }}
|
|
|
|
|
+ suffix="%"
|
|
|
|
|
+ precision={4}
|
|
|
|
|
+ />)
|
|
|
|
|
+ </div>
|
|
|
|
|
+ </div>
|
|
|
<div className={style.item}>
|
|
<div className={style.item}>
|
|
|
<span>{`用户添加>1客服号人数`}</span>
|
|
<span>{`用户添加>1客服号人数`}</span>
|
|
|
<div className={style.num}>
|
|
<div className={style.num}>
|