|
|
import{C as e,D as t,E as n,G as r,S as i,T as a,X as o,Y as s,at as c,b as l,f as u,ht as d,m as f,ot as ee,q as p,rt as m,tn as h,x as g,y as _}from"./vue.runtime.esm-bundler-DUiYyeqQ.js";import{l as v,o as y,s as b}from"./index-D5QQi6lz.js";import{n as te,t as x}from"./usePageLoad-BczwAjn_.js";import{a as S,d as C,f as w}from"./assets-DB74Zz-k.js";import{a as T}from"./dict-C6T6FUwl.js";var ne={class:`list-page`},re={class:`page-header`},E={key:0,class:`crawl-resolve-hint`},ie={key:1,class:`crawl-resolve-hint`},ae={key:0},oe={key:1},se={key:2},ce={key:1,class:`result-actions`},le=[`href`],D=b(t({__name:`index`,setup(t){let b=y(),D=d(!1),O=d(!1),k=d(null),A=d(null),j=d(null),M=null,N=d(!1),P=d(`paper`),F=d([]),I=d([]),L=d([]),R=d(!1),z=d([]),B=d({target_type:`paper`,request_url:`https://arxiv.org/`,params:{}}),V={paper:[{key:`keyword`,type:`textarea`,label:`搜索关键词(选填)`,required:!1,placeholder:`多个关键词用逗号或换行分隔,如:graph neural, AI`},{key:`max_results`,type:`number`,label:`条数上限`,default:20,min:1,max:50}],industry_news:[{key:`keyword`,type:`textarea`,label:`搜索关键词(选填)`,required:!1,placeholder:`多个关键词用空格、逗号或换行分隔,如:融资 科创板 AI`},{key:`max_pages`,type:`number`,label:`抓取页数`,default:5,min:1,max:50},{key:`max_results`,type:`number`,label:`条数上限`,default:30,min:1,max:50}]},H=d([]),U=_(()=>B.value.target_type===`teacher`?L.value:P.value===`teacher_lead`?I.value:F.value),ue=_(()=>B.value.target_type===`teacher`?H.value.filter(e=>e.key!==`keyword`&&e.key!==`max_results`&&e.key!==`max_pages`):[]);function W(e){return e===`paper`||e===`industry_news`?V[e]:[]}function G(e,t=!0){let n=W(e);if(n.length===0)return;H.value=n;let r=t?{...B.value.params}:{};if(Y(n),t)for(let e of n)r[e.key]!==void 0&&(B.value.params[e.key]=r[e.key])}function K(){B.value.target_type===`teacher`&&(B.value.params.keyword===void 0&&(B.value.params.keyword=``),B.value.params.max_results===void 0&&(B.value.params.max_results=200),B.value.params.max_pages===void 0&&(B.value.params.max_pages=5))}function de(){B.value.target_type===`industry_news`&&(B.value.params.keyword===void 0&&(B.value.params.keyword=``),B.value.params.max_pages===void 0&&(B.value.params.max_pages=5),B.value.params.max_results===void 0&&(B.value.params.max_results=30))}function fe(e){(e===`paper`||e===`industry_news`)&&(G(e,!0),e===`industry_news`&&de())}function q(e){if(!e)return`—`;let t=e.match(/^(\d{4}-\d{2}-\d{2})/);return t?t[1]:e}function J(e){return!!(e.lead_author_university?.trim()||e.school_name?.trim())}function pe(e){return[...e].sort((e,t)=>{let n=J(e);return n===J(t)?(e.lead_author_name||``).localeCompare(t.lead_author_name||``,`zh-CN`):n?-1:1})}function Y(e){let t={};for(let n of e)n.type===`checkbox`?t[n.key]=Array.isArray(n.default)?[...n.default]:[]:n.type===`number`?t[n.key]=n.default??20:t[n.key]=n.default??``;B.value.params=t}function X(e){return e===`paper`?`https://arxiv.org/`:e===`teacher`?`https://`:`https://www.pedaily.cn/all/`}function Z(e){let t=e.trim();return t&&!/^https?:\/\//i.test(t)?`https://${t}`:t}function Q(){k.value=null,N.value=!1,F.value=[],I.value=[],L.value=[]}function me(){Q(),P.value=`paper`,D.value=!1,B.value={target_type:`paper`,request_url:X(`paper`),params:{}},A.value=null,j.value=null,H.value=[],fe(`paper`),$()}async function $(){if(M)return M;M=(async()=>{if(!B.value.request_url){A.value=null,j.value=null;return}let e=Z(B.value.request_url);e!==B.value.request_url&&(B.value.request_url=e);let t=B.value.target_type;(t===`paper`||t===`industry_news`)&&G(t,!0),O.value=!0;try{A.value=await C({request_url:B.value.request_url,target_type:t}),j.value=B.value.request_url,t===`teacher`?(H.value=A.value.param_schema?.fields??[],Y(H.value),K()):G(t,!0)}catch{A.value=null,j.value=null,t===`teacher`?H.value=[]:G(t,!0)}finally{O.value=!1}})();try{await M}finally{M=null}}async function he(){if(!B.value.request_url.trim())return v.warning(`请填写目标地址`),!1;let e=Z(B.value.request_url);return e!==B.value.request_url&&(B.value.request_url=e),(!A.value||j.value!==B.value.request_url)&&await $(),!!A.value}async function ge(){await $()}m(()=>B.value.target_type,e=>{Q(),A.value=null,j.value=null,H.value=[],B.value.request_url=X(e),e===`teacher`?K():(e===`paper`||e===`industry_news`)&&G(e,!1),$()});async function _e(){if(!await he()){v.warning(`无法识别该地址,请检查入库类型与 URL 是否可访问(需为 http/https 列表或详情页)`);return}D.value=!0;try{k.value=await w({target_type:B.value.target_type,request_url:B.value.request_url,params:B.value.params}),v.success(k.value.result_summary||`抓取完成,已入库 ${k.value.items_imported??0} 条`)}finally{D.value=!1}}async function ve(){if(!(z.value.length>0))try{z.value=(await T(`news_category`)).items.map(e=>({id:e.id,label:e.label}))}catch{v.warning(`资讯分类加载失败`)}}async function ye(){if(k.value?.id){R.value=!0,N.value=!0,P.value=B.value.target_type===`teacher`?`teacher`:`paper`;try{B.value.target_type===`industry_news`&&await ve();let e=k.value.id;if(B.value.target_type===`paper`){let[t,n]=await Promise.all([S(e,{item_kind:`paper`}),S(e,{item_kind:`teacher_lead`})]);F.value=t,I.value=pe(n)}else B.value.target_type===`teacher`?L.value=await S(e,{item_kind:`teacher`}):F.value=await S(e)}finally{R.value=!1}}}function be(){k.value?.id&&(B.value.target_type===`paper`?b.push({path:`/papers`,query:{crawl_job_id:String(k.value.id)}}):B.value.target_type===`teacher`?b.push({path:`/teachers`}):b.push({path:`/news`,query:{crawl_job_id:String(k.value.id)}}))}let xe=()=>k.value?.status===`completed`&&(k.value.items_fetched??0)>0;return x(me),(t,d)=>{let m=s(`el-radio`),_=s(`el-radio-group`),v=s(`el-form-item`),y=s(`el-input`),b=s(`el-input-number`),x=s(`el-checkbox`),S=s(`el-checkbox-group`),C=s(`el-button`),w=s(`el-form`),T=s(`el-alert`),j=s(`el-card`),M=s(`el-tab-pane`),L=s(`el-tabs`),z=s(`el-table-column`),V=s(`el-tag`),H=s(`el-table`),W=s(`el-dialog`),G=o(`loading`);return r(),e(`div`,ne,[l(`div`,re,[n(te)]),n(j,{shadow:`never`,class:`admin-list-card`},{default:c(()=>[n(w,{"label-position":`top`,class:`crawler-form`,onSubmit:u(_e,[`prevent`])},{default:c(()=>[n(v,{label:`入库类型`,required:``},{default:c(()=>[n(_,{modelValue:B.value.target_type,"onUpdate:modelValue":d[0]||=e=>B.value.target_type=e},{default:c(()=>[n(m,{label:`paper`},{default:c(()=>[...d[12]||=[a(`论文 → 论文库`,-1)]]),_:1}),n(m,{label:`industry_news`},{default:c(()=>[...d[13]||=[a(`行业资讯 → 资讯管理`,-1)]]),_:1}),n(m,{label:`teacher`},{default:c(()=>[...d[14]||=[a(`老师库 → 老师库`,-1)]]),_:1})]),_:1},8,[`modelValue`])]),_:1}),n(v,{label:`目标地址`,required:``},{default:c(()=>[n(y,{modelValue:B.value.request_url,"onUpdate:modelValue":d[1]||=e=>B.value.request_url=e,type:`url`,placeholder:`https:// 资讯/论文列表页或单篇详情页`,onBlur:ge},null,8,[`modelValue`]),O.value?(r(),e(`p`,E,`正在识别采集源…`)):A.value?.source_name?(r(),e(`p`,ie,` 已识别采集源:`+h(A.value.source_name),1)):i(``,!0)]),_:1}),B.value.target_type===`paper`||B.value.target_type===`industry_news`?(r(),e(f,{key:0},[n(v,{label:`搜索关键词(选填)`},{default:c(()=>[n(y,{modelValue:B.value.params.keyword,"onUpdate:modelValue":d[2]||=e=>B.value.params.keyword=e,type:`textarea`,rows:2,placeholder:B.value.target_type===`paper`?`多个关键词用逗号或换行分隔,如:graph neural, AI`:`多个关键词用空格、逗号或换行分隔,如:融资 科创板 AI`},null,8,[`modelValue`,`placeholder`])]),_:1}),B.value.target_type===`industry_news`?(r(),g(v,{key:0,label:`抓取页数`},{default:c(()=>[n(b,{modelValue:B.value.params.max_pages,"onUpdate:modelValue":d[3]||=e=>B.value.params.max_pages=e,min:1,max:50},null,8,[`modelValue`])]),_:1})):i(``,!0),n(v,{label:`条数上限`},{default:c(()=>[n(b,{modelValue:B.value.params.max_results,"onUpdate:modelValue":d[4]||=e=>B.value.params.max_results=e,min:1,max:50},null,8,[`modelValue`])]),_:1})],64)):i(``,!0),B.value.target_type===`teacher`?(r(),e(f,{key:1},[n(v,{label:`搜索关键词(选填)`},{default:c(()=>[n(y,{modelValue:B.value.params.keyword,"onUpdate:modelValue":d[5]||=e=>B.value.params.keyword=e,type:`textarea`,rows:2,placeholder:`多个关键词用空格、逗号或换行分隔`},null,8,[`modelValue`])]),_:1}),n(v,{label:`抓取页数`},{default:c(()=>[n(b,{modelValue:B.value.params.max_pages,"onUpdate:modelValue":d[6]||=e=>B.value.params.max_pages=e,min:1,max:50},null,8,[`modelValue`])]),_:1}),n(v,{label:`条数上限`},{default:c(()=>[n(b,{modelValue:B.value.params.max_results,"onUpdate:modelValue":d[7]||=e=>B.value.params.max_results=e,min:1,max:500},null,8,[`modelValue`])]),_:1})],64)):i(``,!0),(r(!0),e(f,null,p(ue.value,t=>(r(),g(v,{key:t.key,label:t.label,required:t.required},{default:c(()=>[t.type===`checkbox`?(r(),g(S,{key:0,modelValue:B.value.params[t.key],"onUpdate:modelValue":e=>B.value.params[t.key]=e},{default:c(()=>[(r(!0),e(f,null,p(t.options,e=>(r(),g(x,{key:e,value:e},{default:c(()=>[a(h(e),1)]),_:2},1032,[`value`]))),128))]),_:2},1032,[`modelValue`,`onUpdate:modelValue`])):t.type===`number`?(r(),g(b,{key:1,modelValue:B.value.params[t.key],"onUpdate:modelValue":e=>B.value.params[t.key]=e,min:t.min??1,max:t.max??50},null,8,[`modelValue`,`onUpdate:modelValue`,`min`,`max`])):t.type===`textarea`?(r(),g(y,{key:2,modelValue:B.value.params[t.key],"onUpdate:modelValue":e=>B.value.params[t.key]=e,type:`textarea`,rows:3,placeholder:t.placeholder},null,8,[`modelValue`,`onUpdate:modelValue`,`placeholder`])):(r(),g(y,{key:3,modelValue:B.value.params[t.key],"onUpdate:modelValue":e=>B.value.params[t.key]=e,placeholder:t.placeholder},null,8,[`modelValue`,`onUpdate:modelValue`,`placeholder`]))]),_:2},1032,[`label`,`required`]))),128)),n(C,{type:`primary`,"native-type":`submit`,loading:D.value},{default:c(()=>[...d[15]||=[a(` 手动抓取 `,-1)]]),_:1},8,[`loading`])]),_:1}),k.value?(r(),g(T,{key:0,class:`result-alert`,type:`success`,closable:!1,"show-icon":``},{default:c(()=>[l(`p`,null,`地址:`+h(k.value.request_url||k.value.platform_url),1),k.value.source_name?(r(),e(`p`,ae,`采集源:`+h(k.value.source_name),1)):i(``,!0),l(`p`,null,`状态:`+h(k.value.status===`completed`?`已完成`:k.value.status),1),k.value.result_summary?(r(),e(`p`,oe,h(k.value.result_summary),1)):i(``,!0),k.value.items_imported==null?i(``,!0):(r(),e(`p`,se,`已入库 `+h(k.value.items_imported)+` 条`,1))]),_:1})):i(``,!0),k.value?(r(),e(`div`,ce,[xe()?(r(),g(C,{key:0,type:`primary`,onClick:ye},{default:c(()=>[a(` 查看抓取内容(`+h(k.value.items_fetched)+` 条) `,1)]),_:1})):i(``,!0),n(C,{onClick:be},{default:c(()=>[...d[16]||=[a(`在库中查看已入库`,-1)]]),_:1})])):i(``,!0)]),_:1}),n(W,{modelValue:N.value,"onUpdate:modelValue":d[11]||=e=>N.value=e,title:`本次抓取结果`,width:`960px`,"destroy-on-close":``},{footer:c(()=>[n(C,{type:`primary`,onClick:d[10]||=e=>N.value=!1},{default:c(()=>[...d[20]||=[a(`关闭`,-1)]]),_:1})]),default:c(()=>[B.value.target_type===`paper`?(r(),g(L,{key:0,modelValue:P.value,"onUpdate:modelValue":d[8]||=e=>P.value=e,class:`preview-tabs`},{default:c(()=>[n(M,{label:`论文(${F.value.length})`,name:`paper`},null,8,[`label`]),n(M,{label:`入库老师(${I.value.length})`,name:`teacher_lead`},null,8,[`label`])]),_:1},8,[`modelValue`])):i(``,!0),ee((r(),g(H,{data:U.value,"row-key":`id`,size:`small`},{default:c(()=>[B.value.target_type===`paper`&&P.value===`paper`?(r(),e(f,{key:0},[n(z,{prop:`title`,label:`论文标题`,"min-width":`200`,"show-overflow-tooltip":``}),n(z,{prop:`authors`,label:`作者`,width:`120`,"show-overflow-tooltip":``}),n(z,{label:`发表日期`,width:`110`},{default:c(({row:e})=>[a(h(q(e.published_at)),1)]),_:1}),n(z,{prop:`school_name`,label:`学校`,width:`120`,"show-overflow-tooltip":``})],64)):B.value.target_type===`paper`&&P.value===`teacher_lead`?(r(),e(f,{key:1},[n(z,{prop:`lead_author_name`,label:`姓名`,width:`100`}),n(z,{prop:`lead_author_email`,label:`邮箱`,width:`160`,"show-overflow-tooltip":``}),n(z,{prop:`lead_author_university`,label:`学校`,width:`160`,"show-overflow-tooltip":``},{default:c(({row:e})=>[a(h(e.lead_author_university||e.school_name||`—`),1)]),_:1}),n(z,{prop:`paper_title`,label:`来源论文`,"min-width":`200`,"show-overflow-tooltip":``})],64)):B.value.target_type===`teacher`?(r(),e(f,{key:2},[n(z,{prop:`title`,label:`姓名`,width:`96`}),n(z,{label:`职称`,width:`88`,"show-overflow-tooltip":``},{default:c(({row:e})=>[a(h(e.lead_author_academic_title||`—`),1)]),_:1}),n(z,{prop:`lead_author_university`,label:`高校`,width:`140`,"show-overflow-tooltip":``},{default:c(({row:e})=>[a(h(e.lead_author_university||e.school_name||`—`),1)]),_:1}),n(z,{prop:`lead_author_email`,label:`邮箱`,width:`150`,"show-overflow-tooltip":``}),n(z,{prop:`summary`,label:`简介`,"min-width":`160`,"show-overflow-tooltip":``})],64)):(r(),e(f,{key:3},[n(z,{prop:`title`,label:`标题`,"min-width":`200`,"show-overflow-tooltip":``}),n(z,{prop:`source_name`,label:`采集源`,width:`120`,"show-overflow-tooltip":``}),n(z,{prop:`category_label`,label:`匹配分类`,width:`120`,"show-overflow-tooltip":``},{default:c(({row:e})=>[a(h(e.category_label||`—`),1)]),_:1}),n(z,{label:`发布时间`,width:`110`},{default:c(({row:e})=>[a(h(q(e.published_at)),1)]),_:1})],64)),n(z,{label:`状态`,width:`88`},{default:c(({row:e})=>[e.is_duplicate?(r(),g(V,{key:0,type:`info`,size:`small`},{default:c(()=>[...d[17]||=[a(`已存在`,-1)]]),_:1})):e.status===`imported`?(r(),g(V,{key:1,type:`success`,size:`small`},{default:c(()=>[...d[18]||=[a(`已入库`,-1)]]),_:1})):(r(),g(V,{key:2,type:`warning`,size:`small`},{default:c(()=>[...d[19]||=[a(`待入库`,-1)]]),_:1}))]),_:1}),n(z,{label:`链接`,width:`64`},{default:c(({row:t})=>[t.url?(r(),e(`a`,{key:0,href:t.url,target:`_blank`,rel:`noopener`,onClick:d[9]||=u(()=>{},[`stop`])},`查看`,8,le)):i(``,!0)]),_:1})]),_:1},8,[`data`])),[[G,R.value]])]),_:1},8,[`modelValue`])])}}}),[[`__scopeId`,`data-v-1e9d295b`]]);export{D as default}; |