|
|
@@ -109,6 +109,7 @@
|
|
|
.login-modal-btn+.login-modal-btn{border-left:1px solid #eee}
|
|
|
.login-modal-btn:focus-visible{outline:2px solid var(--bk);outline-offset:-3px}
|
|
|
.login-modal-btn-primary{color:var(--bk);font-weight:600}
|
|
|
+@media(max-width:400px){.input-area{padding:8px 6px;gap:4px}.input-area input{padding:8px 10px;font-size:13px;min-height:40px}.btn{padding:6px 10px;font-size:12px;min-height:40px}.media-btn{min-width:40px;padding:4px 6px;font-size:20px;border-radius:10px}.media-label{font-size:9px}.tags{padding:6px 8px 8px;gap:4px}.tag-btn{font-size:11px;padding:4px 10px}.chat{padding:10px 8px}.msg{max-width:90%}.header h1{font-size:15px}.header .sub{font-size:10px}.drug-list{padding:10px 8px}.drug-detail{padding:14px 10px}.search-box{padding:8px 10px}.drug-pager{padding:6px 8px}.pager button,.pager select{padding:4px 6px;font-size:11px}}
|
|
|
</style>
|
|
|
</head>
|
|
|
<body>
|
|
|
@@ -388,6 +389,7 @@
|
|
|
try{
|
|
|
var ctrl=streamAbort?streamAbort:new AbortController();
|
|
|
var r=await fetch(endpoint,{method:'POST',headers:authHeaders(),body:body,signal:ctrl.signal});
|
|
|
+ if(r.status===401){showLoginModal();aiDiv.classList.remove('streaming');STREAMING=false;resetSendBtn();contentDiv.innerHTML=md2html('请先登录后再提问');return}
|
|
|
if(!r.ok){contentDiv.innerHTML=md2html('请求失败: HTTP '+r.status);aiDiv.classList.remove('streaming');STREAMING=false;resetSendBtn();return}
|
|
|
sourcesData=[];
|
|
|
var reader=r.body.getReader(),decoder=new TextDecoder(),buffer='',fullText='',eventType='';
|
|
|
@@ -480,7 +482,6 @@
|
|
|
});
|
|
|
|
|
|
window.send=function(){
|
|
|
- if(!TOKEN){showLoginModal();return}
|
|
|
var input=document.getElementById('userInput'),text=input.value.trim();
|
|
|
var hasMedia=!!pendingMedia;
|
|
|
if(!text&&!hasMedia)return;input.value='';if(STREAMING)return;
|
|
|
@@ -541,7 +542,8 @@
|
|
|
|
|
|
window.loadDrugDetailBySrc=async function(drugName){
|
|
|
try{
|
|
|
- var r=await fetch(API_BASE+'/api/v1/drug/search?keyword='+encodeURIComponent(drugName)+'&page_size=10',{headers:authHeaders()});
|
|
|
+ var r=await fetch(API_BASE+'/api/v1/drug/search?keyword='+encodeURIComponent(drugName)+'&pageSize=10',{headers:authHeaders()});
|
|
|
+ if(r.status===401){showLoginModal();return}
|
|
|
var d=await r.json();var items=d.items||d.data||[];
|
|
|
// 2025年版优先,再精确匹配
|
|
|
items.sort(function(a,b){
|
|
|
@@ -559,9 +561,11 @@
|
|
|
var ALL_DRUGS=[],drugPage=1,drugTotalPages=1,drugPageSize=20,drugKeyword='';
|
|
|
async function loadDrugList(page){
|
|
|
page=page||1;drugPage=page;
|
|
|
- var url=API_BASE+'/api/v1/drug/search?page='+page+'&page_size='+drugPageSize;
|
|
|
+ var url=API_BASE+'/api/v1/drug/search?page='+page+'&pageSize='+drugPageSize;
|
|
|
if(drugKeyword) url+='&keyword='+encodeURIComponent(drugKeyword);
|
|
|
- try{var r=await fetch(url,{headers:authHeaders()});var d=await r.json();
|
|
|
+ try{var r=await fetch(url,{headers:authHeaders()});
|
|
|
+ if(r.status===401){showLoginModal();return}
|
|
|
+ var d=await r.json();
|
|
|
ALL_DRUGS=d.items||d.data||[];drugTotalPages=d.total_pages||1;
|
|
|
renderDrugCards(ALL_DRUGS);
|
|
|
}catch(e){ALL_DRUGS=[];renderDrugCards([])}
|
|
|
@@ -601,6 +605,7 @@
|
|
|
window.loadDrugDetail=async function(drugId){
|
|
|
try{
|
|
|
var r=await fetch(API_BASE+'/api/v1/drug/'+encodeURIComponent(drugId),{headers:authHeaders()});
|
|
|
+ if(r.status===401){showLoginModal();return}
|
|
|
var d=await r.json();var drug=d.data||d;
|
|
|
var dd=document.getElementById('tabDrugs');
|
|
|
var topBar='<div style="display:flex;align-items:center;gap:10px;margin-bottom:16px;padding-bottom:12px;border-bottom:1px solid #e0e0e0">';
|
|
|
@@ -635,7 +640,13 @@
|
|
|
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>';document.getElementById('drugPager').innerHTML='';loadDrugList(1)}
|
|
|
+ if(tab==='drugs'){
|
|
|
+ drugKeyword='';drugPage=1;
|
|
|
+ showDrugList();
|
|
|
+ document.getElementById('drugList').innerHTML='<div class="welcome"><div class="icon">⏳</div><p>加载中...</p></div>';
|
|
|
+ document.getElementById('drugPager').innerHTML='';
|
|
|
+ loadDrugList(1);
|
|
|
+ }
|
|
|
};
|
|
|
// 初始化:打开本地数据库 → 恢复对话 → 预加载药品列表
|
|
|
(async function init(){
|