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
11 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,Ct as t,D as n,E as r,G as i,S as a,T as o,X as s,Xt as ee,Y as c,at as l,b as u,d as te,ht as d,m as f,ot as ne,q as p,rt as m,tn as h,x as g}from"./vue.runtime.esm-bundler-DUiYyeqQ.js";import{a as _,c as v,l as y,s as b}from"./index-BAoVGmph.js";import{i as x,t as re}from"./RichTextEditor-BhhlqZ44.js";import{t as S}from"./usePageLoad-DFTLo_Lv.js";import{s as ie}from"./admin-list-CBoToEFo.js";import{a as C}from"./dict-CsbOb9BJ.js";import{a as w,i as T,n as E,o as D,r as O,t as k}from"./news-EeB-G1gP.js";var A={class:`list-page`},ae={class:`page-header`},oe={class:`list-filter-bar`},se=[`href`],ce={key:1,class:`text-mute`},le={key:1,class:`text-mute`},ue={class:`table-row-actions`},de={class:`list-pager`},fe={class:`upload-row`},pe={key:0,class:`thumb-preview`},me=[`src`],he={class:`dialog-footer-inner`},j=b(n({__name:`index`,setup(n){let b=_(),j=d(null),M=d(!1),N=d(!1),P=d(!1),F=d([]),I=d([]),L=d({current_page:1,per_page:20,total:0}),R=d(1),z=d(``),B=d(``),V=d(``),H=d(``),U=d([]),W=d(!1),G=d(null),K=d({title:``,category_dict_item_id:void 0,source:``,cover_url:``,published_at:``,content_html:``});function ge(e){if(!e)return``;let t=new Date(e);if(Number.isNaN(t.getTime()))return``;let n=e=>String(e).padStart(2,`0`);return`${t.getFullYear()}.${n(t.getMonth()+1)}.${n(t.getDate())}`}async function q(){try{U.value=(await C(`news_category`)).items??[]}catch{y.warning(`资讯分类字典加载失败,请执行 NewsDictionarySeeder 或在字典中维护 news_category`)}}async function J(){M.value=!0;try{let e={page:R.value,page_size:L.value.per_page};z.value&&(e.keyword=z.value),B.value!==``&&(e.category_dict_item_id=B.value),j.value&&(e.crawl_job_id=j.value),V.value!==``&&(e.status=V.value),H.value!==``&&(e.has_cover=H.value);let t=await w(e);I.value=t.items??[],L.value=t.meta??{current_page:1,per_page:20,total:0}}finally{M.value=!1}}function Y(){R.value=1,J()}function _e(){z.value=``,B.value=``,V.value=``,H.value=``,R.value=1,J()}function ve(){G.value=null,K.value={title:``,category_dict_item_id:U.value[0]?.id,source:``,cover_url:``,published_at:new Date().toISOString().slice(0,10),content_html:``},W.value=!0}async function ye(e){G.value=e;let t=await T(e.id);K.value={title:t.title,category_dict_item_id:t.category_dict_item_id??void 0,source:t.source||``,cover_url:t.cover_url||``,published_at:t.published_at?t.published_at.slice(0,10):``,content_html:t.content_html||``},W.value=!0}function X(){return K.value.title?.trim()?K.value.category_dict_item_id?K.value.published_at?K.value.content_html?.replace(/<[^>]+>/g,``).trim()?!0:(y.warning(`请填写资讯正文`),!1):(y.warning(`请填写发布时间`),!1):(y.warning(`请选择资讯分类`),!1):(y.warning(`请填写资讯标题`),!1)}async function Z(e){if(!X())return;let t={title:K.value.title.trim(),category_dict_item_id:K.value.category_dict_item_id,source:K.value.source||null,cover_url:K.value.cover_url||null,published_at:K.value.published_at,content_html:K.value.content_html||null,status:e};N.value=!0;try{G.value?await D(G.value.id,t):await E(t),y.success(e===1?`已保存资讯`:`已暂存草稿`),W.value=!1,await J()}finally{N.value=!1}}async function be(e){let t=e.file,n=t instanceof File?t:t.raw;if(!n){e.onError?.(Error(`no file`));return}try{let t=await x(n);K.value.cover_url=t.url,y.success(`封面上传成功`),e.onSuccess?.({})}catch{y.error(`封面上传失败`),e.onError?.(Error(`upload failed`))}}function xe(){K.value.cover_url=``}async function Se(e){await v.confirm(`确定删除资讯「${e.title}」?`,`提示`,{type:`warning`}),await O(e.id),y.success(`已删除`),await J()}function Ce(e){F.value=e}async function we(){let e=F.value.filter(e=>e.status===0);if(e.length===0){y.warning(`请勾选未发布的资讯`);return}await v.confirm(`确定发布已勾选的 ${e.length} 条资讯?`,`批量发布`,{type:`info`}),P.value=!0;try{let t=await k(e.map(e=>e.id)),n=t.skipped>0?`,跳过 ${t.skipped}`:``;y.success(`已发布 ${t.published}${n}`),F.value=[],await J()}finally{P.value=!1}}function Q(){j.value=null,R.value=1,J()}async function $(){let e=b.query.crawl_job_id;j.value=e&&Number(e)||null,await q(),await J()}return S($),m(()=>b.query.crawl_job_id,()=>{$()}),(n,d)=>{let m=c(`el-button`),_=c(`el-alert`),v=c(`el-input`),y=c(`el-option`),b=c(`el-select`),x=c(`el-table-column`),S=c(`el-image`),C=c(`el-table`),w=c(`el-pagination`),T=c(`el-card`),E=c(`el-form-item`),D=c(`el-col`),O=c(`el-date-picker`),k=c(`el-upload`),q=c(`el-row`),X=c(`el-form`),$=c(`el-dialog`),Te=s(`loading`);return i(),e(f,null,[u(`div`,A,[u(`div`,ae,[d[15]||=u(`h1`,{class:`page-title`},`资讯管理`,-1),r(m,{type:`primary`,size:`small`,class:`btn-create`,onClick:ve},{default:l(()=>[...d[14]||=[o(`新建资讯`,-1)]]),_:1})]),r(T,{shadow:`never`,class:`admin-list-card`},{default:l(()=>[j.value?(i(),g(_,{key:0,type:`info`,closable:!1,"show-icon":``,class:`crawl-filter-tip`},{default:l(()=>[o(` 当前仅显示爬虫任务 #`+h(j.value)+` 已入库资讯 `,1),r(m,{link:``,type:`primary`,onClick:Q},{default:l(()=>[...d[16]||=[o(`查看全部`,-1)]]),_:1})]),_:1})):a(``,!0),u(`div`,oe,[r(v,{modelValue:z.value,"onUpdate:modelValue":d[0]||=e=>z.value=e,placeholder:`搜索标题、来源…`,clearable:``,class:`filter-search`,onKeyup:te(Y,[`enter`])},null,8,[`modelValue`]),r(b,{modelValue:B.value,"onUpdate:modelValue":d[1]||=e=>B.value=e,clearable:``,placeholder:`资讯分类`,class:`filter-select`,filterable:``},{default:l(()=>[(i(!0),e(f,null,p(U.value,e=>(i(),g(y,{key:e.id,label:e.label,value:e.id},null,8,[`label`,`value`]))),128))]),_:1},8,[`modelValue`]),r(b,{modelValue:H.value,"onUpdate:modelValue":d[2]||=e=>H.value=e,clearable:``,placeholder:`封面状态`,class:`filter-select-wide`},{default:l(()=>[r(y,{label:`已上传封面`,value:1}),r(y,{label:`未上传封面`,value:0})]),_:1},8,[`modelValue`]),r(b,{modelValue:V.value,"onUpdate:modelValue":d[3]||=e=>V.value=e,clearable:``,placeholder:`资讯状态`,class:`filter-select`},{default:l(()=>[r(y,{label:`已发布`,value:1}),r(y,{label:`未发布`,value:0})]),_:1},8,[`modelValue`]),r(m,{type:`primary`,onClick:Y},{default:l(()=>[...d[17]||=[o(`搜索`,-1)]]),_:1}),r(m,{onClick:_e},{default:l(()=>[...d[18]||=[o(`重置`,-1)]]),_:1}),r(m,{type:`success`,loading:P.value,disabled:F.value.length===0,onClick:we},{default:l(()=>[o(` 批量发布`+h(F.value.length>0?`${F.value.length}`:``),1)]),_:1},8,[`loading`,`disabled`])]),ne((i(),g(C,{data:I.value,"row-key":`id`,onSelectionChange:Ce},{default:l(()=>[r(x,{type:`selection`,width:`48`,selectable:e=>e.status===0},null,8,[`selectable`]),r(x,{prop:`title`,label:`资讯标题`,"min-width":`220`,"show-overflow-tooltip":``}),r(x,{label:`资讯分类`,width:`110`},{default:l(({row:e})=>[o(h(e.category_item?.label??``),1)]),_:1}),r(x,{label:`发布时间`,width:`120`},{default:l(({row:e})=>[o(h(ge(e.published_at)),1)]),_:1}),r(x,{prop:`source`,label:`来源`,width:`120`,"show-overflow-tooltip":``}),r(x,{label:`链接`,width:`80`,align:`center`},{default:l(({row:t})=>[t.source_url?(i(),e(`a`,{key:0,href:t.source_url,target:`_blank`,rel:`noopener`},`查看`,8,se)):(i(),e(`span`,ce,``))]),_:1}),r(x,{label:`封面图`,width:`100`,align:`center`},{default:l(({row:t})=>[t.cover_url?(i(),g(S,{key:0,src:t.cover_url,"preview-src-list":[t.cover_url],fit:`cover`,class:`list-cover-thumb`,"preview-teleported":``},null,8,[`src`,`preview-src-list`])):(i(),e(`span`,le,``))]),_:1}),r(x,{label:`资讯状态`,width:`90`,align:`center`},{default:l(({row:e})=>[u(`span`,{class:ee([`status-badge`,t(ie)(e.status)])},h(e.status===1?`已发布`:`未发布`),3)]),_:1}),r(x,{label:`操作`,width:`160`,fixed:`right`},{default:l(({row:e})=>[u(`div`,ue,[r(m,{class:`btn-action-secondary`,onClick:t=>ye(e)},{default:l(()=>[...d[19]||=[o(`编辑`,-1)]]),_:1},8,[`onClick`]),r(m,{class:`btn-action-secondary`,onClick:t=>Se(e)},{default:l(()=>[...d[20]||=[o(`删除`,-1)]]),_:1},8,[`onClick`])])]),_:1})]),_:1},8,[`data`])),[[Te,M.value]]),u(`div`,de,[r(w,{"current-page":R.value,"onUpdate:currentPage":d[4]||=e=>R.value=e,layout:`total, prev, pager, next`,total:L.value.total,"page-size":L.value.per_page,onCurrentChange:J},null,8,[`current-page`,`total`,`page-size`])])]),_:1})]),r($,{modelValue:W.value,"onUpdate:modelValue":d[13]||=e=>W.value=e,title:G.value?`编辑资讯`:`新建资讯`,width:`960px`,top:`4vh`,"destroy-on-close":``,class:`news-dialog`},{footer:l(()=>[u(`div`,he,[r(m,{onClick:d[10]||=e=>W.value=!1},{default:l(()=>[...d[23]||=[o(`取消`,-1)]]),_:1}),r(m,{loading:N.value,onClick:d[11]||=e=>Z(0)},{default:l(()=>[...d[24]||=[o(`暂存草稿`,-1)]]),_:1},8,[`loading`]),r(m,{type:`primary`,loading:N.value,onClick:d[12]||=e=>Z(1)},{default:l(()=>[...d[25]||=[o(`保存资讯`,-1)]]),_:1},8,[`loading`])])]),default:l(()=>[r(X,{"label-position":`top`,class:`news-form`},{default:l(()=>[r(q,{gutter:16},{default:l(()=>[r(D,{span:12},{default:l(()=>[r(E,{label:`资讯标题`,required:``},{default:l(()=>[r(v,{modelValue:K.value.title,"onUpdate:modelValue":d[5]||=e=>K.value.title=e,placeholder:`请输入资讯标题`},null,8,[`modelValue`])]),_:1})]),_:1}),r(D,{span:6},{default:l(()=>[r(E,{label:`资讯分类`,required:``},{default:l(()=>[r(b,{modelValue:K.value.category_dict_item_id,"onUpdate:modelValue":d[6]||=e=>K.value.category_dict_item_id=e,placeholder:`请选择`,filterable:``,style:{width:`100%`}},{default:l(()=>[(i(!0),e(f,null,p(U.value,e=>(i(),g(y,{key:e.id,label:e.label,value:e.id},null,8,[`label`,`value`]))),128))]),_:1},8,[`modelValue`])]),_:1})]),_:1}),r(D,{span:6},{default:l(()=>[r(E,{label:`发布时间`,required:``},{default:l(()=>[r(O,{modelValue:K.value.published_at,"onUpdate:modelValue":d[7]||=e=>K.value.published_at=e,type:`date`,"value-format":`YYYY-MM-DD`,placeholder:`选择日期`,style:{width:`100%`}},null,8,[`modelValue`])]),_:1})]),_:1}),r(D,{span:12},{default:l(()=>[r(E,{label:`来源`},{default:l(()=>[r(v,{modelValue:K.value.source,"onUpdate:modelValue":d[8]||=e=>K.value.source=e,placeholder:`如:高校雷达网`},null,8,[`modelValue`])]),_:1})]),_:1}),r(D,{span:12},{default:l(()=>[r(E,{label:`封面图`},{default:l(()=>[u(`div`,fe,[r(k,{"show-file-list":!1,accept:`image/*`,"http-request":be},{default:l(()=>[r(m,{type:`primary`,plain:``,size:`small`},{default:l(()=>[...d[21]||=[o(`上传图片`,-1)]]),_:1})]),_:1}),K.value.cover_url?(i(),g(m,{key:0,size:`small`,onClick:xe},{default:l(()=>[...d[22]||=[o(`移除`,-1)]]),_:1})):a(``,!0)]),K.value.cover_url?(i(),e(`div`,pe,[u(`img`,{src:K.value.cover_url,alt:`封面`},null,8,me)])):a(``,!0)]),_:1})]),_:1}),r(D,{span:24},{default:l(()=>[r(E,{label:`资讯正文`,required:``,class:`intro-form-item`},{default:l(()=>[r(re,{modelValue:K.value.content_html,"onUpdate:modelValue":d[9]||=e=>K.value.content_html=e,scope:`news`,height:320},null,8,[`modelValue`])]),_:1})]),_:1})]),_:1})]),_:1})]),_:1},8,[`modelValue`,`title`])],64)}}}),[[`__scopeId`,`data-v-5474b498`]]);export{j as default};