|
|
"use strict";(self["webpackChunkhalo_admin"]=self["webpackChunkhalo_admin"]||[]).push([[501],{1501:function(a,t,e){e.r(t),e.d(t,{default:function(){return c}});var r=function(){var a=this,t=a._self._c;return t("div",[t("a-row",{attrs:{gutter:12}},[t("a-col",{staticClass:"pb-3",attrs:{lg:10,md:24}},[t("a-card",{attrs:{bodyStyle:{padding:"16px"},bordered:!1}},[t("div",{staticClass:"mb-6 text-center"},[t("a-tooltip",{attrs:{trigger:["hover"],placement:"right",title:"点击可修改头像"}},[t("a-avatar",{staticClass:"cursor-pointer",attrs:{size:104,src:a.userForm.model.avatar||"//cn.gravatar.com/avatar/?s=256&d=mm"},on:{click:a.handleOpenUpdateAvatarForm}})],1),t("div",{staticClass:"mt-4 mb-1 text-xl font-medium leading-5",staticStyle:{color:"rgba(0, 0, 0, 0.85)"}},[a._v(" "+a._s(a.userForm.model.nickname)+" ")]),t("div",[a._v(a._s(a.userForm.model.description))])],1),t("div",[t("p",{staticClass:"mb-3"},[t("a-icon",{staticClass:"mr-3",attrs:{type:"link"}}),t("a",{attrs:{href:a.options.blog_url,target:"method"}},[a._v(a._s(a.options.blog_url))])],1),t("p",{staticClass:"mb-3"},[t("a-icon",{staticClass:"mr-3",attrs:{type:"mail"}}),a._v(" "+a._s(a.userForm.model.email)+" ")],1),t("p",{staticClass:"mb-3"},[t("a-icon",{staticClass:"mr-3",attrs:{type:"calendar"}}),a._v(" "+a._s(a.statistics.data.establishDays||0)+" 天 ")],1)]),t("a-divider"),t("div",[t("a-list",{attrs:{loading:a.statistics.loading,itemLayout:"horizontal"}},[t("a-list-item",[a._v("累计发表了 "+a._s(a.statistics.data.postCount||0)+" 篇文章。")]),t("a-list-item",[a._v("累计创建了 "+a._s(a.statistics.data.categoryCount||0)+" 个分类。")]),t("a-list-item",[a._v("累计创建了 "+a._s(a.statistics.data.tagCount||0)+" 个标签。")]),t("a-list-item",[a._v("累计获得了 "+a._s(a.statistics.data.commentCount||0)+" 条评论。")]),t("a-list-item",[a._v("累计添加了 "+a._s(a.statistics.data.linkCount||0)+" 个友链。")]),t("a-list-item",[a._v("文章总阅读 "+a._s(a.statistics.data.visitCount||0)+" 次。")]),t("a-list-item")],1)],1)],1)],1),t("a-col",{staticClass:"pb-3",attrs:{lg:14,md:24}},[t("a-card",{attrs:{bodyStyle:{padding:"0"},bordered:!1,title:"个人资料"}},[t("div",{staticClass:"card-container"},[t("a-tabs",{attrs:{type:"card"}},[t("a-tab-pane",{key:"1"},[t("span",{attrs:{slot:"tab"},slot:"tab"},[t("a-icon",{attrs:{type:"idcard"}}),a._v("基本资料 ")],1),t("a-form-model",{ref:"userForm",attrs:{model:a.userForm.model,rules:a.userForm.rules,wrapperCol:{xl:{span:15},lg:{span:15},sm:{span:15},xs:{span:24}},layout:"vertical"}},[t("a-form-model-item",{attrs:{label:"用户名:",prop:"username"}},[t("a-input",{model:{value:a.userForm.model.username,callback:function(t){a.$set(a.userForm.model,"username",t)},expression:"userForm.model.username"}})],1),t("a-form-model-item",{attrs:{label:"昵称:",prop:"nickname"}},[t("a-input",{model:{value:a.userForm.model.nickname,callback:function(t){a.$set(a.userForm.model,"nickname",t)},expression:"userForm.model.nickname"}})],1),t("a-form-model-item",{attrs:{label:"电子邮箱:",prop:"email"}},[t("a-input",{model:{value:a.userForm.model.email,callback:function(t){a.$set(a.userForm.model,"email",t)},expression:"userForm.model.email"}})],1),t("a-form-model-item",{attrs:{label:"个人说明:",prop:"description"}},[t("a-input",{attrs:{autoSize:{minRows:5},type:"textarea"},model:{value:a.userForm.model.description,callback:function(t){a.$set(a.userForm.model,"description",t)},expression:"userForm.model.description"}})],1),t("a-form-model-item",[t("ReactiveButton",{attrs:{errored:a.userForm.errored,loading:a.userForm.saving,erroredText:"保存失败",loadedText:"保存成功",text:"保存",type:"primary"},on:{callback:a.handleUpdatedProfileCallback,click:a.handleUpdateProfile}})],1)],1)],1),t("a-tab-pane",{key:"2"},[t("span",{attrs:{slot:"tab"},slot:"tab"},[t("a-icon",{attrs:{type:"lock"}}),a._v("密码 ")],1),t("a-form-model",{ref:"passwordForm",attrs:{model:a.passwordForm.model,rules:a.passwordForm.rules,wrapperCol:{xl:{span:15},lg:{span:15},sm:{span:15},xs:{span:24}},layout:"vertical"}},[t("a-form-model-item",{attrs:{label:"原密码:",prop:"oldPassword"}},[t("a-input-password",{attrs:{autocomplete:"new-password"},model:{value:a.passwordForm.model.oldPassword,callback:function(t){a.$set(a.passwordForm.model,"oldPassword",t)},expression:"passwordForm.model.oldPassword"}})],1),t("a-form-model-item",{attrs:{label:"新密码:",prop:"newPassword"}},[t("a-input-password",{attrs:{autocomplete:"new-password"},model:{value:a.passwordForm.model.newPassword,callback:function(t){a.$set(a.passwordForm.model,"newPassword",t)},expression:"passwordForm.model.newPassword"}})],1),t("a-form-model-item",{attrs:{label:"确认密码:",prop:"confirmPassword"}},[t("a-input-password",{attrs:{autocomplete:"new-password"},model:{value:a.passwordForm.model.confirmPassword,callback:function(t){a.$set(a.passwordForm.model,"confirmPassword",t)},expression:"passwordForm.model.confirmPassword"}})],1),t("a-form-model-item",[t("ReactiveButton",{attrs:{errored:a.passwordForm.errored,loading:a.passwordForm.saving,erroredText:"更改失败",loadedText:"更改成功",text:"确认更改",type:"primary"},on:{callback:a.handleUpdatedPasswordCallback,click:a.handleUpdatePassword}})],1)],1)],1),t("a-tab-pane",{key:"3"},[t("span",{attrs:{slot:"tab"},slot:"tab"},[t("a-icon",{attrs:{type:"safety-certificate"}}),a._v("两步验证 ")],1),t("a-form-model",{attrs:{layout:"vertical"}},[t("a-form-model-item",{attrs:{label:"两步验证:"}},[t("a-switch",{attrs:{loading:a.mfaParam.switch.loading},on:{change:a.handleMFASwitch},model:{value:a.mfaParam.switch.checked,callback:function(t){a.$set(a.mfaParam.switch,"checked",t)},expression:"mfaParam.switch.checked"}})],1),t("a-form-model-item",{attrs:{label:"两步验证应用:"}},[t("a-list",{attrs:{itemLayout:"horizontal"}},[t("a-list-item",[t("b",[a._v("Authy")]),a._v(" 功能丰富 专为两步验证码 "),t("a-divider",{attrs:{type:"vertical"}}),t("a",{attrs:{href:"https://authy.com/download/",target:"_blank"}},[a._v(" iOS/Android/Windows/Mac/Linux "),t("a-icon",{attrs:{type:"link"}})],1),t("a-divider",{attrs:{type:"vertical"}}),t("a",{attrs:{href:"https://chrome.google.com/webstore/detail/authy/gaedmjdfmmahhbjefcbgaolhhanlaolb?hl=cn",target:"_blank"}},[a._v(" Chrome 扩展 "),t("a-icon",{attrs:{type:"link"}})],1)],1),t("a-list-item",[t("b",[a._v("Google Authenticator")]),a._v(" 简单易用,但不支持密钥导出备份 "),t("a-divider",{attrs:{type:"vertical"}}),t("a",{attrs:{href:"https://apps.apple.com/us/app/google-authenticator/id388497605",target:"_blank"}},[a._v(" iOS "),t("a-icon",{attrs:{type:"link"}})],1),t("a-divider",{attrs:{type:"vertical"}}),t("a",{attrs:{href:"https://play.google.com/store/apps/details?id=com.google.android.apps.authenticator2&hl=cn",target:"_blank"}},[a._v(" Android "),t("a-icon",{attrs:{type:"link"}})],1)],1),t("a-list-item",[t("b",[a._v("Microsoft Authenticator")]),a._v(" 使用微软全家桶的推荐 "),t("a-divider",{attrs:{type:"vertical"}}),t("a",{attrs:{href:"https://www.microsoft.com/zh-cn/account/authenticator",target:"_blank"}},[a._v(" iOS/Android "),t("a-icon",{attrs:{type:"link"}})],1)],1),t("a-list-item",[t("b",[a._v("1Password")]),a._v(" 强大安全的密码管理付费应用 "),t("a-divider",{attrs:{type:"vertical"}}),t("a",{attrs:{href:"https://1password.com/zh-cn/downloads/",target:"_blank"}},[a._v(" iOS/Android/Windows/Mac/Linux/ChromeOS "),t("a-icon",{attrs:{type:"link"}})],1)],1)],1)],1)],1)],1)],1)],1)])],1)],1),t("a-modal",{attrs:{centered:!0,closable:!1,confirmLoading:!1,destroyOnClose:!0,keyboard:!1,title:a.mfaParam.modal.title,visible:a.mfaParam.modal.visible,width:400,icon:"safety-certificate"},scopedSlots:a._u([{key:"footer",fn:function(){return[t("a-button",{key:"back",on:{click:a.handleCloseMFAuthModal}},[a._v(" 取消")]),t("ReactiveButton",{key:"submit",attrs:{errored:a.mfaParam.errored,loading:a.mfaParam.saving,erroredText:"设置失败",loadedText:"设置成功",text:"确定",type:"primary"},on:{callback:a.handleSetMFAuthCallback,click:a.handleSetMFAuth}})]},proxy:!0}])},[t("a-form-model",{ref:"mfaForm",attrs:{model:a.mfaParam,rules:a.mfaParam.rules,layout:"vertical"}},[a.mfaUsed?t("a-form-model-item",{attrs:{label:"两步验证码",prop:"authcode"}},[t("a-input",{attrs:{maxLength:6},scopedSlots:a._u([{key:"prefix",fn:function(){return[t("a-icon",{staticStyle:{color:"rgba(0, 0, 0, 0.25)"},attrs:{type:"safety-certificate"}})]},proxy:!0}],null,!1,4227117093),model:{value:a.mfaParam.authcode,callback:function(t){a.$set(a.mfaParam,"authcode",t)},expression:"mfaParam.authcode"}})],1):a._e(),a.mfaUsed?a._e():t("a-form-model-item",{attrs:{help:`MFAKey:${a.mfaParam.mfaKey}`,label:"1. 请扫描二维码或导入 key"},scopedSlots:a._u([{key:"extra",fn:function(){return[t("span",{staticClass:"text-red-600"},[a._v(" * 建议保存此二维码或 MFAKey,验证设备丢失将无法找回,只能通过重置密码关闭二步验证。 ")])]},proxy:!0}],null,!1,3878319085)},[t("img",{attrs:{src:a.mfaParam.qrImage,width:"100%"}})]),a.mfaUsed?a._e():t("a-form-model-item",{attrs:{label:"2. 验证两步验证码",prop:"authcode"}},[t("a-input",{attrs:{maxLength:6},scopedSlots:a._u([{key:"prefix",fn:function(){return[t("a-icon",{staticStyle:{color:"rgba(0, 0, 0, 0.25)"},attrs:{type:"safety-certificate"}})]},proxy:!0}],null,!1,4227117093),model:{value:a.mfaParam.authcode,callback:function(t){a.$set(a.mfaParam,"authcode",t)},expression:"mfaParam.authcode"}})],1)],1)],1),t("a-modal",{attrs:{title:"修改头像"},scopedSlots:a._u([{key:"footer",fn:function(){return[t("ReactiveButton",{attrs:{errored:a.updateAvatarForm.errored,loading:a.updateAvatarForm.saving,erroredText:"保存失败",loadedText:"保存成功",text:"保存",type:"primary"},on:{callback:a.handleUpdateAvatarCallback,click:a.handleUpdateAvatar}}),t("a-button",{on:{click:function(t){a.updateAvatarForm.visible=!1}}},[a._v("关闭")])]},proxy:!0}]),model:{value:a.updateAvatarForm.visible,callback:function(t){a.$set(a.updateAvatarForm,"visible",t)},expression:"updateAvatarForm.visible"}},[t("a-form",{attrs:{layout:"vertical"}},[t("a-form-item",{attrs:{label:"头像链接:"}},[t("AttachmentInput",{ref:"avatarInput",model:{value:a.updateAvatarForm.avatar,callback:function(t){a.$set(a.updateAvatarForm,"avatar",t)},expression:"updateAvatarForm.avatar"}})],1)],1)],1)],1)},s=[],o=e(80068),i=e(20629),l={data(){const a=(a,t,e)=>{t&&this.passwordForm.model.newPassword!==t?e(new Error("确认密码与新密码不一致")):e()};return{attachmentSelect:{visible:!1},updateAvatarForm:{avatar:void 0,visible:!1,saving:!1,saveErrored:!1},userForm:{model:{},saving:!1,errored:!1,rules:{username:[{required:!0,message:"* 用户名不能为空",trigger:["change"]},{max:50,message:"* 用户名的字符长度不能超过 50",trigger:["change"]}],nickname:[{required:!0,message:"* 用户昵称不能为空",trigger:["change"]},{max:255,message:"* 用户昵称的字符长度不能超过 255",trigger:["change"]}],email:[{required:!0,message:"* 电子邮箱地址不能为空",trigger:["change"]},{type:"email",message:"* 电子邮箱地址格式不正确",trigger:["change"]},{max:127,message:"* 电子邮箱的字符长度不能超过 127",trigger:["change"]}],description:[{max:1023,message:"* 个人说明的字符长度不能超过 1023",trigger:["change"]}]}},statistics:{data:{},loading:!1},passwordForm:{model:{oldPassword:null,newPassword:null,confirmPassword:null},saving:!1,errored:!1,rules:{oldPassword:[{required:!0,message:"* 原密码不能为空",trigger:["change"]},{max:100,min:8,message:"* 密码的字符长度必须在 8 - 100 之间",trigger:["blur"]}],newPassword:[{required:!0,message:"* 新密码不能为空",trigger:["change"]},{max:100,min:8,message:"* 密码的字符长度必须在 8 - 100 之间",trigger:["change"]}],confirmPassword:[{required:!0,message:"* 确认密码不能为空",trigger:["change"]},{validator:a,trigger:["change"]}]}},mfaParam:{mfaKey:null,mfaType:"NONE",mfaUsed:!1,authcode:null,qrImage:null,modal:{title:"确认开启两步验证?",visible:!1},switch:{loading:!1,checked:!1},rules:{authcode:[{required:!0,message:"* 两步验证码不能为空",trigger:["change"]}]},saving:!1,errored:!1}}},computed:{...(0,i.Se)(["options"]),mfaType(){return this.mfaParam.mfaType},mfaUsed(){return this.mfaParam.mfaUsed}},created(){this.handleLoadStatistics()},watch:{mfaType(a){a&&(this.mfaParam.mfaUsed="NONE"!==a)},mfaUsed(a){this.mfaParam.switch.checked=a}},methods:{...(0,i.OI)({setUser:"SET_USER"}),handleLoadStatistics(){this.statistics.loading=!0,o.Z.statistic.statisticsWithUser().then((a=>{this.userForm.model=a.data.user,this.statistics.data=a.data,this.mfaParam.mfaType=this.userForm.model.mfaType&&this.userForm.model.mfaType})).finally((()=>{this.statistics.loading=!1}))},handleUpdatePassword(){const a=this;a.$refs.passwordForm.validate((a=>{a&&(this.passwordForm.saving=!0,o.Z.user.updatePassword(this.passwordForm.model).catch((()=>{this.passwordForm.errored=!0})).finally((()=>{setTimeout((()=>{this.passwordForm.saving=!1}),400)})))}))},handleUpdatedPasswordCallback(){this.passwordForm.errored?this.passwordForm.errored=!1:(this.passwordForm.model.oldPassword=null,this.passwordForm.model.newPassword=null,this.passwordForm.model.confirmPassword=null)},handleUpdateProfile(){const a=this;a.$refs.userForm.validate((a=>{a&&(this.userForm.saving=!0,o.Z.user.updateProfile(this.userForm.model).then((a=>{this.userForm.model=a.data,this.setUser(Object.assign({},this.userForm.model))})).catch((()=>{this.userForm.errored=!0})).finally((()=>{setTimeout((()=>{this.userForm.saving=!1}),400)})))}))},handleUpdatedProfileCallback(){this.userForm.errored&&(this.userForm.errored=!1)},handleMFASwitch(a){this.mfaParam.switch.loading=!0,!a&&this.mfaUsed?(this.mfaParam.modal.title="确认关闭两步验证?",this.mfaParam.modal.visible=!0):(this.mfaParam.modal.title="确认开启两步验证?",o.Z.user.generateMFAQrImage({mfaType:"TFA_TOTP"}).then((a=>{this.mfaParam.mfaKey=a.data.mfaKey,this.mfaParam.qrImage=a.data.qrImage,this.mfaParam.modal.visible=!0})).catch((()=>{this.mfaParam.switch.loading=!1})))},handleSetMFAuth(){const a=this,t=a.mfaUsed?"NONE":"TFA_TOTP";a.$refs.mfaForm.validate((e=>{e&&(a.mfaParam.saving=!0,o.Z.user.updateMFAuth({mfaType:t,mfaKey:a.mfaParam.mfaKey,authcode:a.mfaParam.authcode}).catch((()=>{a.mfaParam.errored=!0})).finally((()=>{setTimeout((()=>{a.mfaParam.saving=!1}),400)})))}))},handleSetMFAuthCallback(){this.mfaParam.errored?this.mfaParam.errored=!1:(this.handleCloseMFAuthModal(),this.handleLoadStatistics(),this.$message.success(this.mfaUsed?"两步验证已关闭!":"两步验证已开启,下次登录生效!"))},handleCloseMFAuthModal(){this.mfaParam.modal.visible=!1,this.mfaParam.switch.loading=!1,this.mfaParam.switch.checked=this.mfaUsed,this.mfaParam.authcode=null,this.mfaParam.qrImage=null,this.mfaParam.mfaKey=null},handleOpenUpdateAvatarForm(){this.updateAvatarForm.avatar=this.userForm.model.avatar,this.updateAvatarForm.visible=!0,this.$nextTick((()=>{this.$refs.avatarInput.focus()}))},async handleUpdateAvatar(){const{data:a}=await o.Z.user.getProfile();a.avatar=this.updateAvatarForm.avatar,this.updateAvatarForm.saving=!0,o.Z.user.updateProfile(a).catch((()=>{this.updateAvatarForm.saveErrored=!0})).finally((()=>{setTimeout((()=>{this.updateAvatarForm.saving=!1}),400),this.handleLoadStatistics()}))},handleUpdateAvatarCallback(){this.updateAvatarForm.saveErrored?this.updateAvatarForm.saveErrored=!1:this.updateAvatarForm.visible=!1}}},m=l,d=e(1001),n=(0,d.Z)(m,r,s,!1,null,null,null),c=n.exports}}]); |