Bilibili-Evolved/min/custom-navbar-user-info.min.js
2021-10-26 13:22:15 +08:00

1 line
8.2 KiB
JavaScript

(()=>(e,i)=>{function t(e,i,t){if(i in e){Object.defineProperty(e,i,{value:t,enumerable:true,configurable:true,writable:true})}else{e[i]=t}return e}const{NavbarComponent:n}=i.import("custom-navbar-component");class s extends n{constructor(){super();t(this,"userInfo",{mid:getUID(),isLogin:Boolean(getUID())});this.boundingWidth=240;this.noPadding=true;this.href="https://space.bilibili.com";this.html=`\n<div class="user-face-container">\n<img src='${EmptyImageUrl}' class="user-face"></img>\n<img src='${EmptyImageUrl}' class="user-pendant"></img>\n</div>\n`;this.popupHtml=`<div class="user-info-panel"></div>`;this.requestedPopup=true;this.init()}get name(){return"userInfo"}async init(){const e=await SpinQuery.select(".custom-navbar .user-info-panel");const i=await SpinQuery.select(".custom-navbar .user-face-container .user-face");const t=await Ajax.getJsonWithCredentials("https://api.bilibili.com/x/web-interface/nav");const n=await Ajax.getJsonWithCredentials("https://api.bilibili.com/x/web-interface/nav/stat");Object.assign(this.userInfo,t.data);Object.assign(this.userInfo,n.data);const s=new Vue({template:`\n<div class="user-info-panel">\n<div v-if="isLogin" class="logged-in">\n<a class="name" target="_blank" href="https://space.bilibili.com/">{{uname}}</a>\n<a class="type" target="_blank" href="https://account.bilibili.com/account/big">{{userType}}</a>\n<div class="privileges row" v-if="this.vipStatus === 1 && this.vipType === 2">\n<div class="b-coin" :class="{received: privileges.bCoin.received}" @click="privilegeReceive(1)" :title="'有效期限: ' + privileges.bCoin.expire">\n {{privileges.bCoin.received ? '已领取B币' : '领取B币'}}\n</div>\n<div class="coupons" :class="{received: privileges.coupons.received}" @click="privilegeReceive(2)" :title="'有效期限: ' + privileges.coupons.expire">\n {{privileges.coupons.received ? '已领取优惠券' : '领取优惠券'}}\n</div>\n</div>\n<div class="level-info row">\n<a target="_blank" title="等级" href="https://account.bilibili.com/account/record"\n class="level">\n<i class="custom-navbar-iconfont-extended" :class="'custom-navbar-icon-lv' + level_info.current_level"></i>\n</a>\n<span class="level-progress-label">{{level_info.current_exp}} / {{level_info.next_exp}}</span>\n</div>\n<div class="level-progress separator">\n<div class="level-progress-thumb" :style="levelProgressStyle"></div>\n</div>\n<div class="items">\n<a class="item" target="_blank" title="手机验证"\n href="https://passport.bilibili.com/account/security#/bindphone">\n<i class="custom-navbar-iconfont-new-home custom-navbar-icon-bind-phone"></i>\n<i v-if="mobile_verified" class="custom-navbar-iconfont-new-home custom-navbar-icon-ok"></i>\n<i v-else class="custom-navbar-iconfont-new-home custom-navbar-icon-cancel"></i>\n</a>\n<a class="item" target="_blank" title="邮箱验证"\n href="https://passport.bilibili.com/account/security#/bindmail">\n<i class="custom-navbar-iconfont-new-home custom-navbar-icon-bind-email"></i>\n<i v-if="email_verified" class="custom-navbar-iconfont-new-home custom-navbar-icon-ok"></i>\n<i v-else class="custom-navbar-iconfont-new-home custom-navbar-icon-cancel"></i>\n</a>\n<a class="item" target="_blank" href="https://account.bilibili.com/site/coin" title="硬币">\n<i class="custom-navbar-iconfont-new-home custom-navbar-icon-coin"></i>\n<span>{{money}}</span>\n</a>\n<a class="item" target="_blank" href="https://pay.bilibili.com/bb_balance.html" title="B币">\n<i class="custom-navbar-iconfont-new-home custom-navbar-icon-b-coin"></i>\n<span>{{wallet.bcoin_balance}}</span>\n</a>\n</div>\n<div class="separator"></div>\n<div class="stats">\n<a class="stats-item" :href="'https://space.bilibili.com/' + mid + '/fans/follow'" target="_blank">\n<div class="stats-number">{{following | count}}</div>\n 关注\n</a>\n<a class="stats-item" :href="'https://space.bilibili.com/' + mid + '/fans/fans'" target="_blank">\n<div class="stats-number">{{follower | count}}</div>\n 粉丝\n</a>\n<a class="stats-item" :href="'https://space.bilibili.com/' + mid + '/dynamic'" target="_blank">\n<div class="stats-number">{{dynamic_count | count}}</div>\n 动态\n</a>\n</div>\n<div class="separator"></div>\n<a class="operation" target="_blank" href="https://account.bilibili.com/account/home">\n<i class="icon custom-navbar-icon-profile custom-navbar-iconfont-new-home"></i>\n 个人中心\n</a>\n<a class="operation" target="_blank" href="https://member.bilibili.com/v2#/upload-manager/article">\n<i class="icon custom-navbar-icon-posts custom-navbar-iconfont-new-home"></i>\n 投稿管理\n</a>\n<a class="operation" target="_blank" href="https://pay.bilibili.com/">\n<i class="icon custom-navbar-icon-wallet custom-navbar-iconfont-new-home"></i>\n B币钱包\n</a>\n<a class="operation" target="_blank" href="https://link.bilibili.com/p/center/index">\n<i class="icon custom-navbar-icon-live-center custom-navbar-iconfont-new-home"></i>\n 直播中心\n</a>\n<a class="operation" target="_blank" href="https://show.bilibili.com/orderlist">\n<i class="icon custom-navbar-icon-order-center custom-navbar-iconfont-new-home"></i>\n 订单中心\n</a>\n<a class="operation" target="_blank" href="https://www.bilibili.com/v/cheese/mine">\n<i class="icon custom-navbar-icon-course custom-navbar-iconfont-new-home"></i>\n 我的课程\n</a>\n<div class="logout grey-button" @click="logout()">\n 退出登录\n</div>\n</div>\n<div v-else class="not-logged-in">\n<h1 class="welcome">欢迎来到 bilibili</h1>\n<a href="https://passport.bilibili.com/register/phone.html" class="signup grey-button">注册</a>\n<a href="https://passport.bilibili.com/login" class="login theme-button">登录</a>\n</div>\n</div>\n`,data:{...this.userInfo,privileges:{bCoin:{received:false,expire:""},coupons:{received:false,expire:""}}},filters:{count(e){return formatCount(e)}},computed:{userType(){if(!this.isLogin){return"未登录"}if(this.level_info.current_level===0){return"注册会员"}if(this.vipStatus===1){if(this.vipType===1){return this.vip_theme_type?"小会员":"大会员"}else if(this.vipType===2){return this.vip_theme_type?"年度小会员":"年度大会员"}}return"正式会员"},levelProgressStyle(){const e=(this.level_info.current_exp-this.level_info.current_min)/(this.level_info.next_exp-this.level_info.current_min);return{transform:`scaleX(${e})`}}},methods:{async privilegeReceive(e){const i={1:"bCoin",2:"coupons"};if(this.privileges[i[e]].received){return}this.privileges[i[e]].received=true;const t=getCsrf();const n=await(await fetch("https://api.bilibili.com/x/vip/privilege/receive",{credentials:"include",headers:{"content-type":"application/x-www-form-urlencoded"},body:`type=${e}&csrf=${t}`,method:"POST"})).json();console.log(n);if(n.code===0){if(i[e]==="bCoin"){this.wallet.bcoin_balance+=5}}else if(n.code===69801){return}else{this.privileges[i[e]].received=false;logError(n.message)}},async logout(){const e=await Ajax.postTextWithCredentials("https://passport.bilibili.com/login/exit/v2",formData({biliCSRF:getCsrf()}));const i=_.get(JSON.parse(e),"data.redirectUrl","");if(i){window.location.assign(i)}}}});s.$mount(e);if(this.userInfo.isLogin){const e=this.userInfo.face.replace("http","https");const t="//static.hdslb.com/images/member/noface.gif";if(!e.includes(t)){const t=68;i.setAttribute("srcset",getDpiSourceSet(e,t))}else{i.setAttribute("src",t)}if(this.userInfo.pendant.image){const e=await SpinQuery.select(".custom-navbar .user-face-container .user-pendant");const i=this.userInfo.pendant.image.replace("http","https");const t=116;e.setAttribute("srcset",getDpiSourceSet(i,t,"png"))}if(this.userInfo.vipType===2){const e=await Ajax.getJsonWithCredentials("https://api.bilibili.com/x/vip/privilege/my");if(e.code===0){const i=e.data.list.find((e=>e.type===1));s.privileges.bCoin.received=i.state===1;s.privileges.bCoin.expire=new Date(i.expire_time*1e3).toLocaleDateString();const t=e.data.list.find((e=>e.type===2));s.privileges.coupons.received=t.state===1;s.privileges.coupons.expire=new Date(t.expire_time*1e3).toLocaleDateString()}}}else{i.setAttribute("src","https://static.hdslb.com/images/akari.jpg")}}}return{export:{UserInfo:s}}})();