Jelajahi Sumber

commit 优化

林海 4 hari lalu
induk
melakukan
a41841aea3
2 mengubah file dengan 49 tambahan dan 4 penghapusan
  1. 28 3
      app.py
  2. 21 1
      templates/lineage_query.html

+ 28 - 3
app.py

@@ -1724,10 +1724,35 @@ def search_member():
             """, (like, like, like, keyword, keyword, f'{keyword}%', f'{keyword}%'))
             members = cursor.fetchall()
 
-            if members:
-                return jsonify({"success": True, "members": members})
-            else:
+            if not members:
                 return jsonify({"success": False, "message": "未找到匹配的成员"})
+
+            # 批量查询每位命中人员的子女(按 child_order 排序)
+            member_ids = [m['id'] for m in members]
+            fmt = ','.join(['%s'] * len(member_ids))
+            cursor.execute(f"""
+                SELECT r.parent_mid,
+                       c.id AS child_id,
+                       COALESCE(c.simplified_name, c.name) AS child_display_name
+                FROM family_relation_info r
+                JOIN family_member_info c ON r.child_mid = c.id
+                WHERE r.parent_mid IN ({fmt}) AND r.relation_type = 1
+                ORDER BY COALESCE(r.child_order, 9999), c.id
+            """, member_ids)
+            children_map = {}
+            for row in cursor.fetchall():
+                pid = row['parent_mid']
+                if pid not in children_map:
+                    children_map[pid] = []
+                children_map[pid].append({'id': row['child_id'], 'name': row['child_display_name']})
+
+            members_out = []
+            for m in members:
+                d = dict(m)
+                d['children'] = children_map.get(m['id'], [])
+                members_out.append(d)
+
+            return jsonify({"success": True, "members": members_out})
     finally:
         conn.close()
 

+ 21 - 1
templates/lineage_query.html

@@ -597,6 +597,26 @@ function showMemberSelection(members) {
                        🔄 ${member.adoption_note}
                    </span>
                </div>` : '';
+        // 子女信息
+        let childrenPart = '';
+        if (member.children && member.children.length > 0) {
+            const kids = member.children;
+            const MAX_SHOW = 3;
+            const shown = kids.slice(0, MAX_SHOW);
+            const extra = kids.length - MAX_SHOW;
+            const kidLinks = shown.map(k =>
+                `<a href="/manager/member_detail/${k.id}" target="_blank"
+                    onclick="event.stopPropagation()"
+                    style="color:#86efac; text-decoration:none; font-size:11px;"
+                    onmouseover="this.style.textDecoration='underline'"
+                    onmouseout="this.style.textDecoration='none'">${k.name}</a>`
+            ).join('<span style="color:rgba(255,255,255,0.3);margin:0 2px;">·</span>');
+            const extraBadge = extra > 0
+                ? `<span style="color:rgba(255,255,255,0.35);font-size:11px;margin-left:3px;">+${extra}子</span>` : '';
+            childrenPart = `<div style="margin-top:3px;margin-left:2px;">
+                <span style="color:rgba(255,255,255,0.35);font-size:11px;">子:</span>${kidLinks}${extraBadge}
+            </div>`;
+        }
         return `
             <div class="member-select-row"
                  onclick="selectMemberByIndex(${index})"
@@ -611,7 +631,7 @@ function showMemberSelection(members) {
                         <span style="color: #fff; font-weight: 600;">${member.name}</span>
                         ${simplifiedPart}${genPart}${fatherPart}${idPart}
                     </div>
-                    ${adoptionPart}
+                    ${adoptionPart}${childrenPart}
                 </div>
                 <a href="/manager/member_detail/${member.id}" target="_blank"
                    onclick="event.stopPropagation()"