mirror of
https://git-qiuchenly.yltfspace.com/QiuChenly/corepatch
synced 2025-11-25 05:40:27 +08:00
109 lines
23 KiB
JavaScript
109 lines
23 KiB
JavaScript
import{d as e,r as a,c as l,w as t,Q as s,a as o,e as u,l as n,m as i,C as r,b as v,P as c,z as d,p,q as m,v as f,T as h,h as b,n as g,t as y,u as k,H as w,F as I,B as C,A as P,o as x,I as S}from"./CdD4XvnD.js"
|
|
import{_ as E,A as L,a as F,b as _,d as T,c as $,j as M,W as N,k as U,T as A,g as R}from"./BaSQ3xJt.js"
|
|
import{g as D}from"./6K6b4Qy_.js"
|
|
import{C as j}from"./Nkv5t_uh.js"
|
|
import{U as z}from"./Birl3CuV.js"
|
|
import{u as B}from"./4xYhABhf.js"
|
|
import{g as O,a as Y,f as W,b as H}from"./BqTCaadz.js"
|
|
import{u as q,R as X,a as Q}from"./COGASUq6.js"
|
|
import"./CFhT0fBm.js"
|
|
const V={class:"page-header"},G={class:"header-buttons"},J={key:0,class:"header-content"},K={class:"app-header"},Z={class:"app-icon-wrapper"},ee=["src","alt"],ae={class:"app-title-info"},le={class:"page-title"},te={key:0,class:"page-description"},se={key:1,class:"page-description"},oe={key:2,class:"forum-stats"},ue={class:"stat-item"},ne={class:"stat-item"},ie={key:1,class:"header-content"},re=["src","alt"],ve={key:1,class:"preview-loading"},ce=F(e({__name:"ForumHeader",props:{bundleId:{},appInfo:{},forumPermission:{},builtinForum:{}},emits:["back","home"],setup(e){const g=e,y=a(!1),k=a(!1),w=l(()=>{var e
|
|
return"builtin"===(null==(e=g.builtinForum)?void 0:e.type)}),I=l(()=>{var e
|
|
return"created"===(null==(e=g.builtinForum)?void 0:e.type)}),C=l(()=>g.builtinForum?D(g.builtinForum.bundleId):"mdi:forum-outline"),P=a(null),x=a(!1),S=a(!1),F=a(null),_=a(!1),T=a(!1),$=l(()=>{var e
|
|
return(null==(e=g.builtinForum)?void 0:e.description)??""}),M=l(()=>g.appInfo?w.value?"":I.value?P.value||"":F.value||"":""),N=a(!1),U=a(null),A=a(!1),R=a(null),j=a({top:"0px",left:"0px"}),z=a({x:0,y:0}),B=e=>{const a=e.target
|
|
R.value={width:a.naturalWidth,height:a.naturalHeight},z.value.x&&z.value.y&&O(z.value.x,z.value.y)},O=(e,a)=>{var l,t
|
|
const s=20,o=(null==(l=R.value)?void 0:l.width)||400,u=(null==(t=R.value)?void 0:t.height)||400,n=window.innerWidth,i=window.innerHeight,r=Math.min(o,.9*n),v=Math.min(u,.9*i),c=Math.min(o,r),d=Math.min(u,v)
|
|
let p=e+s,m=a+s
|
|
p+c/2>n&&(p=e-s-c/2),p-c/2<0&&(p=e+s+c/2),m+d>i&&(m=a-s-d),m<0&&(m=a+s),p=Math.max(c/2,Math.min(p,n-c/2)),m=Math.max(0,Math.min(m,i-d)),j.value={top:`${m}px`,left:`${p}px`}},Y=e=>{N.value&&(z.value={x:e.clientX,y:e.clientY},O(e.clientX,e.clientY))},W=async e=>{if(M.value&&y.value&&!k.value&&!w.value){z.value={x:e.clientX,y:e.clientY},O(e.clientX,e.clientY),N.value=!0,A.value=!0,U.value=null,document.addEventListener("mousemove",Y)
|
|
try{const e=await(async()=>{var e,a
|
|
if(!g.appInfo)return null
|
|
if(I.value&&(null==(e=g.builtinForum)?void 0:e.iconId))try{return await L.getIcon(g.builtinForum.iconId,void 0,400,400)}catch(l){return P.value}if(null==(a=g.forumPermission)?void 0:a.iconId)try{return await L.getIcon(g.forumPermission.iconId,void 0,400,400)}catch(l){return F.value}return null})()
|
|
e?(U.value=e,A.value=!1):(N.value=!1,document.removeEventListener("mousemove",Y))}catch(a){N.value=!1,document.removeEventListener("mousemove",Y)}}},H=()=>{N.value=!1,U.value=null,R.value=null,document.removeEventListener("mousemove",Y)}
|
|
return t(()=>[g.appInfo,g.builtinForum,g.forumPermission],()=>{(async()=>{var e,a
|
|
if(g.appInfo)if(I.value&&(null==(e=g.builtinForum)?void 0:e.iconId))try{const e=await L.getIcon(g.builtinForum.iconId,80,128,128)
|
|
P.value=e,x.value=!0,S.value=!1,y.value=!0,k.value=!1}catch(l){S.value=!0,x.value=!0,y.value=!0,k.value=!0}else if(w.value)y.value=!0,k.value=!1
|
|
else if(null==(a=g.forumPermission)?void 0:a.iconId)try{const e=await L.getIcon(g.forumPermission.iconId,80,128,128)
|
|
F.value=e,_.value=!0,T.value=!1,y.value=!0,k.value=!1}catch(l){T.value=!0,_.value=!0,y.value=!0,k.value=!0}else y.value=!0,k.value=!1})()},{immediate:!0}),s(()=>{document.removeEventListener("mousemove",Y)}),(a,l)=>{var t,s,g,P,x,S
|
|
return b(),o("div",V,[u("div",G,[u("button",{class:"back-button",onClick:l[0]||(l[0]=e=>a.$emit("back"))},[i(E,{icon:"mdi:arrow-left",class:"back-icon"}),l[4]||(l[4]=u("span",null,"返回讨论区",-1))]),u("button",{class:"home-button",onClick:l[1]||(l[1]=e=>a.$emit("home"))},[i(E,{icon:"fluent-color:home-48",class:"home-icon"}),l[5]||(l[5]=u("span",null,"首页",-1))])]),e.appInfo?(b(),o("div",J,[u("div",K,[u("div",Z,[u("div",{class:"app-icon",onMouseenter:W,onMouseleave:H},[M.value&&!w.value?r((b(),o("img",{key:0,src:M.value,alt:(null==(t=e.forumPermission)?void 0:t.appName)||(null==(s=e.appInfo)?void 0:s.name)||e.bundleId,onLoad:l[2]||(l[2]=e=>y.value=!0),onError:l[3]||(l[3]=e=>k.value=!0)},null,40,ee)),[[c,y.value&&!k.value]]):v("",!0),w.value?(b(),n(E,{key:1,icon:C.value,class:"builtin-forum-icon"},null,8,["icon"])):v("",!0),r(u("div",{class:"icon-placeholder"},d(null==(P=(null==(g=e.forumPermission)?void 0:g.appName)||e.bundleId)?void 0:P.charAt(0).toUpperCase()),513),[[c,(!M.value||!y.value||k.value)&&!w.value&&!I.value]])],32)]),u("div",ae,[u("h1",le,d((null==(x=e.forumPermission)?void 0:x.appName)||(null==(S=e.appInfo)?void 0:S.name)||e.bundleId),1),w.value?v("",!0):(b(),o("p",te,d(e.bundleId),1)),w.value&&$.value?(b(),o("p",se,d($.value),1)):v("",!0),e.forumPermission?(b(),o("div",oe,[u("span",ue,[i(E,{icon:"fluent-color:news-28",class:"stat-icon"}),u("span",null,"今日发帖:"+d(e.forumPermission.todayPostCount??0),1)]),u("span",ne,[i(E,{icon:"fluent-color:reward-24",class:"stat-icon"}),u("span",null,"总发帖数:"+d(e.forumPermission.totalPostCount??0),1)])])):v("",!0)])])])):(b(),o("div",ie,[...l[6]||(l[6]=[u("h1",{class:"page-title"},"讨论区",-1)])])),(b(),n(h,{to:"body"},[i(p,{name:"icon-preview-fade"},{default:m(()=>{var a
|
|
return[N.value?(b(),o("div",{key:0,class:"icon-preview-overlay",style:f(j.value)},[U.value&&!A.value?(b(),o("img",{key:0,src:U.value,alt:(null==(a=e.appInfo)?void 0:a.name)||"图标预览",class:"preview-image",onLoad:B},null,40,re)):(b(),o("div",ve,[...l[7]||(l[7]=[u("div",{class:"loading-spinner"},null,-1),u("p",null,"加载中...",-1)])]))],4)):v("",!0)]}),_:1})]))])}}}),[["__scopeId","data-v-b7457a0d"]]),de={class:"post-header"},pe={class:"post-title"},me={class:"post-meta"},fe={class:"author-avatar"},he={class:"post-author clickable"},be={class:"post-time"},ge={class:"post-content-preview"},ye={class:"post-footer"},ke={class:"post-stats"},we={class:"stat-item"},Ie={class:"post-actions"},Ce=["disabled"],Pe=["disabled"],xe=F(e({__name:"PostCard",props:{post:{},likeLoading:{type:Boolean,default:!1}},emits:["click","like","dislike","report"],setup(e,{emit:t}){const s=e,n=w(),{isUserOnline:r}=B(),v=l(()=>O(s.post)),c=l(()=>{const e=v.value
|
|
return e?r(e).value:null}),p=a(!1),m=a(void 0),f=a(""),h=a(""),I=a(""),C=a(void 0),P=a(null),x=a(null),S=l(()=>!!s.post.isNew),L=()=>{P.value&&(clearTimeout(P.value),P.value=null),x.value&&(clearTimeout(x.value),x.value=null),x.value=window.setTimeout(()=>{p.value&&(p.value=!1)},200)},F=()=>{x.value&&(clearTimeout(x.value),x.value=null)},T=()=>{P.value&&(clearTimeout(P.value),P.value=null),x.value&&(clearTimeout(x.value),x.value=null),p.value=!1,C.value=void 0,I.value=""},$=(e,a)=>{n.push(`/messages?userId=${e}&userName=${encodeURIComponent(a)}`)},M=(e,a)=>{}
|
|
return(a,l)=>{return b(),o("div",{class:g(["post-card",{"post-new":S.value}]),onClick:l[4]||(l[4]=l=>a.$emit("click",e.post.id))},[u("div",de,[u("h3",pe,d(e.post.title),1),u("div",me,[u("div",{class:"author-wrapper",onMouseenter:l[0]||(l[0]=y(a=>((e,a)=>{P.value&&(clearTimeout(P.value),P.value=null)
|
|
const l=O(a),t=Y(a),s=H(a)
|
|
f.value=l,h.value=t,I.value=s||"",C.value=a.author.avatar,P.value=window.setTimeout(()=>{const a=e.target.getBoundingClientRect()
|
|
m.value={x:a.left-100,y:a.bottom+8},p.value=!0},200)})(a,e.post),["stop"])),onMouseleave:y(L,["stop"])},[u("div",fe,[i(_,{"avatar-id":e.post.author.avatar,"user-name":k(Y)(e.post),size:"small"},null,8,["avatar-id","user-name"]),u("div",{class:g(["online-indicator",{online:!0===c.value,offline:!1===c.value}])},null,2)]),u("span",he,d(k(Y)(e.post)),1)],32),u("span",be,d((s=e.post.publishTime,W(s))),1)])]),u("div",ge,[u("p",null,d((t=e.post.content,t.length<=150?t:t.substring(0,150)+"...")),1)]),u("div",ye,[u("div",ke,[u("span",we,[i(E,{icon:"mdi:comment-outline",class:"stat-icon"}),u("span",null,d(e.post.replyCount)+" 回复",1)])]),u("div",Ie,[u("button",{class:g(["action-btn",{active:"liked"===e.post.userLikeStatus}]),onClick:l[1]||(l[1]=y(l=>a.$emit("like",e.post.id),["stop"])),disabled:e.likeLoading},[i(E,{icon:"liked"===e.post.userLikeStatus?"mdi:thumb-up":"mdi:thumb-up-outline",class:"action-icon"},null,8,["icon"]),u("span",null,d(e.post.likeCount),1)],10,Ce),u("button",{class:g(["action-btn",{active:"disliked"===e.post.userLikeStatus}]),onClick:l[2]||(l[2]=y(l=>a.$emit("dislike",e.post.id),["stop"])),disabled:e.likeLoading},[i(E,{icon:"disliked"===e.post.userLikeStatus?"mdi:thumb-down":"mdi:thumb-down-outline",class:"action-icon"},null,8,["icon"]),u("span",null,d(e.post.dislikeCount),1)],10,Pe),u("button",{class:"action-btn report-btn",onClick:l[3]||(l[3]=y(l=>a.$emit("report",e.post.id),["stop"]))},[i(E,{icon:"mdi:flag-outline",class:"action-icon"}),l[5]||(l[5]=u("span",null,"举报",-1))])])]),i(z,{visible:p.value,"user-id":f.value,"user-name":h.value,username:I.value,"avatar-id":C.value,position:m.value,onClose:T,onSendMessage:$,onBlockUser:M,onMouseEnter:F},null,8,["visible","user-id","user-name","username","avatar-id","position"])],2)
|
|
var t,s}}}),[["__scopeId","data-v-ba1a863f"]]),Se={class:"post-list-container"},Ee={class:"create-post-section"},Le={class:"section-header"},Fe={class:"sort-selector"},_e={key:1,class:"empty-discussion"},Te=F(e({__name:"PostList",props:{posts:{},sortBy:{},showPostForm:{type:Boolean},likeLoadingPostId:{}},emits:["show-post-form","sort-change","post-click","like","dislike","report"],setup(e){const a=[{value:"time",label:"按时间",icon:"fluent-color:clock-24"},{value:"lastReply",label:"按最后回复",icon:"fluent-color:mail-clock-32"}]
|
|
return(l,t)=>(b(),o("div",Se,[u("div",Ee,[u("div",Le,[e.showPostForm?v("",!0):(b(),o("button",{key:0,class:"create-post-btn",onClick:t[0]||(t[0]=e=>l.$emit("show-post-form"))},[i(E,{icon:"mdi:plus",class:"btn-icon"}),t[6]||(t[6]=u("span",null,"发帖",-1))])),u("div",Fe,[t[7]||(t[7]=u("label",{class:"sort-label"},"排序方式:",-1)),i(j,{"model-value":e.sortBy,options:a,"onUpdate:modelValue":t[1]||(t[1]=e=>l.$emit("sort-change",e))},null,8,["model-value"])])])]),e.posts.length>0?(b(),n(P,{key:0,name:"post-fade",tag:"div",class:"posts-list"},{default:m(()=>[(b(!0),o(I,null,C(e.posts,a=>(b(),n(xe,{key:a.id,post:a,"like-loading":e.likeLoadingPostId===a.id,onClick:t[2]||(t[2]=e=>l.$emit("post-click",e)),onLike:t[3]||(t[3]=e=>l.$emit("like",e)),onDislike:t[4]||(t[4]=e=>l.$emit("dislike",e)),onReport:t[5]||(t[5]=e=>l.$emit("report",e))},null,8,["post","like-loading"]))),128))]),_:1})):(b(),o("div",_e,[i(E,{icon:"fluent-color:chat-bubbles-question-24",class:"empty-icon"}),t[8]||(t[8]=u("p",null,"暂无讨论内容",-1)),t[9]||(t[9]=u("p",{class:"empty-hint"},"还没有人发布帖子",-1))]))]))}}),[["__scopeId","data-v-9a486f50"]]),$e={class:"upload-progress-content"},Me={class:"progress-info"},Ne={class:"progress-text"},Ue={class:"progress-bar-container"},Ae={class:"progress-bar"},Re={class:"progress-percent"},De={key:0,class:"error-message"},je={class:"dialog-footer"},ze=F(e({__name:"UploadProgressDialog",props:{visible:{type:Boolean},progress:{},title:{default:"上传中..."},statusText:{default:"正在上传文件"},error:{},cancellable:{type:Boolean,default:!0},completed:{type:Boolean,default:!1}},emits:["cancel","close"],setup(e,{emit:a}){const l=e,t=a,s=()=>{l.cancellable&&!l.completed&&t("cancel")},r=()=>{t("close")}
|
|
return(a,l)=>(b(),n(T,{visible:e.visible,"max-width":400,"close-on-overlay-click":e.cancellable&&!e.completed,"show-close-button":e.cancellable&&!e.completed,"close-button-position":"header","enable-keyboard":e.cancellable&&!e.completed,onClose:s},{header:m(()=>[u("h3",null,d(e.title),1)]),footer:m(()=>[u("div",je,[e.cancellable&&!e.completed?(b(),o("button",{key:0,class:"btn btn-secondary",onClick:s}," 取消 ")):v("",!0),e.completed||e.error?(b(),o("button",{key:1,class:"btn btn-primary",onClick:r}," 确定 ")):v("",!0)])]),default:m(()=>[u("div",$e,[u("div",Me,[i(E,{icon:"mdi:cloud-upload",class:"progress-icon"}),u("span",Ne,d(e.statusText),1)]),u("div",Ue,[u("div",Ae,[u("div",{class:"progress-fill",style:f({width:`${e.progress}%`})},null,4)]),u("span",Re,d(e.progress)+"%",1)]),e.error?(b(),o("div",De,[i(E,{icon:"mdi:alert-circle",class:"error-icon"}),u("span",null,d(e.error),1)])):v("",!0)])]),_:1},8,["visible","close-on-overlay-click","show-close-button","enable-keyboard"]))}}),[["__scopeId","data-v-a922ff57"]]),Be={class:"discussion-forum-page"},Oe={class:"page-container"},Ye={key:0,class:"loading"},We={key:1,class:"error"},He={key:2,class:"discussion-content"},qe=F(e({__name:"DiscussionForum",setup(e){const r=w(),c=S(),f=$(),h=R(),g=l(()=>c.params.bundleId),y=a(null),I=a(!0),C=a(""),P=a(null),E=a([]),F=a(null),_=a("time"),T=a(!1),D=a(null),j=a([]),z=l(()=>te.showUploadProgress&&te.uploadProgress.value>0),Y=l(()=>te.showUploadProgress&&te.uploadProgress.value>0),W=l(()=>100===te.uploadProgress.value&&!te.uploadError.value),H=l(()=>te.uploadProgress.value<100&&!te.uploadError.value),V=l(()=>te.uploadProgress.value),G=l(()=>te.uploadStatusText.value),J=l(()=>te.uploadError.value),K=l(()=>te.showUploadProgress.value),Z=a(5),ee=a(5),ae=a(20971520),le=a(20971520),te=function(e,t,s,o,u,n){const i=$(),r=a(""),v=a(""),c=a(!1),d=a(0),p=a("正在上传..."),m=a(""),f=q({maxImageCount:t.value,maxFileCount:s.value,maxImageSize:o.value,maxFileSize:u.value}),{selectedImages:h,selectedFiles:b,uploadAttachments:g,clearAttachments:y,validateAttachments:k}=f,w=l(()=>r.value.trim().length>0&&(v.value.trim().length>0||h.value.length>0||b.value.length>0))
|
|
return{title:r,content:v,selectedImages:h,selectedFiles:b,...f,canSubmit:w,submitPost:async()=>{var a,l,t,s,o,u,f,g
|
|
if(w.value&&e.value&&k()){c.value=!0,d.value=0,p.value="正在上传文件...",m.value=""
|
|
try{const f=[],g=h.value.length+b.value.length
|
|
let k=0
|
|
for(let e=0;e<h.value.length;e++){const t=h.value[e]
|
|
p.value=`正在上传图片 ${e+1}/${h.value.length}...`
|
|
const s=await L.uploadImageAttachment(t.file,e=>{const a=e/100
|
|
d.value=Math.round((k+a)/g*100)})
|
|
if(!s.success||!(null==(a=s.data)?void 0:a.attachmentId))throw new Error(s.message||(null==(l=s.data)?void 0:l.message)||"图片上传失败")
|
|
f.push(s.data.attachmentId),k++}for(let e=0;e<b.value.length;e++){const a=b.value[e]
|
|
p.value=`正在上传文件 ${e+1}/${b.value.length}...`
|
|
const l=await L.uploadFileAttachment(a.file,e=>{const a=e/100
|
|
d.value=Math.round((k+a)/g*100)})
|
|
if(!l.success||!(null==(t=l.data)?void 0:t.attachmentId))throw new Error(l.message||(null==(s=l.data)?void 0:s.message)||"文件上传失败")
|
|
f.push(l.data.attachmentId),k++}p.value="正在发布帖子...",d.value=90
|
|
const w=await L.createForumPost(e.value,r.value.trim(),v.value.trim(),f.length>0?f:void 0)
|
|
w.success&&(null==(o=w.data)?void 0:o.postId)?(d.value=100,p.value="发布成功!",await new Promise(e=>setTimeout(e,500)),r.value="",v.value="",y(),c.value=!1,n&&await n(),i.success("帖子发布成功")):(m.value=w.message||(null==(u=w.data)?void 0:u.message)||"发帖失败,请稍后重试",p.value="发布失败")}catch(I){m.value=(null==(g=null==(f=I.response)?void 0:f.data)?void 0:g.message)||I.message||"发帖失败,请稍后重试",p.value="发布失败"}}},showUploadProgress:c,uploadProgress:d,uploadStatusText:p,uploadError:m,cancelUpload:()=>{c.value=!1,d.value=0,m.value=""},closeProgress:()=>{c.value=!1,d.value=0,m.value=""},resetForm:()=>{r.value="",v.value="",y()}}}(g,Z,ee,ae,le,async()=>{await ne(),T.value=!1}),se=a(!1),oe=a(null),{queryUsersOnlineStatus:ue}=B(),ne=async()=>{if(g.value)try{const e=await L.getForumPosts(g.value,1,20,_.value)
|
|
if(E.value=e.posts||[],E.value.length>0){const e=E.value.map(e=>O(e)).filter(e=>e),a=Array.from(new Set(e))
|
|
j.value=a,a.length>0&&ue(a).catch(e=>{})}else j.value=[]}catch(e){E.value=[],j.value=[]}},ie=e=>{_.value=e,ne()},re=async()=>{if(!g.value)return C.value="无效的应用标识符",void(I.value=!1)
|
|
I.value=!0,C.value=""
|
|
try{const e=await L.getForumByBundleId(g.value)
|
|
if(!e||"builtin"!==e.type&&"created"!==e.type){if(await(async e=>{try{const a=await L.getForumPermission(e)
|
|
F.value=a||{bundleId:e,appName:"",enabled:!1,postCount:0,todayPostCount:0,totalPostCount:0,createdAt:(new Date).toISOString(),updatedAt:(new Date).toISOString()}}catch(a){F.value={bundleId:e,appName:"",enabled:!1,postCount:0,todayPostCount:0,totalPostCount:0,createdAt:(new Date).toISOString(),updatedAt:(new Date).toISOString()}}})(g.value),!F.value||!F.value.enabled)return C.value="该讨论区暂未开放,请等待管理员启用",void(I.value=!1)
|
|
e&&(Z.value=e.maxImageCount||5,ee.value=e.maxFileCount||5,ae.value=e.maxImageSize||20971520,le.value=e.maxFileSize||20971520),y.value={bundleId:g.value,name:F.value.appName,version:"",path:"",status:"unsupported",injection:null,update:null,hasIcon:!!F.value.iconId,iconId:F.value.iconId}}else P.value=e,y.value={bundleId:e.bundleId,name:e.name,version:"",path:"",status:"unsupported",injection:null,update:null,hasIcon:!1},F.value={bundleId:g.value,appName:e.name,enabled:!0,postCount:0,todayPostCount:e.todayPostCount??0,totalPostCount:e.totalPostCount??0,createdAt:(new Date).toISOString(),updatedAt:(new Date).toISOString()},Z.value=e.maxImageCount||5,ee.value=e.maxFileCount||5,ae.value=e.maxImageSize||20971520,le.value=e.maxFileSize||20971520
|
|
await ne()}catch(e){C.value="加载讨论区信息失败,请检查服务是否运行",y.value=null}finally{I.value=!1}},ve=()=>{r.push("/discussion")},de=()=>{r.push("/")},pe=e=>{r.push(`/discussion/${g.value}/post/${e}`)},me=async e=>{var a,l
|
|
const t=E.value.find(a=>a.id===e)
|
|
if(!t||!g.value||D.value===e)return
|
|
const s="liked"===t.userLikeStatus?"cancel":"like"
|
|
D.value=e,h.show("cancel"===s?"取消点赞中...":"点赞中...")
|
|
try{const a=await L.likeForumPost(g.value,e,s)
|
|
a.success?(t.userLikeStatus=a.userLikeStatus,t.likeCount=a.likeCount,t.dislikeCount=a.dislikeCount,"cancel"===s?f.success("已取消点赞"):f.success("点赞成功")):f.error("点赞失败")}catch(o){f.error((null==(l=null==(a=o.response)?void 0:a.data)?void 0:l.message)||o.message||"点赞失败")}finally{D.value=null,h.hide()}},fe=async e=>{var a,l
|
|
const t=E.value.find(a=>a.id===e)
|
|
if(!t||!g.value||D.value===e)return
|
|
const s="disliked"===t.userLikeStatus?"cancel":"dislike"
|
|
D.value=e,h.show("cancel"===s?"取消点踩中...":"点踩中...")
|
|
try{const a=await L.likeForumPost(g.value,e,s)
|
|
a.success?(t.userLikeStatus=a.userLikeStatus,t.likeCount=a.likeCount,t.dislikeCount=a.dislikeCount,"cancel"===s?f.success("已取消点踩"):f.success("点踩成功")):f.error("点踩失败")}catch(o){f.error((null==(l=null==(a=o.response)?void 0:a.data)?void 0:l.message)||o.message||"点踩失败")}finally{D.value=null,h.hide()}},he=async(e,a,l,t)=>{t?(te.title.value=t,te.content.value=e,te.selectedImages.value=a,te.selectedFiles.value=l,await te.submitPost()):f.error("请输入帖子标题")},be=()=>{T.value=!1,te.resetForm()},ge=e=>{const a=E.value.find(a=>a.id===e)
|
|
a&&(oe.value={userId:a.author.id,userName:a.author.nickName||a.author.username,content:a.content,type:"post",postId:a.id},se.value=!0)},ye=async(e,a,l)=>{var t,s
|
|
if(g.value&&l.type&&l.postId){h.show("提交举报中...")
|
|
try{let t=""
|
|
if("post"===l.type?t=l.postId:("reply"===l.type||"nestedReply"===l.type)&&(t=l.replyId||""),!t)return
|
|
const s=await L.submitReport(l.type,t,g.value,l.postId,e,l.content,a||void 0)
|
|
s.success?(se.value=!1,f.success("举报提交成功")):f.error(s.message||"举报失败")}catch(o){f.error((null==(s=null==(t=o.response)?void 0:t.data)?void 0:s.message)||o.message||"举报失败")}finally{h.hide()}}}
|
|
return function(e,l,o,u,n){const{subscribeForum:i,unsubscribeForum:r,isConnected:v}=M(),{queryUsersOnlineStatus:c}=B(),d=a(null),p=a(!1),m=e=>{const a=e.detail
|
|
if(!a||!a.post)return
|
|
const t=a.post
|
|
if(l.value.findIndex(e=>e.id===t.id)>=0)return
|
|
t.isNew=!0,l.value.unshift(t),setTimeout(()=>{const e=l.value.find(e=>e.id===t.id)
|
|
e&&(e.isNew=!1)},3e3),o.value&&(o.value.totalPostCount=(o.value.totalPostCount||0)+1,o.value.todayPostCount=(o.value.todayPostCount||0)+1)
|
|
const s=n(t)
|
|
s&&c([s]).catch(e=>{})},f=e=>{const a=e.detail
|
|
if(!a||!a.reply||!a.postId)return
|
|
const t=a.reply,s=a.postId,o=l.value.findIndex(e=>e.id===s)
|
|
if(o<0)return
|
|
const n=l.value[o]
|
|
n.replies&&n.replies.findIndex(e=>e.id===t.id)>=0||(n.replyCount=(n.replyCount||0)+1,"lastReply"===u.value&&(l.value.splice(o,1),l.value.unshift(n)))},h=a=>{const t=a.detail
|
|
if(!t||!t.postId||!t.bundleId)return
|
|
const s=t.postId
|
|
if(t.bundleId!==e.value)return
|
|
const u=l.value.findIndex(e=>e.id===s)
|
|
u>=0&&(l.value.splice(u,1),o.value&&(o.value.totalPostCount=Math.max(0,(o.value.totalPostCount||0)-1)))},b=a=>{const t=a.detail
|
|
if(!(t&&t.replyId&&t.postId&&t.bundleId))return
|
|
const s=t.replyId,o=t.postId
|
|
if(t.bundleId!==e.value)return
|
|
const u=l.value.findIndex(e=>e.id===o)
|
|
if(u<0)return
|
|
const n=l.value[u]
|
|
if(n.replies){const e=n.replies.findIndex(e=>e.id===s)
|
|
e>=0&&n.replies.splice(e,1)}n.replyCount=Math.max(0,(n.replyCount||0)-1)},g=async()=>{if(e.value&&d.value!==e.value&&!p.value&&v.value){p.value=!0
|
|
try{await i(e.value),d.value=e.value}catch(C){}finally{p.value=!1}}},y=async()=>{if(d.value)try{await r(d.value),d.value=null}catch(C){}}
|
|
t(()=>v.value,a=>{a&&e.value&&setTimeout(()=>{v.value&&e.value&&g()},500)}),t(()=>e.value,async(e,a)=>{a&&a!==e&&d.value===a&&(await r(a),d.value=null),e&&v.value&&await g()}),x(()=>{window.addEventListener(N.NEW_POST,m),window.addEventListener(N.NEW_REPLY,f),window.addEventListener(N.DELETE_POST,h),window.addEventListener(N.DELETE_REPLY,b),v.value&&e.value&&g()}),s(async()=>{if(d.value)try{await Promise.race([y(),new Promise(e=>setTimeout(e,2e3))])}catch(C){}window.removeEventListener(N.NEW_POST,m),window.removeEventListener(N.NEW_REPLY,f),window.removeEventListener(N.DELETE_POST,h),window.removeEventListener(N.DELETE_REPLY,b)})}(g,E,F,_,O),x(()=>{re()}),s(()=>{j.value.length>0&&(U.removeUsers(j.value),j.value=[])}),(e,a)=>(b(),o("div",Be,[u("div",Oe,[i(ce,{"bundle-id":g.value,"app-info":y.value,"forum-permission":F.value,"builtin-forum":P.value,onBack:ve,onHome:de},null,8,["bundle-id","app-info","forum-permission","builtin-forum"]),I.value?(b(),o("div",Ye,[...a[2]||(a[2]=[u("div",{class:"spinner"},null,-1),u("p",null,"加载中...",-1)])])):C.value?(b(),o("div",We,[u("p",null,d(C.value),1),u("button",{onClick:re,class:"btn btn-primary"},"重试")])):y.value?(b(),o("div",He,[i(p,{name:"post-form-slide"},{default:m(()=>[T.value?(b(),n(X,{key:0,mode:"post","max-image-count":Z.value,"max-file-count":ee.value,"max-image-size":ae.value,"max-file-size":le.value,"is-submitting":z.value,onSubmit:he,onCancel:be},null,8,["max-image-count","max-file-count","max-image-size","max-file-size","is-submitting"])):v("",!0)]),_:1}),i(Te,{posts:E.value,"sort-by":_.value,"show-post-form":T.value,"like-loading-post-id":D.value,onShowPostForm:a[0]||(a[0]=e=>T.value=!0),onSortChange:ie,onPostClick:pe,onLike:me,onDislike:fe,onReport:ge},null,8,["posts","sort-by","show-post-form","like-loading-post-id"])])):v("",!0)]),i(Q,{visible:se.value,"report-info":oe.value,onClose:a[1]||(a[1]=e=>se.value=!1),onSubmit:ye},null,8,["visible","report-info"]),Y.value?(b(),n(ze,{key:0,visible:K.value,progress:V.value,title:G.value,"status-text":G.value,error:J.value,completed:W.value,cancellable:H.value,onCancel:k(te).cancelUpload,onClose:k(te).closeProgress},null,8,["visible","progress","title","status-text","error","completed","cancellable","onCancel","onClose"])):v("",!0),i(A,{toasts:k(f).toasts.value,onRemove:k(f).removeToast},null,8,["toasts","onRemove"])]))}}),[["__scopeId","data-v-a16ca9d9"]])
|
|
export{qe as default}
|