| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165 |
- 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'
- /**
- * * 判断是否是开发环境
- * @return { Boolean }
- */
- export const isDev = () => {
- return import.meta.env.DEV
- }
- /**
- * * 生成一个不重复的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)
- }
|