You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

1 line
18 KiB

This file contains ambiguous Unicode characters!

This file contains ambiguous Unicode characters that may be confused with others in your current locale. If your use case is intentional and legitimate, you can safely ignore this warning. Use the Escape button to highlight these characters.

import{C as e,D as t,E as n,G as r,S as i,T as a,X as ee,Y as o,at as s,b as c,f as te,ht as l,m as u,ot as ne,q as d,rt as f,tn as p,x as m,y as h}from"./vue.runtime.esm-bundler-DUiYyeqQ.js";import{l as g,o as _,s as v}from"./index-CgtDRRqt.js";import{t as y}from"./usePageLoad-DFTLo_Lv.js";import{a as b,f as x,m as S,o as C,p as w}from"./assets-26J9lCWW.js";import{r as T}from"./research-directions-mHsYQuny.js";import{p as re}from"./teachers-oTwpdyV9.js";import{a as E}from"./dict-DHsBDJUN.js";var ie={class:`list-page`},ae={key:0,class:`crawl-resolve-hint`},oe={key:1,class:`crawl-resolve-hint`},se={key:0},ce={key:1},le={key:2},ue={key:3},de={key:1,class:`result-actions`},fe={key:1,class:`teacher-batch-bar`},pe={key:2,class:`teacher-batch-bar`},me=[`href`],D=v(t({__name:`index`,setup(t){let v=_(),D=l(!1),O=l(!1),k=l(!1),A=l(null),j=l(null),M=l(null),N=null,P=l(!1),F=l(`paper`),I=l([]),L=l([]),R=l([]),z=l(!1),B=l([]),V=l({target_type:`paper`,request_url:`https://arxiv.org/`,params:{}}),H={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}]},U=l([]),W=l([]),G=l({source:``,category_id:void 0}),K=l([]),q=l([]),J=l({university_id:void 0,city:``,research_direction_ids:[]}),he=h(()=>V.value.target_type===`teacher`?R.value:F.value===`teacher_lead`?L.value:I.value),ge=h(()=>V.value.target_type===`teacher`?U.value.filter(e=>e.key!==`keyword`&&e.key!==`max_results`&&e.key!==`max_pages`):[]);function Y(e){return e===`paper`||e===`industry_news`?H[e]:[]}function X(e,t=!0){let n=Y(e);if(n.length===0)return;U.value=n;let r=t?{...V.value.params}:{};if(xe(n),t)for(let e of n)r[e.key]!==void 0&&(V.value.params[e.key]=r[e.key])}function Z(){V.value.target_type===`teacher`&&(V.value.params.keyword===void 0&&(V.value.params.keyword=``),V.value.params.max_results===void 0&&(V.value.params.max_results=200),V.value.params.max_pages===void 0&&(V.value.params.max_pages=5))}function _e(){V.value.target_type===`industry_news`&&(V.value.params.keyword===void 0&&(V.value.params.keyword=``),V.value.params.max_pages===void 0&&(V.value.params.max_pages=5),V.value.params.max_results===void 0&&(V.value.params.max_results=30))}function ve(e){(e===`paper`||e===`industry_news`)&&(X(e,!0),e===`industry_news`&&_e())}function Q(e){if(!e)return``;let t=e.match(/^(\d{4}-\d{2}-\d{2})/);return t?t[1]:e}function ye(e){return!!(e.lead_author_university?.trim()||e.school_name?.trim())}function be(e){return[...e].sort((e,t)=>{let n=ye(e);return n===ye(t)?(e.lead_author_name||``).localeCompare(t.lead_author_name||``,`zh-CN`):n?-1:1})}function xe(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??``;V.value.params=t}function Se(e){return e===`paper`?`https://arxiv.org/`:e===`teacher`?`https://`:`https://www.pedaily.cn/all/`}function Ce(e){let t=e.trim();return t&&!/^https?:\/\//i.test(t)?`https://${t}`:t}function we(){A.value=null,P.value=!1,I.value=[],L.value=[],R.value=[],B.value=[],G.value={source:``,category_id:void 0}}function Te(){we(),F.value=`paper`,D.value=!1,k.value=!1,V.value={target_type:`paper`,request_url:Se(`paper`),params:{}},j.value=null,M.value=null,U.value=[],ve(`paper`),$()}async function $(){if(N)return N;N=(async()=>{if(!V.value.request_url){j.value=null,M.value=null;return}let e=Ce(V.value.request_url);e!==V.value.request_url&&(V.value.request_url=e);let t=V.value.target_type;(t===`paper`||t===`industry_news`)&&X(t,!0),O.value=!0;try{j.value=await w({request_url:V.value.request_url,target_type:t}),M.value=V.value.request_url,t===`teacher`?(U.value=j.value.param_schema?.fields??[],xe(U.value),Z()):X(t,!0)}catch{j.value=null,M.value=null,t===`teacher`?U.value=[]:X(t,!0)}finally{O.value=!1}})();try{await N}finally{N=null}}async function Ee(){if(!V.value.request_url.trim())return g.warning(`请填写目标地址`),!1;let e=Ce(V.value.request_url);return e!==V.value.request_url&&(V.value.request_url=e),(!j.value||M.value!==V.value.request_url)&&await $(),!!j.value}async function De(){await $()}f(()=>V.value.target_type,e=>{we(),j.value=null,M.value=null,U.value=[],V.value.request_url=Se(e),e===`teacher`?Z():(e===`paper`||e===`industry_news`)&&X(e,!1),e===`industry_news`&&Ne(),$()});async function Oe(){let[e,t]=await Promise.all([re({page:1,page_size:300}),T()]);K.value=e.items.map(e=>({id:e.id,name:e.name,city:e.city})),q.value=t.map(e=>({id:e.id,name:e.name}))}function ke(e){if(!e)return;let t=K.value.find(t=>t.id===e);t?.city&&!J.value.city&&(J.value.city=t.city||``)}function Ae(){let e=G.value.source.trim(),t=G.value.category_id;if(!(!e&&!t))return{source:e||void 0,category_dict_item_id:t}}function je(){let{university_id:e,city:t,research_direction_ids:n}=J.value,r=e!=null&&e>0,i=t.trim()!==``,a=n.length>0;if(!(!r&&!i&&!a))return{university_id:r?e:void 0,city:i?t.trim():void 0,research_direction_ids:a?n:void 0}}async function Me(){if(!await Ee()){g.warning(`无法识别该地址,请检查入库类型与 URL 是否可访问(需为 http/https 列表或详情页)`);return}D.value=!0;try{A.value=await S({target_type:V.value.target_type,request_url:V.value.request_url,params:V.value.params});let e=A.value.items_fetched??A.value.preview_count??0,t=V.value.target_type===`paper`&&(A.value.preview_teacher_lead_count??0)>0?`,另 ${A.value.preview_teacher_lead_count} 位第一作者待入库`:``;g.success(`抓取完成,共 ${e} 条待预览${t}`)}finally{D.value=!1}}async function Ne(){if(!(W.value.length>0))try{W.value=(await E(`news_category`)).items.map(e=>({id:e.id,label:e.label}))}catch{g.warning(`资讯分类加载失败`)}}async function Pe(){if(A.value?.id){z.value=!0,P.value=!0,B.value=[],F.value=V.value.target_type===`teacher`?`teacher`:`paper`;try{V.value.target_type===`industry_news`&&await Ne(),V.value.target_type===`teacher`&&await Oe();let e=A.value.id;if(V.value.target_type===`paper`){let[t,n]=await Promise.all([b(e,{item_kind:`paper`}),b(e,{item_kind:`teacher_lead`})]);I.value=t,L.value=be(n)}else V.value.target_type===`teacher`?R.value=await b(e,{item_kind:`teacher`}):I.value=await b(e)}finally{z.value=!1}}}function Fe(e){B.value=e.filter(e=>e.selectable)}f(F,()=>{B.value=[]});async function Ie(){if(!A.value?.id)return;if(B.value.length===0){g.warning(`请先勾选要入库的条目`);return}let e={item_ids:B.value.map(e=>e.id)},t=je();if(t&&(e.teacher_defaults=t),V.value.target_type===`industry_news`){let t=Ae();t&&(e.news_defaults=t)}k.value=!0;try{let t=await x(A.value.id,e),n=t.failed>0?`,失败 ${t.failed}`:``;g.success(`已入库 ${t.imported} 条,跳过 ${t.skipped}${n}`),await Pe(),A.value=await C(A.value.id)}finally{k.value=!1}}function Le(){A.value?.id&&(V.value.target_type===`paper`?v.push({path:`/papers`,query:{crawl_job_id:String(A.value.id)}}):V.value.target_type===`teacher`?v.push({path:`/teachers`}):v.push({path:`/news`,query:{crawl_job_id:String(A.value.id)}}))}let Re=()=>A.value?.status===`completed`&&(A.value.items_fetched??0)>0,ze=h(()=>{let e=B.value.length;return V.value.target_type===`industry_news`?`入库资讯(已勾选 ${e} 条)`:V.value.target_type===`teacher`||F.value===`teacher_lead`?`入库老师(已勾选 ${e} 条)`:`入库论文(已勾选 ${e} 条)`});return y(Te),(t,l)=>{let f=o(`el-radio`),h=o(`el-radio-group`),g=o(`el-form-item`),_=o(`el-input`),v=o(`el-input-number`),y=o(`el-checkbox`),b=o(`el-checkbox-group`),x=o(`el-button`),S=o(`el-form`),C=o(`el-alert`),w=o(`el-card`),T=o(`el-tab-pane`),re=o(`el-tabs`),E=o(`el-option`),M=o(`el-select`),N=o(`el-table-column`),R=o(`el-tag`),H=o(`el-table`),U=o(`el-dialog`),Y=ee(`loading`);return r(),e(`div`,ie,[l[29]||=c(`div`,{class:`page-header`},[c(`h1`,{class:`page-title`},`数据采集`)],-1),n(w,{shadow:`never`,class:`admin-list-card`},{default:s(()=>[n(S,{"label-position":`top`,class:`crawler-form`,onSubmit:te(Me,[`prevent`])},{default:s(()=>[n(g,{label:`入库类型`,required:``},{default:s(()=>[n(h,{modelValue:V.value.target_type,"onUpdate:modelValue":l[0]||=e=>V.value.target_type=e},{default:s(()=>[n(f,{label:`paper`},{default:s(()=>[...l[18]||=[a(`论文 → 论文库`,-1)]]),_:1}),n(f,{label:`industry_news`},{default:s(()=>[...l[19]||=[a(`行业资讯 → 资讯管理`,-1)]]),_:1}),n(f,{label:`teacher`},{default:s(()=>[...l[20]||=[a(`老师库 → 老师库`,-1)]]),_:1})]),_:1},8,[`modelValue`])]),_:1}),n(g,{label:`目标地址`,required:``},{default:s(()=>[n(_,{modelValue:V.value.request_url,"onUpdate:modelValue":l[1]||=e=>V.value.request_url=e,type:`url`,placeholder:`https:// 资讯/论文列表页或单篇详情页`,onBlur:De},null,8,[`modelValue`]),O.value?(r(),e(`p`,ae,`正在识别采集源…`)):j.value?.source_name?(r(),e(`p`,oe,` 已识别采集源:`+p(j.value.source_name),1)):i(``,!0)]),_:1}),V.value.target_type===`paper`||V.value.target_type===`industry_news`?(r(),e(u,{key:0},[n(g,{label:`搜索关键词(选填)`},{default:s(()=>[n(_,{modelValue:V.value.params.keyword,"onUpdate:modelValue":l[2]||=e=>V.value.params.keyword=e,type:`textarea`,rows:2,placeholder:V.value.target_type===`paper`?`多个关键词用逗号或换行分隔graph neural, AI`:`多个关键词用空格、逗号或换行分隔,如:融资 科创板 AI`},null,8,[`modelValue`,`placeholder`])]),_:1}),V.value.target_type===`industry_news`?(r(),m(g,{key:0,label:`抓取页数`},{default:s(()=>[n(v,{modelValue:V.value.params.max_pages,"onUpdate:modelValue":l[3]||=e=>V.value.params.max_pages=e,min:1,max:50},null,8,[`modelValue`])]),_:1})):i(``,!0),n(g,{label:`条数上限`},{default:s(()=>[n(v,{modelValue:V.value.params.max_results,"onUpdate:modelValue":l[4]||=e=>V.value.params.max_results=e,min:1,max:50},null,8,[`modelValue`])]),_:1})],64)):i(``,!0),V.value.target_type===`teacher`?(r(),e(u,{key:1},[n(g,{label:`搜索关键词(选填)`},{default:s(()=>[n(_,{modelValue:V.value.params.keyword,"onUpdate:modelValue":l[5]||=e=>V.value.params.keyword=e,type:`textarea`,rows:2,placeholder:`多个关键词用空格、逗号或换行分隔`},null,8,[`modelValue`])]),_:1}),n(g,{label:`抓取页数`},{default:s(()=>[n(v,{modelValue:V.value.params.max_pages,"onUpdate:modelValue":l[6]||=e=>V.value.params.max_pages=e,min:1,max:50},null,8,[`modelValue`])]),_:1}),n(g,{label:`条数上限`},{default:s(()=>[n(v,{modelValue:V.value.params.max_results,"onUpdate:modelValue":l[7]||=e=>V.value.params.max_results=e,min:1,max:500},null,8,[`modelValue`])]),_:1})],64)):i(``,!0),(r(!0),e(u,null,d(ge.value,t=>(r(),m(g,{key:t.key,label:t.label,required:t.required},{default:s(()=>[t.type===`checkbox`?(r(),m(b,{key:0,modelValue:V.value.params[t.key],"onUpdate:modelValue":e=>V.value.params[t.key]=e},{default:s(()=>[(r(!0),e(u,null,d(t.options,e=>(r(),m(y,{key:e,value:e},{default:s(()=>[a(p(e),1)]),_:2},1032,[`value`]))),128))]),_:2},1032,[`modelValue`,`onUpdate:modelValue`])):t.type===`number`?(r(),m(v,{key:1,modelValue:V.value.params[t.key],"onUpdate:modelValue":e=>V.value.params[t.key]=e,min:t.min??1,max:t.max??50},null,8,[`modelValue`,`onUpdate:modelValue`,`min`,`max`])):t.type===`textarea`?(r(),m(_,{key:2,modelValue:V.value.params[t.key],"onUpdate:modelValue":e=>V.value.params[t.key]=e,type:`textarea`,rows:3,placeholder:t.placeholder},null,8,[`modelValue`,`onUpdate:modelValue`,`placeholder`])):(r(),m(_,{key:3,modelValue:V.value.params[t.key],"onUpdate:modelValue":e=>V.value.params[t.key]=e,placeholder:t.placeholder},null,8,[`modelValue`,`onUpdate:modelValue`,`placeholder`]))]),_:2},1032,[`label`,`required`]))),128)),n(x,{type:`primary`,"native-type":`submit`,loading:D.value},{default:s(()=>[...l[21]||=[a(` 手动抓取 `,-1)]]),_:1},8,[`loading`])]),_:1}),A.value?(r(),m(C,{key:0,class:`result-alert`,type:`success`,closable:!1,"show-icon":``},{default:s(()=>[c(`p`,null,`地址:`+p(A.value.request_url||A.value.platform_url),1),A.value.source_name?(r(),e(`p`,se,`采集源:`+p(A.value.source_name),1)):i(``,!0),c(`p`,null,`状态:`+p(A.value.status===`completed`?`已完成`:A.value.status),1),A.value.result_summary?(r(),e(`p`,ce,p(A.value.result_summary),1)):i(``,!0),V.value.target_type===`paper`&&A.value.preview_teacher_lead_count?(r(),e(`p`,le,` 第一作者待入库:`+p(A.value.preview_teacher_lead_count)+``,1)):i(``,!0),A.value.items_imported?(r(),e(`p`,ue,`已入库 `+p(A.value.items_imported)+``,1)):i(``,!0)]),_:1})):i(``,!0),A.value?(r(),e(`div`,de,[Re()?(r(),m(x,{key:0,type:`primary`,onClick:Pe},{default:s(()=>[a(` 查看抓取内容(`+p(A.value.items_fetched)+` 条) `,1)]),_:1})):i(``,!0),n(x,{onClick:Le},{default:s(()=>[...l[22]||=[a(`在库中查看已入库`,-1)]]),_:1})])):i(``,!0)]),_:1}),n(U,{modelValue:P.value,"onUpdate:modelValue":l[16]||=e=>P.value=e,title:`本次抓取结果(勾选后入库)`,width:`960px`,"destroy-on-close":``,onClosed:l[17]||=e=>B.value=[]},{footer:s(()=>[n(x,{onClick:l[15]||=e=>P.value=!1},{default:s(()=>[...l[28]||=[a(`关闭`,-1)]]),_:1}),n(x,{type:`primary`,loading:k.value,onClick:Ie},{default:s(()=>[a(p(ze.value),1)]),_:1},8,[`loading`])]),default:s(()=>[V.value.target_type===`paper`?(r(),m(re,{key:0,modelValue:F.value,"onUpdate:modelValue":l[8]||=e=>F.value=e,class:`preview-tabs`},{default:s(()=>[n(T,{label:`论文(${I.value.length}`,name:`paper`},null,8,[`label`]),n(T,{label:`入库老师(${L.value.length}`,name:`teacher_lead`},null,8,[`label`])]),_:1},8,[`modelValue`])):i(``,!0),V.value.target_type===`industry_news`?(r(),e(`div`,fe,[n(_,{modelValue:G.value.source,"onUpdate:modelValue":l[9]||=e=>G.value.source=e,placeholder:`批量来源(选填)`,clearable:``,style:{width:`200px`}},null,8,[`modelValue`]),n(M,{modelValue:G.value.category_id,"onUpdate:modelValue":l[10]||=e=>G.value.category_id=e,placeholder:`批量资讯分类(选填)`,clearable:``,filterable:``,style:{width:`200px`}},{default:s(()=>[(r(!0),e(u,null,d(W.value,e=>(r(),m(E,{key:e.id,label:e.label,value:e.id},null,8,[`label`,`value`]))),128))]),_:1},8,[`modelValue`]),l[23]||=c(`span`,{class:`batch-hint`},`选填;不填则使用每条抓取到的来源与自动匹配分类`,-1)])):i(``,!0),V.value.target_type===`teacher`?(r(),e(`div`,pe,[n(M,{modelValue:J.value.university_id,"onUpdate:modelValue":l[11]||=e=>J.value.university_id=e,filterable:``,placeholder:`批量高校(选填)`,clearable:``,style:{width:`200px`},onChange:ke},{default:s(()=>[(r(!0),e(u,null,d(K.value,e=>(r(),m(E,{key:e.id,label:e.name,value:e.id},null,8,[`label`,`value`]))),128))]),_:1},8,[`modelValue`]),n(_,{modelValue:J.value.city,"onUpdate:modelValue":l[12]||=e=>J.value.city=e,placeholder:`批量城市(选填)`,clearable:``,style:{width:`140px`}},null,8,[`modelValue`]),n(M,{modelValue:J.value.research_direction_ids,"onUpdate:modelValue":l[13]||=e=>J.value.research_direction_ids=e,multiple:``,filterable:``,"collapse-tags":``,placeholder:`研究方向(可选)`,style:{width:`220px`}},{default:s(()=>[(r(!0),e(u,null,d(q.value,e=>(r(),m(E,{key:e.id,label:e.name,value:e.id},null,8,[`label`,`value`]))),128))]),_:1},8,[`modelValue`]),l[24]||=c(`span`,{class:`batch-hint`},`选填;不填则使用每条抓取到的学校/机构信息`,-1)])):i(``,!0),ne((r(),m(H,{data:he.value,"row-key":`id`,size:`small`,onSelectionChange:Fe},{default:s(()=>[n(N,{type:`selection`,width:`48`,selectable:e=>!!e.selectable},null,8,[`selectable`]),V.value.target_type===`paper`&&F.value===`paper`?(r(),e(u,{key:0},[n(N,{prop:`title`,label:`论文标题`,"min-width":`200`,"show-overflow-tooltip":``}),n(N,{prop:`authors`,label:`作者`,width:`120`,"show-overflow-tooltip":``}),n(N,{label:`发表日期`,width:`110`},{default:s(({row:e})=>[a(p(Q(e.published_at)),1)]),_:1}),n(N,{prop:`school_name`,label:`学校`,width:`120`,"show-overflow-tooltip":``})],64)):V.value.target_type===`paper`&&F.value===`teacher_lead`?(r(),e(u,{key:1},[n(N,{prop:`lead_author_name`,label:`姓名`,width:`100`}),n(N,{prop:`lead_author_email`,label:`邮箱`,width:`160`,"show-overflow-tooltip":``}),n(N,{prop:`lead_author_university`,label:`学校`,width:`160`,"show-overflow-tooltip":``},{default:s(({row:e})=>[a(p(e.lead_author_university||e.school_name||``),1)]),_:1}),n(N,{prop:`paper_title`,label:`来源论文`,"min-width":`200`,"show-overflow-tooltip":``})],64)):V.value.target_type===`teacher`?(r(),e(u,{key:2},[n(N,{prop:`title`,label:`姓名`,width:`96`}),n(N,{label:`职称`,width:`88`,"show-overflow-tooltip":``},{default:s(({row:e})=>[a(p(e.lead_author_academic_title||``),1)]),_:1}),n(N,{prop:`lead_author_university`,label:`高校`,width:`140`,"show-overflow-tooltip":``},{default:s(({row:e})=>[a(p(e.lead_author_university||e.school_name||``),1)]),_:1}),n(N,{prop:`lead_author_email`,label:`邮箱`,width:`150`,"show-overflow-tooltip":``}),n(N,{prop:`summary`,label:`简介`,"min-width":`160`,"show-overflow-tooltip":``})],64)):(r(),e(u,{key:3},[n(N,{prop:`title`,label:`标题`,"min-width":`200`,"show-overflow-tooltip":``}),n(N,{prop:`source_name`,label:`采集源`,width:`120`,"show-overflow-tooltip":``}),n(N,{prop:`category_label`,label:`匹配分类`,width:`120`,"show-overflow-tooltip":``},{default:s(({row:e})=>[a(p(e.category_label||``),1)]),_:1}),n(N,{label:`发布时间`,width:`110`},{default:s(({row:e})=>[a(p(Q(e.published_at)),1)]),_:1})],64)),n(N,{label:`状态`,width:`88`},{default:s(({row:e})=>[e.is_duplicate?(r(),m(R,{key:0,type:`info`,size:`small`},{default:s(()=>[...l[25]||=[a(`已存在`,-1)]]),_:1})):e.status===`imported`?(r(),m(R,{key:1,type:`success`,size:`small`},{default:s(()=>[...l[26]||=[a(`已入库`,-1)]]),_:1})):(r(),m(R,{key:2,type:`warning`,size:`small`},{default:s(()=>[...l[27]||=[a(`待入库`,-1)]]),_:1}))]),_:1}),n(N,{label:`链接`,width:`64`},{default:s(({row:t})=>[t.url?(r(),e(`a`,{key:0,href:t.url,target:`_blank`,rel:`noopener`,onClick:l[14]||=te(()=>{},[`stop`])},`查看`,8,me)):i(``,!0)]),_:1})]),_:1},8,[`data`])),[[Y,z.value]])]),_:1},8,[`modelValue`])])}}}),[[`__scopeId`,`data-v-2b93f235`]]);export{D as default};