newfront/dist/js/590.1a36637b.js
2025-04-13 23:52:12 +08:00

2 lines
17 KiB
JavaScript
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

"use strict";(self["webpackChunknewfront"]=self["webpackChunknewfront"]||[]).push([[590],{7590:function(t,e,s){s.r(e),s.d(e,{default:function(){return $t}});var a=s(6768);const i={class:"user-center"},n={key:0,class:"loading-container"},o={key:1,class:"container"},r={class:"upper-section"},c={class:"user-info-container"},l={class:"coin-container"},u={class:"lower-section"},d={key:2,class:"login-required-container"};function h(t,e,s,h,g,k){const v=(0,a.g2)("Navbar"),p=(0,a.g2)("UserInfo"),m=(0,a.g2)("Coin"),f=(0,a.g2)("SubmissionList");return(0,a.uX)(),(0,a.CE)("div",i,[(0,a.bF)(v),g.isLoading?((0,a.uX)(),(0,a.CE)("div",n,e[0]||(e[0]=[(0,a.Lk)("div",{class:"loading-spinner"},"加载中...",-1)]))):g.isAuthenticated?((0,a.uX)(),(0,a.CE)("div",o,[(0,a.Lk)("div",r,[(0,a.Lk)("div",c,[(0,a.bF)(p,{ref:"userInfo"},null,512)]),(0,a.Lk)("div",l,[(0,a.bF)(m,{ref:"coin"},null,512)])]),(0,a.Lk)("div",u,[(0,a.bF)(f,{onManageWorks:k.handleManageWorks},null,8,["onManageWorks"])])])):((0,a.uX)(),(0,a.CE)("div",d,e[1]||(e[1]=[(0,a.Lk)("div",{class:"login-required-message"},[(0,a.Lk)("h2",null,"请先登录!"),(0,a.Lk)("p",null,"您需要登录后才能访问个人中心")],-1)])))])}s(4114);var g=s(3070),k=s(4232);const v={class:"user-info-card"},p={class:"card-container"},m={class:"detail-header"},f={class:"avatar-wrapper"},L=["src"],b={class:"detail-right"},w={class:"detail-name-container"},y={class:"detail-name"},C={class:"user-badges"},A=["title"],_=["title"],I={key:2,class:"badge medal"},P={class:"user-sign-container"},E={class:"user-sign"},M={class:"sign-text"},S={class:"user-email"},$={class:"email-text"},T={class:"user-stats"},x={class:"stat-item"},X={class:"stat-value"},j={class:"stat-item"},z={class:"stat-value"},D={class:"stat-item"},F={class:"stat-value"},N={key:0,class:"message-box"};function O(t,e,s,i,n,o){return(0,a.uX)(),(0,a.CE)("div",v,[(0,a.Lk)("div",p,[(0,a.Lk)("div",m,[e[6]||(e[6]=(0,a.Lk)("div",{class:"header-bg"},null,-1)),(0,a.Lk)("div",f,[(0,a.Lk)("img",{src:n.userInfo.avatar_path,alt:"用户头像",class:"detail-avatar"},null,8,L),(0,a.Lk)("div",{class:"avatar-edit-overlay",onClick:e[0]||(e[0]=(...t)=>o.triggerFileInput&&o.triggerFileInput(...t))},e[4]||(e[4]=[(0,a.Lk)("i",{class:"edit-icon"},"📷",-1)])),(0,a.Lk)("input",{type:"file",ref:"fileInput",style:{display:"none"},accept:"image/jpeg, image/png, image/gif",onChange:e[1]||(e[1]=(...t)=>o.uploadAvatar&&o.uploadAvatar(...t))},null,544)]),(0,a.Lk)("div",b,[(0,a.Lk)("div",w,[(0,a.Lk)("div",y,(0,k.v_)(n.userInfo.nickname),1),(0,a.Lk)("button",{class:"edit-btn",onClick:e[2]||(e[2]=(...t)=>o.editNickname&&o.editNickname(...t)),title:"修改昵称"},e[5]||(e[5]=[(0,a.Lk)("i",{class:"edit-icon"},"✏️",-1)]))]),(0,a.Lk)("div",C,[n.userInfo.verified?((0,a.uX)(),(0,a.CE)("span",{key:0,class:"badge verified",title:n.userInfo.verified},"认证",8,A)):(0,a.Q3)("",!0),n.userInfo.invited?((0,a.uX)(),(0,a.CE)("span",{key:1,class:"badge invited",title:n.userInfo.invited},"特邀",8,_)):(0,a.Q3)("",!0),n.userInfo.medal?((0,a.uX)(),(0,a.CE)("span",I,"小站奖章")):(0,a.Q3)("",!0)])])]),(0,a.Lk)("div",P,[(0,a.Lk)("div",E,[e[8]||(e[8]=(0,a.Lk)("div",{class:"sign-icon"},"✍️",-1)),(0,a.Lk)("div",M,(0,k.v_)(n.userInfo.sign||"这个人很懒,还没有写个性签名~"),1),(0,a.Lk)("button",{class:"edit-btn",onClick:e[3]||(e[3]=(...t)=>o.editSign&&o.editSign(...t)),title:"修改签名"},e[7]||(e[7]=[(0,a.Lk)("i",{class:"edit-icon"},"✏️",-1)]))])]),(0,a.Lk)("div",S,[e[9]||(e[9]=(0,a.Lk)("div",{class:"email-icon"},"📧",-1)),(0,a.Lk)("div",$,(0,k.v_)(n.userInfo.email),1)]),(0,a.Lk)("div",T,[(0,a.Lk)("div",x,[(0,a.Lk)("div",X,(0,k.v_)(n.userInfo.follower||0),1),e[10]||(e[10]=(0,a.Lk)("div",{class:"stat-label"},"粉丝",-1))]),e[13]||(e[13]=(0,a.Lk)("div",{class:"stat-separator"},null,-1)),(0,a.Lk)("div",j,[(0,a.Lk)("div",z,(0,k.v_)(n.userInfo.following||0),1),e[11]||(e[11]=(0,a.Lk)("div",{class:"stat-label"},"关注",-1))]),e[14]||(e[14]=(0,a.Lk)("div",{class:"stat-separator"},null,-1)),(0,a.Lk)("div",D,[(0,a.Lk)("div",F,(0,k.v_)(n.userInfo.coin||"未激活"),1),e[12]||(e[12]=(0,a.Lk)("div",{class:"stat-label"},"东币",-1))])]),n.message.show?((0,a.uX)(),(0,a.CE)("div",N,[(0,a.Lk)("div",{class:(0,k.C4)(["message-content",n.message.type])},(0,k.v_)(n.message.text),3)])):(0,a.Q3)("",!0)])])}var U=s(8704),q=s(6253),W={name:"UserInfo",data(){return{userInfo:{id:"",nickname:"加载中...",verified:null,invited:null,medal:!1,avatar_path:"",email:"",sign:"",follower:0,following:0,coin:0},message:{show:!1,text:"",type:"success",timer:null}}},created(){this.fetchUserInfo()},methods:{async fetchUserInfo(){try{const t=U.A.get("token");if(!t)return void this.showMessage("未登录或登录已过期","error");const e=await fetch("https://newfront.xn--xhq44jb2fzpc.com/user/info",{method:"GET",headers:{Authorization:t}});if(!e.ok)throw new Error("获取用户信息失败");const s=await e.json();this.userInfo=s}catch(t){console.error("获取用户信息出错:",t),this.showMessage("获取用户信息失败","error")}},triggerFileInput(){this.$refs.fileInput.click()},async uploadAvatar(t){const e=t.target.files[0];if(!e)return void this.showMessage("请选择一个文件","error");if(e.size>1048576)return void this.showMessage("头像必须小于1MB","error");const s=U.A.get("token");if(s)try{const t=new FormData;t.append("avatar",e);const a=await fetch("https://userlogin.xn--xhq44jb2fzpc.com/avatar/upload",{method:"POST",headers:{Authorization:s},body:t});if(a.ok){const t=await a.json();this.userInfo.avatar_path=t.avatarUrl,this.showMessage("头像上传成功","success")}else 401===a.status||403===a.status?this.showMessage("权限错误,请重新登录后再试","error"):this.showMessage("上传失败,请稍后再试","error")}catch(a){console.error("头像上传错误:",a),this.showMessage("上传过程中发生错误","error")}else this.showMessage("请先登录,再上传头像","error")},async editNickname(){const t=U.A.get("token");t?(0,q.A)({title:"修改昵称",message:"请输入新的昵称:",showInput:!0,inputPlaceholder:"请输入新昵称",inputValue:this.userInfo.nickname,confirmText:"确认",cancelText:"取消",cancel:!0}).then((async({value:e})=>{if(null!==e&&""!==e.trim())try{const s=await fetch("https://userlogin.xn--xhq44jb2fzpc.com/avatar/edit-nickname",{method:"POST",headers:{"Content-Type":"application/json",Authorization:t},body:JSON.stringify({nickname:e.trim()})});if(s.ok){await s.json();this.userInfo.nickname=e.trim(),this.showMessage("昵称修改成功","success")}else{const t=await s.json();this.showMessage(`修改昵称失败:${t.message}`,"error")}}catch(s){console.error("修改昵称错误:",s),this.showMessage("发生错误,请稍后再试","error")}else this.showMessage("昵称不能为空","error")})).catch((()=>{})):this.showMessage("您尚未登录,请登录后再尝试修改昵称","error")},async editSign(){const t=U.A.get("token");if(!t)return void this.showMessage("您尚未登录,请登录后再尝试修改签名","error");const e=this.userInfo.sign||"";(0,q.A)({title:"修改个性签名",message:"请输入新的个性签名 (最多20个汉字留空表示删除个性签名):",showInput:!0,inputValue:e,inputPlaceholder:"请输入个性签名",confirmText:"确认",cancelText:"取消",cancel:!0}).then((async({value:e})=>{if(null!==e)try{const s=await fetch("https://newfront.xn--xhq44jb2fzpc.com/user/sign",{method:"POST",headers:{"Content-Type":"application/json",Authorization:t},body:JSON.stringify({sign:e.trim()})});if(s.ok)this.userInfo.sign=e.trim(),this.showMessage("个性签名修改成功","success");else{const t=await s.json();this.showMessage(`修改签名失败:${t.message}`,"error")}}catch(s){console.error("修改签名错误:",s),this.showMessage("发生错误,请稍后再试","error")}})).catch((()=>{}))},showMessage(t,e="success"){this.message.timer&&clearTimeout(this.message.timer),this.message.show=!0,this.message.text=t,this.message.type=e,this.message.timer=setTimeout((()=>{this.message.show=!1}),3e3)}}},Q=s(1241);const B=(0,Q.A)(W,[["render",O],["__scopeId","data-v-7c40ae87"]]);var J=B;const G={class:"coin-container"},H={key:0,class:"not-activated"},K={class:"alert alert-warning policy-notification"},V={key:1,class:"activated"},Y={class:"alert alert-warning policy-notification"},R={class:"coin-info"},Z={class:"coin-amount"},tt={class:"transactions"},et={key:0,class:"no-records"},st={key:1,class:"transaction-table"},at={key:2,class:"pagination"},it=["disabled"],nt={class:"page-info"},ot=["disabled"];function rt(t,e,s,i,n,o){return(0,a.uX)(),(0,a.CE)("div",G,[n.isActivated?((0,a.uX)(),(0,a.CE)("div",V,[(0,a.Lk)("div",Y,(0,k.v_)(n.policyNotification),1),(0,a.Lk)("div",R,[(0,a.Lk)("h3",null,[e[3]||(e[3]=(0,a.eW)("您当前拥有 ")),(0,a.Lk)("span",Z,(0,k.v_)(n.coinAmount),1),e[4]||(e[4]=(0,a.eW)(" 枚东币"))])]),(0,a.Lk)("div",tt,[0===n.transactions.length?((0,a.uX)(),(0,a.CE)("div",et," 暂无交易记录 ")):((0,a.uX)(),(0,a.CE)("table",st,[e[5]||(e[5]=(0,a.Lk)("thead",null,[(0,a.Lk)("tr",null,[(0,a.Lk)("th",null,"时间"),(0,a.Lk)("th",null,"金额"),(0,a.Lk)("th",null,"备注")])],-1)),(0,a.Lk)("tbody",null,[((0,a.uX)(!0),(0,a.CE)(a.FK,null,(0,a.pI)(n.transactions,(t=>((0,a.uX)(),(0,a.CE)("tr",{key:t.id},[(0,a.Lk)("td",null,(0,k.v_)(o.formatDate(t.created_at)),1),(0,a.Lk)("td",{class:(0,k.C4)({credit:"credit"===t.type,debit:"debit"===t.type})},(0,k.v_)("credit"===t.type?"+":"-")+(0,k.v_)(t.amount),3),(0,a.Lk)("td",null,(0,k.v_)(t.note),1)])))),128))])])),n.totalPages>1?((0,a.uX)(),(0,a.CE)("div",at,[(0,a.Lk)("button",{disabled:1===n.currentPage,onClick:e[0]||(e[0]=t=>o.loadTransactions(n.currentPage-1)),class:"btn btn-sm btn-outline-primary"}," 上一页 ",8,it),(0,a.Lk)("span",nt,(0,k.v_)(n.currentPage)+" / "+(0,k.v_)(n.totalPages),1),(0,a.Lk)("button",{disabled:n.currentPage===n.totalPages,onClick:e[1]||(e[1]=t=>o.loadTransactions(n.currentPage+1)),class:"btn btn-sm btn-outline-primary"}," 下一页 ",8,ot)])):(0,a.Q3)("",!0)])])):((0,a.uX)(),(0,a.CE)("div",H,[(0,a.Lk)("div",K,(0,k.v_)(n.policyNotification),1),e[2]||(e[2]=(0,a.Lk)("div",{class:"alert alert-info"},[(0,a.Lk)("p",null,"东币系统在账号完成校园验证后自动激活。")],-1))]))])}var ct={name:"CoinComponent",data(){return{isActivated:!1,coinAmount:0,transactions:[],currentPage:1,totalPages:1,policyNotification:"由于政策原因短信验证码服务已于2025.4.13下线,后续东币系统将在校园验证通过后自动激活。之前已完成校园验证但未手动激活东币系统的用户,系统已为您自动激活东币系统。"}},created(){this.loadTransactions(1)},methods:{async loadTransactions(t){try{const e=U.A.get("token");if(!e)return console.error("未找到登录token"),void(this.isActivated=!1);const s=await fetch("https://newfront.xn--xhq44jb2fzpc.com/coin/transactions",{method:"POST",headers:{Authorization:e,"Content-Type":"application/json"},body:JSON.stringify({page_num:t})}),a=await s.json();if(s.ok)this.isActivated=!0,this.coinAmount=a.coinAmount,this.transactions=a.transactions,this.currentPage=a.current_page,this.totalPages=a.total_pages;else{if(403!==s.status||"用户未激活东币系统"!==a.message)throw new Error(a.message||"获取交易记录失败");this.isActivated=!1,this.coinAmount=0,this.transactions=[]}}catch(e){console.error("获取交易记录出错:",e),this.isActivated=!1}},formatDate(t){const e=new Date(t);return`${e.getFullYear()}/${e.getMonth()+1}/${e.getDate()} ${e.getHours()}:${String(e.getMinutes()).padStart(2,"0")}:${String(e.getSeconds()).padStart(2,"0")}`}}};const lt=(0,Q.A)(ct,[["render",rt],["__scopeId","data-v-6b086920"]]);var ut=lt,dt=s(5130);const ht={class:"submission-container"},gt={class:"header"},kt={class:"submission-table-wrapper"},vt={key:0,class:"submission-table"},pt=["onClick"],mt={class:"title-cell"},ft=["onClick"],Lt={key:1,class:"empty-state"},bt={key:2,class:"pagination"},wt=["disabled"],yt={class:"page-info"},Ct=["disabled"];function At(t,e,s,i,n,o){return(0,a.uX)(),(0,a.CE)("div",ht,[(0,a.Lk)("div",gt,[e[3]||(e[3]=(0,a.Lk)("h3",{class:"title"},"我的投稿记录",-1)),(0,a.Lk)("button",{class:"manage-btn",onClick:e[0]||(e[0]=(...t)=>o.handleManage&&o.handleManage(...t))},"我要投稿")]),(0,a.Lk)("div",kt,[n.submissions.length>0?((0,a.uX)(),(0,a.CE)("table",vt,[e[4]||(e[4]=(0,a.Lk)("thead",null,[(0,a.Lk)("tr",null,[(0,a.Lk)("th",null,"标题"),(0,a.Lk)("th",null,"板块"),(0,a.Lk)("th",null,"审核状态"),(0,a.Lk)("th",null,"审核备注"),(0,a.Lk)("th",null,"投稿时间"),(0,a.Lk)("th",null,"状态更新时间"),(0,a.Lk)("th",null,"操作")])],-1)),(0,a.Lk)("tbody",null,[((0,a.uX)(!0),(0,a.CE)(a.FK,null,(0,a.pI)(n.submissions,(t=>((0,a.uX)(),(0,a.CE)("tr",{key:t.id,class:(0,k.C4)({clickable:t.article_id}),onClick:e=>t.article_id&&o.navigateToArticle(t.article_id)},[(0,a.Lk)("td",mt,(0,k.v_)(t.title),1),(0,a.Lk)("td",null,(0,k.v_)(t.section),1),(0,a.Lk)("td",null,[(0,a.Lk)("span",{class:(0,k.C4)(o.getStatusClass(t.status))},(0,k.v_)(t.status),3)]),(0,a.Lk)("td",null,(0,k.v_)(t.note||"无"),1),(0,a.Lk)("td",null,(0,k.v_)(o.formatDate(t.created_at)),1),(0,a.Lk)("td",null,(0,k.v_)(o.formatDate(t.updated_at)),1),(0,a.Lk)("td",null,["已通过"===t.status&&t.article_id?((0,a.uX)(),(0,a.CE)("button",{key:0,class:"edit-btn",onClick:(0,dt.D$)((e=>o.navigateToEdit(t.article_id)),["stop"])}," 编辑 ",8,ft)):(0,a.Q3)("",!0)])],10,pt)))),128))])])):((0,a.uX)(),(0,a.CE)("div",Lt,e[5]||(e[5]=[(0,a.Lk)("p",null,"暂无投稿记录",-1)]))),n.totalPages>1?((0,a.uX)(),(0,a.CE)("div",bt,[(0,a.Lk)("button",{disabled:1===n.currentPage,onClick:e[1]||(e[1]=t=>o.loadSubmissions(n.currentPage-1)),class:"page-btn"}," 上一页 ",8,wt),(0,a.Lk)("span",yt,(0,k.v_)(n.currentPage)+" / "+(0,k.v_)(n.totalPages),1),(0,a.Lk)("button",{disabled:n.currentPage===n.totalPages,onClick:e[2]||(e[2]=t=>o.loadSubmissions(n.currentPage+1)),class:"page-btn"}," 下一页 ",8,Ct)])):(0,a.Q3)("",!0)])])}var _t={name:"SubmissionList",data(){return{submissions:[],currentPage:1,totalPages:1,totalSubmissions:0,loading:!1}},created(){this.loadSubmissions(1)},methods:{async loadSubmissions(t){this.loading=!0;try{const e=U.A.get("token");if(!e)return void console.error("未找到登录token");const s=await fetch("https://newfront.xn--xhq44jb2fzpc.com/user/submission",{method:"POST",headers:{Authorization:e,"Content-Type":"application/json"},body:JSON.stringify({page_num:t})});if(!s.ok)throw new Error("获取投稿记录失败");const a=await s.json();this.submissions=a.submissions,this.currentPage=a.current_page,this.totalPages=a.total_pages,this.totalSubmissions=a.total_submissions}catch(e){console.error("获取投稿记录出错:",e)}finally{this.loading=!1}},handleManage(){console.log("点击了作品管理按钮"),this.$emit("manage-works")},navigateToArticle(t){this.$router.push(`/article/${t}`)},navigateToEdit(t){const e=/Android|webOS|iPhone|iPad|iPod|BlackBerry|IEMobile|Opera Mini/i.test(navigator.userAgent)||window.innerWidth<768;e?q.A.confirm("建议在电脑端进行编辑以获得最佳体验。仍要继续吗?","提示").then((()=>{this.$router.push(`/edit?article=${t}`)})).catch((()=>{console.log("用户取消了在移动端编辑")})):this.$router.push(`/edit?article=${t}`)},formatDate(t){if(!t)return"未知";const e=new Date(t);return`${e.getFullYear()}/${e.getMonth()+1}/${e.getDate()} ${e.getHours()}:${String(e.getMinutes()).padStart(2,"0")}:${String(e.getSeconds()).padStart(2,"0")}`},getStatusClass(t){switch(t){case"已通过":return"status-approved";case"审核中":return"status-pending";case"未通过":return"status-rejected";default:return""}}}};const It=(0,Q.A)(_t,[["render",At],["__scopeId","data-v-64c1c5e2"]]);var Pt=It,Et=s(6965),Mt={name:"UserCenter",components:{Navbar:g.A,UserInfo:J,Coin:ut,SubmissionList:Pt},data(){return{isAuthenticated:!1,isLoading:!0}},created(){document.title="个人中心 - NEU小站"},mounted(){this.checkAuthAndFetchUserInfo()},methods:{async checkAuthAndFetchUserInfo(){const t=U.A.get("token");if(!t)return this.isLoading=!1,"/user-center"===this.$route.path?void this.$router.replace("/login"):void("/login"===this.$route.path&&this.showLoginDialog());try{const e=await fetch("https://newfront.xn--xhq44jb2fzpc.com/user/islogin",{method:"GET",headers:{Authorization:t}});if(!e.ok)throw new Error("Token 验证失败");const s=await e.json();if(!s||!s.isLoggedIn)throw new Error("Token 验证成功但返回状态不正确");this.isAuthenticated=!0,this.isLoading=!1,"/login"===this.$route.path&&this.$router.replace("/user-center")}catch(e){if(console.error("获取用户信息出错:",e),this.isLoading=!1,U.A.remove("token"),"/user-center"===this.$route.path)return void this.$router.replace("/login");"/login"===this.$route.path&&this.showLoginDialog()}},showLoginDialog(){(0,Et.A)().then((t=>{console.log("登录成功:",t),this.isAuthenticated=!0,this.$router.replace("/user-center")})).catch((t=>{console.log("登录取消:",t)}))},handleManageWorks(){const t=/Android|webOS|iPhone|iPad|iPod|BlackBerry|IEMobile|Opera Mini/i.test(navigator.userAgent)||window.innerWidth<768;t?q.A.confirm("建议在电脑端进行投稿以获得最佳体验。仍要继续吗?","提示").then((()=>{this.$router.push("/submit")})).catch((()=>{console.log("用户取消了在移动端投稿")})):this.$router.push("/submit")}}};const St=(0,Q.A)(Mt,[["render",h],["__scopeId","data-v-c5320252"]]);var $t=St}}]);
//# sourceMappingURL=590.1a36637b.js.map