utils.js 3.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138
  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. * 生成唯一的ID
  60. * @method guid
  61. * @grammar Base.guid() => String
  62. * @grammar Base.guid( prefix ) => String
  63. */
  64. export const guid = (() => {
  65. let counter = 0;
  66. return (prefix) => {
  67. let id = (+new Date()).toString(32);
  68. for (let i = 0; i < 5; i++) {
  69. id += Math.floor(Math.random() * 65535).toString(32);
  70. }
  71. return (prefix || 'cw_') + id + (counter++).toString(32);
  72. };
  73. })();
  74. //判断是否有某个功能权限
  75. export function hasFunction(key) {
  76. return new Promise((resolve, reject) => {
  77. Request(
  78. {
  79. url: "/v1/api/basic/home/menu?type=3",
  80. method: 'GET',
  81. }
  82. ).then((res) => {
  83. if (res?.data?.permissions) {
  84. const permissions = res.data.permissions || []
  85. if (Array.isArray(key)) {
  86. resolve(key.map(item => permissions.includes(item)))
  87. } else {
  88. resolve(permissions.includes(key))
  89. }
  90. } else {
  91. reject(res)
  92. }
  93. }).catch(err => {
  94. reject(err)
  95. })
  96. })
  97. }
  98. //
  99. /**
  100. * 分页获取本地数据
  101. * @param {Object} params
  102. * @param {number} params.page 当前页码
  103. * @param {number} params.size 每页条数
  104. * @param {Array} params.initData 原始数据源
  105. * @param {Array} params.data 当前已加载数据
  106. * @returns {Object} { page, data }
  107. */
  108. export function getPaginatedList({ page = 0, size = 10, initData = [], data = [] }) {
  109. if (!data) data = [];
  110. if (
  111. data.length >= initData.length
  112. ) {
  113. return {};
  114. }
  115. const _page = (page || 0) + 1;
  116. const start = (_page - 1) * size;
  117. const end = Math.min(
  118. start + size,
  119. initData?.length || 0
  120. );
  121. data = [
  122. ...data,
  123. ...(initData?.slice(start, end) || []),
  124. ];
  125. return {
  126. page: _page,
  127. data
  128. }
  129. }