2025-06-25 21:41:53 +08:00

170 lines
4.4 KiB
TypeScript

import {Session} from "/@/utils/storage";
/**
* 通用js方法封装处理
* Copyright (c) 2022 gfast
*/
export const baseURL:string|undefined|boolean = import.meta.env.VITE_API_URL
export function getUpFileUrl(url:string){
if(!url){
return url
}
if (/^http|^blob/i.test(url)) {
return url
}
let reg = new RegExp('^/*' + baseURL + "/*");
return baseURL+url.replace(reg,'')
}
/**
* 构造树型结构数据
* @param {*} data 数据源
* @param {*} id id字段 默认 'id'
* @param {*} parentId 父节点字段 默认 'parentId'
* @param {*} children 孩子节点字段 默认 'children'
* @param {*} rootId 根Id 默认 0
*/
export function handleTree(data:any[], id:string, parentId:string, children:string, rootId:any):any[] {
id = id || 'id'
parentId = parentId || 'parentId'
children = children || 'children'
let rootIds:any = []
if(typeof rootId === 'boolean' && rootId){
//自动获取rootId
let idSet:any = {}
data.map((item:any)=>{
idSet[item[id]] = true
})
data.map((item:any)=>{
if(!idSet[item[parentId]]){
rootIds.push(item[parentId])
}
})
}else if(typeof rootId ==='string'){
rootId = rootId || ''
rootIds = [rootId]
}else{
rootId = rootId || 0
rootIds = [rootId]
}
rootIds = [...new Set(rootIds)]
let treeData:any = []
//对源数据深度克隆
const cloneData = JSON.parse(JSON.stringify(data))
rootIds.map((rItem:any)=>{
//循环所有项
const td = cloneData.filter((father:any) => {
let branchArr = cloneData.filter((child:any) => {
//返回每一项的子级数组
return father[id] === child[parentId]
});
branchArr.length > 0 ? father[children] = branchArr : '';
//返回第一层
switch (typeof father[parentId]){
case 'string':
if(father[parentId]===''&&rItem===0){
return true
}
return father[parentId]===rItem.toString();
case 'number':
return father[parentId] === rItem;
}
return false;
});
if(td.length>0){
treeData = [...treeData,...td]
}
})
return treeData != '' ? treeData : data;
}
export function flattenTree(treeArray:any[]):any[] {
const result:any[] = [];
function flatten(node:any) {
result.push(node);
if (node.children && node.children.length > 0) {
node.children.forEach((child:any[]) => flatten(child));
}
}
treeArray.forEach(node => flatten(node));
return result;
}
export function findChildrenByPid(pid:any, flattenedArray :any[]):any[] {
const result:any[] = [];
flattenedArray.forEach(node => {
if (node.pid === pid) {
result.push(node);
const grandchildren = findChildrenByPid(node.id, flattenedArray);
if (grandchildren.length > 0) {
result.push(...grandchildren);
}
}
});
return result;
}
// 回显数据字典
export function selectDictLabel(data:any[], value:string):string {
let actions:string[]=[]
data.map((item) => {
if (item.value == value) {
actions.push(item.label);
return false;
}
})
return actions.join('');
}
export function getToken():string{
return Session.get('token')
}
// 日期格式化
export function parseTime(time:any, pattern:string) {
if (arguments.length === 0 || !time) {
return null
}
const format = pattern || '{y}-{m}-{d} {h}:{i}:{s}'
let date
if (typeof time === 'object') {
date = time
} else {
if ((typeof time === 'string') && (/^[0-9]+$/.test(time))) {
time = parseInt(time)
} else if (typeof time === 'string') {
time = time.replace(new RegExp(/-/gm), '/');
}
if ((typeof time === 'number') && (time.toString().length === 10)) {
time = time * 1000
}
date = new Date(time)
}
const formatObj:any = {
y: date.getFullYear(),
m: date.getMonth() + 1,
d: date.getDate(),
h: date.getHours(),
i: date.getMinutes(),
s: date.getSeconds(),
a: date.getDay()
}
const time_str = format.replace(/{(y|m|d|h|i|s|a)+}/g, (result, key) => {
let value = formatObj[key]
// Note: getDay() returns 0 on Sunday
if (key === 'a') { return ['日', '一', '二', '三', '四', '五', '六'][value] }
if (result.length > 0 && value < 10) {
value = '0' + value
}
return value || 0
})
return time_str
}