import * as db from './db.js' //引入common
import * as api from './api.js'
import {
baseUrl,
cndUrl,
bgClass,
title,
baseLogo,
} from './config.js'
import htmlParser from '@/common/html-parser' //引入htmlParser
/**
* 跳转登陆页面
*/
function toLogin() {
uni.showToast({
title: '请登录...',
icon: 'loading',
duration: 2000,
success: function(res) {
var pages = getCurrentPages() // 获取栈实例
let currentRoute = pages[pages.length - 1].route; // 获取当前页面路由
//console.log("路由当前页面路径"+currentRoute)
let currentPage = pages[pages.length - 1]['$page']['fullPath'] //当前页面路径(带参数)
// console.log(currentPage)
// #ifdef H5 || APP-PLUS
uni.navigateTo({
url: '/pages/user/login?redirect=' + escape(currentPage)
})
// #endif
// #ifdef MP-WEIXIN
uni.navigateTo({
url: '/pages/user/login?redirect=' + escape(currentPage),
animationType: 'pop-in',
animationDuration: 200
});
// #endif
}
})
}
/**
* 是否登陆,和绑定手机号,否则返回登录页
*/
function isLogin() {
let user = db.get('user');
//用户存在,不跳转,不存在直接跳转
if (user) {
if (user.id) {
// if(user.mobile==''){
// uni.navigateTo({
// url: '/pages/user/bind'
// })
// }
} else {
console.log("user: ", user);
db.del('user');
db.del('auth');
toLogin()
}
}
}
/**
* 无图标提示
* @param {String} msg 提示消息
* @param {Function} callback 回调函数
*/
function normalToShow(msg = '保存成功', callback = function() {}) {
uni.showToast({
title: msg,
icon: 'none',
duration: 2000,
});
setTimeout(function() {
callback();
}, 1000);
}
/**
* 成功提示
* @param {String} msg 提示消息
* @param {Function} callback 回调函数
*/
function successToShow(msg = '保存成功', callback = function() {}) {
uni.showToast({
title: msg,
icon: 'success',
duration: 2000,
});
setTimeout(function() {
callback();
}, 1500);
}
/**
* 失败提示
* @param {String} msg 提示消息
* @param {Function} callback 回调函数
*/
function errorToShow(msg = '操作失败', callback = function() {}) {
uni.showToast({
title: msg,
icon: 'none',
duration: 2000,
});
setTimeout(function() {
callback();
}, 2000);
}
/**
* 加载显示
* @param {String} msg 提示消息
*/
function loadToShow(msg = '加载中', icon = 'loading') {
uni.showToast({
title: msg,
icon: icon,
});
}
/**
* 加载隐藏
*/
function loadToHide() {
uni.hideToast();
}
/**
* 提示框
* @param {String} title 提示标题
* @param {String} content 提示内容
* @param {Function} callback 回调函数
* @param {Boolean} showCancel = [true|false] 显示关闭按钮
* @param {String} cancelText 关闭按钮文字
* @param {String} confirmText 确定按钮文字
* @example
* modelShow('提示','确认执行此操作吗?',()=>{},()=>{},true,'取消','确定')
*/
function modelShow(title = '提示', content = '确认执行此操作吗?', callback = () => {}, callback2 = () => {}, showCancel = true,
cancelText = '拒绝',
confirmText = '通过') {
uni.showModal({
title: title,
content: content,
showCancel: showCancel,
cancelText: cancelText,
confirmText: confirmText,
success: function(res) {
if (res.confirm) {
// 用户点击确定操作
setTimeout(() => {
callback()
}, 500)
} else if (res.cancel) {
// 用户取消操作
setTimeout(() => {
callback2()
}, 500)
}
}
});
}
/**
* 判断数组
* @param {Object} arr 数组
*/
function isArray(object) {
return object && typeof object === 'object'
}
/**
* 统一跳转
* @param {String} url 跳转链接
*/
function navigateTo(url) {
if (url == '')
return;
if (url.indexOf("/pages/index/index") >= 0 || url.indexOf("answer_pages/home/dashboard") >= 0 || url.indexOf(
"/pages/shouhu/shouhu") >= 0 || url.indexOf("/pages/feiyi/feiyi") >= 0 || url.indexOf(
"/pages/user/index") >= 0) {
uni.switchTab({
url: url,
animationType: 'pop-in',
animationDuration: 300
});
} else {
uni.navigateTo({
url: url,
animationType: 'pop-in',
animationDuration: 300
});
}
}
/**
* 关闭当前页面并跳转
* @param {String} url 跳转链接
*/
function redirectTo(url) {
uni.redirectTo({
url: url,
animationType: 'pop-in',
animationDuration: 300
})
}
/**
* 返回上一层的逻辑判断
* @param {num} delta 跳转上一层,或者几层
*/
function navigateBack(delta = 1) {
let pages = getCurrentPages(); //当前页
//console.log(pages);
//当有前一页的时候。
if (pages.length > 1) {
let page = pages[pages.length - 2]; //上个页面
// console.log(page.route);
if (page.route == "pages/index/index" || page.route == 'pages/index/homepage' || page.route ==
'pages/user/index' || page.route == 'pages/consult/index') {
uni.switchTab({
url: '/' + page.route
})
} else if (page.route == "pages/user/login") {
uni.switchTab({
url: '/pages/user/index'
})
} else if (page.route == "pages/user/register") {
uni.switchTab({
url: '/pages/user/user'
})
} else {
uni.navigateBack({
delta: delta
})
}
} else {
uni.switchTab({
url: '/pages/index/index'
})
}
}
/**
* 判断是否在微信浏览器
*/
function isWeiXinBrowser() {
// #ifdef H5
// window.navigator.userAgent属性包含了浏览器类型、版本、操作系统类型、浏览器引擎类型等信息,这个属性可以用来判断浏览器类型
let ua = window.navigator.userAgent.toLowerCase()
// 通过正则表达式匹配ua中是否含有MicroMessenger字符串
if (ua.match(/MicroMessenger/i) == 'micromessenger') {
return true
} else {
return false
}
// #endif
// #ifdef MP
return false;
// #endif
}
/**
* 加载cms列表
* @param {Array} data
*
*/
function cmsGetList(data, callback = function() {}) {
api.cmsGetList(data, res => {
if (res.code) {
res.data.list.forEach(function(ele, index) {
ele.ctime = timeToDate(ele.createtime);
if (ele.image.substring(0, 9) == '/uploads/') {
ele.image = cndUrl + ele.image
}
});
callback(res.data)
} else {
errorToShow(res.msg)
}
})
}
/**
* 加载cms详情
* @param {Array} data
*
*/
function cmsGetDetails(data, callback = function() {}) {
api.cmsGetDetails(data, res => {
//console.log(data)
if (res.code) {
res.data.content = htmlParser(res.data.content); // 设置资源cdn;
res.data.ctime = timeToDate(res.data.createtime);
if (res.data.image) {
if (res.data.image.substring(0, 9) == '/uploads/') {
res.data.image = cndUrl + res.data.image
}
}
callback(res.data)
} else {
modelShow(
'错误提示',
res.msg,
() => {
uni.navigateBack({})
},
false
);
}
})
}
/**
* 初始化页面
* @param {Function} callback 回调函数
* @param {String} route 页面路径/默认当前路径
*/
function initPages(callback = function() {}, route) {
if (!route) {
let pages = getCurrentPages();
let page = pages[pages.length - 1];
route = page.route
}
let init_data = db.get('init_' + route)
setTimeout(() => {
api.getInit({
route: route
}, res => {
// console.log(res);
if (res.code) {
res.data.slide.forEach(function(ele, index) {
if (ele.image.substring(0, 9) == '/uploads/') {
ele.image = cndUrl + ele.image
}
});
res.data.content.forEach(function(ele, index) {
ele.content = ele.content.replace(new RegExp(`style="width: 100%;`, 'g'),
'style="width: 100%;margin-top: -3px;') // 无缝连接图片;
ele.content = ele.content.replace(new RegExp(`src="/uploads`, 'g'),
'src="' + cndUrl + '/uploads')
ele.content = htmlParser(ele.content); // 设置资源cdn;
});
db.set('init_' + route, res.data)
callback(res.data)
}
});
}, 1000);
if (init_data) {
callback(init_data)
} else {
// loadToShow('初始化页面...');
}
}
/**
* 跳转链接
* @param {String} url 跳转链接
*/
function toUrl(url) {
if (url) {
var objExp = new RegExp(/http(s)?:\/\/([\w-]+\.)+[\w-]+(\/[\w- .\/?%&=]*)?/);
if (objExp.test(url) != true) {
// #ifdef APP-PLUS
url = baseUrl + url
// #endif
// #ifdef H5
url = baseUrl + url
// #endif
}
//console.log(url)
//return false
// #ifdef MP
uni.navigateTo({
url: url
})
// #endif
// #ifdef APP-PLUS
plus.runtime.openURL(url);
// #endif
// #ifdef H5
window.open(url);
// #endif
}
}
/**
* 保存登陆状态
* @param {Array} data 用户数据
*/
function saveLogin(data) {
db.set('auth', data.auth)
if (data.user.avatar.substring(0, 9) == '/uploads/') {
data.user.avatar = cndUrl + data.user.avatar
}
db.set('user', data.user)
}
/**
* 刷新用户
* @param {Function} callback 回调函数(用户数据)
* @example
* refreshUser((user)=>{_this.user = user})
*/
function refreshUser(callback = function() {}) {
let user = db.get('user');
if (user.id) {
api.refreshUser({}, res => {
if (res.code == 1) {
saveLogin(res.data)
callback(res.data)
} else {
db.del('user');
toLogin()
}
})
} else {
db.del('user');
db.del('auth');
toLogin()
}
}
/**
* 清理用户
* @param {String} page 清理后跳转页面
*/
function cleanUser(page) {
db.del('user')
db.del('auth')
if (page) {
redirectTo(page)
}
}
/**
* 字符串校验
* @param {String} str 字符串
* @param {String} model = [number|mobile|name|idcard|] 模式
* @example
* testString('17080057443','mobile')
* testString('17080057443','mobile')
*/
function testString(str, model = null) {
if (typeof(model) == 'number') {
if (str.length >= model) {
return true
}
} else {
switch (model) {
case null:
return false
break
case 'idcard':
return RegExp(/^[1-9]\d{5}(19|20)\d{2}((0[1-9])|(10|11|12))(([0-2][1-9])|10|20|30|31)\d{3}[0-9Xx]$/)
.test(str)
break
case 'mobile':
return RegExp(/^1[0-9]{10}$/).test(str)
break
case 'name':
return RegExp(/^[\u4E00-\u9FA5\uf900-\ufa2d·s]{2,20}$/).test(str)
break
default:
return false
break
}
}
return false
}
/**
* 时间戳转时差
* @param {String} date 时间戳
*/
function timeToDate(time) {
time = time * 1000
var interval = new Date().getTime() - time;
//计算出相差天数
var returnTime = "";
var days = Math.floor(interval / (24 * 3600 * 1000))
if (days == 0) {
//计算出小时数
var leaveTime = interval % (24 * 3600 * 1000) //计算天数后剩余的毫秒数
var hours = Math.floor(leaveTime / (3600 * 1000))
if (hours == 0) {
//计算相差分钟数
leaveTime = leaveTime % (3600 * 1000) //计算小时数后剩余的毫秒数
var minutes = Math.floor(leaveTime / (60 * 1000))
if (minutes == 0) {
//计算相差秒数
leaveTime = leaveTime % (60 * 1000) //计算分钟数后剩余的毫秒数
var seconds = Math.round(leaveTime / 1000)
return seconds + "秒前";
}
return minutes + "分钟前";
}
return hours + "小时前";
}
return days + "天前";
}
/**
* 基本信息
*/
function baseInfo() {
return {
bgClass: bgClass,
title: title,
baseLogo: baseLogo,
}
}
//校验邮箱格式
function checkEmail(email) {
return RegExp(/^([a-zA-Z0-9]+[_|\_|\.]?)*[a-zA-Z0-9]+@([a-zA-Z0-9]+[_|\_|\.]?)*[a-zA-Z0-9]+\.[a-zA-Z]{2,3}$/).test(
email);
}
//校验手机格式
function checkMobile(mobile) {
return RegExp(/^1[0-9]{10}$/).test(mobile);
}
/**
* 用户信息
*/
function userInfo() {
let user = db.get('auth')
if (user) {
return user
} else {
return false;
}
// return {
// bgClass: bgClass,
// title: title,
// baseLogo: baseLogo,
// }
}
/**
* 上传图片
* @param {Array} data 附带数据
* @param {Function} callback 回调函数
* @param {int} num 限制数量
* @param {String} type 类型
* @return {String} url
*/
function uploadImage(data = {}, callback = function() {}, num = 1, type) {
api.uploadImage(
'common/upload', data, (res) => {
if (res.code) {
if (res.data.url.substring(0, 9) == '/uploads/') {
res.data.url = cndUrl + res.data.url
}
callback(res.data.url)
} else {
errorToShow(res.msg)
}
}, type)
}
function formatRichText(html) {
let newContent = html.replace(/
]*>/gi, function(match, capture) {
match = match.replace(/style="[^"]+"/gi, '').replace(/style='[^']+'/gi, '');
match = match.replace(/width="[^"]+"/gi, '').replace(/width='[^']+'/gi, '');
match = match.replace(/height="[^"]+"/gi, '').replace(/height='[^']+'/gi, '');
return match;
});
newContent = newContent.replace(/style="[^"]+"/gi, function(match, capture) {
match = match.replace(/width:[^;]+;/gi, 'max-width:100%;').replace(/width:[^;]+;/gi, 'max-width:100%;');
return match;
});
newContent = newContent.replace(/
]*\/>/gi, '');
newContent = newContent.replace(/\![]()