第一次提交
This commit is contained in:
534
main.js
Normal file
534
main.js
Normal file
@ -0,0 +1,534 @@
|
||||
import Vue from 'vue'
|
||||
import App from './App'
|
||||
import directive from './common/directive.js'
|
||||
import utils from './common/utils.js'
|
||||
import config from './config.js'
|
||||
import onfire from './common/onfire.js'
|
||||
import {
|
||||
gotopage
|
||||
} from '@/common/gotopage.js'
|
||||
|
||||
/* Vuex */
|
||||
import store from "./store/index.js"
|
||||
Vue.prototype.$store = store;
|
||||
|
||||
// 公共组件
|
||||
import headerBar from './components/header.vue'
|
||||
Vue.component('header-bar', headerBar)
|
||||
|
||||
|
||||
//请求加载组件
|
||||
import requestLoading from './components/jjjloading.vue';
|
||||
|
||||
//组件挂载到全局,方便每个页面使用
|
||||
Vue.component('request-loading', requestLoading);
|
||||
|
||||
/*底部数据*/
|
||||
import tabBar from "@/components/tabbar/footTabbar.vue"
|
||||
Vue.component('tabBar', tabBar)
|
||||
Vue.prototype.footTabberData = {
|
||||
active: 'home'
|
||||
};
|
||||
|
||||
Vue.prototype.$fire = new onfire()
|
||||
|
||||
Vue.config.productionTip = false
|
||||
|
||||
App.mpType = 'app'
|
||||
|
||||
Vue.prototype.config = config
|
||||
|
||||
const app = new Vue({
|
||||
...App
|
||||
})
|
||||
app.$mount()
|
||||
|
||||
|
||||
|
||||
Vue.prototype.websiteUrl = config.app_url;
|
||||
Vue.prototype.app_id = config.app_id;
|
||||
//h5发布路径
|
||||
Vue.prototype.h5_addr = config.h5_addr;
|
||||
/*页面跳转*/
|
||||
Vue.prototype.gotoPage = gotopage;
|
||||
Vue.prototype.font_url = config.font_url;
|
||||
|
||||
|
||||
Vue.prototype.points_name = function(e) {
|
||||
if (!e) {
|
||||
return store.state.points_name;
|
||||
} else {
|
||||
let re = new RegExp("积分", "g");
|
||||
return e.replace(re, store.state.points_name);
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
//#ifdef H5
|
||||
app.$router.afterEach((to, from) => {
|
||||
const u = navigator.userAgent.toLowerCase();
|
||||
if (u.indexOf("like mac os x") < 0 || u.match(/MicroMessenger/i) != 'micromessenger') return;
|
||||
if (to.path !== global.location.pathname) {
|
||||
location.assign(config.app_url + config.h5_addr + to.fullPath);
|
||||
}
|
||||
})
|
||||
//#endif
|
||||
|
||||
|
||||
//是否是ios
|
||||
Vue.prototype.ios = function() {
|
||||
const u = navigator.userAgent.toLowerCase();
|
||||
if (u.indexOf("like mac os x") < 0 || u.match(/MicroMessenger/i) != 'micromessenger') {
|
||||
return false;
|
||||
}
|
||||
return true;
|
||||
};
|
||||
|
||||
//get请求
|
||||
Vue.prototype._get = function(path, data, success, fail, complete) {
|
||||
data = data || {};
|
||||
data.token = uni.getStorageSync('token') || '';
|
||||
data.app_id = this.getAppId();
|
||||
uni.request({
|
||||
url: this.websiteUrl + '/index.php/api/' + path,
|
||||
data: data,
|
||||
dataType: 'json',
|
||||
method: 'GET',
|
||||
success: (res) => {
|
||||
if (res.statusCode !== 200 || typeof res.data !== 'object') {
|
||||
return false;
|
||||
}
|
||||
if (res.data.code === -2) {
|
||||
this.showError(res.data.msg, function() {
|
||||
uni.removeStorageSync('token');
|
||||
this.gotoPage('/pages/index/index', 'reLaunch');
|
||||
})
|
||||
} else if (res.data.code === -1) {
|
||||
// 登录态失效, 重新登录
|
||||
console.log('登录态失效, 重新登录');
|
||||
this.doLogin();
|
||||
} else if (res.data.code === 0) {
|
||||
this.showError(res.data.msg, function() {
|
||||
fail && fail(res);
|
||||
});
|
||||
return false;
|
||||
} else {
|
||||
success && success(res.data);
|
||||
}
|
||||
},
|
||||
fail: (res) => {
|
||||
fail && fail(res);
|
||||
},
|
||||
complete: (res) => {
|
||||
uni.hideLoading();
|
||||
complete && complete(res);
|
||||
},
|
||||
});
|
||||
};
|
||||
|
||||
//get请求
|
||||
Vue.prototype._post = function(path, data, success, fail, complete) {
|
||||
data = data || {};
|
||||
data.token = uni.getStorageSync('token') || '';
|
||||
data.app_id = this.getAppId();
|
||||
uni.request({
|
||||
url: this.websiteUrl + '/index.php/api/' + path,
|
||||
data: data,
|
||||
dataType: 'json',
|
||||
method: 'POST',
|
||||
header: {
|
||||
'content-type': 'application/x-www-form-urlencoded',
|
||||
},
|
||||
success: (res) => {
|
||||
if (res.statusCode !== 200 || typeof res.data !== 'object') {
|
||||
return false;
|
||||
}
|
||||
if (res.data.code === -1) {
|
||||
// 登录态失效, 重新登录
|
||||
console.log('登录态失效, 重新登录');
|
||||
this.doLogin();
|
||||
} else if (res.data.code === 0) {
|
||||
this.showError(res.data.msg, function() {
|
||||
fail && fail(res);
|
||||
});
|
||||
return false;
|
||||
} else {
|
||||
success && success(res.data);
|
||||
}
|
||||
},
|
||||
fail: (res) => {
|
||||
fail && fail(res);
|
||||
},
|
||||
complete: (res) => {
|
||||
uni.hideLoading();
|
||||
complete && complete(res);
|
||||
},
|
||||
});
|
||||
};
|
||||
|
||||
Vue.prototype.doLogin = function() {
|
||||
let pages = getCurrentPages();
|
||||
if (pages.length) {
|
||||
let currentPage = pages[pages.length - 1];
|
||||
if ("pages/login/login" != currentPage.route &&
|
||||
"pages/login/weblogin" != currentPage.route &&
|
||||
"pages/login/openlogin" != currentPage.route) {
|
||||
uni.setStorageSync("currentPage", currentPage.route);
|
||||
uni.setStorageSync("currentPageOptions", currentPage.options);
|
||||
}
|
||||
}
|
||||
console.log('app_ID=' + this.getAppId())
|
||||
//公众号
|
||||
// #ifdef H5
|
||||
console.log(this)
|
||||
if (this.isWeixin()) {
|
||||
window.location.href = this.websiteUrl + '/index.php/api/user.usermp/login?app_id=' + this.getAppId() +
|
||||
'&referee_id=' + uni.getStorageSync('referee_id');
|
||||
} else {
|
||||
this.gotoPage("/pages/login/weblogin");
|
||||
}
|
||||
// #endif
|
||||
// #ifdef APP-PLUS
|
||||
this.gotoPage("/pages/login/openlogin", 'redirect');
|
||||
return;
|
||||
// #endif
|
||||
// 非公众号,跳转授权页面
|
||||
// #ifndef H5
|
||||
this.gotoPage("/pages/login/login");
|
||||
// #endif
|
||||
};
|
||||
|
||||
|
||||
/**
|
||||
* 显示失败提示框
|
||||
*/
|
||||
Vue.prototype.showError = function(msg, callback) {
|
||||
uni.showModal({
|
||||
title: '友情提示',
|
||||
content: msg,
|
||||
showCancel: false,
|
||||
success: function(res) {
|
||||
callback && callback();
|
||||
}
|
||||
});
|
||||
};
|
||||
|
||||
/**
|
||||
* 显示失败提示框
|
||||
*/
|
||||
Vue.prototype.showSuccess = function(msg, callback) {
|
||||
uni.showModal({
|
||||
title: '友情提示',
|
||||
content: msg,
|
||||
showCancel: false,
|
||||
success: function(res) {
|
||||
callback && callback();
|
||||
}
|
||||
});
|
||||
};
|
||||
|
||||
/**
|
||||
* 获取应用ID
|
||||
*/
|
||||
Vue.prototype.getAppId = function() {
|
||||
return this.app_id || 10001;
|
||||
};
|
||||
|
||||
Vue.prototype.compareVersion = function(v1, v2) {
|
||||
v1 = v1.split('.')
|
||||
v2 = v2.split('.')
|
||||
const len = Math.max(v1.length, v2.length)
|
||||
|
||||
while (v1.length < len) {
|
||||
v1.push('0')
|
||||
}
|
||||
while (v2.length < len) {
|
||||
v2.push('0')
|
||||
}
|
||||
|
||||
for (let i = 0; i < len; i++) {
|
||||
const num1 = parseInt(v1[i])
|
||||
const num2 = parseInt(v2[i])
|
||||
|
||||
if (num1 > num2) {
|
||||
return 1
|
||||
} else if (num1 < num2) {
|
||||
return -1
|
||||
}
|
||||
}
|
||||
|
||||
return 0
|
||||
};
|
||||
|
||||
|
||||
/**
|
||||
* 生成转发的url参数
|
||||
*/
|
||||
Vue.prototype.getShareUrlParams = function(params) {
|
||||
let self = this;
|
||||
return utils.urlEncode(Object.assign({
|
||||
referee_id: self.getUserId(),
|
||||
app_id: self.getAppId()
|
||||
}, params));
|
||||
};
|
||||
|
||||
/**
|
||||
* 当前用户id
|
||||
*/
|
||||
Vue.prototype.getUserId = function() {
|
||||
return uni.getStorageSync('user_id');
|
||||
};
|
||||
|
||||
//#ifdef H5
|
||||
var jweixin = require('jweixin-module');
|
||||
|
||||
Vue.prototype.configWx = function(signPackage, shareParams, params) {
|
||||
if (signPackage == '') {
|
||||
return;
|
||||
}
|
||||
let self = this;
|
||||
jweixin.config(JSON.parse(signPackage));
|
||||
|
||||
let url_params = self.getShareUrlParams(params);
|
||||
|
||||
jweixin.ready(function(res) {
|
||||
jweixin.updateAppMessageShareData({
|
||||
title: shareParams.title,
|
||||
desc: shareParams.desc,
|
||||
link: self.websiteUrl + self.h5_addr + shareParams.link + '?' + url_params,
|
||||
imgUrl: shareParams.imgUrl,
|
||||
success: function() {
|
||||
|
||||
}
|
||||
});
|
||||
jweixin.updateTimelineShareData({
|
||||
title: shareParams.title,
|
||||
desc: shareParams.desc,
|
||||
link: self.websiteUrl + self.h5_addr + shareParams.link + '?' + url_params,
|
||||
imgUrl: shareParams.imgUrl,
|
||||
success: function() {
|
||||
|
||||
}
|
||||
});
|
||||
});
|
||||
};
|
||||
|
||||
Vue.prototype.configWxScan = function(signPackage) {
|
||||
if (signPackage == '') {
|
||||
return;
|
||||
}
|
||||
jweixin.config(JSON.parse(signPackage));
|
||||
return jweixin;
|
||||
};
|
||||
//#endif
|
||||
|
||||
/**
|
||||
* 获取当前平台
|
||||
*/
|
||||
Vue.prototype.getPlatform = function(params) {
|
||||
let platform = 'wx';
|
||||
// #ifdef APP-PLUS
|
||||
if (uni.getSystemInfoSync().platform == 'android') {
|
||||
platform = 'android';
|
||||
} else {
|
||||
platform = 'ios';
|
||||
}
|
||||
// #endif
|
||||
// #ifdef H5
|
||||
if (this.isWeixin()) {
|
||||
platform = 'mp';
|
||||
} else {
|
||||
platform = 'h5';
|
||||
}
|
||||
// #endif
|
||||
return platform;
|
||||
};
|
||||
|
||||
/**
|
||||
* 订阅通知,目前仅小程序
|
||||
*/
|
||||
Vue.prototype.subMessage = function(temlIds, callback) {
|
||||
let self = this;
|
||||
// #ifdef MP-WEIXIN
|
||||
//小程序订阅消息
|
||||
const version = wx.getSystemInfoSync().SDKVersion;
|
||||
if (temlIds && temlIds.length != 0 && self.compareVersion(version, '2.8.2') >= 0) {
|
||||
wx.requestSubscribeMessage({
|
||||
tmplIds: temlIds,
|
||||
success(res) {},
|
||||
fail(res) {},
|
||||
complete(res) {
|
||||
callback();
|
||||
},
|
||||
});
|
||||
} else {
|
||||
callback();
|
||||
}
|
||||
// #endif
|
||||
// #ifndef MP-WEIXIN
|
||||
callback();
|
||||
// #endif
|
||||
};
|
||||
|
||||
Vue.prototype.isWeixin = function() {
|
||||
var ua = navigator.userAgent.toLowerCase();
|
||||
if (ua.match(/MicroMessenger/i) == "micromessenger") {
|
||||
return true;
|
||||
} else {
|
||||
return false;
|
||||
}
|
||||
};
|
||||
|
||||
/**
|
||||
* 获取访客
|
||||
*/
|
||||
Vue.prototype.getVisitcode = function() {
|
||||
let visitcode = uni.getStorageSync('visitcode');
|
||||
if (!visitcode) {
|
||||
visitcode = 'xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx'.replace(/[xy]/g, function(c) {
|
||||
var r = Math.random() * 16 | 0,
|
||||
v = c == 'x' ? r : (r & 0x3 | 0x8);
|
||||
return v.toString(16);
|
||||
});
|
||||
visitcode = visitcode.replace(/-/g, "");
|
||||
uni.setStorageSync('visitcode', visitcode);
|
||||
}
|
||||
|
||||
return visitcode;
|
||||
};
|
||||
|
||||
Vue.prototype.topBarTop = function() {
|
||||
// #ifdef MP-WEIXIN
|
||||
return uni.getMenuButtonBoundingClientRect().top;
|
||||
// #endif
|
||||
// #ifndef MP-WEIXIN
|
||||
const SystemInfo = uni.getSystemInfoSync();
|
||||
return SystemInfo.statusBarHeight;
|
||||
// #endif
|
||||
};
|
||||
Vue.prototype.topBarHeight = function() {
|
||||
// #ifdef MP-WEIXIN
|
||||
return uni.getMenuButtonBoundingClientRect().height;
|
||||
// #endif
|
||||
// #ifndef MP-WEIXIN
|
||||
return 0
|
||||
// #endif
|
||||
};
|
||||
Vue.prototype.yulan = function(e, i) {
|
||||
let image_path_arr = [];
|
||||
if (!Array.isArray(e)) {
|
||||
image_path_arr = [e];
|
||||
} else {
|
||||
if (e[0].file_path) {
|
||||
e.forEach((item, index) => {
|
||||
image_path_arr.push(item.file_path)
|
||||
})
|
||||
} else {
|
||||
image_path_arr = e
|
||||
}
|
||||
}
|
||||
let picnum = i * 1;
|
||||
uni.previewImage({
|
||||
urls: image_path_arr,
|
||||
current: picnum,
|
||||
indicator: 'default',
|
||||
});
|
||||
}
|
||||
Vue.prototype.theme = function() {
|
||||
return 'theme' + this.$store.state.theme || ''
|
||||
}
|
||||
Vue.prototype.footTab = function() {
|
||||
return this.$store.state.footTab || ''
|
||||
}
|
||||
/* 小数点截取 */
|
||||
Vue.prototype.subPrice = function(str, val) {
|
||||
let strs = String(str);
|
||||
if (val == 1) {
|
||||
return strs.substring(0, strs.indexOf("."));
|
||||
} else if (val == 2) {
|
||||
let indof = strs.indexOf(".");
|
||||
return strs.slice(indof + 1, indof + 3);
|
||||
}
|
||||
}
|
||||
/*转两位数*/
|
||||
Vue.prototype.convertTwo = function(n) {
|
||||
let str = '';
|
||||
if (n < 10) {
|
||||
str = '0' + n;
|
||||
} else {
|
||||
str = n;
|
||||
}
|
||||
return str;
|
||||
}
|
||||
Vue.prototype.getTabBarLinks = function() {
|
||||
let vars = uni.getStorageSync('TabBar');
|
||||
let theme = uni.getStorageSync('theme');
|
||||
if(vars != null && vars != ''){
|
||||
this.setTabBarLinks(vars, theme);
|
||||
}else{
|
||||
uni.request({
|
||||
url: this.config.app_url + '/index.php/api/index/nav',
|
||||
data: {
|
||||
app_id: this.config.app_id
|
||||
},
|
||||
success: (result) => {
|
||||
let vars = result.data.data.vars.data;
|
||||
let theme = result.data.data.theme.theme;
|
||||
this.$store.commit('changeTheme', theme);
|
||||
uni.setStorageSync('TabBar', vars);
|
||||
uni.setStorageSync('theme', theme);
|
||||
this.setTabBarLinks(vars, theme);
|
||||
}
|
||||
});
|
||||
}
|
||||
}
|
||||
Vue.prototype.setTabBarLinks = function(vars, theme){
|
||||
if (vars.is_auto == '0') {
|
||||
uni.showTabBar();
|
||||
vars.list = [];
|
||||
let color = ['#ff5704', '#19ad57', '#ffcc00', '#1774ff', '#e4e4e4', '#c8ba97',
|
||||
'#623ceb'
|
||||
]
|
||||
uni.setTabBarStyle({
|
||||
color: '#333333',
|
||||
selectedColor: color[theme],
|
||||
})
|
||||
uni.setTabBarItem({
|
||||
index: 0,
|
||||
text: '首页',
|
||||
iconPath: 'static/tabbar/home.png',
|
||||
selectedIconPath: 'static/tabbar/home_' + theme + '.png'
|
||||
})
|
||||
uni.setTabBarItem({
|
||||
index: 1,
|
||||
text: '分类',
|
||||
iconPath: 'static/tabbar/category.png',
|
||||
selectedIconPath: 'static/tabbar/category_' + theme + '.png'
|
||||
})
|
||||
uni.setTabBarItem({
|
||||
index: 2,
|
||||
text: '店铺',
|
||||
iconPath: 'static/tabbar/shop.png',
|
||||
selectedIconPath: 'static/tabbar/shop_' + theme + '.png'
|
||||
})
|
||||
uni.setTabBarItem({
|
||||
index: 3,
|
||||
text: '购物车',
|
||||
iconPath: 'static/tabbar/cart.png',
|
||||
selectedIconPath: 'static/tabbar/cart_' + theme + '.png'
|
||||
})
|
||||
uni.setTabBarItem({
|
||||
index: 4,
|
||||
text: '我的',
|
||||
iconPath: 'static/tabbar/user.png',
|
||||
selectedIconPath: 'static/tabbar/user_' + theme + '.png'
|
||||
})
|
||||
} else {
|
||||
uni.hideTabBar();
|
||||
}
|
||||
}
|
||||
Vue.prototype.getThemeColor = function() {
|
||||
let theme = this.$store.state.theme;
|
||||
let color = ['#ff5704', '#19ad57', '#ffcc00', '#1774ff', '#e4e4e4', '#c8ba97', '#623ceb'];
|
||||
return color[theme]
|
||||
}
|
||||
Reference in New Issue
Block a user