Files

260 lines
7.3 KiB
JavaScript
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.

export function formatDate(date, format) {
const year = date.getFullYear().toString();
const month = (date.getMonth() + 1).toString().padStart(2, '0');
const day = date.getDate().toString().padStart(2, '0');
const hours = date.getHours().toString().padStart(2, '0');
const minutes = date.getMinutes().toString().padStart(2, '0');
const seconds = date.getSeconds().toString().padStart(2, '0');
return format
.replace(/yyyy/g, year)
.replace(/MM/g, month)
.replace(/dd/g, day)
.replace(/HH/g, hours)
.replace(/mm/g, minutes)
.replace(/ss/g, seconds);
}
export function formatRemainTime(time) {
let remainTimeStr = ''
const seconds = Math.floor(time / 1000)
const days = Math.floor(seconds / (3600 * 24))
const hours = Math.floor((seconds % (3600 * 24)) / 3600)
// const minutes = Math.floor((seconds % 3600) / 60)
// const remainingSeconds = seconds % 60
if (days > 0) {
remainTimeStr += `${ days }`
}
if (hours > 0) {
remainTimeStr += `${ hours }小时`
}
return `还剩${ remainTimeStr }自动确认`
}
/**
* 创建一个滚动动画
* @param scrollStart 动画开始滚动位置
* @param scrollEnd 动画结束滚动位置
* @param valueStart 动画值开始值
* @param valueEnd 动画值结束值
*/
export function createAnimation(scrollStart, scrollEnd, valueStart, valueEnd) {
return function (nowScroll) {
if (nowScroll <= scrollStart) {
return valueStart
}
if (nowScroll >= scrollEnd) {
return valueEnd
}
// (nowScroll - scrollStart) / (scrollEnd - scrollStart) 当前滚动在咕哝的那个起始值中的比例
// 用value的总值 * 比例 = value的值
// 由于valueStart可能不是0 所以需要加上valueStart
return ((valueEnd - valueStart) * (nowScroll - scrollStart) / (scrollEnd - scrollStart)) + valueStart
}
}
/**
* 从数组中找到比较项并且删除
* @param originalList 原数组
* @param compareItem 比较项目
* @param field 比较字段
*/
export function compareToDelListItem(originalList, compareItem, field) {
const delIndex = originalList.findIndex((item) => item[field] === compareItem[field]);
if (delIndex >= 0) {
originalList.splice(delIndex, 1);
return true
}
return false
}
/**
* 过滤File类型
* @param file
* @param excludeTypeArr 需要排除的类型
*/
export function filterFileType(file, excludeTypeArr) {
let suffix, name
// #ifndef MP-WEIXIN
name = file.name
suffix = name.slice(name.lastIndexOf('.') + 1)
// #endif
// #ifdef MP-WEIXIN
name = file.url
suffix = name.slice(name.lastIndexOf('.') + 1)
// #endif
return excludeTypeArr.includes(suffix)
}
/**
* 阿拉伯数字转换中文数字
* @param number
*/
export function arabicToChinese(number) {
const chineseNumberMap = {
0: '零',
1: '一',
2: '二',
3: '三',
4: '四',
5: '五',
6: '六',
7: '七',
8: '八',
9: '九',
10: '十'
};
const chineseUnitMap = {
10: '十',
100: '百',
1000: '千',
10000: '万',
100000: '十万',
1000000: '百万',
10000000: '千万',
100000000: '亿',
1000000000: '十亿',
10000000000: '百亿',
100000000000: '千亿',
1000000000000: '兆'
};
if (number <= 10) {
return chineseNumberMap[number]
}
let chineseNumber = '';
let num = number;
for (let unit of [1000000000000, 100000000000, 10000000000, 1000000000, 100000000, 10000000, 1000000, 100000, 10000, 1000, 100, 10, 1]) {
if (num >= unit) {
let count = Math.floor(num / unit);
chineseNumber += chineseNumberMap[count] + (chineseUnitMap[unit] ? chineseUnitMap[unit] : '');
num %= unit; // 取余
} else if (chineseNumber !== '') {
chineseNumber += chineseNumberMap[0]; // 添加零,保持位数对齐
}
}
return chineseNumber;
}
export function hasNetWork() {
return new Promise < boolean > ((resolve, reject) => {
wx.getNetworkType({
success(res) {
console.log(res);
if (res.networkType === 'none') {
resolve(false)
} else {
resolve(true)
}
}
})
})
}
/**
* 获取两数之间的随机数
* @param min
* @param max
*/
export function getRandom(min, max) {
return (Math.random() * (max - min) + min).toFixed(2);
}
/**
* 计算未来时间距离当前时间的时间对象
* @param futureTime 未来时间的时间戳(毫秒)
*/
export function getTimeAfterNow(futureTime) {
const nowTime = Date.now()
const timeDiff = futureTime - nowTime // 时间差
if (timeDiff <= 0) {
return {
days: '00',
hours: '00',
minutes: '00',
seconds: '00'
}
}
let hours = Math.floor((timeDiff) / (1000 * 60 * 60));
let minutes = Math.floor((timeDiff % (1000 * 60 * 60)) / (1000 * 60));
let seconds = Math.floor((timeDiff % (1000 * 60)) / 1000);
return {
hours: hours.toString().padStart(2, '0'),
minutes: minutes.toString().padStart(2, '0'),
seconds: seconds.toString().padStart(2, '0')
}
}
/**
* 生成本周的日历
* @return {Date[]}
*/
export function generationWeek() {
const MillisecondsOfTheDay = 24 * 60 * 60 * 1000 // 一天的毫秒数
let today = new Date();
let dayOfTheWeek = today.getDay(); // 当前天在本周的位置
let calendar = []
let startOfWeek = new Date(today - (dayOfTheWeek * MillisecondsOfTheDay) + MillisecondsOfTheDay); // 本周开始的位置
for (let i = 0; i < 7; i++) {
let day = new Date(startOfWeek.getTime() + i * MillisecondsOfTheDay);
calendar.push(day)
}
return calendar
}
/**
* @description: 对象转query串
* @param {*} obj
* @param {*} noFilterEmpty 默认false 去除空值再拼接字符串
* @return {*}
*/
export const getQueryString = (obj, noFilterEmpty = false) => {
if (!obj) return '';
let newObj = {...obj};
if (!noFilterEmpty) {
newObj = filterParams(newObj)
}
return new URLSearchParams(Object.entries(newObj)).toString()
}
/**
* @description: query串转对象
* 支持小程序
* @param query
*/
export const getUrlQuery = (query) => {
if (!query) return
if (query.indexOf("?") > 0) {
query = query.split("?").at(-1) // 选取?后面的
}
const queryList = query.split("&").map(item => item.split("="))
const entries = new Map(queryList);
return Object.fromEntries(entries);
}
/**
* @description: 去除对象中的空值
* @param {*} obj
* @return {*}
*/
export const filterParams = (obj) => {
let newObj = {};
for (const key in obj) {
//如果对象属性的值不为空就保存该属性如果属性的值为0 false保存该属性。如果属性的值全部是空格属于为空。
if ((obj[key] === 0 || obj[key] === false || obj[key]) && obj[key].toString().replace(/(^\s*)|(\s*$)/g, '') !== '') {
newObj[key] = obj[key];
}
}
return newObj;
}
export const checkPhone = (phone) => {
return /^1[3456789]\d{9}$/.test(phone)
}