utils.js 3.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120
  1. import {
  2. Request
  3. } from '@/service/request/index.js'
  4. //格式化日期
  5. //data: 日期对象或时间戳
  6. //format: 格式化字符串,默认"YYYY-MM-DD hh:mm:ss"
  7. export function formatDate(
  8. data,
  9. format = "YYYY-MM-DD hh:mm:ss"
  10. ) {
  11. if (data === null || data === undefined) {
  12. return ""
  13. }
  14. let date = data
  15. if (typeof data === 'object' && !(data instanceof Date)) {
  16. if (data.date) {
  17. date = data.date
  18. } else if (data.timestamp) {
  19. date = data.timestamp * 1000
  20. } else if (Object.keys(data).length === 0) {
  21. // empty object
  22. return ""
  23. }
  24. // If object but no date/timestamp property found, and not a Date object,
  25. // it might be intended as 'date' if it was structured differently,
  26. // but based on previous code, it only looked for date/timestamp.
  27. // However, if we want to support direct values, we assume 'date' holds the value
  28. // extracted above.
  29. // But wait, if data is { other: 1 }, date becomes { other: 1 }. new Date({other:1}) is Invalid Date usually.
  30. }
  31. if (!date) {
  32. return ""
  33. }
  34. const d = new Date(date);
  35. if (isNaN(d.getTime())) {
  36. return ""
  37. }
  38. const year = d.getFullYear();
  39. const month = String(d.getMonth() + 1).padStart(2, "0");
  40. const day = String(d.getDate()).padStart(2, "0");
  41. const hour = String(d.getHours()).padStart(2, "0");
  42. const minute = String(d.getMinutes()).padStart(2, "0");
  43. const second = String(d.getSeconds()).padStart(2, "0");
  44. return format
  45. .replace("YYYY", year)
  46. .replace("MM", month)
  47. .replace("DD", day)
  48. .replace("hh", hour)
  49. .replace("mm", minute)
  50. .replace("ss", second);
  51. }
  52. //获取唯一id
  53. export function getUid(len = 16) {
  54. const ts = Date.now().toString(36);
  55. const rand = Math.random().toString(36).slice(2);
  56. return (ts + rand).slice(0, len);
  57. }
  58. //判断是否有某个功能权限
  59. export function hasFunction(key) {
  60. return new Promise((resolve, reject) => {
  61. Request(
  62. {
  63. url: "/v1/api/basic/home/menu?type=3",
  64. method: 'GET',
  65. }
  66. ).then((res) => {
  67. if (res?.data?.permissions) {
  68. const permissions = res.data.permissions || []
  69. if(Array.isArray(key)) {
  70. resolve(key.map(item => permissions.includes(item)))
  71. } else {
  72. resolve(permissions.includes(key))
  73. }
  74. } else {
  75. reject(res)
  76. }
  77. }).catch(err => {
  78. reject(err)
  79. })
  80. })
  81. }
  82. //
  83. /**
  84. * 分页获取本地数据
  85. * @param {Object} params
  86. * @param {number} params.page 当前页码
  87. * @param {number} params.size 每页条数
  88. * @param {Array} params.initData 原始数据源
  89. * @param {Array} params.data 当前已加载数据
  90. * @returns {Object} { page, data }
  91. */
  92. export function getPaginatedList({ page = 0, size = 10, initData = [], data = [] }) {
  93. if (!data) data = [];
  94. if (
  95. data.length >= initData.length
  96. ) {
  97. return {};
  98. }
  99. const _page = (page || 0) + 1;
  100. const start = (_page - 1) * size;
  101. const end = Math.min(
  102. start + size,
  103. initData?.length || 0
  104. );
  105. data = [
  106. ...data,
  107. ...(initData?.slice(start, end) || []),
  108. ];
  109. return {
  110. page: _page,
  111. data
  112. }
  113. }