automated_uniapp/cool/utils/comm.ts
2025-01-09 16:16:11 +08:00

164 lines
3.6 KiB
TypeScript

import { orderBy } from "lodash-es";
export const { platform } = uni.getSystemInfoSync();
// 是否安卓
export const isAndroid = platform == "android";
// 是否苹果
export const isIos = platform == "ios";
// 是否小数
export function isDecimal(value: any): boolean {
return String(value).length - String(value).indexOf(".") + 1 > 0;
}
// 首字母大写
export function firstUpperCase(value: string): string {
return value.replace(/\b(\w)(\w*)/g, function ($0, $1, $2) {
return $1.toUpperCase() + $2;
});
}
// 深度合并
export function deepMerge(a: any, b: any) {
let k;
for (k in b) {
a[k] =
a[k] && a[k].toString() === "[object Object]" ? deepMerge(a[k], b[k]) : (a[k] = b[k]);
}
return a;
}
// 获取地址栏参数
export function getUrlParam(name: string): string | null {
const reg = new RegExp("(^|&)" + name + "=([^&]*)(&|$)");
const r = window.location.search.substr(1).match(reg);
if (r != null) return decodeURIComponent(r[2]);
return null;
}
// 列表转树形
export function deepTree(list: any[], sort?: "desc" | "asc"): any[] {
const newList: any[] = [];
const map: any = {};
orderBy(list, "orderNum", sort)
.map((e) => {
map[e.id] = e;
return e;
})
.forEach((e) => {
const parent = map[e.parentId];
if (parent) {
(parent.children || (parent.children = [])).push(e);
} else {
newList.push(e);
}
});
return newList;
}
// 路径转对象
export function path2Obj(list: any[]) {
const data: any = {};
list.forEach(({ path, value }) => {
const arr: string[] = path.split("/");
const parents = arr.slice(0, arr.length - 1);
const name = basename(path).replace(".ts", "");
let curr = data;
parents.forEach((k) => {
if (!curr[k]) {
curr[k] = {};
}
curr = curr[k];
});
curr[name] = value;
});
return data;
}
// 路径拼接
export function pathJoin(...parts: string[]): string {
if (parts.length === 0) {
return "";
}
const firstPart = parts[0];
let isAbsolute = false;
// 检查第一个部分是否以 "http" 开头,以确定路径类型(绝对还是相对)
if (firstPart.startsWith("http")) {
isAbsolute = true;
}
// 标准化路径,去除任何开头或结尾的斜杠
const normalizedParts = parts.map((part) => part.replace(/(^\/+|\/+$)/g, ""));
if (isAbsolute) {
// 如果是绝对路径,使用斜杠连接部分
return normalizedParts.join("/");
} else {
// 如果是相对路径,使用平台特定的分隔符连接部分
return normalizedParts.join("/");
}
}
// 文件名
export function filename(path: string): string {
return basename(path.substring(0, path.lastIndexOf(".")));
}
// 路径名称
export function basename(path: string): string {
let index = path.lastIndexOf("/");
index = index > -1 ? index : path.lastIndexOf("\\");
if (index < 0) {
return path;
}
return path.substring(index + 1);
}
// 文件扩展名
export function extname(path: string): string {
return path.substring((path || "").lastIndexOf(".") + 1);
}
// 横杠转驼峰
export function toCamel(str: string): string {
return str.replace(/([^-])(?:-+([^-]))/g, function ($0, $1, $2) {
return $1 + $2.toUpperCase();
});
}
// uuid
export function uuid(): string {
const s: any[] = [];
const hexDigits = "0123456789abcdef";
for (let i = 0; i < 36; i++) {
s[i] = hexDigits.substr(Math.floor(Math.random() * 0x10), 1);
}
s[14] = "4";
s[19] = hexDigits.substr((s[19] & 0x3) | 0x8, 1);
s[8] = s[13] = s[18] = s[23] = "-";
return s.join("");
}
// 延迟
export function sleep(duration: number) {
return new Promise((resolve) => {
setTimeout(() => {
resolve(true);
}, duration);
});
}