加入头像显示功能
This commit is contained in:
@@ -126,6 +126,24 @@ 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():
|
||||
"""获取联系人头像信息API"""
|
||||
try:
|
||||
server = current_app.dashboard_server
|
||||
head_images = server.contact_manager.get_all_head_images()
|
||||
|
||||
return jsonify({
|
||||
"success": True,
|
||||
"data": {
|
||||
"head_images": head_images
|
||||
}
|
||||
})
|
||||
except Exception as e:
|
||||
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):
|
||||
|
||||
@@ -84,6 +84,16 @@
|
||||
style="width: 100%"
|
||||
border>
|
||||
<el-table-column type="index" width="50"></el-table-column>
|
||||
<el-table-column label="头像" width="70">
|
||||
<template slot-scope="scope">
|
||||
<el-avatar
|
||||
size="small"
|
||||
{% raw %}:src="getHeadImage(scope.row.wxid)"{% endraw %}
|
||||
{% raw %}@error="() => true"{% endraw %}>
|
||||
<img src="/static/logo.png" />
|
||||
</el-avatar>
|
||||
</template>
|
||||
</el-table-column>
|
||||
<el-table-column prop="wxid" label="微信ID" width="220"></el-table-column>
|
||||
<el-table-column prop="name" label="昵称"></el-table-column>
|
||||
<el-table-column label="操作" width="150">
|
||||
@@ -106,6 +116,16 @@
|
||||
style="width: 100%"
|
||||
border>
|
||||
<el-table-column type="index" width="50"></el-table-column>
|
||||
<el-table-column label="头像" width="70">
|
||||
<template slot-scope="scope">
|
||||
<el-avatar
|
||||
size="small"
|
||||
{% raw %}:src="getHeadImage(scope.row.wxid)"{% endraw %}
|
||||
{% raw %}@error="() => true"{% endraw %}>
|
||||
<img src="/static/logo.png" />
|
||||
</el-avatar>
|
||||
</template>
|
||||
</el-table-column>
|
||||
<el-table-column prop="wxid" label="公众号ID" width="220"></el-table-column>
|
||||
<el-table-column prop="name" label="公众号名称"></el-table-column>
|
||||
<el-table-column label="操作" width="150">
|
||||
@@ -128,6 +148,16 @@
|
||||
style="width: 100%"
|
||||
border>
|
||||
<el-table-column type="index" width="50"></el-table-column>
|
||||
<el-table-column label="头像" width="70">
|
||||
<template slot-scope="scope">
|
||||
<el-avatar
|
||||
size="small"
|
||||
{% raw %}:src="getHeadImage(scope.row.wxid)"{% endraw %}
|
||||
{% raw %}@error="() => true"{% endraw %}>
|
||||
<img src="/static/logo.png" />
|
||||
</el-avatar>
|
||||
</template>
|
||||
</el-table-column>
|
||||
<el-table-column prop="wxid" label="ID" width="220"></el-table-column>
|
||||
<el-table-column prop="name" label="名称"></el-table-column>
|
||||
<el-table-column label="操作" width="150">
|
||||
@@ -243,15 +273,32 @@
|
||||
|
||||
<!-- 用户详情对话框 -->
|
||||
<el-dialog title="用户详情" {% raw %}:visible.sync="userDetailDialogVisible"{% endraw %} width="50%">
|
||||
<el-descriptions {% raw %}:column="1"{% endraw %} border>
|
||||
<el-descriptions-item label="微信ID">{% raw %}{{ currentUser.wxid }}{% endraw %}</el-descriptions-item>
|
||||
<el-descriptions-item label="昵称">{% raw %}{{ currentUser.name }}{% endraw %}</el-descriptions-item>
|
||||
<!-- 可以添加更多用户相关信息 -->
|
||||
</el-descriptions>
|
||||
</el-dialog>
|
||||
<el-avatar
|
||||
size="large"
|
||||
{% raw %}:src="getHeadImage(currentUser.wxid)"{% endraw %}
|
||||
{% raw %}@error="() => true"{% endraw %}
|
||||
style="width: 100px; height: 100px;">
|
||||
<img src="/static/logo.png" />
|
||||
</el-avatar>
|
||||
</div>
|
||||
<el-descriptions {% raw %}:column="1"{% endraw %} border>
|
||||
<el-descriptions-item label="微信ID">{% raw %}{{ currentUser.wxid }}{% endraw %}</el-descriptions-item>
|
||||
<el-descriptions-item label="昵称">{% raw %}{{ currentUser.name }}{% endraw %}</el-descriptions-item>
|
||||
<!-- 可以添加更多用户相关信息 -->
|
||||
</el-descriptions>
|
||||
</el-dialog>
|
||||
|
||||
<!-- 公众号详情对话框 -->
|
||||
<el-dialog title="公众号详情" {% raw %}:visible.sync="officialDetailDialogVisible"{% endraw %} width="50%">
|
||||
<div style="text-align: center; margin-bottom: 20px;">
|
||||
<el-avatar
|
||||
size="large"
|
||||
{% raw %}:src="getHeadImage(currentOfficial.wxid)"{% endraw %}
|
||||
{% raw %}@error="() => true"{% endraw %}
|
||||
style="width: 100px; height: 100px;">
|
||||
<img src="/static/logo.png" />
|
||||
</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>
|
||||
@@ -261,6 +308,15 @@
|
||||
|
||||
<!-- 公共好友详情对话框 -->
|
||||
<el-dialog title="公共好友详情" {% raw %}:visible.sync="publicDetailDialogVisible"{% endraw %} width="50%">
|
||||
<div style="text-align: center; margin-bottom: 20px;">
|
||||
<el-avatar
|
||||
size="large"
|
||||
{% raw %}:src="getHeadImage(currentPublic.wxid)"{% endraw %}
|
||||
{% raw %}@error="() => true"{% endraw %}
|
||||
style="width: 100px; height: 100px;">
|
||||
<img src="/static/logo.png" />
|
||||
</el-avatar>
|
||||
</div>
|
||||
<el-descriptions {% raw %}:column="1"{% endraw %} border>
|
||||
<el-descriptions-item label="ID">{% raw %}{{ currentPublic.wxid }}{% endraw %}</el-descriptions-item>
|
||||
<el-descriptions-item label="名称">{% raw %}{{ currentPublic.name }}{% endraw %}</el-descriptions-item>
|
||||
@@ -285,6 +341,7 @@
|
||||
personalList: [],
|
||||
officialList: [],
|
||||
publicList: [],
|
||||
headImages: {}, // 添加头像数据存储
|
||||
statistics: {
|
||||
total: 0,
|
||||
groups: 0,
|
||||
@@ -479,6 +536,17 @@
|
||||
console.error('加载公共好友数据失败:', error);
|
||||
this.$message.error('加载公共好友数据失败');
|
||||
});
|
||||
// 加载头像数据
|
||||
axios.get('/contacts/api/head_images')
|
||||
.then(response => {
|
||||
if (response.data.success) {
|
||||
this.headImages = response.data.data.head_images;
|
||||
}
|
||||
})
|
||||
.catch(error => {
|
||||
console.error('加载联系人头像数据失败:', error);
|
||||
this.$message.error('加载联系人头像数据失败');
|
||||
});
|
||||
},
|
||||
refreshContacts() {
|
||||
this.loadContactsData();
|
||||
@@ -487,6 +555,10 @@
|
||||
handleTabClick(tab) {
|
||||
this.currentPage = 1; // 切换选项卡时重置页码
|
||||
},
|
||||
// 添加获取头像的方法
|
||||
getHeadImage(wxid) {
|
||||
return this.headImages[wxid] || '';
|
||||
},
|
||||
handleSizeChange(size) {
|
||||
this.pageSize = size;
|
||||
},
|
||||
|
||||
7
robot.py
7
robot.py
@@ -58,7 +58,7 @@ class Robot(Job):
|
||||
self.contact_manager = ContactManager.get_instance()
|
||||
self.allContacts = self.get_all_contacts()
|
||||
self.all_head_img = self.get_all_head_img_url()
|
||||
self.contact_manager.set_contacts(self.allContacts, self.wcf)
|
||||
self.contact_manager.set_contacts(self.allContacts, self.all_head_img, self.wcf)
|
||||
|
||||
self.LOG.info(f"DB+REDIS 连接池开始初始化")
|
||||
# 使用单例模式获取实例
|
||||
@@ -341,7 +341,7 @@ class Robot(Job):
|
||||
def get_all_head_img_url(self) -> dict:
|
||||
try:
|
||||
head_img_urls = self.wcf.query_sql("MicroMsg.db", "SELECT usrName ,bigHeadImgUrl FROM ContactHeadImgUrl;")
|
||||
self.LOG.info(f"head_img_urls: {head_img_urls}")
|
||||
# self.LOG.info(f"head_img_urls: {head_img_urls}")
|
||||
return {contact["usrName"]: contact["bigHeadImgUrl"] for contact in head_img_urls}
|
||||
except Exception as e:
|
||||
self.LOG.error(f"get_all_head_img_url error: {e}")
|
||||
@@ -536,5 +536,6 @@ class Robot(Job):
|
||||
def refresh_contacts(self):
|
||||
"""刷新联系人信息"""
|
||||
self.allContacts = self.get_all_contacts()
|
||||
self.contact_manager.refresh_contacts(self.allContacts, self.wcf)
|
||||
self.all_head_img = self.get_all_head_img_url()
|
||||
self.contact_manager.refresh_contacts(self.allContacts,self.all_head_img, self.wcf)
|
||||
self.LOG.info("联系人信息已刷新")
|
||||
|
||||
@@ -16,6 +16,7 @@ class ContactManager:
|
||||
_personal_contacts: Dict[str, str] = {} # 个人联系人
|
||||
_public_contacts: Dict[str, str] = {} # 公共好友
|
||||
_official_accounts: Dict[str, str] = {} # 公众号
|
||||
_head_images: Dict[str, str] = {} # 头像信息
|
||||
_initialized = False
|
||||
_logger = logging.getLogger("ContactManager")
|
||||
_friends: List[Dict] = []
|
||||
@@ -49,11 +50,12 @@ class ContactManager:
|
||||
cls._instance = ContactManager()
|
||||
return cls._instance
|
||||
|
||||
def set_contacts(self, contacts: Dict[str, str], wcf: Wcf) -> None:
|
||||
def set_contacts(self, contacts: Dict[str, str], head_imgs: Dict[str, str], wcf: Wcf) -> None:
|
||||
"""设置联系人字典
|
||||
|
||||
Args:
|
||||
contacts: 联系人字典,格式为 {"wxid": "NickName"}
|
||||
head_imgs: 联系人头像字典,格式为 {"wxid": "http://xxxxx"}
|
||||
friends: 好友清单 contact = {
|
||||
"wxid": cnt.get("wxid", ""),
|
||||
"code": cnt.get("code", ""),
|
||||
@@ -66,6 +68,7 @@ class ContactManager:
|
||||
"""
|
||||
self._contacts = contacts
|
||||
self._friends = wcf.get_friends()
|
||||
self._head_images = head_imgs
|
||||
self._logger.info(f"联系人信息已更新,共 {len(contacts)} 个联系人")
|
||||
# 分类联系人
|
||||
self._classify_contacts(wcf)
|
||||
@@ -153,6 +156,25 @@ class ContactManager:
|
||||
"""
|
||||
return self._contacts.get(wxid, wxid)
|
||||
|
||||
def get_all_head_images(self) -> Dict[str, str]:
|
||||
"""返回所有的头像信息
|
||||
|
||||
Returns:
|
||||
头像 {"wxid": "http://xxxxx"}
|
||||
"""
|
||||
return self._head_images
|
||||
|
||||
def get_head_image(self, wxid: str) -> str:
|
||||
"""根据微信ID获取头像
|
||||
|
||||
Args:
|
||||
wxid: 微信ID
|
||||
|
||||
Returns:
|
||||
对应的头像,如果不存在这返回""
|
||||
"""
|
||||
return self._head_images.get(wxid, "")
|
||||
|
||||
def get_group_name(self, roomid: str, wxid: str) -> str:
|
||||
"""
|
||||
Args:
|
||||
@@ -194,11 +216,12 @@ class ContactManager:
|
||||
self._personal_contacts[wxid] = nickname
|
||||
self._logger.debug(f"已更新联系人: {wxid} -> {nickname}")
|
||||
|
||||
def refresh_contacts(self, new_contacts: Dict[str, str], wcf: Wcf) -> None:
|
||||
def refresh_contacts(self, new_contacts: Dict[str, str], head_imgs: Dict[str, str], wcf: Wcf) -> None:
|
||||
"""刷新联系人信息
|
||||
|
||||
Args:
|
||||
new_contacts: 新的联系人字典
|
||||
head_imgs: 联系人头像字典,格式为 {"wxid": "http://xxxxx"}
|
||||
wcf :wcf
|
||||
|
||||
"""
|
||||
@@ -213,6 +236,7 @@ class ContactManager:
|
||||
# "city": cnt.get("city", ""),
|
||||
# "gender": gender}
|
||||
self._friends = wcf.get_friends()
|
||||
self._head_images = head_imgs
|
||||
self._logger.info(f"联系人信息已刷新,共 {len(new_contacts)} 个联系人")
|
||||
# 重新分类联系人
|
||||
self._classify_contacts(wcf)
|
||||
|
||||
Reference in New Issue
Block a user