From 6bf51a5315bf33a5a7997bdef987559bd2998a40 Mon Sep 17 00:00:00 2001
From: admin <344137771@qq.com>
Date: Tue, 06 Jan 2026 10:47:15 +0800
Subject: [PATCH] 10.10

---
 src/utils/index.js |  240 ++++++++++++++++++++++++++++++++++++++---------------------
 1 files changed, 153 insertions(+), 87 deletions(-)

diff --git a/src/utils/index.js b/src/utils/index.js
index 1637e2c..aeead46 100644
--- a/src/utils/index.js
+++ b/src/utils/index.js
@@ -1,100 +1,166 @@
-import Vue from 'vue'
-import router from '@/router'
-import store from '@/store'
-
-/**
- * 获取uuid
- */
-export function getUUID () {
-  return 'xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx'.replace(/[xy]/g, c => {
-    return (c === 'x' ? (Math.random() * 16 | 0) : ('r&0x3' | '0x8')).toString(16)
-  })
+import i18n from '@/i18n'
+export function getImageUrl(path) {
+  return new URL(path, import.meta.url).href
 }
 
-/**
- * 是否有权限
- * @param {*} key
- */
-export function isAuth (key) {
-  let authorities = JSON.parse(sessionStorage.getItem('authorities') || '[]')
-  if (authorities.length) {
-    for (const i in authorities) {
-      const element = authorities[i]
-      if (element === key) {
-        return true
-      }
+// 设置localStorage
+export const setStorage = function (key, obj) {
+  let json = JSON.stringify(obj)
+  window.localStorage.setItem(key, json)
+  // console.log('设置语言', key, json)
+}
+
+// 获取localStorage
+export const getStorage = function (key) {
+  const str = window.localStorage.getItem(key) || ''
+  if (!str) {
+    return null
+  }
+  return JSON.parse(str)
+}
+// 获取浏览器默认语言
+export const getBrowserLang = function () {
+  let browserLang = navigator.language
+    ? navigator.language
+    : navigator.browserLanguage
+  let defaultBrowserLang = ''
+  if (
+    browserLang.toLowerCase() === 'cn' ||
+    browserLang.toLowerCase() === 'zh' ||
+    browserLang.toLowerCase() === 'zh-cn'
+  ) {
+    defaultBrowserLang = 'CN'
+  } else {
+    defaultBrowserLang = 'en'
+  }
+  return defaultBrowserLang
+}
+
+export const dataTime = (data, isTrue) => {
+  var date = new Date(data)
+  let Y = date.getFullYear() + '-'
+  let M =
+    (date.getMonth() + 1 < 10
+      ? '0' + (date.getMonth() + 1)
+      : date.getMonth() + 1) + '-'
+  let D = date.getDate() + ' '
+  let h = date.getHours() + ':'
+  let m = date.getMinutes() + ':'
+  let s = date.getSeconds()
+  let str = Y + M + D
+  if (isTrue) {
+    str = Y + M + D + h + m + s
+  } else {
+    str = Y + M + D
+  }
+  return str
+}
+
+export const debounce = (fn, delay = 500) => {
+  // timer 是在闭包中的
+  let timer = null
+
+  return function () {
+    if (timer) {
+      clearTimeout(timer)
+    }
+    timer = setTimeout(() => {
+      fn.apply(this, arguments)
+      timer = null
+    }, delay)
+  }
+}
+
+export const throttle = (fn, wait = 50) => {
+  // 上一次执行 fn 的时间
+  let previous = 0
+  // 将 throttle 处理结果当作函数返回
+  return function (...args) {
+    // 获取当前时间,转换成时间戳,单位毫秒
+    let now = +new Date()
+    // 将当前时间和上一次执行函数的时间进行对比
+    // 大于等待时间就把 previous 设置为当前时间并执行函数 fn
+    if (now - previous > wait) {
+      previous = now
+      fn.apply(this, args)
     }
   }
-  return false
 }
 
-/**
- * 树形数据转换
- * @param {*} data
- * @param {*} id
- * @param {*} pid
- */
-export function treeDataTranslate (data, id = 'id', pid = 'parentId') {
-  var res = []
-  var temp = {}
-  for (var i = 0; i < data.length; i++) {
-    temp[data[i][id]] = data[i]
+// 小数展示,保留五位小数
+export const formatNumber = (num) => {
+  if (typeof num !== 'number') {
+    return '--'
   }
-  for (var k = 0; k < data.length; k++) {
-    if (temp[data[k][pid]] && data[k][id] !== data[k][pid]) {
-      if (!temp[data[k][pid]]['children']) {
-        temp[data[k][pid]]['children'] = []
-      }
-      if (!temp[data[k][pid]]['_level']) {
-        temp[data[k][pid]]['_level'] = 1
-      }
-      data[k]['_level'] = temp[data[k][pid]]._level + 1
-      temp[data[k][pid]]['children'].push(data[k])
+  let count
+  if (num.toString().indexOf('.') < 0) {
+    // 整数
+    return num
+  } else {
+    // 小数
+    count = num.toString().split('.').pop().length
+    if (count > 5) {
+      return num.toFixed(5)
     } else {
-      res.push(data[k])
-    }
-  }
-  return res
-}
-
-/**
- * 将数组中的parentId列表取出,倒序排列
- * @param {*} data
- * @param {*} id
- * @param {*} pid
- */
-export function idList (data, val, id = 'id', children = 'children') {
-  let res = []
-  idListFromTree(data, val, res, id)
-  return res
-}
-
-/**
- * @param {*} data
- * @param {*} id
- * @param {*} pid
- */
-function idListFromTree (data, val, res = [], id = 'id', children = 'children') {
-  for (let i = 0; i < data.length; i++) {
-    const element = data[i]
-    if (element[children]) {
-      if (idListFromTree(element[children], val, res, id, children)) {
-        res.push(element[id])
-        return true
-      }
-    }
-    if (element[id] === val) {
-      res.push(element[id])
-      return true
+      return num
     }
   }
 }
 
-/**
- * 清除登录信息
- */
-export function clearLoginInfo () {
-  Vue.cookie.delete('Authorization')
-  store.commit('resetStore')
-  router.options.isAddDynamicMenuRoutes = false
+
+// 保留两位小数
+export const fixDate = (val, language) => {
+  const value = val / 1
+  if (isNaN(value)) {
+    return '--'
+  }
+  if (i18n.locale === 'CN' || language == "zh-CN" || language == "CN") {
+    if ((value / 10000).toString().split('.')[0].length <= 4) {
+      return (value / 10000).toFixed(2) + ' ' + i18n.global.t('万')
+    } else {
+      return (value / 100000000).toFixed(2) + ' ' + i18n.global.t('亿')
+    }
+  } else {
+    if ((value / 1000000).toString().split('.')[0].length <= 4) {
+      return (value / 1000000).toFixed(2) + ' ' + 'M'
+    } else {
+      return (value / 1000000000).toFixed(2) + ' ' + 'B'
+    }
+  }
+}
+
+export const formatMoney = (val) => {
+  if (val === 0) {
+    return 0
+  }
+  if (!val) {
+    return '-'
+  }
+  const num = 1000 //byte
+  if (val < num) {
+    return val
+  }
+  if (val < Math.pow(num, 2)) {
+    return (val / num).toFixed(2) + 'K' //k
+  }
+  if (val < Math.pow(num, 3)) {
+    return (val / Math.pow(num, 2)).toFixed(2) + 'M' //M
+  }
+  if (val < Math.pow(num, 4)) {
+    return (val / Math.pow(num, 3)).toFixed(2) + 'G' //G
+  }
+  return (val / Math.pow(num, 4)).toFixed(2) + 'T' //T
+}
+
+export const handleImage = (url) => {
+  return new URL(url, import.meta.url).href
+}
+
+export const formatNews = (str) => {
+  if (!str) {
+    return ''
+  }
+  return str
+    .replace(/<img [^>]*src=['"]([^'"]+)[^>]*>/g, '')
+    .replace(/&nbsp;/gi, '')
 }

--
Gitblit v1.9.3