go-view/src/utils/utils.ts
2022-03-01 16:39:04 +08:00

158 lines
3.3 KiB
TypeScript
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

import { h } from 'vue'
import { NIcon } from 'naive-ui'
import screenfull from 'screenfull'
import throttle from 'lodash/throttle'
import Image_404 from '../assets/images/exception/image-404.png'
/**
* * 生成一个不重复的ID
* @param { Number } randomLength
*/
export const getUUID = (randomLength = 10) => {
return Number(
Math.random().toString().substr(2, randomLength) + Date.now()
).toString(36)
}
/**
* * render 图标
* @param icon 图标
* @param set 设置项
*/
export const renderIcon = (icon: any, set = {}) => {
return () => h(NIcon, set, { default: () => h(icon) })
}
/**
* * render 语言
* @param lang 语言标识
* @param set 设置项
* @param tag 要渲染成的标签
*/
export const renderLang = (lang: string, set = {}, tag = 'span') => {
return () => h(tag, set, { default: () => window['$t'](lang) })
}
/**
* ! 编译会报错,暂不使用
* * 处理 vite 中无法使用 require 的问题utils 文件为根路径
* @param path
* @param name
* @returns url
*/
// export const requireUrl = (path: string, name: string) => {
// return new URL(`${path}/${name}`, import.meta.url).href
// }
/**
* * 获取错误处理图片,默认 404 图
* @param path
* @param name
* @returns url
*/
export const requireErrorImg = () => {
return Image_404
}
/**
* * 全屏操作函数
* @param isFullscreen
* @param isEnabled
* @returns
*/
export const screenfullFn = (isFullscreen?: boolean, isEnabled?: boolean) => {
// 是否是全屏
if (isFullscreen) return screenfull.isFullscreen
// 是否支持全屏
if (isEnabled) return screenfull.isEnabled
if (screenfull.isEnabled) {
screenfull.toggle()
return
}
// TODO lang
window['$message'].warning('您的浏览器不支持全屏功能!')
}
/**
* * 设置元素属性
* @param HTMLElement 元素
* @param key 键名
* @param value 键值
*/
export const setDomAttribute = <
K extends keyof CSSStyleDeclaration,
V extends CSSStyleDeclaration[K]
>(
HTMLElement: HTMLElement,
key: K,
value: V
) => {
if (HTMLElement) {
HTMLElement.style[key] = value
}
}
/**
* * 判断是否是 mac
* @returns boolean
*/
export const isMac = () => {
return /macintosh|mac os x/i.test(navigator.userAgent)
}
/**
* * file转url
*/
export const fileToUrl = (file: File): string => {
const Url = URL || window.URL || window.webkitURL
const ImageUrl = Url.createObjectURL(file)
return ImageUrl
}
/**
* * file转base64
*/
export const fileTobase64 = (file: File, callback: Function) => {
let reader = new FileReader()
reader.readAsDataURL(file)
reader.onload = function (e: ProgressEvent<FileReader>) {
if (e.target) {
let base64 = e.target.result
callback(base64)
}
}
}
/**
* * 挂载监听
*/
export const addEventListener = <K extends keyof WindowEventMap>(
target: HTMLElement | Document,
type: K,
listener: any,
options?: boolean | AddEventListenerOptions | undefined
) => {
if (!target) return
target.addEventListener(
type,
throttle(listener, 300, {
leading: true,
trailing: false
}),
options
)
}
/**
* * 卸载监听
*/
export const removeEventListener = <K extends keyof WindowEventMap>(
target: HTMLElement | Document,
type: K,
listener: any
) => {
if (!target) return
target.removeEventListener(type, listener)
}