小说小程序前端代码仓库(小程序)
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 

244 lines
5.0 KiB

/**
* 将数据转换为数组格式
* @param {any} data - 需要转换的数据
* @returns {Array} 转换后的数组
*/
function toArray(data) {
if (!data) return []
if (data instanceof Array){
return data
} else {
return [data]
}
}
/**
* 生成UUID
* @returns {string} 生成的UUID字符串
*/
function generateUUID() {
return 'xxxxxxxxxxxx4xxxyxxxxxxxxxxxxxxx'.replace(/[xy]/g, function(c) {
var r = Math.random() * 16 | 0,
v = c == 'x' ? r : (r & 0x3 | 0x8);
return v.toString(16);
});
}
/**
* 生成随机颜色
* @returns {string} 生成的十六进制颜色值
*/
function generateRandomColor() {
const letters = '0123456789ABCDEF';
let color = '#';
for (let i = 0; i < 6; i++) {
color += letters[Math.floor(Math.random() * 16)];
}
return color;
}
/**
* 生成浅色系的随机颜色
* @returns {string} 生成的RGB格式颜色值
*/
function generateLightRandomColor() {
const min = 150;
const range = 105;
const r = Math.floor(Math.random() * range + min);
const g = Math.floor(Math.random() * range + min);
const b = Math.floor(Math.random() * range + min);
const color = 'rgb(' + r + ',' + g + ',' + b + ')';
return color;
}
/**
* 表单数据验证
* @param {Object} data - 需要验证的表单数据
* @param {Object} msg - 验证失败时的提示信息
* @returns {boolean} 验证结果,true表示验证失败,false表示验证通过
*/
function verificationAll(data, msg){
if (!msg){
console.log(msg);
return false
}
if (!data){
uni.showToast({
title: '表单数据未填写',
icon: "none"
})
}
for (let key in msg) {
if (!data[key]) {
uni.showToast({
title: msg[key],
icon: "none"
})
return true
}
}
return false
}
/**
* 验证手机号是否合法
* @param {string} phone - 需要验证的手机号
* @returns {boolean} 验证结果,true表示合法,false表示不合法
*/
function verificationPhone(phone){
if(!/^(13[0-9]|14[01456879]|15[0-35-9]|16[2567]|17[0-8]|18[0-9]|19[0-35-9])\d{8}$/.test(phone)){
return false
}
return true
}
//获取url中参数的方法
/**
* 获取URL中指定参数的值
* @param {string} name - 参数名称
* @returns {string} 参数值,如果不存在则返回空字符串
*/
export function getHrefParams(name) {
var url = window.location.href;
try {
var cs = url.split('?')[1]; //获取?之后的参数字符串
var cs_arr = cs.split('&'); //参数字符串分割为数组
for (var i = 0; i < cs_arr.length; i++) { //遍历数组,拿到json对象
if (cs_arr[i].split('=')[0] == name) {
return cs_arr[i].split('=')[1];
}
}
return "";
} catch {
return "";
}
}
/**
* 深度合并两个对象,相同属性b会覆盖a
* @param {Object} a - 目标对象
* @param {Object} b - 源对象
* @returns {Object} 合并后的新对象
*/
export function deepMergeObject(a, b){
let data = JSON.parse(JSON.stringify(a))
function mergeObject(obj1, obj2){
for(let key in obj2){
if(typeof obj1[key] == 'object'){
obj1[key] = mergeObject(obj1[key], obj2[key])
}else{
obj1[key] = obj2[key]
}
}
return obj1
}
return mergeObject(data, b)
}
/**
* 复制文本到剪贴板
* @param {string} content - 要复制的内容
*/
export function copyText(content) {
uni.setClipboardData({
data: content,
success: () => {
uni.showToast({
title: '复制成功',
icon: 'none'
})
}
})
}
/**
* 将字符串中的文本格式化为HTML
* @param {string} str - 需要格式化的字符串
* @returns {string} 格式化后的HTML字符串
*/
export function stringFormatHtml(str){
return str && str.replace(/\n/gi, '<br>')
.replace(/ /gi, ' ')
}
/**
* 处理页面导航参数
* @param {string|Object} url - 页面路径或导航参数对象
* @returns {Object} 处理后的导航参数对象
*/
function params(url){
if(typeof url == 'object'){
return url
}
let data = {
url
}
if(!data.url.includes('/pages')){
data.url = '/pages' + data.url
}
return data
}
/**
* 页面导航方法
* @param {...any} args - 导航参数
*/
export function navigateTo(...args){
uni.navigateTo(params(...args))
}
/**
* 返回上一页
* @param {number} num - 返回的页面数,默认为-1
*/
export function navigateBack(num = -1){
uni.navigateBack(num)
}
/**
* 重定向到指定页面
* @param {...any} args - 导航参数
*/
export function redirectTo(...args){
uni.redirectTo(params(...args))
}
/**
* 登录跳转函数,防止短时间内多次调用
* @returns {Function} 节流处理后的登录跳转函数
*/
export const toLogin = function(){
let time = 0
return () => {
if(new Date().getTime() - time < 1000){
return
}
time = new Date().getTime()
uni.navigateTo({
url: '/pages_order/auth/wxLogin'
})
}
}()
export default {
toArray,
generateUUID,
verificationAll,
generateRandomColor,
generateLightRandomColor,
verificationPhone,
getHrefParams,
deepMergeObject,
navigateTo,
navigateBack,
redirectTo,
copyText,
stringFormatHtml,
toLogin
}