feat: 专家库显示服务联系状态,未联系需先建立才能咨询
CI / 后端测试 (push) Has been cancelled
CI / 前端构建 (push) Has been cancelled

- 后端 /experts 返回 connected 字段(基于 expert_consultations 表)
- 前端卡片显示"已联系"徽章
- 未联系时按钮为"建立联系",调用 selectExpert API
- 已联系后按钮变为"咨询",可跳转对应场景

Generated with [Devin](https://devin.ai)

Co-Authored-By: Devin <158243242+devin-ai-integration[bot]@users.noreply.github.com>
This commit is contained in:
selfrelease
2026-08-31 14:59:18 +08:00
co-authored by Devin
parent c7f539f41a
commit f9d2d0687e
3 changed files with 70 additions and 12 deletions
+26 -3
View File
@@ -1282,9 +1282,32 @@ class RatingRequest(BaseModel):
@app.get("/experts")
def list_experts(category: str | None = None):
"""列出专家,支持按分类筛选(legal/decision/emotion/life)。"""
return {"results": expert_store.list_experts(category=category, status="active")}
def list_experts(category: str | None = None, authorization: str | None = Header(default=None)):
"""列出专家,支持按分类筛选(legal/decision/emotion/life)。
登录后额外返回 connected 字段(是否已建立服务联系)。
"""
results = expert_store.list_experts(category=category, status="active")
# 查询当前用户已建立联系的专家ID集合
phone = get_current_phone(authorization)
if phone and results:
conn = _matter_dsn()
try:
cur = conn.cursor()
expert_ids = [r["id"] for r in results]
cur.execute(
"SELECT DISTINCT expert_id FROM expert_consultations "
"WHERE user_phone = %s AND expert_id = ANY(%s)",
(phone, expert_ids),
)
connected_ids = {r[0] for r in cur.fetchall()}
for r in results:
r["connected"] = r["id"] in connected_ids
finally:
conn.close()
else:
for r in results:
r["connected"] = False
return {"results": results}
@app.get("/experts/{expert_id}")