1 Star 0 Fork 441

vipit/ShopXO开源商城uniapp端

加入 Gitee
与超过 1200万 开发者一起发现、参与优秀开源项目,私有仓库也完全免费 :)
免费加入
文件
克隆/下载
App.vue 52.18 KB
一键复制 编辑 原始数据 按行查看 历史
ShopXO免费开源商城 提交于 2021-12-17 10:49 . 细节优化
123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801802803804805806807808809810811812813814815816817818819820821822823824825826827828829830831832833834835836837838839840841842843844845846847848849850851852853854855856857858859860861862863864865866867868869870871872873874875876877878879880881882883884885886887888889890891892893894895896897898899900901902903904905906907908909910911912913914915916917918919920921922923924925926927928929930931932933934935936937938939940941942943944945946947948949950951952953954955956957958959960961962963964965966967968969970971972973974975976977978979980981982983984985986987988989990991992993994995996997998999100010011002100310041005100610071008100910101011101210131014101510161017101810191020102110221023102410251026102710281029103010311032103310341035103610371038103910401041104210431044104510461047104810491050105110521053105410551056105710581059106010611062106310641065106610671068106910701071107210731074107510761077107810791080108110821083108410851086108710881089109010911092109310941095109610971098109911001101110211031104110511061107110811091110111111121113111411151116111711181119112011211122112311241125112611271128112911301131113211331134113511361137113811391140114111421143114411451146114711481149115011511152115311541155115611571158115911601161116211631164116511661167116811691170117111721173117411751176117711781179118011811182118311841185118611871188118911901191119211931194119511961197119811991200120112021203120412051206120712081209121012111212121312141215121612171218121912201221122212231224122512261227122812291230123112321233123412351236123712381239124012411242124312441245124612471248124912501251125212531254125512561257125812591260126112621263126412651266126712681269127012711272127312741275127612771278
<script>
import base64 from './common/js/lib/base64.js';
export default {
globalData: {
data: {
// uuid缓存key
cache_user_uuid_key: "cache_user_uuid_key",
// 配置信息缓存key
cache_config_info_key: "cache_config_info_key",
// 用户登录缓存key
cache_user_login_key: "cache_user_login_key",
// 用户信息缓存key
cache_user_info_key: "cache_shop_user_info_key",
// 用户站点信息缓存key
cache_user_merchant_key: "cache_shop_user_merchant_key",
// 设备信息缓存key
cache_system_info_key: "cache_shop_system_info_key",
// 用户地址选择缓存key
cache_buy_user_address_select_key: "cache_buy_user_address_select_key",
// 启动参数缓存key
cache_launch_info_key: "cache_shop_launch_info_key",
// 获取位置选择缓存key
cache_userlocation_key: "cache_userlocation_key",
// 页面支付临时缓存key
cache_page_pay_key: "cache_page_pay_key",
// 默认用户头像
default_user_head_src: "/static/images/common/user.png",
// 成功圆形提示图片
default_round_success_icon: "/static/images/common/round-success-icon.png",
// 错误圆形提示图片
default_round_error_icon: "/static/images/common/round-error-icon.png",
// tabbar页面
tabbar_pages: [
"/pages/index/index",
"/pages/goods-category/goods-category",
"/pages/cart/cart",
"/pages/user/user"
],
// 请求地址
request_url: 'https://d1.shopxo.vip/',
// 静态资源地址(如系统根目录不在public目录下面请在静态地址后面加public目录、如:https://d1.shopxo.vip/public/)
static_url: 'https://d1.shopxo.vip/',
// 基础信息
application_title: "ShopXO",
application_describe: "ShopXO开源商城、MIT协议、可商用、可二次开发、满足99%电商运营需求",
// 版本号
version: "v2.2.3",
// 货币价格符号
currency_symbol: "",
// 主题类型 主题颜色
// 黄色 yellow #f6c133
// 红色 red #ff0036
// 黑色 black #333333
// 绿色 green #20a53a
// 橙色 orange #fe6f04
// 蓝色 blue #1677ff
// 棕色 brown #8B4513
// 紫色 purple #623cec
default_theme: "yellow"
},
/**
* 启动参数处理
*/
launch_params_handle(params) {
if ((params.query || null) != null) {
params = params.query;
}
if ((params.scene || null) != null) {
params = this.url_params_to_json(decodeURIComponent(params.scene));
}
return params;
},
/**
* 获取设备信息
* key 指定key
* dv 默认数据(不存在则读取、默认null)
* is_real 是否实时读取
*/
get_system_info(key, dv, is_real) {
var info = null;
if((is_real || false) == true) {
info = this.set_system_info();
} else {
info = uni.getStorageSync(this.data.cache_system_info_key) || null;
}
return ((key|| null) == null) ? info : ((info[key] == undefined) ? (dv || null) : info[key]);
},
/**
* 设置设备信息
*/
set_system_info() {
var system_info = uni.getSystemInfoSync();
uni.setStorage({
key: this.data.cache_system_info_key,
data: system_info
});
return system_info;
},
/**
* 请求地址生成
* a 方法
* c 控制器
* plugins 插件标记(传参则表示为插件请求)
* params url请求参数
* group 组名称(默认 api)
*/
get_request_url(a, c, plugins, params, group) {
a = a || "index";
c = c || "index";
// 是否插件请求、走api统一插件调用控制器
var plugins_params = "";
if ((plugins || null) != null) {
plugins_params = "&pluginsname=" + plugins + "&pluginscontrol=" + c + "&pluginsaction=" + a;
c = "plugins";
a = "index";
}
// 参数处理
params = params || "";
if (params != "" && params.substr(0, 1) != "&") {
params = "&" + params;
}
// 用户信息
var user = this.get_user_cache_info();
var token = user == false ? '' : user.token || '';
var uuid = this.request_uuid();
var client_value = this.application_client_type();
return this.data.request_url + (group || "api")+".php?s=" + c + "/" + a + plugins_params + "&application=app&application_client_type="+ client_value + "&token=" + token + "&ajax=ajax" + "&uuid=" + uuid + params;
},
/**
* 获取用户信息,信息不存在则唤醒授权
* object 回调操作对象
* method 回调操作对象的函数
* return 有用户数据直接返回, 则回调调用者
*/
get_user_info(object, method) {
var user = this.get_user_cache_info();
if (user == false) {
// #ifdef MP
// 小程序唤醒用户授权
this.user_login(object, method);
// #endif
// #ifdef H5 || APP
// h5、app登陆注册
uni.showModal({
title: '温馨提示',
content: '请先登陆或注册',
confirmText: '确认',
cancelText: '暂不',
success: result => {
if (result.confirm) {
uni.navigateTo({
url: "/pages/login/login"
});
}
}
});
// #endif
return false;
}
return user;
},
/**
* 从缓存获取用户信息、可指定key和默认值
* key 数据key
* default_value 默认值
*/
get_user_cache_info(key, default_value) {
var user = uni.getStorageSync(this.data.cache_user_info_key) || null;
if (user == null) {
// 是否存在默认值
return default_value == undefined ? false : default_value;
}
// 是否读取key
if ((key || null) != null) {
return user[key] == undefined ? default_value == undefined ? null : default_value : user[key];
}
return user;
},
/**
* 系统参数
*/
get_launch_cache_info() {
return uni.getStorageSync(this.data.cache_launch_info_key) || null;
},
/**
* 获取登陆授权数据
*/
get_login_cache_info() {
return uni.getStorageSync(this.data.cache_user_login_key) || null;
},
/**
* 用户登录
* object 回调操作对象
* method 回调操作对象的函数
* auth_data 授权数据
*/
user_auth_login(object, method, auth_data) {
var self = this;
// #ifdef MP-WEIXIN || MP-QQ || MP-BAIDU || MP-TOUTIAO
uni.checkSession({
success: function() {
var login_data = self.get_login_cache_info();
if (login_data == null) {
self.user_login(object, method);
} else {
self.get_user_login_info(object, method, login_data, auth_data);
}
},
fail: function() {
uni.removeStorageSync(self.data.cache_user_login_key);
self.user_login(object, method);
}
});
// #endif
// #ifdef MP-ALIPAY
var login_data = self.get_login_cache_info();
if (login_data == null) {
self.user_login(object, method);
} else {
self.get_user_login_info(object, method, login_data, auth_data);
}
// #endif
},
/**
* 用户登录
* object 回调操作对象
* method 回调操作对象的函数
* auth_data 授权数据
*/
user_login(object, method) {
var login_data = uni.getStorageSync(this.data.cache_user_login_key) || null;
if (login_data == null) {
var self = this;
uni.showLoading({
title: "授权中..."
});
var action = 'login';
// #ifdef MP-BAIDU
action = 'getLoginCode';
// #endif
uni[action]({
success: res => {
if (res.code) {
uni.request({
url: self.get_request_url('appminiuserauth', 'user'),
method: 'POST',
data: {
authcode: res.code
},
dataType: 'json',
success: res => {
uni.hideLoading();
if (res.data.code == 0) {
var data = res.data.data;
if ((data.is_user_exist || 0) == 1) {
uni.setStorage({
key: self.data.cache_user_info_key,
data: data,
success: res => {
if (typeof object === 'object' && (method || null) != null) {
object[method]();
}
},
fail: () => {
self.showToast('用户信息缓存失败');
}
});
} else {
uni.setStorage({
key: self.data.cache_user_login_key,
data: data
});
self.login_to_auth();
}
} else {
uni.hideLoading();
self.showToast(res.data.msg);
}
},
fail: () => {
uni.hideLoading();
self.showToast('服务器请求出错');
}
});
}
},
fail: e => {
uni.hideLoading();
self.showToast('授权失败');
}
});
} else {
this.login_to_auth();
}
},
/**
* 跳转到登录页面授权
*/
login_to_auth() {
uni.showModal({
title: '温馨提示',
content: '授权用户信息',
confirmText: '确认',
cancelText: '暂不',
success: result => {
if (result.confirm) {
uni.navigateTo({
url: "/pages/login/login"
});
}
}
});
},
/**
* 获取用户授权信息
* object 回调操作对象
* method 回调操作对象的函数
* login_data 登录信息
* auth_data 授权数据
*/
get_user_login_info(object, method, login_data, auth_data) {
// 邀请人参数
var params = this.get_launch_cache_info();
var referrer = params == null ? 0 : params.referrer || 0;
// 请求数据
var data = {
"auth_data": JSON.stringify(auth_data),
"openid": login_data.openid,
"unionid": login_data.unionid,
"referrer": referrer
};
// 用户信息处理
uni.showLoading({
title: "授权中..."
});
var self = this;
uni.request({
url: self.get_request_url('appminiuserinfo', 'user'),
method: 'POST',
data: data,
dataType: 'json',
success: res => {
uni.hideLoading();
if (res.data.code == 0) {
uni.setStorage({
key: self.data.cache_user_info_key,
data: res.data.data,
success: res => {
if (typeof object === 'object' && (method || null) != null) {
object[method]();
}
},
fail: () => {
self.showToast('用户信息缓存失败');
}
});
} else {
self.showToast(res.data.msg);
}
},
fail: () => {
uni.hideLoading();
self.showToast('服务器请求出错');
}
});
},
/**
* 字段数据校验
* data 待校验的数据, 一维json对象
* validation 待校验的字段, 格式 [{fields: 'mobile', msg: '请填写手机号码', is_can_zero: 1(是否可以为0)}, ...]
*/
fields_check(data, validation) {
for (var i in validation) {
var temp_value = data[validation[i]["fields"]];
var temp_is_can_zero = validation[i]["is_can_zero"] || null;
if (temp_value == undefined || temp_value.length == 0 || temp_value == -1 || temp_is_can_zero ==
null && temp_value == 0) {
this.showToast(validation[i]['msg']);
return false;
}
}
return true;
},
/**
* 获取当前时间戳
*/
get_timestamp() {
return parseInt(new Date().getTime() / 1000);
},
/**
* 获取日期
* format 日期格式(默认 yyyy-MM-dd h:m:s)
* timestamp 时间戳(默认当前时间戳)
*/
get_date(format, timestamp) {
var d = new Date((timestamp || this.get_timestamp()) * 1000);
var date = {
"M+": d.getMonth() + 1,
"d+": d.getDate(),
"h+": d.getHours(),
"m+": d.getMinutes(),
"s+": d.getSeconds(),
"q+": Math.floor((d.getMonth() + 3) / 3),
"S+": d.getMilliseconds()
};
if (/(y+)/i.test(format)) {
format = format.replace(RegExp.$1, (d.getFullYear() + '').substr(4 - RegExp.$1.length));
}
for (var k in date) {
if (new RegExp("(" + k + ")").test(format)) {
format = format.replace(RegExp.$1, RegExp.$1.length == 1 ? date[k] : ("00" + date[k]).substr(("" + date[k]).length));
}
}
return format;
},
/**
* 获取对象、数组的长度、元素个数
* obj 要计算长度的元素(object、array、string)
*/
get_length(obj) {
var obj_type = typeof obj;
if (obj_type == "string") {
return obj.length;
} else if (obj_type == "object") {
var obj_len = 0;
for (var i in obj) {
obj_len++;
}
return obj_len;
}
return false;
},
/**
* 价格保留两位小数
* price 价格保留两位小数
*/
price_two_decimal(x) {
var f_x = parseFloat(x);
if (isNaN(f_x)) {
return 0;
}
var f_x = Math.round(x * 100) / 100;
var s_x = f_x.toString();
var pos_decimal = s_x.indexOf('.');
if (pos_decimal < 0) {
pos_decimal = s_x.length;
s_x += '.';
}
while (s_x.length <= pos_decimal + 2) {
s_x += '0';
}
return s_x;
},
url_value_handle(url) {
if (url.indexOf("?") == -1) {
var value = url;
} else {
var temp_str = url.split("?");
var value = temp_str[0];
}
return value;
},
/**
* 当前地址是否存在tabbar中
*/
is_tabbar_pages(url) {
var value = this.url_value_handle(url);
if ((value || null) == null) {
return false;
}
var temp_tabbar_pages = this.data.tabbar_pages;
for (var i in temp_tabbar_pages) {
if (temp_tabbar_pages[i] == value) {
return true;
}
}
return false;
},
/**
* 事件操作
*/
operation_event(e) {
var value = e.currentTarget.dataset.value || null;
var type = parseInt(e.currentTarget.dataset.type);
if (value != null) {
switch (type) {
// web
case 0:
this.open_web_view(value);
break;
// 内部页面
case 1:
if (this.is_tabbar_pages(value)) {
uni.switchTab({
url: value
});
} else {
uni.navigateTo({
url: value
});
}
break;
// 跳转到外部小程序
case 2:
uni.navigateToMiniProgram({
appId: value
});
break;
// 跳转到地图查看位置
case 3:
var values = value.split('|');
if (values.length != 4) {
this.showToast('事件值格式有误');
return false;
}
this.open_location(values[2], values[3], values[0], values[1]);
break;
// 拨打电话
case 4:
this.call_tel(value);
break;
}
}
},
/**
* 打开 webview页面
* value [string] url地址
*/
open_web_view(value) {
uni.navigateTo({
url: "/pages/web-view/web-view?url=" + encodeURIComponent(value)
});
},
/**
* 默认弱提示方法
* msg [string] 提示信息
* status [string] 状态 默认error [正确success, 错误error]
*/
showToast(msg, status) {
if ((status || 'error') == 'success') {
uni.showToast({
icon: 'success',
title: msg,
duration: 3000
});
} else {
uni.showToast({
icon: 'none',
title: msg,
duration: 3000
});
}
},
/**
* alert确认框
* title [string] 标题(默认空)
* msg [string] 提示信息,必传
* is_show_cancel [int] 是否显示取消按钮(默认显示 0否, 1|undefined是)
* cancel_text [string] 取消按钮文字(默认 取消)
* cancel_color [string] 取消按钮的文字颜色,必须是 16 进制格式的颜色字符串(默认 #000000)
* confirm_text [string] 确认按钮文字(默认 确认)
* confirm_color [string] 确认按钮的文字颜色,必须是 16 进制格式的颜色字符串(默认 #000000)
* object [boject] 回调操作对象,点击确认回调参数1,取消回调0
* method [string] 回调操作对象的函数
*/
alert(e) {
var msg = e.msg || null;
if (msg != null) {
var title = e.title || '';
var is_show_cancel = e.is_show_cancel == 0 ? false : true;
var cancel_text = e.cancel_text || '取消';
var confirm_text = e.confirm_text || '确认';
var cancel_color = e.cancel_color || '#000000';
var confirm_color = e.confirm_color || '#576B95';
uni.showModal({
title: title,
content: msg,
showCancel: is_show_cancel,
cancelText: cancel_text,
cancelColor: cancel_color,
confirmText: confirm_text,
confirmColor: confirm_color,
success(res) {
if ((e.object || null) != null && typeof e.object === 'object' && (e.method || null) != null) {
e.object[e.method](res.confirm ? 1 : 0);
}
}
});
} else {
self.showToast('提示信息为空 alert');
}
},
/**
* 是否需要登录
* 是否需要绑定手机号码
*/
user_is_need_login(user) {
// 用户信息是否正确
if (user == false) {
return true;
}
// 是否需要绑定手机号码
if ((user.is_mandatory_bind_mobile || 0) == 1) {
if ((user.mobile || null) == null) {
return true;
}
}
return false;
},
/**
* url参数转json对象
*/
url_params_to_json(url_params) {
var json = new Object();
if ((url_params || null) != null) {
var arr = url_params.split('&');
for (var i = 0; i < arr.length; i++) {
var temp = arr[i].split('=');
json[temp[0]] = temp[1];
}
}
return json;
},
// 拨打电话
call_tel(value) {
if ((value || null) != null) {
uni.makePhoneCall({
phoneNumber: value.toString()
});
}
},
/**
* 登录校验
* object 回调操作对象
* method 回调操作对象的函数
*/
is_login_check(res, object, method) {
if (res.code == -400) {
uni.clearStorage();
this.get_user_info(object, method);
return false;
}
return true;
},
/**
* 设置导航reddot
* index tabBar 的哪一项,从左边算起(0开始)
* type 0 移出, 1 添加 (默认 0 移出)
*/
set_tab_bar_reddot(index, type) {
if (index !== undefined && index !== null) {
if ((type || 0) == 0) {
uni.hideTabBarRedDot({
index: Number(index)
});
} else {
uni.showTabBarRedDot({
index: Number(index)
});
}
}
},
/**
* 设置导航车badge
* index tabBar 的哪一项,从左边算起(0开始)
* type 0 移出, 1 添加 (默认 0 移出)
* value 显示的文本,超过 4 个字符则显示成 ...(type参数为1的情况下有效)
*/
set_tab_bar_badge(index, type, value) {
if (index !== undefined && index !== null) {
if ((type || 0) == 0) {
uni.removeTabBarBadge({
index: Number(index)
});
} else {
uni.setTabBarBadge({
index: Number(index),
"text": value.toString()
});
}
}
},
// 显示分享菜单
show_share_menu() {
// 当前页面
var pages = getCurrentPages();
var obj = pages[pages.length-1];
// 分享信息
var share = this.share_content_handle(obj.share_info || {});
// #ifdef MP-WEIXIN
// 微信小程序展示系统分享好友和朋友圈按钮
// 其他端小程序不用展示会调起分享窗口
uni.showShareMenu({
withShareTicket: true,
title: share.title,
desc: share.desc,
path: share.path + share.query,
imageUrl: share.img,
menus: ['shareAppMessage', 'shareTimeline']
});
// #endif
// #ifdef H5
// H5处理微信环境分享自定义信息
if(this.is_weixin()) {
var page_url = this.get_page_url();
uni.request({
url: this.get_request_url("signpackage", "index", "share"),
method: "POST",
data: {
url: encodeURIComponent(page_url)
},
dataType: "json",
success: res => {
if (res.data.code == 0 && (res.data.data.package || null) != null) {
var data = res.data.data.package;
var wx = require('jweixin-module');
wx.config({
debug: false,
appId: data.appId,
timestamp: data.timestamp,
nonceStr: data.nonceStr,
signature: data.signature,
jsApiList: [
'updateAppMessageShareData',
'updateTimelineShareData',
'onMenuShareWeibo'
]
});
wx.ready(function () {
// 自定义“分享给朋友”及“分享到QQ”按钮的分享内容
wx.updateAppMessageShareData({
title: share.title,
desc: share.desc,
link: share.url,
imgUrl: share.img
});
// 自定义“分享到朋友圈”及“分享到QQ空间”按钮的分享内容
wx.updateTimelineShareData({
title: share.title,
link: share.url,
imgUrl: share.img
});
// 获取“分享到腾讯微博”按钮点击状态及自定义分享内容接口
wx.onMenuShareWeibo({
title: share.title,
desc: share.desc,
link: share.url,
imgUrl: share.img
});
});
}
},
fail: () => {
this.showToast("服务器请求出错");
}
});
}
// #endif
},
/**
* 获取配置信息、可指定key和默认值
* key 数据key(支持多级读取、以 . 分割key名称)
* default_value 默认值
*/
get_config(key, default_value) {
var value = null;
var config = uni.getStorageSync(this.data.cache_config_info_key) || null;
if (config != null) {
// 数据读取
var arr = key.split('.');
if (arr.length == 1) {
value = config[key] == undefined ? null : config[key];
} else {
value = config;
for (var i in arr) {
if (value[arr[i]] != undefined) {
value = value[arr[i]];
} else {
value = null;
break;
}
}
}
}
return value === null ? default_value === undefined ? value : default_value : value;
},
// 初始化 配置信息
init_config() {
var self = this;
uni.request({
url: this.get_request_url('common', 'base'),
method: 'POST',
data: {is_key: 1},
dataType: 'json',
success: res => {
if (res.data.code == 0) {
uni.setStorage({
key: this.data.cache_config_info_key,
data: res.data.data,
fail: () => {
this.showToast('配置信息缓存失败');
}
});
} else {
this.showToast(res.data.msg);
}
},
fail: () => {
this.showToast('服务器请求出错');
}
});
},
/**
* 配置是否有效(100毫秒检验一次、最多检验100次)
* object 回调操作对象
* method 回调操作对象的函数
*/
is_config(object, method) {
var self = this;
var count = 0;
var timer = setInterval(function() {
if (self.get_config('status') == 1) {
clearInterval(timer);
if (typeof object === 'object' && (method || null) != null) {
object[method](true);
}
}
count++;
if (count >= 100) {
clearInterval(timer);
}
}, 100);
},
/**
* 火星坐标GCJ02到百度坐标BD-09(高德,谷歌,腾讯坐标 -> 百度)
* lng 经度
* lat 纬度
*/
map_gcj_to_bd(lng, lat) {
lng = parseFloat(lng);
lat = parseFloat(lat);
let x_pi = 3.14159265358979324 * 3000.0 / 180.0;
let x = lng;
let y = lat;
let z = Math.sqrt(x * x + y * y) + 0.00002 * Math.sin(y * x_pi);
let theta = Math.atan2(y, x) + 0.000003 * Math.cos(x * x_pi);
let lngs = z * Math.cos(theta) + 0.0065;
let lats = z * Math.sin(theta) + 0.006;
return {
lng: lngs,
lat: lats
};
},
/**
* 百度坐标BD-09到火星坐标GCJ02(百度 -> 高德,谷歌,腾讯坐标)
* lng 经度
* lat 纬度
*/
map_bd_to_gcj(lng, lat) {
lng = parseFloat(lng);
lat = parseFloat(lat);
let x_pi = 3.14159265358979324 * 3000.0 / 180.0;
let x = lng - 0.0065;
let y = lat - 0.006;
let z = Math.sqrt(x * x + y * y) + 0.00002 * Math.sin(y * x_pi);
let theta = Math.atan2(y, x) + 0.000003 * Math.cos(x * x_pi);
let lngs = z * Math.cos(theta);
let lats = z * Math.sin(theta);
return {
lng: lngs,
lat: lats
};
},
/**
* 百度坐标BD-09到火星坐标GCJ02(高德,谷歌,腾讯坐标)
* lng 经度
* lat 纬度
* name 地图上面显示的名称
* address 地图上面显示的详细地址
* scale 缩放比例,范围5~18
*/
open_location(lng, lat, name, address, scale) {
if (lng == undefined || lat == undefined || lng == '' || lat == '') {
this.showToast('坐标有误');
return false;
}
// 转换坐标打开位置
var position = this.map_bd_to_gcj(lng, lat);
uni.openLocation({
name: name || '地理位置',
address: address || '',
scale: scale || 18,
longitude: position.lng,
latitude: position.lat
});
},
// uuid生成
uuid() {
var d = new Date().getTime();
return 'xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx'.replace(/[xy]/g, function(c) {
var r = (d + Math.random() * 16) % 16 | 0;
d = Math.floor(d / 16);
return (c == 'x' ? r : r & 0x3 | 0x8).toString(16);
});
},
// 获取当前uuid
request_uuid() {
var uuid = uni.getStorageSync(this.data.cache_user_uuid_key) || null;
if (uuid == null) {
uuid = this.uuid();
uni.setStorage({
key: this.data.cache_user_uuid_key,
data: uuid,
fail: () => {
this.showToast('uuid缓存失败');
}
});
}
return uuid;
},
// 链接地址事件
url_event(e) {
var value = e.currentTarget.dataset.value || null;
if (value != null) {
var temp = value.substr(0, 6);
if (temp == 'http:/' || temp == 'https:') {
this.open_web_view(value);
} else {
if (this.is_tabbar_pages(value)) {
uni.switchTab({
url: value
});
} else {
uni.navigateTo({
url: value
});
}
}
}
},
// 剪贴板
text_copy_event(e) {
var value = e.currentTarget.dataset.value || null;
if (value != null) {
var self = this;
uni.setClipboardData({
data: value,
success(res) {
uni.getClipboardData({
success(res) {
self.showToast('复制成功', 'success');
}
});
}
});
} else {
this.showToast('复制内容为空');
}
},
// 图片预览
image_show_event(e) {
var value = e.currentTarget.dataset.value || null;
if (value != null) {
uni.previewImage({
current: value,
urls: [value]
});
} else {
this.showToast('图片地址为空');
}
},
// 静态文件url地址
get_static_url(type, is_plugins) {
// 默认公共地址
if((type || null) == null) {
type = 'common';
}
// 是否插件
if((is_plugins || false) == true) {
// 根据配置的静态url地址+插件标识符
return this.data.static_url+'static/plugins/images/'+type+'/';
} else {
// 根据配置的静态url地址+主题标识+参数类型组合远程静态文件地址
return this.data.static_url+'static/app/'+this.data.default_theme+'/'+type+'/';
}
},
// rpx转px
rpx_to_px(value) {
return ((value || 0) == 0) ? 0 : parseInt(value) / 750 * parseInt(this.get_system_info('windowWidth', 0));
},
// px转rpx
px_to_rpx(value) {
return ((value || 0) == 0) ? 0 : parseInt(value) * 750 / parseInt(this.get_system_info('windowWidth', 0));
},
// 终端类型
application_client() {
var type = '';
// #ifdef APP
type = 'app';
//#endif
// #ifdef MP
type = 'mp';
//#endif
return type;
},
// 终端类型值
application_client_type() {
var value = '';
// #ifdef MP-WEIXIN
value = 'weixin';
//#endif
// #ifdef MP-ALIPAY
value = 'alipay';
//#endif
// #ifdef MP-BAIDU
value = 'baidu';
//#endif
// #ifdef MP-QQ
value = 'qq';
//#endif
// #ifdef MP-TOUTIAO
value = 'toutiao';
//#endif
// #ifdef H5
value = 'h5';
//#endif
return value;
},
// 授权验证
auth_check(object, method, scope, msg) {
var self = this;
uni.getSetting({
success(res) {
if (!res.authSetting[scope]) {
uni.authorize({
scope: scope,
success (res) {
if (typeof object === 'object' && (method || null) != null) {
object[method](1);
}
},
fail (res) {
self.showToast(msg || '请打开授权');
setTimeout(function() {
uni.openSetting();
}, 1000);
}
});
} else {
if (typeof object === 'object' && (method || null) != null) {
object[method](1);
}
}
}
});
},
// 窗口宽度处理
window_width_handle(width) {
// #ifdef H5 || APP
if(width > 800) {
width = 800;
}
// #endif
return width;
},
// 窗口高度处理
window_height_handle(system) {
var height = system.windowHeight;
// 状态栏
if(system.statusBarHeight > 0) {
height += system.statusBarHeight;
}
// 导航栏
if(system.windowTop > 0) {
height += system.windowTop;
}
// 底部菜单
if(system.windowBottom > 0) {
height += system.windowBottom;
}
return height;
},
// 获取当前页面地址、不含?后面的参数
get_page_url(is_whole) {
// #ifdef MP || APP
var pages = getCurrentPages();
var url = pages[pages.length-1].$page.fullPath;
// #endif
// #ifdef H5
var url = window.location.href;
// #endif
if(is_whole == false) {
var temp = url.split('?');
url = temp[0];
}
return url;
},
// 是否微信环境
is_weixin() {
var agent = navigator.userAgent.toLowerCase();
if(agent.match(/MicroMessenger/i) == 'micromessenger') {
return true;
}
return false;
},
// 用户微信webopenid是否存在
is_user_weixin_web_openid(order_ids) {
// 微信环境判断是否已有web_openid、不存在则跳转到插件进行授权
if(this.is_weixin()) {
var web_openid = this.get_user_cache_info('weixin_web_openid') || null;
if(web_openid == null) {
// 已经授权则重新刷新用户信息
var params = this.get_launch_cache_info();
if(params != null && (params.is_weixin_auth_web_openid || 0) == 1) {
uni.showLoading({
title: "处理中..."
});
uni.request({
url: this.get_request_url("tokenuserinfo", "user"),
method: "POST",
data: {},
dataType: "json",
success: res => {
uni.hideLoading();
if (res.data.code == 0) {
uni.setStorageSync(this.data.cache_user_info_key, res.data.data);
} else {
this.showToast(res.data.msg);
}
},
fail: () => {
uni.hideLoading();
this.showToast("服务器请求出错");
}
});
return true;
} else {
uni.setStorageSync(this.data.cache_page_pay_key, (typeof order_ids == 'array') ? order_ids.join(',') : order_ids);
var page_url = this.get_page_url();
page_url += (page_url.indexOf('?') == -1) ? '?' : '&';
page_url += 'is_weixin_auth_web_openid=1';
var request_url = encodeURIComponent(base64.encode(page_url));
var url = this.get_request_url("index", "pay", "weixinwebauthorization", "request_url="+request_url, "index").replace('&ajax=ajax', '');
window.location.href = url;
}
return false;
}
}
return true;
},
// 分享内容处理
share_content_handle(data) {
// 获取插件配置信息
var share_config = this.get_config('plugins_base.share.data') || {};
var result = {
title: data.title || share_config.title || this.data.application_title,
desc: data.desc || share_config.desc || this.data.application_describe,
path: data.path || '/pages/index/index',
query: this.share_query_handle(data.query || ''),
img: data.img || share_config.pic || this.get_config('config.home_site_logo_square')
};
result['url'] = this.get_page_url();
// #ifdef H5
result['url'] = result.url.split('#')[0] + '#' + ((result.path.substr(0 ,1) == '/') ? '' : '/') + result.path + result.query;
// #endif
return result;
},
// 分享参数处理
share_query_handle(query) {
if((query || null) == null || query.indexOf('referrer') == -1) {
var user_id = parseInt(this.get_user_cache_info('id', 0)) || 0;
if(user_id > 0) {
var join = ((query || null) == null) ? '' : '&';
query += join+'referrer='+user_id;
}
}
return ((query || null) == null) ? '' : '?'+query;
}
},
/**
* 小程序初始化
*/
onLaunch(params) {
// 启动参数处理+缓存
params = this.globalData.launch_params_handle(params);
uni.setStorage({
key: this.globalData.data.cache_launch_info_key,
data: params
});
// 设置设备信息
this.globalData.set_system_info();
// 初始化配置
this.globalData.init_config();
},
methods: {}
};
</script>
<style>
@import './common/css/page.css';
@import './common/css/business.css';
@import './common/css/plugins.css';
@import './common/css/lib.css';
@import './common/css/theme/yellow.css';
</style>
马建仓 AI 助手
尝试更多
代码解读
代码找茬
代码优化
JavaScript
1
https://gitee.com/vipit/shopxo-uniapp.git
git@gitee.com:vipit/shopxo-uniapp.git
vipit
shopxo-uniapp
ShopXO开源商城uniapp端
master

搜索帮助