import { configVal } from '@/utils/config' import { type Menu } from './type' import { pascalCase } from 'change-case' import dayjs from "dayjs"; export function addLeadingSlash(str: string): string { if (!str.startsWith('/')) { return `/${str}` } return str } export function getPath(module: string, url: string): string { // 待删除xx里面的 const paths = url.split('/') const system = paths.shift() const version = paths.shift() if (!system || !version) { // eslint-disable-next-line no-console console.warn( `菜单路径 ${url} 配置不合法。合法格式应为: 'server/version/dir/file', 其中dir允许多级,如'user/profile'`, ) return '' } return `/${module}/${paths.join('/')}` } // 判断是否有子菜单 const hasSubmenu = (menuInfo: Menu) => { return menuInfo.children?.some(item => item.isHidden === 0) } /** * 菜单路径添加Module前缀 * @param list * @param module */ export const handleSearchMenu = (menu: Menu, module?: string) => { const { isTopModuleV2 } = configVal const [urlPath] = menu.url.split('?') menu.url = addLeadingSlash(menu.url) menu.module = module ?? menu.key ?? 'dashboard' menu.path = isTopModuleV2 ? `/${menu.module}${menu.url}` : getPath(menu.module, menu.url.replace('/', '')) menu.routeName = `${pascalCase(urlPath)}_${menu.id}` menu.disabled = hasSubmenu(menu) menu.key = '' // 为了防止在tree-select组件中报错,key必须为空 menu.children?.forEach(item => { handleSearchMenu(item, module) }) } export function getLastTimeRange(start: number, end: number) { // eslint-disable-next-line newline-per-chained-call const startTime = dayjs().subtract(start, 'day').startOf('day') // eslint-disable-next-line newline-per-chained-call const endTime = dayjs().subtract(end, 'day').endOf('day') return { startTime, endTime, startTimeStamp: startTime.unix() * 1000, endTimeStamp: endTime.unix() * 1000, } } export const formatToTime = (date: number | string): string | null => { if (!date) { return null } return dayjs(date).format('YYYY-MM-DD HH:mm:ss') }