//挂载axios
axios.defaults.timeout = 1000000;
Vue.prototype.$http = axios //需要鉴权
Vue.prototype.$https = axios //不需要鉴权
Vue.prototype.$b2JsonData = []
var b2_rest_url = b2_global.rest_url+'b2/v1/'
const b2timedom = document.querySelectorAll('.b2timeago');
if(b2timedom.length > 0){
timeago.render(b2timedom, b2_global.language);
}
var b2zoom = new Zooming({enableGrab:true,scrollThreshold:0,transitionDuration:0.2,scaleBase:0.96,scaleExtra:1,customSize:'100%'});
var B2ClientWidth = document.body.clientWidth;
const b2token = b2getCookie('b2_token')
var lazyLoadInstance = new LazyLoad({
elements_selector: ".lazy",
threshold: 0,
});
if(b2token){
Vue.prototype.$http.defaults.headers.common['Authorization'] = 'Bearer ' + b2token
}
Vue.prototype.$store = new Vuex.Store({
state: {
userData: '',
userRole:'',
announcement:'',
oauthLink:'',
openOauth:false,
authorData:'',
carts:{},
_carts:{},
xieyi:0
},
mutations: {
setUserData (state,data) {
state.userData = data
},
setUserRole (state,data) {
state.userRole = data
},
setAnnouncement (state,data) {
state.announcement = data
},
setOauthLink(state,data){
state.oauthLink = data
},
setOpenOauth(state,data){
state.openOauth = data
},
setauthorData(state,data){
state.authorData = data
},
setcartsData(state,data){
state.carts = data
},
set_cartsData(state,data){
state._carts = data
},
setcanImage(state,data){
state.canImg = data
}
}
})
var passiveSupported = false;
try {
var options = Object.defineProperty({}, "passive", {
get: function() {
passiveSupported = true;
}
});
window.addEventListener("test", null, options);
} catch(err) {}
b2WidgetImageLoaded()
function b2WidgetImageLoaded(){
imagesLoaded( document.querySelectorAll('.widget-area'), function( instance ) {
b2SidebarSticky()
});
}
function b2isWeixin() { //判断是否是微信
var ua = navigator.userAgent.toLowerCase();
return ua.match(/MicroMessenger/i) == "micromessenger";
};
document.ready = function (callback) {
///兼容FF,Google
if (document.addEventListener) {
document.addEventListener('DOMContentLoaded', function () {
document.removeEventListener('DOMContentLoaded', arguments.callee, false);
callback();
}, passiveSupported ? { passive: true } : false)
}
//兼容IE
else if (document.attachEvent) {
document.attachEvent('onreadystatechange', function () {
if (document.readyState == "complete") {
document.detachEvent("onreadystatechange", arguments.callee);
callback();
}
})
}
else if (document.lastChild == document.body) {
callback();
}
}
var topsearch = new Vue({
el:'.top-search',
data:{
type:'post',
data:'',
show:false,
b2token:false
},
mounted(){
if(!this.$refs.topsearch) return
this.b2token = b2token
const s = this.$refs.topsearch.getAttribute('data-search')
this.data = JSON.parse(s)
if(b2GetQueryVariable('type') && b2GetQueryVariable('s')){
this.type = b2GetQueryVariable('type')
}else{
this.type = Object.keys(this.data)[0]
}
}
})
const goodsBoxs = document.querySelectorAll('.module-products')
if(goodsBoxs.length > 0){
for (let i = 0; i < goodsBoxs.length; i++) {
new Vue({
el:goodsBoxs[i].querySelector('.shop-box'),
data:{
id:0,
opts:[],
locked:false,
paged:1
},
mounted(){
this.opts = JSON.parse(goodsBoxs[i].querySelector('.shop-box').getAttribute('data-opts'))
},
methods:{
getGoods(id){
if(this.loaded) return
this.locked = true
var data = {
terms:[id],
count:this.opts.count,
w:this.opts.w,
h:this.opts.h,
open:this.opts.open,
ratio:this.opts.ratio,
paged:this.paged
}
if(id == 0){
delete data.terms
}
this.id = id
this.$https.post(b2_rest_url+'getShopList',Qs.stringify(data)).then(res=>{
if(res.data){
this.$el.querySelector('.b2_gap').innerHTML = res.data
this.$nextTick(()=>{
lazyLoadInstance.update()
})
}
this.locked = false
}).catch(err=>{
Qmsg['warning'](err.response.data.message,{html:true});
this.locked = false
})
}
}
})
}
}
var mobileMenu = new Vue({
el:'#mobile-menu-button',
data:{
show:false,
b2token:false
},
mounted(){
if(B2ClientWidth >= 768) return
this.b2token = b2token
this.dorpMenu()
},
methods:{
dorpMenu(){
let drop = document.querySelectorAll('.has_children .b2-arrow-down-s-line')
if(drop.length > 0){
for (let index = 0; index < drop.length; index++) {
drop[index].onclick = (event)=>{
event.stopPropagation()
event.preventDefault()
if(event.target.parentNode.parentNode.className.indexOf(' show') == -1){
this.hideAll()
event.target.parentNode.parentNode.className += ' show'
}else{
this.hideAll()
}
}
}
}
},
hideAll(){
let sub = document.querySelectorAll('.has_children .sub-menu')
for (let i = 0; i < sub.length; i++) {
sub[i].parentNode.className = sub[i].parentNode.className.replace(' show','')
}
},
showMenu(val){
const menu = document.querySelector('#mobile-menu')
body = document.querySelector('html')
if(val){
menu.className += ' show-menu-box'
body.className += ' m-open'
//bodyScrollLock.lock(this.$refs.MobileMenu)
this.show = true
}else{
menu.className = menu.className.replace(' show-menu-box','')
setTimeout(() => {
body.className = body.className.replace(' m-open','')
}, 300);
//bodyScrollLock.unlock(this.$refs.MobileMenu)
this.show = false
}
},
showAc(){
this.show = !this.show
this.showMenu(this.show)
}
}
})
Vue.component('search-box', {
props: ['show','searchType'],
template:b2_global.search_box,
data(){
return{
showSearch:false,
type:'post'
}
},
mounted(){
const search = document.querySelector('.top-search')
if(search){
const data = search.getAttribute('data-search');
if(data){
let json = JSON.parse(data)
this.type = Object.keys(json)[0]
}
}
},
methods:{
close(){
this.$emit('close')
}
},
watch:{
searchType(val){
this.type = val
}
}
})
var b2SearchBox = new Vue({
el:'#search-box',
data:{
searchType:'all',
show:false
},
methods:{
close(){
this.show = !this.show
}
}
})
function historyWidget(){
let history = document.querySelectorAll('.b2-widget-history')
if(history.length > 0){
for (let i = 0; i < history.length; i++) {
new Vue({
el:history[i],
data:{
data:[],
count:10
},
mounted(){
this.count = history[i].querySelector('.history-widget').getAttribute('data-count')
let historys = JSON.parse(localStorage.getItem('b2_view_history')) || []
//获取前 count 条数据
this.data = historys.slice(0,this.count)
this.$nextTick(()=>{
b2RestTimeAgo(this.$el.querySelectorAll('.b2timeago'))
})
},
methods:{
clear(){
//提示是否删除
let r = confirm(b2_global.js_text.global.clear_history)
console.log(r)
if(r){
localStorage.removeItem('b2_view_history')
this.data = []
}
}
}
})
}
}
}
var userTools = new Vue({
el:'.top-user-info',
data:{
showDrop:false,
role:{
write:true,
newsflashes:false,
binding_login:false,
create_circle:false,
create_topic:false,
distribution:false,
user_data:''
},
b2token:false
},
computed:{
userData(){
return this.$store.state.userData;
}
},
mounted() {
this.b2token = b2token
document.onclick = (e)=>{
this.hideAction()
}
console.log(b2_global.post_id)
if(b2_global.post_id != 0){
this.writeHistory()
}
historyWidget()
if(b2token){
let footer_text = document.querySelector('#footer-menu-user');
if(footer_text){
footer_text.innerText = b2_global.js_text.global.my;
}
this.$http.post(b2_rest_url +'getUserInfo').then(res=>{
this.role = res.data
this.$store.commit('setUserRole', res.data)
this.$store.commit('setUserData', res.data.user_data)
this.$store.commit('setcanImage', res.data.can_img)
b2AsideBar.count = res.data.carts
topMenuLeft.count = res.data.msg_unread
b2bindLogin.type = res.data.binding_login
payCredit.user.credit = res.data.user_data.credit
this.$nextTick(()=>{
b2tooltip('.user-tips')
lazyLoadInstance.update()
})
}).catch(err=>{
this.loginOut()
})
}else{
this.$https.get(b2_rest_url+'getOauthLink').then(res=>{
this.$store.commit('setOauthLink',res.data)
this.$nextTick(()=>{
lazyLoadInstance.update()
})
})
let ref = b2GetQueryVariable('ref')
if(ref){
b2setCookie('ref',ref)
}
}
},
methods: {
//写入浏览历史
writeHistory(){
//获取浏览历史
let address = JSON.parse(localStorage.getItem('b2_view_history')) || []
console.log(address)
//获取当前页面URL,不包含锚点和查询参数
let url = window.location.origin + window.location.pathname
//获取站点的名称和分隔符
let siteName = b2_global.site_name
let siteSeparator = b2_global.site_separator
let title = document.title
//删除标题中的空格
title = title.replace(/\s+/g,"")
//从标题末尾删除站点名称
title = title.substring(0, title.length - siteName.length);
//从标题末尾删除分隔符
title = title.substring(0, title.length - siteSeparator.length);
//获取当前页面缩略图
let thumb = document.querySelector('meta[property="og:image"]')
//如果不存在则获取默认缩略图
if(!thumb){
thumb = b2_global.default_thumb
}else{
thumb = thumb.getAttribute('content')
}
//判断当前页面是否已经存在于浏览历史中
for (let i = 0; i < address.length; i++) {
if(address[i].url == url){
address.splice(i,1)
}
}
//如果浏览历史大于10条则删除最后一条
if(address.length >= 30){
address.pop()
}
//获取当前访问时间,格式为 2023-01-01 00:00:00
let time = new Date().toLocaleString('zh',{hour12:false}).replace(/\//g, '-')
//获取当前页面文章形式
let type = b2_global.post_type
//将当前页面信息写入数组前端
address.unshift({
'url':url,
'title':title,
'thumb':thumb,
'time':time,
'type':type
})
localStorage.setItem('b2_view_history',JSON.stringify(address))
},
hideAction(){
this.showDrop = false
if(typeof b2Comment !== 'undefined'){
b2Comment.show.smile = false
b2Comment.show.image = false
}
if(typeof b2infomation !== 'undefined'){
b2infomation.showFliter = false
}
if(typeof b2TaxTop !== 'undefined'){
b2TaxTop.showFliter.hot = false
b2TaxTop.showFliter.cat = false
}
if(typeof topsearch !== 'undefined'){
topsearch.show = false
}
if(typeof writeHead !== 'undefined'){
Qmsg.closeAll()
}
if(typeof b2CirclePostBox !== 'undefined'){
b2CirclePostBox.ask.focus = false
if(b2CirclePostBox.ask.userInput){
b2CirclePostBox.ask.picked = true
}
b2CirclePostBox.role.show = false
b2CirclePostBox.smileShow = false
}
if(typeof poAsk !== 'undefined'){
poAsk.ask.focus = false
if(poAsk.userInput){
poAsk.ask.picked = true
}
}
if(typeof b2CircleList !== 'undefined'){
if(!b2CircleList.$refs.topicForm) return
if(!b2CircleList.commentBox.content){
if(b2CircleList.$refs.topicForm.value == ''){
b2CircleList.commentBox.focus = false
}
b2CircleList.smileShow = false
}
//b2CircleList.circle.current = b2CircleList.circle.picked.type
b2CircleList.circle.showBox = ''
b2CircleList.topicFliter.show = false
b2CircleList.answer.showSmile = false
}
b2AsideBar.close()
},
login(type){
login.show = true
login.loginType = type
},
showDropMenu(){
this.showDrop = !this.showDrop
},
loginOut(){
axios.get(b2_rest_url+'loginOut').then(res=>{
b2delCookie('b2_token')
b2CurrentPageReload()
}).catch(err=>{
b2delCookie('b2_token')
b2CurrentPageReload()
})
},
out(){
this.loginOut()
},
// goLinkRegisterPage(){
// if(!b2token){
// this.login(1)
// return
// }
// },
goUserPage(type){
if(type === 'back'){
window.location = b2getCookie('b2_back_url')
}else
if(type){
if(!b2token){
this.login(1)
return
}
window.location = this.$store.state.userData.link+'/'+type
}else{
if(!b2token){
this.login(1)
return
}
window.location = this.$store.state.userData.link
}
}
},
})
var topMenuLeft = new Vue({
el:'.change-theme',
data:{
theme:'light',
count:0,
login:false
},
mounted(){
if(b2token){
this.login = true
}
},
methods:{
changeTheme(type){
this.theme = type
},
showBox(){
postPoBox.show = true
},
go(type){
if(type === 'orders'){
if(b2token){
window.location.href = this.$store.state.userData.link+'/orders'
}else{
login.show = true
login.loginType = 1
}
}
if(type === 'requests'){
if(b2token){
window.location.href = b2_global.home_url+'/requests'
}else{
login.show = true
login.loginType = 1
}
}
}
}
})
var headerTools = new Vue({
el:'.header-tools',
computed:{
userData(){
return this.$store.state.userData;
}
},
methods:{
showSearch(){
b2SearchBox.close()
},
}
})
//登陆与注册
Vue.component('login-box', {
props: ['show','allowRegister','checkType','loginType','loginText','invitation','invitationLink','invitationText','imgBoxCode'],
template:b2_global.login,
data(){
return {
data:{
'nickname':'',
'username':'',
'password':'',
'code':'',
'img_code':'',
'invitation_code':'',
'token':'',
'smsToken':'',
'luoToken':'',
'confirmPassword':'',
'loginType':''
},
invitationPass:false,
eye:false,
codeImg:'',
locked:false,
showLuo:false,
issetLuo:false,
imgLocked:false,
SMSLocked:false,
count:60,
repass:false,
type:'',
isWeixin:false,
}
},
computed:{
oauth(){
return this.$store.state.oauthLink
},
openOauth(){
return this.$store.state.openOauth
}
},
created(){
window.getResponse = (resp) => {
if(this.type == 'edit'){
b2AuthorEdit.sendCode(resp)
recaptcha.close()
}else{
this.data.img_code = resp
this.$nextTick(()=>{
recaptcha.close()
this.sendSMS()
})
}
}
this.isWeixin = b2isWeixin()
},
methods:{
close(val){
this.$emit('close-form',val)
},
loginAc(val){
this.$emit('login-ac',val)
},
loginSubmit(e){
e.preventDefault()
if(this.locked == true) return
this.locked = true
//邀请码
if(this.invitation != 0 && (this.loginType == 2 && !this.invitationPass)){
this.invitationCheck()
}else if(this.loginType == 1){
//登录
this.$https.post(b2_global.rest_url+'jwt-auth/v1/token',Qs.stringify(this.data)).then(res=>{
b2CurrentPageReload()
return
}).catch(err=>{
Qmsg['warning'](err.response.data.message,{html:true,timeout:10000});
this.locked = false
})
}else if(this.loginType == 2){
if(!this.$store.state.xieyi && this.loginType == 2){
e.preventDefault();
Qmsg['warning'](b2_global.js_text.global.xieyi,{html:true});
this.locked = false
return
}
//注册
this.$https.post(b2_rest_url+'regeister',Qs.stringify(this.data)).then(res=>{
b2CurrentPageReload()
return
}).catch(err=>{
Qmsg['warning'](err.response.data.message,{html:true});
this.locked = false
})
}else if(this.loginType == 3){
this.$https.post(b2_rest_url+'forgotPass',Qs.stringify(this.data)).then(res=>{
this.loginAc(4)
this.locked = false
}).catch(err=>{
Qmsg['warning'](err.response.data.message,{html:true});
this.locked = false
})
}else if(this.loginType == 4){
this.$https.post(b2_rest_url+'resetPass',Qs.stringify(this.data)).then(res=>{
this.repass = true
this.data.password = ''
this.loginAc(1)
this.locked = false
}).catch(err=>{
Qmsg['warning'](err.response.data.message,{html:true});
this.locked = false
})
}
},
b2IsPhoneAvailable(val){
if(b2IsPhoneAvailable(val)) return true
return false
},
invitationCheck(){
this.$https.post(b2_rest_url+'invitationCheck','code='+this.data.invitation_code).then(res=>{
this.invitationPass = true
this.locked = false
this.showLuo = true
}).catch(err=>{
Qmsg['warning'](err.response.data.message,{html:true});
this.locked = false
})
},
sendCode(){
recaptcha.show = true
this.close(false)
},
getCode(){
if(this.imgLocked) return
this.codeImg = ''
this.imgLocked = true
this.$https.post(b2_rest_url+'getRecaptcha','number=4&width=186&height=50').then(res=>{
if(res.data){
this.codeImg = res.data.base
this.data.token = res.data.token
}
this.imgLocked = false
}).catch(err=>{
Qmsg['warning'](err.response.data.message,{html:true});
this.imgLocked = false
})
},
changeCode(){
this.getCode()
},
isEmail(email){
var pattern= /^([a-zA-Z0-9]+[_|\_|\.]?)*[a-zA-Z0-9]+@([a-zA-Z0-9]+[_|\_|\.]?)*[a-zA-Z0-9]+\.[a-zA-Z]{2,3}$/;
return pattern.test(email);
},
checkTips(){
let text = ''
if(this.checkType == 'tel'){
text = b2_global.js_text.global.check_type.tel
}
if(this.checkType == 'email'){
text = b2_global.js_text.global.check_type.mail
}
if(this.checkType == 'telandemail'){
if(this.isEmail(this.data.username)){
text = b2_global.js_text.global.check_type.mail
}else{
text = b2_global.js_text.global.check_type.tel
}
}
if(text){
Qmsg.info(b2_global.js_text.global.check_message,{
showClose:true,
autoClose:false
})
}
},
sendSMS(){
if(this.SMSLocked) return
this.SMSLocked = true
this.data.loginType = this.loginType
this.$https.post(b2_rest_url+'sendCode',Qs.stringify(this.data)).then(res=>{
if(res.data.token){
this.data.smsToken = res.data.token
}
this.SMSLocked = false
this.countdown()
this.checkTips()
}).catch(err=>{
Qmsg['warning'](err.response.data.message,{html:true});
this.SMSLocked = false
})
},
markHistory(mp,e){
if(!this.$store.state.xieyi && this.loginType == 2 && e){
e.preventDefault();
Qmsg['warning'](b2_global.js_text.global.xieyi,{html:true});
return
}
if(mp){
this.close()
mpCode.show = true
mpCode.type = this.loginType
}
b2setCookie('b2_back_url',window.location.href)
},
countdown(){
if(this.count <= 1 ){
this.count = 60
return
}
this.count --
setTimeout(()=>{
this.countdown()
},1000)
},
resetPssNext(){
this.loginAc(4)
}
},
watch:{
oauth(val){
if(val){
Object.keys(val).forEach((key)=>{
if(val[key].open){
this.$store.commit('setOpenOauth',true)
}
});
if(b2isWeixin() && b2_global.wx_mp_in_login == 1){
if(!b2token && document.querySelector('#open-page') === null){
b2setCookie('b2_back_url',window.location.href)
window.location.href = this.oauth.weixin.url
}
}
}
},
loginType(val){
if((this.invitation == 0 || this.invitationPass) && val == 2){
this.showLuo = true
}else{
this.showLuo = false
}
if(this.issetLuo){
LUOCAPTCHA && LUOCAPTCHA.reset()
}
},
invitationPass(val){
if(this.issetLuo && val){
setTimeout(()=>{
LUOCAPTCHA && LUOCAPTCHA.reset()
},100)
}
},
show(val){
if(val && this.checkType == 'text'){
this.getCode()
this.type = ''
}else
if(val && login.qrcode !== '0' && this.loginType == 1){
this.markHistory(true,null)
}
},
imgBoxCode(val){
this.data.img_code = val.value
this.data.token = val.token
},
showLuo(val){
if(this.show && this.checkType == 'luo' && val && !this.issetLuo){
let s = document.createElement('script')
s.id = 'luosimao'
s.type = 'text/javascript'
s.src = '//captcha.luosimao.com/static/dist/api.js'
document.getElementsByTagName("head")[0].appendChild(s)
this.issetLuo = true
}
}
}
})
Vue.component('mp-box', {
props:['show','invitation','invitationLink','invitationText'],
template:b2_global.mp_box,
data(){
return{
code:'',
locked:false,
token:false,
invitationCode:'',
locked:false,
qrcode:'',
t:false,
count:100
}
},
computed:{
oauthLink(){
return this.$store.state.oauthLink
}
},
methods:{
close(){
this.$emit('close')
this.t = null
},
submit(){
if(this.locked == true) return
this.locked = true
if(this.count <= 1 || this.t === null){
this.t = null
this.count = 100
return
}
this.$http.post(b2_rest_url+'mpLogin','code='+this.code).then(res=>{
if(res.data === 'waiting'){
this.locked = false
this.t = setTimeout(()=>{
this.submit()
},1000)
return
}
if(res.data.type === 'invitation'){
this.token = res.data.token
}else{
if(res.data === true){
b2CurrentPageReload()
}else{
this.$store.commit('setUserData', res.data)
Vue.prototype.$http.defaults.headers.common['Authorization'] = 'Bearer ' + b2token
b2CurrentPageReload()
}
}
this.t = null
this.locked = false
}).catch(err=>{
Qmsg['warning'](err.response.data.message,{html:true});
this.locked = false
})
},
checkInv(){
if(this.locked == true) return
this.locked = true
this.$https.post(b2_rest_url+'mpLoginInv','token='+this.token+'&inv='+this.invitationCode).then(res=>{
if(res.data.token){
b2CurrentPageReload()
}
this.locked = false
}).catch(err=>{
Qmsg['warning'](err.response.data.message,{html:true});
this.locked = false
})
},
getQrcode(){
this.$https.post(b2_rest_url+'getLoginQrcode').then(res=>{
this.code = res.data.sence_id
this.qrcode = res.data.qrcode
this.submit()
}).catch(err=>{
Qmsg['warning'](err.response.data.message,{html:true});
})
}
},
watch:{
show(val){
if(val){
if(this.oauthLink.weixin.pc_open){
b2loadScript('https://res.wx.qq.com/connect/zh_CN/htmledition/js/wxLogin.js','',()=>{
new WxLogin({
self_redirect:false,
id:"mp-login-box",
appid: b2_global.wx_appid,
scope: "snsapi_login",
redirect_uri: b2_global.home_url+'/open?type=weixin',
state: "",
style: "black",
href: "data:text/css;base64,LmltcG93ZXJCb3ggLnFyY29kZSB7DQogICAgd2lkdGg6IDEwMCU7DQogICAgbWFyZ2luLXRvcDogMDsNCiAgICBib3JkZXI6IDA7DQp9DQouaW1wb3dlckJveCAuaW5mbyB7DQogICAgZGlzcGxheTogbm9uZTsNCn0NCi5pbXBvd2VyQm94IC50aXRsZXsNCmRpc3BsYXk6bm9uZQ0KfQ=="
});
})
}else{
this.locked = false
this.t = false
this.count = 100
this.getQrcode()
}
}
}
}
})
var mpCode = new Vue({
el:'#mp-box',
data:{
show:false,
qrcode:'',
type:'1',
},
methods:{
close(){
this.show = !this.show
if(!b2token && login.qrcode === '0'){
login.show = true
login.loginType = this.type
}
}
}
})
var login = new Vue({
el:'#login-box',
data:{
show:false,
loginType:1,
checkCodeSendSuccess:false,
isAdmin:false,
imgCode:'',
qrcode:'0'
},
mounted(){
this.qrcode = b2_global.mp_qrcode
},
methods:{
close(val){
this.show = val
this.qrcode = b2_global.mp_qrcode
},
loginAc(val){
this.loginType = val
},
imgCodeAc(val){
this.imgCode = val
}
}
})
//验证码组件
Vue.component('recaptcha-box', {
props: ['show','type'],
template:b2_global.check_code,
data(){
return {
recaptcha:'',
token:'',
recaptchaUrl:'',
disabled:true,
issetLuo:false,
locked:false,
loginType:2,
checkType:b2_global.check_type,
}
},
methods:{
close(){
this.$emit('close-form')
},
change(){
//获取验证码base64及token
if(this.locked) return
this.recaptchaUrl = ''
this.locked = true
this.$https.post(b2_rest_url+'getRecaptcha','number=4&width=186&height=50').then(res=>{
if(res.data){
this.recaptchaUrl = res.data.base
this.token = res.data.token
}
this.locked = false
}).catch(err=>{
Qmsg['warning'](err.response.data.message,{html:true});
this.locked = false
})
},
checkCode(){
if(this.disabled) return
this.disabled = true
this.$https.post(b2_rest_url+'imgCodeCheck','img_code='+this.recaptcha+'&token='+this.token+'&loginType='+login.loginType).then(res=>{
if(this.type == 'edit'){
b2AuthorEdit.imgCodeAc({
value:this.recaptcha,
token:this.token
})
}else if(this.type == 'bind'){
b2bindLogin.imgCodeAc({
value:this.recaptcha,
token:this.token
})
}else{
login.imgCodeAc({
value:this.recaptcha,
token:this.token
})
setTimeout(()=>{
login.$refs.loginBox.sendSMS()
},50)
}
this.disabled = false
this.close()
}).catch(err=>{
Qmsg['warning'](err.response.data.message,{html:true});
this.disabled = false
})
}
},
watch:{
show(val){
if(val && b2_global.check_type == 'normal'){
this.change()
}
if(val && !this.issetLuo && login.loginType != 3){
let s = document.createElement('script')
s.id = 'luosimao'
s.type = 'text/javascript'
s.src = '//captcha.luosimao.com/static/dist/api.js?time='+((new Date()).getTime())
document.getElementsByTagName("head")[0].appendChild(s)
this.issetLuo = true
}else if(val && this.issetLuo && login.loginType != 3){
LUOCAPTCHA && LUOCAPTCHA.reset()
}
if(this.type != 'edit'){
this.loginType = login.loginType
}
},
recaptcha(val){
if(val.length == 4){
this.disabled = false
}else{
this.disabled = true
}
}
}
})
var recaptcha = new Vue({
el:'#recaptcha-form',
data:{
show:false,
type:''
},
methods:{
close(){
this.show = false
if(this.type != 'edit' && this.type != 'bind'){
login.show = true
}
if(this.type === 'bind'){
b2bindLogin.show = true
}
},
}
})
function indexPostModules(){
let m = document.querySelectorAll('.post-list');
if(m.length > 0){
for (let i = 0; i < m.length; i++) {
let key = m[i].getAttribute('data-key')
if(m[i].id != 'undefined'){
new Vue({
el:'#post-item-'+key,
data:{
key:0,
index:0,
box:'',
paged:1,
pages:0,
type:'cat',
showButton:false,
locked:false,
cat:[],
finish:false,
id:0
},
mounted(){
if(this.$el.querySelector('.load-more')){
this.key = key
this.index = this.$el.getAttribute('data-i')
this.box = this.$el.querySelectorAll('.b2_gap')[0]
this.showButton = this.$el.querySelector('.load-more').getAttribute('data-showButton')
}
},
methods:{
getList(id,type,postType){
if(this.finish && type == 'more'){
return
}else{
this.finish = false
}
if(this.locked) return
this.locked = true
this.id = id
if(type){
this.type = type
}
if(this.type == 'cat'){
this.paged = 1;
if(id){
this.cat = [id]
}else{
this.cat = []
}
this.finish = false
}else{
this.paged = this.paged + 1
}
let data = {
'index':this.index,
'id':this.cat,
'post_paged':this.paged
}
axios.post(b2_rest_url+'getModulePostList',Qs.stringify(data)).then(res=>{
if(res.data.count > 0){
this.pages = res.data.pages
if(this.type == 'cat'){
if(this.pages == 1){
this.box.innerHTML = res.data.data
}else{
this.box.innerHTML = res.data.data
}
if(postType == 'post-2'){
b2PackeryLoad()
}
this.showButton = true
}else if(this.type == 'more'){
this.box.insertAdjacentHTML('beforeend', res.data.data)
if(postType == 'post-2'){
b2PackeryLoad()
}
this.showButton = true
}
if(this.paged >= this.pages ){
this.finish = true
}
}else{
if(postType == 'post-6'){
this.box.innerHTML = '
'+b2_global.empty_page+' |
'
}else{
this.box.innerHTML = b2_global.empty_page
}
this.showButton = false
}
this.locked = false
b2SidebarSticky()
this.$nextTick(()=>{
lazyLoadInstance.update()
})
})
}
}
})
}
}
}
}
indexPostModules()
//遍历dom树,依次添加 is-visible 类,使其支持渐变显示
function listFadein(dom,time){
return
var i = 0
dom.forEach(e=>{
if(e.className.indexOf('is-visible') === -1){
i++
if(i== 1){
e.className += ' is-visible'
}else{
setTimeout(function(){
e.className += ' is-visible'
}, i*time )
}
}
})
}
listFadein(document.querySelectorAll('.post-list ul.b2_gap > li'),10)
//加载瀑布流
function b2PackeryLoad(e){
var grid = document.querySelectorAll('.grid')
if(grid.length > 0){
for (let index = 0; index < grid.length; index++) {
let pack = new Packery( grid[index])
pack.on( 'layoutComplete', ()=>{
b2SidebarSticky()
});
}
}
}
b2PackeryLoad()
//新版分页
//type p 分页加载,m 下拉加载
Vue.component('pagenav-new',{
props: ['type','paged','pages','opt','api','rote'],
template: b2_global.page_nav,
data:function(){
return {
locked:false,
next:false,
per:false,
cpage:0,
cpaged:1,
cpages:[],
mobile:false,
showGo:false
}
},
created(){
window.addEventListener('scroll', _debounce(this.autoLoadMore),passiveSupported ? { passive: true } : false)
this.cpaged = parseInt(this.paged)
this.cpages = this.pagesInit()
//监听前进与后退
window.addEventListener("popstate", ()=>{
let state = history.state;
if(state && state.page && this.type == 'p'){
this.go(state.page)
}
},passiveSupported ? { passive: true } : false);
this.mobile = B2ClientWidth > 768 ? false : true
},
methods:{
disabled(page){
return page == this.cpaged && this.locked == true
},
pagesInit(){
let pagearr = []
if(this.pages <= 6){
for (let i = 1; i <= this.pages; i++) {
pagearr.push(i)
}
}else{
if(!this.cpaged) this.cpaged = this.paged
if(this.cpaged < 4){
for (let i = 1; i <= this.pages; i++) {
if(i >= 5) break
pagearr.push(i)
}
pagearr.push(0,this.pages)
}else if(this.cpaged >= 4 && this.pages - 2 > this.cpaged){
pagearr.push(1,0)
for (let i = this.cpaged - 1; i <= this.cpaged + 1; i++) {
pagearr.push(i)
}
pagearr.push(0,this.pages)
}else if(this.pages - 2 <= this.cpaged){
pagearr.push(1,0)
for (let i = this.cpaged - 2; i <= this.pages; i++) {
pagearr.push(i)
}
}
}
return pagearr
},
focus(){
this.showGo = true
},
blur(){
setTimeout(() => {
this.showGo = false
}, 100);
},
autoLoadMore(){
if(this.type == 'p') return
if(this.cpaged == this.pages) return;
let scrollTop = document.documentElement.scrollTop;
if(scrollTop + window.innerHeight >= document.body.clientHeight - 550) {
this.go(this.cpaged+1)
}
},
trimSlashes(str){
return str.replace(/\/+$/, '');
},
go(page,type,action){
page = parseInt(page)
if(this.opt.length > 0) return
if(this.cpaged == page && !action) return
if(this.locked == true) return
this.locked = true
if(this.type === 'm' && this.pages <= this.cpaged && page != 1) return
if(type == 'next'){
this.next = true
this.per = false
}else if(type == 'per'){
this.per = true
this.next = false
}
this.cpaged = page
this.opt['post_paged'] = page
this.opt['paged'] = page
this.$http.post(b2_rest_url+this.api,Qs.stringify(this.opt)).then(res=>{
this.locked = false
this.cpages = this.pagesInit()
this.$emit('return',res.data)
if(this.rote){
let currentURL = window.location.href,
url = this.trimSlashes(currentURL.split('?')[0]),
newURL
console.log(url)
if(this.cpaged == 1){
newURL = url.replace(/\/page\/\d/, '');
}else{
if(currentURL.indexOf('/page/') == -1){
newURL = url+'/page/'+this.cpaged
}else{
newURL = url.replace(/\/page\/[0-9]*$/, '/page/'+page);
}
}
url = currentURL.replace(url,newURL)
window.history.pushState({page:page}, null,url )
if(this.type === 'p'){
b2AsideBar.goTop()
}
}
b2SidebarSticky()
this.$nextTick(()=>{
lazyLoadInstance.update()
})
}).catch(err=>{
Qmsg['warning'](err.response.data.message,{html:true});
})
},
//获取数据
getData(fn,data){
this.cpaged = this.cpage
this.cpages = this.pagesInit()
},
//跳转
jump(event){
var val = event.target.value || event.target.previousElementSibling.value || this.$refs.pagenavnumber.value
val = parseInt(val)
if(val > this.pages) return
this.go(val,'p',true)
}
},
watch: {
pages(val){
this.cpages = this.pagesInit()
},
paged(){
this.cpaged = parseInt(this.paged)
this.cpages = this.pagesInit()
}
}
})
//分页代码
Vue.component('page-nav',{
props: ['paged','navtype','pages','type','box','opt','api','url','title'],
template: b2_global.page_nav,
data:function(){
return {
locked:false,
next:false,
per:false,
cpage:0,
cpaged:1,
cpages:[],
mobile:false,
showGo:false
}
},
created(){
window.addEventListener('scroll', _debounce(this.autoLoadMore),passiveSupported ? { passive: true } : false)
this.cpaged = parseInt(this.paged)
this.cpages = this.pagesInit()
//监听前进与后退
window.addEventListener("popstate", ()=>{
let state = history.state;
if(state && state.page && this.type == 'p'){
this.go(state.page)
}
},passiveSupported ? { passive: true } : false);
this.mobile = B2ClientWidth > 768 ? false : true
},
methods:{
disabled(page){
return page == this.cpaged && this.locked == true
},
pagesInit(){
let pagearr = []
if(this.pages <= 7){
for (let i = 1; i <= this.pages; i++) {
pagearr.push(i)
}
}else{
if(!this.cpaged) this.cpaged = this.paged
if(this.cpaged < 5){
for (let i = 1; i <= this.pages; i++) {
if(i >= 6) break
pagearr.push(i)
}
pagearr.push(0,this.pages)
}else if(this.cpaged >= 5 && this.pages - 3 > this.cpaged){
pagearr.push(1,0)
for (let i = this.cpaged - 2; i <= this.cpaged + 2; i++) {
pagearr.push(i)
}
pagearr.push(0,this.pages)
}else if(this.pages - 3 <= this.cpaged){
pagearr.push(1,0)
for (let i = this.cpaged - 3; i <= this.pages; i++) {
pagearr.push(i)
}
}
}
return pagearr
},
autoLoadMore(){
setTimeout(() => {
if(this.type == 'p') return
let scrollTop = document.documentElement.scrollTop;
if(scrollTop + window.innerHeight >= document.body.clientHeight - 550) {
this.go(this.cpaged+1)
}
}, 300);
},
focus(){
this.showGo = true
},
blur(){
setTimeout(() => {
this.showGo = false
}, 100);
},
go(page,type,action){
page = parseInt(page)
if(this.opt.length > 0) return
if(this.cpaged == page && !action) return
if(this.locked == true) return
if(this.type === 'm' && this.pages <= this.cpaged && page != 1) return
this.locked = true
if(type == 'next'){
this.next = true
this.per = false
}else if(type == 'per'){
this.per = true
this.next = false
}
this.cpaged = page
console.log(this.cpaged)
this.opt['post_paged'] = page
this.opt['paged'] = page
this.$http.post(b2_rest_url+this.api,Qs.stringify(this.opt)).then(res=>{
this.locked = false
this.cpages = this.pagesInit()
let dom = document.querySelector(this.box)
//如果返回的是json数据
if(this.navtype === 'json'){
this.$emit('return',res.data)
}else{
if(this.type === 'p'){
dom.innerHTML = res.data.data
}else{
dom.insertAdjacentHTML('beforeend', res.data.data)
}
}
if(page != 1){
this.url = b2removeURLParameter(this.url,'action')
}
//变更地址栏和title
if(!!(window.history && history.pushState)){
if(page != 1){
if(this.navtype === 'comment'){
if(b2_global.structure){
window.history.pushState({page:page}, null, this.url+'/comment-page-'+page+'#comment')
}else{
window.history.pushState({page:page}, null, this.url+'&cpage='+page+'#comment')
}
}else{
if(this.navtype != 'authorComments' && this.title){
document.title = this.title+' '+b2_global.site_separator+' '+(b2_global.page_title.replace('{#}',page))+' '+b2_global.site_separator+' '+b2_global.site_name
}
let currentURL = window.location.href,
url = currentURL.split('?')[0],
newURL
if(this.cpaged == 1){
newURL = url.replace(/\/page\/\d/, '');
}else{
if(currentURL.indexOf('/page/') == -1){
newURL = url+'/page/'+this.cpaged
}else{
newURL = url.replace(/\/page\/[0-9]*$/, '/page/'+page);
}
}
url = currentURL.replace(url,newURL)
window.history.pushState({page:page}, null,url )
if(this.type === 'p'){
b2AsideBar.goTop()
}
}
}else{
if(this.navtype === 'comment'){
window.history.pushState({page:page}, null, this.url+'#comment')
}else{
if(this.navtype != 'authorComments' && this.title){
document.title = this.title+' '+b2_global.site_separator+' '+b2_global.site_name
}
window.history.pushState({page:page}, null, this.url)
}
}
}
if(this.navtype === 'comment' || this.navtype === 'authorComments'){
let img = document.querySelectorAll('.comment-img-box img');
if(img.length > 0){
for (let index = 0; index < img.length; index++) {
// var img = new Image();
// img.src = img[index].getAttribute('data-original');
// img.onload = function(){
// img[index].setAttribute('data-zooming-width',img.width)
// img[index].setAttribute('data-zooming-height',img.height)
// };
b2zoom.listen(img[index]);
}
}
if(this.navtype === 'comment'){
b2CommentList.showSticky()
b2SidebarSticky()
}
}else if(this.navtype === 'post'){
b2PackeryLoad()
//渐显
setTimeout(()=>{
listFadein(document.querySelectorAll(this.box+' > li'),20)
},500)
}
this.$emit('finish')
b2SidebarSticky()
this.$nextTick(()=>{
lazyLoadInstance.update()
})
}).catch(err=>{
Qmsg['warning'](err.response.data.message,{html:true});
})
},
//获取数据
getData(fn,data){
this.cpaged = this.cpage
this.cpages = this.pagesInit()
},
//跳转
jump(event){
var val = event.target.value || event.target.previousElementSibling.value || this.$refs.pagenavnumber.value
val = parseInt(val)
if(val > this.pages) return
this.go(val,'p',true)
}
},
watch: {
pages(val){
this.cpages = this.pagesInit()
},
paged(){
this.cpaged = parseInt(this.paged)
this.cpages = this.pagesInit()
}
}
})
function b2RestTimeAgo(dom){
if(dom && dom.length > 0)
timeago.render(dom, b2_global.language);
}
let pageNavBox = new Vue({
el:'.post-nav',
data:{
selecter:'#post-list .b2_gap',
opt:'',
api:'getPostList',
options:[],
value:1,
showGoN:false
},
mounted(){
if(typeof b2_cat !== 'undefined'){
this.opt = b2_cat.opt
}
},
methods:{
jumpAc:function(event){
var val = event.target.value || event.target.previousElementSibling.value || this.$refs.pagenavnumber.value
if(val > this.opt.pages) return
let currentURL = window.location.href,
url = currentURL.split('?')[0],
newURL
if(val == 1){
newURL = url.replace(/\/page\/\d/, '');
}else{
if(currentURL.indexOf('/page/') == -1){
newURL = url+'/page/'+val
}else{
newURL = url.replace(/\/page\/[0-9]*$/, '/page/'+val);
}
}
url = currentURL.replace(url,newURL)
window.location.href = url;
},
focus(){
this.showGoN = true
},
blur(){
setTimeout(() => {
this.showGoN = false
}, 100);
},
}
})
//语音播放
let b2Audio = new Vue({
el:'.b2-audio-content',
data:{
url:'',
textList:[],
playStatus:false,
api:'https://tts.baidu.com/text2audio?cuid=baike&lan=ZH&ctp=1&pdt=301&tex=',
index:0,
currentTime:'00:00',
startTime:'00:00',
step:0,
duration:0,
ds:'',
width:'0%'
},
methods:{
play(){
//如果未播放,加载播放列表
if(!this.url){
this.getPlayList()
}else{
this.playList()
}
},
getPlayList(){
this.$https.post(b2_rest_url+'getPostAudio','post_id='+this.$refs.audio.getAttribute('data-id')).then((res)=>{
if(res.data.length > 0){
this.textList = res.data
//res.data
this.playList()
this.watchPlay()
}
})
},
playList(){
this.url = this.api+this.textList[this.index];
setTimeout(()=>{
this.button()
})
},
watchPlay(){
this.$refs.audio.addEventListener('ended', ()=> {
if(this.index >= this.textList.length - 1) {
this.playStatus = false
this.index = 0
this.step = 0
return;
}
this.step = 0
this.index = this.index + 1
this.playList()
},passiveSupported ? { passive: true } : false)
},
button(){
if(this.$refs.audio!==null){
if(this.$refs.audio.paused){
this.$refs.audio.play()
this.playStatus = true
this.timeSetp()
}else{
this.$refs.audio.pause()
this.playStatus = false
}
this.$refs.audio.addEventListener("loadedmetadata",()=>{
this.duration = Math.round(this.$refs.audio.duration)
this.currentTime = this.secondToDate(this.duration)
},passiveSupported ? { passive: true } : false);
}
},
timeSetp(){
if(this.playStatus == true){
this.startTime = this.secondToDate(this.step++)
if(this.ds){
clearTimeout(this.ds)
}
this.ds = setTimeout(()=>{
this.timeSetp()
this.width = this.step/this.duration * 100 + '%'
},1000)
}
},
secondToDate(s){
var t;
if(s > -1){
var hour = Math.floor(s/3600)
var min = Math.floor(s/60) % 60
var sec = s % 60
if(hour > 1){
if(hour < 10) {
t = '0'+ hour + ":"
} else {
t = hour + ":";
}
}else{
t = '';
}
if(min < 10){t += "0"}
t += min + ":";
if(sec < 10){t += "0"}
t += sec.toFixed(0);
}
return t;
}
}
})
var socialLogin = new Vue({
el:'#juhe-social',
data:{
locked:false,
error:''
},
mounted(){
if(!this.$refs.juhebox) return
let type = b2GetQueryVariable('type')
this.locked = true
this.$http.post(b2_rest_url+'juheSocialLogin','type='+type).then(res=>{
window.location.href = res.data
}).catch(err=>{
this.error = err.response.data.message
this.locked = false
})
},
methods:{
back(){
let url = b2getCookie('b2_back_url')
if(url){
window.location.href = url
}else{
window.location.href = b2_global.home_url
}
},
}
})
var socialBox = new Vue({
el:'#social-box',
data:{
locked:false,
type:'',
data:{
'token':'',
'invitation':'',
'subType':''
},
error:'',
oauth:'',
name:''
},
mounted(){
if(this.$refs.socialBox){
let code = b2GetQueryVariable('code'),
juhe = b2GetQueryVariable('juhe') ? b2GetQueryVariable('juhe') : 0;
this.type = b2GetQueryVariable('type')
if(code){
this.locked = true
this.$http.post(b2_rest_url+'socialLogin','code='+code+'&type='+this.type+'&juhe='+juhe).then(res=>{
this.locked = false
if(res.data === true){
this.back()
}else if(res.data.type == 'invitation'){
this.type = 'invitation',
this.data.token = res.data.token
}else{
this.back()
}
}).catch(err=>{
if(err.response.data.message.msg){
this.oauth = err.response.data.message.oauth
this.error = err.response.data.message.msg
this.name = err.response.data.message.name
}else{
this.error = err.response.data.message
}
this.locked = false
})
}
}
},
methods:{
back(){
let url = b2getCookie('b2_back_url')
if(url){
window.location.href = url
}else{
window.location.href = b2_global.home_url
}
},
invRegeister(type){
if(this.locked == 'pass' || this.locked == 'sub') return
this.locked = type
this.data.subType = type
this.$http.post(b2_rest_url+'invRegeister',Qs.stringify(this.data)).then(res=>{
this.back()
}).catch(err=>{
Qmsg['warning'](err.response.data.message,{html:true});
this.locked = false
})
},
loginOut(url){
b2delCookie('b2_token')
b2CurrentPageReload(url)
},
rebuild(ev){
this.$http.post(b2_rest_url+'unBuild','type='+this.type+'&user_id='+b2_author.author_id).then(res=>{
}).catch(err=>{
ev.preventDefault();
Qmsg['warning'](err.response.data.message,{html:true});
})
}
}
})
Vue.component('gg-box', {
props: ['show'],
template: b2_global.gg_box,
computed:{
ggdata(){
return this.$store.state.announcement[0]
}
},
methods:{
close(){
this.$emit('close')
},
}
})
var b2GG = new Vue({
el:'#gong-box',
data:{
show:false
},
mounted(){
this.$http.post(b2_rest_url+'getLatestAnnouncement','count=3').then(res=>{
if(res.data.length > 0){
this.$store.commit('setAnnouncement',res.data)
this.show = res.data[0].show
}else{
this.$store.commit('setAnnouncement','none')
}
})
},
methods:{
close(){
this.show = false
let timestamp = new Date().getTime()
timestamp = parseInt(timestamp/1000)
b2setCookie('gg_info',timestamp)
}
}
})
Vue.component('dmsg-box', {
props: ['show','userid','type'],
template: b2_global.dmsg_box,
data(){
return {
user:[],
content:'',
locked:false,
nickname:'',
UserList:[],
search:false
}
},
methods:{
close(){
this.$emit('close')
setTimeout(()=>{
this.user = []
this.content = ''
this.nickname = ''
this.UserList = []
},100)
},
getUserData(id = 0){
id = !id ? this.userid : id
this.$http.post(b2_rest_url+'getUserPublicData','user_id='+id).then(res=>{
this.user = res.data
b2Dmsg.userid = id
b2Dmsg.select = ''
this.UserList = []
}).catch(err=>{
Qmsg['warning'](err.response.data.message,{html:true});
})
},
edit(){
b2Dmsg.select = 'select'
},
send(){
if(this.locked == true) return
this.locked = true
this.$http.post(b2_rest_url+'sendDirectmessage','user_id='+this.userid+'&content='+this.content).then(res=>{
if(res.data == true){
this.close()
}
if(b2DmsgPage.$refs.dmsgPage){
b2DmsgPage.getList()
}
this.locked = false
}).catch(err=>{
Qmsg['warning'](err.response.data.message,{html:true});
this.locked = false
})
},
searchUser(val){
if(this.locked == true) return
this.locked = true
this.search = true
this.$http.post(b2_rest_url+'searchUsers','nickname='+val).then(res=>{
if(res.data.length > 0){
this.UserList = res.data
}else{
this.UserList = []
}
this.locked = false
}).catch(err=>{
Qmsg['warning'](err.response.data.message,{html:true});
this.locked = false
this.UserList = []
})
}
},
watch:{
show(val){
if(val && this.type !== 'select'){
this.getUserData()
}
},
nickname(val){
if(val){
this.searchUser(val);
}
}
}
})
var b2Dmsg = new Vue({
el:'#dmsg-box',
data:{
userid:0,
show:false,
select:''
},
methods:{
close(){
this.show = !this.show
}
}
})
var b2DmsgPage = new Vue({
el:'.dmsg-page',
data:{
list:false,
locked:false,
count:0,
pages:0,
selecter:'.dmsg-header',
opt:{
paged:1
},
api:'getUserDirectmessageList'
},
mounted(){
if(this.$refs.dmsgPage){
this.opt.paged = this.$refs.dmsgPage.getAttribute('data-paged')
this.getList()
}
},
methods:{
getList(){
this.$http.post(b2_rest_url+'getUserDirectmessageList',Qs.stringify(this.opt)).then(res=>{
this.list = res.data.data
this.pages = res.data.count
this.locked = false
this.$nextTick(()=>{
b2RestTimeAgo(this.$el.querySelectorAll('.b2timeago'))
})
}).catch(err=>{
Qmsg['warning'](err.response.data.message,{html:true});
this.locked = false
})
},
showDmsgBox(){
b2Dmsg.select = 'select'
b2Dmsg.show = true
},
get(data){
this.list = data.data
this.pages = data.count
this.$nextTick(()=>{
b2RestTimeAgo(this.$el.querySelectorAll('.b2timeago'))
})
},
jump(id){
window.location.href = this.$refs.dmsgPage.getAttribute('data-url')+'/to/'+id;
},
deleteDmsg(id){
}
}
})
var b2dmsgPageTo = new Vue({
el:'.dmsg-page-to',
data:{
list:false,
locked:false,
opt:{
paged:1,
userid:0
},
count:0,
pages:0,
selecter:'.dmsg-header',
api:'getMyDirectmessageList',
content:'',
sendLocked:false
},
mounted(){
if(this.$refs.mydmsg){
this.opt.userid = this.$refs.mydmsg.getAttribute('data-id')
this.opt.paged = this.$refs.mydmsg.getAttribute('data-paged')
this.getList();
}
},
methods:{
getList(){
this.$http.post(b2_rest_url+'getMyDirectmessageList',Qs.stringify(this.opt)).then(res=>{
this.list = res.data.data
this.locked = false
this.count = res.data.count
this.pages = res.data.pages
this.$nextTick(()=>{
b2RestTimeAgo(this.$el.querySelectorAll('.b2timeago'))
})
}).catch(err=>{
Qmsg['warning'](err.response.data.message,{html:true});
this.locked = false
})
},
get(val){
this.list = val.data
this.count = val.count
this.pages = val.pages
},
send(){
if(this.sendLocked == true) return
this.sendLocked = true
this.$http.post(b2_rest_url+'sendDirectmessage','user_id='+this.opt.userid+'&content='+this.content).then(res=>{
this.getList()
this.content = ''
this.sendLocked = false
}).catch(err=>{
Qmsg['warning'](err.response.data.message,{html:true});
this.sendLocked = false
})
}
}
})
var b2DownloadPage = new Vue({
el:'#download-page',
data:{
data:'',
postId:0,
index:0,
i:0
},
mounted(){
if(this.$refs.downloadPage){
this.postId = b2GetQueryVariable('post_id');
this.index = b2GetQueryVariable('index');
this.i = b2GetQueryVariable('i');
this.getData()
var clipboard = new ClipboardJS('.fuzhi');
clipboard.on('success', e=>{
Qmsg['success'](b2_global.js_text.global.copy_success,{html:true});
});
clipboard.on('error', e=> {
Qmsg['warning'](b2_global.js_text.global.copy_select,{html:true});
});
}
},
methods:{
getData(){
let guest = b2getCookie('b2_guest_buy_'+this.postId+'_x')
if(guest){
guest = JSON.parse(guest)
}
let data = {
'post_id':this.postId,
'index':this.index,
'i':this.i,
'guest':guest
}
this.$http.post(b2_rest_url+'getDownloadPageData',Qs.stringify(data)).then(res=>{
this.data = res.data
}).catch(err=>{
Qmsg['warning'](err.response.data.message,{html:true});
})
},
login(){
login.show = true
}
}
})
Vue.component('check-box',{
props: ['show','title','type','payt'],
template: b2_global.pay_check,
data(){
return {
success:false,
timeOut:300,
timesec:'',
sTime:'',
check:false,
checkTime:'',
orderType:''
}
},
methods:{
close(){
this.$emit('close')
this.sTime = ''
this.checkTime = ''
},
checkAc(){
if((this.sTime === null && this.success == 'fail') || this.checkTime === null || this.success === true){
this.checkTime = null
return
}
let value = b2getCookie('order_id')
this.$http.post(b2_rest_url+'payCheck','order_id='+value).then(res=>{
if(res.data.status === 'success'){
this.orderType = res.data.type
if(!b2token){
let list = b2getCookie('b2_guest_buy_'+res.data.id+'_'+res.data.type)
if(!list){
list = new Object()
}else{
list = JSON.parse(list)
}
Reflect.set(list,res.data.index,{
'id':res.data.id,
'order_id':value,
'type':res.data.type,
'index':res.data.index
})
list = JSON.stringify(list)
b2setCookie('b2_guest_buy_'+res.data.id+'_'+res.data.type,list)
}
//b2delCookie('order_id')
if(typeof(B2VerifyPage) !== "undefined"){
B2VerifyPage.data.money = true
this.close()
}else if(typeof(carts) !== "undefined"){
carts.step = 3
this.close()
}else if(this.payt === 'ask'){
b2CircleList.afterCommentGetData(b2CircleList.answer.listParent,b2CircleList.data[b2CircleList.answer.listParent].topic_id,'ask')
this.close()
}else if(this.payt === 'hidden'){
b2CircleList.afterCommentGetData(b2CircleList.hiddenIndex,b2CircleList.data[b2CircleList.hiddenIndex].topic_id,'hidden')
this.close()
}
this.success = true;
this.checkTime = null;
this.sTime = null
}else{
this.checkTime = setTimeout(()=>{
this.checkAc()
},1000)
}
})
},
time(){
this.currTime = parseInt(Date.parse(new Date())/1000);
this.endTime = parseInt(this.currTime + this.timeOut);
this.setTime()
},
setTime(){
if(this.show == false || this.success === true) {
this.sTime = null
this.checkTime = null;
return
}
let diff_time = parseInt(this.endTime-this.currTime);
let m = Math.floor((diff_time / 60 % 60));
let s = Math.floor((diff_time % 60));
this.timesec = (m > 0 ? m + ''+b2_global.js_text.global.min+'' : '') + s + ''+b2_global.js_text.global.sec+'';
if(diff_time > 0){
this.sTime = setTimeout(()=>{
this.endTime = this.endTime - 1;
this.setTime()
},1000)
}else{
this.sTime = null
this.success = 'fail'
}
},
refresh(){
if(typeof(B2VerifyPage) !== "undefined"){
B2VerifyPage.data.money = true
this.close()
}else if(typeof(carts) !== "undefined"){
carts.step = 3
this.close()
}else if(this.payt === 'ask'){
b2CircleList.afterCommentGetData(b2CircleList.answer.listParent,b2CircleList.data[b2CircleList.answer.listParent].topic_id,'ask')
this.close()
}else if(this.payt === 'hidden'){
b2CircleList.afterCommentGetData(b2CircleList.hiddenIndex,b2CircleList.data[b2CircleList.hiddenIndex].topic_id,'hidden')
this.close()
}else if(typeof(b2poinfomation) !== "undefined" && b2poinfomation.$refs.poinfomation){
b2poinfomation.getPoinfomationOpts()
this.close()
}else if(this.orderType === 'x'){
b2DownloadBox.getList()
this.close()
}else{
var url = new URL(window.location.href);
url.searchParams.delete('b2paystatus');
window.location.href=url.href
b2CurrentPageReload()
}
}
},
watch:{
show(val){
if(this.type == 'card') return
if(val){
this.sTime = ''
this.checkTime = ''
this.time()
this.checkAc()
}else{
this.sTime = null
this.success = false
this.checkTime = null
}
}
}
})
//跳转支付检查支付结果
var b2PayCheck = new Vue({
el:'#pay-check',
data:{
show:false,
title:'',
type:'',
payType:''
},
mounted(){
if(b2GetQueryVariable('b2paystatus') == 'check'){
this.show = true
}
},
methods:{
close(){
this.show = !this.show
if(!this.show){
this.payType = ''
}
}
}
})
//支付跳转页面
var b2Pay = new Vue({
el:'#pay-page',
data:{
data:[],
token:'',
error:'',
locked:false,
payUrl:''
},
mounted(){
if(this.$refs.payPage){
this.token = this.$refs.payPage.getAttribute('data-token');
if(!this.token){
this.data = JSON.parse(this.$refs.payPage.getAttribute('data-pay'));
this.pay()
}
}
},
methods:{
pay(){
if(this.locked == true) return
this.locked = true
this.$http.post(b2_rest_url+'buildOrder',Qs.stringify(this.data)).then(res=>{
this.token = res.data
this.payUrl = window.location.href.split('?')[0]+'?token='+this.token
//b2MakeForm(window.location.href.split('?')[0],this.token)
this.locked = false
}).catch(err=>{
this.error = err.response.data.message
this.locked = false
})
}
}
})
function b2MakeForm(url,token){
// 创建一个 form
var form1 = document.createElement("form");
form1.id = "form1";
form1.name = "form1";
// 添加到 body 中
document.body.appendChild(form1);
// 创建一个输入
var input = document.createElement("input");
// 设置相应参数
input.name = "token";
input.value = token;
// 将该输入框插入到 form 中
form1.appendChild(input);
// form 的提交方式
form1.method = "POST";
// form 提交路径
form1.action = url;
// 对该 form 执行提交
form1.submit();
// 删除该 form
document.body.removeChild(form1);
}
//扫码支付组件
Vue.component('scan-box',{
props: ['show','data'],
template: b2_global.scan_box,
data(){
return {
locked:false,
qrcode:'',
timeOut:300,
timesec:'',
sTime:'',
success:'',
checkTime:'',
backData:[]
}
},
methods:{
close(){
this.$emit('close')
this.backData = []
this.checkTime = null
},
buildOrder(){
if(this.locked == true) return
this.locked = true
this.currTime = parseInt(Date.parse(new Date())/1000);
this.endTime = parseInt(this.currTime + this.timeOut);
this.setTime()
this.$http.post(b2_rest_url+'buildOrder',Qs.stringify(this.data)).then(res=>{
this.backData = res.data
if(res.data.type !== 'mapay' && res.data.type !== 'pay020' && res.data.type !== 'xunhu'){
var qr = new QRious({
value: this.backData.qrcode,
size:200,
level:'L'
});
this.backData.qrcode = qr.toDataURL('image/jpeg')
}
this.writeOrder(res.data.order_id)
this.locked = false
this.checkAc()
}).catch(err=>{
Qmsg['warning'](err.response.data.message,{html:true});
this.locked = false
})
},
writeOrder(id){
b2setCookie('order_id',id)
},
checkAc(){
if((this.sTime === null && this.success == 'fail') || this.checkTime === null || this.show == false){
this.checkTime = null
return
}
let value = b2getCookie('order_id')
this.$http.post(b2_rest_url+'payCheck','order_id='+value).then(res=>{
if(res.data.status === 'success'){
if(!b2token){
let list = b2getCookie('b2_guest_buy_'+res.data.id+'_'+res.data.type)
if(!list){
list = new Object()
}else{
list = JSON.parse(list)
}
Reflect.set(list,res.data.index,{
'id':res.data.id,
'order_id':value,
'type':res.data.type,
'index':res.data.index
})
list = JSON.stringify(list)
b2setCookie('b2_guest_buy_'+res.data.id+'_'+res.data.type,list)
}
this.success = true;
this.checkTime = null;
//b2delCookie('order_id')
if(typeof(B2VerifyPage) !== "undefined"){
B2VerifyPage.data.money = true
this.close()
}
if(typeof(carts) !== "undefined"){
carts.step = 3
this.close()
}
if(this.data.order_type === 'circle_read_answer_pay'){
b2CircleList.afterCommentGetData(b2CircleList.answer.listParent,b2CircleList.data[b2CircleList.answer.listParent].topic_id,'ask')
this.close()
}
if(this.data.order_type === 'circle_hidden_content_pay'){
b2CircleList.afterCommentGetData(b2CircleList.hiddenIndex,b2CircleList.data[b2CircleList.hiddenIndex].topic_id,'hidden')
this.close()
}
}else{
this.checkTime = setTimeout(()=>{
this.checkAc()
},1000)
}
})
},
setTime(){
if(this.show == false) return
let diff_time = parseInt(this.endTime-this.currTime);
let m = Math.floor((diff_time / 60 % 60));
let s = Math.floor((diff_time % 60));
this.timesec = (m > 0 ? m + ''+b2_global.js_text.global.min+'' : '') + s + ''+b2_global.js_text.global.sec+'';
if(diff_time > 0){
this.sTime = setTimeout(()=>{
this.endTime = this.endTime - 1;
this.setTime()
},1000)
}else{
this.sTime = null
this.success = 'fail'
}
},
refresh(){
if(this.data.order_type === 'circle_read_answer_pay'){
b2CircleList.afterCommentGetData(b2CircleList.answer.listParent,b2CircleList.data[b2CircleList.answer.listParent].topic_id,'ask')
this.close()
}else if(this.data.order_type === 'circle_hidden_content_pay'){
b2CircleList.afterCommentGetData(b2CircleList.hiddenIndex,b2CircleList.data[b2CircleList.hiddenIndex].topic_id,'hidden')
this.close()
}else{
b2CurrentPageReload()
}
}
},
watch:{
show(val){
if(val){
this.sTime = ''
this.success = false
this.checkTime = ''
}else{
this.sTime = null
this.success = false
this.checkTime = null
}
},
data:{
deep:true,
handler(newName, oldName) {
this.buildOrder()
},
}
}
})
//扫码支付
var b2ScanPay = new Vue({
el:'#scan-box',
data:{
data:[],
show:false
},
methods:{
close(){
this.show = !this.show
}
}
})
Vue.component('ds-box', {
props: ['show','money','msg','user','author','data','showtype'],
template:b2_global.ds_box,
data(){
return {
value:0,
custom:0,
content:'',
payType:'',
payMoney:'',
locked:false,
jump:'',
href:'',
isWeixin:'',
isMobile:'',
allow:[],
card:[],
cg:[],
newWin: null,
login:false,
redirect:'',
payData:'',
waitOrder:false
}
},
created(){
this.isWeixin = b2isWeixin()
if(b2token){
this.login = true
}
this.redirect = b2getCookie('b2_back_url');
},
methods:{
close(){
this.$emit('close')
this.locked = false
},
clean(){
this.$emit('clean')
},
picked(m,val){
this.value = val
this.payMoney = m
},
post(url, params) {
var temp = document.createElement("form"); //创建form表单
temp.action = url;
temp.method = "post";
temp.target = "_blank";
temp.style.display = "none";//表单样式为隐藏
if(Object.keys(params).length > 0){
Object.keys(params).forEach((key)=>{
var opt =document.createElement("input"); //添加input标签
opt.name = key; //设置name属性
opt.value = params[key]; //设置value属性
temp.appendChild(opt);
})
}
document.body.appendChild(temp);
temp.submit();
return temp;
},
restData(data = []){
if(this.showtype == 'ds'){
data = Object.assign(data,{
'title':this.$refs.dstitle.innerText,
'order_price':this.payMoney,
'order_type':'ds',
'post_id':b2_global.post_id,
'pay_type':this.payType,
'order_content':this.content
})
}else if(this.showtype == 'cz'){
data = {
'title':b2_global.js_text.global.pay_money,
'order_price':this.payMoney,
'order_type':'cz',
'post_id':0,
'pay_type':this.payType
}
}else if(this.showtype == 'cg'){
data = {
'title':b2_global.js_text.global.pay_credit,
'order_price':this.payMoney,
'order_type':'cg',
'post_id':0,
'pay_type':this.payType
}
}else{
data = Object.assign(this.data,data)
}
data['pay_type'] = this.payType
var url = new URL(window.location.href);
url.searchParams.set('b2paystatus', 'check');
data['redirect_url'] = url.href
return data
},
disabled(){
if(this.data.pay_type !=='card'){
if(this.jump == '') return true
if((this.jump == 'jump' || this.jump == 'mweb' || this.jump == 'jsapi') && this.href == '' && this.payData == '') return true
if(this.locked == true) return true
if(this.payType == '') return true
if(this.payMoney === '' && (this.showtype == 'ds' || this.showtype == 'cz' || this.showtype == 'cg')) return true
}else{
if(!this.card.number || !this.card.password) return true
}
return false
},
chosePayType(val){
if(this.locked == true) return;
this.locked = true
this.payType = val
this.href = ''
this.payData = ''
this.jump = ''
this.$http.post(b2_rest_url+'checkPayType','pay_type='+val).then(res=>{
if(res.data.pay_type == 'card'){
this.$emit('change','card')
this.card.text = res.data.card_text
this.jump = res.data.pay_type
this.locked = false
}else{
if(this.showtype == 'card'){
this.$emit('change','cz')
}
this.jump = res.data.pay_type
this.isMobile = res.data.is_mobile
if(this.jump == 'jump' || this.jump === 'mweb' || this.jump === 'jsapi'){
let data = Qs.stringify(this.restData());
this.waitOrder = true
this.$http.post(b2_rest_url+'buildOrder',data).then(res=>{
this.writeOrder(res.data.id)
if(typeof res.data.url == 'string'){
this.href = res.data.url
}else{
this.payData = res.data.url
}
this.waitOrder = false
this.locked = false
}).catch(err=>{
if(err.response.data.message.msg === 'bind_weixin'){
b2setCookie('b2_back_url',window.location.href)
if(typeof err.response.data.message.oauth == 'string'){
b2weixinBind.msg = err.response.data.message.oauth
b2weixinBind.show = true
}else{
b2weixinBind.show = true
b2weixinBind.url = err.response.data.message.oauth.weixin.url
}
}else{
Qmsg['warning'](err.response.data.message,{html:true});
}
this.waitOrder = false
this.locked = false
})
// let url = b2_global.pay_url+'?'+Qs.stringify(this.restData())
// this.href = 'javascript:void(0)'
//encodeURI(url)
}else{
this.locked = false
}
}
b2setCookie('b2_back_url',window.location.href)
}).catch(err=>{
Qmsg['warning'](err.response.data.message,{html:true});
this.locked = false
})
},
writeOrder(id){
b2setCookie('order_id',id)
},
balancePay(order_id){
let data = this.restData();
this.$http.post(b2_rest_url+'balancePay','order_id='+order_id).then(res=>{
this.close()
b2PayCheck.show = true
b2PayCheck.title = data['title']
this.locked = false
}).catch(err=>{
Qmsg['warning'](err.response.data.message,{html:true});
this.locked = false
})
},
pay(){
if(this.disabled()) return;
if(this.jump === 'card'){
if(this.locked == true) return
this.locked = true
this.$http.post(b2_rest_url+'cardPay',Qs.stringify(this.card)).then(res=>{
if(res.data === 'success'){
b2PayCheck.show = true
b2PayCheck.title = b2_global.js_text.global.pay_money_success
b2PayCheck.type = 'card'
this.close()
}
this.locked = false
}).catch(err=>{
Qmsg['warning'](err.response.data.message,{html:true});
this.locked = false
})
}else if(this.jump === 'jump' || this.jump === 'mweb'){
b2PayCheck.show = true
b2PayCheck.title = this.$refs.dstitle.innerHTML
this.close()
if(this.payData){
this.post(this.payData.url,this.payData.data)
}
}else if(this.jump === 'balance'){
if(this.locked == true) return
this.locked = true
let data = Qs.stringify(this.restData());
this.$http.post(b2_rest_url+'buildOrder',data).then(res=>{
this.writeOrder(res.data)
this.balancePay(res.data)
}).catch(err=>{
Qmsg['warning'](err.response.data.message,{html:true});
this.locked = false
})
}else if(this.jump === 'scan'){
if(this.isMobile){
b2ScanPay.data = this.restData({
'is_weixin':this.isWeixin,
'is_mobile':this.isMobile
})
}else{
b2ScanPay.data = this.restData()
}
b2ScanPay.show = true;
this.close()
}else if(this.jump === 'jsapi'){
let data = this.restData();
jsApiCall(this.payData)
this.close()
b2PayCheck.show = true
b2PayCheck.title = data['title']
}
// else if(this.jump === 'mweb' || this.jump === 'jsapi'){
// if(this.locked == true) return
// this.locked = true
// let data = this.restData();
// let title = data['title']
// data = Qs.stringify(data);
// // if(!b2isWeixin()){
// // this.newWin = window.open('',"_blank");
// // }
// this.$http.post(b2_rest_url+'buildOrder',data).then(res=>{
// this.writeOrder(res.data.order_id)
// if(this.jump === 'jsapi'){
// jsApiCall(res.data.link)
// this.close()
// b2PayCheck.show = true
// b2PayCheck.title = title
// }else{
// // window.open(res.data.link)
// // if(!b2isWeixin()){
// // window.location=res.data.link
// // }else{
// // let form = document.querySelector('#wechataction')
// // form.action = res.data.link
// // form.submit()
// window.location.href=res.data.link
// // window.location=res.data.link
// // window.open(res.data.link)
// //}
// //location.assign();
// //window.open()
// this.close()
// b2PayCheck.show = true
// b2PayCheck.title = title
// }
// this.locked = false
// }).catch(err=>{
// if(err.response.data.message.msg === 'bind_weixin'){
// b2setCookie('b2_back_url',window.location.href)
// if(typeof err.response.data.message.oauth == 'string'){
// b2weixinBind.msg = err.response.data.message.oauth
// b2weixinBind.show = true
// }else{
// b2weixinBind.show = true
// b2weixinBind.url = err.response.data.message.oauth.weixin.url
// }
// }else{
// Qmsg['warning'](err.response.data.message,{html:true});
// }
// this.locked = false
// })
// }
},
allowPayType(){
this.$http.post(b2_rest_url+'allowPayType','show_type='+this.showtype).then(res=>{
this.allow = res.data
this.user.money = res.data.money
if(res.data.dh){
this.cg.min = res.data.min
this.cg.dh = res.data.dh
this.payMoney = this.cg.min
}
})
},
creditAdd(){
return parseInt(this.payMoney*this.cg.dh)
}
},
watch:{
money(val){
if(this.payMoney == 0){
this.payMoney = val[0]
}
},
// payMoney(val){
// if(!/^[0-9]+.?[0-9]*/.test(val)){
// val = 0
// }
// if(this.href && val && this.jump == 'jump'){
// let url = b2_global.pay_url+'?'+Qs.stringify(this.restData())
// this.href = encodeURI(url)
// }
// this.payMoney = parseFloat(val)
// },
show(val){
if(val){
b2setCookie('b2_back_url',window.location.href)
this.allowPayType()
}
if(val && this.money.length > 0){
this.payMoney = this.money[0]
}else if(val && this.data.length != 0){
this.payMoney = this.data.order_price
}else if(val == false){
setTimeout(() => {
this.value = 0
this.payMoney = 0
this.payType = ''
this.clean()
}, 300);
}
},
payType(val){
this.data.pay_type = val
},
showtype(val){
}
}
})
//支付容器
var b2DsBox = new Vue({
el:'#ds-box',
data:{
money:[],
show:false,
msg:'',
user:[],
author:[],
data:[],
showtype:''
},
methods: {
close(){
this.show = !this.show
},
clean(){
this.data = []
this.money = []
},
change(type){
this.showtype = type
}
},
})
var b2Ds = new Vue({
el:'#content-ds',
data:{
data:''
},
methods:{
show(){
b2DsBox.money = this.data.moneys
b2DsBox.show = true
b2DsBox.showtype = 'ds'
b2DsBox.msg = this.data.single_post_ds_text
},
}
})
function b2pay(event){
let data = JSON.parse(event.getAttribute('data-pay'));
b2DsBox.data = data
b2DsBox.show = true
b2DsBox.showtype = 'normal'
}
function b2creditpay(event){
if(!b2token){
login.show = true
}else{
let data = JSON.parse(event.getAttribute('data-pay'));
payCredit.data = data
payCredit.show = true
}
}
//随机数
function uuid(len, radix) {
var chars = '0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz'.split('');
var uuid = [], i;
radix = radix || chars.length;
if (len) {
for (i = 0; i < len; i++) uuid[i] = chars[0 | Math.random()*radix];
} else {
var r;
uuid[8] = uuid[13] = uuid[18] = uuid[23] = '-';
uuid[14] = '4';
for (i = 0; i < 36; i++) {
if (!uuid[i]) {
r = 0 | Math.random()*16;
uuid[i] = chars[(i == 19) ? (r & 0x3) | 0x8 : r];
}
}
}
return uuid.join('');
}
function openWin(url,name,iWidth,iHeight) {
var iTop = (window.screen.availHeight - 30 - iHeight) / 2;
var iLeft = (window.screen.availWidth - 10 - iWidth) / 2;
window.open(url, name, 'height=' + iHeight + ',innerHeight=' + iHeight + ',width=' + iWidth + ',innerWidth=' + iWidth + ',top=' + iTop + ',left=' + iLeft + ',status=no,toolbar=no,menubar=no,location=no,resizable=no,scrollbars=0,titlebar=no');
}
function deleteHtmlTag(str){
str = str.replace(/<[^>]+>|&[^>]+;/g,"").trim();
return str;
}
var b2cache=[];
function b2addJs(path,callback){
var flag=0;//检查是否加载的状态
for(var i=b2cache.length;i--;){
b2cache[i]==path?flag=1:flag=0;
}
if(flag){//如果已经加载则不加载
return;
}
var head = document.getElementsByTagName('head')[0];
var script = document.createElement('script');
script.src = path;
script.type = 'text/javascript';
head.appendChild(script);
script.onload = script.onreadystatechange = function() {/*判断是否加载成功*/
if (!this.readyState || this.readyState === "loaded" || this.readyState === "complete" ) {
script.onload = script.onreadystatechange = null;
callback();
}
};
b2cache.push(path);//把加载过的存起来
}
//微信内支付
function jsApiCall(data){
WeixinJSBridge.invoke(
'getBrandWCPayRequest',
data,
function(res){}
);
}
function callpay(){
if (typeof WeixinJSBridge == "undefined"){
if( document.addEventListener ){
document.addEventListener('WeixinJSBridgeReady', jsApiCall, passiveSupported ? { passive: true } : false);
}else if (document.attachEvent){
document.attachEvent('WeixinJSBridgeReady', jsApiCall);
document.attachEvent('onWeixinJSBridgeReady', jsApiCall);
}
}else{
jsApiCall();
}
}
function b2SidebarSticky(){
if(B2ClientWidth <= 768) return
if(document.querySelector('.post-style-5')) return
if(typeof window.b2Stick !== 'undefined'){
for (let i = 0; i < window.b2Stick.length; i++) {
if(window.b2Stick[i]){
window.b2Stick[i].updateSticky()
}
}
return
}
let b2sidebar = document.querySelectorAll('.sidebar');
if(b2sidebar){
if(B2ClientWidth > 768){
var b2Stick = []
for (let i = 0; i < b2sidebar.length; i++) {
if(!b2sidebar[i].querySelector('.widget-ffixed')) continue
b2Stick[i] = new StickySidebar(b2sidebar[i], {
containerSelector:'.widget-area',
topSpacing: 20,
resizeSensor: true,
bottomSpacing: 20
});
}
window.b2Stick = b2Stick
}
}
}
Vue.component('credit-box', {
props: ['show','data','user'],
template:b2_global.credit_box,
data(){
return {
locked:false
}
},
methods:{
close(){
this.$emit('close')
},
writeOrder(id){
b2setCookie('order_id',id)
},
disabled(){
if(this.locked === true) return true
if(parseInt(this.user.credit) < parseInt(this.data.order_price)) return true
return false
},
creditPay(order_id){
this.writeOrder(order_id)
this.$http.post(b2_rest_url+'creditPay','order_id='+order_id).then(res=>{
this.locked = false
b2PayCheck.show = true
this.close()
}).catch(err=>{
Qmsg['warning'](err.response.data.message,{html:true});
this.locked = false
})
},
pay(){
if(this.locked == true) return
this.locked = true
this.data.pay_type = 'credit'
let data = Qs.stringify(this.data)
this.$http.post(b2_rest_url+'buildOrder',data).then(res=>{
this.creditPay(res.data)
}).catch(err=>{
Qmsg['warning'](err.response.data.message,{html:true});
this.locked = false
})
}
}
})
var payCredit = new Vue({
el:'#credit-box',
data:{
show:false,
data:[],
user:{
credit:0
},
author:[]
},
methods:{
close(){
this.show = !this.show
}
}
})
var B2UserWidget = new Vue({
el:'.b2-widget-user',
data:{
show:false,
b2token:false
},
mounted(){
this.b2token = b2token
},
computed:{
userData(){
return this.$store.state.userData
},
oauth(){
return this.$store.state.oauthLink
},
announcement(){
return this.$store.state.announcement
},
openOauth(){
return this.$store.state.openOauth
}
},
watch:{
announcement(val){
if(val && !this.show){
this.resize()
}
}
},
methods:{
resize(){
this.$nextTick(()=>{
if(!this.$refs.userWidget) return
if(this.$refs.gujia){
this.$refs.gujia.style.display = 'none'
}
setTimeout(() => {
b2tooltip('.user-w-tips')
}, 300);
this.show = true
})
},
markHistory(type){
if(this.oauth.weixin.mp && type === 'weixin'){
mpCode.show = true
}
b2setCookie('b2_back_url',window.location.href)
}
}
})
var b2Mission = new Vue({
el:'.b2-widget-mission',
data:{
data:'',
locked:false,
type:'today',
paged:1,
count:0,
pages:{
today:1,
always:1
}
},
mounted(){
if(this.$refs.missionWidget){
this.getData()
}
},
methods:{
getData(count,paged){
if(this.$refs.missionWidget){
this.count = this.$refs.missionWidget.getAttribute('data-count')
}else{
this.count = 10
}
if(paged){
this.paged = paged
}
this.$http.post(b2_rest_url+'getUserMission','count='+this.count+'&paged='+this.paged).then(res=>{
this.data = res.data
this.pages.today = res.data.mission_today_list.pages
this.pages.always = res.data.mission_always_list.pages
if(this.$refs.missiongujia){
this.$refs.missiongujia.style.display = 'none'
}
this.$nextTick(()=>{
b2RestTimeAgo(this.$el.querySelectorAll('.b2timeago'))
})
})
},
mission(){
if(!b2token){
login.show = true
}else{
if(this.data.mission.credit){
Qmsg['warning'](b2_global.js_text.global.has_mission,{html:true});
return
}
if(this.locked == true) return
this.locked = true
this.$http.post(b2_rest_url+'userMission').then(res=>{
this.$nextTick(()=>{
this.data.mission = res.data.mission
this.locked = false
})
this.getData(this.count,this.paged)
}).catch(err=>{
Qmsg['warning'](err.response.data.message,{html:true});
this.locked = false
})
}
}
}
})
var b2NewComment = new Vue({
el:'.b2-widget-comment',
data:{
data:'',
paged:1,
pages:1,
count:5,
hidden:1,
next:false,
prev:false,
locked:false
},
mounted(){
if(this.$refs.commentWidget){
this.count = this.$refs.commentWidget.getAttribute('data-count');
this.hidden = this.$refs.commentWidget.getAttribute('data-hidden');
this.getList()
if(this.paged == 1){
this.prev = true
}
}
},
methods:{
getList(){
if(this.locked == true) return
this.locked = true
this.$https.post(b2_rest_url+'getNewComments','paged='+this.paged+'&count='+this.count+'&hidden='+this.hidden).then(res=>{
this.data = res.data.data
this.pages = res.data.pages
if(this.$refs.gujia){
this.$refs.gujia.style.display = 'none'
}
this.$nextTick(()=>{
b2SidebarSticky()
b2RestTimeAgo(this.$refs.commentWidget.querySelectorAll('.b2timeago'))
})
this.locked = false
})
},
nexAc(){
if(this.next || this.locked) return
this.paged++
this.getList()
},
prevAc(){
if(this.prev || this.locked) return
this.paged--
this.getList()
}
},
watch:{
paged(val){
if(val <= 1){
this.prev = true
}else{
this.prev = false
}
if(val >= this.pages){
this.next = true
}else{
this.next = false
}
}
}
})
//移动端点击展开筛选
// function b2ShowFilterBox(event){
// let filterBox = event.parentNode.nextElementSibling
// if(filterBox.className.indexOf('b2-show') !== -1){
// filterBox.className = filterBox.className.replace('b2-show','')
// bodyScrollLock.lock(filterBox)
// }else{
// filterBox.className += ' b2-show'
// bodyScrollLock.unlock(filterBox)
// }
// }
var b2mobileFooterMenu = new Vue({
el:'#mobile-footer-menu',
data:{
msg:0,
show:true
}
})
var postPoBox = new Vue({
el:'#post-po-box',
data:{
show:false,
login:false,
allow:''
},
mounted(){
if(b2token){
this.login = true
}
},
methods:{
close(){
this.showPost = !this.showPost
},
go(val,type){
if(!this.login){
login.show = true
login.type = 0
return
}
if(type != 'request'){
if(!userTools.role[type]){
Qmsg['warning'](b2_global.js_text.global.not_allow,{html:true});
return
}
}
setTimeout(() => {
window.location.href = val;
}, 250);
}
}
})
var b2AsideBar = new Vue({
el:'.aside-container',
data:{
dmsg:{
count:0
},
msg:{
count:0
},
showBox:false,
showType:{
'user':false,
'msg':false,
'dmsg':false,
'mission':false,
'coupon':false
},
locked:false,
mission:[],
bool:false,
coupon:{
count:0,
data:''
},
showCouponInfo:[],
qrcode:'',
ref:'',
dlocked:false,
count:0,
cartLocked:false,
b2token:false
},
computed:{
userData(){
return this.$store.state.userData
},
carts(){
if(this.count && !this.cartLocked){
return {
count:this.count,
data:''
}
}else{
let carts = this.$store.state.carts
return {
count:carts !== null && carts !== undefined ? Object.keys(carts).length : 0,
data:carts
}
}
}
},
mounted(){
this.b2token = b2token
},
methods:{
getQrcode(url){
var url = new URL(url)
url.searchParams.set('ref', this.ref)
var qr = new QRious({
value: url.href,
size:120,
level:'L'
});
return qr.toDataURL('image/jpeg');
},
goMyPage(){
if(!b2token){
login.show = true
login.type = 0
return
}
window.location.href = this.userData.link
},
chat(){
if(b2_global.chat.type == 'crisp'){
$crisp.push(['do', 'chat:open'])
}
if(b2_global.chat.type == 'qq'){
window.open("http://wpa.qq.com/msgrd?v=3&uin="+b2_global.chat.qq+"&site=qq&menu=yes", "_blank");
}
if(b2_global.chat.type == 'weixin'){
window.open(b2_global.chat.weixin, "_blank");
}
if(b2_global.chat.type == 'dmsg'){
if(!b2token){
login.show = true
}else{
b2Dmsg.userid = b2_global.chat.dmsg
b2Dmsg.show = true
}
}
if(b2_global.chat.type == 'requests'){
if(!b2token){
login.show = true
}else{
window.open(b2_global.home_url+'/requests', "_blank");
}
}
},
show(type,value){
this.closeBox()
if(type === 'user'){
if(!b2token){
login.show = true
login.type = 0
return
}
}
if(type === 'dmsg' && this.dmsg.count == 0){
if(!b2token){
login.show = true
login.type = 0
return
}
this.jumpTo(value)
return;
}
if(type === 'msg'){
if(!b2token){
login.show = true
login.type = 0
return
}
this.jumpTo(value)
return;
}
if(type == 'mission'){
this.mission = b2Mission
if(this.mission.data.length == 0){
this.mission.getData(10)
}
}
if(type === 'coupon'){
this.getMyCoupons()
}
if(type === 'cart'){
if(!b2token){
login.show = true
login.type = 0
return
}
this.getMycarts()
}
this.showType[type] = true
this.showBox = true
// if(B2ClientWidth < 768){
// bodyScrollLock.lock(this.$refs.asideContainer)
// }
this.$nextTick(()=>{
b2RestTimeAgo(this.$el.querySelectorAll('.b2timeago'))
})
},
getMycarts(){
if(this.cartLocked == true) return
this.cartLocked = true
this.$http.get(b2_rest_url+'getMyCarts').then((res)=>{
if(Object.keys(res.data).length > 0){
this.$store.commit('setcartsData',res.data)
}
})
},
showAc(val){
if(!b2token){
login.show = true
return
}
if(val){
this.show('user')
}else{
this.close()
}
},
closeBox(){
Object.keys(this.showType).forEach(key => {
this.showType[key] = false
});
this.showBox = false
// if(B2ClientWidth < 768){
// bodyScrollLock.unlock(this.$refs.asideContainer)
// }
},
getNewDmsg(){
if(b2token){
if(this.locked) return
this.locked = true
this.$http.post(b2_rest_url+'getNewDmsg').then(res=>{
this.dmsg = res.data.dmsg
this.locked = false
})
}
},
close(){
if(this.$refs.asideContainer && this.$refs.asideContainer.className.indexOf('aside-show') && B2ClientWidth < 768){
this.$refs.asideContainer.className = this.$refs.asideContainer.className.replace(' aside-show','')
// if(B2ClientWidth < 768){
// bodyScrollLock.unlock(this.$refs.asideContainer)
// }
this.showBox = false
}else{
this.closeBox()
}
},
goTop(){
this.$scrollTo('.site', 300, {offset: 0})
},
login(){
if(!b2token){
login.show = true
return
}else if(!this.$refs.asideContent){
self.location = this.$store.state.userData.link
}else{
this.show('user')
this.$refs.asideContainer.className += ' aside-show';
}
},
showSearch(){
b2SearchBox.close()
},
jumpTo(url){
window.location.href = url;
},
updateCarts(){
let data = b2getCookie('carts')
if(data){
this.carts.data = JSON.parse(data)
}else{
this.carts.data = ''
}
if(this.carts.data){
if(this.carts.count > Object.keys(this.carts.data).length){
b2mobileFooterMenu.msg = b2mobileFooterMenu.msg - (this.carts.count - Object.keys(this.carts.data).length)
}else{
b2mobileFooterMenu.msg = b2mobileFooterMenu.msg + (Object.keys(this.carts.data).length - this.carts.count)
}
this.carts.count = Object.keys(this.carts.data).length
}
},
deleteCarts(id){
this.$https.post(b2_rest_url+'deleteMyCarts','id='+id).then(res=>{
if(res.data.length == 0){
this.$store.commit('setcartsData',{})
}else{
this.$store.commit('setcartsData',res.data)
}
})
},
getMyCoupons(){
if(!b2token){
login.show = true
return
}
this.showType.coupon = true
this.$https.get(b2_rest_url+'getMyCoupons').then(res=>{
this.coupon = res.data
})
},
couponClass(item){
if(item.expiration_date.expired) return 'stamp04'
if(item.products.length > 0) return 'stamp01'
if(item.cats.length > 0) return 'stamp02'
return 'stamp03'
},
couponMoreInfo(id){
this.$set(this.showCouponInfo,id,!this.showCouponInfo[id])
},
deleteCoupon(id){
var r = confirm(b2_global.js_text.global.delete_coupon)
if(r){
this.$https.post(b2_rest_url+'deleteMyCoupon','id='+id).then(res=>{
this.$delete(this.coupon.data,id)
this.$set(this.coupon,'count',this.coupon.count-1)
})
}
return
}
},
watch:{
userData(val){
if(val && this.$refs.asideContent){
if(b2token){
this.ref = val.user_code
this.getNewDmsg()
}
this.updateCarts()
}
},
dmsg:{
handler(newVal, old) {
if(newVal.count > 0){
b2mobileFooterMenu.msg += parseInt(newVal.count)
}
},
immediate: true,
deep: true
},
msg:{
handler(newVal, old) {
if(newVal.count > 0){
b2mobileFooterMenu.msg += parseInt(newVal.count)
}
},
immediate: true,
deep: true
},
showBox(val){
if(val && B2ClientWidth < 768){
this.$refs.asideContainer.className += ' aside-show'
}
}
}
})
function b2HiddenFilterBox(event){
event.parentNode.parentNode.className = event.parentNode.parentNode.className.replace('b2-show','');
//bodyScrollLock.unlock(event.parentNode.parentNode)
}
function b2flickity(){
if(B2ClientWidth < 768) return
var f = document.querySelectorAll('.home-collection-silder');
if(f){
var collection = []
for (let i = 0; i < f.length; i++) {
collection[i] = new Flickity(f[i],{
pageDots: false,
groupCells: true,
draggable: true,
prevNextButtons: false,
freeScroll: false,
wrapAround:true,
selectedAttraction:0.15,
friction:1,
freeScrollFriction: 0.1,
cellAlign: 'left'
});
let previous,next
if(f[i].querySelector('.coll-3-box')){
previous = f[i].parentNode.querySelector('.collection-previous');
}else{
previous = f[i].parentNode.parentNode.parentNode.querySelector('.collection-previous');
}
previous.addEventListener( 'click', function() {
collection[i].previous();
},passiveSupported ? { passive: true } : false);
if(f[i].querySelector('.coll-3-box')){
next = f[i].parentNode.querySelector('.collection-next');
}else{
next = f[i].parentNode.parentNode.parentNode.querySelector('.collection-next');
}
next.addEventListener( 'click', function() {
collection[i].next();
},passiveSupported ? { passive: true } : false);
}
}
}
b2flickity()
function b2HiddenFooter(){
let footer = document.querySelector('.site-footer .site-footer-widget-in')
if(!footer) return
let footerWidget = footer.querySelectorAll('.mobile-hidden')
if(footerWidget && footerWidget.length >= footer.childNodes.length){
document.querySelector('.site-footer').className += ' mobile-hidden';
}
}
b2HiddenFooter()
var b2SearchUser = new Vue({
el:'#user-list',
data:{
follow:[],
ids:[]
},
mounted(){
if(this.$refs.searchUser){
this.ids = b2_search_data.users
this.checkFollowByids()
}
},
methods:{
checkFollowByids(){
let data = {
'ids':this.ids
}
this.$http.post(b2_rest_url+'checkFollowByids',Qs.stringify(data)).then(res=>{
this.follow = res.data
})
},
followAc(id){
if(!b2token){
login.show = true
}else{
this.$http.post(b2_rest_url+'AuthorFollow','user_id='+id).then(res=>{
this.follow[id] = res.data
}).catch(err=>{
Qmsg['warning'](err.response.data.message,{html:true});
})
}
},
dmsg(id){
if(!b2token){
login.show = true
}else{
b2Dmsg.userid = id
b2Dmsg.show = true
}
}
}
});
//精确计算
(function () {
var calc = {
/*
函数,加法函数,用来得到精确的加法结果
说明:javascript的加法结果会有误差,在两个浮点数相加的时候会比较明显。这个函数返回较为精确的加法结果。
参数:arg1:第一个加数;arg2第二个加数;d要保留的小数位数(可以不传此参数,如果不传则不处理小数位数)
调用:Calc.Add(arg1,arg2,d)
返回值:两数相加的结果
*/
Add: function (arg1, arg2) {
arg1 = arg1.toString(), arg2 = arg2.toString();
var arg1Arr = arg1.split("."), arg2Arr = arg2.split("."), d1 = arg1Arr.length == 2 ? arg1Arr[1] : "", d2 = arg2Arr.length == 2 ? arg2Arr[1] : "";
var maxLen = Math.max(d1.length, d2.length);
var m = Math.pow(10, maxLen);
var result = Number(((arg1 * m + arg2 * m) / m).toFixed(maxLen));
var d = arguments[2];
return typeof d === "number" ? Number((result).toFixed(d)) : result;
},
/*
函数:减法函数,用来得到精确的减法结果
说明:函数返回较为精确的减法结果。
参数:arg1:第一个加数;arg2第二个加数;d要保留的小数位数(可以不传此参数,如果不传则不处理小数位数
调用:Calc.Sub(arg1,arg2)
返回值:两数相减的结果
*/
Sub: function (arg1, arg2) {
return Calc.Add(arg1, -Number(arg2), arguments[2]);
},
/*
函数:乘法函数,用来得到精确的乘法结果
说明:函数返回较为精确的乘法结果。
参数:arg1:第一个乘数;arg2第二个乘数;d要保留的小数位数(可以不传此参数,如果不传则不处理小数位数)
调用:Calc.Mul(arg1,arg2)
返回值:两数相乘的结果
*/
Mul: function (arg1, arg2) {
var r1 = arg1.toString(), r2 = arg2.toString(), m, resultVal, d = arguments[2];
m = (r1.split(".")[1] ? r1.split(".")[1].length : 0) + (r2.split(".")[1] ? r2.split(".")[1].length : 0);
resultVal = Number(r1.replace(".", "")) * Number(r2.replace(".", "")) / Math.pow(10, m);
return typeof d !== "number" ? Number(resultVal) : Number(resultVal.toFixed(parseInt(d)));
},
/*
函数:除法函数,用来得到精确的除法结果
说明:函数返回较为精确的除法结果。
参数:arg1:除数;arg2被除数;d要保留的小数位数(可以不传此参数,如果不传则不处理小数位数)
调用:Calc.Div(arg1,arg2)
返回值:arg1除于arg2的结果
*/
Div: function (arg1, arg2) {
var r1 = arg1.toString(), r2 = arg2.toString(), m, resultVal, d = arguments[2];
m = (r2.split(".")[1] ? r2.split(".")[1].length : 0) - (r1.split(".")[1] ? r1.split(".")[1].length : 0);
resultVal = Number(r1.replace(".", "")) / Number(r2.replace(".", "")) * Math.pow(10, m);
return typeof d !== "number" ? Number(resultVal) : Number(resultVal.toFixed(parseInt(d)));
}
};
window.Calc = calc;
}());
function b2stmap(){
let stmaps = document.querySelectorAll('.stamp');
if(stmaps.length > 0){
let h_axios = axios
if(b2token){
h_axios.defaults.headers.common['Authorization'] = 'Bearer ' + b2token
}
for (let i = 0; i < stmaps.length; i++) {
if(stmaps[i].querySelector('.coupon-receive')){
stmaps[i].querySelector('.coupon-receive').onclick = (event)=>{
if(!b2token){
login.show = true
return
}
h_axios.post(b2_rest_url+'ShopCouponReceive','&id='+event.target.getAttribute('data-id')).then((res)=>{
if(res.data){
Qmsg['success'](b2_global.js_text.global.get_success,{html:true});
}
}).catch(err=>{
Qmsg['success'](err.response.data.message,{html:true});
})
}
stmaps[i].querySelector('.more-coupon-info').onclick = (event)=>{
event.target.nextElementSibling.style.display = 'block'
}
stmaps[i].querySelector('.close-coupon-info').onclick = (event)=>{
event.target.parentNode.parentNode.style.display = 'none'
}
}
}
}
}
b2stmap()
// document.ready(function () {
// let link = document.createElement("link");
// link.rel = "stylesheet";
// link.href = "//at.alicdn.com/t/font_1105559_00rtseygv6tsc.css";
// document.head.appendChild(link);
// })
function b2IsPhoneAvailable(phonevalue){
var phoneReg = /^1[0-9]{10}/;
var emailReg = /[a-zA-Z0-9]{1,10}@[a-zA-Z0-9]{1,5}\.[a-zA-Z0-9]{1,5}/;
if(phoneReg.test(phonevalue) || emailReg.test(phonevalue)){
return true;
}else{
return false;
}
}
var b2TaxTop = new Vue({
el:'.tax-header',
data:{
showFliter:{
hot:false,
cat:false
}
},
methods:{
show(type){
if(type === 'hot'){
this.showFliter.hot = !this.showFliter.hot
this.showFliter.cat = false
}
if(type === 'cat'){
this.showFliter.cat = !this.showFliter.cat
this.showFliter.hot = false
}
}
}
})
function b2scroll( fn ) {
var beforeScrollTop = document.documentElement.scrollTop,
fn = fn || function() {};
window.bodyScrool = function() {
var afterScrollTop = document.documentElement.scrollTop || document.body.scrollTop,
delta = afterScrollTop - beforeScrollTop;
if( delta === 0 ) return false;
fn( delta > 0 ? "down" : "up" ,afterScrollTop);
beforeScrollTop = afterScrollTop;
}
window.addEventListener("scroll",window.bodyScrool , passiveSupported ? { passive: true } : false);
}
function b2HeaderTop(){
const banner = document.querySelector('.header-banner-left');
const header = document.querySelector('.site');
const aside = document.querySelector('.bar-user-info');
const socialTop = document.querySelector('.social-top');
const nosub = document.querySelector('.social-no-sub');
const footer = document.querySelector('.mobile-footer-menu');
if(!banner) return
let h = 96
if(B2ClientWidth < 768){
h = 77
}
if(socialTop){
h = 113
}
if(nosub){
h = 58
}
b2scroll(function(direction,top) {
if(top > h){
if(direction === 'down'){
if(banner.className.indexOf(' hidden') === -1){
banner.className += ' hidden'
}
if(header.className.indexOf(' up') === -1){
header.className += ' up'
}
if(footer && B2ClientWidth < 768 && footer.className.indexOf(' footer-down') === -1){
footer.className += ' footer-down'
}
}else{
banner.className = banner.className.replace(' hidden','')
header.className = header.className.replace(' up','')
if(footer && B2ClientWidth < 768){
footer.className = footer.className.replace(' footer-down','')
}
}
if(header.className.indexOf(' action') === -1){
header.className += ' action'
}
}else{
header.className = header.className.replace(' action','')
banner.className = banner.className.replace(' hidden','')
header.className = header.className.replace(' up','')
}
});
}
b2HeaderTop()
var b2NewsfalshesWidget = new Vue({
el:'.widget-newsflashes-box',
data:{
options:[],
list:''
},
mounted(){
if(this.$refs.newsWidget){
this.options = JSON.parse(this.$refs.newsWidget.getAttribute('data-json'))
this.getList()
}
},
methods:{
getList(){
this.$https.post(b2_rest_url+'getWidgetNewsflashes',Qs.stringify(this.options)).then(res=>{
this.list = res.data
this.$refs.gujia.style.display = 'none'
})
}
}
})
Vue.component('weixin-bind', {
props: ['show','url','msg'],
template:b2_global.weixin_bind,
methods:{
close(){
this.$emit('close')
}
}
})
//微信绑定
var b2weixinBind = new Vue({
el:'#weixin-bind',
data:{
show:false,
url:'',
msg:''
},
methods:{
close(){
this.show = !this.show
}
}
})
function b2CurrentPageReload(url){
if(!url){
url = location.href
}
setTimeout(() => {
location.replace(url)
}, 200);
}
function b2GetQueryVariable(variable)
{
var query = window.location.search.substring(1);
var vars = query.split("&");
for (var i=0;i= 2) {
var prefix = encodeURIComponent(parameter) + '=';
var pars = urlparts[1].split(/[&;]/g);
//reverse iteration as may be destructive
for (var i = pars.length; i-- > 0;) {
//idiom for string.startsWith
if (pars[i].lastIndexOf(prefix, 0) !== -1) {
pars.splice(i, 1);
}
}
return urlparts[0] + (pars.length > 0 ? '?' + pars.join('&') : '');
}
return url;
}
function updateURLParameter(uri, key, value) {
if(!value) {
return uri;
}
var re = new RegExp("([?&])" + key + "=.*?(&|$)", "i");
var separator = uri.indexOf('?') !== -1 ? "&" : "?";
if (uri.match(re)) {
return uri.replace(re, '$1' + key + "=" + value + '$2');
}
else {
return uri + separator + key + "=" + value;
}
}
function validate(evt) {
var theEvent = evt || window.event;
// Handle paste
if (theEvent.type === 'paste') {
key = event.clipboardData.getData('text/plain');
} else {
// Handle key press
var key = theEvent.keyCode || theEvent.which;
key = String.fromCharCode(key);
}
var regex = /[0-9]|\./;
if( !regex.test(key) ) {
theEvent.returnValue = false;
if(theEvent.preventDefault) theEvent.preventDefault();
}
}
Vue.component('bind-login', {
props: ['show','type'],
template:b2_global.bind_login,
data(){
return {
locked:false,
count:60,
SMSLocked:false,
data:{
img_code:'',
token:'',
username:'',
password:'',
confirmPassword:'',
code:''
},
eye:false,
success:''
}
},
computed:{
userData(){
return this.$store.state.userData;
}
},
methods:{
close(){
this.$emit('close')
},
showCheck(){
if(this.type !== 'text' && this.type !== 'luo' && this.data.username && this.show){
return true
}
return false
},
sendCode(){
recaptcha.show = true
recaptcha.type = 'bind'
this.close()
},
sendSMS(){
if(this.SMSLocked == true) return
this.SMSLocked = true
this.$http.post(b2_rest_url+'sendCode',Qs.stringify(this.data)).then(res=>{
if(res.data.token){
this.countdown()
this.data.smsToken = res.data.token
}
this.SMSLocked = false
}).catch(err=>{
Qmsg['warning'](err.response.data.message,{html:true});
this.SMSLocked = false
})
},
countdown(){
if(this.count <= 1 ){
this.count = 60
return
}
this.count --;
setTimeout(()=>{
this.countdown()
},1000)
},
setToken(val){
this.data.img_code = val.value
this.data.token = val.token
this.sendSMS()
},
submit(){
if(this.locked) return
this.locked = true
this.$http.post(b2_rest_url+'bindUserLogin',Qs.stringify(this.data)).then(res=>{
this.success = res.data
this.locked = false
}).catch(err=>{
Qmsg['warning'](err.response.data.message,{html:true});
this.locked = false
})
}
}
})
//强制绑定登录名
var b2bindLogin = new Vue({
el:'#binding-login',
data:{
show:false,
type:false
},
methods:{
close(){
this.show = !this.show
},
imgCodeAc(val){
this.$refs.bindBox.setToken(val)
}
},
watch:{
type(val){
if(val){
this.show = true
}
}
}
})
var b2CreditTop = new Vue({
el:'.credit-top',
data:{
settings:[],
data:''
},
mounted(){
if(this.$refs.creditTop){
this.settings = JSON.parse(this.$refs.creditTop.getAttribute('data-settings'));
this.getList()
}
},
methods:{
getList(){
this.$http.post(b2_rest_url+'getGoldTop',Qs.stringify(this.settings)).then(res=>{
this.data = res.data
this.$nextTick(()=>{
this.$refs.creditTopGujia.style.display = 'none'
})
})
}
}
})
function grin(tag,myField) {
if (document.selection) {
myField.focus();
sel = document.selection.createRange();
sel.text = tag;
myField.focus();
}
else if (myField.selectionStart || myField.selectionStart == '0') {
var startPos = myField.selectionStart;
var endPos = myField.selectionEnd;
var cursorPos = startPos;
myField.value = myField.value.substring(0, startPos)
+ tag
+ myField.value.substring(endPos, myField.value.length);
cursorPos += tag.length;
myField.focus();
myField.selectionStart = cursorPos;
myField.selectionEnd = cursorPos;
} else {
myField.value += tag;
myField.focus();
}
}
//圈子小工具
var b2HotCircle = new Vue({
el:'.b2-widget-hot-circle',
data:{
data:'',
count:6,
type:'hot',
paged:{
hot:1,
join:1,
create:1
},
locked:false
},
mounted(){
if(!this.$refs.hotCircle) return
this.count = this.$refs.hotCircle.getAttribute('data-count');
this.getCirclesList('hot')
},
methods:{
go(link){
window.location.href = link
},
getCirclesList(type){
if(!b2token && type !== 'hot'){
login.show = true
login.type = 1
return
}
if(this.locked === true) return
this.locked = true
let data = {
count:this.count,
type:type,
paged:this.paged[type]
}
this.$refs.gujia.style.display = 'block'
this.data = ''
this.$http.post(b2_rest_url+'getCirclesList',Qs.stringify(data)).then(res=>{
this.data = res.data
this.$nextTick(()=>{
this.$refs.gujia.style.display = 'none'
b2SidebarSticky()
lazyLoadInstance.update()
})
this.type = type
this.locked = false
}).catch(err=>{
Qmsg['warning'](err.response.data.message,{html:true});
this.locked = false
})
}
}
})
if (!window.scrollTo) {
window.scrollTo = function (x, y) {
window.pageXOffset = x;
window.pageYOffset = y;
};
}
if (!window.scrollBy) {
window.scrollBy = function (x, y) {
window.pageXOffset += x;
window.pageYOffset += y;
};
}
if (!document.body.scrollTo) {
Element.prototype.scrollTo = function (x, y) {
this.scrollLeft = x;
this.scrollTop = y;
};
}
if (!document.body.scrollBy) {
Element.prototype.scrollBy = function (x, y) {
this.scrollLeft += x;
this.scrollTop += y;
};
}
var payReturn = new Vue({
el:'#pay-return',
data:{
login:false
},
mounted(){
if(b2token){
this.login = true
}
}
})
const searchBox = document.querySelectorAll('.search-module')
if(searchBox){
for (let index = 0; index < searchBox.length; index++) {
let id = searchBox[index].getAttribute('data-i')
new Vue({
el:'#search-module-'+id,
data:{
link:b2_global.home_url,
keyword:'',
category:b2_global.js_text.global.all,
show:false
},
mounted(){
document.onclick = (e)=>{
this.show = false
userTools.hideAction()
}
},
methods:{
picked(id,category,link){
this.link = link
this.category = category
this.show = false
},
pickedKey(key){
}
}
})
}
}
var b2recommendedCircle = new Vue({
el:'.b2-widget-recommended-circle',
data:{
data:'',
current:0
},
mounted(){
if(!this.$refs.recommendedGujia) return
this.getCircles()
},
methods:{
create(){
if(!b2token){
login.show = true
login.loginType = 1
}else{
window.open(b2_global.home_url+'/create-circle', '_blank');
}
},
getCircles(){
let ids = JSON.parse(this.$refs.recommendedGujia.getAttribute('data-ids'))
if(ids.length == 0) return
let data = {
ids:ids
}
this.$http.post(b2_rest_url+'getCircleDataByCircleIds',Qs.stringify(data)).then(res=>{
this.data = res.data
this.$nextTick(()=>{
this.$refs.recommendedGujia.style.display = 'none'
if(typeof b2CirclePostBox != 'undefined'){
if(b2CirclePostBox.$refs.textareaTopic){
this.current = parseInt(b2CirclePostBox.$refs.textareaTopic.getAttribute('data-circle'))
}
}
this.$nextTick(()=>{
lazyLoadInstance.update()
})
b2SidebarSticky()
})
})
},
go(even,index){
if(typeof b2CirclePostBox != 'undefined'){
even.stopPropagation()
even.preventDefault()
let id = this.data[index].id
b2CirclePostBox.circle.picked = id
this.current = id
b2CircleList.pickedCircle('widget',id)
b2CirclePostBox.getCurrentUserCircleData()
window.history.pushState(id, this.data[index].name, this.data[index].link)
document.title = this.data[index].name+' '+b2_global.site_separator+' '+b2_global.site_name
// b2AsideBar.goTop()
return false
}
}
}
})
document.b2ready = function (callback) {
///兼容FF,Google
if (document.addEventListener) {
document.addEventListener('DOMContentLoaded', function () {
document.removeEventListener('DOMContentLoaded', arguments.callee, false);
callback();
}, false)
}
//兼容IE
else if (document.attachEvent) {
document.attachEvent('onreadystatechange', function () {
if (document.readyState == "complete") {
document.detachEvent("onreadystatechange", arguments.callee);
callback();
}
})
}
else if (document.lastChild == document.body) {
callback();
}
}
function b2tooltip(cla){
const d = document.querySelectorAll(cla)
if(!d) return
if(B2ClientWidth < 768) return
var x = 15;
var y = 10;
window.b2thistip = []
for (let i = 0; i < d.length; i++) {
d[i].addEventListener("mouseover", function(e) {
var tooltip = "" + this.getAttribute('data-title') + "
";
document.body.insertAdjacentHTML('beforeend', tooltip);
window.b2thistip[i] = document.querySelector('#b2tooltip'+i)
window.b2thistip[i].style.top = (e.pageY + y) + "px"
window.b2thistip[i].style.left = (e.pageX + x) + "px"
window.b2thistip[i].style.display = 'block'
}, passiveSupported ? { passive: true } : false);
d[i].addEventListener("mouseout", function(e) {
if(typeof window.b2thistip[i] != 'undefined')
window.b2thistip[i].remove()
},passiveSupported ? { passive: true } : false)
d[i].addEventListener("mousemove", function(e) {
window.b2thistip[i].style.top = (e.pageY + y) + "px"
window.b2thistip[i].style.left = (e.pageX + x) + "px"
},passiveSupported ? { passive: true } : false)
}
}
b2tooltip('.b2tooltipbox')
function b2cpay(){
const paybox = document.querySelectorAll('.custom-pay-box')
if(paybox.length > 0){
for (let i = 0; i < paybox.length; i++) {
new Vue({
el:paybox[i],
data:{
locked:{},
count:{},
files:{},
progress:{},
// edited by fuzqing
related:false,
related_field:'',
related_prices:[],
active_time:{
active:false,
tips:''
},
price:'',
api:'getCpayResout',
selecter:'cpay-resout-list-in',
list:{
pages:0,
paged:1,
count:20,
id:0,
data:''
},
allow:0,
tab:'form'
},
mounted(){
if(this.$refs.pickprice){
this.price = this.$refs.pickprice.getAttribute('data-price')
}
if(this.$refs.cpayresout){
this.list.id = this.$refs.cpayresout.getAttribute('data-id')
// this.getList()
this.$refs.reslist.go(this.list.paged,'comment',true,true)
}
// edited by fuzqing
this.getCpayInfo();
},
// edited by fuzqing
watch: {
related_field: function (val) {
this.price = this.related_prices[val];
}
},
methods:{
// edited by fuzqing
getCpayInfo() {
this.$http.post(b2_rest_url+'getCpayInfo','post_id='+this.list.id).then(res=>{
if (res.data.related === true) {
this.related = true;
this.related_field = res.data.related_field_value;
this.related_prices = res.data.related_prices;
}
this.active_time = res.data.active_time;
}).catch(err=>{
Qmsg['warning'](err.response.data.message,{html:true});
})
},
getList(res){
this.list.data = res.data
this.allow = res.allow
this.list.pages = res.pages
},
submit(title,id,postid) {
let obj = {};
let data = new FormData(this.$refs.form);
for (let [key, value] of data) {
if (obj[key] !== undefined) {
if (!Array.isArray(obj[key])) {
obj[key] = [obj[key]];
}
obj[key].push(value);
} else {
obj[key] = value;
}
if(typeof obj[key] == 'object'){
if(obj[key].lastModified){
delete obj[key]
}
}
if(this.files.hasOwnProperty(key)){
obj[key] = this.files[key]
}
if(this.$refs[key+'required']){
let required = this.$refs[key+'required'].getAttribute('data-required')
required = parseInt(required)
if(required && (!obj[key] || (Array.isArray(obj[key]) && obj[key].length == 0))){
Qmsg['warning'](b2_global.js_text.global.cpay_required_fields,{html:true});
return
}
}
}
if(!obj.price){
Qmsg['warning'](b2_global.js_text.global.cpay_required_fields,{html:true});
return
}
b2DsBox.data = {
'title':title,
'order_type':'custom',
'order_price':obj.price,
'post_id':id,
'order_key':postid,
'order_value':JSON.stringify(obj)
}
b2DsBox.show = true
console.log(b2DsBox.data)
return obj;
},
deleteAc(key,index){
if(confirm(b2_global.js_text.circle.remove_file)){
this.$delete(this.files[key],index)
this.$delete(this.progress[key],index)
this.locked[key] = false
this.$set(this.count,key,this.count[key] - 1)
}
},
fileExists(mime){
let index= mime.lastIndexOf('.');
let ext = mime.substr(index+1);
return ext.toLowerCase();
},
readablizeBytes(bytes) {
let s = ['B', 'KB', 'MB', 'GB', 'TB', 'PB'];
let e = Math.floor(Math.log(bytes)/Math.log(1024));
return (bytes/Math.pow(1024, Math.floor(e))).toFixed(2)+' '+s[e];
},
fileType(ext){
ext = ext.toLowerCase()
switch (ext) {
case 'jpg':
case 'png':
case 'gif':
case 'jpeg':
case 'ico':
case 'webp':
return 'image'
case 'mp3':
case 'm4a':
case 'ogg':
case 'wav':
return 'video'
case 'mp4':
case 'mov':
case 'avi':
case 'mpg':
case 'ogv':
case '3gp':
case '3g2':
return 'audio'
default:
return 'file'
}
},
fileChange(event,count,key,id){
if(event.target.files.length > count){
let msg = b2_global.js_text.global.cpay_file_count
msg = msg.replace('${count}',count);
Qmsg['warning'](msg,{html:true});
// event.target.
return;
}
if(event.target.files.length <= 0) return
if(!this.files.hasOwnProperty(key)){
this.$set(this.files,key,[])
this.$set(this.progress,key,[])
this.$set(this.locked,key,[])
this.$set(this.count,key,0)
}
if(event.target.files.length > count - this.count[key]){
let msg = b2_global.js_text.global.cpay_file_count_less
msg = msg.replace('${count}',count - this.count[key]);
Qmsg['warning'](msg,{html:true});
return;
}
if(this.locked[key] == true) return
let index = parseInt(this.files[key].length)
Object.keys(event.target.files).forEach((k)=>{
console.log(k)
this.$set(this.count,key,this.count[key] + 1)
this.locked[key] = true
k = parseInt(k)
const ext = this.fileExists(event.target.files[k].name)
this.$set(this.files[key],k+index,{
size:this.readablizeBytes(event.target.files[k].size),
name:event.target.files[k].name,
ext:ext,
type:this.fileType(ext)
})
this.$set(this.progress[key],k+index,{
status:'doing',
number:0,
msg:''
})
let formData = new FormData()
formData.append('file',event.target.files[k],event.target.files[k].name)
formData.append("post_id", id)
formData.append("type", 'cpay')
let config = {
onUploadProgress: progressEvent=>{
this.$set(this.progress[key][k+index],'number',(progressEvent.loaded / progressEvent.total * 100 | 0))
}
}
this.$http.post(b2_rest_url+'fileUpload',formData,config).then(res=>{
console.log(res)
if(res.data.status == 401){
Qmsg['warning'](res.data.message,{html:true});
this.$set(this.progress[key][k+index],'status','fail')
this.$set(this.progress[key][k+index],'msg',res.data.message)
}else{
this.$set(this.files[key][k+index],'url',res.data.url)
this.$set(this.files[key][k+index],'id',res.data.id)
this.$set(this.progress[key][k+index],'status','success')
}
console.log(this.files)
if(this.count[key] >= count){
this.locked[key] = true;
}else{
this.locked[key] = false;
}
event.target.value = ''
}).catch(err=>{
Qmsg['warning'](err.response.data.message,{html:true});
this.locked[key] = false
this.$set(this.progress[key][k+index],'status','fail')
this.$set(this.progress[key][k+index],'msg',err.response.data.message)
event.target.value = ''
})
})
}
}
})
}
}
}
b2cpay()
function b2fingerprint() {
var canvas = document.createElement('canvas');
var ctx = canvas.getContext('2d');
var txt = 'i9asdm..$#po((^@KbXrww!~cz';
ctx.textBaseline = "top";
ctx.font = "16px 'Arial'";
ctx.textBaseline = "alphabetic";
ctx.rotate(.05);
ctx.fillStyle = "#f60";
ctx.fillRect(125,1,62,20);
ctx.fillStyle = "#069";
ctx.fillText(txt, 2, 15);
ctx.fillStyle = "rgba(102, 200, 0, 0.7)";
ctx.fillText(txt, 4, 17);
ctx.shadowBlur=10;
ctx.shadowColor="blue";
ctx.fillRect(-20,10,234,5);
var strng=canvas.toDataURL();
var hash=0;
if (strng.length==0) return;
for (i = 0; i < strng.length; i++) {
char = strng.charCodeAt(i);
hash = ((hash<<5)-hash)+char;
hash = hash & hash;
}
return hash;
}
var b2stream = new Vue({
el:'#b2-stream',
data:{
paged:1,
pages:0,
author:1,
data:'',
empty:false,
locked:false
},
mounted(){
if(!this.$refs.b2stream) return
this.paged = this.$refs.b2stream.getAttribute('data-paged')
this.author = this.$refs.b2stream.getAttribute('data-author')
this.getList()
},
methods:{
getList(){
this.$http.post(b2_rest_url+'getStreamList','paged='+this.paged+'&author='+this.author).then(res=>{
this.data = res.data
if(this.data.length == 0){
this.empty = true
}
this.$refs.gujia.style.display = 'none'
this.$nextTick(()=>{
b2SidebarSticky()
lazyLoadInstance.update()
})
})
},
vote(type,id,index){
if(!b2token){
login.show = true
}else{
if(this.locked == true) return
this.locked = true
this.$http.post(b2_rest_url+'postVote','type='+type+'&post_id='+id).then(res=>{
this.$set(this.data[index].data.data,'up',parseInt(this.data[index].data.data.up) + parseInt(res.data.up))
this.$set(this.data[index].data.data,'down',parseInt(this.data[index].data.data.down) + parseInt(res.data.down))
if(res.data.up > 0){
this.$set(this.data[index].data.data,'up_isset',1)
}else{
this.$set(this.data[index].data.data,'up_isset',0)
}
if(res.data.down > 0){
this.$set(this.data[index].data.data,'down_isset',1)
}else{
this.$set(this.data[index].data.data,'down_isset',0)
}
this.locked = false
}).catch(err=>{
Qmsg['warning'](err.response.data.message,{html:true});
this.locked = false
})
}
}
}
})
//防抖
function _debounce(fn, delay) {
var delay = delay || 200;
var timer;
return function () {
var th = this;
var args = arguments;
if (timer) {
clearTimeout(timer);
}
timer = setTimeout(function () {
timer = null;
fn.apply(th, args);
}, delay);
};
}
// 节流
function _throttle(fn, interval) {
var last;
var timer;
var interval = interval || 200;
return function () {
var th = this;
var args = arguments;
var now = +new Date();
if (last && now - last < interval) {
clearTimeout(timer);
timer = setTimeout(function () {
last = now;
fn.apply(th, args);
}, interval);
} else {
last = now;
fn.apply(th, args);
}
}
}
var askWidget = new Vue({
el:'.b2-widget-ask',
data:{
data:'',
fliter:'last',
paged:1,
pages:0,
count:0,
cat:0,
empty:false,
locked:false,
prev:true,
next:false
},
mounted(){
if(!this.$refs.askwidget) return
this.count = this.$refs.askwidget.getAttribute('data-count')
this.time = this.$refs.askwidget.getAttribute('data-time')
const archive = document.querySelector('.ask-archive')
if(archive){
this.cat = archive.getAttribute('data-term')
}
const single = document.querySelector('.ask-single-top')
if(single){
this.cat = single.getAttribute('data-term')
}
this.getData()
},
watch:{
fliter(val){
this.prev = true
this.next = false
this.data = ''
this.paged = 1
this.empty = false
this.$refs.askwidget.querySelector('.gujia').style.display = 'block'
this.getData()
}
},
methods:{
nexAc(){
if(this.paged >= this.data.pages) return
if(this.locked) return
this.next = true
this.paged++
this.getData()
},
prevAc(){
if(this.paged < 1) return
if(this.locked) return
this.prev = true
this.paged--
this.getData()
},
getData(){
if(this.locked) return
this.locked = true
this.$http.post(b2_rest_url+'getAskData','paged='+this.paged+'&type='+this.fliter+'&count='+this.count+'&cat='+this.cat).then(res=>{
this.locked = false
if(this.paged == 1){
if(res.data.data.length == 0){
this.empty = true
this.data.data = []
}else{
this.data = res.data
}
}else{
this.data.data = res.data.data
}
if(this.data.pages > 1 && this.paged < this.data.pages){
this.next = false
}
if(this.paged > 1){
this.prev = false
}
this.$nextTick(()=>{
this.$refs.askwidget.querySelector('.gujia').style.display = 'none'
})
})
}
}
})