222
schangxiang@126.com
2025-05-06 38b161e4d52362081bfe78fb5b51fbf384db7ce2
HIAWms/web/src/utils/index.ts
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,162 @@
// å·¥å…·ç±»å‡½æ•°
// éšæœºid
function createRandomId(): string {
  return (
    (Math.random() * 10000000).toString(16).substr(0, 4) +
    new Date().getTime() +
    Math.random().toString().substr(2, 5)
  )
}
// éšæœºæ•°
function randomNumber(min = 1, max = 100) {
  return parseInt(Math.random() * (max - min + 1) + min.toString())
}
function getTableHeight(num?: number | undefined) {
  const pageHeight = window.innerHeight
  const height = num ? num / 100 : 0.81
  const heightPx = Math.floor(pageHeight * height)
  return heightPx
}
// æ˜¯å¦æ•°å­—
function isNumber(val: string | number): boolean {
  // ä¸èƒ½è½¬æ¢ä¸ºæ•°å­—的直接抛出
  if (isNaN(Number(val))) return false
  // åŽ»é™¤æ‰€æœ‰ç©ºæ ¼ï¼Œä»€ä¹ˆéƒ½æ²¡æœ‰
  const val1 = val.toString().replace(/\s+/g, '')
  if (!val1) return false
  // å°æ•°ç‚¹åŽï¼Œä»€ä¹ˆéƒ½æ²¡æœ‰
  const val2 = val.toString().split('.')
  if (val2.length >= 2) {
    if (!val2[1]) return false
  }
  return true
}
// è‡ªé€‚应分辨率
function adaptiveResolution() {
  // èŽ·å–å±å¹•å®½ã€é«˜
  // bodyW = document.body.clientWidth,
  // bodyH = document.body.clientHeight,
  var bodyW = window.innerWidth
  var bodyH = window.innerHeight
  // var bodyW = window.screen.width;
  // var bodyH = window.screen.height;
  var appBodyWRatio = bodyW / 1920 // å±å¹•宽 ä¸Ž è®¾å®šçš„æœ€å°å®½åº¦ çš„æ¯”值
  var appBodyHRatio = bodyH / 1080 // å±å¹•宽 ä¸Ž è®¾å®šçš„æœ€å°å®½åº¦ çš„æ¯”值
  // var appEle = document.getElementById('app') // #app
  var appEle = document.body // body
  appEle.style.position = 'relative'
  // console.log('appBodyWRatio == ', appBodyWRatio, 'appBodyHRatio == ', appBodyHRatio)
  if (appBodyWRatio <= 1 || appBodyHRatio <= 1) {
    // æ¯”值小于1时,需要处理
    var appH = bodyH / appBodyHRatio // é‡æ–°è®¾ç½®é¡µé¢é«˜åº¦
    var appW = bodyW / appBodyWRatio // é‡æ–°è®¾ç½®é¡µé¢é«˜åº¦
    // var positionBase = (1 - appBodyRatio) / 2 * 100 + 9; // é‡æ–°è®¾ç½®ä½ç§»å€¼
    // var positionLeft = (1920 - bodyW) / 2; // é‡æ–°è®¾ç½®left位移值
    var positionRight = (appH - bodyH) / 2 // é‡æ–°è®¾ç½®left位移值
    // var positionRight = (appH - bodyH) / 2; // é‡æ–°è®¾ç½®right位移值
    var positionLeft = (appW - bodyW) / 2 // é‡æ–°è®¾ç½®right位移值
    // appEle.style.width = "1920px";
    appEle.style.width = appW + 'px'
    appEle.style.height = appH + 'px'
    // appEle.style.height = "1080px";
    appEle.style.transform =
      'scale(' + appBodyWRatio + ', ' + appBodyHRatio + ')'
    appEle.style.left = -positionLeft + 'px'
    appEle.style.top = -positionRight + 'px'
  } else {
    appEle.style.width = '100%'
    appEle.style.height = '100%'
    appEle.style.transform = ''
    appEle.style.position = '0'
    appEle.style.top = '0'
  }
}
function generateUniqueId() {
  let id = ''
  const characters = 'ABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789'
  const charactersLength = characters.length
  for (let i = 0; i < 10; i++) {
    id += characters.charAt(Math.floor(Math.random() * charactersLength))
  }
  return id
}
// @ts-ignore
function downloadFile(file, fileName) {
  const blob = new Blob([file])
  // å…¼å®¹ä¸åŒæµè§ˆå™¨çš„URL对象
  // const url:any = window.URL || window.webkitURL || window.moxURL
  const url = window.URL || window.webkitURL
  // åˆ›å»ºä¸‹è½½é“¾æŽ¥
  const downloadHref = url.createObjectURL(blob)
  // åˆ›å»ºa标签并为其添加属性
  let downloadLink = document.createElement('a')
  downloadLink.href = downloadHref
  downloadLink.download = fileName
  // è§¦å‘点击事件执行下载
  downloadLink.click()
  // @ts-ignore
  window.URL.revokeObjectURL(url)
}
/**
 * å°†map转换成数组list
 * @param map
 */
function genMapToArrayList(map: Record<string, any>): any[] {
  const list: any[] = []
  for (const key in map) {
    if (map.hasOwnProperty(key)) {
      list.push(map[key])
    }
  }
  return list
}
/**
 * å°†[{description: 'xx', value: 1}]转成成[{label: 'xx',value: 1}]
 */
export function transformOptions(data: any): any[] {
  return data.map((item: any) => {
    return {
      label: item.description,
      value: item.value,
      name: item.name,
    }
  })
}
/**
 * åˆ¤æ–­æ•°ç»„的某个字段是否有重复项
 * @param array æ•°ç»„源
 * @param property éœ€è¦åˆ¤æ–­æ•°ç»„中对象的字段名
 * @returns boolean
 */
const hasDuplicates = (array: any[], property: string) => {
  var values = array.map((element) => element[property])
  var uniqueValues = new Set(values)
  return values.length !== uniqueValues.size
}
export {
  hasDuplicates,
  genMapToArrayList,
  createRandomId,
  randomNumber,
  isNumber,
  adaptiveResolution,
  getTableHeight,
  generateUniqueId,
  downloadFile,
}