Files
jczxw-pc/.output/public/_nuxt/CXrHLdkd.js
赵忠林 528fe28ffc feat(api): 添加多路由代理处理实现
- 新增api目录下多个接口路径代理处理文件,支持动态拼接目标URL
- 根据环境变量选择不同的后端服务地址(如dev和生产环境)
- 统一添加TenantId和Authorization请求头传递租户及身份信息
- 实现请求参数及搜索参数的完整转发
- 引入better-sqlite3及node内建模块支持服务端功能
- 新增专家详情页面,实现文章、成果及预约咨询功能展示
- 页面实现加载骨架屏、标签页切换及空状态提示优化体验
2026-04-28 13:50:27 +08:00

2 lines
11 KiB
JavaScript
Raw Permalink Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

import{p as R,u as Y,a as he,r as be}from"./B4jlz63s.js";import{u as Ce}from"./B1r3izuv.js";import{d as xe,H as Ue,i as c,s as Z,j as Ie,c as g,a as l,b as t,w as s,m as a,a2 as U,p,r as d,o as v,e as r,a9 as ze,R as Se,t as w,l as _,A as B,F as Ae,g as Te}from"./DPwbf7XO.js";import"./Cv7upGT6.js";import"./Dl1HJz7f.js";const Me={class:"announcements-page"},Ee={class:"page-header"},Ne={class:"stat-card blue"},Oe={class:"stat-info"},Pe={class:"stat-value"},Re={class:"stat-card green"},Be={class:"stat-info"},Fe={class:"stat-value"},Ve={class:"stat-card orange"},De={class:"stat-info"},$e={class:"stat-value"},je={class:"panel"},He={class:"panel-header"},qe={key:0,class:"ann-info-cell"},Le=["src"],Je={key:1,class:"ann-thumb-empty"},Ke={class:"ann-info-text"},Qe={class:"ann-title"},We={key:0,class:"pin-badge"},Ge={class:"ann-overview"},Xe={key:2,class:"text-sm text-gray"},Ye={key:4,class:"text-sm text-gray"},Ze={class:"cover-upload-wrap"},et={key:0,class:"cover-preview-card"},tt=["src"],at={class:"cover-preview-actions"},st={class:"preview-meta"},nt={class:"text-sm text-gray"},lt={key:0,class:"preview-cover-wrap"},ot=["src"],it={key:1,class:"preview-summary"},ut=["innerHTML"],dt=["src"],S="announcement",rt=xe({__name:"announcements",setup(ct){Ue({title:"公告管理 - 平台管理"});const A=c(!1),F=c(!1),H=c([]),T=c(void 0),M=c(""),q=c(0),L=c(0),J=c(0),y=Z({current:1,pageSize:20,total:0,showSizeChanger:!0,showQuickJumper:!0}),ee=[{title:"公告信息",key:"info",width:420},{title:"状态",key:"status",width:100},{title:"阅读量",key:"views",width:100},{title:"置顶",key:"recommend",width:80},{title:"发布时间",key:"createTime",width:120},{title:"操作",key:"action",width:170}],k=c(!1),V=c(!1),E=c(null),u=Z({title:"",overview:"",content:"",status:0,image:""}),b=c(!1),N=c(!1),f=c(null),O=c(!1),D=c("");async function h(){A.value=!0;try{const n=await R({page:y.current,limit:y.pageSize,model:S,status:T.value,keywords:M.value||void 0});H.value=n?.list||[],y.total=n?.count||0,te()}catch{p.error("加载公告列表失败")}finally{A.value=!1}}async function te(){try{const[n,e,i]=await Promise.allSettled([R({page:1,limit:1,model:S}),R({page:1,limit:1,model:S,status:0}),R({page:1,limit:1,model:S,recommend:1})]);q.value=n.status==="fulfilled"&&n.value?.count||0,L.value=e.status==="fulfilled"&&e.value?.count||0,J.value=i.status==="fulfilled"&&i.value?.count||0}catch{}}function K(){y.current=1,h()}function ae(n){y.current=n.current,y.pageSize=n.pageSize,h()}function se(){Object.assign(u,{articleId:void 0,title:"",overview:"",content:"",status:0,image:""}),b.value=!1}function ne(){E.value=null,se(),k.value=!0}function le(n){E.value=n,Object.assign(u,{articleId:n.articleId,title:n.title||"",overview:n.overview||"",content:n.content||"",status:n.status??0,image:n.image||""}),b.value=!!n.recommend,k.value=!0}function oe(n){f.value=n,N.value=!0}async function ie(){if(!u.title?.trim()){p.warning("请输入公告标题");return}if(!u.content?.trim()){p.warning("请输入公告内容");return}V.value=!0;try{const n={...u,model:S,recommend:b.value?1:0};E.value?.articleId?(await Y(n),p.success("公告已更新")):(await he(n),p.success("公告已发布")),k.value=!1,h()}catch(n){p.error(n?.message||"保存失败")}finally{V.value=!1}}async function ue(n){try{await be(n.articleId),p.success("公告已删除"),h()}catch(e){p.error(e?.message||"删除失败")}}async function de(n,e){try{await Y({articleId:n.articleId,recommend:e?1:0}),p.success(e?"已置顶":"已取消置顶"),h()}catch(i){p.error(i?.message||"操作失败")}}function re(n){return n.type.startsWith("image/")?n.size>5*1024*1024?(p.error("图片大小不能超过 5MB"),!1):!0:(p.error("只能上传图片文件"),!1)}async function ce(n){const e=n.file;if(e){F.value=!0;try{const i=await Ce(e),C=(i?.url||i?.downloadUrl||"").trim();if(!C)throw new Error("上传成功但未返回图片地址");u.image=C,n.onSuccess?.(i,e),p.success("封面上传成功")}catch(i){n.onError?.(i),p.error(i instanceof Error?i.message:"封面上传失败")}finally{F.value=!1}}}function ve(){u.image=""}function me(n){n&&(D.value=n,O.value=!0)}return Ie(()=>h()),(n,e)=>{const i=d("a-button"),C=d("a-space"),I=d("a-col"),Q=d("a-row"),z=d("a-select-option"),W=d("a-select"),pe=d("a-input-search"),$=d("a-tag"),G=d("a-switch"),fe=d("a-popconfirm"),_e=d("a-table"),ge=d("a-input"),x=d("a-form-item"),we=d("a-upload"),X=d("a-textarea"),ye=d("a-form"),j=d("a-modal"),ke=d("a-divider");return v(),g("div",Me,[l("div",Ee,[e[14]||(e[14]=l("div",null,[l("h2",{class:"page-title"},"📢 公告管理"),l("p",{class:"page-desc"},"发布和管理平台公告,支持草稿、置顶、封面和预览")],-1)),t(C,null,{default:s(()=>[t(i,{type:"primary",onClick:ne},{icon:s(()=>[t(a(ze))]),default:s(()=>[e[12]||(e[12]=r(" 发布公告 ",-1))]),_:1}),t(i,{onClick:h,loading:a(A)},{icon:s(()=>[t(a(Se))]),default:s(()=>[e[13]||(e[13]=r(" 刷新 ",-1))]),_:1},8,["loading"])]),_:1})]),t(Q,{gutter:[16,16],class:"mb-6"},{default:s(()=>[t(I,{xs:12,md:8},{default:s(()=>[l("div",Ne,[e[16]||(e[16]=l("div",{class:"stat-icon"},"📢",-1)),l("div",Oe,[l("div",Pe,w(a(q)),1),e[15]||(e[15]=l("div",{class:"stat-label"},"全部公告",-1))])])]),_:1}),t(I,{xs:12,md:8},{default:s(()=>[l("div",Re,[e[18]||(e[18]=l("div",{class:"stat-icon"},"✅",-1)),l("div",Be,[l("div",Fe,w(a(L)),1),e[17]||(e[17]=l("div",{class:"stat-label"},"已发布",-1))])])]),_:1}),t(I,{xs:12,md:8},{default:s(()=>[l("div",Ve,[e[20]||(e[20]=l("div",{class:"stat-icon"},"⭐",-1)),l("div",De,[l("div",$e,w(a(J)),1),e[19]||(e[19]=l("div",{class:"stat-label"},"置顶公告",-1))])])]),_:1})]),_:1}),l("div",je,[l("div",He,[e[24]||(e[24]=l("span",{class:"panel-title"},"📋 公告列表",-1)),t(C,{wrap:""},{default:s(()=>[t(W,{value:a(T),"onUpdate:value":e[0]||(e[0]=o=>U(T)?T.value=o:null),style:{width:"120px"},onChange:K},{default:s(()=>[t(z,{value:void 0},{default:s(()=>[...e[21]||(e[21]=[r("全部状态",-1)])]),_:1}),t(z,{value:0},{default:s(()=>[...e[22]||(e[22]=[r("已发布",-1)])]),_:1}),t(z,{value:1},{default:s(()=>[...e[23]||(e[23]=[r("草稿",-1)])]),_:1})]),_:1},8,["value"]),t(pe,{value:a(M),"onUpdate:value":e[1]||(e[1]=o=>U(M)?M.value=o:null),placeholder:"搜索公告标题",style:{width:"220px"},onSearch:K},null,8,["value"])]),_:1})]),t(_e,{columns:ee,"data-source":a(H),loading:a(A),pagination:a(y),"row-key":"articleId",onChange:ae,size:"middle"},{bodyCell:s(({column:o,record:m})=>[o.key==="info"?(v(),g("div",qe,[m.image?(v(),g("img",{key:0,src:m.image,class:"ann-thumb"},null,8,Le)):(v(),g("div",Je,"📢")),l("div",Ke,[l("div",Qe,[m.recommend?(v(),g("span",We,"📌 置顶")):_("",!0),r(" "+w(m.title),1)]),l("div",Ge,w(m.overview||"暂无摘要"),1)])])):_("",!0),o.key==="status"?(v(),B($,{key:1,color:m.status===0?"success":"default"},{default:s(()=>[r(w(m.status===0?"已发布":"草稿"),1)]),_:2},1032,["color"])):_("",!0),o.key==="views"?(v(),g("span",Xe,"👁 "+w(m.actualViews||0),1)):_("",!0),o.key==="recommend"?(v(),B(G,{key:3,checked:!!m.recommend,size:"small",onChange:P=>de(m,P)},null,8,["checked","onChange"])):_("",!0),o.key==="createTime"?(v(),g("span",Ye,w(m.createTime?.substring(0,10)||"-"),1)):_("",!0),o.key==="action"?(v(),B(C,{key:5},{default:s(()=>[t(i,{type:"link",size:"small",onClick:P=>oe(m)},{default:s(()=>[...e[25]||(e[25]=[r("预览",-1)])]),_:1},8,["onClick"]),t(i,{type:"link",size:"small",onClick:P=>le(m)},{default:s(()=>[...e[26]||(e[26]=[r("编辑",-1)])]),_:1},8,["onClick"]),t(fe,{title:"确认删除此公告?",onConfirm:P=>ue(m)},{default:s(()=>[t(i,{type:"link",size:"small",danger:""},{default:s(()=>[...e[27]||(e[27]=[r("删除",-1)])]),_:1})]),_:1},8,["onConfirm"])]),_:2},1024)):_("",!0)]),_:1},8,["data-source","loading","pagination"])]),t(j,{open:a(k),"onUpdate:open":e[8]||(e[8]=o=>U(k)?k.value=o:null),title:a(E)?.articleId?"编辑公告":"发布公告",width:"760px","confirm-loading":a(V),onOk:ie,onCancel:e[9]||(e[9]=o=>k.value=!1)},{default:s(()=>[t(ye,{model:a(u),layout:"vertical"},{default:s(()=>[t(x,{label:"公告标题",required:""},{default:s(()=>[t(ge,{value:a(u).title,"onUpdate:value":e[2]||(e[2]=o=>a(u).title=o),placeholder:"请输入公告标题",maxlength:200,"show-count":""},null,8,["value"])]),_:1}),t(x,{label:"封面图"},{default:s(()=>[l("div",Ze,[a(u).image?(v(),g("div",et,[l("img",{src:a(u).image,class:"cover-preview-image"},null,8,tt),l("div",at,[t(i,{size:"small",onClick:e[3]||(e[3]=o=>me(a(u).image))},{default:s(()=>[...e[28]||(e[28]=[r("预览",-1)])]),_:1}),t(i,{size:"small",danger:"",onClick:ve},{default:s(()=>[...e[29]||(e[29]=[r("移除",-1)])]),_:1})])])):_("",!0),t(we,{accept:"image/*","show-upload-list":!1,"before-upload":re,"custom-request":ce},{default:s(()=>[t(i,{loading:a(F)},{default:s(()=>[...e[30]||(e[30]=[r("上传封面",-1)])]),_:1},8,["loading"])]),_:1}),e[31]||(e[31]=l("div",{class:"field-hint"},"支持 jpg/png/webp适合公告 banner 场景,单张不超过 5MB",-1))])]),_:1}),t(x,{label:"公告摘要"},{default:s(()=>[t(X,{value:a(u).overview,"onUpdate:value":e[4]||(e[4]=o=>a(u).overview=o),rows:2,placeholder:"简短描述公告内容",maxlength:300,"show-count":""},null,8,["value"])]),_:1}),t(x,{label:"公告内容",required:""},{default:s(()=>[t(X,{value:a(u).content,"onUpdate:value":e[5]||(e[5]=o=>a(u).content=o),rows:10,placeholder:"公告正文内容..."},null,8,["value"])]),_:1}),t(Q,{gutter:16},{default:s(()=>[t(I,{span:12},{default:s(()=>[t(x,{label:"状态"},{default:s(()=>[t(W,{value:a(u).status,"onUpdate:value":e[6]||(e[6]=o=>a(u).status=o)},{default:s(()=>[t(z,{value:0},{default:s(()=>[...e[32]||(e[32]=[r("立即发布",-1)])]),_:1}),t(z,{value:1},{default:s(()=>[...e[33]||(e[33]=[r("保存为草稿",-1)])]),_:1})]),_:1},8,["value"])]),_:1})]),_:1}),t(I,{span:12},{default:s(()=>[t(x,{label:"是否置顶"},{default:s(()=>[t(G,{checked:a(b),"onUpdate:checked":e[7]||(e[7]=o=>U(b)?b.value=o:null)},null,8,["checked"]),e[34]||(e[34]=l("span",{class:"switch-tip"},"置顶公告将优先展示在列表顶部",-1))]),_:1})]),_:1})]),_:1})]),_:1},8,["model"])]),_:1},8,["open","title","confirm-loading"]),t(j,{open:a(N),"onUpdate:open":e[10]||(e[10]=o=>U(N)?N.value=o:null),title:a(f)?.title||"公告预览",width:"760px",footer:null},{default:s(()=>[a(f)?(v(),g(Ae,{key:0},[l("div",st,[l("span",nt,"发布时间:"+w(a(f).createTime?.substring(0,16)||"-"),1),a(f).recommend?(v(),B($,{key:0,color:"orange"},{default:s(()=>[...e[35]||(e[35]=[r("置顶",-1)])]),_:1})):_("",!0),t($,{color:a(f).status===0?"success":"default"},{default:s(()=>[r(w(a(f).status===0?"已发布":"草稿"),1)]),_:1},8,["color"])]),a(f).image?(v(),g("div",lt,[l("img",{src:a(f).image,class:"preview-cover"},null,8,ot)])):_("",!0),a(f).overview?(v(),g("div",it,w(a(f).overview),1)):_("",!0),t(ke),l("div",{class:"preview-content",innerHTML:a(f).content||a(f).overview||"暂无内容"},null,8,ut)],64)):_("",!0)]),_:1},8,["open","title"]),t(j,{open:a(O),"onUpdate:open":e[11]||(e[11]=o=>U(O)?O.value=o:null),title:"封面预览",footer:null,width:"640px"},{default:s(()=>[a(D)?(v(),g("img",{key:0,src:a(D),class:"image-preview-modal"},null,8,dt)):_("",!0)]),_:1},8,["open"])])}}}),gt=Te(rt,[["__scopeId","data-v-6454b5e2"]]);export{gt as default};