Skip to content

Commit 851b66b

Browse files
frankslinclaude
andcommitted
修復地址層級顯示問題
後端修改(CbdbApiController.php): - 修改地址查詢 SQL,添加 NOT EXISTS 子句避免重複記錄 - 對每個地址只選擇時間最早的一條層級數據 - 解決同一地址因多個歷史層級記錄而重複出現的問題 前端修改(person.blade.php): - 調整地址層級顯示順序:具體地點優先,再依次顯示上級行政區劃 - 實現從小到大的層級排序(蒲城 → 華州 → ... → 明朝) - 添加停止渲染邏輯:遇到 [未詳] 或 ID 為 0 時立即停止,不輸出該記錄 🤖 Generated with [Claude Code](https://claude.com/claude-code) Co-Authored-By: Claude <noreply@anthropic.com>
1 parent a2ad6a1 commit 851b66b

2 files changed

Lines changed: 31 additions & 7 deletions

File tree

app/Http/Controllers/CbdbApiController.php

Lines changed: 18 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -494,6 +494,24 @@ protected function sqlAddresses(): string
494494
OR ADDR.c_firstyear IS NULL
495495
OR BIOG_ADDR_DATA.c_lastyear >= ADDR.c_firstyear
496496
)
497+
AND NOT EXISTS (
498+
SELECT 1 FROM View_Address VA2
499+
WHERE VA2.c_addr_id = ADDR.c_addr_id
500+
AND (
501+
BIOG_ADDR_DATA.c_firstyear IS NULL
502+
OR VA2.c_lastyear IS NULL
503+
OR BIOG_ADDR_DATA.c_firstyear <= VA2.c_lastyear
504+
)
505+
AND (
506+
BIOG_ADDR_DATA.c_lastyear IS NULL
507+
OR VA2.c_firstyear IS NULL
508+
OR BIOG_ADDR_DATA.c_lastyear >= VA2.c_firstyear
509+
)
510+
AND (
511+
VA2.c_firstyear < ADDR.c_firstyear
512+
OR (VA2.c_firstyear = ADDR.c_firstyear AND VA2.c_lastyear < ADDR.c_lastyear)
513+
)
514+
)
497515
WHERE BIOG_ADDR_DATA.c_personid = ?
498516
SQL;
499517
}

resources/views/cbdbapi/person.blade.php

Lines changed: 13 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -507,24 +507,30 @@ function renderAliases(title, items) {
507507
508508
function buildAddressPath(item) {
509509
var path = [];
510+
// 先添加具体地点
511+
if (item.AddrName) {
512+
var addr = escapeHtml(item.AddrName);
513+
if (item.AddrId) {
514+
addr += ' <span class="badge">' + escapeHtml(item.AddrId) + '</span>';
515+
}
516+
path.push(addr);
517+
}
518+
// 再添加上级地址,从 belongs1 到 belongs5(从小到大)
510519
for (var i = 1; i <= 5; i++) {
511520
var nameKey = 'belongs' + i + '_name';
512521
var idKey = 'belongs' + i + '_id';
513522
if (item[nameKey]) {
523+
// 如果遇到 [未詳] 或 ID 为 0,停止渲染
524+
if (item[nameKey] === '[未詳]' || item[idKey] === '0' || item[idKey] === 0) {
525+
break;
526+
}
514527
var label = escapeHtml(item[nameKey]);
515528
if (item[idKey]) {
516529
label += ' <span class="badge">ID: ' + escapeHtml(item[idKey]) + '</span>';
517530
}
518531
path.push(label);
519532
}
520533
}
521-
if (item.AddrName) {
522-
var addr = escapeHtml(item.AddrName);
523-
if (item.AddrId) {
524-
addr += ' <span class="badge">' + escapeHtml(item.AddrId) + '</span>';
525-
}
526-
path.push(addr);
527-
}
528534
return path.join('');
529535
}
530536

0 commit comments

Comments
 (0)