2023-04-14 17:31:45 +08:00
|
|
|
|
/**
|
|
|
|
|
* 获取已离群的数量
|
|
|
|
|
* @param data
|
|
|
|
|
* @param state
|
|
|
|
|
* @returns
|
|
|
|
|
*/
|
|
|
|
|
|
2023-04-17 17:47:31 +08:00
|
|
|
|
import React, { useEffect, useState } from 'react';
|
2023-04-20 17:38:19 +08:00
|
|
|
|
import { IGroup, IGroupMembers } from './ChatLogsType';
|
|
|
|
|
import { AdminSvg, OwnerSvg } from './components/Svgs';
|
2023-04-17 17:47:31 +08:00
|
|
|
|
|
2023-04-14 17:31:45 +08:00
|
|
|
|
export const groupMembersCount = (data: any[], state: any) => {
|
|
|
|
|
let count = 0;
|
|
|
|
|
data.forEach((item) => {
|
|
|
|
|
if (item.state == state) {
|
|
|
|
|
count += 1;
|
|
|
|
|
}
|
|
|
|
|
});
|
|
|
|
|
|
|
|
|
|
return count;
|
|
|
|
|
};
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
|
* 获取是微信的人数
|
|
|
|
|
* @param data
|
|
|
|
|
* @param group_members_type
|
|
|
|
|
* @param state
|
|
|
|
|
* @returns
|
|
|
|
|
*/
|
|
|
|
|
export const groupMembersCount2 = (data: any[], group_members_type: any, state: any) => {
|
|
|
|
|
let count = 0;
|
|
|
|
|
data.forEach((item) => {
|
|
|
|
|
if (item.group_members_type == group_members_type && item.state == state) {
|
|
|
|
|
count += 1;
|
|
|
|
|
}
|
|
|
|
|
});
|
|
|
|
|
|
|
|
|
|
return count;
|
|
|
|
|
};
|
|
|
|
|
|
2023-04-20 17:38:19 +08:00
|
|
|
|
// 群 Drawer 群员
|
|
|
|
|
export const groupMembersListItem = (item: IGroupMembers, selectGroup: IGroup) => {
|
|
|
|
|
return (
|
|
|
|
|
<div
|
|
|
|
|
key={item.user_id}
|
|
|
|
|
style={{
|
|
|
|
|
display: 'inline-flex',
|
|
|
|
|
justifyContent: 'flex-start',
|
|
|
|
|
alignItems: 'center',
|
|
|
|
|
width: 80,
|
|
|
|
|
flexDirection: 'column',
|
|
|
|
|
verticalAlign: 'top',
|
|
|
|
|
marginTop: 12,
|
|
|
|
|
}}
|
|
|
|
|
>
|
|
|
|
|
<div
|
|
|
|
|
style={{
|
|
|
|
|
position: 'relative',
|
|
|
|
|
display: 'flex',
|
|
|
|
|
flexShrink: 0,
|
|
|
|
|
alignItems: 'center',
|
|
|
|
|
justifyContent: 'center',
|
|
|
|
|
width: 56,
|
|
|
|
|
height: 56,
|
|
|
|
|
lineHeight: 1,
|
|
|
|
|
background: '#69b1ff',
|
|
|
|
|
borderRadius: 4,
|
|
|
|
|
}}
|
|
|
|
|
>
|
|
|
|
|
{item.avatar ? (
|
|
|
|
|
<img
|
|
|
|
|
style={{
|
|
|
|
|
maxWidth: '100%',
|
|
|
|
|
maxHeight: '100%',
|
|
|
|
|
objectFit: 'cover',
|
|
|
|
|
borderRadius: 4,
|
|
|
|
|
}}
|
|
|
|
|
src={item.avatar}
|
|
|
|
|
alt=""
|
|
|
|
|
/>
|
|
|
|
|
) : item.name ? (
|
|
|
|
|
item.name[0]
|
|
|
|
|
) : (
|
|
|
|
|
''
|
|
|
|
|
)}
|
|
|
|
|
{item.user_id == selectGroup?.owner ? <OwnerSvg /> : null}
|
|
|
|
|
{selectGroup?.adminUserIDs?.includes(item.user_id) ? <AdminSvg /> : null}
|
|
|
|
|
</div>
|
|
|
|
|
<div
|
|
|
|
|
style={{
|
|
|
|
|
padding: '0 4px',
|
|
|
|
|
whiteSpace: 'nowrap',
|
|
|
|
|
minWidth: 0,
|
|
|
|
|
textOverflow: 'ellipsis',
|
|
|
|
|
overflow: 'hidden',
|
|
|
|
|
width: 72,
|
|
|
|
|
textAlign: 'center',
|
|
|
|
|
}}
|
|
|
|
|
title={item.name}
|
|
|
|
|
>
|
|
|
|
|
{item.name}
|
|
|
|
|
</div>
|
|
|
|
|
</div>
|
|
|
|
|
);
|
|
|
|
|
};
|
|
|
|
|
|
2023-04-14 17:31:45 +08:00
|
|
|
|
/**
|
|
|
|
|
* 群管理者:
|
|
|
|
|
* @param data
|
|
|
|
|
* @param groupMembers
|
|
|
|
|
* @returns
|
|
|
|
|
*/
|
|
|
|
|
export const adminList = (data: any, groupMembers: any) => {
|
|
|
|
|
if (data) {
|
|
|
|
|
try {
|
|
|
|
|
const msg = JSON.parse(data);
|
|
|
|
|
if (Array.isArray(msg) && msg.length) {
|
|
|
|
|
let arr: any = [];
|
|
|
|
|
msg.forEach((el) => {
|
|
|
|
|
arr.push(groupMembers[el.userid]?.name);
|
|
|
|
|
});
|
|
|
|
|
return <div>群管理者:{arr.join(',')}</div>;
|
|
|
|
|
}
|
|
|
|
|
} catch (e) {
|
|
|
|
|
return <></>;
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
return <></>;
|
|
|
|
|
};
|
2023-04-19 15:30:29 +08:00
|
|
|
|
/**
|
|
|
|
|
* 返回群管理员 userid 数组
|
|
|
|
|
* @param data
|
|
|
|
|
* @returns
|
|
|
|
|
*/
|
|
|
|
|
export const getAdminList = (data: any) => {
|
|
|
|
|
if (data) {
|
|
|
|
|
try {
|
|
|
|
|
const msg = JSON.parse(data);
|
|
|
|
|
if (Array.isArray(msg)) {
|
|
|
|
|
let arr: string[] = [];
|
|
|
|
|
msg.forEach((item) => {
|
|
|
|
|
arr.push(item.userid);
|
|
|
|
|
});
|
|
|
|
|
return arr;
|
|
|
|
|
}
|
2023-04-24 13:43:36 +08:00
|
|
|
|
} catch (e) {
|
|
|
|
|
/* empty */
|
|
|
|
|
}
|
2023-04-19 15:30:29 +08:00
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
return [];
|
|
|
|
|
};
|
2023-04-14 17:31:45 +08:00
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
|
* 客户等级等信息
|
|
|
|
|
* @returns
|
|
|
|
|
*/
|
|
|
|
|
export const formatTags = (data: any) => {
|
|
|
|
|
if (data) {
|
|
|
|
|
try {
|
|
|
|
|
const tags = JSON.parse(data);
|
2023-04-18 17:28:06 +08:00
|
|
|
|
if (Array.isArray(tags) && tags.length) {
|
2023-04-14 17:31:45 +08:00
|
|
|
|
return (
|
|
|
|
|
<>
|
|
|
|
|
{tags.map((item) => {
|
|
|
|
|
return (
|
|
|
|
|
<div key={`${item.group_name}_${item.tag_name}`}>
|
|
|
|
|
{item.group_name}:{item.tag_name}
|
|
|
|
|
</div>
|
|
|
|
|
);
|
|
|
|
|
})}
|
|
|
|
|
</>
|
|
|
|
|
);
|
|
|
|
|
}
|
2023-04-24 13:43:36 +08:00
|
|
|
|
} catch (e) {
|
|
|
|
|
/* empty */
|
|
|
|
|
}
|
2023-04-14 17:31:45 +08:00
|
|
|
|
}
|
2023-04-18 17:28:06 +08:00
|
|
|
|
return <div>无标签</div>;
|
2023-04-14 17:31:45 +08:00
|
|
|
|
};
|
2023-04-17 17:47:31 +08:00
|
|
|
|
|
|
|
|
|
type IGroupIcon = {
|
|
|
|
|
groupList: any[];
|
|
|
|
|
};
|
|
|
|
|
/**
|
2023-04-24 10:54:22 +08:00
|
|
|
|
* 群图标拼接
|
2023-04-17 17:47:31 +08:00
|
|
|
|
* @param props
|
|
|
|
|
* @returns
|
|
|
|
|
*/
|
|
|
|
|
export const GroupIcon: React.FC<IGroupIcon> = (props) => {
|
|
|
|
|
const [list, setList] = useState<any>([[], [], []]);
|
|
|
|
|
|
|
|
|
|
useEffect(() => {
|
|
|
|
|
let temp: any = [[], [], []];
|
|
|
|
|
const { groupList } = props;
|
|
|
|
|
for (let index = 0; index < 9; index++) {
|
|
|
|
|
const element = groupList[index];
|
|
|
|
|
if (index < 3) {
|
|
|
|
|
temp[0].push(element);
|
|
|
|
|
} else if (index < 6) {
|
|
|
|
|
temp[1].push(element);
|
|
|
|
|
} else {
|
|
|
|
|
temp[2].push(element);
|
|
|
|
|
}
|
|
|
|
|
}
|
2023-04-24 10:54:22 +08:00
|
|
|
|
temp.reverse();
|
|
|
|
|
setList(temp);
|
2023-04-17 17:47:31 +08:00
|
|
|
|
}, [props.groupList]);
|
|
|
|
|
|
2023-04-24 10:54:22 +08:00
|
|
|
|
return (
|
|
|
|
|
<div style={{ display: 'flex', flexDirection: 'column' }}>
|
|
|
|
|
{list.map((item: any[], i: number) => {
|
|
|
|
|
return (
|
|
|
|
|
<div key={i} style={{ display: 'flex', justifyContent: 'center' }}>
|
|
|
|
|
{item.map((el) => {
|
|
|
|
|
return el ? (
|
|
|
|
|
<div
|
|
|
|
|
key={`${el.avatar}_${el.name}`}
|
|
|
|
|
style={{ width: 12, height: 12, borderRadius: 2, overflow: 'hidden' }}
|
|
|
|
|
>
|
|
|
|
|
{el.avatar ? (
|
|
|
|
|
<img
|
|
|
|
|
style={{ width: '100%', height: '100%', objectFit: 'cover' }}
|
|
|
|
|
src={el.avatar}
|
|
|
|
|
/>
|
|
|
|
|
) : (
|
|
|
|
|
<div
|
|
|
|
|
style={{
|
|
|
|
|
background: '#bae0ff',
|
|
|
|
|
width: '100%',
|
|
|
|
|
height: '100%',
|
|
|
|
|
display: 'flex',
|
|
|
|
|
justifyContent: 'center',
|
|
|
|
|
alignItems: 'center',
|
|
|
|
|
}}
|
|
|
|
|
>
|
|
|
|
|
<div style={{ transform: 'scale(0.65)', lineHeight: 1 }}>{el.name[0]}</div>
|
|
|
|
|
</div>
|
|
|
|
|
)}
|
|
|
|
|
</div>
|
2023-04-24 13:43:36 +08:00
|
|
|
|
) : null;
|
2023-04-24 10:54:22 +08:00
|
|
|
|
})}
|
|
|
|
|
</div>
|
|
|
|
|
);
|
|
|
|
|
})}
|
|
|
|
|
</div>
|
|
|
|
|
);
|
2023-04-17 17:47:31 +08:00
|
|
|
|
};
|