lib.js 5.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262
  1. import JsEncrypt from './jsencrypt.min.js'
  2. import * as types from './types'
  3. import { PUBLIC_KEY } from '../config.js'
  4. /**
  5. * guid
  6. */
  7. export function guid() {
  8. function S4() {
  9. return (((1 + Math.random()) * 0x10000) | 0).toString(16).substring(1)
  10. }
  11. return (S4() + S4() + S4() + S4() + S4() + S4() + S4() + S4())
  12. }
  13. /**
  14. * 对象深拷贝
  15. * @author yxk
  16. */
  17. export function deepCopy(target = null) {
  18. let res = null
  19. if (typeof target === 'object') {
  20. if (types.isArray(target)) {
  21. res = []
  22. target.forEach(item => {
  23. res.push(deepCopy(item))
  24. })
  25. } else if (types.isObject(target)) {
  26. res = {}
  27. const keys = Object.keys(target)
  28. keys.forEach(key => {
  29. res[key] = deepCopy(target[key])
  30. })
  31. } else {
  32. res = target
  33. }
  34. } else {
  35. res = target
  36. }
  37. return res
  38. }
  39. /**
  40. * 两个浮点数求和
  41. * @author yxk
  42. * @param num1
  43. * @param num2
  44. * @return {number}
  45. */
  46. export function addOperation(num1, num2) {
  47. let r1, r2, m;
  48. try {
  49. r1 = (num1.toString().split('.')[1] || []).length;
  50. } catch (e) {
  51. r1 = 0;
  52. }
  53. try {
  54. r2 = (num2.toString().split('.')[1] || []).length;
  55. } catch (e) {
  56. r2 = 0;
  57. }
  58. m = Math.pow(10, Math.max(r1, r2));
  59. return Math.round(multiOperation(num1, m) + multiOperation(num2, m)) / m;
  60. }
  61. /**
  62. * 两个浮点数相减
  63. * @author yxk
  64. * @param num1
  65. * @param num2
  66. * @return {number}
  67. */
  68. export function subOperation(num1, num2) {
  69. let r1, r2, m;
  70. try {
  71. r1 = (num1.toString().split('.')[1] || []).length;
  72. } catch (e) {
  73. r1 = 0;
  74. }
  75. try {
  76. r2 = num2.toString().split('.')[1].length;
  77. } catch (e) {
  78. r2 = 0;
  79. }
  80. m = Math.pow(10, Math.max(r1, r2));
  81. return Math.round(multiOperation(num1, m) - multiOperation(num2, m)) / m;
  82. }
  83. /**
  84. * 两个浮点数相乘
  85. * @author yxk
  86. * @param num1
  87. * @param num2
  88. * @return {number}
  89. */
  90. export function multiOperation(num1, num2) {
  91. let m = 0
  92. const s1 = num1.toString()
  93. const s2 = num2.toString()
  94. try {
  95. m += (s1.split('.')[1] || []).length
  96. } catch (e) {
  97. console.log(e)
  98. }
  99. try {
  100. m += (s2.split('.')[1] || []).length
  101. } catch (e) {
  102. console.log(e)
  103. }
  104. return Number(s1.replace('.', '')) * Number(s2.replace('.', '')) / Math.pow(10, m)
  105. }
  106. /**
  107. * 两个浮点数相除
  108. * @author yxk
  109. * @param num1
  110. * @param num2
  111. * @return {number}
  112. */
  113. export function divideOperation(num1, num2) {
  114. let m = 0
  115. const s1 = num1.toString()
  116. const s2 = num2.toString()
  117. try {
  118. m += (s1.split('.')[1] || []).length
  119. } catch (e) {
  120. console.log(e)
  121. }
  122. try {
  123. m += (s2.split('.')[1] || []).length
  124. } catch (e) {
  125. console.log(e)
  126. }
  127. const n1 = multiOperation(num1, Math.pow(10, m))
  128. const n2 = multiOperation(num2, Math.pow(10, m))
  129. return Number(n1) / Number(n2)
  130. }
  131. /**
  132. * 金额转换
  133. * 1234567.05 => 1,234,567.05
  134. * @author yxk
  135. * @param {string|number} num 金额
  136. * @param {string} emptyStr 金额错误时,补空位
  137. * @return {string}
  138. */
  139. export function splitNumber(num, emptyStr = '--') {
  140. if (num === 0) return num
  141. if (!num) return emptyStr
  142. num = Number(num)
  143. if (isNaN(num)) return emptyStr
  144. if (num < 1000) return num.toFixed(2)
  145. num = num.toFixed(2)
  146. let numArr = num.split('.')
  147. let endStr = numArr.length > 1 ? numArr[1] : null
  148. let arr = numArr[0].split('');
  149. let arr0 = [].concat(arr);
  150. let index = 0;
  151. for (let i = arr0.length - 1; i >= 0; i--) {
  152. let j = arr.length - i;
  153. if (i % 3 === 0 && i !== 0) {
  154. arr0.splice(j + index, 0, ',');
  155. index++
  156. }
  157. }
  158. let res = arr0.join('')
  159. return endStr ? `${res}.${endStr}` : res;
  160. }
  161. /**
  162. * 判断是否为手机号
  163. * @param {String} val
  164. */
  165. export function isMobile(val) {
  166. const reg = /^1\d{10}$/
  167. return reg.test(val)
  168. }
  169. /**
  170. * 判断是否为邮箱
  171. * @param {String} val
  172. */
  173. export function isEmail(val) {
  174. const reg = /^([a-zA-Z0-9]+[_|\_|\.]?)*[a-zA-Z0-9]+@([a-zA-Z0-9]+[_|\_|\.]?)*[a-zA-Z0-9]+\.[a-zA-Z]{2,3}$/
  175. return reg.test(val)
  176. }
  177. /**
  178. * 判断Appid
  179. * @param {String} val
  180. */
  181. export function isAppid(val) {
  182. const reg = /[a-zA-Z0-9]{8}/
  183. return reg.test(val)
  184. }
  185. /**
  186. * rpx 转 px
  187. * @param {String|Number} val
  188. */
  189. export function unitToPx(val) {
  190. val = String(val)
  191. if (val.endsWith('rpx')) {
  192. let num = val.replace('rpx', '')
  193. if (isNaN(Number(num))) return val
  194. return uni.upx2px(num) + 'px'
  195. } else {
  196. return val
  197. }
  198. }
  199. /**
  200. * 判断两个对象内容是否相同
  201. * @author yxk
  202. * @param {Object} obj_1
  203. * @param {Object} obj_2
  204. * @return {Boolean}
  205. */
  206. export function compareObj(obj_1, obj_2) {
  207. if (obj_1 === obj_2) return true
  208. if (!types.isObject(obj_1) || !types.isObject(obj_2)) {
  209. return obj_1 === obj_2
  210. }
  211. let keys_1 = Object.keys(obj_1) || []
  212. let keys_2 = Object.keys(obj_2) || []
  213. if (keys_1.length !== keys_2.length) {
  214. keys_1 = keys_2 = null
  215. return false
  216. }
  217. // key 取交集,如果交集数组的长度和不等于数组的长度说明两个数组的值不相同
  218. let keys = keys_1.filter(o => keys_2.includes(o))
  219. if (keys.length !== keys_1.length) {
  220. keys_1 = keys_2 = keys = null
  221. return false
  222. }
  223. for (let i = 0; i < keys.length; i++) {
  224. let key = keys[i]
  225. if (!compareObj(obj_1[key], obj_2[key])) {
  226. keys_1 = keys_2 = keys = null
  227. return false
  228. }
  229. }
  230. keys_1 = keys_2 = keys = null
  231. return true
  232. }
  233. /**
  234. * 加密
  235. * @param {string} str
  236. * @return {string}
  237. */
  238. export function RSAencrypt(str) {
  239. const jse = new JsEncrypt()
  240. jse.setPublicKey(PUBLIC_KEY)
  241. return jse.encrypt(str)
  242. }