let color = [ 
 | 
  'red', 
 | 
  'purplered', 
 | 
  'purple', 
 | 
  'bluepurple', 
 | 
  'aquablue', 
 | 
  'blue', 
 | 
  'indigo', 
 | 
  'cyan', 
 | 
  'teal', 
 | 
  'green', 
 | 
  'yellowgreen', 
 | 
  'lime', 
 | 
  'yellow', 
 | 
  'orangeyellow', 
 | 
  'orange', 
 | 
  'orangered', 
 | 
  'brown', 
 | 
  'grey', 
 | 
  'gray' 
 | 
] 
 | 
  
 | 
// 酷炫颜色的数量 
 | 
const COOL_BG_COLOR_COUNT = 16 
 | 
  
 | 
/** 
 | 
 * 获取图鸟配色颜色列表 
 | 
 */ 
 | 
function getTuniaoColorList() { 
 | 
  return color 
 | 
} 
 | 
  
 | 
/** 
 | 
 * 获取指定类型的随机颜色对应的类 
 | 
 * @param {String} type 颜色类型 
 | 
 */ 
 | 
function getRandomColorClass(type = 'bg') { 
 | 
  const index = Math.floor(Math.random() * color.length) 
 | 
  const colorValue = color[index] 
 | 
  
 | 
  return 'tn-' + type + '-' + colorValue 
 | 
} 
 | 
  
 | 
/** 
 | 
 * 随机获取酷炫背景对应的类 
 | 
 */ 
 | 
function getRandomCoolBgClass() { 
 | 
  const index = (Math.random() * COOL_BG_COLOR_COUNT) + 1 
 | 
  return 'tn-cool-bg-color-' + Math.floor(index) 
 | 
} 
 | 
  
 | 
/** 
 | 
 * 根据传入的值获取内部背景颜色类 
 | 
 *  
 | 
 * @param {String} backgroundColor 背景颜色信息 
 | 
 */ 
 | 
function getBackgroundColorInternalClass(backgroundColor = '') { 
 | 
  if (!backgroundColor) return '' 
 | 
   
 | 
  if (['tn-bg', 'tn-dynamic-bg', 'tn-main-gradient', 'tn-cool-bg'].some(item => { 
 | 
    return backgroundColor.includes(item) 
 | 
  })) { 
 | 
    return backgroundColor 
 | 
  } 
 | 
  return '' 
 | 
} 
 | 
  
 | 
/** 
 | 
 * 根据传入的值获取背景颜色样式 
 | 
 *  
 | 
 * @param {String} backgroundColor 背景颜色信息 
 | 
 */ 
 | 
function getBackgroundColorStyle(backgroundColor = '') { 
 | 
  if (!backgroundColor) return '' 
 | 
   
 | 
  if (!backgroundColor.startsWith('tn-') || ['#', 'rgb', 'rgba'].some(item => { 
 | 
    return backgroundColor.includes(item) 
 | 
  })) { 
 | 
    return backgroundColor 
 | 
  } 
 | 
  return '' 
 | 
} 
 | 
  
 | 
/** 
 | 
 * 根据传入的值获取内部字体颜色类 
 | 
 *  
 | 
 * @param {String} fontColor 背景颜色信息 
 | 
 */ 
 | 
function getFontColorInternalClass(fontColor = '') { 
 | 
  if (!fontColor) return '' 
 | 
   
 | 
  if (['tn-color'].some(item => { 
 | 
    return fontColor.includes(item) 
 | 
  })) { 
 | 
    return fontColor 
 | 
  } 
 | 
  return '' 
 | 
} 
 | 
  
 | 
/** 
 | 
 * 根据传入的值获取字体颜色样式 
 | 
 *  
 | 
 * @param {String} fontColor 背景颜色信息 
 | 
 */ 
 | 
function getFontColorStyle(fontColor = '') { 
 | 
  if (!fontColor) return '' 
 | 
   
 | 
  if (!fontColor.startsWith('tn-') || ['#', 'rgb', 'rgba'].some(item => { 
 | 
    return fontColor.includes(item) 
 | 
  })) { 
 | 
    return fontColor 
 | 
  } 
 | 
  return '' 
 | 
} 
 | 
  
 | 
/** 
 | 
 * 求两个颜色之间的渐变值 
 | 
 *  
 | 
 * @param {String} startColor 开始颜色 
 | 
 * @param {String} endColor 结束颜色 
 | 
 * @param {Number} step 颜色等分的份额  
 | 
 */ 
 | 
function colorGradient(startColor = 'rgb(0, 0, 0)', endColor='rgb(255, 255, 255)', step = 10) { 
 | 
  let startRGB = hexToRGB(startColor, false) 
 | 
  let startR = startRGB[0] 
 | 
  let startG = startRGB[1] 
 | 
  let startB = startRGB[2] 
 | 
   
 | 
  let endRGB = hexToRGB(endColor, false) 
 | 
  let endR = endRGB[0] 
 | 
  let endG = endRGB[1] 
 | 
  let endB = endRGB[2] 
 | 
   
 | 
  // 求差值 
 | 
  let R = (endR - startR) / step 
 | 
  let G = (endG - startG) / step 
 | 
  let B = (endB - startB) / step 
 | 
   
 | 
  let colorArr = [] 
 | 
  for (let i = 0; i < step; i++) { 
 | 
    // 计算每一步的hex值 
 | 
    let hex = rgbToHex(`rgb(${Math.round(R * i + startR)}, ${Math.round(G * i + startG)}, ${Math.round(B * i + startB)})`) 
 | 
    colorArr.push(hex) 
 | 
  } 
 | 
  return colorArr 
 | 
} 
 | 
  
 | 
/** 
 | 
 * 将hex的颜色表示方式转换为rgb表示方式 
 | 
 *  
 | 
 * @param {String} color 颜色 
 | 
 * @param {Boolean} str 是否返回字符串 
 | 
 * @return {Array|String} rgb的值 
 | 
 */ 
 | 
function hexToRGB(color, str = true) { 
 | 
  let reg = /^#([0-9a-fA-F]{3}|[0-9a-fA-F]{6})$/ 
 | 
   
 | 
  color = color.toLowerCase() 
 | 
  if (color && reg.test(color)) { 
 | 
    // #000 => #000000 
 | 
    if (color.length === 4) { 
 | 
      let colorNew = '#' 
 | 
      for (let i = 1; i < 4; i++) { 
 | 
        colorNew += color.slice(i, i + 1).concat(color.slice(i, i + 1)) 
 | 
      } 
 | 
      color = colorNew 
 | 
    } 
 | 
    // 处理六位的颜色值 
 | 
    let colorChange = [] 
 | 
    for (let i = 1; i < 7; i += 2) { 
 | 
      colorChange.push(parseInt("0x" + color.slice(i, i + 2))) 
 | 
    } 
 | 
    if (!str) { 
 | 
      return colorChange 
 | 
    } else { 
 | 
      return `rgb(${colorChange[0]}, ${colorChange[1]}, ${colorChange[2]})` 
 | 
    } 
 | 
  } else if (/^(rgb|RGB)/.test(color)) { 
 | 
    let arr = color.replace(/(?:\(|\)|rgb|RGB)*/g, "").split(',') 
 | 
    return arr.map(item => Number(item)) 
 | 
  } else { 
 | 
    return color 
 | 
  } 
 | 
} 
 | 
  
 | 
/** 
 | 
 * 将rgb的颜色表示方式转换成hex表示方式 
 | 
 *  
 | 
 * @param {Object} rgb rgb颜色值 
 | 
 */ 
 | 
function rgbToHex(rgb) { 
 | 
  let reg = /^#([0-9a-fA-F]{3}|[0-9a-fA-F]{6})$/ 
 | 
  if (/^(rgb|RGB)/.test(rgb)) { 
 | 
    let color = rgb.replace(/(?:\(|\)|rgb|GRB)*/g, "").split(',') 
 | 
    let strHex = '#' 
 | 
    for (let i = 0; i < color.length; i++) { 
 | 
      let hex = Number(color[i]).toString(16) 
 | 
      // 保证每个值否是两位数 
 | 
      hex = String(hex).length === 1 ? 0 + '' + hex: hex 
 | 
      if (hex === '0') { 
 | 
        hex += hex 
 | 
      } 
 | 
      strHex += hex 
 | 
    } 
 | 
    if (strHex.length !== 7) { 
 | 
      strHex = rgb 
 | 
    } 
 | 
    return strHex 
 | 
  } else if (reg.test(rgb)) { 
 | 
    let num = rgb.replace(/#/, '').split('') 
 | 
    if (num.length === 6) { 
 | 
      return rgb 
 | 
    } else if (num.length === 3) { 
 | 
      let numHex = '#' 
 | 
      for (let i = 0; i < num.length; i++) { 
 | 
        numHex += (num[i] + num[i]) 
 | 
      } 
 | 
      return numHex 
 | 
    } 
 | 
  } else { 
 | 
    return rgb 
 | 
  } 
 | 
} 
 | 
  
 | 
/** 
 | 
 * 将传入的颜色值转换为rgba字符串 
 | 
 *  
 | 
 * @param {String} color 颜色 
 | 
 * @param {Number} alpha 透明度 
 | 
 */ 
 | 
function colorToRGBA(color, alpha = 0.3) { 
 | 
  color = rgbToHex(color) 
 | 
  // 十六进制颜色值的正则表达式 
 | 
  let reg = /^#([0-9a-fA-F]{3}|[0-9a-fA-F]{6})$/ 
 | 
   
 | 
  color = color.toLowerCase() 
 | 
  if (color && reg.test(color)) { 
 | 
    // #000 => #000000 
 | 
    if (color.length === 4) { 
 | 
      let colorNew = '#' 
 | 
      for (let i = 1; i < 4; i++) { 
 | 
        colorNew += color.slice(i, i + 1).concat(color.slice(i, i + 1)) 
 | 
      } 
 | 
      color = colorNew 
 | 
    } 
 | 
    // 处理六位的颜色值 
 | 
    let colorChange = [] 
 | 
    for (let i = 1; i < 7; i += 2) { 
 | 
      colorChange.push(parseInt("0x" + color.slice(i, i + 2))) 
 | 
    } 
 | 
    return `rgba(${colorChange[0]}, ${colorChange[1]}, ${colorChange[2]}, ${alpha})` 
 | 
  } else { 
 | 
    return color 
 | 
  } 
 | 
} 
 | 
  
 | 
export default { 
 | 
  COOL_BG_COLOR_COUNT: COOL_BG_COLOR_COUNT, 
 | 
  getTuniaoColorList, 
 | 
  getRandomColorClass, 
 | 
  getRandomCoolBgClass, 
 | 
  getBackgroundColorInternalClass, 
 | 
  getBackgroundColorStyle, 
 | 
  getFontColorInternalClass, 
 | 
  getFontColorStyle, 
 | 
  colorGradient, 
 | 
  hexToRGB, 
 | 
  rgbToHex, 
 | 
  colorToRGBA 
 | 
} 
 |