ソースを参照

commit bugfix

林海 1 週間 前
コミット
2a81c1b817
5 ファイル変更134 行追加55 行削除
  1. 25 13
      app.py
  2. 58 0
      query_db.py
  3. 47 42
      templates/add_member.html
  4. 2 0
      templates/member_detail.html
  5. 2 0
      templates/members.html

+ 25 - 13
app.py

@@ -2545,14 +2545,17 @@ def add_member():
                 parent_mid = request.form.get(f'relations[{i}][parent_mid]')
                 rel_type = request.form.get(f'relations[{i}][relation_type]')
                 sub_rel_type = request.form.get(f'relations[{i}][sub_relation_type]', '0')
+                child_order_raw = request.form.get(f'relations[{i}][child_order]', '')
                 
                 if not parent_mid or not rel_type:
                     break
                 
+                child_order = int(child_order_raw) if child_order_raw.strip().isdigit() else None
                 relations.append({
                     'parent_mid': int(parent_mid),
                     'relation_type': int(rel_type),
-                    'sub_relation_type': int(sub_rel_type)
+                    'sub_relation_type': int(sub_rel_type),
+                    'child_order': child_order
                 })
                 i += 1
             
@@ -2561,10 +2564,13 @@ def add_member():
                 related_mid = request.form.get('related_mid')
                 relation_type = request.form.get('relation_type')
                 if related_mid and relation_type:
+                    child_order_raw = request.form.get('child_order', '')
+                    child_order = int(child_order_raw) if child_order_raw.strip().isdigit() else None
                     relations.append({
                         'parent_mid': int(related_mid),
                         'relation_type': int(relation_type),
-                        'sub_relation_type': int(request.form.get('sub_relation_type', '0'))
+                        'sub_relation_type': int(request.form.get('sub_relation_type', '0')),
+                        'child_order': child_order
                     })
             
             # 年龄校验逻辑
@@ -2941,9 +2947,9 @@ def edit_member(member_id):
             if member.get('birthday'):
                 member['birthday_date'] = format_timestamp(member['birthday'])
             
-            # 获取现有关系
-            cursor.execute("SELECT * FROM family_relation_info WHERE source_mid = %s LIMIT 1", (member_id,))
-            current_relation = cursor.fetchone()
+            # 获取现有关系(支持多条)
+            cursor.execute("SELECT * FROM family_relation_info WHERE source_mid = %s ORDER BY id", (member_id,))
+            relations = cursor.fetchall()
             
             cursor.execute("SELECT id, name FROM family_member_info WHERE id != %s ORDER BY name", (member_id,))
             all_members = cursor.fetchall()
@@ -2961,20 +2967,26 @@ def edit_member(member_id):
     finally:
         conn.close()
         
-    # Calculate selected_member_name based on current_relation
-    selected_member_name = ''
-    if current_relation and current_relation['parent_mid']:
-        for m in all_members:
-            if m['id'] == current_relation['parent_mid']:
-                selected_member_name = m['name']
-                break
+    # Calculate selected_member_names based on relations
+    selected_member_names = []
+    if relations:
+        for rel in relations:
+            if rel.get('parent_mid'):
+                for m in all_members:
+                    if m['id'] == rel['parent_mid']:
+                        selected_member_names.append(m['name'])
+                        break
+                else:
+                    selected_member_names.append('')
+            else:
+                selected_member_names.append('')
     
     # Get source_record_id from member data
     if member:
         clear_invalid_member_scan_fields(member)
     source_record_id = normalize_source_record_id(member.get('source_record_id') if member else None)
     
-    return render_template('add_member.html', member=member, images=images, all_members=all_members, current_relation=current_relation, selected_member_name=selected_member_name, source_record_id=source_record_id)
+    return render_template('add_member.html', member=member, images=images, all_members=all_members, relations=relations, selected_member_names=selected_member_names, source_record_id=source_record_id)
 
 @app.route('/manager/member_detail/<int:member_id>')
 def member_detail(member_id):

+ 58 - 0
query_db.py

@@ -0,0 +1,58 @@
+import pymysql
+
+DB_CONFIG = {
+    'host': 'rm-f8ze60yirdj8786u2wo.mysql.rds.aliyuncs.com',
+    'port': 3306,
+    'user': 'root',
+    'password': 'csqz@20255',
+    'db': 'csqz-client',
+    'charset': 'utf8mb4',
+    'cursorclass': pymysql.cursors.DictCursor
+}
+
+conn = pymysql.connect(**DB_CONFIG)
+try:
+    with conn.cursor() as cursor:
+        # 查看留尚书和留尚礼的详细信息和关系
+        cursor.execute("SELECT id, name, simplified_name, family_rank FROM family_member_info WHERE id IN (4214, 3984, 4217)")
+        members = cursor.fetchall()
+        print('留尚书/留尚礼详细信息:')
+        for m in members:
+            print(f"  ID: {m['id']}, 姓名: {m['name']}, 简名: {m['simplified_name']}, 辈分: {m['family_rank']}")
+            
+            print(f"    作为子节点的关系:")
+            cursor.execute('SELECT * FROM family_relation_info WHERE child_mid = %s', (m['id'],))
+            child_rels = cursor.fetchall()
+            if not child_rels:
+                print(f"      无父节点关系!")
+            else:
+                for r in child_rels:
+                    cursor.execute('SELECT name, family_rank FROM family_member_info WHERE id = %s', (r['parent_mid'],))
+                    parent = cursor.fetchone()
+                    if parent:
+                        print(f"      parent_mid: {r['parent_mid']} ({parent['name']}, 辈分: {parent['family_rank']}), relation_type: {r['relation_type']}, sub_relation_type: {r['sub_relation_type']}")
+                    else:
+                        print(f"      parent_mid: {r['parent_mid']} (不存在!), relation_type: {r['relation_type']}, sub_relation_type: {r['sub_relation_type']}")
+            
+            print(f"    作为父节点的关系:")
+            cursor.execute('SELECT * FROM family_relation_info WHERE parent_mid = %s', (m['id'],))
+            parent_rels = cursor.fetchall()
+            if not parent_rels:
+                print(f"      无子节点关系")
+            else:
+                for r in parent_rels:
+                    cursor.execute('SELECT name, family_rank FROM family_member_info WHERE id = %s', (r['child_mid'],))
+                    child = cursor.fetchone()
+                    if child:
+                        print(f"      child_mid: {r['child_mid']} ({child['name']}, 辈分: {child['family_rank']}), relation_type: {r['relation_type']}, sub_relation_type: {r['sub_relation_type']}")
+                    else:
+                        print(f"      child_mid: {r['child_mid']} (不存在!), relation_type: {r['relation_type']}, sub_relation_type: {r['sub_relation_type']}")
+        
+        print("\n--- 查找family_rank包含'衢州'的成员 ---")
+        cursor.execute("SELECT id, name, simplified_name, family_rank FROM family_member_info WHERE family_rank LIKE '%衢州%'")
+        qz_members = cursor.fetchall()
+        print(f"包含衢州的成员数量: {len(qz_members)}")
+        for m in qz_members[:20]:
+            print(f"  ID: {m['id']}, 姓名: {m['name']}, 简名: {m['simplified_name']}, 辈分: {m['family_rank']}")
+finally:
+    conn.close()

+ 47 - 42
templates/add_member.html

@@ -210,51 +210,53 @@
                     <div class="section-title">关系录入 (选择关联成员及关系)</div>
                     <div id="relations-container">
                         <!-- Existing relations will be added here dynamically -->
-                        {% if current_relation %}
-                        <div class="row g-3 mb-1 relation-row" data-index="0">
-                            <div class="col-md-4">
-                                <label class="form-label">关联成员</label>
-                                <div class="input-group">
-                                    <input type="text" class="form-control related-member-display" placeholder="点击选择关联成员" readonly value="{{ selected_member_name }}">
-                                    <input type="hidden" name="relations[0][parent_mid]" class="related_mid" value="{{ current_relation.parent_mid }}">
-                                    <button type="button" class="btn btn-outline-primary select-member-btn" data-index="0" data-bs-toggle="modal" data-bs-target="#memberSelectModal">
-                                        <i class="bi bi-search"></i>
+                        {% if relations and relations|length > 0 %}
+                            {% for rel in relations %}
+                            <div class="row g-3 mb-1 relation-row" data-index="{{ loop.index0 }}">
+                                <div class="col-md-4">
+                                    <label class="form-label">关联成员</label>
+                                    <div class="input-group">
+                                        <input type="text" class="form-control related-member-display" placeholder="点击选择关联成员" readonly value="{{ selected_member_names[loop.index0] if selected_member_names and selected_member_names[loop.index0] else '' }}">
+                                        <input type="hidden" name="relations[{{ loop.index0 }}][parent_mid]" class="related_mid" value="{{ rel.parent_mid }}">
+                                        <button type="button" class="btn btn-outline-primary select-member-btn" data-index="{{ loop.index0 }}" data-bs-toggle="modal" data-bs-target="#memberSelectModal">
+                                            <i class="bi bi-search"></i>
+                                        </button>
+                                    </div>
+                                </div>
+                                <div class="col-md-3">
+                                    <label class="form-label">关系类型</label>
+                                    <select name="relations[{{ loop.index0 }}][relation_type]" class="form-select relation-type">
+                                        <option value="">-- 请选择 --</option>
+                                        <option value="1" {{ 'selected' if rel.relation_type == 1 else '' }}>父子 (关联人为父)</option>
+                                        <option value="2" {{ 'selected' if rel.relation_type == 2 else '' }}>母子 (关联人为母)</option>
+                                        <option value="10" {{ 'selected' if rel.relation_type == 10 else '' }}>夫妻</option>
+                                        <option value="11" {{ 'selected' if rel.relation_type == 11 else '' }}>兄弟</option>
+                                        <option value="12" {{ 'selected' if rel.relation_type == 12 else '' }}>姐妹</option>
+                                    </select>
+                                </div>
+                                <div class="col-md-3">
+                                    <label class="form-label">子类型</label>
+                                    <select name="relations[{{ loop.index0 }}][sub_relation_type]" class="form-select sub-relation-type">
+                                        <option value="0" {{ 'selected' if rel.sub_relation_type == 0 else '' }}>亲生/正妻</option>
+                                        <option value="1" {{ 'selected' if rel.sub_relation_type == 1 else '' }}>养父</option>
+                                        <option value="2" {{ 'selected' if rel.sub_relation_type == 2 else '' }}>出继(亲生父母)</option>
+                                        <option value="3" {{ 'selected' if rel.sub_relation_type == 3 else '' }}>入继(养父母)</option>
+                                        <option value="10" {{ 'selected' if rel.sub_relation_type == 10 else '' }}>妾</option>
+                                        <option value="11" {{ 'selected' if rel.sub_relation_type == 11 else '' }}>外室</option>
+                                    </select>
+                                </div>
+                                <div class="col-md-2 d-flex align-items-end">
+                                    <button type="button" class="btn btn-danger w-100 remove-relation-btn" {% if relations|length <= 1 %}style="display: none;"{% endif %}>
+                                        <i class="bi bi-trash"></i>
                                     </button>
                                 </div>
+                                <div class="col-md-2 child-order-wrapper" style="display: {{ 'block' if rel.relation_type in [1,2] else 'none' }};">
+                                    <label class="form-label">第几子</label>
+                                    <input type="number" name="relations[{{ loop.index0 }}][child_order]" class="form-control child-order-input"
+                                           min="1" placeholder="排行(选填)" value="{{ rel.child_order if rel.child_order else '' }}">
+                                </div>
                             </div>
-                            <div class="col-md-3">
-                                <label class="form-label">关系类型</label>
-                                <select name="relations[0][relation_type]" class="form-select relation-type">
-                                    <option value="">-- 请选择 --</option>
-                                    <option value="1" {{ 'selected' if current_relation.relation_type == 1 else '' }}>父子 (关联人为父)</option>
-                                    <option value="2" {{ 'selected' if current_relation.relation_type == 2 else '' }}>母子 (关联人为母)</option>
-                                    <option value="10" {{ 'selected' if current_relation.relation_type == 10 else '' }}>夫妻</option>
-                                    <option value="11" {{ 'selected' if current_relation.relation_type == 11 else '' }}>兄弟</option>
-                                    <option value="12" {{ 'selected' if current_relation.relation_type == 12 else '' }}>姐妹</option>
-                                </select>
-                            </div>
-                            <div class="col-md-3">
-                                <label class="form-label">子类型</label>
-                                <select name="relations[0][sub_relation_type]" class="form-select sub-relation-type">
-                                    <option value="0" {{ 'selected' if current_relation.sub_relation_type == 0 else '' }}>亲生/正妻</option>
-                                    <option value="1" {{ 'selected' if current_relation.sub_relation_type == 1 else '' }}>养父</option>
-                                    <option value="2" {{ 'selected' if current_relation.sub_relation_type == 2 else '' }}>出继(亲生父母)</option>
-                                    <option value="3" {{ 'selected' if current_relation.sub_relation_type == 3 else '' }}>入继(养父母)</option>
-                                    <option value="10" {{ 'selected' if current_relation.sub_relation_type == 10 else '' }}>妾</option>
-                                    <option value="11" {{ 'selected' if current_relation.sub_relation_type == 11 else '' }}>外室</option>
-                                </select>
-                            </div>
-                            <div class="col-md-2 d-flex align-items-end">
-                                <button type="button" class="btn btn-danger w-100 remove-relation-btn" style="display: none;">
-                                    <i class="bi bi-trash"></i>
-                                </button>
-                            </div>
-                            <div class="col-md-2 child-order-wrapper" style="display: {{ 'block' if current_relation.relation_type in [1,2] else 'none' }};">
-                                <label class="form-label">第几子</label>
-                                <input type="number" name="relations[0][child_order]" class="form-control child-order-input"
-                                       min="1" placeholder="排行(选填)" value="{{ current_relation.child_order if current_relation.child_order else '' }}">
-                            </div>
-                        </div>
+                            {% endfor %}
                         {% else %}
                         <div class="row g-3 mb-1 relation-row" data-index="0">
                             <div class="col-md-4">
@@ -1143,6 +1145,9 @@
         const container = document.getElementById('relations-container');
         const newIndex = currentRelationIndex++;
         
+        // Automatically set currentRelationIndex to the new row
+        window.currentRelationIndex = newIndex;
+        
         const newRow = document.createElement('div');
         newRow.className = 'row g-3 mb-3 relation-row';
         newRow.dataset.index = newIndex;

+ 2 - 0
templates/member_detail.html

@@ -187,6 +187,8 @@
                         <span class="info-value">
                             {% if member.is_pass_away == 1 %}
                                 <span class="text-danger">已故</span>
+                            {% elif member.is_pass_away == 2 %}
+                                <span class="text-warning">未知</span>
                             {% else %}
                                 <span class="text-success">健在</span>
                             {% endif %}

+ 2 - 0
templates/members.html

@@ -132,6 +132,8 @@
                         <td>
                             {% if member.is_pass_away == 1 %}
                                 <span class="badge bg-secondary">已故</span>
+                            {% elif member.is_pass_away == 2 %}
+                                <span class="badge bg-warning">未知</span>
                             {% else %}
                                 <span class="badge bg-success">健在</span>
                             {% endif %}