129 lines
4.0 KiB
TypeScript
129 lines
4.0 KiB
TypeScript
![]() |
import { IGroup, IGroupMembers } from '@/pages/ChatLogs/ChatLogsType';
|
|||
|
import { post } from '@/services/ajax';
|
|||
|
import { useEffect, useRef, useState } from 'react';
|
|||
|
|
|||
|
import {
|
|||
|
adminList,
|
|||
|
getAdminList,
|
|||
|
groupMembersCount,
|
|||
|
groupMembersCount2,
|
|||
|
groupMembersListItem,
|
|||
|
} from '@/pages/ChatLogs/ChatUtils';
|
|||
|
import { Spin } from 'antd';
|
|||
|
import { stringify } from 'qs';
|
|||
|
|
|||
|
type Iprops = {
|
|||
|
record: IGroup;
|
|||
|
};
|
|||
|
export const GroupDetailContent: React.FC<Iprops> = (props) => {
|
|||
|
const { record } = props;
|
|||
|
|
|||
|
const [groupMembersList, setGroupMembersList] = useState<IGroupMembers[]>([]);
|
|||
|
const [loading, setLoading] = useState(false);
|
|||
|
const groupMembersObjRef = useRef<any>({});
|
|||
|
|
|||
|
useEffect(() => {
|
|||
|
record.adminUserIDs = getAdminList(record.admin_list);
|
|||
|
getList();
|
|||
|
}, [props.record]);
|
|||
|
|
|||
|
const getList = () => {
|
|||
|
setLoading(true);
|
|||
|
post({
|
|||
|
url: '/GroupMembers/GroupMembersList',
|
|||
|
data: stringify({ group_id: props.record.group_id }),
|
|||
|
}).then((res) => {
|
|||
|
setLoading(false);
|
|||
|
if (res.err_code == 0) {
|
|||
|
if (Array.isArray(res.data)) {
|
|||
|
groupMembersObjRef.current = {};
|
|||
|
let owner: IGroupMembers[] = [];
|
|||
|
let admin_list: IGroupMembers[] = [];
|
|||
|
let other: IGroupMembers[] = [];
|
|||
|
res.data.forEach((item: IGroupMembers) => {
|
|||
|
item.avatar = item.staff_avatar || item.avatar;
|
|||
|
groupMembersObjRef.current[item.user_id] = item;
|
|||
|
if (item.user_id == record?.owner) {
|
|||
|
owner.push(item);
|
|||
|
} else if (record?.adminUserIDs.includes(item.user_id)) {
|
|||
|
admin_list.push(item);
|
|||
|
} else {
|
|||
|
other.push(item);
|
|||
|
}
|
|||
|
});
|
|||
|
// 对群员 创建者 > 管理员 > 普通成员 排序
|
|||
|
setGroupMembersList([...owner, ...admin_list, ...other]);
|
|||
|
}
|
|||
|
}
|
|||
|
});
|
|||
|
};
|
|||
|
|
|||
|
return (
|
|||
|
<Spin spinning={loading} style={{ minHeight: 400, display: 'block' }}>
|
|||
|
{groupMembersList.length ? (
|
|||
|
<div>
|
|||
|
<div style={{ marginBottom: 8, textIndent: '2em' }}>
|
|||
|
群主:
|
|||
|
{groupMembersObjRef.current[record?.owner as string]?.name}
|
|||
|
</div>
|
|||
|
<div style={{ marginBottom: 8 }}>
|
|||
|
{adminList(record?.admin_list, groupMembersObjRef.current)}
|
|||
|
</div>
|
|||
|
<div style={{ marginBottom: 8 }}>创建时间:{record?.create_time}</div>
|
|||
|
<div style={{ textIndent: '1em' }}>群公告:{record?.notice}</div>
|
|||
|
<div
|
|||
|
style={{
|
|||
|
fontWeight: 'bold',
|
|||
|
marginTop: 24,
|
|||
|
marginBottom: 8,
|
|||
|
borderBottom: '1px solid #ddd',
|
|||
|
paddingBottom: 8,
|
|||
|
}}
|
|||
|
>
|
|||
|
群成员 • {groupMembersList.length}
|
|||
|
</div>
|
|||
|
{groupMembersList.map((item) => {
|
|||
|
return item.group_members_type == '2' || item.state == 0
|
|||
|
? null
|
|||
|
: groupMembersListItem(item, record);
|
|||
|
})}
|
|||
|
{groupMembersCount2(groupMembersList, '2', 1) != 0 ? (
|
|||
|
<div
|
|||
|
style={{
|
|||
|
fontWeight: 'bold',
|
|||
|
marginTop: 24,
|
|||
|
marginBottom: 8,
|
|||
|
borderBottom: '1px solid #ddd',
|
|||
|
paddingBottom: 8,
|
|||
|
}}
|
|||
|
>
|
|||
|
微信:
|
|||
|
</div>
|
|||
|
) : null}
|
|||
|
{groupMembersList.map((item) => {
|
|||
|
return item.group_members_type == '1' || item.state == 0
|
|||
|
? null
|
|||
|
: groupMembersListItem(item, record);
|
|||
|
})}
|
|||
|
{groupMembersCount(groupMembersList, 0) != 0 ? (
|
|||
|
<div
|
|||
|
style={{
|
|||
|
fontWeight: 'bold',
|
|||
|
marginTop: 24,
|
|||
|
marginBottom: 8,
|
|||
|
borderBottom: '1px solid #ddd',
|
|||
|
paddingBottom: 8,
|
|||
|
}}
|
|||
|
>
|
|||
|
已离群:
|
|||
|
</div>
|
|||
|
) : null}
|
|||
|
{groupMembersList.map((item) => {
|
|||
|
return item.state == 1 ? null : groupMembersListItem(item, record);
|
|||
|
})}
|
|||
|
</div>
|
|||
|
) : null}
|
|||
|
</Spin>
|
|||
|
);
|
|||
|
};
|