|
|
@@ -326,30 +326,48 @@ function doSend(text,media){
|
|
|
|
|
|
function buildSourceTags(){
|
|
|
if(!sourcesData||!sourcesData.length)return'';
|
|
|
- var seen=new Set(),tags='',drugName='';
|
|
|
+ // 按药名分组
|
|
|
+ var groups={},order=[];
|
|
|
for(var i=0;i<sourcesData.length;i++){
|
|
|
- var s=sourcesData[i],key=(s.section||'')+'|'+(s.name||'');
|
|
|
- if(seen.has(key)||!s.section||s.section==='正文')continue;
|
|
|
- seen.add(key);
|
|
|
- if(!drugName) drugName=s.name||'';
|
|
|
- var excerpt=(s.excerpt||'').replace(/【.+?】/g,'').replace(/来源:.*$/gm,'').trim();
|
|
|
- var showExcerpt=excerpt.length>400?excerpt.substring(0,400)+'...':excerpt;
|
|
|
- tags+='<span class="source-tag" onclick="var p=this.parentNode;this.classList.toggle(\'open\')">'+esc(s.section)+'<div class="src-excerpt"><strong>'+esc(drugName)+' · '+esc(s.source||'')+'</strong><br><br>'+esc(showExcerpt)+'</div></span>';
|
|
|
+ var s=sourcesData[i];
|
|
|
+ if(!s.section||s.section==='正文')continue;
|
|
|
+ var name=s.name||'未知药品';
|
|
|
+ if(!groups[name]){groups[name]={sections:[],seen:new Set(),source:s.source||''};order.push(name);}
|
|
|
+ var key=s.section;
|
|
|
+ if(!groups[name].seen.has(key)){
|
|
|
+ groups[name].seen.add(key);
|
|
|
+ var excerpt=(s.excerpt||'').replace(/【.+?】/g,'').replace(/来源:.*$/gm,'').trim();
|
|
|
+ var showExcerpt=excerpt.length>400?excerpt.substring(0,400)+'...':excerpt;
|
|
|
+ groups[name].sections.push({section:key,excerpt:showExcerpt,source:s.source||''});
|
|
|
+ }
|
|
|
+ }
|
|
|
+ if(!order.length)return'';
|
|
|
+ var h='<div class="source-tags">';
|
|
|
+ for(var g=0;g<order.length;g++){
|
|
|
+ var dn=order[g],grp=groups[dn],cnt=grp.sections.length;
|
|
|
+ h+='<div style="margin-bottom:10px">';
|
|
|
+ h+='<div class="src-title">📖 '+esc(dn)+' · '+esc(grp.source)+' ('+cnt+'个栏目)';
|
|
|
+ h+=' <a href="javascript:void(0)" onclick="switchTab(\'drugs\');loadDrugDetailBySrc(\''+escAttr(dn)+'\')" style="font-size:11px;color:#002FA7">查看详情 →</a></div>';
|
|
|
+ for(var s=0;s<grp.sections.length;s++){
|
|
|
+ var sec=grp.sections[s];
|
|
|
+ h+='<span class="source-tag" onclick="var p=this.parentNode;this.classList.toggle(\'open\')">'+esc(sec.section)+'<div class="src-excerpt"><strong>'+esc(dn)+' · '+esc(sec.source)+'</strong><br><br>'+esc(sec.excerpt)+'</div></span>';
|
|
|
+ }
|
|
|
+ h+='</div>';
|
|
|
}
|
|
|
- if(!tags)return'';
|
|
|
- var h='<div class="source-tags"><div class="src-title">📖 药典原文参考 · '+esc(drugName)+' ('+seen.size+'个栏目,点击展开)</div>'+tags;
|
|
|
- h+='<div style="margin-top:6px"><a href="javascript:void(0)" onclick="switchTab(\'drugs\');loadDrugDetailBySrc(\''+escAttr(drugName)+'\')" style="font-size:12px;color:#002FA7">🔍 查看完整药品详情 →</a></div>';
|
|
|
h+='</div>';
|
|
|
return h;
|
|
|
}
|
|
|
|
|
|
-// 根据药名查找 drug_id 并打开详情
|
|
|
window.loadDrugDetailBySrc=async function(drugName){
|
|
|
if(!TOKEN) await getToken();
|
|
|
try{
|
|
|
- var r=await fetch(API_BASE+'/api/v1/drug/search?keyword='+encodeURIComponent(drugName)+'&page_size=1',{headers:authHeaders()});
|
|
|
+ var r=await fetch(API_BASE+'/api/v1/drug/search?keyword='+encodeURIComponent(drugName)+'&page_size=5',{headers:authHeaders()});
|
|
|
var d=await r.json();var items=d.items||d.data||[];
|
|
|
- if(items.length>0){loadDrugDetail(items[0].drug_id)}else{alert('未找到药品: '+drugName)}
|
|
|
+ // 精确匹配优先
|
|
|
+ var exact=items.filter(function(x){return x.name===drugName});
|
|
|
+ if(exact.length>0){loadDrugDetail(exact[0].drug_id)}
|
|
|
+ else if(items.length>0){loadDrugDetail(items[0].drug_id)}
|
|
|
+ else{alert('未找到药品: '+drugName)}
|
|
|
}catch(e){}
|
|
|
};
|
|
|
|