From 9a7e0f5854adedf8bbdf5f3eaf189871af238c9b Mon Sep 17 00:00:00 2001
From: H3CoF6 <1707889225@qq.com>
Date: Sat, 28 Mar 2026 05:04:12 +0800
Subject: [PATCH] feat(biz): add biz type
---
frontend/components/BizMessages.vue | 23 ++++++++++++++++----
src/wechat_decrypt_tool/routers/biz.py | 30 ++++++++++++++++++++------
2 files changed, 43 insertions(+), 10 deletions(-)
diff --git a/frontend/components/BizMessages.vue b/frontend/components/BizMessages.vue
index a0ddd1a..3ca64af 100644
--- a/frontend/components/BizMessages.vue
+++ b/frontend/components/BizMessages.vue
@@ -22,8 +22,14 @@
v-for="item in filteredAccounts"
:key="item.username"
@click="selectAccount(item)"
- class="flex items-center gap-3 px-4 py-3 cursor-pointer hover:bg-gray-50 transition-colors border-b border-gray-50"
- :class="{ 'bg-[#F2F2F2]': selectedAccount?.username === item.username }"
+ class="flex items-center gap-3 px-4 py-3 cursor-pointer transition-colors border-b border-gray-50"
+ :class="[
+ selectedAccount?.username === item.username
+ ? 'bg-[#E5E5E5]' // 选中状态最深
+ : item.username === 'gh_3dfda90e39d6'
+ ? 'bg-[#F2F2F2] hover:bg-[#EAEAEA]' // 微信支付专门的底色,以示区分
+ : 'hover:bg-gray-50' // 普通项的悬浮色
+ ]"
>
@@ -37,8 +43,17 @@
{{ item.formatted_last_time }}
-
- 官方
+
+
+ {{ {1: '服务号', 0: '公众号', 2: '企业号', 3: '未知'}[item.type] || '未知' }}
diff --git a/src/wechat_decrypt_tool/routers/biz.py b/src/wechat_decrypt_tool/routers/biz.py
index d6e5282..df944f1 100644
--- a/src/wechat_decrypt_tool/routers/biz.py
+++ b/src/wechat_decrypt_tool/routers/biz.py
@@ -132,7 +132,6 @@ def proxy_biz_image(url: str):
if not url:
return Response(status_code=400)
try:
- # 伪装 UA,防止被拦截
req = urllib.request.Request(url, headers={
'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/120.0.0.0 Safari/537.36'
})
@@ -183,7 +182,6 @@ def get_biz_account_list(account: Optional[str] = None):
except Exception as e:
logger.warning(f"读取 Name2Id 失败 {db_file}: {e}")
- # 2. 查询 contact.db 完善昵称和头像信息
contact_db_path = account_dir / "contact.db"
contact_info = {}
if contact_db_path.exists() and biz_ids:
@@ -191,17 +189,37 @@ def get_biz_account_list(account: Optional[str] = None):
conn = sqlite3.connect(str(contact_db_path))
cursor = conn.cursor()
placeholders = ",".join(["?"] * len(biz_ids))
- query = f"SELECT username, remark, nick_name, alias, big_head_url FROM contact WHERE username IN ({placeholders})"
- rows = cursor.execute(query, list(biz_ids)).fetchall()
- for r in rows:
+ # 先查 contact 表
+ query_contact = f"SELECT username, remark, nick_name, alias, big_head_url FROM contact WHERE username IN ({placeholders})"
+ rows_contact = cursor.execute(query_contact, list(biz_ids)).fetchall()
+
+ for r in rows_contact:
uname = r[0]
name = r[1] or r[2] or r[3] or uname
contact_info[uname] = {
"username": uname,
"name": name,
- "avatar": r[4]
+ "avatar": r[4],
+ "type": 3 # 默认给个 3(未知)
}
+
+ # 再查 biz_info 表获取类型
+ try:
+ query_biz = f"SELECT username, type FROM biz_info WHERE username IN ({placeholders})"
+ rows_biz = cursor.execute(query_biz, list(biz_ids)).fetchall()
+ for r in rows_biz:
+ uname = r[0]
+ biz_type = r[1]
+ # 如果查到了且是 0, 1, 2,就更新进去,否则保留 3
+ if uname in contact_info:
+ if biz_type in (0, 1, 2):
+ contact_info[uname]["type"] = biz_type
+ else:
+ contact_info[uname]["type"] = 3
+ except Exception as e:
+ logger.warning(f"读取 biz_info 失败: {e}")
+
conn.close()
except Exception as e:
logger.warning(f"读取 contact.db 失败: {e}")