Jelajahi Sumber

调整界面显示

liuchengsen 1 bulan lalu
induk
melakukan
40848ea5fa

+ 4 - 0
backend-java/src/main/java/com/pharmacopoeia/config/GlobalExceptionHandler.java

@@ -36,6 +36,10 @@ public class GlobalExceptionHandler {
     }
 
     private void writeJson(HttpServletResponse response, HttpStatus status, ApiResponse<?> body) throws IOException {
+        if (response.isCommitted()) {
+            log.warn("Response already committed, cannot write error body");
+            return;
+        }
         response.setStatus(status.value());
         response.setContentType(MediaType.APPLICATION_JSON_VALUE);
         response.setCharacterEncoding("UTF-8");

+ 14 - 9
static/index.html

@@ -75,7 +75,8 @@ body{font-family:-apple-system,BlinkMacSystemFont,"PingFang SC","Microsoft YaHei
 .tag-btn:active{background:rgba(0,47,167,.15)}
 .welcome{text-align:center;color:var(--sub);padding:40px 20px}
 .welcome .icon{font-size:48px;margin-bottom:12px}
-.drug-list{flex:1;overflow-y:auto;padding:12px 14px}
+.drug-list{flex:1;overflow-y:auto;padding:12px 14px;min-height:0}
+.drug-pager{flex-shrink:0;padding:8px 14px;background:#fff;border-top:1px solid #e0e0e0}
 .drug-card{background:var(--card);border-radius:var(--radius);padding:14px;margin-bottom:10px;box-shadow:0 1px 4px rgba(0,0,0,.06);cursor:pointer}
 .drug-card h3{font-size:15px;color:var(--bk);margin-bottom:4px}
 .drug-card .meta{font-size:12px;color:var(--sub)}
@@ -89,7 +90,7 @@ body{font-family:-apple-system,BlinkMacSystemFont,"PingFang SC","Microsoft YaHei
 .search-box input:focus{border-color:var(--bk);box-shadow:0 0 0 2px rgba(0,47,167,.12)}
 .status-bar{font-size:11px;padding:4px 14px;text-align:center;flex-shrink:0}
 .hidden{display:none!important}
-.pager{display:flex;justify-content:center;align-items:center;gap:4px;padding:16px 4px;flex-wrap:wrap}
+.pager{display:flex;justify-content:center;align-items:center;gap:4px;flex-wrap:wrap}
 .pager button,.pager select{border:1px solid #d0d5dd;border-radius:6px;background:#fff;color:#344054;font-size:12px;cursor:pointer;padding:6px 10px;min-height:32px;transition:all .15s}
 .pager button:hover:not(:disabled){background:#E8EDF8;border-color:#002FA7;color:#002FA7}
 .pager button.active{background:#002FA7;color:#fff;border-color:#002FA7;font-weight:600}
@@ -129,6 +130,7 @@ body{font-family:-apple-system,BlinkMacSystemFont,"PingFang SC","Microsoft YaHei
 <div id="tabDrugs" class="hidden">
   <div class="search-box"><input id="drugSearchInput" placeholder="搜索药品名称..." oninput="searchDrugs()"></div>
   <div class="drug-list" id="drugList"></div>
+  <div class="drug-pager" id="drugPager"></div>
 </div>
 <script>
 // ============================================================
@@ -401,10 +403,13 @@ window.searchDrugs=function(){
 };
 function renderDrugCards(items){
   var h='';
-  if(!items.length){document.getElementById('drugList').innerHTML='<div class="welcome"><div class="icon">📭</div><p>未找到,尝试其他关键词</p></div>';return}
+  if(!items.length){document.getElementById('drugList').innerHTML='<div class="welcome"><div class="icon">📭</div><p>未找到,尝试其他关键词</p></div>';document.getElementById('drugPager').innerHTML='';return}
   for(var i=0;i<items.length;i++){var d=items[i];h+='<div class="drug-card" onclick="loadDrugDetail(\''+escAttr(d.drug_id)+'\')"><h3>'+esc(d.name)+'</h3><div class="meta">'+(d.category||'')+' · '+(d.source_version||'')+'</div></div>'}
-  // 分页控制
-  h+='<div class="pager">';
+  document.getElementById('drugList').innerHTML=h;
+  renderPager();
+}
+function renderPager(){
+  var h='<div class="pager">';
   h+='<button onclick="loadDrugList(1)" '+(drugPage<=1?'disabled':'')+'>首页</button>';
   h+='<button onclick="loadDrugList('+(drugPage-1)+')" '+(drugPage<=1?'disabled':'')+'>‹</button>';
   var start=Math.max(1,drugPage-2),end=Math.min(drugTotalPages,drugPage+2);
@@ -421,7 +426,7 @@ function renderDrugCards(items){
   [10,20,50,100].forEach(function(s){h+='<option value="'+s+'"'+(drugPageSize===s?' selected':'')+'>'+s+' 条/页</option>'});
   h+='</select>';
   h+='</div>';
-  document.getElementById('drugList').innerHTML=h;
+  document.getElementById('drugPager').innerHTML=h;
 }
 window.loadDrugDetail=async function(drugId){
   try{
@@ -453,16 +458,16 @@ window.loadDrugDetail=async function(drugId){
   }catch(e){document.getElementById('tabDrugs').innerHTML='<div class="welcome"><p>加载失败</p></div>'}
 };
 window.showDrugList=function(){
-  document.getElementById('tabDrugs').innerHTML='<div class="search-box"><input id="drugSearchInput" placeholder="搜索药品名称..." oninput="searchDrugs()" value="'+escAttr(drugKeyword)+'"></div><div class="drug-list" id="drugList"></div>';
+  document.getElementById('tabDrugs').innerHTML='<div class="search-box"><input id="drugSearchInput" placeholder="搜索药品名称..." oninput="searchDrugs()" value="'+escAttr(drugKeyword)+'"></div><div class="drug-list" id="drugList"></div><div class="drug-pager" id="drugPager"></div>';
   renderDrugCards(ALL_DRUGS);
 };
 window.switchTab=function(tab){
   document.querySelectorAll('.nav-btn').forEach(function(b){b.classList.toggle('active',b.dataset.tab===tab)});
   document.getElementById('tabChat').classList.toggle('hidden',tab!=='chat');
   document.getElementById('tabDrugs').classList.toggle('hidden',tab!=='drugs');
-  if(tab==='drugs'){drugKeyword='';drugPage=1;document.getElementById('drugList').innerHTML='<div class="welcome"><div class="icon">⏳</div><p>加载中...</p></div>';loadDrugList(1)}
+  if(tab==='drugs'){drugKeyword='';drugPage=1;document.getElementById('drugList').innerHTML='<div class="welcome"><div class="icon">⏳</div><p>加载中...</p></div>';document.getElementById('drugPager').innerHTML='';loadDrugList(1)}
 };
 loadDrugList();
 </script>
 </body>
-</html>
+</html>