utils.js 1.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172
  1. import pinyin from 'pinyin'
  2. /**
  3. * * 生成一个不重复的ID
  4. * @param { Number } randomLength
  5. */
  6. export const getUUID = (randomLength = 10) => {
  7. return 'id_' + Number(Math.random().toString().substring(2, randomLength) + Date.now()).toString(36)
  8. }
  9. /**
  10. * * JSON序列化,支持函数和 undefined
  11. * @param data
  12. */
  13. export const JSONStringify = (data) => {
  14. return JSON.stringify(
  15. data,
  16. (key, val) => {
  17. // 处理函数丢失问题
  18. if (typeof val === 'function') {
  19. return `${val}`
  20. }
  21. // 处理 undefined 丢失问题
  22. if (typeof val === 'undefined') {
  23. return null
  24. }
  25. return val
  26. },
  27. 2
  28. )
  29. }
  30. /**
  31. * * JSON反序列化,支持函数和 undefined
  32. * @param data
  33. */
  34. export const JSONParse = (data) => {
  35. if (data.trim() === '') return
  36. return JSON.parse(data, (k, v) => {
  37. if (k !== 'formatter') {
  38. return v
  39. }
  40. // 还原函数值
  41. if (typeof v === 'string' && checkJsonStringify(v)) {
  42. return eval2(`(function(){return ${v}})()`)
  43. } else if (typeof v === 'string' && v.indexOf && v.indexOf('return ') > -1) {
  44. const baseLeftIndex = v.indexOf('(')
  45. if (baseLeftIndex > -1) {
  46. const newFn = `function ${v.substring(baseLeftIndex)}`
  47. return eval2(`(function(){return ${newFn}})()`)
  48. }
  49. }
  50. return v
  51. })
  52. }
  53. export const getParseLang = (data, lang) => {
  54. try {
  55. return JSONParse(JSONParse(data))[lang];
  56. } catch (error) {
  57. return data;
  58. }
  59. };
  60. export const getFirstLetter = (name) => {
  61. const py = pinyin(name[0], {
  62. style: pinyin.STYLE_FIRST_LETTER,
  63. heteronym: false
  64. });
  65. const letter = py?.[0]?.[0]?.toUpperCase() || '#';
  66. return /^[A-Z]$/.test(letter) ? letter : '#';
  67. }