You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

205 lines
5.4 KiB

2 years ago
// 对Date的扩展将 Date 转化为指定格式的String
// 月(M)、日(d)、小时(h)、分(m)、秒(s)、季度(q) 可以用 1-2 个占位符,
// 年(y)可以用 1-4 个占位符,毫秒(S)只能用 1 个占位符(是 1-3 位的数字)
// (new Date()).Format("yyyy-MM-dd hh:mm:ss.S") ==> 2006-07-02 08:09:04.423
// (new Date()).Format("yyyy-M-d h:m:s.S") ==> 2006-7-2 8:9:4.18
// eslint-disable-next-line no-extend-native
Date.prototype.Format = function (fmt) {
const o = {
'M+': this.getMonth() + 1, // 月份
'd+': this.getDate(), // 日
'h+': this.getHours(), // 小时
'm+': this.getMinutes(), // 分
's+': this.getSeconds(), // 秒
'q+': Math.floor((this.getMonth() + 3) / 3), // 季度
S: this.getMilliseconds(), // 毫秒
}
if (/(y+)/.test(fmt)) {
fmt = fmt.replace(
RegExp.$1,
(this.getFullYear() + '').substr(4 - RegExp.$1.length)
)
}
for (const k in o) {
if (new RegExp('(' + k + ')').test(fmt)) {
fmt = fmt.replace(
RegExp.$1,
RegExp.$1.length === 1 ? o[k] : ('00' + o[k]).substr(('' + o[k]).length)
)
}
}
return fmt
}
export function formatTimeToStr(times, pattern) {
let d = new Date(times).Format('yyyy-MM-dd hh:mm:ss')
if (pattern) {
d = new Date(times).Format(pattern)
}
return d.toLocaleString()
}
export function formatDatetime(time) {
if (typeof time === 'string' && time !== '') {
const date = new Date(time)
return formatTimeToStr(date, 'yyyy-MM-dd hh:mm:ss')
}
return '-'
}
export function formatDate(time) {
if (typeof time === 'string' && time !== '') {
const date = new Date(time)
return formatTimeToStr(date, 'yyyy-MM-dd')
}
return '-'
}
export function formatOnlyMonthDate(time) {
if (typeof time === 'string' && time !== '') {
const date = new Date(time)
return formatTimeToStr(date, 'MM-dd')
}
return '-'
}
export function formatYear(time) {
if (typeof time === 'string' && time !== '') {
const date = new Date(time)
return formatTimeToStr(date, 'yyyy')
}
return '-'
}
export function formatRelativeTime(time) {
if (!(typeof time === 'string' && time !== '')) {
return '刚刚'
}
const timestamp = parseInt(new Date(time).getTime() / 1000)
const now = parseInt(new Date().getTime() / 1000)
const diff = now - timestamp
const minute = 60
const hour = minute * 60
const day = hour * 24
const month = day * 30
const monthC = diff / month
const dayC = diff / day
const hourC = diff / hour
const minC = diff / minute
if (monthC > 12) {
return parseInt(monthC / 12) + ' 年前'
} else if (monthC >= 1) {
return parseInt(monthC) + ' 月前'
} else if (dayC >= 1) {
return parseInt(dayC) + ' 天前'
} else if (hourC >= 1) {
return parseInt(hourC) + ' 小时前'
} else if (minC >= 1) {
return parseInt(minC) + ' 分钟前'
}
return '刚刚'
}
export function formatBytes(bytes, decimals = 2) {
if (!+bytes) return '0 Bytes'
const k = 1024
const dm = decimals < 0 ? 0 : decimals
const sizes = ['B', 'KB', 'MB', 'GB', 'TB', 'PB', 'EB', 'ZB', 'YB']
const i = Math.floor(Math.log(bytes) / Math.log(k))
return `${parseFloat((bytes / Math.pow(k, i)).toFixed(dm))} ${sizes[i]}`
}
// categoryToTrees 分类转树形结构
2 years ago
export function categoryToTrees(categories, withDisabled = true) {
const result = []
const map = {}
2 years ago
try {
1 year ago
// 避免修改原对象。比如第一次调用categories加了children属性第二次同样继续追加children属性的值
const cates = JSON.parse(JSON.stringify(categories))
cates.forEach((item) => {
2 years ago
if (withDisabled) {
item.disabled = !item.enable
}
map[item.id] = item
})
1 year ago
cates.forEach((item) => {
2 years ago
const parent = map[item.parent_id]
if (parent) {
if (parent.disabled) item.disabled = true
;(parent.children || (parent.children = [])).push(item)
} else {
1 year ago
// 如果父级ID不存在不能直接判断为根节点还要确认下其父级ID是否存在存在父级ID的不是根节点
// eslint-disable-next-line no-lonely-if
if (!item.parent_id) {
result.push(item)
}
2 years ago
}
})
} catch (error) {
console.log(error)
}
return result
}
1 year ago
const extMapIcon = {
'.pdf': 'pdf',
'.doc': 'word',
'.docx': 'word',
'.rtf': 'word',
'.wps': 'word',
'.odt': 'word',
'.dot': 'word',
'.ppt': 'ppt',
'.pptx': 'ppt',
'.pps': 'ppt',
'.ppsx': 'ppt',
'.dps': 'ppt',
'.odp': 'ppt',
'.pot': 'ppt',
'.xls': 'excel',
'.xlsx': 'excel',
'.et': 'excel',
'.ods': 'excel',
'.csv': 'excel',
'.tsv': 'excel',
'.txt': 'text',
'.epub': 'epub',
'.mobi': 'mobi',
'.chm': 'chm',
'.umd': 'umd',
}
export function getIcon(ext) {
return extMapIcon[ext] || 'other'
}
// 解析 $route.query 中的数组
export function parseQueryIntArray(query, keys) {
const result = {}
keys.forEach((key) => {
if (typeof query[key] === 'object') {
result[key] = (query[key] || []).map((item) => parseInt(item))
} else if (query[key]) {
result[key] = [parseInt(query[key]) || 0]
}
})
return result
}
export function parseQueryBoolArray(query, keys) {
const result = {}
keys.forEach((key) => {
if (typeof query[key] === 'object') {
result[key] = (query[key] || []).map((item) => item === 'true')
} else if (query[key]) {
result[key] = [query[key] === 'true']
}
})
return result
}