| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257 |
- 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'
- import html2canvas from 'html2canvas'
- import { downloadByA } from './file'
- import { toString } from './type'
- import cloneDeep from 'lodash/cloneDeep'
- import { RequestHttpIntervalEnum, RequestParamsObjType } from '@/enums/httpEnum'
- /**
- * * 判断是否是开发环境
- * @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,
- delay?: number,
- options?: boolean | AddEventListenerOptions | undefined
- ) => {
- if (!target) return
- target.addEventListener(
- type,
- throttle(listener, delay || 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)
- }
- /**
- * * 截取画面为图片并下载
- * @param html 需要截取的 DOM
- */
- export const canvasCut = (html: HTMLElement | null, callback?: Function) => {
- if (!html) {
- window['$message'].error('导出失败!')
- if (callback) callback()
- return
- }
- html2canvas(html, {
- backgroundColor: null
- }).then((canvas: HTMLCanvasElement) => {
- window['$message'].success('导出成功!')
- downloadByA(canvas.toDataURL(), undefined, 'png')
- if (callback) callback()
- })
- }
- /**
- * * 函数过滤器
- * @param data 数据值
- * @param funcStr 函数字符串
- * @param toString 转为字符串
- * @param errorCallBack 错误回调函数
- * @param successCallBack 成功回调函数
- * @returns
- */
- export const newFunctionHandle = (
- data: any,
- funcStr?: string,
- isToString?: boolean,
- errorCallBack?: Function,
- successCallBack?: Function
- ) => {
- try {
- if (!funcStr) return data
- const fn = new Function('data', funcStr)
- const fnRes = fn(cloneDeep(data))
- const resHandle = isToString ? toString(fnRes) : fnRes
- // 成功回调
- successCallBack && successCallBack(resHandle)
- return resHandle
- } catch (error) {
- // 失败回调
- errorCallBack && errorCallBack(error)
- return '函数执行错误'
- }
- }
- /**
- * * 处理请求事件单位
- * @param num 时间间隔
- * @param unit RequestHttpIntervalEnum
- * @return number 秒数
- */
- export const intervalUnitHandle = (num: number, unit: RequestHttpIntervalEnum) => {
- switch (unit) {
- // 秒
- case RequestHttpIntervalEnum.SECOND:
- return num * 1000
- // 分
- case RequestHttpIntervalEnum.MINUTE:
- return num * 1000 * 60
- // 时
- case RequestHttpIntervalEnum.HOUR:
- return num * 1000 * 60 * 60
- // 天
- case RequestHttpIntervalEnum.DAY:
- return num * 1000 * 60 * 60 * 24
- default:
- return num * 1000
- }
- }
- /**
- * * 对象转换 cookie 格式
- * @param obj
- * @returns string
- */
- export const objToCookie = (obj: RequestParamsObjType) => {
- if(!obj) return ''
-
- let str = ''
- for (const key in obj) {
- str += key + '=' + obj[key] + ';'
- }
- return str.substr(0, str.length - 1)
- }
|