同步操作将从 likeadmin/likeadmin(Java版)- MIT协议-免费任意商用 - 管理后台_小程序_手机H5_PC端_uni-app 强制同步,此操作会覆盖自 Fork 仓库以来所做的任何修改,且无法恢复!!!
确定后同步将在后台操作,完成时将刷新页面,请耐心等待。
import { isObject } from '@vue/shared'import { cloneDeep } from 'lodash'/*** @description 添加单位* @param {String | Number} value 值 100* @param {String} unit 单位 px em rem*/export const addUnit = (value: string | number, unit = 'px') => {return !Object.is(Number(value), NaN) ? `${value}${unit}` : value}/*** @description 添加单位* @param {unknown} value* @return {Boolean}*/export const isEmpty = (value: unknown) => {return value == null && typeof value == 'undefined'}/*** @description 树转数组,队列实现广度优先遍历* @param {Array} data 数据* @param {Object} props `{ children: 'children' }`*/export const treeToArray = (data: any[], props = { children: 'children' }) => {data = cloneDeep(data)const { children } = propsconst newData = []const queue: any[] = []data.forEach((child: any) => queue.push(child))while (queue.length) {const item: any = queue.shift()if (item[children]) {item[children].forEach((child: any) => queue.push(child))delete item[children]}newData.push(item)}return newData}/*** @description 数组转* @param {Array} data 数据* @param {Object} props `{ parent: 'pid', children: 'children' }`*/export const arrayToTree = (data: any[],props = { id: 'id', parentId: 'pid', children: 'children' }) => {data = cloneDeep(data)const { id, parentId, children } = propsconst result: any[] = []const map = new Map()data.forEach((item) => {map.set(item[id], item)const parent = map.get(item[parentId])if (parent) {parent[children] = parent[children] ?? []parent[children].push(item)} else {result.push(item)}})return result}/*** @description 获取正确的路经* @param {String} path 数据*/export function getNormalPath(path: string) {if (path.length === 0 || !path || path == 'undefined') {return path}const newPath = path.replace('//', '/')const length = newPath.lengthif (newPath[length - 1] === '/') {return newPath.slice(0, length - 1)}return newPath}/*** @description对象格式化为Query语法* @param { Object } params* @return {string} Query语法*/export function objectToQuery(params: Record<string, any>): string {let query = ''for (const props of Object.keys(params)) {const value = params[props]const part = encodeURIComponent(props) + '='if (!isEmpty(value)) {if (isObject(value)) {for (const key of Object.keys(value)) {if (!isEmpty(value[key])) {const params = props + '[' + key + ']'const subPart = encodeURIComponent(params) + '='query += subPart + encodeURIComponent(value[key]) + '&'}}} else {query += part + encodeURIComponent(value) + '&'}}}return query.slice(0, -1)}/*** @description 时间格式化* @param dateTime { number } 时间戳* @param fmt { string } 时间格式* @return { string }*/// yyyy:mm:dd|yyyy:mm|yyyy年mm月dd日|yyyy年mm月dd日 hh时MM分等,可自定义组合export const timeFormat = (dateTime: number, fmt = 'yyyy-mm-dd') => {// 如果为null,则格式化当前时间if (!dateTime) {dateTime = Number(new Date())}// 如果dateTime长度为10或者13,则为秒和毫秒的时间戳,如果超过13位,则为其他的时间格式if (dateTime.toString().length == 10) {dateTime *= 1000}const date = new Date(dateTime)let retconst opt: any = {'y+': date.getFullYear().toString(), // 年'm+': (date.getMonth() + 1).toString(), // 月'd+': date.getDate().toString(), // 日'h+': date.getHours().toString(), // 时'M+': date.getMinutes().toString(), // 分's+': date.getSeconds().toString() // 秒}for (const k in opt) {ret = new RegExp('(' + k + ')').exec(fmt)if (ret) {fmt = fmt.replace(ret[1],ret[1].length == 1 ? opt[k] : opt[k].padStart(ret[1].length, '0'))}}return fmt}/*** @description 获取不重复的id* @param length { Number } id的长度* @return { String } id*/export const getNonDuplicateID = (length = 8) => {let idStr = Date.now().toString(36)idStr += Math.random().toString(36).substring(3, length)return idStr}/*** @description 单词首字母大写* @param { String } str* @return { String } id*/export const firstToUpperCase = (str = '') => {return str.toLowerCase().replace(/( |^)[a-z]/g, (1ドル) => 1ドル.toUpperCase())}
此处可能存在不合适展示的内容,页面不予展示。您可通过相关编辑功能自查并修改。
如您确认内容无涉及 不当用语 / 纯广告导流 / 暴力 / 低俗色情 / 侵权 / 盗版 / 虚假 / 无价值内容或违法国家有关法律法规的内容,可点击提交进行申诉,我们将尽快为您处理。