common.js 3.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167
  1. import { MessageBox, Message, Notification } from '@zjlib/element-ui2'
  2. export const successMsg = msg => {
  3. Message({
  4. showClose: true,
  5. message: msg || '操作成功',
  6. type: 'success'
  7. })
  8. }
  9. export const errorMsg = msg => {
  10. Message({
  11. showClose: true,
  12. message: msg || '操作成功',
  13. type: 'error'
  14. })
  15. }
  16. export const warningNotify = msg => {
  17. Notification({
  18. title: '提示',
  19. message: msg,
  20. type: 'warning',
  21. duration: 2000
  22. })
  23. }
  24. /**
  25. * 查询按钮权限
  26. * @param {*} value 当前按钮对应code
  27. * @param {*} btnRole 当前路由所有按钮权限
  28. * @returns
  29. */
  30. export const checkBtnRole = (value, btnRole) => {
  31. if (!btnRole) {
  32. return true
  33. }
  34. let index = btnRole.indexOf(value)
  35. return index >= 0
  36. }
  37. /**
  38. * table合计方法
  39. * 注意:sums1,sums2: 需要在获取列表数据时遍历传入需要合计的字段名
  40. * 其中:sums1: 数量,不需要toFixed
  41. * sums2: 金额,需要toFixed
  42. * 例如:res.data.items.forEach(item => {
  43. item.sums1 = ['number'];
  44. item.sums2 = ['totalAmount', 'payAmount'];
  45. })
  46. * @param {*} param
  47. * @returns
  48. */
  49. export const getSummaries = param => {
  50. const { columns, data } = param
  51. const sums = []
  52. columns.forEach((column, index) => {
  53. if (index === 0) {
  54. sums[index] = '合计'
  55. return
  56. }
  57. // console.log(columns);
  58. try {
  59. const values = data.map(item => Number(item[column.property]))
  60. if (data[0] && data[0].sums1.includes(column.property)) {
  61. sums[index] = values.reduce((prev, curr) => {
  62. const value = Number(curr)
  63. if (!isNaN(value)) {
  64. return prev + curr
  65. } else {
  66. return prev
  67. }
  68. }, 0)
  69. sums[index]
  70. }
  71. if (data[0] && data[0].sums2.includes(column.property)) {
  72. sums[index] = values.reduce((prev, curr) => {
  73. const value = Number(curr)
  74. if (!isNaN(value)) {
  75. return prev + curr
  76. } else {
  77. return prev
  78. }
  79. }, 0)
  80. sums[index] = numToFixed(sums[index])
  81. sums[index]
  82. }
  83. } catch {
  84. console.log('error')
  85. }
  86. })
  87. return sums
  88. }
  89. /**
  90. * 保留2位小数点
  91. * @param {number} num
  92. * @returns
  93. */
  94. export const numToFixed = num => {
  95. if (!num) return '0.00'
  96. if (isNaN(Number(num))) return num
  97. num = num.toFixed(2)
  98. if (num.includes('.')) {
  99. return num.slice(0, -3).replace(/(\d)(?=(\d{3})+$)/g, '$1,') + num.slice(-3)
  100. }
  101. return num.replace(/(\d)(?=(\d{3})+$)/g, '$1,')
  102. }
  103. /**
  104. * 深拷贝
  105. * @param
  106. * @returns
  107. */
  108. export const deepClone = obj => {
  109. //判断拷贝的要进行深拷贝的是数组还是对象,是数组的话进行数组拷贝,对象的话进行对象拷贝
  110. var objClone = Array.isArray(obj) ? [] : {}
  111. //进行深拷贝的不能为空,并且是对象或者是
  112. if (obj && typeof obj === 'object') {
  113. for (let key in obj) {
  114. if (obj.hasOwnProperty(key)) {
  115. if (obj[key] && typeof obj[key] === 'object') {
  116. objClone[key] = deepClone(obj[key])
  117. } else {
  118. objClone[key] = obj[key]
  119. }
  120. }
  121. }
  122. }
  123. return objClone
  124. }
  125. /**
  126. *
  127. * @param {*} fn 是我们需要包装的事件回调
  128. * @param {*} delay 是每次推迟执行的等待时间
  129. */
  130. export const debounce = (fn, delay = 1000) => {
  131. // 定时器
  132. let timer = null
  133. // 将debounce处理结果当作函数返回
  134. return function () {
  135. // 保留调用时的this上下文
  136. let context = this
  137. // 保留调用时传入的参数
  138. let args = arguments
  139. // 每次事件被触发时,都去清除之前的旧定时器
  140. // console.log(timer)
  141. if (timer) {
  142. clearTimeout(timer)
  143. }
  144. // 设立新定时器
  145. timer = setTimeout(function () {
  146. fn.apply(context, args)
  147. }, delay)
  148. }
  149. }
  150. export default {
  151. successMsg,
  152. errorMsg,
  153. warningNotify,
  154. checkBtnRole,
  155. getSummaries,
  156. numToFixed,
  157. deepClone
  158. }