mirror of
https://git-qiuchenly.yltfspace.com/QiuChenly/corepatch
synced 2025-11-26 06:36:14 +08:00
37 lines
7.9 KiB
JavaScript
37 lines
7.9 KiB
JavaScript
import{d as e,r as a,c as s,o as n,a as o,e as t,m as l,b as c,z as i,F as d,B as u,l as r,u as p,n as m,C as v,P as b,t as y,H as f,h as I}from"./CdD4XvnD.js"
|
|
import{c as h,_ as g,T as C,A as k,a as E}from"./BaSQ3xJt.js"
|
|
import{P}from"./CU438sNO.js"
|
|
import{g as w,F as q}from"./6K6b4Qy_.js"
|
|
const U={class:"discussion-forums-page"},L={class:"page-container"},A={key:0,class:"loading"},F={key:1,class:"error"},N={key:2,class:"builtin-forums-section"},_={key:0,class:"forums-grid builtin-grid"},j=["onClick"],R={class:"forum-icon-wrapper"},D={class:"forum-icon builtin-icon"},M=["src","alt","onError"],S={key:2,class:"icon-placeholder"},B={class:"forum-info"},G={class:"forum-name"},T={key:0,class:"forum-description"},$={key:1,class:"forum-stats"},x={class:"stat-item"},z={class:"stat-item"},H={key:1,class:"empty-state"},O={key:3,class:"app-forums-section"},J={key:0,class:"empty"},K={key:1},Q={class:"forums-grid"},V=["onClick"],W={class:"forum-icon-wrapper"},X={class:"forum-icon"},Y=["src","alt","onLoad","onError"],Z={class:"forum-info"},ee={class:"forum-name"},ae={class:"forum-bundle-id"},se={key:0,class:"forum-status-uninstalled"},ne={key:1,class:"forum-stats"},oe={class:"stat-item"},te={class:"stat-item"},le={key:2,class:"forum-status-disabled"},ce=["onClick","disabled"],ie=E(e({__name:"DiscussionForums",setup(e){const E=f(),ie=a([]),de=a([]),ue=a(!0),re=a(""),pe=h(),me=a(1),ve=a(20),be=s(()=>ie.value.length),ye=s(()=>Math.ceil(be.value/ve.value)),fe=s(()=>{const e=(me.value-1)*ve.value,a=e+ve.value
|
|
return ie.value.slice(e,a)}),Ie=async()=>{try{const e=(await k.getAllForums()).filter(e=>"builtin"===e.type||"created"===e.type)
|
|
e.sort((e,a)=>"builtin"===e.type&&"created"===a.type?-1:"created"===e.type&&"builtin"===a.type?1:e.name.localeCompare(a.name)),de.value=e,de.value.forEach(e=>{"created"===e.type&&e.iconId&&he(e.bundleId,e.iconId)})}catch(e){de.value=[]}},he=async(e,a)=>{const s=de.value.find(a=>a.bundleId===e)
|
|
if(s)try{const e=await k.getIcon(a,80,128,128)
|
|
s.iconUrl=e,s.iconLoaded=!0,s.iconError=!1}catch(n){s.iconError=!0,s.iconLoaded=!0}},ge=async(e=!1)=>{if(e){ue.value=!0,re.value=""
|
|
try{const e=(await k.getApps()).filter(e=>e.path&&e.path.length>0),a=new Set(e.map(e=>e.bundleId)),s=new Map
|
|
e.forEach(e=>{s.set(e.bundleId,e)})
|
|
const n=e.map(e=>e.bundleId),o=await k.getForumPermissionsBatch(n),t=new Map
|
|
o.forEach(e=>{t.set(e.bundleId,e)})
|
|
const l=[]
|
|
e.forEach(e=>{const a=t.get(e.bundleId)
|
|
a&&!a.enabled&&l.push({bundleId:e.bundleId,name:e.name,iconUrl:k.getAppIconUrl(e.bundleId),iconLoaded:!1,iconError:!1,enabled:!1,installed:!0,requested:a.hasRequest&&a.requestStatus===q.PENDING,todayPostCount:a.todayPostCount??0,totalPostCount:a.totalPostCount??0})})
|
|
let c=[],i=1,d=!0
|
|
for(;d;){const e=await k.getEnabledForums(i,ve.value)
|
|
c.push(...e.permissions),e.permissions.length<ve.value||0===e.permissions.length?d=!1:i++}const u=[]
|
|
c.forEach(e=>{const n=a.has(e.bundleId),o=s.get(e.bundleId)
|
|
u.push({bundleId:e.bundleId,name:e.appName,iconUrl:n&&o?k.getAppIconUrl(e.bundleId):"",iconLoaded:!1,iconError:!1,enabled:e.enabled,installed:n,iconId:e.iconId,requested:e.hasRequest&&e.requestStatus===q.PENDING,todayPostCount:e.todayPostCount??0,totalPostCount:e.totalPostCount??0})}),u.sort((e,a)=>e.installed&&!a.installed?-1:!e.installed&&a.installed?1:e.name.localeCompare(a.name))
|
|
const r=[...u,...l]
|
|
ie.value=r,r.forEach(e=>{!e.installed&&e.iconId&&(async(e,a)=>{const s=ie.value.find(a=>a.bundleId===e)
|
|
if(s)try{const e=await k.getIcon(a,80,128,128)
|
|
s.iconUrl=e,s.iconLoaded=!0,s.iconError=!1}catch(n){s.iconError=!0,s.iconLoaded=!0}})(e.bundleId,e.iconId)})}catch(a){re.value="加载应用列表失败,请检查服务是否运行",ie.value=[]}finally{ue.value=!1}}},Ce=e=>{const a=de.value.find(a=>a.bundleId===e)
|
|
if(a&&("builtin"===a.type||"created"===a.type))return void E.push(`/discussion/${e}`)
|
|
const s=ie.value.find(a=>a.bundleId===e)
|
|
s&&s.enabled&&E.push(`/discussion/${e}`)},ke=e=>{me.value=e}
|
|
return n(async()=>{await Ie(),await ge(!0)}),(e,a)=>(I(),o(d,null,[t("div",U,[t("div",L,[a[7]||(a[7]=t("div",{class:"page-header"},[t("h1",{class:"page-title"},"讨论区"),t("p",{class:"page-description"},"浏览和参与已安装应用的讨论")],-1)),ue.value?(I(),o("div",A,[...a[1]||(a[1]=[t("div",{class:"spinner"},null,-1),t("p",null,"加载板块中...",-1)])])):re.value?(I(),o("div",F,[t("p",null,i(re.value),1),t("button",{onClick:a[0]||(a[0]=()=>{Ie(),ge(!0)}),class:"btn btn-primary"},"重试")])):c("",!0),ue.value||re.value?c("",!0):(I(),o("div",N,[a[3]||(a[3]=t("h2",{class:"section-title"},"内置板块",-1)),de.value.length>0?(I(),o("div",_,[(I(!0),o(d,null,u(de.value,e=>(I(),o("div",{key:e.bundleId,class:"forum-card builtin-forum-card",onClick:a=>Ce(e.bundleId)},[t("div",R,[t("div",D,["builtin"===e.type?(I(),r(g,{key:0,icon:p(w)(e.bundleId),class:"builtin-icon-svg"},null,8,["icon"])):"created"===e.type&&e.iconUrl?(I(),o("img",{key:1,src:e.iconUrl,alt:e.name,class:"created-icon-img",onError:a=>e.iconError=!0},null,40,M)):(I(),o("div",S,i(e.name.charAt(0).toUpperCase()),1))])]),t("div",B,[t("h3",G,i(e.name),1),e.description?(I(),o("p",T,i(e.description),1)):c("",!0),void 0!==e.todayPostCount||void 0!==e.totalPostCount?(I(),o("div",$,[t("span",x,[l(g,{icon:"fluent-color:news-28",class:"stat-icon"}),t("span",null,"今日发帖:"+i(e.todayPostCount??0),1)]),t("span",z,[l(g,{icon:"fluent-color:reward-24",class:"stat-icon"}),t("span",null,"总发帖数:"+i(e.totalPostCount??0),1)])])):c("",!0)])],8,j))),128))])):(I(),o("div",H,[l(g,{icon:"mdi:forum-outline",class:"empty-icon"}),a[2]||(a[2]=t("p",null,"暂无内置板块",-1))]))])),ue.value||re.value?c("",!0):(I(),o("div",O,[a[6]||(a[6]=t("h2",{class:"section-title"},"应用板块",-1)),0===ie.value.length?(I(),o("div",J,[l(g,{icon:"fluent-color:chat-bubbles-question-24",class:"empty-icon"}),a[4]||(a[4]=t("p",null,"没有找到讨论板块",-1)),a[5]||(a[5]=t("p",{class:"empty-hint"},"系统中没有已安装的应用",-1))])):(I(),o("div",K,[t("div",Q,[(I(!0),o(d,null,u(fe.value,e=>(I(),o("div",{key:e.bundleId,class:m(["forum-card",{disabled:!e.enabled}]),onClick:a=>e.enabled?Ce(e.bundleId):null},[t("div",W,[t("div",X,[e.iconUrl?v((I(),o("img",{key:0,src:e.iconUrl,alt:e.name,onLoad:a=>(e=>{const a=ie.value.find(a=>a.bundleId===e)
|
|
a&&(a.iconLoaded=!0)})(e.bundleId),onError:a=>(e=>{const a=ie.value.find(a=>a.bundleId===e)
|
|
a&&(a.iconError=!0,a.iconLoaded=!0)})(e.bundleId)},null,40,Y)),[[b,e.iconLoaded&&!e.iconError]]):c("",!0),v(t("div",{class:"icon-placeholder"},i(e.name.charAt(0).toUpperCase()),513),[[b,!e.iconUrl||!e.iconLoaded||e.iconError]])])]),t("div",Z,[t("h3",ee,i(e.name),1),t("p",ae,i(e.bundleId),1),e.installed?c("",!0):(I(),o("p",se,"未安装")),!e.enabled||void 0===e.todayPostCount&&void 0===e.totalPostCount?c("",!0):(I(),o("div",ne,[t("span",oe,[l(g,{icon:"fluent-color:news-28",class:"stat-icon"}),t("span",null,"今日发帖:"+i(e.todayPostCount??0),1)]),t("span",te,[l(g,{icon:"fluent-color:reward-24",class:"stat-icon"}),t("span",null,"总发帖数:"+i(e.totalPostCount??0),1)])])),e.enabled?c("",!0):(I(),o("p",le,"未开放")),!e.enabled&&e.installed?(I(),o("button",{key:3,class:"request-open-btn",onClick:y(a=>(async e=>{var a,s
|
|
const n=ie.value.find(a=>a.bundleId===e)
|
|
if(n&&!n.requested)try{const a=await k.requestForumOpen(e,n.name)
|
|
a.success?(n.requested=!0,pe.success("申请提交成功,等待管理员审核")):pe.error(a.message||"申请失败,请稍后重试")}catch(o){const e=(null==(s=null==(a=o.response)?void 0:a.data)?void 0:s.message)||o.message||"申请失败,请稍后重试"
|
|
pe.error(e)}})(e.bundleId),["stop"]),disabled:e.requested},i(e.requested?"等待申请结果中":"申请开放"),9,ce)):c("",!0)])],10,V))),128))]),ye.value>1?(I(),r(P,{key:0,"current-page":me.value,"total-pages":ye.value,total:be.value,onPageChange:ke},null,8,["current-page","total-pages","total"])):c("",!0)]))]))])]),l(C,{toasts:p(pe).toasts.value,onRemove:p(pe).removeToast},null,8,["toasts","onRemove"])],64))}}),[["__scopeId","data-v-2d729ae4"]])
|
|
export{ie as default}
|