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