群成员信息

This commit is contained in:
liuwei
2025-05-07 17:16:25 +08:00
parent c6381bbec2
commit e1d1e4e3a3
3 changed files with 256 additions and 235 deletions

View File

@@ -7,6 +7,7 @@ from loguru import logger
# 创建联系人管理蓝图
contacts_bp = Blueprint('contacts', __name__, url_prefix='/contacts')
# 联系人管理页面
@contacts_bp.route('/')
@login_required
@@ -14,6 +15,7 @@ def contacts_management():
"""通讯录管理页面"""
return render_template('contacts_management.html')
# API路由
@contacts_bp.route('/api/all', methods=['GET'])
@login_required
@@ -32,6 +34,7 @@ def api_contacts_all():
logger.error(f"获取所有联系人信息失败: {e}")
return jsonify({"success": False, "error": str(e)}), 500
@contacts_bp.route('/api/statistics', methods=['GET'])
@login_required
def api_contacts_statistics():
@@ -55,6 +58,7 @@ def api_contacts_statistics():
logger.error(f"获取联系人统计信息失败: {e}")
return jsonify({"success": False, "error": str(e)}), 500
@contacts_bp.route('/api/groups', methods=['GET'])
@login_required
def api_contacts_groups():
@@ -73,6 +77,7 @@ def api_contacts_groups():
logger.error(f"获取群组联系人信息失败: {e}")
return jsonify({"success": False, "error": str(e)}), 500
@contacts_bp.route('/api/personal', methods=['GET'])
@login_required
def api_contacts_personal():
@@ -91,6 +96,7 @@ def api_contacts_personal():
logger.error(f"获取个人联系人信息失败: {e}")
return jsonify({"success": False, "error": str(e)}), 500
@contacts_bp.route('/api/official', methods=['GET'])
@login_required
def api_contacts_official():
@@ -109,6 +115,7 @@ def api_contacts_official():
logger.error(f"获取公众号联系人信息失败: {e}")
return jsonify({"success": False, "error": str(e)}), 500
@contacts_bp.route('/api/public', methods=['GET'])
@login_required
def api_contacts_public():
@@ -127,6 +134,7 @@ def api_contacts_public():
logger.error(f"获取公共好友信息失败: {e}")
return jsonify({"success": False, "error": str(e)}), 500
@contacts_bp.route('/api/head_images', methods=['GET'])
@login_required
def api_head_images():
@@ -145,6 +153,7 @@ def api_head_images():
logger.error(f"获取联系人头像信息失败: {e}")
return jsonify({"success": False, "error": str(e)}), 500
@contacts_bp.route('/api/group_members/<roomid>', methods=['GET'])
@login_required
def api_group_members(roomid):
@@ -155,8 +164,7 @@ def api_group_members(roomid):
"""
try:
server = current_app.dashboard_server
group_members = server.contact_manager.get_group_members(roomid)
group_members = server.contact_db.get_chatroom_member_list(roomid)
return jsonify({
"success": True,
"data": {

View File

@@ -7,6 +7,7 @@ import sys
import threading
from loguru import logger
from db.contacts_db import ContactsDBOperator
from db.message_storage import MessageStorageDB
from db.stats_db import StatsDBOperator
from flask import Flask, send_from_directory
@@ -40,6 +41,7 @@ class DashboardServer:
self.db_manager = robot_instance.db_manager
self.stats_db = StatsDBOperator(self.db_manager)
self.message_storage = MessageStorageDB(self.db_manager)
self.contact_db: ContactsDBOperator = ContactsDBOperator(self.db_manager)
# 获取联系人管理器实例
self.contact_manager = robot_instance.contact_manager
self.plugin_manager = robot_instance.plugin_manager

View File

@@ -182,7 +182,8 @@
</el-tabs>
<!-- 分页 -->
<div class="pagination-container" {% raw %}v-if="activeTab === 'groups' && groupsList.length > 10"{% endraw %}>
<div class="pagination-container" {% raw %}v-if="activeTab === 'groups' && groupsList.length > 10" {%
endraw %}>
<el-pagination
{% raw %}@size-change="handleSizeChange"
@current-change="handleCurrentChange"
@@ -194,7 +195,8 @@
</el-pagination>
</div>
<div class="pagination-container" {% raw %}v-if="activeTab === 'personal' && personalList.length > 10"{% endraw %}>
<div class="pagination-container" {% raw %}v-if="activeTab === 'personal' && personalList.length > 10"
{% endraw %}>
<el-pagination
{% raw %}@size-change="handleSizeChange"
@current-change="handleCurrentChange"
@@ -206,7 +208,8 @@
</el-pagination>
</div>
<div class="pagination-container" {% raw %}v-if="activeTab === 'official' && officialList.length > 10"{% endraw %}>
<div class="pagination-container" {% raw %}v-if="activeTab === 'official' && officialList.length > 10"
{% endraw %}>
<el-pagination
{% raw %}@size-change="handleSizeChange"
@current-change="handleCurrentChange"
@@ -218,7 +221,8 @@
</el-pagination>
</div>
<div class="pagination-container" {% raw %}v-if="activeTab === 'public' && publicList.length > 10"{% endraw %}>
<div class="pagination-container" {% raw %}v-if="activeTab === 'public' && publicList.length > 10" {%
endraw %}>
<el-pagination
{% raw %}@size-change="handleSizeChange"
@current-change="handleCurrentChange"
@@ -318,8 +322,10 @@
</el-avatar>
</div>
<el-descriptions {% raw %}:column="1" {% endraw %} border>
<el-descriptions-item label="公众号ID">{% raw %}{{ currentOfficial.wxid }}{% endraw %}</el-descriptions-item>
<el-descriptions-item label="公众号名称">{% raw %}{{ currentOfficial.name }}{% endraw %}</el-descriptions-item>
<el-descriptions-item label="公众号ID">{% raw %}{{ currentOfficial.wxid }}{% endraw %}
</el-descriptions-item>
<el-descriptions-item label="公众号名称">{% raw %}{{ currentOfficial.name }}{% endraw %}
</el-descriptions-item>
<!-- 可以添加更多公众号相关信息 -->
</el-descriptions>
</el-dialog>
@@ -627,9 +633,9 @@
const members = response.data.data.members;
console.log('获取到的群成员数据:', members); // 添加调试日志
this.groupMembersList = Object.entries(members).map(([wxid, name]) => ({
wxid,
name: name || wxid // 确保name不为空
this.groupMembersList = data.map(item => ({
wxid: item.wxid,
name: item.display_name || item.nick_name || item.wxid,
}));
console.log('处理后的群成员列表:', this.groupMembersList); // 添加调试日志
} else {
@@ -662,20 +668,24 @@
text-align: center;
padding: 10px;
}
.stat-title {
font-size: 16px;
color: #606266;
margin-bottom: 10px;
}
.stat-value {
font-size: 28px;
font-weight: bold;
color: #409EFF;
}
.pagination-container {
margin-top: 20px;
text-align: right;
}
.section-title {
margin: 20px 0 15px 0;
border-bottom: 1px solid #ebeef5;
@@ -684,6 +694,7 @@
justify-content: space-between;
align-items: center;
}
.section-title h3 {
margin: 0;
font-size: 18px;