spreadUtils.ts 1.5 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152
  1. /**
  2. * 纯工具函数 —— 类型判断、数据转换、日期解析
  3. * 无组件状态依赖、无副作用(除类型转换的 console.error)
  4. */
  5. export function is(val, type) {
  6. return Object.prototype.toString.call(val) === `[object ${type}]`
  7. }
  8. export function changeStringToObject(json) {
  9. if (is(json, 'String') && json?.length) {
  10. return changeStringToObject(JSON.parse(json))
  11. } else if (is(json, 'Object')) {
  12. return json
  13. } else {
  14. console.error('数据类型不正确!')
  15. return null
  16. }
  17. }
  18. export function base64ToBlob(base64Data, contentType = '') {
  19. const byteCharacters = atob(base64Data)
  20. const byteNumbers = new Array(byteCharacters.length)
  21. for (let i = 0; i < byteCharacters.length; i++) {
  22. byteNumbers[i] = byteCharacters.charCodeAt(i)
  23. }
  24. const byteArray = new Uint8Array(byteNumbers)
  25. return new Blob([byteArray], { type: contentType })
  26. }
  27. export function blobToBase64(blob) {
  28. return new Promise((resolve, reject) => {
  29. const reader = new FileReader()
  30. reader.onload = () => {
  31. const base64 = reader.result.split(',')[1]
  32. resolve(base64)
  33. }
  34. reader.onerror = reject
  35. reader.readAsDataURL(blob)
  36. })
  37. }
  38. export function formatterOADateNumber(input) {
  39. const regex = /OADate\(([\d.]+)\)/
  40. const match = input.match(regex)
  41. let OADate = null
  42. if (match && match[1]) {
  43. OADate = Number(match[1])
  44. OADate = isNaN(OADate) ? null : parseInt(OADate)
  45. }
  46. return OADate !== null ? new Date(Math.round(OADate - 25569) * 86400000) : null
  47. }