2 lines
31 KiB
JavaScript
2 lines
31 KiB
JavaScript
"use strict";(self["webpackChunknewfront"]=self["webpackChunknewfront"]||[]).push([[328],{8328:function(t,e,s){s.r(e),s.d(e,{default:function(){return ve}});var a=s(6768);const i={class:"user-center"},n={key:0,class:"loading-container"},o={key:1,class:"container"},l={class:"upper-section"},r={class:"user-info-container"},c={class:"coin-container"},u={class:"lower-section"},d={key:2,class:"login-required-container"};function h(t,e,s,h,k,g){const p=(0,a.g2)("Navbar"),v=(0,a.g2)("UserInfo"),f=(0,a.g2)("Coin"),m=(0,a.g2)("SubmissionList");return(0,a.uX)(),(0,a.CE)("div",i,[(0,a.bF)(p),k.isLoading?((0,a.uX)(),(0,a.CE)("div",n,e[0]||(e[0]=[(0,a.Lk)("div",{class:"loading-spinner"},"加载中...",-1)]))):k.isAuthenticated?((0,a.uX)(),(0,a.CE)("div",o,[(0,a.Lk)("div",l,[(0,a.Lk)("div",r,[(0,a.bF)(v,{ref:"userInfo"},null,512)]),(0,a.Lk)("div",c,[(0,a.bF)(f,{ref:"coin"},null,512)])]),(0,a.Lk)("div",u,[(0,a.bF)(m,{onManageWorks:g.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 k=s(8545),g=s(4232),p=s(5130);const v={class:"user-info-card"},f={class:"card-container"},m={class:"detail-header"},y={class:"avatar-wrapper"},L=["src"],b={class:"detail-right"},w={class:"detail-name-container"},C={class:"detail-name"},_={class:"user-badges"},A=["title"],x=["title"],M={key:2,class:"badge medal"},E={class:"user-sign-container"},P={class:"user-sign"},S={class:"sign-text"},I={class:"user-email"},$={class:"email-text"},X={key:0,class:"badge campus-email"},j={class:"user-stats"},T={class:"stat-value"},F={class:"stat-value"},K={class:"stat-item"},z={class:"stat-value"},O={class:"modal-content"},D={class:"modal-header"},N={class:"modal-body"},q={key:0,class:"loading-state"},R={key:1,class:"empty-state"},U={key:2,class:"user-list"},Q={class:"user-meta-wrapper"},J=["onClick"],W={key:0,class:"modal-footer"},B=["disabled"],V={class:"page-info"},H=["disabled"];function G(t,e,s,i,n,o){const l=(0,a.g2)("UserMeta");return(0,a.uX)(),(0,a.CE)("div",v,[(0,a.Lk)("div",f,[(0,a.Lk)("div",m,[e[12]||(e[12]=(0,a.Lk)("div",{class:"header-bg"},null,-1)),(0,a.Lk)("div",y,[(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[10]||(e[10]=[(0,a.Lk)("i",{class:"edit-icon"},"📷",-1)])),(0,a.Lk)("input",{type:"file",ref:"fileInput",style:{display:"none"},accept:"image/*",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",C,(0,g.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[11]||(e[11]=[(0,a.Lk)("i",{class:"edit-icon"},"✏️",-1)]))]),(0,a.Lk)("div",_,[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,x)):(0,a.Q3)("",!0),n.userInfo.medal?((0,a.uX)(),(0,a.CE)("span",M,"小站奖章")):(0,a.Q3)("",!0)])])]),(0,a.Lk)("div",E,[(0,a.Lk)("div",P,[e[14]||(e[14]=(0,a.Lk)("div",{class:"sign-icon"},"✍️",-1)),(0,a.Lk)("div",S,(0,g.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[13]||(e[13]=[(0,a.Lk)("i",{class:"edit-icon"},"✏️",-1)]))])]),(0,a.Lk)("div",I,[e[15]||(e[15]=(0,a.Lk)("div",{class:"email-icon"},"📧",-1)),(0,a.Lk)("div",$,(0,g.v_)(n.userInfo.email),1),o.isCampusEmail?((0,a.uX)(),(0,a.CE)("span",X,"校园邮箱")):(0,a.Q3)("",!0)]),(0,a.Lk)("div",j,[(0,a.Lk)("div",{class:"stat-item clickable",onClick:e[4]||(e[4]=t=>o.openList(1))},[(0,a.Lk)("div",T,(0,g.v_)(n.userInfo.follower||0),1),e[16]||(e[16]=(0,a.Lk)("div",{class:"stat-label"},"粉丝",-1))]),e[19]||(e[19]=(0,a.Lk)("div",{class:"stat-separator"},null,-1)),(0,a.Lk)("div",{class:"stat-item clickable",onClick:e[5]||(e[5]=t=>o.openList(0))},[(0,a.Lk)("div",F,(0,g.v_)(n.userInfo.following||0),1),e[17]||(e[17]=(0,a.Lk)("div",{class:"stat-label"},"关注",-1))]),e[20]||(e[20]=(0,a.Lk)("div",{class:"stat-separator"},null,-1)),(0,a.Lk)("div",K,[(0,a.Lk)("div",z,(0,g.v_)(n.userInfo.coin||"未激活"),1),e[18]||(e[18]=(0,a.Lk)("div",{class:"stat-label"},"东币",-1))])])]),n.showListModal?((0,a.uX)(),(0,a.CE)("div",{key:0,class:"modal-overlay",onClick:e[9]||(e[9]=(0,p.D$)(((...t)=>o.closeList&&o.closeList(...t)),["self"]))},[(0,a.Lk)("div",O,[(0,a.Lk)("div",D,[(0,a.Lk)("h3",null,(0,g.v_)(0===n.listMode?"我的关注":"我的粉丝"),1),(0,a.Lk)("button",{class:"close-modal-btn",onClick:e[6]||(e[6]=(...t)=>o.closeList&&o.closeList(...t))},"×")]),(0,a.Lk)("div",N,[n.listLoading?((0,a.uX)(),(0,a.CE)("div",q,"加载中...")):0===n.userList.length?((0,a.uX)(),(0,a.CE)("div",R,"暂无数据")):((0,a.uX)(),(0,a.CE)("div",U,[((0,a.uX)(!0),(0,a.CE)(a.FK,null,(0,a.pI)(n.userList,(t=>((0,a.uX)(),(0,a.CE)("div",{key:t,class:"user-list-item"},[(0,a.Lk)("div",Q,[(0,a.bF)(l,{id:t,showFollow:!1},null,8,["id"])]),(0,a.Lk)("button",{class:(0,g.C4)(["list-action-btn",{"btn-cancel":0===n.listMode||n.followStatusMap[t],"btn-follow":!(0===n.listMode||n.followStatusMap[t])}]),onClick:e=>o.handleListFollowAction(t)},(0,g.v_)(0===n.listMode||n.followStatusMap[t]?"取消关注":"关注"),11,J)])))),128))]))]),n.listPagination.pages>1?((0,a.uX)(),(0,a.CE)("div",W,[(0,a.Lk)("button",{class:"page-btn",disabled:1===n.listPagination.current,onClick:e[7]||(e[7]=t=>o.changePage(n.listPagination.current-1))},"上一页",8,B),(0,a.Lk)("span",V,(0,g.v_)(n.listPagination.current)+" / "+(0,g.v_)(n.listPagination.pages),1),(0,a.Lk)("button",{class:"page-btn",disabled:n.listPagination.current===n.listPagination.pages,onClick:e[8]||(e[8]=t=>o.changePage(n.listPagination.current+1))},"下一页",8,H)])):(0,a.Q3)("",!0)])])):(0,a.Q3)("",!0)])}s(8111),s(1701);var Y=s(8704),Z=s(4993),tt=s(7732),et={name:"UserInfo",components:{UserMeta:tt.A},data(){return{userInfo:{id:"",nickname:"加载中...",verified:null,invited:null,medal:!1,avatar_path:"",email:"",sign:"",follower:0,following:0,coin:0},showListModal:!1,listMode:0,userList:[],followStatusMap:{},listLoading:!1,listPagination:{current:1,total:0,pages:1}}},computed:{isCampusEmail(){if(!this.userInfo.email)return!1;const t=["@stu.neu.edu.cn","@stu.neuq.edu.cn","@mails.neu.edu.cn"];return t.some((t=>this.userInfo.email.endsWith(t)))}},created(){this.fetchUserInfo()},methods:{async fetchUserInfo(){try{const t=Y.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=Y.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=Y.A.get("token");t?(0,Z.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=Y.A.get("token");if(!t)return void this.showMessage("您尚未登录,请登录后再尝试修改签名","error");const e=this.userInfo.sign||"";(0,Z.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((()=>{}))},openList(t){this.listMode=t,this.showListModal=!0,this.fetchFollowList(1)},closeList(){this.showListModal=!1,this.userList=[],this.followStatusMap={}},async fetchFollowList(t=1){this.listLoading=!0;try{const e=Y.A.get("token");if(!e)return;const s=await fetch("https://newfront.xn--xhq44jb2fzpc.com/user/follow/get",{method:"POST",headers:{"Content-Type":"application/json",Authorization:e},body:JSON.stringify({mode:this.listMode,page_num:t})});if(s.ok){const t=await s.json();this.userList=t.list,this.listPagination.current=t.current_page,this.listPagination.total=t.total,this.listPagination.pages=t.total_pages,1===this.listMode&&this.userList.length>0&&await this.checkFollowStatuses(this.userList)}else this.showMessage("获取列表失败","error")}catch(e){console.error("获取列表错误:",e),this.showMessage("网络错误","error")}finally{this.listLoading=!1}},async checkFollowStatuses(t){const e=Y.A.get("token");if(!e)return;const s=t.map((async t=>{try{const s=await fetch("https://newfront.xn--xhq44jb2fzpc.com/user/follow/status",{method:"POST",headers:{"Content-Type":"application/json",Authorization:e},body:JSON.stringify({user_id:t})});if(s.ok){const e=await s.json();this.followStatusMap[t]=e.is_following}}catch(s){console.error(s)}}));await Promise.all(s)},async handleListFollowAction(t){let e=!1;e=0===this.listMode||!!this.followStatusMap[t];const s=Y.A.get("token");if(!s)return void this.showMessage("请先登录","error");const a=e?"取消关注":"关注",i=e?"确定取消关注该用户吗?":"确定关注该用户吗?";(0,Z.A)({title:a,message:i,confirmText:"确定",cancelText:"取消",cancel:!0}).then((async()=>{await this.executeFollowAction(t,!e)})).catch((()=>{}))},async executeFollowAction(t,e){const s=Y.A.get("token");try{const a=await fetch("https://newfront.xn--xhq44jb2fzpc.com/user/follow/do",{method:"POST",headers:{"Content-Type":"application/json",Authorization:s},body:JSON.stringify({user_id:t})});if(a.ok)this.showMessage(e?"关注成功":"取消关注成功","success"),this.fetchFollowList(this.listPagination.current),this.fetchUserInfo();else{const t=await a.json();this.showMessage(t.message||"操作失败","error")}}catch(a){console.error("操作错误:",a),this.showMessage("网络错误","error")}},changePage(t){t<1||t>this.listPagination.pages||this.fetchFollowList(t)},showMessage(t,e="success"){this.$barMessage({message:t,type:e})}}},st=s(1241);const at=(0,st.A)(et,[["render",G],["__scopeId","data-v-708cb2f6"]]);var it=at;const nt={class:"coin-container"},ot={key:0,class:"not-activated"},lt={class:"alert alert-warning policy-notification"},rt={key:1,class:"activated"},ct={class:"alert alert-warning policy-notification"},ut={class:"coin-info"},dt={class:"coin-amount"},ht={class:"transactions"},kt={key:0,class:"no-records"},gt={key:1,class:"transaction-table"},pt={key:2,class:"pagination"},vt=["disabled"],ft={class:"page-info"},mt=["disabled"];function yt(t,e,s,i,n,o){return(0,a.uX)(),(0,a.CE)("div",nt,[n.isActivated?((0,a.uX)(),(0,a.CE)("div",rt,[(0,a.Lk)("div",ct,(0,g.v_)(n.policyNotification),1),(0,a.Lk)("div",ut,[(0,a.Lk)("h3",null,[e[3]||(e[3]=(0,a.eW)("您当前拥有 ")),(0,a.Lk)("span",dt,(0,g.v_)(n.coinAmount),1),e[4]||(e[4]=(0,a.eW)(" 枚东币"))])]),(0,a.Lk)("div",ht,[0===n.transactions.length?((0,a.uX)(),(0,a.CE)("div",kt," 暂无交易记录 ")):((0,a.uX)(),(0,a.CE)("table",gt,[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,g.v_)(o.formatDate(t.created_at)),1),(0,a.Lk)("td",{class:(0,g.C4)({credit:"credit"===t.type,debit:"debit"===t.type})},(0,g.v_)("credit"===t.type?"+":"-")+(0,g.v_)(t.amount),3),(0,a.Lk)("td",null,(0,g.v_)(t.note),1)])))),128))])])),n.totalPages>1?((0,a.uX)(),(0,a.CE)("div",pt,[(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,vt),(0,a.Lk)("span",ft,(0,g.v_)(n.currentPage)+" / "+(0,g.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,mt)])):(0,a.Q3)("",!0)])])):((0,a.uX)(),(0,a.CE)("div",ot,[(0,a.Lk)("div",lt,(0,g.v_)(n.policyNotification),1),e[2]||(e[2]=(0,a.Lk)("div",{class:"alert alert-info"},[(0,a.Lk)("p",null,"东币系统在账号完成校园验证后自动激活。")],-1))]))])}var Lt={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=Y.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 bt=(0,st.A)(Lt,[["render",yt],["__scopeId","data-v-2054fb20"]]);var wt=bt;const Ct={class:"submission-container"},_t={class:"header"},At={class:"header-buttons"},xt={class:"ranking-opt-in"},Mt={class:"checkbox-label"},Et=["disabled"],Pt={class:"modal-content key-management-modal"},St={class:"modal-header"},It={class:"modal-body"},$t={key:0,class:"key-table-wrapper"},Xt={class:"key-table"},jt={class:"key-cell"},Tt={class:"key-content"},Ft=["onClick"],Kt={key:0,xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 24 24",fill:"none",stroke:"black","stroke-linecap":"round","stroke-linejoin":"round",width:"24",height:"24","stroke-width":"1.1"},zt={key:1,xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 24 24",fill:"none",stroke:"black","stroke-linecap":"round","stroke-linejoin":"round",width:"24",height:"24","stroke-width":"1.1"},Ot={key:1,class:"loading-keys"},Dt={key:2,class:"empty-keys"},Nt={class:"modal-content exchange-key-modal"},qt={class:"modal-header"},Rt={class:"modal-body"},Ut={class:"form-group"},Qt={class:"form-group"},Jt={class:"form-actions"},Wt=["disabled"],Bt={class:"submission-table-wrapper"},Vt={key:0,class:"submission-table"},Ht={key:0},Gt=["onClick"],Yt={class:"title-cell"},Zt={key:0},te={key:1,class:"status-unknown"},ee={class:"action-buttons"},se=["onClick"],ae=["onClick"],ie={key:1,class:"empty-state"},ne={key:2,class:"pagination"},oe=["disabled"],le={class:"page-info"},re=["disabled"];function ce(t,e,s,i,n,o){return(0,a.uX)(),(0,a.CE)("div",Ct,[(0,a.Lk)("div",_t,[e[14]||(e[14]=(0,a.Lk)("h3",{class:"title"},"我的投稿记录",-1)),(0,a.Lk)("div",At,[(0,a.Lk)("button",{class:"key-manage-btn",onClick:e[0]||(e[0]=t=>n.showKeyManagement=!0)},"密钥管理"),(0,a.Lk)("button",{class:"manage-btn",onClick:e[1]||(e[1]=(...t)=>o.handleManage&&o.handleManage(...t))},"我要投稿")])]),(0,a.Lk)("div",xt,[(0,a.Lk)("label",Mt,[(0,a.bo)((0,a.Lk)("input",{type:"checkbox","onUpdate:modelValue":e[2]||(e[2]=t=>n.inRank=t),onChange:e[3]||(e[3]=(...t)=>o.updateRankingStatus&&o.updateRankingStatus(...t)),disabled:n.updatingRank},null,40,Et),[[p.lH,n.inRank]]),e[15]||(e[15]=(0,a.Lk)("span",{class:"checkbox-text"},"我愿意参与投稿排行榜",-1))])]),n.showKeyManagement?((0,a.uX)(),(0,a.CE)("div",{key:0,class:"modal-overlay",onClick:e[6]||(e[6]=(0,p.D$)((t=>n.showKeyManagement=!1),["self"]))},[(0,a.Lk)("div",Pt,[(0,a.Lk)("div",St,[e[16]||(e[16]=(0,a.Lk)("h3",null,"密钥管理",-1)),(0,a.Lk)("button",{class:"close-btn",onClick:e[4]||(e[4]=t=>n.showKeyManagement=!1)},"×")]),(0,a.Lk)("div",It,[(0,a.Lk)("button",{class:"exchange-key-btn",onClick:e[5]||(e[5]=t=>n.showExchangeKey=!0)},"兑换密钥"),n.keyList.length>0?((0,a.uX)(),(0,a.CE)("div",$t,[(0,a.Lk)("table",Xt,[e[19]||(e[19]=(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,"最后使用时间")])],-1)),(0,a.Lk)("tbody",null,[((0,a.uX)(!0),(0,a.CE)(a.FK,null,(0,a.pI)(n.keyList,((t,s)=>((0,a.uX)(),(0,a.CE)("tr",{key:s},[(0,a.Lk)("td",jt,[(0,a.Lk)("div",Tt,[(0,a.Lk)("span",null,(0,g.v_)(n.visibleKeyIndex===s?t.key_plaintext:"******"),1),(0,a.Lk)("button",{class:"toggle-visibility",onClick:t=>o.toggleKeyVisibility(s)},[n.visibleKeyIndex!==s?((0,a.uX)(),(0,a.CE)("svg",Kt,e[17]||(e[17]=[(0,a.Lk)("path",{d:"M10 12a2 2 0 1 0 4 0a2 2 0 0 0 -4 0"},null,-1),(0,a.Lk)("path",{d:"M21 12c-2.4 4 -5.4 6 -9 6c-3.6 0 -6.6 -2 -9 -6c2.4 -4 5.4 -6 9 -6c3.6 0 6.6 2 9 6"},null,-1)]))):((0,a.uX)(),(0,a.CE)("svg",zt,e[18]||(e[18]=[(0,a.Lk)("path",{d:"M10.585 10.587a2 2 0 0 0 2.829 2.828"},null,-1),(0,a.Lk)("path",{d:"M16.681 16.673a8.717 8.717 0 0 1 -4.681 1.327c-3.6 0 -6.6 -2 -9 -6c1.272 -2.12 2.712 -3.678 4.32 -4.674m2.86 -1.146a9.055 9.055 0 0 1 1.82 -.18c3.6 0 6.6 2 9 6c-.666 1.11 -1.379 2.067 -2.138 2.87"},null,-1),(0,a.Lk)("path",{d:"M3 3l18 18"},null,-1)])))],8,Ft)])]),(0,a.Lk)("td",null,[(0,a.Lk)("span",{class:(0,g.C4)(t.is_valid?"status-valid":"status-invalid")},(0,g.v_)(t.is_valid?"有效":"无效"),3)]),(0,a.Lk)("td",null,(0,g.v_)(o.formatDate(t.created_at)),1),(0,a.Lk)("td",null,(0,g.v_)(t.last_used_at?o.formatDate(t.last_used_at):"未使用"),1)])))),128))])])])):n.loadingKeyList?((0,a.uX)(),(0,a.CE)("div",Ot," 加载中... ")):((0,a.uX)(),(0,a.CE)("div",Dt,e[20]||(e[20]=[(0,a.Lk)("p",null,"暂无密钥记录",-1)])))])])])):(0,a.Q3)("",!0),n.showExchangeKey?((0,a.uX)(),(0,a.CE)("div",{key:1,class:"modal-overlay",onClick:e[11]||(e[11]=(0,p.D$)((t=>n.showExchangeKey=!1),["self"]))},[(0,a.Lk)("div",Nt,[(0,a.Lk)("div",qt,[e[21]||(e[21]=(0,a.Lk)("h3",null,"兑换密钥",-1)),(0,a.Lk)("button",{class:"close-btn",onClick:e[7]||(e[7]=t=>n.showExchangeKey=!1)},"×")]),(0,a.Lk)("div",Rt,[(0,a.Lk)("div",Ut,[e[22]||(e[22]=(0,a.Lk)("label",{for:"invite-code"},"邀请码",-1)),(0,a.bo)((0,a.Lk)("input",{id:"invite-code","onUpdate:modelValue":e[8]||(e[8]=t=>n.exchangeForm.invite_code=t),type:"text",placeholder:"输入邀请码"},null,512),[[p.Jo,n.exchangeForm.invite_code]])]),(0,a.Lk)("div",Qt,[e[23]||(e[23]=(0,a.Lk)("label",{for:"custom-key"},"自定义密钥",-1)),(0,a.bo)((0,a.Lk)("input",{id:"custom-key","onUpdate:modelValue":e[9]||(e[9]=t=>n.exchangeForm.key=t),type:"text",placeholder:"输入您的自定义密钥"},null,512),[[p.Jo,n.exchangeForm.key]])]),(0,a.Lk)("div",Jt,[(0,a.Lk)("button",{class:"submit-btn",disabled:!n.exchangeForm.invite_code||!n.exchangeForm.key||n.submitting,onClick:e[10]||(e[10]=(...t)=>o.exchangeKey&&o.exchangeKey(...t))},(0,g.v_)(n.submitting?"处理中...":"确认兑换"),9,Wt)])])])])):(0,a.Q3)("",!0),(0,a.Lk)("div",Bt,[n.submissions.length>0?((0,a.uX)(),(0,a.CE)("table",Vt,[(0,a.Lk)("thead",null,[(0,a.Lk)("tr",null,[e[24]||(e[24]=(0,a.Lk)("th",null,"标题",-1)),e[25]||(e[25]=(0,a.Lk)("th",null,"板块",-1)),e[26]||(e[26]=(0,a.Lk)("th",null,"审核状态",-1)),n.setPrivate?((0,a.uX)(),(0,a.CE)("th",Ht,"文章权限")):(0,a.Q3)("",!0),e[27]||(e[27]=(0,a.Lk)("th",null,"审核备注",-1)),e[28]||(e[28]=(0,a.Lk)("th",null,"投稿时间",-1)),e[29]||(e[29]=(0,a.Lk)("th",null,"状态更新时间",-1)),e[30]||(e[30]=(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,g.C4)({clickable:t.article_id}),onClick:e=>t.article_id&&o.navigateToArticle(t.article_id)},[(0,a.Lk)("td",Yt,(0,g.v_)(t.title),1),(0,a.Lk)("td",null,(0,g.v_)(t.section),1),(0,a.Lk)("td",null,[(0,a.Lk)("span",{class:(0,g.C4)(o.getStatusClass(t.status))},(0,g.v_)(t.status),3)]),n.setPrivate?((0,a.uX)(),(0,a.CE)("td",Zt,["已通过"===t.status&&t.hasOwnProperty("is_public")?((0,a.uX)(),(0,a.CE)("span",{key:0,class:(0,g.C4)(t.is_public?"status-public":"status-private")},(0,g.v_)(t.is_public?"公开":"私密"),3)):((0,a.uX)(),(0,a.CE)("span",te,"-"))])):(0,a.Q3)("",!0),(0,a.Lk)("td",null,(0,g.v_)(t.note||"无"),1),(0,a.Lk)("td",null,(0,g.v_)(o.formatDate(t.created_at)),1),(0,a.Lk)("td",null,(0,g.v_)(o.formatDate(t.updated_at)),1),(0,a.Lk)("td",null,[(0,a.Lk)("div",ee,["已通过"===t.status&&t.article_id&&t.owner?((0,a.uX)(),(0,a.CE)("button",{key:0,class:"edit-btn",onClick:(0,p.D$)((e=>o.navigateToEdit(t.article_id)),["stop"])}," 编辑 ",8,se)):(0,a.Q3)("",!0),n.setPrivate&&"已通过"===t.status&&t.article_id&&t.owner&&t.hasOwnProperty("is_public")?((0,a.uX)(),(0,a.CE)("button",{key:1,class:(0,g.C4)(t.is_public?"private-btn":"public-btn"),onClick:(0,p.D$)((e=>o.toggleArticleAccess(t)),["stop"])},(0,g.v_)(t.is_public?"设为私密":"设为公开"),11,ae)):(0,a.Q3)("",!0)])])],10,Gt)))),128))])])):((0,a.uX)(),(0,a.CE)("div",ie,e[31]||(e[31]=[(0,a.Lk)("p",null,"暂无投稿记录",-1)]))),n.totalPages>1?((0,a.uX)(),(0,a.CE)("div",ne,[(0,a.Lk)("button",{disabled:1===n.currentPage,onClick:e[12]||(e[12]=t=>o.loadSubmissions(n.currentPage-1)),class:"page-btn"}," 上一页 ",8,oe),(0,a.Lk)("span",le,(0,g.v_)(n.currentPage)+" / "+(0,g.v_)(n.totalPages),1),(0,a.Lk)("button",{disabled:n.currentPage===n.totalPages,onClick:e[13]||(e[13]=t=>o.loadSubmissions(n.currentPage+1)),class:"page-btn"}," 下一页 ",8,re)])):(0,a.Q3)("",!0)])])}var ue={name:"SubmissionList",data(){return{submissions:[],currentPage:1,totalPages:1,totalSubmissions:0,loading:!1,setPrivate:!1,inRank:!0,updatingRank:!1,loadingKeyList:!1,showKeyManagement:!1,showExchangeKey:!1,keyList:[],visibleKeyIndex:-1,exchangeForm:{invite_code:"",key:""},submitting:!1}},created(){this.loadSubmissions(1)},methods:{async loadSubmissions(t){this.loading=!0;try{const e=Y.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,this.setPrivate=a.set_private||!1,a.hasOwnProperty("in_rank")&&(this.inRank=a.in_rank)}catch(e){console.error("获取投稿记录出错:",e)}finally{this.loading=!1}},async updateRankingStatus(){const t=new Date,e=new Date(t);e.setHours(t.getHours()+1);const s=`${e.getHours()}:00`,a=this.inRank,i=a?`您确认参与投稿排行榜吗?如确认,榜单将在下次更新时(${s})显示您。`:`您确认退出投稿排行榜吗?如确认,榜单将在下次更新时(${s})不再显示您。`;try{await Z.A.confirm(i,"提示"),this.updatingRank=!0;const t=Y.A.get("token");if(!t)return Z.A.alert("未找到登录token","错误"),void(this.inRank=!this.inRank);const e=await fetch("https://newfront.xn--xhq44jb2fzpc.com/ranking/in",{method:"POST",headers:{Authorization:t,"Content-Type":"application/json"},body:JSON.stringify({in:this.inRank})});if(!e.ok)throw new Error("更新设置失败");await e.json();const s=a?"参与":"退出";this.$barMessage.success(`您已成功${s}投稿排行榜!`)}catch(n){if(this.inRank=!this.inRank,"cancel"===n||n&&"cancel"===n.action)return;console.error("更新排行榜设置失败:",n),Z.A.alert("更新设置失败,请稍后重试","错误")}finally{this.updatingRank=!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?Z.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""}},async loadKeyList(){this.loadingKeyList=!0;try{const t=Y.A.get("token");if(!t)return void console.error("未找到登录token");const e=await fetch("https://newfront.xn--xhq44jb2fzpc.com/encrypt/getcode",{method:"GET",headers:{Authorization:t,"Content-Type":"application/json"}});if(!e.ok)throw new Error("获取密钥列表失败");const s=await e.json();if(!s.success)throw new Error(s.message||"获取密钥列表失败");this.keyList=s.data||[]}catch(t){console.error("获取密钥列表出错:",t),Z.A.alert(t.message||"获取密钥列表失败,请稍后再试","错误")}finally{this.loadingKeyList=!1}},toggleKeyVisibility(t){this.visibleKeyIndex===t?this.visibleKeyIndex=-1:this.visibleKeyIndex=t},async exchangeKey(){if(this.exchangeForm.invite_code&&this.exchangeForm.key){this.submitting=!0;try{const t=Y.A.get("token");if(!t)return void console.error("未找到登录token");const e=await fetch("https://newfront.xn--xhq44jb2fzpc.com/encrypt/setcode",{method:"POST",headers:{Authorization:t,"Content-Type":"application/json"},body:JSON.stringify(this.exchangeForm)}),s=await e.json();if(!s.success)throw new Error(s.message||"密钥兑换失败");Z.A.alert("密钥兑换成功","提示"),this.showExchangeKey=!1,this.exchangeForm.invite_code="",this.exchangeForm.key="",this.loadKeyList()}catch(t){console.error("密钥兑换出错:",t),Z.A.alert(t.message||"密钥兑换失败,请稍后再试","错误")}finally{this.submitting=!1}}else Z.A.alert("请输入邀请码和密钥","提示")},async toggleArticleAccess(t){if(!t.article_id)return void Z.A.alert("无效的文章ID","错误");const e=t.is_public?"设为私密":"设为公开";try{await Z.A.confirm(`确认要将文章《${t.title}》${e}吗?`,"确认操作");const s=Y.A.get("token");if(!s)return void Z.A.alert("请先登录","提示");const a=await fetch("https://newfront.xn--xhq44jb2fzpc.com/user/access",{method:"POST",headers:{Authorization:s,"Content-Type":"application/json"},body:JSON.stringify({article_id:t.article_id})});if(!a.ok){const t=await a.json().catch((()=>({})));throw new Error(t.message||"操作失败")}const i=await a.json();t.is_public=i.is_public,this.$barMessage.success(i.message||"操作成功")}catch(s){if("cancel"===s.action)return;console.error("切换文章访问权限失败:",s),this.$barMessage.error(s.message||"操作失败,请稍后再试")}}},watch:{showKeyManagement(t){t?this.loadKeyList():this.visibleKeyIndex=-1}}};const de=(0,st.A)(ue,[["render",ce],["__scopeId","data-v-2ef2a87e"]]);var he=de,ke=s(9090),ge={name:"UserCenter",components:{Navbar:k.A,UserInfo:it,Coin:wt,SubmissionList:he},data(){return{isAuthenticated:!1,isLoading:!0}},created(){document.title="个人中心 - NEU小站"},mounted(){this.checkAuthAndFetchUserInfo()},methods:{async checkAuthAndFetchUserInfo(){const t=Y.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,Y.A.remove("token"),"/user-center"===this.$route.path)return void this.$router.replace("/login");"/login"===this.$route.path&&this.showLoginDialog()}},showLoginDialog(){(0,ke.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?Z.A.confirm("建议在电脑端进行投稿以获得最佳体验。仍要继续吗?","提示").then((()=>{this.$router.push("/submit")})).catch((()=>{console.log("用户取消了在移动端投稿")})):this.$router.push("/submit")}}};const pe=(0,st.A)(ge,[["render",h],["__scopeId","data-v-c5320252"]]);var ve=pe}}]);
|
||
//# sourceMappingURL=328.b1f8fedd.js.map
|