diff --git a/VERSION b/VERSION index db7aded..1d0ba9e 100644 --- a/VERSION +++ b/VERSION @@ -1 +1 @@ -0.3.53 +0.4.0 diff --git a/source_clean/VERSION b/source_clean/VERSION index db7aded..1d0ba9e 100644 --- a/source_clean/VERSION +++ b/source_clean/VERSION @@ -1 +1 @@ -0.3.53 +0.4.0 diff --git a/source_clean/frontend-src/dist-vite/h5/index.html b/source_clean/frontend-src/dist-vite/h5/index.html deleted file mode 100755 index fc7dd86..0000000 --- a/source_clean/frontend-src/dist-vite/h5/index.html +++ /dev/null @@ -1,923 +0,0 @@ - - - - - - - - - CloudSearch - 搜索 - - - - - -
- -
-
- - -
-
-
-
-
- - - -
- - -
- - - - - - diff --git a/source_clean/frontend-src/h5/app.js b/source_clean/frontend-src/h5/app.js deleted file mode 100644 index 2466c61..0000000 --- a/source_clean/frontend-src/h5/app.js +++ /dev/null @@ -1,599 +0,0 @@ - // ===== Anime keywords for categorization ===== - const ANIME_KWS=['仙逆','凡人修仙传','斗破苍穹','斗破','盘龙','完美世界','一念永恒','妖神记','星辰变','遮天','神墓','吞噬星空','武动乾坤','大主宰','全职高手','鬼灭之刃','海贼王','火影忍者','死神','龙珠','进击的巨人','咒术回战','一人之下','狐妖小红娘','魔道祖师','天官赐福','时光代理人','大王饶命','斗罗大陆','绝世唐门','不良人','秦时明月','全职法师','牧神记','三体','灵笼','雾山五行','凡人','仙王的日常生活','百妖谱','眷思量','镖人','伍六七','刺客伍六七','葬送的芙莉莲','间谍过家家'] - - // ===== Quotes ===== - const QUOTES=['学而时习之,不亦说乎。','温故而知新,可以为师矣。','三人行,必有我师焉。','学而不思则罔,思而不学则殆。','博学之,审问之,慎思之,明辨之,笃行之。','千里之行,始于足下。','不积跬步,无以至千里。','知之为知之,不知为不知,是知也。','工欲善其事,必先利其器。','玉不琢,不成器;人不学,不知道。','学以致用,知行合一。','学海无涯,勤作舟。','书山有路,勤为径。','宝剑锋从磨砺出,梅花香自苦寒来。','锲而不舍,金石可镂。','业精于勤,荒于嬉。','读书破万卷,下笔如有神。','路漫漫其修远兮,吾将上下而求索。','采菊东篱下,悠然见南山。','海内存知己,天涯若比邻。','长风破浪会有时,直挂云帆济沧海。','会当凌绝顶,一览众山小。','山重水复疑无路,柳暗花明又一村。'] - - // ===== Home Page ===== - function homeSearch(){ - const q=document.getElementById('homeSearchInput').value.trim() - if(q)doSearchFromHome(q) - } - - function doSearchFromHome(q){ - document.getElementById('homePage').style.display='none' - document.getElementById('searchView').style.display='block' - document.getElementById('searchInput').value=q - window.history.replaceState({},'','/h5?q='+encodeURIComponent(q)) - doSearch() - } - function renderHomePage(data){ - fetch("/api/site-config").then(r=>r.json()).then(cfg=>{ - // 显示 Logo(优先图片,其次文字) - var logoEl=document.getElementById("homeLogo"); - var headerEl=document.getElementById("headerTitle"); - if(cfg.site_logo){ - logoEl.innerHTML='logo'; - logoEl.style.display=""; - headerEl.innerHTML='logo'; - headerEl.style.display=""; - }else if(cfg.site_name){ - logoEl.textContent=cfg.site_name; - logoEl.style.display=""; - headerEl.textContent=cfg.site_name; - headerEl.style.display=""; - }else{ - logoEl.textContent="CloudSearch"; - logoEl.style.display=""; - headerEl.textContent="CloudSearch"; - headerEl.style.display=""; - } - if(cfg.site_disclaimer){ - document.getElementById("footerContent").innerHTML=cfg.site_disclaimer.replace(/\n/g,'
'); - document.getElementById("siteFooter").style.display="block"; - } - }).catch(()=>{}) - const categories=data.categories||[] - const fetchedAt=data.fetchedAt||'' - // Quote - fetch('https://v1.(function(){ - var q=QUOTES[Math.floor(Math.random()*QUOTES.length)]; - document.getElementById('homeQuote').textContent='「 '+q+' 」'; - document.getElementById('homeQuoteAuthor').textContent='——古籍经典'; - })() - - // Store expanded state per category - window.__expanded=window.__expanded||{} - window.__activeTab=window.__activeTab||{} - - const el=document.getElementById('homeRankings') - let html='' - for(const cat of categories){ - const icons={movie:'🎬',tv:'📺',western_movie:'🎥',western:'🌍',donghua:'🐉',global_anime:'🌐',variety:'🎤',niche:'💎',hotsite:'🏆'} - const icon=icons[cat.category]||'📋' - const key=cat.category - if(!window.__activeTab[key])window.__activeTab[key]='hot' - - html+='
' - html+='
'+ - ''+icon+' '+cat.label+''+ - '
'+ - '热榜'+ - '最新'+ - '
'+ - '
' - html+='
' - const items=window.__activeTab[key]==='hot'?(cat.hot||[]):(cat.newest||[]) - html+=renderRankItems(items,key,false) - html+='
' - // 数据来源 - html+='
'+ - ''+(cat.category!=='hotsite'?'数据来源:TMDB':'本站搜索数据')+''+ - ''+fetchedAt+''+ - '
' - } - el.innerHTML=html - } - - function renderRankItems(items,key,expanded){ - if(!items||items.length===0)return'
暂无数据
' - const limit=3 - const show=expanded?items.length:Math.min(limit,items.length) - let html=items.slice(0,show).map((item,i)=>{ - const c=i<3?' rank-idx top3':' rank-idx' - return '
'+ - ''+(i+1)+''+ - ''+item.keyword+''+ - ''+(item.rating?'⭐'+item.rating:item.searchCount)+''+ - '
' - }).join('') - if(items.length>limit&&!expanded){ - html+='
展开全部 ▼
' - } - return html - } - - function expandRank(key){ - const container=document.getElementById('ritems-'+key) - if(!container)return - const tab=window.__activeTab[key]||'hot' - const data=JSON.parse(tab==='hot'?container.dataset.hot:container.dataset.newest) - container.innerHTML=renderRankItems(data.items,key,true) - } - - function switchRankTab(category,tab){ - window.__activeTab[category]=tab - const tabsContainer=document.getElementById('rtabs-'+category) - if(tabsContainer){ - tabsContainer.querySelectorAll('.rank-tab').forEach(t=>t.className='rank-tab') - tabsContainer.querySelector(tab==='hot'?'.rank-tab:first-child':'.rank-tab:last-child').className='rank-tab active' - } - const container=document.getElementById('ritems-'+category) - if(container){ - const data=JSON.parse(tab==='hot'?container.dataset.hot:container.dataset.newest) - container.innerHTML=renderRankItems(data.items,category,false) - } - } - let userInfo = null - let allResults = [] - let allChannels = [] - let activeTab = '' - let currentSaveItem = null - const CLOUD_ICONS = {quark:'☁️',baidu:'🔵',aliyun:'🟠','115':'🟣',tianyi:'🔷','123pan':'🔴',uc:'🟡',xunlei:'🟢',pikpak:'🟤',magnet:'🧲',ed2k:'🔗',others:'📁'} - const CLOUD_LABELS = {quark:'夸克网盘',baidu:'百度网盘',aliyun:'阿里云盘','115':'115网盘',tianyi:'天翼云盘','123pan':'123云盘',uc:'UC网盘',xunlei:'迅雷云盘',pikpak:'PikPak',magnet:'磁力链接',ed2k:'电驴链接',others:'其他'} - const CLOUD_COLORS = {quark:'#07c160',baidu:'#4e6ef2',aliyun:'#ff6a00','115':'#9b59b6',tianyi:'#00a1d6','123pan':'#e74c3c',uc:'#f39c12',xunlei:'#2ecc71',pikpak:'#8e44ad',magnet:'#95a5a6',ed2k:'#7f8c8d',others:'#95a5a6'} - const CLOUD_ORDER = {quark:1,baidu:2,aliyun:3,'115':4,tianyi:5,'123pan':6,uc:7,xunlei:8,pikpak:9,magnet:10,ed2k:11,others:12} - - // ===== Fetch helpers ===== - function getToken(){return localStorage.getItem('h5_admin_token')} - function apiHeaders(){const h={'Content-Type':'application/json'};const t=getToken();if(t)h['Authorization']='Bearer '+t;return h} - - // ===== Toast ===== - let toastTimer - function showToast(msg,isError){ - const el=document.getElementById('toast') - el.textContent=msg - el.className='toast show'+(isError?' error':'') - clearTimeout(toastTimer) - toastTimer=setTimeout(()=>el.className='toast',2000) - } - - // ===== User ===== - async function checkLogin(){ - try{ - const res=await fetch('/api/me',{headers:apiHeaders()}) - if(res.ok){ - const data=await res.json() - if(data.loggedIn){ - userInfo=data - document.getElementById('userArea').innerHTML=''+data.username+'' - } - } - }catch(e){} - } - - function logout(){ - localStorage.removeItem('h5_admin_token') - userInfo=null - document.getElementById('userArea').innerHTML='' - showToast('已退出') - } - - function showLogin(){ - document.getElementById('loginErr').textContent='' - document.getElementById('loginUser').value='' - document.getElementById('loginPass').value='' - document.getElementById('loginModal').style.display='block' - document.getElementById('overlay').style.display='block' - } - - function closeLogin(){ - document.getElementById('loginModal').style.display='none' - document.getElementById('overlay').style.display='none' - } - - async function handleLogin(){ - const user=document.getElementById('loginUser').value.trim() - const pass=document.getElementById('loginPass').value - if(!user||!pass){showToast('请输入用户名和密码',true);return} - const btn=document.getElementById('loginBtn') - btn.disabled=true;btn.textContent='登录中...' - try{ - const res=await fetch('/api/admin/login',{method:'POST',headers:{'Content-Type':'application/json'},body:JSON.stringify({username:user,password:pass})}) - if(res.ok){ - const data=await res.json() - localStorage.setItem('h5_admin_token',data.token) - userInfo={username:user} - document.getElementById('userArea').innerHTML=''+user+'' - closeLogin() - showToast('登录成功') - }else{ - const err=await res.json().catch(()=>({})) - document.getElementById('loginErr').textContent=err.error||'登录失败' - } - }catch(e){ - document.getElementById('loginErr').textContent='网络错误' - }finally{ - btn.disabled=false;btn.textContent='登录' - } - } - - // ===== Search ===== - function handleKeydown(e){if(e.key==='Enter')doSearch()} - - let searchTimer - function doSearch(){ - const q=document.getElementById('searchInput').value.trim() - if(!q)return - // Update URL - window.history.replaceState({},'','/h5?q='+encodeURIComponent(q)) - // Show loading - document.getElementById('results').innerHTML='' - document.getElementById('tabs').style.display='none' - document.getElementById('infoBar').style.display='none' - document.getElementById('loading').style.display='block' - document.getElementById('loadingText').textContent='🔍 正在搜索中...' - document.getElementById('searchBtn').disabled=true - - let progress=0 - const bar=document.getElementById('loadingBar') - const progressTimer=setInterval(()=>{ - if(progress<60)progress+=1+Math.random()*3 - else if(progress<85)progress+=0.5+Math.random() - bar.style.width=progress+'%' - },200) - - // Use streaming search for live updates - streamSearch(q,progressTimer,bar) - } - - async function streamSearch(q,progressTimer,bar){ - const startTime=Date.now() - try{ - const response=await fetch('/api/query',{method:'POST',headers:apiHeaders(),body:JSON.stringify({q})}) - if(!response.ok)throw new Error('搜索失败 ('+response.status+')') - - const reader=response.body.getReader() - const decoder=new TextDecoder() - let buffer='' - let allItems=[] - let channels=[] - let totalCount=0 - let filteredCount=0 - - while(true){ - const {done,value}=await reader.read() - if(done)break - - buffer+=decoder.decode(value,{stream:true}) - const lines=buffer.split('\n') - buffer=lines.pop()||'' - - for(const line of lines){ - if(!line.trim())continue - try{ - const msg=JSON.parse(line) - if(msg.type==='stats'){ - totalCount=msg.total||0 - filteredCount=msg.filtered||0 - document.getElementById('loadingText').textContent='🔍 搜索到 '+totalCount+' 条,正在验证...' - }else if(msg.type==='result'){ - if(msg.valid&&msg.id){ - allItems.push(msg.id) - } - }else if(msg.type==='complete'){ - const results=msg.results||[] - channels=msg.channels||[] - clearInterval(progressTimer) - bar.style.width='100%' - setTimeout(()=>renderResults(results,channels,totalCount,filteredCount,Date.now()-startTime),300) - return - } - }catch(e){} - } - } - }catch(e){ - clearInterval(progressTimer) - document.getElementById('loading').style.display='none' - document.getElementById('searchBtn').disabled=false - document.getElementById('results').innerHTML='
搜索失败:'+e.message+'
' - } - } - - // ===== Render ===== - function renderResults(results,channels,totalCount,filteredCount,time){ - document.getElementById('loading').style.display='none' - document.getElementById('searchBtn').disabled=false - allResults=results - allChannels=channels||[] - - // Info bar - if(totalCount>0){ - document.getElementById('infoBar').style.display='flex' - document.getElementById('infoCount').textContent='已为您挑选到最符合 '+totalCount+' 条结果' - document.getElementById('infoTime').textContent='⏱ '+time+'ms' - if(filteredCount>0)document.getElementById('infoFiltered').textContent='❌ 失效 '+filteredCount - else document.getElementById('infoFiltered').textContent='' - }else{ - document.getElementById('infoBar').style.display='none' - } - - // Build tabs - const tabsEl=document.getElementById('tabs') - tabsEl.innerHTML='' - const typeCounts={} - for(const r of results){const ct=r.cloud_type||'others';typeCounts[ct]=(typeCounts[ct]||0)+1} - const sorted=Object.keys(typeCounts).sort((a,b)=>(CLOUD_ORDER[a]||99)-(CLOUD_ORDER[b]||99)) - // "全部" tab - const allTab=document.createElement('div') - allTab.className='tab active' - allTab.textContent='📋 全部 ('+results.length+')' - allTab.onclick=()=>{setActiveTab('');renderCardList(results)} - tabsEl.appendChild(allTab) - for(const ct of sorted){ - const tab=document.createElement('div') - tab.className='tab' - tab.textContent=(CLOUD_ICONS[ct]||'📁')+' '+(CLOUD_LABELS[ct]||ct)+' ('+typeCounts[ct]+')' - tab.onclick=()=>{setActiveTab(ct);renderCardList(results.filter(r=>(r.cloud_type||'others')===ct))} - tabsEl.appendChild(tab) - } - tabsEl.style.display=results.length>0?'flex':'none' - activeTab='' - - // Render cards - renderCardList(results) - } - - function setActiveTab(ct){ - activeTab=ct - document.querySelectorAll('.tab').forEach((t,i)=>{ - const isAll=i===0&&!ct - const active=i>0&&ct&&t.textContent.includes(CLOUD_LABELS[ct]) - t.className='tab'+(active||isAll?' active':'') - }) - } - - function renderCardList(items){ - const el=document.getElementById('results') - if(items.length===0){ - el.innerHTML='
暂无结果
' - return - } - el.innerHTML=items.map((item,idx)=>{ - const coverHtml=item.cover - ? '' - : '
'+escapeHtml(CLOUD_ICONS[item.cloud_type||'others'])+'
' - const cloudLabel=CLOUD_LABELS[item.cloud_type]||item.cloud_type||'' - const cloudColor=CLOUD_COLORS[item.cloud_type]||'#95a5a6' - const tags=extractTags(item.title||'') - const cleanTitle=(item.title||'').replace(/【[^】]+】/g,'').trim() - const relativeTime=formatTime(item.update_time||item.datetime||'') - return '
'+ - '
'+coverHtml+''+cloudLabel+'
'+ - '
'+ - '
'+escapeHtml(cleanTitle)+'
'+ - '
🕐 '+relativeTime+''+(item.file_size?'📦 '+escapeHtml(item.file_size)+'':'')+'
'+ - (tags.length>0?'
'+tags.map(t=>''+escapeHtml(t)+'').join('')+'
':'')+ - '
'+ - ''+(item.source?escapeHtml(item.source):'网盘')+''+ - ''+ - '
'+ - '
'+ - '
' - }).join('') - - // Store items for save reference - window.__h5Results=items - } - - function escapeHtml(s){if(!s)return '';return String(s).replace(/&/g,'&').replace(//g,'>').replace(/"/g,'"')} - - function extractTags(title){ - const tags=[] - // Quality tags - const quality=['4K','1080P','2160P','720P','480P','HDR','HDR10','BluRay','REMUX','HEVC','x264','x265','WEB-DL','WEBRip'] - for(const q of quality){if(title.includes(q)&&!tags.includes(q))tags.push(q)} - const kw=['杜比视界','杜比全景声','高码率','内封简繁英字幕','内嵌字幕','中文字幕','中英字幕'] - for(const k of kw){if(title.includes(k)&&!tags.includes(k))tags.push(k)} - return tags.slice(0,6) - } - - function isQualityTag(t){const q=['4K','1080P','2160P','720P','480P','HDR','HDR10','BluRay','REMUX','HEVC','x264','x265','臻彩','高清','WEB-DL','WEBRip'];return q.includes(t)} - - function formatTime(s){ - if(!s)return '' - const d=new Date(s) - if(isNaN(d.getTime()))return s.slice(0,10) - const diff=Date.now()-d.getTime() - if(diff<0)return s.slice(0,10) - const mins=Math.floor(diff/60000) - if(mins<60)return mins<=1?'刚刚':mins+' 分钟前' - const hours=Math.floor(mins/60) - if(hours<24)return hours+' 小时前' - const days=Math.floor(hours/24) - if(days<30)return days+' 天前' - return Math.floor(days/30)+' 个月前' - } - - // ===== Save / Share ===== - function saveItem(idx){ - const items=window.__h5Results||[] - currentSaveItem=items[idx] - if(!currentSaveItem)return - - document.getElementById('progressSteps').style.display='block' - document.getElementById('shareContent').style.display='none' - document.getElementById('saveError').style.display='none' - document.getElementById('copyBtn2').style.display='none' - - const title=(currentSaveItem.title||'').replace(/【[^】]+】/g,'').trim()||'资源' - document.getElementById('shareTitle').textContent=title - - // Show modal - document.getElementById('overlay').style.display='block' - document.getElementById('shareModal').style.display='block' - - // Reset steps - resetSteps() - advanceStep(1) - - // Call save API - doSave() - } - - async function doSave(){ - try{ - const res=await fetch('/api/save',{method:'POST',headers:apiHeaders(),body:JSON.stringify({type:'search',source:currentSaveItem,target_cloud:currentSaveItem.cloud_type||'quark'})}) - const data=await res.json() - - if(!data.success){ - document.getElementById('progressSteps').style.display='none' - document.getElementById('saveError').style.display='flex' - document.getElementById('saveError').textContent=data.message||data.error||'保存失败' - return - } - - // Step 2 - advanceStep(2) - await sleep(500) - - // Step 3 - advanceStep(3) - await sleep(300) - - if(data.share_url){ - advanceStep(4) - await sleep(200) - showShareResult(data) - }else{ - advanceStep(4) - document.getElementById('progressSteps').style.display='none' - document.getElementById('saveError').style.display='flex' - document.getElementById('saveError').textContent='生成分享链接失败' - } - }catch(e){ - document.getElementById('progressSteps').style.display='none' - document.getElementById('saveError').style.display='flex' - document.getElementById('saveError').textContent=e.message||'保存请求失败' - } - } - - function showShareResult(data){ - document.getElementById('progressSteps').style.display='none' - document.getElementById('shareContent').style.display='block' - - const link=data.share_url - document.getElementById('shareLinkInput').value=link - - const diskLabel=CLOUD_LABELS[currentSaveItem.cloud_type]||'夸克网盘' - document.getElementById('qrLabel').textContent=diskLabel+' APP扫码转存' - - // Generate QR - const qrContainer=document.getElementById('qrContainer') - qrContainer.innerHTML='' - new QRCode(qrContainer,{text:link,width:140,height:140}) - - // Password - const pwd=data.share_pwd||data.sharePwd||'' - if(pwd){ - document.getElementById('sharePwdRow').style.display='flex' - document.getElementById('sharePwdTag').textContent=pwd - }else{ - document.getElementById('sharePwdRow').style.display='none' - } - - document.getElementById('copyBtn2').style.display='inline-block' - } - - function resetSteps(){ - for(let i=1;i<=3;i++){ - const el=document.getElementById('step'+i) - el.className='step' - el.querySelector('.step-dot').innerHTML=''+i+'' - el.querySelector('.step-status').textContent='等待中' - el.querySelector('.step-status').className='step-status wait' - } - } - - function advanceStep(n){ - for(let i=1;i<=3;i++){ - const el=document.getElementById('step'+i) - if(i' - const titles=['正在转存到','正在重命名文件(防和谐)','正在生成分享链接'] - el.querySelector('.step-title').textContent=titles[i-1]+'...' - el.querySelector('.step-status').textContent='进行中' - el.querySelector('.step-status').className='step-status doing' - } - } - } - - function sleep(ms){return new Promise(r=>setTimeout(r,ms))} - - function copyShareLink(){ - const input=document.getElementById('shareLinkInput') - if(!input.value)return - if(navigator.clipboard&&navigator.clipboard.writeText){ - navigator.clipboard.writeText(input.value).then(()=>showToast('链接已复制')).catch(()=>fallbackCopy(input.value)) - }else{ - fallbackCopy(input.value) - } - } - - function fallbackCopy(text){ - const ta=document.createElement('textarea') - ta.value=text;ta.style.position='fixed';ta.style.left='-9999px';document.body.appendChild(ta) - ta.select() - try{document.execCommand('copy');showToast('链接已复制')}catch{showToast('复制失败',true)} - document.body.removeChild(ta) - } - - function openDisclaimer(){ - window.open('/disclaimer/','_blank') - } - - function closeModal(){ - document.getElementById('overlay').style.display='none' - document.getElementById('shareModal').style.display='none' - document.getElementById('loginModal').style.display='none' - } - - // ===== Init ===== - checkLogin() - - // Add Enter key handler for home search - document.getElementById('homeSearchInput').addEventListener('keydown',function(e){if(e.key==='Enter')homeSearch()}) - // Also add for search view input - document.getElementById('searchInput').addEventListener('keydown',function(e){if(e.key==='Enter')doSearch()}) - - // Fetch home page data - fetch('/api/rankings/categorized').then(r=>r.json()).then(data=>{ - renderHomePage(data) - }).catch(()=>{ - document.getElementById('homeQuote').textContent='「 学而时习之,不亦说乎。 」' - document.getElementById('homeQuoteAuthor').textContent='---孔子' - }) - - // Check URL for query - const params=new URLSearchParams(window.location.search) - const q=params.get('q') - if(q){ - document.getElementById('homePage').style.display='none' - document.getElementById('searchView').style.display='block' - document.getElementById('searchInput').value=q - doSearch() - } - -// ===== Dark Mode Toggle ===== -(function() { - var btn = document.createElement('button'); - btn.className = 'theme-btn'; - btn.title = '切换暗色模式'; - var isDark = localStorage.getItem('h5_theme') === 'dark'; - if (!isDark && window.matchMedia('(prefers-color-scheme: dark)').matches) isDark = true; - btn.textContent = isDark ? '☀️' : '🌙'; - if (isDark) document.documentElement.setAttribute('data-theme', 'dark'); - btn.onclick = function() { - var dark = document.documentElement.getAttribute('data-theme') !== 'dark'; - document.documentElement.setAttribute('data-theme', dark ? 'dark' : ''); - localStorage.setItem('h5_theme', dark ? 'dark' : 'light'); - btn.textContent = dark ? '☀️' : '🌙'; - }; - document.body.appendChild(btn); -})(); diff --git a/source_clean/frontend-src/h5/index.html b/source_clean/frontend-src/h5/index.html deleted file mode 100755 index 07014dd..0000000 --- a/source_clean/frontend-src/h5/index.html +++ /dev/null @@ -1,160 +0,0 @@ - - - - - - - - - CloudSearch - 搜索 - - - - - -
- -
-
- - -
-
-
-
-
- - - -
- - -
- - - - - - diff --git a/source_clean/frontend-src/h5/qrcode.min.js b/source_clean/frontend-src/h5/qrcode.min.js deleted file mode 100644 index 993e88f..0000000 --- a/source_clean/frontend-src/h5/qrcode.min.js +++ /dev/null @@ -1 +0,0 @@ -var QRCode;!function(){function a(a){this.mode=c.MODE_8BIT_BYTE,this.data=a,this.parsedData=[];for(var b=[],d=0,e=this.data.length;e>d;d++){var f=this.data.charCodeAt(d);f>65536?(b[0]=240|(1835008&f)>>>18,b[1]=128|(258048&f)>>>12,b[2]=128|(4032&f)>>>6,b[3]=128|63&f):f>2048?(b[0]=224|(61440&f)>>>12,b[1]=128|(4032&f)>>>6,b[2]=128|63&f):f>128?(b[0]=192|(1984&f)>>>6,b[1]=128|63&f):b[0]=f,this.parsedData=this.parsedData.concat(b)}this.parsedData.length!=this.data.length&&(this.parsedData.unshift(191),this.parsedData.unshift(187),this.parsedData.unshift(239))}function b(a,b){this.typeNumber=a,this.errorCorrectLevel=b,this.modules=null,this.moduleCount=0,this.dataCache=null,this.dataList=[]}function i(a,b){if(void 0==a.length)throw new Error(a.length+"/"+b);for(var c=0;c=f;f++){var h=0;switch(b){case d.L:h=l[f][0];break;case d.M:h=l[f][1];break;case d.Q:h=l[f][2];break;case d.H:h=l[f][3]}if(h>=e)break;c++}if(c>l.length)throw new Error("Too long data");return c}function s(a){var b=encodeURI(a).toString().replace(/\%[0-9a-fA-F]{2}/g,"a");return b.length+(b.length!=a?3:0)}a.prototype={getLength:function(){return this.parsedData.length},write:function(a){for(var b=0,c=this.parsedData.length;c>b;b++)a.put(this.parsedData[b],8)}},b.prototype={addData:function(b){var c=new a(b);this.dataList.push(c),this.dataCache=null},isDark:function(a,b){if(0>a||this.moduleCount<=a||0>b||this.moduleCount<=b)throw new Error(a+","+b);return this.modules[a][b]},getModuleCount:function(){return this.moduleCount},make:function(){this.makeImpl(!1,this.getBestMaskPattern())},makeImpl:function(a,c){this.moduleCount=4*this.typeNumber+17,this.modules=new Array(this.moduleCount);for(var d=0;d=7&&this.setupTypeNumber(a),null==this.dataCache&&(this.dataCache=b.createData(this.typeNumber,this.errorCorrectLevel,this.dataList)),this.mapData(this.dataCache,c)},setupPositionProbePattern:function(a,b){for(var c=-1;7>=c;c++)if(!(-1>=a+c||this.moduleCount<=a+c))for(var d=-1;7>=d;d++)-1>=b+d||this.moduleCount<=b+d||(this.modules[a+c][b+d]=c>=0&&6>=c&&(0==d||6==d)||d>=0&&6>=d&&(0==c||6==c)||c>=2&&4>=c&&d>=2&&4>=d?!0:!1)},getBestMaskPattern:function(){for(var a=0,b=0,c=0;8>c;c++){this.makeImpl(!0,c);var d=f.getLostPoint(this);(0==c||a>d)&&(a=d,b=c)}return b},createMovieClip:function(a,b,c){var d=a.createEmptyMovieClip(b,c),e=1;this.make();for(var f=0;f=g;g++)for(var h=-2;2>=h;h++)this.modules[d+g][e+h]=-2==g||2==g||-2==h||2==h||0==g&&0==h?!0:!1}},setupTypeNumber:function(a){for(var b=f.getBCHTypeNumber(this.typeNumber),c=0;18>c;c++){var d=!a&&1==(1&b>>c);this.modules[Math.floor(c/3)][c%3+this.moduleCount-8-3]=d}for(var c=0;18>c;c++){var d=!a&&1==(1&b>>c);this.modules[c%3+this.moduleCount-8-3][Math.floor(c/3)]=d}},setupTypeInfo:function(a,b){for(var c=this.errorCorrectLevel<<3|b,d=f.getBCHTypeInfo(c),e=0;15>e;e++){var g=!a&&1==(1&d>>e);6>e?this.modules[e][8]=g:8>e?this.modules[e+1][8]=g:this.modules[this.moduleCount-15+e][8]=g}for(var e=0;15>e;e++){var g=!a&&1==(1&d>>e);8>e?this.modules[8][this.moduleCount-e-1]=g:9>e?this.modules[8][15-e-1+1]=g:this.modules[8][15-e-1]=g}this.modules[this.moduleCount-8][8]=!a},mapData:function(a,b){for(var c=-1,d=this.moduleCount-1,e=7,g=0,h=this.moduleCount-1;h>0;h-=2)for(6==h&&h--;;){for(var i=0;2>i;i++)if(null==this.modules[d][h-i]){var j=!1;g>>e));var k=f.getMask(b,d,h-i);k&&(j=!j),this.modules[d][h-i]=j,e--,-1==e&&(g++,e=7)}if(d+=c,0>d||this.moduleCount<=d){d-=c,c=-c;break}}}},b.PAD0=236,b.PAD1=17,b.createData=function(a,c,d){for(var e=j.getRSBlocks(a,c),g=new k,h=0;h8*l)throw new Error("code length overflow. ("+g.getLengthInBits()+">"+8*l+")");for(g.getLengthInBits()+4<=8*l&&g.put(0,4);0!=g.getLengthInBits()%8;)g.putBit(!1);for(;;){if(g.getLengthInBits()>=8*l)break;if(g.put(b.PAD0,8),g.getLengthInBits()>=8*l)break;g.put(b.PAD1,8)}return b.createBytes(g,e)},b.createBytes=function(a,b){for(var c=0,d=0,e=0,g=new Array(b.length),h=new Array(b.length),j=0;j=0?p.get(q):0}}for(var r=0,m=0;mm;m++)for(var j=0;jm;m++)for(var j=0;j=0;)b^=f.G15<=0;)b^=f.G18<>>=1;return b},getPatternPosition:function(a){return f.PATTERN_POSITION_TABLE[a-1]},getMask:function(a,b,c){switch(a){case e.PATTERN000:return 0==(b+c)%2;case e.PATTERN001:return 0==b%2;case e.PATTERN010:return 0==c%3;case e.PATTERN011:return 0==(b+c)%3;case e.PATTERN100:return 0==(Math.floor(b/2)+Math.floor(c/3))%2;case e.PATTERN101:return 0==b*c%2+b*c%3;case e.PATTERN110:return 0==(b*c%2+b*c%3)%2;case e.PATTERN111:return 0==(b*c%3+(b+c)%2)%2;default:throw new Error("bad maskPattern:"+a)}},getErrorCorrectPolynomial:function(a){for(var b=new i([1],0),c=0;a>c;c++)b=b.multiply(new i([1,g.gexp(c)],0));return b},getLengthInBits:function(a,b){if(b>=1&&10>b)switch(a){case c.MODE_NUMBER:return 10;case c.MODE_ALPHA_NUM:return 9;case c.MODE_8BIT_BYTE:return 8;case c.MODE_KANJI:return 8;default:throw new Error("mode:"+a)}else if(27>b)switch(a){case c.MODE_NUMBER:return 12;case c.MODE_ALPHA_NUM:return 11;case c.MODE_8BIT_BYTE:return 16;case c.MODE_KANJI:return 10;default:throw new Error("mode:"+a)}else{if(!(41>b))throw new Error("type:"+b);switch(a){case c.MODE_NUMBER:return 14;case c.MODE_ALPHA_NUM:return 13;case c.MODE_8BIT_BYTE:return 16;case c.MODE_KANJI:return 12;default:throw new Error("mode:"+a)}}},getLostPoint:function(a){for(var b=a.getModuleCount(),c=0,d=0;b>d;d++)for(var e=0;b>e;e++){for(var f=0,g=a.isDark(d,e),h=-1;1>=h;h++)if(!(0>d+h||d+h>=b))for(var i=-1;1>=i;i++)0>e+i||e+i>=b||(0!=h||0!=i)&&g==a.isDark(d+h,e+i)&&f++;f>5&&(c+=3+f-5)}for(var d=0;b-1>d;d++)for(var e=0;b-1>e;e++){var j=0;a.isDark(d,e)&&j++,a.isDark(d+1,e)&&j++,a.isDark(d,e+1)&&j++,a.isDark(d+1,e+1)&&j++,(0==j||4==j)&&(c+=3)}for(var d=0;b>d;d++)for(var e=0;b-6>e;e++)a.isDark(d,e)&&!a.isDark(d,e+1)&&a.isDark(d,e+2)&&a.isDark(d,e+3)&&a.isDark(d,e+4)&&!a.isDark(d,e+5)&&a.isDark(d,e+6)&&(c+=40);for(var e=0;b>e;e++)for(var d=0;b-6>d;d++)a.isDark(d,e)&&!a.isDark(d+1,e)&&a.isDark(d+2,e)&&a.isDark(d+3,e)&&a.isDark(d+4,e)&&!a.isDark(d+5,e)&&a.isDark(d+6,e)&&(c+=40);for(var k=0,e=0;b>e;e++)for(var d=0;b>d;d++)a.isDark(d,e)&&k++;var l=Math.abs(100*k/b/b-50)/5;return c+=10*l}},g={glog:function(a){if(1>a)throw new Error("glog("+a+")");return g.LOG_TABLE[a]},gexp:function(a){for(;0>a;)a+=255;for(;a>=256;)a-=255;return g.EXP_TABLE[a]},EXP_TABLE:new Array(256),LOG_TABLE:new Array(256)},h=0;8>h;h++)g.EXP_TABLE[h]=1<h;h++)g.EXP_TABLE[h]=g.EXP_TABLE[h-4]^g.EXP_TABLE[h-5]^g.EXP_TABLE[h-6]^g.EXP_TABLE[h-8];for(var h=0;255>h;h++)g.LOG_TABLE[g.EXP_TABLE[h]]=h;i.prototype={get:function(a){return this.num[a]},getLength:function(){return this.num.length},multiply:function(a){for(var b=new Array(this.getLength()+a.getLength()-1),c=0;cf;f++)for(var g=c[3*f+0],h=c[3*f+1],i=c[3*f+2],k=0;g>k;k++)e.push(new j(h,i));return e},j.getRsBlockTable=function(a,b){switch(b){case d.L:return j.RS_BLOCK_TABLE[4*(a-1)+0];case d.M:return j.RS_BLOCK_TABLE[4*(a-1)+1];case d.Q:return j.RS_BLOCK_TABLE[4*(a-1)+2];case d.H:return j.RS_BLOCK_TABLE[4*(a-1)+3];default:return void 0}},k.prototype={get:function(a){var b=Math.floor(a/8);return 1==(1&this.buffer[b]>>>7-a%8)},put:function(a,b){for(var c=0;b>c;c++)this.putBit(1==(1&a>>>b-c-1))},getLengthInBits:function(){return this.length},putBit:function(a){var b=Math.floor(this.length/8);this.buffer.length<=b&&this.buffer.push(0),a&&(this.buffer[b]|=128>>>this.length%8),this.length++}};var l=[[17,14,11,7],[32,26,20,14],[53,42,32,24],[78,62,46,34],[106,84,60,44],[134,106,74,58],[154,122,86,64],[192,152,108,84],[230,180,130,98],[271,213,151,119],[321,251,177,137],[367,287,203,155],[425,331,241,177],[458,362,258,194],[520,412,292,220],[586,450,322,250],[644,504,364,280],[718,560,394,310],[792,624,442,338],[858,666,482,382],[929,711,509,403],[1003,779,565,439],[1091,857,611,461],[1171,911,661,511],[1273,997,715,535],[1367,1059,751,593],[1465,1125,805,625],[1528,1190,868,658],[1628,1264,908,698],[1732,1370,982,742],[1840,1452,1030,790],[1952,1538,1112,842],[2068,1628,1168,898],[2188,1722,1228,958],[2303,1809,1283,983],[2431,1911,1351,1051],[2563,1989,1423,1093],[2699,2099,1499,1139],[2809,2213,1579,1219],[2953,2331,1663,1273]],o=function(){var a=function(a,b){this._el=a,this._htOption=b};return a.prototype.draw=function(a){function g(a,b){var c=document.createElementNS("http://www.w3.org/2000/svg",a);for(var d in b)b.hasOwnProperty(d)&&c.setAttribute(d,b[d]);return c}var b=this._htOption,c=this._el,d=a.getModuleCount();Math.floor(b.width/d),Math.floor(b.height/d),this.clear();var h=g("svg",{viewBox:"0 0 "+String(d)+" "+String(d),width:"100%",height:"100%",fill:b.colorLight});h.setAttributeNS("http://www.w3.org/2000/xmlns/","xmlns:xlink","http://www.w3.org/1999/xlink"),c.appendChild(h),h.appendChild(g("rect",{fill:b.colorDark,width:"1",height:"1",id:"template"}));for(var i=0;d>i;i++)for(var j=0;d>j;j++)if(a.isDark(i,j)){var k=g("use",{x:String(i),y:String(j)});k.setAttributeNS("http://www.w3.org/1999/xlink","href","#template"),h.appendChild(k)}},a.prototype.clear=function(){for(;this._el.hasChildNodes();)this._el.removeChild(this._el.lastChild)},a}(),p="svg"===document.documentElement.tagName.toLowerCase(),q=p?o:m()?function(){function a(){this._elImage.src=this._elCanvas.toDataURL("image/png"),this._elImage.style.display="block",this._elCanvas.style.display="none"}function d(a,b){var c=this;if(c._fFail=b,c._fSuccess=a,null===c._bSupportDataURI){var d=document.createElement("img"),e=function(){c._bSupportDataURI=!1,c._fFail&&_fFail.call(c)},f=function(){c._bSupportDataURI=!0,c._fSuccess&&c._fSuccess.call(c)};return d.onabort=e,d.onerror=e,d.onload=f,d.src="data:image/gif;base64,iVBORw0KGgoAAAANSUhEUgAAAAUAAAAFCAYAAACNbyblAAAAHElEQVQI12P4//8/w38GIAXDIBKE0DHxgljNBAAO9TXL0Y4OHwAAAABJRU5ErkJggg==",void 0}c._bSupportDataURI===!0&&c._fSuccess?c._fSuccess.call(c):c._bSupportDataURI===!1&&c._fFail&&c._fFail.call(c)}if(this._android&&this._android<=2.1){var b=1/window.devicePixelRatio,c=CanvasRenderingContext2D.prototype.drawImage;CanvasRenderingContext2D.prototype.drawImage=function(a,d,e,f,g,h,i,j){if("nodeName"in a&&/img/i.test(a.nodeName))for(var l=arguments.length-1;l>=1;l--)arguments[l]=arguments[l]*b;else"undefined"==typeof j&&(arguments[1]*=b,arguments[2]*=b,arguments[3]*=b,arguments[4]*=b);c.apply(this,arguments)}}var e=function(a,b){this._bIsPainted=!1,this._android=n(),this._htOption=b,this._elCanvas=document.createElement("canvas"),this._elCanvas.width=b.width,this._elCanvas.height=b.height,a.appendChild(this._elCanvas),this._el=a,this._oContext=this._elCanvas.getContext("2d"),this._bIsPainted=!1,this._elImage=document.createElement("img"),this._elImage.style.display="none",this._el.appendChild(this._elImage),this._bSupportDataURI=null};return e.prototype.draw=function(a){var b=this._elImage,c=this._oContext,d=this._htOption,e=a.getModuleCount(),f=d.width/e,g=d.height/e,h=Math.round(f),i=Math.round(g);b.style.display="none",this.clear();for(var j=0;e>j;j++)for(var k=0;e>k;k++){var l=a.isDark(j,k),m=k*f,n=j*g;c.strokeStyle=l?d.colorDark:d.colorLight,c.lineWidth=1,c.fillStyle=l?d.colorDark:d.colorLight,c.fillRect(m,n,f,g),c.strokeRect(Math.floor(m)+.5,Math.floor(n)+.5,h,i),c.strokeRect(Math.ceil(m)-.5,Math.ceil(n)-.5,h,i)}this._bIsPainted=!0},e.prototype.makeImage=function(){this._bIsPainted&&d.call(this,a)},e.prototype.isPainted=function(){return this._bIsPainted},e.prototype.clear=function(){this._oContext.clearRect(0,0,this._elCanvas.width,this._elCanvas.height),this._bIsPainted=!1},e.prototype.round=function(a){return a?Math.floor(1e3*a)/1e3:a},e}():function(){var a=function(a,b){this._el=a,this._htOption=b};return a.prototype.draw=function(a){for(var b=this._htOption,c=this._el,d=a.getModuleCount(),e=Math.floor(b.width/d),f=Math.floor(b.height/d),g=[''],h=0;d>h;h++){g.push("");for(var i=0;d>i;i++)g.push('');g.push("")}g.push("
"),c.innerHTML=g.join("");var j=c.childNodes[0],k=(b.width-j.offsetWidth)/2,l=(b.height-j.offsetHeight)/2;k>0&&l>0&&(j.style.margin=l+"px "+k+"px")},a.prototype.clear=function(){this._el.innerHTML=""},a}();QRCode=function(a,b){if(this._htOption={width:256,height:256,typeNumber:4,colorDark:"#000000",colorLight:"#ffffff",correctLevel:d.H},"string"==typeof b&&(b={text:b}),b)for(var c in b)this._htOption[c]=b[c];"string"==typeof a&&(a=document.getElementById(a)),this._android=n(),this._el=a,this._oQRCode=null,this._oDrawing=new q(this._el,this._htOption),this._htOption.text&&this.makeCode(this._htOption.text)},QRCode.prototype.makeCode=function(a){this._oQRCode=new b(r(a,this._htOption.correctLevel),this._htOption.correctLevel),this._oQRCode.addData(a),this._oQRCode.make(),this._el.title=a,this._oDrawing.draw(this._oQRCode),this.makeImage()},QRCode.prototype.makeImage=function(){"function"==typeof this._oDrawing.makeImage&&(!this._android||this._android>=3)&&this._oDrawing.makeImage()},QRCode.prototype.clear=function(){this._oDrawing.clear()},QRCode.CorrectLevel=d}(); \ No newline at end of file diff --git a/source_clean/frontend-src/h5/style.css b/source_clean/frontend-src/h5/style.css deleted file mode 100644 index 718f821..0000000 --- a/source_clean/frontend-src/h5/style.css +++ /dev/null @@ -1,179 +0,0 @@ -/* ===== Dark Mode ===== */[data-theme="dark"] body { background:#1a1a1a;color:#e5e5e5 }[data-theme="dark"] .rank-block,[data-theme="dark"] .card,[data-theme="dark"] .modal,[data-theme="dark"] .header { background:#1f1f1f;border-color:#333 }[data-theme="dark"] input,[data-theme="dark"] .home-search-box,[data-theme="dark"] .search-wrap { background:#2a2a2a;color:#e5e5e5;border-color:#333 }[data-theme="dark"] .rank-block-title,[data-theme="dark"] .card-title,[data-theme="dark"] .rank-name,[data-theme="dark"] .modal-hdr { color:#e5e5e5 }[data-theme="dark"] .card-meta,[data-theme="dark"] .rank-cnt,[data-theme="dark"] .info-bar { color:#999 }[data-theme="dark"] .rank-tab,[data-theme="dark"] .tab { background:#333;color:#999 }[data-theme="dark"] .rank-tab.active,[data-theme="dark"] .tab.active { background:#409eff;color:#fff }[data-theme="dark"] .site-footer { background:#1a1a1a;border-color:#333;color:#999 }[data-theme="dark"] .rank-block-ftr { border-color:#333;color:#666 }[data-theme="dark"] .rank-idx { background:#333;color:#999 }[data-theme="dark"] .theme-btn { position:fixed;bottom:20px;right:20px;z-index:99;width:40px;height:40px;border-radius:50%;border:1px solid #555;background:#1f1f1f;font-size:18px;cursor:pointer;display:flex;align-items:center;justify-content:center;box-shadow:0 2px 8px rgba(0,0,0,.3) } - /* ===== Reset & Base ===== */ - *,*::before,*::after{box-sizing:border-box;margin:0;padding:0} - html{font-size:16px;-webkit-text-size-adjust:100%} - body{font-family:-apple-system,BlinkMacSystemFont,"Segoe UI","PingFang SC","Hiragino Sans GB","Microsoft YaHei",sans-serif;background:#f5f5f5;color:#303133;min-height:100vh;overflow-x:hidden} - :root{--primary:#409eff;--primary-dark:#337ecc;--primary-light:rgba(64,158,255,0.08);--text:#303133;--text2:#909399;--border:#ebeef5;--bg:#f5f5f5;--white:#fff;--radius:10px;--shadow:0 1px 4px rgba(0,0,0,0.04);--safe-bottom:env(safe-area-inset-bottom,0px)} - a{color:var(--primary);text-decoration:none} - img{display:block;max-width:100%} - - /* ===== Home Page ===== */ - .home-page{padding-bottom:calc(30px + var(--safe-bottom))} - .home-hero{display:flex;flex-direction:column;align-items:center;padding:36px 16px 20px} - .home-logo{font-size:32px;font-weight:700;color:var(--primary);margin-bottom:20px;text-align:center} - .home-logo-img{max-width:360px;max-height:80px;width:auto;height:auto;object-fit:contain} - .home-search-box{display:flex;width:100%;max-width:500px;border:1px solid var(--border);border-radius:20px;overflow:hidden;background:var(--bg);transition:border-color .2s} - .home-search-box:focus-within{border-color:var(--primary);background:var(--white);box-shadow:0 0 0 3px rgba(64,158,255,.1)} - .home-search-box input{flex:1;height:40px;border:none;padding:0 14px;font-size:14px;outline:none;background:transparent} - .home-search-box button{flex-shrink:0;height:32px;margin:4px;padding:0 22px;border:none;border-radius:999px;background:var(--primary);color:var(--white);font-size:13px;font-weight:600;cursor:pointer} - .home-search-box button:active{background:var(--primary-dark)} - .home-quote{margin-top:12px;font-size:12px;color:#b0b8c4;font-style:italic;text-align:center;max-width:500px;line-height:1.5} - .home-quote-author{font-size:11px;color:#c0c4cc;display:inline-block;margin-top:2px} - - /* ===== Home Rankings ===== */ - .home-rankings{padding:8px 12px;display:flex;flex-direction:column;gap:10px} - .rank-block{background:var(--white);border-radius:var(--radius);padding:12px;border:1px solid var(--border);box-shadow:var(--shadow)} - .rank-block-hdr{display:flex;align-items:center;justify-content:space-between;padding-bottom:8px;border-bottom:2px solid #f0f0f0;margin-bottom:4px} - .rank-block-title{font-size:14px;font-weight:700;color:var(--text);white-space:nowrap} - .rank-block-tabs{display:flex;gap:2px;background:#f0f2f5;border-radius:5px;padding:2px} - .rank-tab{font-size:11px;padding:2px 9px;border-radius:4px;cursor:pointer;color:#909399;font-weight:500;transition:all .2s;user-select:none} - .rank-tab.active{background:var(--white);color:var(--primary);font-weight:600;box-shadow:0 1px 2px rgba(0,0,0,.06)} - .rank-item{display:flex;align-items:center;gap:7px;padding:5px 6px;border-radius:6px;cursor:pointer;transition:background .15s} - .rank-item:active{background:#f0f5ff} - .rank-idx{width:20px;height:20px;border-radius:50%;display:flex;align-items:center;justify-content:center;font-size:11px;font-weight:700;color:#909399;background:#f0f0f0;flex-shrink:0} - .rank-idx.top3{background:var(--primary);color:var(--white);font-size:12px} - .rank-name{flex:1;min-width:0;font-size:13px;font-weight:500;color:var(--text);overflow:hidden;text-overflow:ellipsis;white-space:nowrap} - .rank-cnt{font-size:11px;color:#c0c4cc;white-space:nowrap;flex-shrink:0} - .rank-expand{text-align:center;padding:5px;margin-top:2px;font-size:12px;color:var(--primary);cursor:pointer;border-radius:5px;user-select:none} - .rank-expand:active{background:#ecf5ff} - .rank-block-ftr{margin-top:6px;padding-top:6px;border-top:1px solid #f0f0f0;display:flex;align-items:center;justify-content:space-between;font-size:10px;color:#c0c4cc} - .ftr-time{font-family:monospace;font-size:9px} - - /* ===== Layout ===== */ - .app{max-width:100%;margin:0 auto;padding-bottom:calc(20px + var(--safe-bottom))} - .header{position:sticky;top:0;z-index:50;background:var(--white);border-bottom:1px solid var(--border);padding:8px 12px} - .header-row{display:flex;align-items:center;gap:10px} - .header-title{font-size:18px;font-weight:700;color:var(--primary);flex-shrink:0} - .header-title-link{text-decoration:none;flex-shrink:0;display:flex;align-items:center} - .header-logo-img{max-width:120px;max-height:28px;width:auto;height:auto;object-fit:contain;display:block} - .header-actions{margin-left:auto;display:flex;gap:6px;align-items:center} - - /* ===== Search Bar ===== */ - .search-wrap{flex:1;display:flex;border:1px solid var(--border);border-radius:18px;overflow:hidden;background:var(--bg);transition:border-color .2s} - .search-wrap:focus-within{border-color:var(--primary);background:var(--white)} - .search-wrap input{flex:1;height:36px;border:none;padding:0 14px;font-size:14px;outline:none;background:transparent} - .search-wrap button{flex-shrink:0;height:28px;margin:4px;padding:0 18px;border:none;border-radius:999px;background:var(--primary);color:var(--white);font-size:13px;font-weight:600;cursor:pointer;transition:background .2s} - .search-wrap button:active{background:var(--primary-dark)} - .search-wrap button:disabled{opacity:.5} - - /* ===== Footer ===== */ - .site-footer{margin-top:30px;padding:16px 12px 24px;background:#f9fafb;border-top:1px solid var(--border)} - .footer-inner{max-width:500px;margin:0 auto;font-size:11px;line-height:1.8;color:#909399;text-align:center;white-space:pre-line} - .footer-actions{display:flex;justify-content:center;gap:10px;margin-top:12px;flex-wrap:wrap} - .footer-btn{padding:8px 20px;border:1px solid var(--border);border-radius:8px;background:var(--white);color:var(--text);font-size:13px;cursor:pointer;transition:all .2s} - .footer-btn:active{background:var(--primary-light);border-color:var(--primary);color:var(--primary)} - - /* ===== Info Bar ===== */ - .info-bar{display:flex;align-items:center;gap:8px;padding:10px 12px 0;font-size:12px;color:var(--text2);flex-wrap:wrap} - .info-bar .count{font-weight:600;color:var(--text)} - .info-bar .time{font-family:monospace;background:#f4f4f5;padding:1px 6px;border-radius:4px} - .info-bar .badge-err{background:#fef0f0;color:#f56c6c;padding:1px 6px;border-radius:4px} - - /* ===== Loading ===== */ - .loading{padding:24px 12px;text-align:center;font-size:13px;color:var(--text2)} - .loading-bar{width:100%;height:3px;background:#e8e8e8;border-radius:2px;overflow:hidden;margin-top:8px} - .loading-bar-inner{height:100%;background:linear-gradient(90deg,var(--primary),#67c23a);border-radius:2px;transition:width .3s ease;width:0%} - - /* ===== Tabs ===== */ - .tabs{display:flex;gap:4px;padding:8px 12px;overflow-x:auto;-webkit-overflow-scrolling:touch;scrollbar-width:none} - .tabs::-webkit-scrollbar{display:none} - .tab{flex-shrink:0;padding:5px 12px;border-radius:16px;font-size:12px;color:#606266;background:#f0f2f5;cursor:pointer;white-space:nowrap;transition:all .2s;user-select:none} - .tab:active{transform:scale(.95)} - .tab.active{background:var(--primary-light);color:var(--primary);font-weight:600} - - /* ===== Results ===== */ - .results{display:flex;flex-direction:column;gap:10px;padding:8px 12px} - .empty{padding:40px 12px;text-align:center;color:var(--text2);font-size:14px} - - /* ===== Card ===== */ - .card{display:flex;gap:10px;background:var(--white);border-radius:var(--radius);padding:10px;border:1px solid var(--border);transition:border-color .2s} - .card:active{border-color:#c0c4cc} - .card-cover{flex-shrink:0;width:90px;height:120px;border-radius:8px;overflow:hidden;background:var(--bg);position:relative} - .card-cover img{width:100%;height:100%;object-fit:cover} - .card-cover .placeholder{width:100%;height:100%;display:flex;align-items:center;justify-content:center;font-size:28px;background:linear-gradient(135deg,#667eea,#764ba2);color:rgba(255,255,255,.6)} - .card-cover .tag{position:absolute;bottom:3px;left:3px;padding:1px 5px;border-radius:3px;color:#fff;font-size:10px;font-weight:600;backdrop-filter:blur(2px)} - .card-body{flex:1;min-width:0;display:flex;flex-direction:column;gap:4px} - .card-title{font-size:14px;font-weight:700;color:var(--text);line-height:1.3;display:-webkit-box;-webkit-line-clamp:1;-webkit-box-orient:vertical;overflow:hidden} - .card-meta{font-size:11px;color:var(--text2);display:flex;align-items:center;gap:8px} - .card-meta .size{color:#67c23a} - .card-tags{display:flex;flex-wrap:wrap;gap:4px;margin-top:2px} - .card-tags span{font-size:10px;padding:1px 6px;border-radius:4px;background:#ecf5ff;color:#409eff;white-space:nowrap} - .card-tags .quality{background:#fef0f0;color:#e74c3c} - .card-actions{margin-top:auto;display:flex;align-items:center;justify-content:space-between;gap:6px} - .card-source{font-size:10px;color:var(--text2);background:#f4f4f5;padding:1px 6px;border-radius:4px;white-space:nowrap;overflow:hidden;text-overflow:ellipsis;max-width:120px} - .card-btn{padding:4px 10px;border:none;border-radius:6px;background:var(--primary);color:var(--white);font-size:12px;font-weight:600;cursor:pointer;white-space:nowrap;transition:background .2s} - .card-btn:active{background:var(--primary-dark)} - .card-btn:disabled{opacity:.5} - - /* ===== Toast ===== */ - .toast{position:fixed;top:50%;left:50%;transform:translate(-50%,-50%);background:rgba(0,0,0,.75);color:#fff;padding:10px 20px;border-radius:8px;font-size:14px;z-index:200;pointer-events:none;opacity:0;transition:opacity .3s} - .toast.show{opacity:1} - .toast.error{background:rgba(245,108,108,.9)} - - /* ===== Overlay / Modal ===== */ - .overlay{position:fixed;inset:0;z-index:100;background:rgba(0,0,0,.5);display:flex;align-items:center;justify-content:center;padding:16px;animation:fadeIn .2s} - .modal{background:var(--white);border-radius:14px;width:100%;max-width:420px;max-height:90vh;overflow-y:auto;padding:0;animation:slideUp .25s} - .modal-hdr{padding:14px 16px;border-bottom:1px solid var(--border);font-size:15px;font-weight:700;color:var(--text)} - .modal-body{padding:14px 16px} - .modal-ftr{padding:10px 16px;border-top:1px solid var(--border);display:flex;gap:8px;justify-content:flex-end} - .modal-ftr button{height:36px;padding:0 16px;border:none;border-radius:8px;font-size:13px;font-weight:600;cursor:pointer} - .modal-ftr .btn-close{background:#f4f4f5;color:#606266} - .modal-ftr .btn-disclaimer{background:#fdf6ec;color:#d46b08;margin-right:auto} - .modal-ftr .btn-primary{background:var(--primary);color:var(--white)} - .modal-ftr .btn-primary:active{background:var(--primary-dark)} - @keyframes fadeIn{from{opacity:0}to{opacity:1}} - @keyframes slideUp{from{transform:translateY(40px);opacity:0}to{transform:translateY(0);opacity:1}} - - /* ===== Share Modal ===== */ - .share-section{display:flex;flex-direction:column;gap:10px} - .share-row{display:flex;gap:8px} - .share-row input{flex:1;height:36px;border:1px solid var(--border);border-radius:6px;padding:0 10px;font-size:13px;outline:none;background:var(--bg);color:var(--text)} - .share-row input:focus{border-color:var(--primary)} - .share-row .copy-btn{height:36px;padding:0 12px;border:none;border-radius:6px;background:var(--primary);color:var(--white);font-size:12px;font-weight:600;cursor:pointer;white-space:nowrap} - .share-pwd{display:flex;align-items:center;gap:6px;font-size:13px} - .share-pwd .pwd-tag{padding:2px 8px;background:#fdf6ec;color:#e6a23c;border-radius:4px;font-weight:700} - .share-pwd .pwd-hint{font-size:11px;color:var(--text2)} - .share-tip{padding:8px 10px;background:#fdf6ec;border-radius:6px;font-size:12px;line-height:1.5;color:#d46b08;display:flex;gap:6px;align-items:flex-start} - .share-tip .warn-icon{font-size:18px;line-height:1.5;flex-shrink:0} - .share-tip .tip-text{flex:1;min-width:0} - .share-tip strong{font-weight:700} - .warning-box{background:#fff2f0;border:1px solid #ffccc7;border-radius:8px;padding:8px 10px;overflow-x:auto;-webkit-overflow-scrolling:touch} - .warning-item{margin:0;font-size:12px;line-height:1.8;font-weight:700;white-space:nowrap} - .warning-item:nth-child(odd){color:#cf1322} - .warning-item:nth-child(even){color:#d46b08} - .warning-item:last-child{color:#b71c1c;font-size:13px} - .share-qr{display:flex;flex-direction:column;align-items:center;gap:4px;padding:8px} - .share-qr canvas{border-radius:8px} - .share-qr .qr-label{font-size:12px;font-weight:600;color:var(--primary)} - .share-qr .qr-sub{font-size:11px;color:var(--text2)} - .share-disclaimer{display:flex;align-items:center;justify-content:center;gap:8px;margin-top:10px;padding:8px 10px;background:#fdf6ec;border-radius:6px;font-size:12px;color:#d46b08;flex-wrap:wrap} - - /* ===== Login Modal ===== */ - .login-form{display:flex;flex-direction:column;gap:12px} - .login-form input{height:40px;border:1px solid var(--border);border-radius:8px;padding:0 12px;font-size:14px;outline:none} - .login-form input:focus{border-color:var(--primary)} - .login-form .login-btn{height:40px;border:none;border-radius:8px;background:var(--primary);color:var(--white);font-size:14px;font-weight:600;cursor:pointer;transition:background .2s} - .login-form .login-btn:active{background:var(--primary-dark)} - .login-form .login-btn:disabled{opacity:.5} - .login-form .login-err{font-size:12px;color:#f56c6c;text-align:center} - - /* ===== Progress Steps ===== */ - .steps{display:flex;flex-direction:column;gap:10px;padding:8px 0} - .step{display:flex;align-items:flex-start;gap:10px;opacity:.4;transition:opacity .3s} - .step.active{opacity:1} - .step.done{opacity:.7} - .step-dot{flex-shrink:0;width:26px;height:26px;border-radius:50%;display:flex;align-items:center;justify-content:center;font-size:12px;font-weight:700;background:#e4e7ed;color:#909399} - .step.active .step-dot{background:var(--primary);color:#fff;box-shadow:0 0 0 3px rgba(64,158,255,.2)} - .step.done .step-dot{background:#67c23a;color:#fff} - .step-body{flex:1;padding-top:3px;display:flex;align-items:center;gap:8px} - .step-title{font-size:13px;color:var(--text);font-weight:500} - .step-status{font-size:11px;padding:1px 7px;border-radius:10px;white-space:nowrap} - .step-status.doing{background:#ecf5ff;color:var(--primary)} - .step-status.done{background:#f0f9eb;color:#67c23a} - .step-status.wait{background:#f4f4f5;color:#c0c4cc} - .error-alert{padding:12px 16px;background:#fef0f0;border:1px solid #fde2e2;border-radius:8px;display:flex;align-items:center;gap:8px;font-size:14px;color:#f56c6c} - - /* ===== User Badge ===== */ - .user-badge{font-size:12px;color:var(--primary);font-weight:600;white-space:nowrap} - .login-btn-small{height:30px;padding:0 10px;border:none;border-radius:6px;background:var(--primary-light);color:var(--primary);font-size:12px;font-weight:600;cursor:pointer} - .logout-btn-small{height:30px;padding:0 8px;border:none;border-radius:6px;background:transparent;color:var(--text2);font-size:12px;cursor:pointer} diff --git a/source_clean/frontend-src/index.html b/source_clean/frontend-src/index.html index df2713e..af521c5 100755 --- a/source_clean/frontend-src/index.html +++ b/source_clean/frontend-src/index.html @@ -2,23 +2,17 @@ - + + + + CloudSearch - 网盘资源搜索 @@ -26,4 +20,4 @@
- + \ No newline at end of file diff --git a/source_clean/frontend-src/public/h5/index.html b/source_clean/frontend-src/public/h5/index.html deleted file mode 100755 index fc7dd86..0000000 --- a/source_clean/frontend-src/public/h5/index.html +++ /dev/null @@ -1,923 +0,0 @@ - - - - - - - - - CloudSearch - 搜索 - - - - - -
- -
-
- - -
-
-
-
-
- - - -
- - -
- - - - - - diff --git a/source_clean/frontend-src/src/App.vue b/source_clean/frontend-src/src/App.vue index fa8b9eb..c4087eb 100755 --- a/source_clean/frontend-src/src/App.vue +++ b/source_clean/frontend-src/src/App.vue @@ -1,28 +1,8 @@ diff --git a/source_clean/frontend-src/src/pages/HomePage.vue b/source_clean/frontend-src/src/pages/HomePage.vue index d00cd19..800f477 100755 --- a/source_clean/frontend-src/src/pages/HomePage.vue +++ b/source_clean/frontend-src/src/pages/HomePage.vue @@ -6,354 +6,117 @@
{{ siteName || 'CloudSearch' }}
-
- 「 {{ currentQuote }} 」 - ---{{ quoteAuthor }} +
「 {{ currentQuote }} 」 ---{{ quoteAuthor }}
+
+ +
+

大家都在搜

+
+ {{ w.k }}
-
-
-
-
- {{ getCategoryIcon(cat.category) }} {{ cat.label }} -
- 热榜 - 最新 -
-
-
-
- {{ idx + 1 }} - {{ item.keyword }} - {{ formatCount(item) }} -
- -
- 展开全部 ▼ -
-
- -
-
-
+

搜索脉搏采集中...

+ + \ No newline at end of file diff --git a/source_clean/frontend-src/src/pages/SearchResult.vue b/source_clean/frontend-src/src/pages/SearchResult.vue index f2f0965..046c8a7 100755 --- a/source_clean/frontend-src/src/pages/SearchResult.vue +++ b/source_clean/frontend-src/src/pages/SearchResult.vue @@ -28,14 +28,6 @@ 搜 索 - -
- - 登录 -
@@ -151,7 +143,7 @@ :data="item" :fallbackTags="contentTags" :fallbackImage="fallbackImage" - :loggedIn="userInfo !== null" + :loggedIn="false" :cloudTypeMap="cloudTypeMap" @save="handleSave" /> @@ -183,7 +175,7 @@ :data="item" :fallbackTags="contentTags" :fallbackImage="fallbackImage" - :loggedIn="userInfo !== null" + :loggedIn="false" :cloudTypeMap="cloudTypeMap" @save="handleSave" /> @@ -346,21 +338,6 @@ - - - - - - - - - - - 登录 - - - -