Files
zsglpt/static/admin/assets/AnnouncementsPage-BVJSt6Za.js
yuyx 4c492122dd feat: support announcement image upload
# Conflicts:
#	database.py
#	db/migrations.py
#	routes/admin_api/core.py
#	static/admin/.vite/manifest.json
#	static/admin/assets/AnnouncementsPage-Btl9JP7M.js
#	static/admin/assets/EmailPage-CwqlBGU2.js
#	static/admin/assets/FeedbacksPage-B_qDNL3q.js
#	static/admin/assets/LogsPage-DzdymdrQ.js
#	static/admin/assets/ReportPage-Bp26gOA-.js
#	static/admin/assets/SettingsPage-__r25pN8.js
#	static/admin/assets/SystemPage-C1OfxrU-.js
#	static/admin/assets/UsersPage-DhnABKcY.js
#	static/admin/assets/email-By53DCWv.js
#	static/admin/assets/email-ByiJ74rd.js
#	static/admin/assets/email-DkWacopQ.js
#	static/admin/assets/index-D5wU2pVd.js
#	static/admin/assets/tasks-1acmkoIX.js
#	static/admin/assets/update-DdQLVpC3.js
#	static/admin/assets/users-B1w166uc.js
#	static/admin/assets/users-CPJP5r-B.js
#	static/admin/assets/users-CnIyvFWm.js
#	static/admin/index.html
#	static/app/.vite/manifest.json
#	static/app/assets/AccountsPage-C48gJL8c.js
#	static/app/assets/AccountsPage-D387XNsv.js
#	static/app/assets/AccountsPage-DBJCAsJz.js
#	static/app/assets/LoginPage-BgK_Vl6X.js
#	static/app/assets/RegisterPage-CwADxWfe.js
#	static/app/assets/ResetPasswordPage-CVfZX_5z.js
#	static/app/assets/SchedulesPage-CWuZpJ5h.js
#	static/app/assets/SchedulesPage-Dw-mXbG5.js
#	static/app/assets/SchedulesPage-DwzGOBuc.js
#	static/app/assets/ScreenshotsPage-C6vX2U3V.js
#	static/app/assets/ScreenshotsPage-CreOSjVc.js
#	static/app/assets/ScreenshotsPage-DuTeRzLR.js
#	static/app/assets/VerifyResultPage-BzGlCgtE.js
#	static/app/assets/VerifyResultPage-CN_nr4V6.js
#	static/app/assets/VerifyResultPage-CNbQc83z.js
#	static/app/assets/accounts-BFaVMUve.js
#	static/app/assets/accounts-BYq3lLev.js
#	static/app/assets/accounts-Bc9j2moH.js
#	static/app/assets/auth-Dk_ApO4B.js
#	static/app/assets/index-BIng7uZJ.css
#	static/app/assets/index-CDxVo_1Z.js
#	static/app/index.html
2026-01-06 12:15:16 +08:00

2 lines
6.7 KiB
JavaScript

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