Files
jdt-user/src/utils/index.ts
YuanHuakk b2ac7f33f3
All checks were successful
continuous-integration/drone/push Build is passing
mod(custom): change
2024-10-05 04:20:23 +08:00

114 lines
2.5 KiB
TypeScript

import Taro from '@tarojs/taro';
// 经纬度计算距离
export function calculateDistance(
la1: number,
lo1: number,
la2: number,
lo2: number,
): any {
const radLat1 = (la1 * Math.PI) / 180.0;
const radLat2 = (la2 * Math.PI) / 180.0;
const a = radLat1 - radLat2;
const b = (lo1 * Math.PI) / 180.0 - (lo2 * Math.PI) / 180.0;
let s =
2 *
Math.asin(
Math.sqrt(
Math.pow(Math.sin(a / 2), 2) +
Math.cos(radLat1) * Math.cos(radLat2) * Math.pow(Math.sin(b / 2), 2),
),
);
s = s * 6378.137;
s = Math.round(s * 10000) / 10000;
return s.toFixed(2) + 'km';
}
// 将角度转换为弧度
function toRadians(degrees: number): number {
return (degrees * Math.PI) / 180;
}
// url转对象
interface UrlParams {
type?: string;
gid?: string;
bid?: string;
}
export function parseQueryString(url: string) {
const queryString = url.split('?')[1];
if (!queryString) {
return {};
}
const keyValuePairs = queryString.split('&');
const result: UrlParams = {};
keyValuePairs.forEach(keyValue => {
const [key, value] = keyValue.split('=');
result[key] = decodeURIComponent(value);
});
return result;
}
// 格式化时间
export function formatTime(time: number): string {
const date = new Date(time);
const year = date.getFullYear();
const month = date.getMonth() + 1;
const day = date.getDate();
const hour = date.getHours();
const minute = date.getMinutes();
const second = date.getSeconds();
return `${year}-${month}-${day} ${hour}:${minute}:${second}`;
}
// 字符串脱敏
export function maskString(str: string, start: number, end: number): string {
const maskLength = Math.min(str.length, end) - Math.max(0, start);
const maskedPart = '*'.repeat(maskLength);
const beginning = str.slice(0, Math.max(0, start));
const endPart = str.slice(end);
return beginning + maskedPart + endPart;
}
// tips
export function showTips(msg: string) {
Taro.showToast({
title: msg,
icon: 'none',
});
}
// 防抖函数
export function debounce(fn: Function, delay: number = 500) {
let timer: any = null;
return function (...args: any[]) {
if (timer) {
clearTimeout(timer);
}
timer = setTimeout(() => {
fn.apply(this, args);
}, delay);
};
}
/* @param fn 节流函数
* @param delay 节流时间
*/
export function throttle(fn: Function, delay: number) {
let timer: any = null;
return function (...args: any[]) {
if (!timer) {
timer = setTimeout(() => {
fn.apply(this, args);
timer = null;
}, delay);
}
};
}