Files
CoreInject/frontend/dist/assets/CBlhC2CZ.js
2025-11-14 04:00:32 +08:00

94 lines
28 KiB
JavaScript

import{d as e,r as a,f as l,o as s,k as t,c as n,l as i,g as o,m as c,F as u,z as v,x as d,B as r,u as m,J as p,e as f,b as y,C as g,D as h,t as b,w,E as k}from"./CD7TqNEc.js"
import{c as C,e as I,_ as T,M as x,A as P,d as _,a as N,u as U,b as V,T as M}from"./DTEPVF5R.js"
import{A as z}from"./DiuQ-zyp.js"
import{P as $}from"./Cq_Y6BRc.js"
import{P as R}from"./BvcmZ1eR.js"
import{f as A,u as F,E as j}from"./D0Zic1w3.js"
import{I as E}from"./CugD9gGX.js"
const D={class:"my-posts-list"},L={key:0,class:"loading-state"},q={key:1,class:"empty-state"},S={key:2,class:"posts-list"},B={class:"post-header"},O=["onClick"],J={class:"post-meta"},G={class:"post-forum"},H={class:"post-time"},K={class:"post-content"},Q={class:"post-footer"},W={class:"post-stats"},X={class:"stat-item"},Y={class:"stat-item"},Z={class:"post-actions"},ee=["onClick"],ae=["onClick"],le=N(e({__name:"MyPostsList",setup(e){const y=p(),g=C(),h=_(),b=I(),w=a([]),k=a(1),N=a(20),U=a(0),V=a(!1),M=a(!1),z=a(null),F=a(!1),j=l(()=>Math.ceil(U.value/N.value)),E=async()=>{var e,a
V.value=!0
try{const e=await P.getMyPosts(k.value,N.value)
e.success&&e.data?(w.value=e.data.posts||[],U.value=e.data.total||0):(g.error(e.message||"加载帖子列表失败",3e3),w.value=[],U.value=0)}catch(l){g.error((null==(a=null==(e=l.response)?void 0:e.data)?void 0:a.message)||l.message||"加载帖子列表失败",3e3),w.value=[],U.value=0}finally{V.value=!1}},le=e=>{k.value=e,E()},se=async e=>{var a,l
if(z.value){h.show("保存中...")
try{const a=await P.updateForumPost(z.value.bundleId,z.value.id,e.title,e.content,e.attachmentIds)
a.success?(g.success("帖子更新成功",2e3),M.value=!1,z.value=null,await E()):g.error(a.message||"更新帖子失败",3e3)}catch(s){g.error((null==(l=null==(a=s.response)?void 0:a.data)?void 0:l.message)||s.message||"更新帖子失败",3e3)}finally{h.hide()}}},te=()=>{M.value=!1,z.value=null}
return s(()=>{E()}),(e,a)=>(f(),t("div",D,[V.value?(f(),t("div",L,[...a[1]||(a[1]=[c("div",{class:"spinner"},null,-1),c("p",null,"加载中...",-1)])])):0===w.value.length?(f(),t("div",q,[o(T,{icon:"mdi:post-outline",class:"empty-icon"}),a[2]||(a[2]=c("p",null,"暂无帖子",-1))])):(f(),t("div",S,[(f(!0),t(u,null,v(w.value,e=>{return f(),t("div",{key:e.id,class:"post-item"},[c("div",B,[c("h3",{class:"post-title",onClick:a=>(e=>{y.push(`/discussion/${e.bundleId}/post/${e.id}`)})(e)},d(e.title),9,O),c("div",J,[c("span",G,d(e.forumName),1),c("span",H,d((l=e.publishTime,A(l))),1)])]),c("div",K,d(e.content),1),c("div",Q,[c("div",W,[c("span",X,[o(T,{icon:"mdi:comment-outline"}),r(" "+d(e.replyCount),1)]),c("span",Y,[o(T,{icon:"mdi:thumb-up-outline"}),r(" "+d(e.likeCount),1)])]),c("div",Z,[c("button",{class:"action-btn edit-btn",onClick:a=>(e=>{F.value=!0,M.value=!0,z.value={id:e.id,bundleId:e.bundleId,title:e.title,content:e.content,attachments:(e.attachments||[]).map(e=>({id:e.id,name:e.name,type:"image"===e.type?"image":"file",size:e.size}))},F.value=!1})(e)},[o(T,{icon:"mdi:pencil"}),a[3]||(a[3]=r(" 编辑 ",-1))],8,ee),c("button",{class:"action-btn delete-btn",onClick:a=>(async e=>{var a,l
if(await b.show({title:"删除帖子",message:`确定要删除帖子 "${e.title}" 吗?删除后无法恢复。`,type:"danger",confirmText:"删除",cancelText:"取消"})){h.show("删除中...")
try{const a=await P.deleteForumPost(e.bundleId,e.id)
a.success?(g.success("帖子删除成功",2e3),await E()):g.error(a.message||"删除帖子失败",3e3)}catch(s){g.error((null==(l=null==(a=s.response)?void 0:a.data)?void 0:l.message)||s.message||"删除帖子失败",3e3)}finally{h.hide()}}})(e)},[o(T,{icon:"mdi:delete-outline"}),a[4]||(a[4]=r(" 删除 ",-1))],8,ae)])])])
var l}),128))])),j.value>1?(f(),n($,{key:3,"current-page":k.value,"total-pages":j.value,total:U.value,onPageChange:le},null,8,["current-page","total-pages","total"])):i("",!0),o(R,{visible:M.value,"onUpdate:visible":a[0]||(a[0]=e=>M.value=e),"post-data":z.value,loading:F.value,onConfirm:se,onCancel:te},null,8,["visible","post-data","loading"]),o(x,{visible:m(b).visible.value,title:m(b).config.value.title||"",message:m(b).config.value.message||"",type:"danger"===m(b).config.value.type?"error":m(b).config.value.type||"warning","confirm-text":m(b).config.value.confirmText,"cancel-text":m(b).config.value.cancelText,onConfirm:m(b).handleConfirm,onCancel:m(b).handleCancel},null,8,["visible","title","message","type","confirm-text","cancel-text","onConfirm","onCancel"])]))}}),[["__scopeId","data-v-7a5af24e"]]),se={class:"my-replies-list"},te={key:0,class:"loading-state"},ne={key:1,class:"empty-state"},ie={key:2,class:"replies-list"},oe={class:"reply-header"},ce={class:"reply-title-section"},ue=["onClick"],ve={class:"reply-meta"},de={key:0,class:"reply-to-info"},re={class:"reply-time"},me={key:0,class:"reply-edit-form"},pe={key:1,class:"edit-new-attachments"},fe=["src","onClick"],ye=["onClick"],ge=["onClick"],he={class:"edit-attachment-actions"},be={class:"edit-reply-actions"},we=["onClick"],ke={class:"reply-content"},Ce={class:"reply-footer"},Ie={class:"reply-info"},Te={key:0,class:"attachment-info"},xe={key:1,class:"no-attachment-info"},Pe={class:"reply-actions"},_e=["onClick"],Ne=["onClick"],Ue=["onClick"],Ve=N(e({__name:"MyRepliesList",setup(e){const w=p(),k=C(),N=_(),U=I(),V=a([]),M=a(1),z=a(20),R=a(0),D=a(!1),L=a(null),q=a(""),S=a([]),B=a([]),O=a([]),J=a(null),G=a(null),H=F(),K=l(()=>Math.ceil(R.value/z.value)),Q=async()=>{var e,a
D.value=!0
try{const e=await P.getMyReplies(M.value,z.value)
e.success&&e.data?(V.value=e.data.replies||[],R.value=e.data.total||0):(k.error(e.message||"加载回复列表失败",3e3),V.value=[],R.value=0)}catch(l){k.error((null==(a=null==(e=l.response)?void 0:e.data)?void 0:a.message)||l.message||"加载回复列表失败",3e3),V.value=[],R.value=0}finally{D.value=!1}},W=e=>{M.value=e,Q()},X=e=>{w.push(`/discussion/${e.bundleId}/post/${e.postId}`)},Y=()=>{L.value=null,q.value="",S.value=[],B.value=[],O.value=[]},Z=e=>{S.value=S.value.filter(a=>a.id!==e)},ee=async e=>{const a=S.value.filter(e=>"image"===e.type).findIndex(a=>a.id===e)
a>=0&&await H.handleImageClick(S.value,a)},ae=e=>{const a=e.target,l=Array.from(a.files||[])
for(const s of l){if(B.value.length>=3){k.error("图片数量不能超过3张")
break}if(s.size>10485760){k.error("单张图片大小不能超过10MB")
continue}const e=new FileReader
e.onload=e=>{var a
const l=B.value.findIndex(e=>e.file===s)
l>=0&&(B.value[l].preview=null==(a=e.target)?void 0:a.result)},e.readAsDataURL(s),B.value.push({file:s,preview:""})}a.value=""},le=e=>{const a=e.target,l=Array.from(a.files||[])
for(const s of l){if(O.value.length>=3){k.error("文件数量不能超过3个")
break}s.size>20971520?k.error("单个文件大小不能超过20MB"):O.value.push({file:s})}a.value=""}
return s(()=>{Q()}),(e,a)=>(f(),t("div",se,[D.value?(f(),t("div",te,[...a[3]||(a[3]=[c("div",{class:"spinner"},null,-1),c("p",null,"加载中...",-1)])])):0===V.value.length?(f(),t("div",ne,[o(T,{icon:"mdi:comment-outline",class:"empty-icon"}),a[4]||(a[4]=c("p",null,"暂无回复",-1))])):(f(),t("div",ie,[(f(!0),t(u,null,v(V.value,e=>{return f(),t("div",{key:e.id,class:"reply-item"},[c("div",oe,[c("div",ce,[c("h4",{class:"reply-post-title",onClick:a=>X(e)},d(e.postTitle),9,ue),c("div",ve,[c("span",{class:y(["reply-type-badge","nested"===e.type?"nested":"main"])},d("nested"===e.type?"楼中楼":"主回复"),3),e.replyToUserName?(f(),t("span",de,[o(T,{icon:"mdi:reply"}),r(" 回复 @"+d(e.replyToUserName),1)])):i("",!0)])]),c("span",re,d((s=e.replyTime,A(s))),1)]),L.value===e.id?(f(),t("div",me,[g(c("textarea",{"onUpdate:modelValue":a[0]||(a[0]=e=>q.value=e),class:"reply-textarea",rows:"4",maxlength:"5000"},null,512),[[h,q.value]]),S.value.length>0?(f(),n(j,{key:0,attachments:S.value,onRemove:Z,onImageClick:ee},null,8,["attachments"])):i("",!0),B.value.length>0||O.value.length>0?(f(),t("div",pe,[(f(!0),t(u,null,v(B.value,(e,a)=>(f(),t("div",{key:`img-${a}`,class:"edit-attachment-preview"},[e.preview?(f(),t("img",{key:0,src:e.preview,alt:"预览",onClick:e=>(e=>{const a=[]
B.value.forEach(e=>{e.preview&&a.push({url:e.preview,size:e.file.size})}),H.previewImagesInfo.value=a,H.previewIndex.value=e,H.previewVisible.value=!0,(async()=>{for(const e of S.value.filter(e=>"image"===e.type))try{const l=await P.getAttachmentImage(e.id)
l&&a.push({url:l,size:e.size})}catch(l){}H.previewImagesInfo.value=a,H.previewIndex.value=e,H.previewVisible.value=!0})()})(a),class:"clickable-image"},null,8,fe)):i("",!0),c("button",{class:"remove-attachment-btn",onClick:b(e=>{return l=a,void B.value.splice(l,1)
var l},["stop"])},[o(T,{icon:"mdi:close"})],8,ye)]))),128)),(f(!0),t(u,null,v(O.value,(e,a)=>(f(),t("div",{key:`file-${a}`,class:"edit-attachment-preview file"},[o(T,{icon:"mdi:file"}),c("span",null,d(e.file.name),1),c("button",{class:"remove-attachment-btn",onClick:e=>{return l=a,void O.value.splice(l,1)
var l}},[o(T,{icon:"mdi:close"})],8,ge)]))),128))])):i("",!0),c("div",he,[c("input",{ref_for:!0,ref_key:"editImageInput",ref:J,type:"file",accept:"image/*",multiple:"",onChange:ae,style:{display:"none"}},null,544),c("input",{ref_for:!0,ref_key:"editFileInput",ref:G,type:"file",multiple:"",onChange:le,style:{display:"none"}},null,544),c("button",{class:"upload-btn small",onClick:a[1]||(a[1]=e=>{var a
return null==(a=J.value)?void 0:a.click()})},[o(T,{icon:"mdi:image-outline"}),a[5]||(a[5]=r(" 添加图片 ",-1))]),c("button",{class:"upload-btn small",onClick:a[2]||(a[2]=e=>{var a
return null==(a=G.value)?void 0:a.click()})},[o(T,{icon:"mdi:file-outline"}),a[6]||(a[6]=r(" 添加文件 ",-1))])]),c("div",be,[c("button",{class:"cancel-btn",onClick:Y},"取消"),c("button",{class:"submit-reply-btn small",onClick:a=>(async e=>{var a,l
if(q.value.trim()||0!==S.value.length||0!==B.value.length||0!==O.value.length){N.show("保存中...")
try{const a=[...S.value.map(e=>e.id)]
for(const e of B.value){N.show(`上传图片中... (${B.value.indexOf(e)+1}/${B.value.length})`)
const l=await P.uploadImageAttachment(e.file)
if(!l.success||!l.attachmentId)throw new Error(l.message||`图片上传失败: ${e.file.name}`)
a.push(l.attachmentId)}for(const e of O.value){N.show(`上传文件中... (${O.value.indexOf(e)+1}/${O.value.length})`)
const l=await P.uploadFileAttachment(e.file)
if(!l.success||!l.attachmentId)throw new Error(l.message||`文件上传失败: ${e.file.name}`)
a.push(l.attachmentId)}N.show("更新回复中...")
const l=await P.updateForumReply(e.bundleId,e.postId,e.id,q.value.trim(),a.length>0?a:void 0)
l.success?(k.success("回复更新成功",2e3),Y(),await Q()):k.error(l.message||"更新回复失败",3e3)}catch(s){k.error(s.message||(null==(l=null==(a=s.response)?void 0:a.data)?void 0:l.message)||"更新回复失败",3e3)}finally{N.hide()}}else k.error("回复内容不能为空",2e3)})(e)},"保存",8,we)])])):(f(),t(u,{key:1},[c("div",ke,d((l=e.content,l?l.length<=100?l:l.substring(0,100)+"...":"")),1),c("div",Ce,[c("div",Ie,[e.hasAttachments?(f(),t("span",Te,[o(T,{icon:"mdi:paperclip"}),r(" "+d(e.attachmentCount)+" 个附件 ",1)])):(f(),t("span",xe,[o(T,{icon:"mdi:paperclip-off"}),a[7]||(a[7]=r(" 无附件 ",-1))]))]),c("div",Pe,[c("button",{class:"action-btn view-btn",onClick:a=>X(e)},[o(T,{icon:"mdi:eye-outline"}),a[8]||(a[8]=r(" 查看 ",-1))],8,_e),c("button",{class:"action-btn edit-btn",onClick:a=>(async e=>{if(L.value=e.id,q.value=e.content,e.hasAttachments)try{const a=await P.getForumPost(e.bundleId,e.postId,1,1e3)
if(a&&a.replies){let l=null
if("nested"===e.type){for(const s of a.replies)if(s.nestedReplies&&(l=s.nestedReplies.find(a=>a.id===e.id),l))break}else l=a.replies.find(a=>a.id===e.id)
l&&l.attachments?S.value=l.attachments.map(e=>({id:e.id,name:e.name,type:"image"===e.type?"image":"file",size:e.size})):S.value=[]}else S.value=[]}catch(a){S.value=[]}else S.value=[]
B.value=[],O.value=[]})(e)},[o(T,{icon:"mdi:pencil"}),a[9]||(a[9]=r(" 编辑 ",-1))],8,Ne),c("button",{class:"action-btn delete-btn",onClick:a=>(async e=>{var a,l
if(await U.show({title:"删除回复",message:"确定要删除这条回复吗?删除后无法恢复。",type:"danger",confirmText:"删除",cancelText:"取消"})){N.show("删除中...")
try{const a=await P.deleteForumReply(e.bundleId,e.postId,e.id)
a.success?(k.success("回复删除成功",2e3),await Q()):k.error(a.message||"删除回复失败",3e3)}catch(s){k.error((null==(l=null==(a=s.response)?void 0:a.data)?void 0:l.message)||s.message||"删除回复失败",3e3)}finally{N.hide()}}})(e)},[o(T,{icon:"mdi:delete-outline"}),a[10]||(a[10]=r(" 删除 ",-1))],8,Ue)])])],64))])
var l,s}),128))])),K.value>1?(f(),n($,{key:3,"current-page":M.value,"total-pages":K.value,total:R.value,onPageChange:W},null,8,["current-page","total-pages","total"])):i("",!0),o(x,{visible:m(U).visible.value,title:m(U).config.value.title||"",message:m(U).config.value.message||"",type:"danger"===m(U).config.value.type?"error":m(U).config.value.type||"warning","confirm-text":m(U).config.value.confirmText,"cancel-text":m(U).config.value.cancelText,onConfirm:m(U).handleConfirm,onCancel:m(U).handleCancel},null,8,["visible","title","message","type","confirm-text","cancel-text","onConfirm","onCancel"]),o(E,{visible:m(H).previewVisible.value,"images-info":m(H).previewImagesInfo.value,"initial-index":m(H).previewIndex.value,onClose:m(H).closePreview},null,8,["visible","images-info","initial-index","onClose"])]))}}),[["__scopeId","data-v-840e8a08"]]),Me={class:"my-posts-and-replies"},ze={class:"tabs"},$e={class:"tab-content"},Re=N(e({__name:"MyPostsAndReplies",setup(e){const l=a("posts")
return(e,a)=>(f(),t("div",Me,[c("div",ze,[c("button",{class:y(["tab-button",{active:"posts"===l.value}]),onClick:a[0]||(a[0]=e=>l.value="posts")},[o(T,{icon:"mdi:post-outline"}),a[2]||(a[2]=r(" 我的帖子 ",-1))],2),c("button",{class:y(["tab-button",{active:"replies"===l.value}]),onClick:a[1]||(a[1]=e=>l.value="replies")},[o(T,{icon:"mdi:comment-outline"}),a[3]||(a[3]=r(" 我的回复 ",-1))],2)]),c("div",$e,["posts"===l.value?(f(),n(le,{key:0})):(f(),n(Ve,{key:1}))])]))}}),[["__scopeId","data-v-4bd658f2"]]),Ae={class:"profile-page"},Fe={class:"profile-hero"},je={class:"hero-content"},Ee={class:"user-avatar-large"},De={class:"user-info-main"},Le={class:"user-name"},qe={class:"user-username"},Se={class:"user-badges"},Be={class:"hero-actions"},Oe={class:"profile-content"},Je={class:"info-card"},Ge={class:"card-header"},He={class:"card-content"},Ke={class:"info-grid"},Qe={class:"info-item"},We={class:"info-icon"},Xe={class:"info-content"},Ye={class:"value"},Ze={class:"info-item"},ea={class:"info-icon"},aa={class:"info-content"},la={class:"value"},sa={class:"info-item"},ta={class:"info-icon"},na={class:"info-content"},ia={class:"value"},oa={class:"info-item"},ca={class:"info-icon"},ua={class:"info-content"},va={class:"value"},da={key:0,class:"info-card"},ra={class:"card-header"},ma={class:"card-content"},pa={class:"titles-list"},fa={class:"info-card"},ya={class:"card-header"},ga={class:"card-content"},ha={key:0,class:"devices-grid"},ba={class:"device-icon"},wa={class:"device-info"},ka={class:"device-name"},Ca={class:"device-details"},Ia={class:"device-spec"},Ta={class:"device-actions"},xa=["onClick"],Pa=["onClick"],_a={key:1,class:"empty-devices"},Na={class:"device-actions-footer"},Ua={class:"info-card full-width"},Va={class:"card-header"},Ma={class:"card-content"},za={class:"modal-dialog profile-edit-dialog"},$a={class:"modal-header"},Ra={class:"modal-content"},Aa={class:"avatar-section-wrapper"},Fa={class:"form-group"},ja={class:"form-group"},Ea={class:"form-group"},Da={class:"modal-footer"},La=["disabled"],qa={class:"modal-dialog"},Sa={class:"modal-header"},Ba={class:"modal-content"},Oa={class:"form-group"},Ja={class:"form-group"},Ga=["value"],Ha={class:"form-group"},Ka=["value"],Qa={class:"form-group"},Wa=["value"],Xa={class:"modal-footer"},Ya={class:"modal-dialog"},Za={class:"modal-header"},el={class:"form-group"},al={class:"form-group"},ll={class:"form-group"},sl={class:"modal-footer"},tl=["disabled"],nl=N(e({__name:"Profile",setup(e){const{user:l,checkAuthStatus:n}=U(),{toasts:p,success:_,error:N,info:$,removeToast:R}=C(),A=I(),F=a(!1),j=a({nickName:"",email:"",avatar:"",age:0}),E=a(!1),D=a(!1),L=a(null),q=a({deviceName:"",deviceType:"",systemType:"",processorType:""}),S=a([]),B=a([]),O=a([]),J=a(!1),G=a({oldPassword:"",newPassword:"",confirmPassword:""}),H=a(!1),K=e=>{if(!e)return"用户"
switch(e){case"admin":return"管理员"
case"qiuchenly":return"超级管理员"
default:return"用户"}},Q=e=>{switch(e){case"admin":return"role-admin"
case"qiuchenly":return"role-super"
default:return"role-user"}},W=e=>{switch(e){case"admin":return"mdi:shield-account"
case"qiuchenly":return"mdi:shield-crown"
default:return"mdi:account"}},X=()=>{var e,a
return(null==(e=l.value)?void 0:e.nickName)||(null==(a=l.value)?void 0:a.username)||"User"},Y=()=>{l.value&&(j.value={nickName:l.value.nickName||"",email:l.value.email||"",avatar:l.value.avatar||"",age:l.value.age??0}),F.value=!0},Z=async()=>{var e,a
if(l.value){E.value=!0
try{const e={}
void 0!==j.value.nickName&&(e.nickName=j.value.nickName),void 0!==j.value.email&&(e.email=j.value.email),void 0!==j.value.avatar&&(e.avatar=j.value.avatar),void 0!==j.value.age&&(e.age=j.value.age)
const a=await P.updateProfile(e)
a.success?(_("个人信息更新成功",2e3),F.value=!1,await n()):N(a.message||"更新失败",3e3)}catch(s){N((null==(a=null==(e=s.response)?void 0:e.data)?void 0:a.message)||s.message||"更新失败",3e3)}finally{E.value=!1}}},ee=a(!1),ae=async()=>{var e,a,s
if(!(q.value.deviceName&&q.value.deviceType&&q.value.systemType&&q.value.processorType))return void N("请填写完整的设备信息",2e3)
const t={deviceName:q.value.deviceName,deviceType:q.value.deviceType,systemType:q.value.systemType,processorType:q.value.processorType}
try{const a=[...(null==(e=l.value)?void 0:e.devices)||[]]
null!==L.value?a[L.value]=t:a.push(t)
const s=await P.updateProfile({devices:a})
s.success?(_(null!==L.value?"设备更新成功":"设备添加成功",2e3),D.value=!1,L.value=null,ee.value=!1,await n()):N(s.message||"保存失败",3e3)}catch(i){N((null==(s=null==(a=i.response)?void 0:a.data)?void 0:s.message)||i.message||"保存失败",3e3)}},le=async()=>{var e,a,l
if(G.value.oldPassword&&G.value.newPassword)if(G.value.newPassword===G.value.confirmPassword)if(G.value.newPassword.length<6)N("新密码长度至少为6位",2e3)
else{H.value=!0
try{const a=await P.changePassword(G.value.oldPassword,G.value.newPassword)
a.success?(_("密码修改成功,请重新登录",2e3),J.value=!1,G.value={oldPassword:"",newPassword:"",confirmPassword:""},(null==(e=a.data)?void 0:e.requireReLogin)&&(localStorage.removeItem("token"),localStorage.removeItem("refreshToken"),window.dispatchEvent(new CustomEvent("auth:unauthorized")),setTimeout(()=>{window.location.href="/"},2e3))):N(a.message||"密码修改失败",3e3)}catch(s){N((null==(l=null==(a=s.response)?void 0:a.data)?void 0:l.message)||s.message||"密码修改失败",3e3)}finally{H.value=!1}}else N("两次输入的新密码不一致",2e3)
else N("请填写完整信息",2e3)},se=a(null),te=e=>{se.value=e.target},ne=(e,a)=>{se.value===a.target&&("edit"===e?F.value=!1:"device"===e?D.value=!1:"password"===e&&(J.value=!1)),se.value=null}
return w(F,e=>{e&&Y()}),s(async()=>{await(async()=>{try{const[e,a,l]=await Promise.all([P.getDeviceConfigs("device_type"),P.getDeviceConfigs("system_type"),P.getDeviceConfigs("processor_type")])
e.success&&e.data&&(S.value=e.data.map(e=>({label:e,value:e}))),a.success&&a.data&&(B.value=a.data.map(e=>({label:e,value:e}))),l.success&&l.data&&(O.value=l.data.map(e=>({label:e,value:e})))}catch(e){}})()}),(e,a)=>{var s,w,C,I,U,$,se,ie,oe,ce,ue,ve,de,re,me
return f(),t("div",Ae,[c("div",Fe,[a[27]||(a[27]=c("div",{class:"hero-background"},null,-1)),c("div",je,[c("div",Ee,[o(V,{userId:null==(s=m(l))?void 0:s._id,"user-name":X(),size:"large",width:120,height:120},null,8,["userId","user-name"])]),c("div",De,[c("h1",Le,d((null==(w=m(l))?void 0:w.nickName)||(null==(C=m(l))?void 0:C.username)||"用户"),1),c("p",qe,"@"+d(null==(I=m(l))?void 0:I.username),1),c("div",Se,[c("span",{class:y(["role-badge",Q(null==(U=m(l))?void 0:U.role)])},[o(T,{icon:W(null==($=m(l))?void 0:$.role)},null,8,["icon"]),c("span",null,d(K(null==(se=m(l))?void 0:se.role)),1)],2),c("span",{class:y(["status-badge","active"===(null==(ie=m(l))?void 0:ie.status)?"active":"inactive"])},[a[24]||(a[24]=c("span",{class:"status-dot"},null,-1)),c("span",null,d("active"===(null==(oe=m(l))?void 0:oe.status)?"正常":"禁用"),1)],2)])]),c("div",Be,[c("button",{onClick:Y,class:"btn-action btn-primary"},[o(T,{icon:"mdi:pencil"}),a[25]||(a[25]=r(" 编辑资料 ",-1))]),c("button",{onClick:a[0]||(a[0]=e=>J.value=!0),class:"btn-action btn-secondary"},[o(T,{icon:"mdi:lock-reset"}),a[26]||(a[26]=r(" 修改密码 ",-1))])])])]),c("div",Oe,[c("div",Je,[c("div",Ge,[o(T,{icon:"mdi:information-outline",class:"card-icon"}),a[28]||(a[28]=c("h2",null,"基本信息",-1))]),c("div",He,[c("div",Ke,[c("div",Qe,[c("div",We,[o(T,{icon:"mdi:account"})]),c("div",Xe,[a[29]||(a[29]=c("span",{class:"label"},"用户名",-1)),c("span",Ye,d(null==(ce=m(l))?void 0:ce.username),1)])]),c("div",Ze,[c("div",ea,[o(T,{icon:"mdi:email-outline"})]),c("div",aa,[a[30]||(a[30]=c("span",{class:"label"},"邮箱",-1)),c("span",la,d((null==(ue=m(l))?void 0:ue.email)||"未设置"),1)])]),c("div",sa,[c("div",ta,[o(T,{icon:"mdi:star-outline"})]),c("div",na,[a[31]||(a[31]=c("span",{class:"label"},"经验值",-1)),c("span",ia,d((null==(ve=m(l))?void 0:ve.exp)??0),1)])]),c("div",oa,[c("div",ca,[o(T,{icon:"mdi:trending-up"})]),c("div",ua,[a[32]||(a[32]=c("span",{class:"label"},"等级",-1)),c("span",va,"Lv."+d((null==(de=m(l))?void 0:de.level)??0),1)])])])])]),(null==(re=m(l))?void 0:re.titles)&&m(l).titles.length>0?(f(),t("div",da,[c("div",ra,[o(T,{icon:"mdi:medal-outline",class:"card-icon"}),a[33]||(a[33]=c("h2",null,"头衔",-1))]),c("div",ma,[c("div",pa,[(f(!0),t(u,null,v(m(l).titles,(e,a)=>(f(),t("span",{key:a,class:"title-badge"},[o(T,{icon:"mdi:medal"}),r(" "+d(e),1)]))),128))])])])):i("",!0),c("div",fa,[c("div",ya,[o(T,{icon:"mdi:devices",class:"card-icon"}),a[34]||(a[34]=c("h2",null,"我的设备",-1))]),c("div",ga,[(null==(me=m(l))?void 0:me.devices)&&m(l).devices.length>0?(f(),t("div",ha,[(f(!0),t(u,null,v(m(l).devices,(e,a)=>(f(),t("div",{key:a,class:"device-card"},[c("div",ba,[o(T,{icon:"mdi:laptop"})]),c("div",wa,[c("h3",ka,d(e.deviceName),1),c("p",Ca,d(e.deviceType),1),c("p",Ia,d(e.systemType)+" · "+d(e.processorType),1)]),c("div",Ta,[c("button",{onClick:e=>((e,a=!0)=>{var s,t
if(!a)return
const n=null==(t=null==(s=l.value)?void 0:s.devices)?void 0:t[e]
n&&(ee.value=a,L.value=e,q.value={...n},D.value=!0)})(a,!0),class:"btn-icon",title:"编辑"},[o(T,{icon:"mdi:pencil"})],8,xa),c("button",{onClick:e=>(async(e,a=!0)=>{var s,t,i,o
if(a&&(null==(s=l.value)?void 0:s.devices)&&await A.show({title:"确认删除",message:`确定要删除设备 "${null==(t=l.value.devices[e])?void 0:t.deviceName}" 吗?`,type:"warning",confirmText:"删除",cancelText:"取消"}))try{const a=[...l.value.devices||[]]
a.splice(e,1)
const s=await P.updateProfile({devices:a})
s.success?(_("设备删除成功",2e3),await n()):N(s.message||"删除失败",3e3)}catch(c){N((null==(o=null==(i=c.response)?void 0:i.data)?void 0:o.message)||c.message||"删除失败",3e3)}})(a,!0),class:"btn-icon danger",title:"删除"},[o(T,{icon:"mdi:delete"})],8,Pa)])]))),128))])):(f(),t("div",_a,[o(T,{icon:"mdi:devices",class:"empty-icon"}),a[35]||(a[35]=c("p",null,"暂无设备",-1))])),c("div",Na,[c("button",{onClick:a[1]||(a[1]=e=>((e=!0)=>{ee.value=e,L.value=null,q.value={deviceName:"",deviceType:"",systemType:"",processorType:""},D.value=!0})(!0)),class:"btn btn-sm btn-primary"},[o(T,{icon:"mdi:plus"}),a[36]||(a[36]=r(" 添加设备 ",-1))])])])]),c("div",Ua,[c("div",Va,[o(T,{icon:"mdi:forum-outline",class:"card-icon"}),a[37]||(a[37]=c("h2",null,"我的帖子与回复",-1))]),c("div",Ma,[o(Re)])])]),o(x,{visible:m(A).visible.value,title:m(A).config.value.title||"",message:m(A).config.value.message||"",type:"danger"===m(A).config.value.type?"error":m(A).config.value.type||"warning","confirm-text":m(A).config.value.confirmText,"cancel-text":m(A).config.value.cancelText,onConfirm:m(A).handleConfirm,onCancel:m(A).handleCancel},null,8,["visible","title","message","type","confirm-text","cancel-text","onConfirm","onCancel"]),o(M,{toasts:m(p),onRemove:m(R)},null,8,["toasts","onRemove"]),F.value?(f(),t("div",{key:0,class:"modal-overlay",onMousedown:b(te,["self"]),onMouseup:a[9]||(a[9]=b(e=>ne("edit",e),["self"]))},[c("div",za,[c("div",$a,[a[38]||(a[38]=c("h3",null,"编辑个人信息",-1)),c("button",{onClick:a[2]||(a[2]=e=>F.value=!1),class:"close-btn"},[o(T,{icon:"mdi:close"})])]),c("div",Ra,[c("div",Aa,[o(z,{modelValue:j.value.avatar,"onUpdate:modelValue":a[3]||(a[3]=e=>j.value.avatar=e),size:100,onChange:a[4]||(a[4]=e=>{j.value.avatar=e})},null,8,["modelValue"])]),c("div",Fa,[a[39]||(a[39]=c("label",null,"昵称:",-1)),g(c("input",{"onUpdate:modelValue":a[5]||(a[5]=e=>j.value.nickName=e),type:"text",placeholder:"请输入昵称"},null,512),[[h,j.value.nickName]])]),c("div",ja,[a[40]||(a[40]=c("label",null,"邮箱:",-1)),g(c("input",{"onUpdate:modelValue":a[6]||(a[6]=e=>j.value.email=e),type:"email",placeholder:"请输入邮箱"},null,512),[[h,j.value.email]])]),c("div",Ea,[a[41]||(a[41]=c("label",null,"年龄:",-1)),g(c("input",{"onUpdate:modelValue":a[7]||(a[7]=e=>j.value.age=e),type:"number",min:"0",max:"150",placeholder:"请输入年龄"},null,512),[[h,j.value.age,void 0,{number:!0}]])])]),c("div",Da,[c("button",{onClick:a[8]||(a[8]=e=>F.value=!1),class:"btn btn-secondary"},"取消"),c("button",{onClick:Z,class:"btn btn-primary",disabled:E.value},d(E.value?"保存中...":"保存"),9,La)])])],32)):i("",!0),D.value?(f(),t("div",{key:1,class:"modal-overlay",onMousedown:b(te,["self"]),onMouseup:a[16]||(a[16]=b(e=>ne("device",e),["self"]))},[c("div",qa,[c("div",Sa,[c("h3",null,d(null!==L.value?"编辑设备":"添加设备"),1),c("button",{onClick:a[10]||(a[10]=e=>D.value=!1),class:"close-btn"},[o(T,{icon:"mdi:close"})])]),c("div",Ba,[c("div",Oa,[a[42]||(a[42]=c("label",null,"设备名称:",-1)),g(c("input",{"onUpdate:modelValue":a[11]||(a[11]=e=>q.value.deviceName=e),type:"text",placeholder:"请输入设备名称"},null,512),[[h,q.value.deviceName]])]),c("div",Ja,[a[44]||(a[44]=c("label",null,"设备类型:",-1)),g(c("select",{"onUpdate:modelValue":a[12]||(a[12]=e=>q.value.deviceType=e),class:"form-select"},[a[43]||(a[43]=c("option",{value:""},"请选择设备类型",-1)),(f(!0),t(u,null,v(S.value,e=>(f(),t("option",{key:e.value,value:e.value},d(e.label),9,Ga))),128))],512),[[k,q.value.deviceType]])]),c("div",Ha,[a[46]||(a[46]=c("label",null,"系统类型:",-1)),g(c("select",{"onUpdate:modelValue":a[13]||(a[13]=e=>q.value.systemType=e),class:"form-select"},[a[45]||(a[45]=c("option",{value:""},"请选择系统类型",-1)),(f(!0),t(u,null,v(B.value,e=>(f(),t("option",{key:e.value,value:e.value},d(e.label),9,Ka))),128))],512),[[k,q.value.systemType]])]),c("div",Qa,[a[48]||(a[48]=c("label",null,"处理器类型:",-1)),g(c("select",{"onUpdate:modelValue":a[14]||(a[14]=e=>q.value.processorType=e),class:"form-select"},[a[47]||(a[47]=c("option",{value:""},"请选择处理器类型",-1)),(f(!0),t(u,null,v(O.value,e=>(f(),t("option",{key:e.value,value:e.value},d(e.label),9,Wa))),128))],512),[[k,q.value.processorType]])])]),c("div",Xa,[c("button",{onClick:a[15]||(a[15]=e=>D.value=!1),class:"btn btn-secondary"},"取消"),c("button",{onClick:ae,class:"btn btn-primary"},"保存")])])],32)):i("",!0),J.value?(f(),t("div",{key:2,class:"modal-overlay",onMousedown:b(te,["self"]),onMouseup:a[23]||(a[23]=b(e=>ne("password",e),["self"]))},[c("div",Ya,[c("div",Za,[a[49]||(a[49]=c("h3",null,"修改密码",-1)),c("button",{onClick:a[17]||(a[17]=e=>J.value=!1),class:"close-btn",type:"button"},[o(T,{icon:"mdi:close"})])]),c("form",{onSubmit:a[22]||(a[22]=b(()=>{},["prevent"])),class:"modal-content"},[c("div",el,[a[50]||(a[50]=c("label",null,"当前密码:",-1)),g(c("input",{"onUpdate:modelValue":a[18]||(a[18]=e=>G.value.oldPassword=e),type:"password",placeholder:"请输入当前密码",autocomplete:"current-password"},null,512),[[h,G.value.oldPassword]])]),c("div",al,[a[51]||(a[51]=c("label",null,"新密码:",-1)),g(c("input",{"onUpdate:modelValue":a[19]||(a[19]=e=>G.value.newPassword=e),type:"password",placeholder:"请输入新密码",autocomplete:"new-password"},null,512),[[h,G.value.newPassword]])]),c("div",ll,[a[52]||(a[52]=c("label",null,"确认新密码:",-1)),g(c("input",{"onUpdate:modelValue":a[20]||(a[20]=e=>G.value.confirmPassword=e),type:"password",placeholder:"请再次输入新密码",autocomplete:"new-password"},null,512),[[h,G.value.confirmPassword]])]),c("div",sl,[c("button",{type:"button",onClick:a[21]||(a[21]=e=>J.value=!1),class:"btn btn-secondary"},"取消"),c("button",{type:"button",onClick:le,class:"btn btn-primary",disabled:H.value},d(H.value?"修改中...":"确认修改"),9,tl)])],32)])],32)):i("",!0)])}}}),[["__scopeId","data-v-6f803c55"]])
export{nl as default}