xo_user_client/App.vue

3160 lines
136 KiB
Vue
Raw Permalink Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

<script>
import base64 from './common/js/lib/base64.js';
// 多语言引入并初始化
import i18n from './locale/index';
export default {
globalData: {
data: {
// 基础配置
// 数据接口请求地址
request_url:'https://d1.shopxo.vip/',
// 静态资源地址如系统根目录不在public目录下面请在静态地址后面加public目录、如https://d1.shopxo.vip/public/
static_url:'https://d1.shopxo.vip/',
// 系统类型默认default、如额外独立小程序、可与程序分身插件实现不同主体小程序及支付独立
system_type: 'default',
// 基础信息
application_title: 'ShopXO',
application_describe: 'ShopXO Desc',
// 默认logo、如 /static/images/common/logo.png
application_logo: '',
// 版本号、如: v1.0.0
version: 'v6.5',
// app版本信息、如: v1.0.0 20180118
app_version_info: 'v6.5 20250305',
// 货币价格符号
currency_symbol: '¥',
// 默认主题 主题颜色
// 红色 red #ff0036
// 黄色 yellow #f6c133
// 黑色 black #333333
// 绿色 green #20a53a
// 橙色 orange #fe6f04
// 蓝色 blue #1677ff
// 棕色 brown #8B4513
// 紫色 purple #623cec
default_theme: 'red',
// 多语言列表
// 增加或者减少语言时
// 1.新增一个对象,按照当前格式新增
// 2.去lang里面各个文件去新增语言翻译
default_language: 'zh',
// 系统tabbar
system_tabbar: [
'/pages/index/index',
'/pages/goods-category/goods-category',
'/pages/cart/cart',
'/pages/user/user'
],
// 公共配置
// 是否多商户店铺id
plugins_shop_id: null,
// 是否多门店门店id
plugins_realstore_id: null,
// 是否使用原生菜单0否, 1是
is_use_native_tabbar: 0,
// 购物车页面顶部导航强制关闭门店0否, 1是
is_cart_header_close_realstore: 0,
// 商品详情页底部导航是否开启购物车功能0否, 1是
is_goods_bottom_opt_cart: 1,
// 商品详情页底部导航存在指定返回参数[is_opt_back=1]展示返回按钮0否, 1是
is_goods_bottom_opt_back: 1,
// 全站阻止打开商品详情页面0否, 1是
is_forbid_to_goods_detail: 0,
// 分享及转发使用页面设置的默认图片及系统默认图片0否, 1是
is_share_use_image: 1,
// 开启浮动客服、前提是后台需要开启客服功能0否, 1是
is_online_service_fixed: 1,
// 分类页面商品列表模式一级分类使用图标类型0 实景图, 1 icon图标, 2 大图片)
category_goods_model_icon_type: 0,
// 商品分类页面搜索进入独立搜索页面0否, 1是
category_goods_is_search_alone: 0,
// 商品分类页面开启购物车导航0否, 1是
category_goods_is_show_cart_nav: 1,
// 用户中心菜单默认展示模式0 九宫格, 1 列表)
user_center_nav_show_model_type: 0,
// 商品列表是否展示购物车0否, 1是
is_goods_list_show_cart_opt: 1,
// 分销页面地图分布是否强制获取当前位置0否, 1是
is_distribution_map_force_location: 0,
// 是否开启微信隐私弹窗授权提示、仅微信小程序有效0否, 1是
is_weixin_privacy_setting: 1,
// 弹出获取用户当前位置0否, 1是
get_user_location_status: 0,
get_user_location_timer: null,
// 微信小程序打开地图使用0否, 1是【腾讯位置服务路线规划】插件、需要到小程序后台设置->第三方设置->插件管理里面添加【腾讯位置服务路线规划】插件,教程 https://mp.weixin.qq.com/wxopen/plugindevdoc?appid=wx50b5593e81dd937a
is_weixin_open_location_use_plugins: 0,
// 首页搜索框开启扫一扫自动0否, 1是仅【小程序、APP】支持
is_home_search_scan: 1,
// 强制使用文字作为logo默认当前指定logo->后台站点设置手机端图片logo->后台手机管理小程序配置名称->站点设置中的站点名称)
is_home_logo_use_text: 0,
// 首页开启地理位置选择0否, 1是优先级高于logo展示
is_home_location_choice: 0,
// 门店详情顶部导航返回按钮0否, 1是
is_realstore_top_nav_back: 1,
// 门店详情搜索框内扫码加购0否, 1是
is_realstore_top_search_scan: 1,
// 门店详情阻止跳转到商品详情页面去0否, 1是
is_realstore_forbid_to_goods_detail: 0,
// 钱包插件货币符号使用当前 currency_symbol 数据的固定值0否, 1是
is_wallet_use_fixed_currency_symbol: 0,
// 加载是否使用骨架屏0否, 1是
is_loading_use_skeleton: 0,
// 加载动画类型0logo, 1名称
loading_content_type: 0,
// 数据缓存key
// 场景值
cache_scene_key: 'cache_scene_key',
// 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_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',
// 上一页地址缓存key
cache_prev_page_key: 'cache_prev_page_key',
// tab页面切换参数
cache_page_tabbar_switch_params: 'cache_page_tabbar_switch_params_key',
// 用户基础资料提示间隔key
cache_user_base_personal_interval_time_key: 'cache_user_base_personal_interval_time_key',
// 用户购物车选择记录key
cache_user_cart_not_use_data_key: 'cache_user_cart_not_use_data_key',
// 未登录页面缓存记录key
cache_user_no_login_page_status_data_key: 'cache_user_no_login_page_status_data_key',
// app更新提示缓存记录key
cache_app_update_tips_interval_time_key: 'cache_app_update_tips_interval_time_key',
// app评分提示缓存记录key
cache_app_star_tips_interval_time_key: 'cache_app_star_tips_interval_time_key',
// 首页数据缓存key
cache_index_data_key: 'cache_index_data_key',
// 商品数据缓存key
cache_goods_data_key: 'cache_goods_data_key',
// 页面设计页面数据缓存key
cache_design_page_data_key: 'cache_design_page_data_key',
// 底部菜单选中索引缓存key
cache_footer_active_key: 'cache_footer_active_key',
// diy模块数据缓存key
cache_diy_data_key: 'cache_diy_data_key',
// diy页面数据缓存key
cache_diy_page_data_key: 'cache_diy_page_data_key',
// apptabbar底部菜单高度
cache_app_system_tabbar_height_key: 'cache_app_system_tabbar_height_key',
// diy底部菜单高度
cache_app_diy_tabbar_height_key: 'cache_app_diy_tabbar_height_key',
// apptabbar底部菜单角标数据
cache_tabbar_badge_key: 'cache_tabbar_badge_key',
// 搜索历史记录
cache_search_history_key: 'cache_search_history_key',
// 门店选择详情缓存
cache_realstore_detail_choice_key: 'cache_realstore_detail_choice_key',
// 互联网医院就诊人选择数据
cache_hospital_patient_choice_value_key: 'cache_hospital_patient_choice_value_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',
// 其他数据
// 公共数是否已初始化成功
common_data_loading_status: 0,
common_data_init_status: 0,
common_data_init_back_timer: null,
// 网络状态检查
network_type_page_record_timer: null,
// 位置监听更新页面临时记录数据
location_update_page_temp_record_data: [],
},
/**
* 启动参数处理
*/
launch_params_handle(params) {
// 原有缓存
var cache_params = this.get_launch_cache_info();
// 当前参数、从query读取覆盖
if ((params.query || null) != null) {
params = params.query;
}
// query下scene参数解析处理
if ((params.scene || null) != null) {
params = this.url_params_to_json(decodeURIComponent(params.scene));
}
// 如果当前没有邀请id、但是原始缓存有邀请id、则使用缓存邀请id
if ((params['referrer'] || null) == null && cache_params != null && (cache_params.referrer || null) != null) {
params['referrer'] = cache_params.referrer;
}
return params;
},
/**
* 当前是否单页模式
*/
is_current_single_page() {
var scene = this.get_scene_data();
// #ifdef MP-WEIXIN
return scene == 1154 ? 1 : 0;
// #endif
return 0;
},
/**
* 场景值获取
*/
get_scene_data() {
return uni.getStorageSync(this.data.cache_scene_key) || 0;
},
/**
* 场景值设置
*/
set_scene_data(params) {
var scene = (params.scene || null) == null ? 0 : parseInt(params.scene);
uni.setStorageSync(this.data.cache_scene_key, scene);
return scene;
},
/**
* 获取设备信息
* 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() || null;
} else {
info = uni.getStorageSync(this.data.cache_system_info_key) || null;
}
if (info == null || (key || null) == null) {
return info;
}
return info[key] == undefined ? (dv == undefined ? null : dv) : info[key];
},
/**
* 设置设备信息
*/
set_system_info() {
var system_info = uni.getSystemInfoSync();
uni.setStorageSync(this.data.cache_system_info_key, 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 url = this.data.request_url + (group || 'api') + '.php?s=' + c + '/' + a + plugins_params;
return this.request_params_handle(url) + '&ajax=ajax' + params;
},
/**
* 请求参数处理
* url url地址
*/
request_params_handle(url) {
// 用户信息
var user = this.get_user_cache_info();
var token = user == null ? '' : user.token || '';
var uuid = this.request_uuid();
var client_value = this.application_client_type();
var client_brand = this.application_client_brand();
// 启动参数
var params = this.get_launch_cache_info();
var referrer = params == null ? null : params.referrer || null;
var referrer_params = referrer == null ? '' : '&referrer=' + referrer;
// 用户位置
var user_location = this.choice_user_location_init();
var user_location_params = (user_location || null) != null && (user_location.status || 0) == 1 ? '&user_lng=' + user_location.lng + '&user_lat=' + user_location.lat : '';
// 当前语言
var lang = this.get_language_value();
// 当前主题
var theme = this.get_theme_value();
// 拼接标识
var join = url.indexOf('?') == -1 ? '?' : '&';
return url + join + 'system_type=' + this.data.system_type + '&application=app&application_client_type=' + client_value + '&application_client_brand=' + client_brand + '&token=' + token + '&uuid=' + uuid + referrer_params + user_location_params + '&lang=' + lang+'&theme='+theme;
},
/**
* 获取tab页面切换参数
*/
get_page_tabbar_switch_params() {
return uni.getStorageSync(this.data.cache_page_tabbar_switch_params) || null;
},
/**
* 删除tab页面切换参数
*/
remove_page_tabbar_switch_params() {
uni.removeStorageSync(this.data.cache_page_tabbar_switch_params);
},
/**
* 是否需要登录
* 是否需要绑定手机号码
*/
user_is_bind_mobile(user, object, method, params, is_to_login = false) {
if ((user || null) != null && (user.mobile || null) == null && parseInt(user.is_mandatory_bind_mobile || 0) == 1) {
if(is_to_login) {
this.login_confirm_tips_modal(this, object, method, params);
}
return true;
}
return false;
},
/**
* 获取用户信息,信息不存在则唤醒授权
* object 回调操作对象
* method 回调操作对象的函数
* params 回调操请求参数
* return 有用户数据直接返回, 则回调调用者
*/
get_user_info(object, method, params) {
var user = this.get_user_cache_info();
if (user == null) {
var self = this;
uni.getNetworkType({
success: function (res) {
if (res.networkType != 'none') {
// #ifdef MP
// 小程序唤醒用户授权
self.user_login(object, method, params);
// #endif
// #ifdef APP
// app登录注册
self.app_login_handle(self, object, method, params);
// #endif
// #ifdef H5
// h5登录注册
self.login_confirm_tips_modal(self, object, method, params);
// #endif
}
},
});
return false;
} else {
// 是否需要绑定手机
if(this.user_is_bind_mobile(user, object, method, params, true)) {
return false;
}
}
return user;
},
// app登录处理
app_login_handle(self, object, method, params) {
// 是否开启一键登录服务
if (self.get_config('plugins_base.thirdpartylogin.data.apponekeyusermobile_is_enable') == 1) {
uni.getProvider({
service: 'oauth',
success: function (res) {
if (res.provider.includes('univerify')) {
// 预登录检查
uni.preLogin({
provider: 'univerify',
success(res) {
// 显示一键登录弹窗
var theme_color = self.get_theme_color();
var theme_color_light = self.get_theme_color(null, true);
uni.login({
provider: 'univerify',
univerifyStyle: {
authButton: {
// 授权按钮正常状态背景颜色 默认值:#3479f5
normalColor: theme_color,
// 授权按钮按下状态背景颜色 默认值:#2861c5仅ios支持
highlightColor: theme_color_light,
// 授权按钮不可点击时背景颜色 默认值:#73aaf5仅ios支持
disabledColor: theme_color_light,
// 授权按钮文案 默认值:“本机号码一键登录”
title: i18n.t('shopxo-uniapp.app.5a7r0v'),
},
otherLoginButton: {
// 其他登录方式按钮文字 默认值:“其他登录方式”
title: i18n.t('login.login.9q27d8'),
},
privacyTerms: {
// 条款前的文案 默认值:“我已阅读并同意”
prefix: i18n.t('shopxo-uniapp.app.33k281'),
// 条款后的文案 默认值:“并使用本机号码登录”
suffix: i18n.t('shopxo-uniapp.app.8l688n'),
// 自定义协议条款最大支持2个需要同时设置url和title. 否则不生效
privacyItems: [
{
url: self.get_config('config.agreement_userregister_url'),
title: i18n.t('shopxo-uniapp.app.28r5dr'),
},
{
url: self.get_config('config.agreement_userprivacy_url'),
title: i18n.t('shopxo-uniapp.app.lb493k'),
},
],
},
},
success(res) {
// 在得到access_token和openid后通过callfunction调用云函数
uniCloud
.callFunction({
name: 'getPhoneNumber',
data: {
access_token: res.authResult.access_token,
openid: res.authResult.openid,
},
})
.then((res) => {
uni.request({
url: self.get_request_url('apponekeyusermobile', 'index', 'thirdpartylogin'),
method: 'POST',
data: {
mobile: res.result,
},
dataType: 'json',
success: (res) => {
uni.closeAuthView();
if (res.data.code == 0) {
uni.setStorageSync(self.data.cache_user_info_key, res.data.data);
if (typeof object === 'object' && (method || null) != null) {
object[method](params);
}
} else {
self.showToast(res.data.msg);
}
},
fail: () => {
uni.closeAuthView();
self.showToast(i18n.t('common.internet_error_tips'));
},
});
})
.catch((err) => {
uni.closeAuthView();
self.showToast(i18n.t('shopxo-uniapp.app.ch1pd2'));
});
},
fail(res) {
// 关闭一键登录弹窗
uni.closeAuthView();
// 用户点击了其他登录方式、则进入登录页面
if (res.errCode == 30002) {
// 进入独立登录注册页面
uni.navigateTo({
url: '/pages/login/login',
});
} else {
// 用户不是点击关闭验证界面则提示错误
if (res.errCode != 30003) {
self.showToast(res.errMsg + '(' + res.errCode + ')');
}
}
},
});
},
fail(res) {
self.login_confirm_tips_modal(self, object, method, params);
},
});
} else {
self.login_confirm_tips_modal(self, object, method, params);
}
},
fail(res) {
self.login_confirm_tips_modal(self, object, method, params);
},
});
} else {
self.login_confirm_tips_modal(self, object, method, params);
}
},
// 未登录确认处理
login_confirm_tips_modal(self, object, method, params) {
// 是否tabbar页面
var page = self.current_page(false);
var is_tabbar = self.is_system_tabbar_pages('/'+page);
// 非初始化 并且 非tabbar页面则关闭当前页面并跳转登录页面
if(method == 'init' && !is_tabbar) {
uni.redirectTo({
url: '/pages/login/login'
});
// 初始化页面并且是tabbar页面
} else if(method == 'init' && is_tabbar) {
var key = this.data.cache_user_no_login_page_status_data_key;
var data = uni.getStorageSync(key) || [];
if(data.indexOf(page) == -1) {
data.push(page);
uni.setStorageSync(key, data);
uni.navigateTo({
url: '/pages/login/login'
});
}
// 非初始化则直接跳转登录页面
} else if(method != 'init') {
uni.navigateTo({
url: '/pages/login/login'
});
}
},
/**
* 从缓存获取用户信息、可指定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 ? null : 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;
},
/**
* 系统参数设置
*/
set_launch_cache_info(params) {
params = this.launch_params_handle(params);
uni.setStorageSync(this.data.cache_launch_info_key, params);
return params;
},
/**
* 获取登录授权数据
*/
get_login_cache_info() {
return uni.getStorageSync(this.data.cache_user_login_key) || null;
},
/**
* 用户登录
* object 回调操作对象
* method 回调操作对象的函数
* params 回调请求参数
* auth_data 授权数据
*/
user_auth_login(object, method, params, auth_data) {
var self = this;
// #ifdef MP-WEIXIN || MP-QQ || MP-BAIDU || MP-TOUTIAO || MP-KUAISHOU
uni.checkSession({
success: function () {
var login_data = self.get_login_cache_info();
if (login_data == null) {
self.user_login(object, method, params);
} else {
self.get_user_login_info(object, method, params, login_data, auth_data);
}
},
fail: function () {
uni.removeStorageSync(self.data.cache_user_login_key);
self.user_login(object, method, params);
},
});
// #endif
// #ifdef MP-ALIPAY
var login_data = self.get_login_cache_info();
if (login_data == null) {
self.user_login(object, method, params);
} else {
self.get_user_login_info(object, method, params, login_data, auth_data);
}
// #endif
},
/**
* 用户登录
* object 回调操作对象
* method 回调操作对象的函数
* params 回调操请求参数
*/
user_login(object, method, params) {
var login_data = uni.getStorageSync(this.data.cache_user_login_key) || null;
if (login_data == null) {
this.user_login_handle(object, method, params, true);
} else {
this.login_to_auth();
}
},
/**
* 用户登录处理
* object 回调操作对象
* method 回调操作对象的函数
* params 回调操请求参数
* is_to_auth 是否进入授权
*/
user_login_handle(object, method, params, is_to_auth = true) {
var self = this;
uni.showLoading({
title: i18n.t('common.auth_in_text'),
});
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;
var client_type = self.application_client_type();
if ((data.is_user_exist || 0) == 1 || client_type == 'weixin') {
// 存在数据非微信 或 微信小程序是否强制填写基础信息
if(((data.is_user_exist || 0) == 1 && client_type != 'weixin') || !self.is_weixin_force_user_base_handle(self, data, object, method, params)) {
uni.setStorageSync(self.data.cache_user_info_key, data);
if (typeof object === 'object' && (method || null) != null) {
object[method](params);
}
}
} else {
uni.setStorageSync(self.data.cache_user_login_key, data);
if (is_to_auth) {
var pages = getCurrentPages();
if (pages[pages.length - 1]['route'] == 'pages/login/login') {
if (typeof object === 'object' && (method || null) != null) {
object[method](params);
}
} else {
self.login_to_auth();
}
}
}
} else {
uni.hideLoading();
self.showToast(res.data.msg);
}
},
fail: () => {
uni.hideLoading();
self.showToast(i18n.t('common.internet_error_tips'));
},
});
}
},
fail: (e) => {
uni.hideLoading();
self.showToast(i18n.t('login.login.3nmrg2'));
},
});
},
// 微信小程序是否强制填写基础信息
is_weixin_force_user_base_handle(self, data, object, method, params) {
var status = parseInt(self.get_config('config.common_app_is_weixin_force_user_base', 0));
if(status == 1) {
var obj = self.get_page_object();
if((obj.$vm || null) != null && (obj.$vm.$refs || null) != null && (obj.$vm.$refs.common || null) != null && (obj.$vm.$refs.common.$refs || null) != null && (obj.$vm.$refs.common.$refs.user_base || null) != null) {
var user_base = obj.$vm.$refs.common.$refs.user_base;
var res = user_base.form_write_field_check_data(data, true);
if(res.popup_status) {
user_base.user_base_open(object, method, params);
}
return res.popup_status;
}
}
return false;
},
/**
* 跳转到登录页面授权
*/
login_to_auth() {
uni.showModal({
title: i18n.t('common.warm_tips'),
content: i18n.t('login.login.jw378f'),
confirmText: i18n.t('common.confirm'),
cancelText: i18n.t('common.not_yet'),
success: (result) => {
if (result.confirm) {
uni.navigateTo({
url: '/pages/login/login',
});
}
},
});
},
/**
* 获取用户授权信息
* object 回调操作对象
* method 回调操作对象的函数
* params 回调请求参数
* login_data 登录信息
* auth_data 授权数据
*/
get_user_login_info(object, method, params, login_data, auth_data) {
// 请求数据
var data = {
auth_data: JSON.stringify(auth_data),
openid: login_data.openid,
unionid: login_data.unionid,
};
// 用户信息处理
uni.showLoading({
title: i18n.t('common.auth_in_text'),
});
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.setStorageSync(self.data.cache_user_info_key, res.data.data);
if (typeof object === 'object' && (method || null) != null) {
object[method](params);
}
} else {
self.showToast(res.data.msg);
}
},
fail: () => {
uni.hideLoading();
self.showToast(i18n.t('common.internet_error_tips'));
},
});
},
/**
* 字段数据校验
* 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主要部分
* url url地址
*/
get_url_main_part(url) {
var value = '';
if((url || null) != null) {
if (url.indexOf('?') == -1) {
value = url;
} else {
var temp_str = url.split('?');
value = temp_str[0];
}
}
return value;
},
/**
* diy底部菜单高度数据存储
* value 高度
*/
app_diy_tabbar_height_save(value) {
uni.setStorageSync(this.data.cache_app_diy_tabbar_height_key, value);
},
/**
* diy底部菜单高度数据读取
*/
app_diy_tabbar_height_value() {
return parseInt(uni.getStorageSync(this.data.cache_app_diy_tabbar_height_key) || 0);
},
/**
* 系统底部菜单高度数据存储
* value 高度
*/
app_system_tabbar_height_save(value) {
uni.setStorageSync(this.data.cache_app_system_tabbar_height_key, value);
},
/**
* 系统底部菜单高度数据读取
*/
app_system_tabbar_height_value() {
return parseInt(uni.getStorageSync(this.data.cache_app_system_tabbar_height_key) || 0);
},
/**
* 底部菜单页面数、tabbar
*/
app_tabbar_pages() {
var temp_tabbar = this.data.system_tabbar;
var app_tabbar = this.get_config('app_tabbar') || null;
if(app_tabbar != null && (app_tabbar.content || null) != null && (app_tabbar.content.nav_content || null) != null) {
temp_tabbar = app_tabbar.content.nav_content.map(function(v) {
if((v.link || null) != null && (v.link.page || null) != null) {
return v.link.page;
}
});
}
return temp_tabbar;
},
/**
* 当前地址是否存在底部菜单tabbar中
*/
is_tabbar_pages(url = null) {
var pages = (this.data.is_use_native_tabbar == 1) ? this.data.system_tabbar : this.app_tabbar_pages();
return this.is_tabbar_pages_handle(pages, url);
},
/**
* 当前地址是否存在系统tabbar中
*/
is_system_tabbar_pages(url = null) {
return this.is_tabbar_pages_handle(this.data.system_tabbar, url);
},
/**
* 当前地址是否存在tabbar中
* pages tabbar页面
* url url地址
*/
is_tabbar_pages_handle(pages, url = null) {
var value = (url == null) ? '/'+this.current_page() : url;
if ((value || null) != null) {
if(pages.indexOf(value) != -1) {
return true;
} else {
// 存在参数去掉参数再检索是否存在页面的tabbar
if(value.indexOf('?') != -1) {
var temp = value.split('?');
if(pages.indexOf(temp[0]) != -1) {
return true;
}
}
}
}
return false;
},
/**
* 当前地址是否存为首页
* url url地址
*/
is_tabbar_home(url = null) {
var pages = this.app_tabbar_pages() || [];
if(pages.length > 0) {
var value = (url == null) ? '/'+this.current_page() : url;
if ((value || null) != null) {
if(pages[0] == value) {
return true;
} else {
// 存在参数去掉参数再检索是否存在页面的tabbar
if(value.indexOf('?') != -1) {
var temp = value.split('?');
if(pages[0] == temp[0]) {
return true;
}
}
}
}
}
return false;
},
// 系统底部菜单隐藏
system_hide_tabbar() {
if(this.data.is_use_native_tabbar != 1) {
uni.hideTabBar();
}
},
/**
* 事件操作
*/
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_system_tabbar_pages(value)) {
var temp = value.split('?');
if (temp.length > 1 && (temp[1] || null) != null) {
value = temp[0];
var query = this.url_params_to_json(temp[1]);
uni.setStorageSync(this.data.cache_page_tabbar_switch_params, query);
}
uni.switchTab({
url: value
});
//隐藏系统tabbar
this.system_hide_tabbar();
} 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(i18n.t('shopxo-uniapp.app.5y1c52'));
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地址
* is_redirect [boolean] 是否关闭当前页面
*/
open_web_view(value, is_redirect = false) {
var url = '/pages/web-view/web-view?url=' + encodeURIComponent(value);
if(is_redirect) {
uni.redirectTo({
url: url,
});
} else {
uni.navigateTo({
url: url,
});
}
},
/**
* 默认弱提示方法
* msg [string] 提示信息
* status [string] 状态 默认error [正确success, 错误error]
*/
showToast(msg, status) {
if ((msg || null) != null) {
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] 回调操作对象的函数
* params [obj] 携带的参数
*/
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 || i18n.t('common.cancel');
var confirm_text = e.confirm_text || i18n.t('common.confirm');
var cancel_color = e.cancel_color || '#000000';
var confirm_color = e.confirm_color || '#576B95';
var params = e.params || {};
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) {
params['alert_status'] = res.confirm ? 1 : 0;
e.object[e.method](params);
}
},
});
} else {
self.showToast(i18n.t('shopxo-uniapp.app.t754n6'));
}
},
// 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;
},
// json对象转url请求参数
json_to_url_params(data) {
var str = '';
for (var i in data) {
if (str != '') {
str += '&';
}
str += i + '=' + data[i];
}
return str;
},
// 拨打电话
call_tel(data) {
var value = typeof data == 'object' ? data.currentTarget.dataset.value || null : data || null;
if (value != null) {
uni.makePhoneCall({
phoneNumber: value.toString(),
});
}
},
/**
* 登录校验
* object 回调操作对象
* method 回调操作对象的函数
* params 回调请求参数
*/
is_login_check(res, object, method, params) {
if (res.code == -400) {
uni.clearStorage();
this.get_user_info(object, method, params);
return false;
}
return true;
},
/**
* 读取底部导航badge
* type 类型标识(如购物车 cart
*/
get_tab_bar_badge(type) {
if ((type || null) != null) {
return uni.getStorageSync(this.data.cache_tabbar_badge_key+'-'+type) || null;
}
return null;
},
/**
* 设置底部导航badge
* type 类型标识(如购物车 cart
* value 显示的文本,超过 4 个字符则显示成 ...type参数为1的情况下有效
*/
set_tab_bar_badge(type, value = 0) {
// 是否使用原生菜单
if(this.data.is_use_native_tabbar == 1) {
if(type == 'cart') {
if ((value || 0) == 0) {
uni.removeTabBarBadge({
index: 2
});
} else {
uni.setTabBarBadge({
index: 2,
text: value.toString()
});
}
}
} else {
// 数据处理
if ((type || null) != null) {
var key = this.data.cache_tabbar_badge_key+'-'+type;
if ((value || null) == null) {
uni.removeStorageSync(key);
} else {
uni.setStorageSync(key, value);
}
}
// 更新底部菜单数据
var obj = this.get_page_object() || null;
if(obj != null && (obj.$vm || null) != null && (obj.$vm.$refs || null) != null && (obj.$vm.$refs.common || null) != null) {
obj.$vm.$refs.common.footer_init();
}
}
},
// 页面分享处理
page_share_handle(share = null) {
// 当前页面
var pages = getCurrentPages();
var obj = pages[pages.length - 1] || null;
// 分享信息、是否指定参数
if ((share || null) == null) {
share = {};
}
// 从页面对象获取参数
if (obj != null && Object.keys(share).length <= 0) {
share = obj.share_info || {};
}
// 参数处理
share = this.share_content_handle(share);
// #ifdef MP-WEIXIN
// 微信小程序展示系统分享好友和朋友圈按钮
// 其他端小程序不用展示会调起分享窗口
var not_pages = ['/pages/user/user', '/pages/cart/cart'];
if (not_pages.indexOf(share.url) == -1) {
uni.showShareMenu({
withShareTicket: true,
title: share.title,
desc: share.desc,
path: share.path + share.query,
imageUrl: share.img,
menus: ['shareAppMessage', 'shareTimeline'],
});
} else {
wx.hideShareMenu({
menus: ['shareTimeline'],
});
}
// #endif
// #ifdef H5
// H5处理微信环境分享自定义信息
if (this.is_weixin_env()) {
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(i18n.t('common.internet_error_tips'));
},
});
}
// #endif
// #ifdef MP-BAIDU
// 百度小程序wab化搜索引擎数据设置
uni.setPageInfo({
title: share.title,
keywords: share.kds || share.desc,
articleTitle: share.title,
description: share.desc,
image: share.img,
video:
(share.video || null) == null
? []
: [
{
url: share.video,
duration: '100',
image: share.img,
},
],
});
// #endif
},
/**
* 数据、可指定key和默认值
* data 数据
* key 数据key支持多级读取、以 . 分割key名称
* default_value 默认值
*/
get_key_data(data, key, default_value = null) {
var value = default_value;
if ((data || null) != null) {
var arr = key.split('.');
if (arr.length == 1) {
if(data[key] != undefined) {
value = data[key];
}
} else {
value = data;
for (var i in arr) {
if (value[arr[i]] != undefined) {
value = value[arr[i]];
} else {
value = default_value;
break;
}
}
}
}
return value;
},
/**
* 获取配置信息、可指定key和默认值
* key 数据key支持多级读取、以 . 分割key名称
* default_value 默认值
*/
get_config(key, default_value) {
// 获取全部缓存
var config = uni.getStorageSync(this.data.cache_config_info_key) || null;
if((key || null) == null) {
return config;
}
// key缓存获取
var value = 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;
}
}
}
}
// 默认值
if (value == null && default_value != undefined) {
value = default_value;
}
// 无数据则处理自定义字段定义的数据
if (value == null) {
switch (key) {
// 货币符号
case 'currency_symbol':
value = this.data.currency_symbol;
break;
}
}
return value;
},
/**
* 初始化 配置信息
* num 读取次数、如果失败+1再次读取
* object 回调操作对象
* method 回调操作对象的函数
* params 回调操请求参数
*/
init_config(num = 0, object, method, params) {
var self = this;
uni.getNetworkType({
success: function (res) {
if (res.networkType != 'none') {
// 获取配置本地缓存
var config = self.get_config();
if(config != null) {
// 公共配置初始化返回处理
self.init_config_result_handle(config, self);
}
// 读取远程配置
if(self.data.common_data_loading_status == 0) {
// 赋值在加载状态
self.data.common_data_loading_status = 1;
uni.request({
url: self.get_request_url('common', 'base'),
method: 'POST',
data: {
is_key: 1,
},
dataType: 'json',
success: (res) => {
// 赋值不在加载状态
self.data.common_data_loading_status = 0;
if (res.data.code == 0) {
// 配置存储
var data = res.data.data;
uni.setStorageSync(self.data.cache_config_info_key, data);
// 公共配置初始化返回处理
self.init_config_result_handle(data, self);
// 回调
if (typeof object === 'object' && (method || null) != null) {
object[method](params);
}
} else {
self.showToast(res.data.msg);
// 站点关闭状态则 记录已初始化公共数据状态
if (res.data.code == -10000) {
self.data.common_data_init_status = 1;
}
// 首次则再次初始化配置、站点关闭状态则不处理
if (parseInt(num || 0) <= 20 && self.data.common_data_init_status == 0) {
self.init_config(num+1, object, method, params);
}
}
},
fail: () => {
// 赋值不在加载状态
self.data.common_data_loading_status = 0;
// 首次则再次初始化配置
if (parseInt(num || 0) <= 20) {
self.init_config(num+1, object, method, params);
}
},
});
}
}
},
});
},
// 公共配置初始化返回处理
init_config_result_handle(data, self) {
// 记录已初始化公共数据状态
self.data.common_data_init_status = 1;
// 主题设置
self.set_theme_value(data.plugins_themestyle_data);
// 设置底部菜单
self.set_tabbar(data.plugins_themestyle_data);
// 用户自动登录处理
self.user_auto_login_handle();
},
/**
* 配置是否有效(100毫秒检验一次、最多检验100次)
* object 回调操作对象
* method 回调操作对象的函数
* params 回调操请求参数
*/
is_config(object, method, params) {
var self = this;
var count = 0;
var is_config_count = 0;
var timer = setInterval(function () {
if (self.get_config('status') == 1) {
clearInterval(timer);
if (typeof object === 'object' && (method || null) != null) {
object[method](true, params);
}
}
count++;
if (count >= 2300) {
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,
};
},
/**
* 打开地图
* lng 经度
* lat 纬度
* name 地图上面显示的名称
* address 地图上面显示的详细地址
* scale 缩放比例范围5~18
*/
open_location(lng, lat, name, address, scale) {
// #ifdef MP-KUAISHOU
this.showToast(i18n.t('shopxo-uniapp.app.iq66pg'));
return false;
// #endif
// 参数判断
if (lng == undefined || lat == undefined || lng == '' || lat == '') {
this.showToast(i18n.t('shopxo-uniapp.app.v2j475'));
return false;
}
lat = parseFloat(lat);
lng = parseFloat(lng);
// #ifdef MP-WEIXIN
// 微信小程序使用【腾讯位置服务路线规划】插件
if (this.data.is_weixin_open_location_use_plugins == 1) {
var key = this.get_config('config.common_tencent_map_ak') || null;
if (key != null) {
var plugin = requirePlugin('routePlan');
var end_point = JSON.stringify({
name: name || i18n.t('extraction-apply.extraction-apply.47v7m0'),
longitude: lng,
latitude: lat,
});
uni.navigateTo({
url: 'plugin://routePlan/route-plan?key=' + key + '&referer=' + this.get_application_title() + '&endPoint=' + end_point + '&themeColor=' + this.get_theme_color() + '&navigation=1',
});
return false;
}
}
// #endif
// 转换坐标打开位置
uni.openLocation({
name: name || i18n.t('extraction-apply.extraction-apply.47v7m0'),
address: address || '',
scale: scale || 18,
longitude: lng,
latitude: 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(i18n.t('shopxo-uniapp.app.3m1gbe'));
},
});
}
return uuid;
},
// 链接地址事件
url_event(e) {
if((e.currentTarget || null) != null && (e.currentTarget.dataset || null) != null) {
// 需要打开的url地址
var value = e.currentTarget.dataset.value || null;
// 是否阻止商品页面打开
if (this.data.is_forbid_to_goods_detail == 1 && value.indexOf('/pages/goods-detail/goods-detail') != -1) {
return false;
}
// 是否关闭当前页面
var is_redirect = parseInt(e.currentTarget.dataset.redirect || 0) == 1;
// 如果是底部菜单,非系统内置菜单则关闭当前页面并打开
var tabbar = this.app_tabbar_pages();
if(tabbar.indexOf(value) != -1 && this.data.system_tabbar.indexOf(value) == -1) {
var page = this.prev_page();
if(page != null && this.data.system_tabbar.indexOf(page) == -1) {
is_redirect = true;
}
}
// 调用打开url方法
this.url_open(value, is_redirect);
}
},
// 是否为url地址
is_url(value) {
var arr = ['http:/', 'https:'];
return arr.indexOf(value.substr(0, 6)) != -1;
},
// 是否为page页面地址
is_page(value) {
var arr = ['/pages', 'pages/'];
var status = arr.indexOf(value.substr(0, 6)) != -1;
if(!status) {
// 是否打开插件地址
if(value.substr(0, 17) == 'plugin-private://') {
status = true;
}
}
return status;
},
// url打开
url_open(value, is_redirect = false) {
if ((value || null) != null) {
// #ifdef MP
// 小程序最多打开10层页面
var pages = getCurrentPages();
if(pages.length >= 10) {
is_redirect = true;
}
// #endif
if (this.is_url(value)) {
// web地址
this.open_web_view(value, is_redirect);
} else if (value.substr(0, 8) == 'appid://') {
// 打开外部小程序协议appid|/pages/index/index?pv=hello|extraData|envVersion
var values = value.substr(8).split('|');
uni.navigateToMiniProgram({
appId: values[0],
path: values[1] || '',
extraData: values[2] || '',
envVersion: values[3] || 'release'
});
} else if (value.substr(0, 12) == 'shortlink://') {
// 小程序分享链接
uni.navigateToMiniProgram({
shortLink: value.substr(12)
});
} else if (value.substr(0, 6) == 'map://') {
// 地图协议(名称|地址|lng|lat
var values = value.substr(6).split('|');
if (values.length != 4) {
this.showToast(i18n.t('shopxo-uniapp.app.5y1c52'));
return false;
}
this.open_location(values[2], values[3], values[0], values[1]);
} else if (value.substr(0, 6) == 'tel://') {
// 电话协议
this.call_tel(value.substr(6));
} else if (value.substr(0, 7) == 'scan://') {
// 扫码协议
this.scan_handle();
} else {
// 默认切换或跳转页面
if (this.is_page(value)) {
if (this.is_system_tabbar_pages(value)) {
var temp = value.split('?');
if (temp.length > 1 && (temp[1] || null) != null) {
value = temp[0];
var query = this.url_params_to_json(temp[1]);
uni.setStorageSync(this.data.cache_page_tabbar_switch_params, query);
}
uni.switchTab({
url: value
});
//隐藏系统tabbar
this.system_hide_tabbar();
} else {
if (is_redirect) {
uni.redirectTo({
url: value
});
} else {
uni.navigateTo({
url: value
});
}
}
} else {
this.url_open('/pages/goods-search/goods-search?keywords='+value);
}
}
}
},
// 文本事件
text_event_handle(e) {
var event = e.currentTarget.dataset.event || null;
if (event != null) {
var value = e.currentTarget.dataset.value;
switch (event) {
// 拨打电话
case 'tel':
this.call_tel(value);
break;
// 复制文本
case 'copy':
this.text_copy_event(value);
break;
}
}
},
// 剪贴板
text_copy_event(data) {
var value = typeof data == 'object' ? data.currentTarget.dataset.value || null : data || null;
if (value != null) {
var self = this;
uni.setClipboardData({
data: value,
success(res) {
uni.getClipboardData({
success(res) {
self.showToast(i18n.t('shopxo-uniapp.app.r5ts62'), 'success');
},
});
},
});
} else {
this.showToast(i18n.t('shopxo-uniapp.app.r539kf'));
}
},
// 图片预览
image_show_event(e, urls = null) {
var value = e.currentTarget.dataset.value || null;
if (value != null) {
uni.previewImage({
current: value,
urls: urls || [value],
});
} else {
this.showToast(i18n.t('shopxo-uniapp.app.qm8548'));
}
},
// 静态文件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/' + type + '/images/';
} else {
// 根据配置的静态url地址+主题标识+参数类型组合远程静态文件地址
return this.data.static_url + 'static/app/' + this.get_theme_value() + '/' + type + '/';
}
},
// rpx转px
rpx_to_px(value) {
return (value || 0) == 0 ? 0 : uni.upx2px(value * 2);
},
// px转rpx
px_to_rpx(value) {
const new_value = value * 2 || 0;
// 200 为 100px 的值,后面的两个 100 为计算比例使用
var rpx = new_value / (uni.upx2px(value) / value);
// 验证上面rpx的值
return uni.upx2px(rpx);
},
// 是否pc
is_pc() {
var arr = ['macos', 'windows'];
return arr.indexOf(uni.getSystemInfoSync().platform) != -1;
},
// 终端类型
application_client() {
var type = '';
// #ifdef APP
type = 'app';
// #endif
// #ifdef H5
type = 'h5';
// #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 MP-KUAISHOU
value = 'kuaishou';
// #endif
// #ifdef H5
value = 'h5';
// #endif
// #ifdef APP
value = this.get_system_info('platform', null, true);
// #endif
return value;
},
// app客户端品牌
application_client_brand(e) {
var value = this.get_system_info('brand', null, true);
return (value === null) ? '' : value.toLowerCase();
},
// 授权验证
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 || i18n.t('shopxo-uniapp.app.gbiac6'));
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 > 960) {
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;
},
// 获取当前页面地址
// is_whole 完整地址(?后面的参数)
get_page_url(is_whole = true) {
var url = this.current_page();
// #ifdef APP
url = this.page_url_protocol(url);
// #endif
// #ifdef H5
url = window.location.href;
// #endif
if (is_whole == false) {
var temp = url.split('?');
url = temp[0];
}
return url;
},
// url协议地址处理
page_url_protocol(url) {
if ((url || null) != null && !this.is_url(url)) {
// 拼接H5地址
var host = this.get_config('config.common_app_h5_url', '');
// #ifdef H5
if(host == '') {
// H5模式下、未指定H5地址则获取当前host
host = window.location.href.split('#')[0]+'#/';
}
// #endif
// 处理中间拼接的斜杠是否重复
url = (host + url).replace('#//', '#/');
}
return url;
},
// 是否微信环境
is_weixin_env() {
var agent = navigator.userAgent.toLowerCase();
if (agent.match(/MicroMessenger/i) == 'micromessenger') {
return true;
}
return false;
},
// 用户微信webopenid是否存在
is_user_weixin_web_openid(order_ids, payment_id = 0, page = null) {
// 微信环境判断是否已有web_openid、不存在则跳转到插件进行授权
if (this.is_weixin_env()) {
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: i18n.t('common.processing_in_text'),
});
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(i18n.t('common.internet_error_tips'));
},
});
return true;
} else {
uni.setStorageSync(this.data.cache_page_pay_key, {
order_ids: typeof order_ids == 'array' ? order_ids.join(',') : order_ids,
payment_id: payment_id,
});
var page_url = (page || null) == null ? this.get_page_url() : this.page_url_protocol(page);
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;
},
// app标题
get_application_title() {
var value = null;
// 根据终端类型获取对应数据
var type = this.application_client_type() || null;
if (type !== null) {
value = this.get_config('config.common_app_mini_' + type + '_title') || null;
}
// 获取公共数据
if (value === null) {
value = this.get_config('config.home_site_name', this.data.application_title);
}
return value;
},
// app描述
get_application_describe() {
var value = null;
// 根据终端类型获取对应数据
var type = this.application_client_type() || null;
if (type !== null) {
value = this.get_config('config.common_app_mini_' + type + '_describe') || null;
}
// 商店介绍
if (type !== null) {
value = this.get_config('config.common_customer_store_describe') || null;
}
// 获取公共数据
if (value === null) {
value = this.data.application_describe;
}
return value;
},
// applogo
get_application_logo() {
var logo = this.data.application_logo || null;
if (logo == null) {
logo = this.get_config('config.home_site_logo_app') || this.get_config('config.home_site_logo_wap');
}
return logo;
},
// 正方形logo
get_application_logo_square() {
return this.get_config('config.home_site_logo_square');
},
// 分享内容处理
share_content_handle(data) {
// 获取插件配置信息
var share_config = this.get_config('plugins_base.share.data') || {};
var result = {
title: data.title || share_config.title || this.get_application_title(),
desc: data.desc || share_config.desc || this.get_application_describe(),
path: data.path || this.app_tabbar_pages()[0],
query: this.share_query_handle(data.query || ''),
img: data.img || share_config.pic || this.get_application_logo_square(),
};
result['url'] = this.get_page_url();
// #ifdef H5 || APP
// 是有效的url地址则通过#号分割处理参数
if(this.is_url(result['url'])) {
result['url'] = this.page_url_protocol(result.url.split('#')[0] + '#' + ((result.path || null) != null && 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;
},
// 是否朋友圈单页访问提示
is_single_page_check() {
if (this.is_current_single_page() == 1) {
this.showToast(i18n.t('shopxo-uniapp.app.3eqv71'));
return false;
}
return true;
},
// 调用页面方法
get_page_object(page = null) {
var pages = getCurrentPages();
if(page == null) {
return pages[pages.length - 1];
} else {
var result = [];
for (var i = 0; i < pages.length; i++) {
if (pages[i]['route'] == page) {
result.push(pages[i]);
}
}
return result;
}
},
// 当前页面地址
// is_whole 完整地址(?后面的参数)
current_page(is_whole = true) {
// 来源地址、拼接当前小程序页面
var pages = getCurrentPages();
var page = pages[pages.length - 1];
var url = this.page_url_handle(page);
if (is_whole == false) {
var temp = url.split('?');
url = temp[0];
}
return url;
},
// 上一页页面地址
prev_page() {
var value = null;
var pages = getCurrentPages();
var length = pages.length;
if (length > 1) {
value = this.page_url_handle(pages[length - 2]);
}
return value;
},
// 返回上一页、则回到shouy
page_back_prev_event() {
var prev_page = this.prev_page();
if (prev_page == null) {
this.url_open(this.app_tabbar_pages()[0]);
} else {
uni.navigateBack();
}
},
// 页面地址处理
page_url_handle(page) {
if ((page || null) == null) {
return '';
}
// 直接获取页面全的路径地址
if((page.$page || null) != null && (page.$page.fullPath || null) != null) {
var path = page.$page.fullPath;
return path.substr(0, 1) == '/' ? path.substr(1) : path;
}
// 拼接地址和参数
var route = page.route;
var options = page.options || {};
var query = '';
if (JSON.stringify(options) != '{}') {
for (var i in options) {
query += '&' + i + '=' + options[i];
}
}
if ((query || null) != null) {
route += '?' + query.substr(1);
}
return route;
},
// 进入客服
chat_entry_handle(url) {
if ((url || null) == null) {
this.showToast(i18n.t('shopxo-uniapp.app.08cg8y'));
} else {
// 拼接基础参数
url = this.request_params_handle(url);
// 拼接当前页面地址
var route = this.current_page();
url += '&source=' + encodeURIComponent(base64.encode(route).replace(new RegExp(/=/g), ''));
// 打开webview
this.open_web_view(url);
}
},
// 用户自动登录处理
user_auto_login_handle() {
// #ifdef H5
var user = this.get_user_cache_info();
if (user == null) {
var params = this.get_launch_cache_info() || {};
var config = this.get_config('plugins_base.thirdpartylogin.data') || null;
var data = this.get_config('plugins_thirdpartylogin_data') || null;
var url = null;
// 是否微信环境
if ((params.thirdpartylogin || null) == null && config != null && data != null && this.is_weixin_env()) {
var is_auto = config.weixin_is_env_auto_login || 0;
var weixin = data.weixin || null;
if (is_auto != 0 && weixin != null) {
url = weixin.login_url;
}
}
// 存在登录url则跳转登录
if (url != null) {
// 上一个页面记录
var page = this.current_page();
if (page != null) {
uni.setStorageSync(this.data.cache_prev_page_key, page);
}
// 跳转登录
window.location.href = url;
}
}
// #endif
},
// 清除用户缓存
remove_user_cache_event(is_remove_user = true) {
// 当前平台
var client_value = this.application_client();
// 是否清除用户登录信息
if(is_remove_user) {
// 用户登录缓存
uni.removeStorageSync(this.data.cache_user_login_key);
// 用户信息缓存
uni.removeStorageSync(this.data.cache_user_info_key);
}
// 未登录提示缓存记录
uni.removeStorageSync(this.data.cache_user_no_login_page_status_data_key);
// 用户基础资料提示间隔key
uni.removeStorageSync(this.data.cache_user_base_personal_interval_time_key);
// app更新提示缓存记录key
uni.removeStorageSync(this.data.cache_app_update_tips_interval_time_key);
// app评分提示缓存记录key
uni.removeStorageSync(this.data.cache_app_star_tips_interval_time_key);
// 非小程序则两秒后回到首页
this.showToast(i18n.t('shopxo-uniapp.app.'+((client_value == 'mp' || !is_remove_user) ? '0gwt7z' : '87yghj')), 'success');
},
// 是否站点变灰
is_app_mourning() {
var is_app = parseInt(this.get_config('plugins_base.mourning.data.is_app', 0));
if (is_app == 1) {
// 当前时间戳
var time_current = Date.parse(new Date());
// 开始时间
var time_start = this.get_config('plugins_base.mourning.data.time_start') || null;
if (time_start != null) {
if (Date.parse(new Date(time_start)) > time_current) {
return false;
}
}
// 结束时间
var time_end = this.get_config('plugins_base.mourning.data.time_end') || null;
if (time_end != null) {
if (Date.parse(new Date(time_end)) < time_current) {
return false;
}
}
return true;
}
return false;
},
// 价格符号
currency_symbol() {
return this.get_config('currency_symbol') || this.data.currency_symbol;
},
// 位置权限校验
get_location_check(type, object, method) {
// #ifdef MP-WEIXIN || MP-BAIDU || MP-TOUTIAO || MP-QQ
var self = this;
uni.getSetting({
success(res) {
if (!res.authSetting[type]) {
uni.authorize({
scope: type,
success(res) {
if (typeof object === 'object' && (method || null) != null) {
object[method](1);
}
},
fail: (res) => {
if (typeof object === 'object' && (method || null) != null) {
object[method](0);
}
},
});
} else {
if (typeof object === 'object' && (method || null) != null) {
object[method](1);
}
}
},
fail: (res) => {
self.showToast(i18n.t('shopxo-uniapp.app.di6v5t'));
if (typeof object === 'object' && (method || null) != null) {
object[method](0);
}
},
});
// #endif
// #ifdef MP-ALIPAY || H5 || APP
if (typeof object === 'object' && (method || null) != null) {
object[method](1);
}
// #endif
// #ifdef MP-KUAISHOU
self.showToast(i18n.t('shopxo-uniapp.app.nu5058'));
if (typeof object === 'object' && (method || null) != null) {
object[method](0);
}
// #endif
},
// 启动位置监听0 打开位置实时监听、1小程序后台运行也监听仅微信、快手小程序支持
start_location_update(type = 0, object, method) {
// 非微信和快手小程序type=1则赋值为0
// #ifndef MP-WEIXIN || MP-KUAISHOU
if (type == 1) {
type = 0;
}
// #endif
// 如果页面已存在位置调用则不重复调用
var page = this.current_page(false);
var temp_location = this.data.location_update_page_temp_record_data;
if (temp_location.indexOf(page) == -1) {
// 根据类型调用api
if (type == 1) {
// 开始监听实时地理位置信息变化事件,小程序进入前后台时均接收实时地理位置信息
// 这个方法仅微信和快手小程序支持
// #ifdef MP-WEIXIN || MP-KUAISHOU
uni.startLocationUpdateBackground({
success: (res) => {
// 增加页面记录
temp_location.push(page);
this.data.location_update_page_temp_record_data = temp_location;
// 调用位置监听方法
this.start_location_update_change(object, method);
},
fail: (res) => {
if (typeof object === 'object' && (method || null) != null) {
object[method]({
status: 0,
msg: res.errMsg,
});
}
},
});
// #endif
} else {
// 打开位置监听
uni.startLocationUpdate({
success: (res) => {
// 增加页面记录
temp_location.push(page);
this.data.location_update_page_temp_record_data = temp_location;
// 调用位置监听方法
this.start_location_update_change(object, method);
},
fail: (res) => {
if (typeof object === 'object' && (method || null) != null) {
object[method]({
status: 0,
msg: res.errMsg,
});
}
},
});
}
}
},
// 位置监听改变
start_location_update_change(object, method) {
uni.onLocationChange((res) => {
if (typeof object === 'object' && (method || null) != null) {
object[method]({
status: 1,
lng: res.longitude,
lat: res.latitude,
data: res,
});
}
});
},
// 网络状态检查处理
network_type_handle(object, method, params = {}) {
// 如果页面已存在位置调用则不重复调用
var page = this.current_page(false);
var temp_network = this.data.network_type_page_record_timer || {};
var temp = temp_network[page] || null;
if (temp == null) {
var self = this;
temp_network[page] = {
object: object,
method: method,
params: params,
};
temp_network[page]['timer'] = setInterval(function () {
uni.getNetworkType({
success: function (res) {
if (res.networkType != 'none' && (temp_network[page] || null) != null) {
// 已初始化则清除定时任务
if ((temp_network[page]['timer'] || null) != null) {
clearInterval(temp_network[page]['timer']);
}
var pv = temp_network[page];
delete temp_network[page];
self.data.network_type_page_record_timer = temp_network;
// 回调页面
if (typeof pv.object === 'object' && (pv.method || null) != null) {
pv.object[pv.method]({ ...(pv.params || {}), ...{ loading: 1 } });
}
}
},
});
}, 500);
this.data.network_type_page_record_timer = temp_network;
}
},
// 获取主题色值
// is_light 是否获取浅主色false, true
get_theme_color(theme, is_light = false) {
let color_obj = {
// 主色
red: '#ff0036', // 红色
yellow: '#f6c133', // 黄色
black: '#333333', // 黑色
blue: '#1677ff', // 蓝色
green: '#20a53a', // 绿色
orange: '#fe6f04', // 橙色
brown: '#8B4513', // 棕色
purple: '#623cec', // 紫色
// 浅主色
red_light: '#ffdbe2', // 红色
yellow_light: '#ffebd2', // 黄色
black_light: '#dcdcdc', // 黑色
blue_light: '#d1e4ff', // 蓝色
green_light: '#cce8d2', // 绿色
orange_light: '#fde4d1', // 橙色
brown_light: '#eadcd2', // 棕色
purple_light: '#d6cbfb', // 紫色
};
// 当前主题
if ((theme || null) == null) {
theme = this.get_theme_value();
}
if (is_light) {
theme += '_light';
}
return color_obj[theme];
},
// 获取主题页面标识
get_theme_value_view() {
return 'theme-' + this.get_theme_value();
},
// 获取主题
get_theme_value() {
// 主题类型 主题颜色
// 红色 red #ff0036
// 黄色 yellow #f6c133
// 黑色 black #333333
// 绿色 green #20a53a
// 橙色 orange #fe6f04
// 蓝色 blue #1677ff
// 棕色 brown #8B4513
// 紫色 purple #623cec
return uni.getStorageSync('theme') || this.data.default_theme;
},
// 切换主题
set_theme_value(value) {
// 设置主题缓存
uni.setStorageSync('theme', value || this.data.default_theme);
},
// 底部菜单设置
set_tabbar(theme) {
if(this.data.is_use_native_tabbar == 1) {
// 当前主题
if ((theme || null) == null) {
theme = this.get_theme_value();
}
// 整体样式
uni.setTabBarStyle({
selectedColor: this.get_theme_color(theme),
color: '#333',
backgroundColor: '#fff',
borderStyle: 'black'
});
// 菜单
uni.setTabBarItem({
index: 0,
iconPath: 'static/images/common/tabbar/home.png',
selectedIconPath: 'static/images/' + theme + '/tabbar/home.png',
text: i18n.t('common.home'),
});
uni.setTabBarItem({
index: 1,
iconPath: 'static/images/common/tabbar/category.png',
selectedIconPath: 'static/images/' + theme + '/tabbar/category.png',
text: i18n.t('common.category'),
});
uni.setTabBarItem({
index: 2,
iconPath: 'static/images/common/tabbar/cart.png',
selectedIconPath: 'static/images/' + theme + '/tabbar/cart.png',
text: i18n.t('common.cart'),
});
uni.setTabBarItem({
index: 3,
iconPath: 'static/images/common/tabbar/user.png',
selectedIconPath: 'static/images/' + theme + '/tabbar/user.png',
text: i18n.t('common.my'),
});
}
},
// 数组分组
group_arry(arry, sub_group_length) {
let index = 0;
let new_arry = [];
if (arry.length > sub_group_length) {
while (index < arry.length) {
new_arry.push(arry.slice(index, (index += sub_group_length)));
}
} else {
new_arry = [arry];
}
return new_arry;
},
// 数组分组
group_arry(arry, sub_group_length) {
let index = 0;
let new_arry = [];
if (arry.length > sub_group_length) {
while (index < arry.length) {
new_arry.push(arry.slice(index, (index += sub_group_length)));
}
} else {
new_arry = [arry];
}
return new_arry;
},
// 颜色转rgba hexValue 色值 alpha透明度
hex_rgba(hexValue, alpha) {
const rgx = /^#?([a-f\d])([a-f\d])([a-f\d])$/i;
const hex = hexValue.replace(rgx, (m, r, g, b) => r + r + g + g + b + b);
const rgb = /^#?([a-f\d]{2})([a-f\d]{2})([a-f\d]{2})$/i.exec(hex);
if (!rgb) {
return hexValue;
}
const r = parseInt(rgb[1], 16),
g = parseInt(rgb[2], 16),
b = parseInt(rgb[3], 16);
return `rgba(${r},${g},${b},${alpha})`;
},
// 判断数组内是否含有相同字段
some_arry(arr, val, params) {
return arr.some(function (arrVal) {
if (params) {
return val === arrVal[params];
} else {
return val === arrVal;
}
});
},
// 更新当前url参数
// query:[{key:'',value:''}]
update_query_string_parameter(query = []) {
// #ifdef H5
let url = window.location.href;
// 判断没有参数时
if (query.length < 1) {
//向当前url添加参数没有历史记录
window.history.replaceState({ path: url.split('?')[0] }, '', url.split('?')[0]);
} else {
query.forEach((item) => {
let re = new RegExp('([?&])' + item.key + '=.*?(&|$)', 'i');
let separator = url.indexOf('?') !== -1 ? '&' : '?';
if (url.match(re)) {
url = url.replace(re, '$1' + item.key + '=' + item.value + '$2');
} else {
url += separator + item.key + '=' + item.value;
}
});
//向当前url添加参数没有历史记录
window.history.replaceState({ path: url }, '', url);
}
// #endif
},
// 计算文本宽度
string_width(value, max = null) {
var width = 0;
var reg = /^[A-Za-z0-0]+$/;
var arr = value.split('');
for (var i in arr) {
width += reg.test(arr[i]) ? 34 : 50;
}
return max !== null && width > max ? max : width;
},
// weburl地址id值匹配
web_url_value_mate(url, rules) {
// 匹配成功
var status = 0;
// 存在数据值
var value = null;
for (var i in rules) {
if (url.indexOf(rules[i]) != -1) {
var temp = url.split(rules[i]);
if (temp.length > 1) {
temp = temp[1].split('.');
if (temp.length > 0 && (temp[0] || null) != null) {
value = temp[0];
}
}
status = 1;
break;
}
}
return { status: status, value: value };
},
// 打开权限管理中心
open_setting_event() {
// #ifdef MP
uni.openSetting();
// #endif
// #ifdef APP
uni.openAppAuthorizeSetting();
// #endif
},
// 扫码解析处理
scan_handle() {
// #ifdef H5
this.showToast(i18n.t('common.not_supported_scan_tips'));
// #endif
// #ifndef H5
var self = this;
uni.scanCode({
success: function (res) {
if (res.result !== '') {
var value = res.result;
// 是否为url地址
if (self.is_url(value)) {
// 是否为商品地址
var goods_arr = ['/goods-', '/goods/index/id/', '=goods/index/id/'];
var goods_ret = self.web_url_value_mate(value, goods_arr);
if (goods_ret.status == 1 && goods_ret.value != null) {
uni.navigateTo({
url: '/pages/goods-detail/goods-detail?id=' + goods_ret.value,
});
return;
}
// 是否为多商户店铺详情地址
var shop_arr = ['/shop-index-detail-', '/plugins/index/pluginsname/shop/pluginscontrol/index/pluginsaction/detail/id/', '=plugins/index/pluginsname/shop/pluginscontrol/index/pluginsaction/detail/id/'];
var shop_ret = self.web_url_value_mate(value, shop_arr);
if (shop_ret.status == 1 && shop_ret.value != null) {
uni.navigateTo({
url: '/pages/plugins/shop/detail/detail?id=' + shop_ret.value,
});
return;
}
// 是否为扫码收款
var scanpay_arr = ['/scanpay-index-index', 'plugins/index/pluginsname/scanpay/pluginscontrol/index/pluginsaction/index', 'plugins/index/pluginsname/scanpay', '/scanpay'];
var scanpay_ret = self.web_url_value_mate(value, scanpay_arr);
if (scanpay_ret.status == 1) {
var url = '/pages/plugins/scanpay/index/index';
if (scanpay_ret.value != null) {
var first = scanpay_ret.value.substr(0, 1);
if (first == '-') {
var temp = scanpay_ret.value.substr(1).split('/');
if (temp.length == 3) {
url += '?id=' + temp[0] + '&type=' + temp[2];
}
} else if (first == '/') {
var temp = scanpay_ret.value.substr(1).split('/');
if (temp.length == 4) {
url += '?id=' + temp[1] + '&type=' + temp[3];
}
}
}
uni.navigateTo({
url: url,
});
return;
}
// 是否为扫码登录
var thirdpartylogin_arr = ['/thirdpartylogin-scan-index-', 'plugins/index/pluginsname/thirdpartylogin/pluginscontrol/scan/pluginsaction/index/id/'];
var thirdpartylogin_ret = self.web_url_value_mate(value, thirdpartylogin_arr);
if (thirdpartylogin_ret.status == 1 && thirdpartylogin_ret.value != null) {
uni.navigateTo({
url: '/pages/plugins/thirdpartylogin/index/index?id=' + thirdpartylogin_ret.value,
});
return;
}
// 默认打开url
self.open_web_view(value);
} else {
self.url_open(value);
}
}
},
});
// #endif
},
// 获取当前语言
get_language_value() {
return uni.getLocale() || this.data.default_language;
},
// 选择用户地理位置
choose_user_location_event() {
// 存在数据则改变状态值
var key = this.data.cache_userlocation_key;
var result = uni.getStorageSync(key) || null;
if(result != null) {
result['status'] = 2;
uni.setStorageSync(key, result);
}
// 进入页面选择位置
uni.navigateTo({
url: '/pages/common/open-setting-location/open-setting-location',
});
},
// 清除位置缓存信息
choice_user_location_remove() {
uni.removeStorageSync(this.data.cache_userlocation_key);
},
// 地址信息初始化
choice_user_location_init() {
// status 0未选择1已选择2选择中3选择失败
var result = uni.getStorageSync(this.data.cache_userlocation_key) || null;
var user_location = { status: 0 };
if (result != null) {
user_location = {
...user_location,
...{
name: result.name || null,
address: result.address || null,
lat: result.lat || null,
lng: result.lng || null,
status: result.status || 1,
},
};
}
// 默认名称
var default_name = i18n.t('shopxo-uniapp.app.4v6q86');
// 位置选择失败的状态,名称和默认名称不一致则认为是成功的
if(user_location.status == 3 && user_location.name != default_name) {
user_location.status = 1;
}
user_location['text'] = user_location.name || user_location.address || default_name;
return user_location;
},
// 获取用户当前位置
// object 回调对象
// method 回调方法
// is_force 强制获取位置
get_user_location(object = null, method = null, is_force = false) {
if(this.data.get_user_location_status == 1 || is_force) {
var cache_key = this.data.cache_userlocation_key;
var result = uni.getStorageSync(cache_key) || null;
if(result == null) {
// 当前对象
var self = this;
// 当前平台
var client_value = self.application_client_type();
// 微信隐私状态
var is_weixin_privacy = false;
// 是否有网络
var is_network = false;
// 定时验证并获取位置权限
self.data.get_user_location_timer = setInterval(function () {
// 微信环境、协议验证处理
// #ifdef MP-WEIXIN
uni.getPrivacySetting({
success: (res) => {
if (!res.needAuthorization) {
is_weixin_privacy = true;
}
},
});
// #endif
// app下先要网络
// #ifdef APP
uni.getNetworkType({
success: function (res) {
if (res.networkType != 'none') {
is_network = true;
}
},
});
// #endif
// 是否可以读取位置权限
var status = true;
// 微信环境、必须先同意隐私权限后再弹出获取用户位置权限
if(client_value == 'weixin' && !is_weixin_privacy) {
status = false;
}
// app环境、必须先初始化完成有网络后再弹出获取用户位置权限
if((client_value == 'ios' || client_value == 'android') && !is_network) {
status = false;
}
if(status) {
uni.getLocation({
type: 'wgs84',
success: function (res) {
var address = {
name: i18n.t('shopxo-uniapp.app.tghyu3'),
address: '',
lat: res.latitude || null,
lng: res.longitude || null,
status: 1,
};
uni.setStorageSync(cache_key, address);
if (typeof object === 'object' && (method || null) != null) {
object[method](address);
}
}
});
clearInterval(self.data.get_user_location_timer);
}
}, 500);
}
}
},
// 清除定时任务
clear_interval_handle() {
// 清除初始化公共数据回调方法定时任务
clearInterval(this.data.common_data_init_back_timer);
// 清除网络状态检查方法定时任务
var network = this.data.network_type_page_record_timer || null;
if (network != null) {
for (var i in network) {
if ((network[i]['timer'] || null) != null) {
clearInterval(network[i]['timer']);
}
}
}
this.data.network_type_page_record_timer = null;
// 清除弹出位置权限提示定时任务
clearInterval(this.data.get_user_location_timer);
},
// 商品访问数据存储缓存
goods_data_cache_handle(goods_id, goods_data = null) {
var key = this.data.cache_goods_data_key;
if((goods_data || null) == null) {
var res = uni.getStorageSync(key) || null;
return (res != null && res.id == goods_id) ? res : null;
} else {
uni.setStorageSync(key, goods_data);
}
},
// 页面导航标题处理
set_pages_navigation_bar_title() {
// 标题
var value = null;
// 当前平台
var client_value = this.application_client_type();
// 当前页面地址
var url = this.current_page(false);
// 支付宝平台以下条件不增加标题
if(client_value == 'alipay') {
// 自定义头页面
var pages_always = [
'pages/plugins/realstore/detail/detail',
'pages/plugins/seckill/index/index',
'pages/plugins/points/index/index',
'pages/plugins/coupon/index/index',
'pages/plugins/signin/detail/detail',
'pages/plugins/membershiplevelvip/index/index',
'pages/plugins/ask/index/index',
];
// 当前tab页面
if(this.is_system_tabbar_pages('/'+url) != -1 || pages_always.indexOf(url) != -1) {
value = '';
}
}
// 还没有标题则根据页面自动处理
if(value === null) {
// 解析处理key
var arr = url.split('/');
arr = arr.slice(1);
arr = arr.slice(0, -1);
var key = 'pages.'+arr.join('-');
// 读取语言
var value = i18n.t(key);
// 首页则读取当前应用名称
if(this.app_tabbar_pages()[0] == '/'+url) {
value = this.get_application_title();
}
}
// 设置标题
uni.setNavigationBarTitle({
title: value || ''
});
},
// 设置导航背景色和颜色
set_navigation_bar_color(is_white = null) {
var color = '#000000';
var bg_color = '#ffffff';
var arr = [
'pages/index/index',
];
var page = this.current_page(false);
if(is_white === true || (is_white === null && arr.indexOf(page) != -1)) {
color = '#ffffff';
bg_color = '#000000';
}
uni.setNavigationBarColor({
frontColor: color,
backgroundColor: bg_color,
});
},
// 底部浮动按钮样式处理
bottom_fixed_style_handle() {
var obj = this.get_page_object();
if(obj != null) {
// undefined值表示未定义则不处理
var temp = obj.bottom_fixed_style == undefined ? ((obj.data || null) == null ? undefined : obj.data.bottom_fixed_style) : '';
if(temp !== undefined && this.is_tabbar_pages()) {
obj.$vm.setData(
{
bottom_fixed_style: 'bottom:'+(((this.app_system_tabbar_height_value()-8)*2)+20)+'rpx'
});
}
}
},
// 页面加载事件处理
page_event_onload_handle(params) {
// 获取用户当前位置
this.get_user_location();
},
// 页面展示事件处理
page_event_onshow_handle() {
//隐藏系统tabbar
this.system_hide_tabbar();
// 底部浮动按钮样式处理
this.bottom_fixed_style_handle();
// 页面顶部导航标题设置
this.set_pages_navigation_bar_title();
// 设置导航背景色和颜色
this.set_navigation_bar_color();
},
},
// 初始化完成时触发(全局只触发一次)
onLaunch(params) {
//隐藏系统tabbar
this.globalData.system_hide_tabbar();
},
// 启动,或从后台进入前台显示
onShow(params) {
//隐藏系统tabbar
this.globalData.system_hide_tabbar();
// 公共数据初始化
this.globalData.init_config();
// 设置设备信息
this.globalData.set_system_info();
// 参数处理+缓存
this.globalData.set_launch_cache_info(params);
// 场景值
this.globalData.set_scene_data(params);
},
// 从前台进入后台
onHide() {
this.globalData.clear_interval_handle();
},
// 监听应用退出
onExit() {
this.globalData.clear_interval_handle();
},
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.css';
@import './common/css/animation.css';
</style>