2 lines
6.8 KiB
JavaScript
2 lines
6.8 KiB
JavaScript
import{a as g,_ as K,a0 as O,E as W,ad as j,d as q,H as r,G as b}from"./index-xdc4dCJw.js";import{v as Q}from"./el-loading-C65vMcpP.js";import{E as X,a as Y,b as Z}from"./el-table-column-MgpB2mM7.js";import{E as tt,a as et}from"./el-form-item-BeAZtehy.js";/* empty css */import{r as p,d as at,x as C,y as f,B as u,V as a,K as e,G as I,J as x,u as nt,$ as c,O as V,R as lt,a3 as $}from"./vendor-vue-CrWqv-BE.js";import"./vendor-misc-vmXLPW1j.js";import"./vendor-axios-B9ygI19o.js";async function st(){const{data:o}=await g.get("/announcements");return o}async function ot(o){const{data:s}=await g.post("/announcements",o);return s}async function it(o){const s=new FormData;s.append("file",o);const{data:v}=await g.post("/announcements/upload_image",s);return v}async function rt(o){const{data:s}=await g.post(`/announcements/${o}/activate`);return s}async function ut(o){const{data:s}=await g.post(`/announcements/${o}/deactivate`);return s}async function ct(o){const{data:s}=await g.delete(`/announcements/${o}`);return s}const dt={class:"page-stack"},mt={class:"image-upload-row"},ft={key:1,class:"image-url"},pt={key:0,class:"image-preview"},vt=["src"],_t={class:"actions"},yt={class:"table-wrap"},gt=["title"],wt={key:1,class:"app-muted"},kt={class:"actions"},xt={__name:"AnnouncementsPage",setup(o){const s=p(""),v=p(""),m=p(""),_=p(null),B=p(!1),h=p(!1),E=p([]);async function w(){h.value=!0;try{E.value=await st()}catch{E.value=[]}finally{h.value=!1}}function A(){s.value="",v.value="",m.value="",_.value&&(_.value.value="")}function M(){_.value?.click()}function N(){m.value="",_.value&&(_.value.value="")}async function U(l){const t=l.target?.files?.[0];if(t){if(t.type&&!t.type.startsWith("image/")){r.error("请选择图片文件"),l.target.value="";return}B.value=!0;try{const d=await it(t);if(!d?.success||!d?.url){r.error(d?.error||"上传失败");return}m.value=d.url,r.success("上传成功")}catch{}finally{B.value=!1,l.target.value=""}}}async function D(l){const t=s.value.trim(),d=v.value.trim(),k=m.value.trim();if(!t||!d){r.error("标题和内容不能为空");return}try{const i=await ot({title:t,content:d,image_url:k,is_active:!!l});if(!i?.success){r.error(i?.error||"保存失败");return}r.success("保存成功"),A(),await w()}catch{}}async function P(l){const t=$("div",{class:"announcement-view"},[l.content?$("div",{class:"announcement-view-text"},l.content):null,l.image_url?$("img",{class:"announcement-view-image",src:l.image_url,alt:"公告图片"}):null]);await b.alert(t,l.title||"公告",{confirmButtonText:"关闭",dangerouslyUseHTMLString:!1})}async function R(l){try{await b.confirm("确定启用该公告吗?启用后将自动停用其他公告。","启用公告",{confirmButtonText:"启用",cancelButtonText:"取消",type:"warning"})}catch{return}try{const t=await rt(l.id);if(!t?.success){r.error(t?.error||"启用失败");return}r.success("已启用"),await w()}catch{}}async function G(l){try{await b.confirm("确定停用该公告吗?","停用公告",{confirmButtonText:"停用",cancelButtonText:"取消",type:"warning"})}catch{return}try{const t=await ut(l.id);if(!t?.success){r.error(t?.error||"停用失败");return}r.success("已停用"),await w()}catch{}}async function H(l){try{await b.confirm("确定删除该公告吗?删除后无法恢复。","删除公告",{confirmButtonText:"删除",cancelButtonText:"取消",type:"error"})}catch{return}try{const t=await ct(l.id);if(!t?.success){r.error(t?.error||"删除失败");return}r.success("已删除"),await w()}catch{}}return at(w),(l,t)=>{const d=O,k=et,i=W,L=tt,F=q,y=Y,z=Z,S=X,J=Q;return f(),C("div",dt,[t[17]||(t[17]=u("div",{class:"app-page-title"},[u("h2",null,"公告管理")],-1)),a(F,{shadow:"never","body-style":{padding:"16px"},class:"card"},{default:e(()=>[t[9]||(t[9]=u("h3",{class:"section-title"},"创建公告",-1)),a(L,{"label-width":"90px"},{default:e(()=>[a(k,{label:"公告标题"},{default:e(()=>[a(d,{modelValue:s.value,"onUpdate:modelValue":t[0]||(t[0]=n=>s.value=n),placeholder:"请输入公告标题",maxlength:"100","show-word-limit":""},null,8,["modelValue"])]),_:1}),a(k,{label:"公告内容"},{default:e(()=>[a(d,{modelValue:v.value,"onUpdate:modelValue":t[1]||(t[1]=n=>v.value=n),type:"textarea",rows:5,placeholder:"请输入公告内容(将以弹窗形式展示)",maxlength:"2000","show-word-limit":""},null,8,["modelValue"])]),_:1}),a(k,{label:"公告图片"},{default:e(()=>[u("div",mt,[a(i,{icon:nt(j),loading:B.value,onClick:M},{default:e(()=>[...t[4]||(t[4]=[c("上传图片",-1)])]),_:1},8,["icon","loading"]),m.value?(f(),x(i,{key:0,onClick:N},{default:e(()=>[...t[5]||(t[5]=[c("移除",-1)])]),_:1})):I("",!0),m.value?(f(),C("span",ft,V(m.value),1)):I("",!0),u("input",{ref_key:"imageInputRef",ref:_,class:"image-input",type:"file",accept:"image/*",onChange:U},null,544)])]),_:1})]),_:1}),m.value?(f(),C("div",pt,[u("img",{src:m.value,alt:"公告图片预览"},null,8,vt)])):I("",!0),u("div",_t,[a(i,{type:"primary",onClick:t[2]||(t[2]=n=>D(!0))},{default:e(()=>[...t[6]||(t[6]=[c("发布并启用",-1)])]),_:1}),a(i,{onClick:t[3]||(t[3]=n=>D(!1))},{default:e(()=>[...t[7]||(t[7]=[c("保存但不启用",-1)])]),_:1}),a(i,{onClick:A},{default:e(()=>[...t[8]||(t[8]=[c("清空",-1)])]),_:1})]),t[10]||(t[10]=u("div",{class:"help"}," 说明:启用公告后,用户登录进入系统将弹窗提示;用户可选择“当次关闭”或“永久关闭本次公告”。 ",-1))]),_:1}),a(F,{shadow:"never","body-style":{padding:"16px"},class:"card"},{default:e(()=>[t[16]||(t[16]=u("h3",{class:"section-title"},"公告列表",-1)),u("div",yt,[lt((f(),x(S,{data:E.value,style:{width:"100%"}},{default:e(()=>[a(y,{prop:"id",label:"ID",width:"80"}),a(y,{label:"标题","min-width":"240"},{default:e(({row:n})=>[u("span",{class:"ellipsis",title:n.title},V(n.title),9,gt)]),_:1}),a(y,{label:"状态",width:"120"},{default:e(({row:n})=>[a(z,{type:n.is_active?"success":"info",effect:"light"},{default:e(()=>[c(V(n.is_active?"启用":"停用"),1)]),_:2},1032,["type"])]),_:1}),a(y,{label:"图片",width:"100"},{default:e(({row:n})=>[n.image_url?(f(),x(z,{key:0,type:"success",effect:"light"},{default:e(()=>[...t[11]||(t[11]=[c("有图",-1)])]),_:1})):(f(),C("span",wt,"-"))]),_:1}),a(y,{prop:"created_at",label:"创建时间",width:"180"}),a(y,{label:"操作",width:"260",fixed:"right"},{default:e(({row:n})=>[u("div",kt,[a(i,{size:"small",onClick:T=>P(n)},{default:e(()=>[...t[12]||(t[12]=[c("查看",-1)])]),_:1},8,["onClick"]),n.is_active?(f(),x(i,{key:0,size:"small",onClick:T=>G(n)},{default:e(()=>[...t[13]||(t[13]=[c("停用",-1)])]),_:1},8,["onClick"])):(f(),x(i,{key:1,type:"success",size:"small",onClick:T=>R(n)},{default:e(()=>[...t[14]||(t[14]=[c("启用",-1)])]),_:1},8,["onClick"])),a(i,{type:"danger",size:"small",onClick:T=>H(n)},{default:e(()=>[...t[15]||(t[15]=[c("删除",-1)])]),_:1},8,["onClick"])])]),_:1})]),_:1},8,["data"])),[[J,h.value]])])]),_:1})])}}},$t=K(xt,[["__scopeId","data-v-6f55521c"]]);export{$t as default};
|