lgutils 1.3.30 → 1.3.42

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/LICENSE.md ADDED
@@ -0,0 +1 @@
1
+ # lgutils
package/README.md CHANGED
@@ -1 +1 @@
1
- # syutils
1
+ # lgutils
package/index.d.ts CHANGED
@@ -1,4 +1,7 @@
1
- export declare const accAdd: (arg1: number, arg2: number) => number
1
+ import { parse } from 'qs'
2
+ import { stringify } from 'qs'
3
+
4
+ export declare function accAdd(a: number | string, b: number | string): number
2
5
 
3
6
  export declare const accDiv: (arg1: number, arg2: number) => number
4
7
 
@@ -81,6 +84,21 @@ export declare function formatDuration(period: string): string
81
84
 
82
85
  export declare const formatDurationNil: (d: string | null | undefined) => string
83
86
 
87
+ /**
88
+ * 金额格式化为万元,带千分位,最多保留6位小数
89
+ * @param amount 金额(元)
90
+ * @returns 格式化后的金额(万元)
91
+ */
92
+ export declare function formatNumWithUnit(
93
+ num: number | string,
94
+ min?: number,
95
+ max?: number,
96
+ unit?: string | boolean,
97
+ useOrg?: boolean,
98
+ showNull?: boolean,
99
+ type?: number,
100
+ ): string | undefined
101
+
84
102
  export declare const formatRatio: (
85
103
  n:
86
104
  | number
@@ -174,12 +192,16 @@ export declare const os: () => {
174
192
  isIos: boolean
175
193
  }
176
194
 
195
+ export { parse }
196
+
177
197
  export declare const playAudio: (mp3Id: string) => void
178
198
 
179
199
  export declare const random: (min: number, max: number) => number
180
200
 
181
201
  export declare const randomString: (len?: number) => string
182
202
 
203
+ export declare const randomWithCrypto: () => string
204
+
183
205
  export declare const removeAll: () => any
184
206
 
185
207
  export declare const removeItem: (key: string) => any
@@ -188,6 +210,11 @@ export declare const setItem: (key: string, value: any) => any
188
210
 
189
211
  export declare const setProxyObj: (data: object, getFn: () => void, setFn: () => void) => object
190
212
 
213
+ export declare const sOptions: {
214
+ key: number
215
+ value: number
216
+ }[]
217
+
191
218
  export declare const sortObj: <
192
219
  T extends keyof D,
193
220
  D extends {
@@ -199,6 +226,8 @@ export declare const sortObj: <
199
226
  type?: 'asc' | 'desc',
200
227
  ) => D[]
201
228
 
229
+ export { stringify }
230
+
202
231
  export declare const sumObj: <
203
232
  T extends keyof D,
204
233
  D extends {
@@ -35,6 +35,7 @@ const isSMSCode = (code) => {
35
35
  return code.match(/^\d{6}$/);
36
36
  };
37
37
  const random = (min, max) => Math.round(Math.random() * (max - min) + min);
38
+ const randomWithCrypto = () => crypto.randomUUID();
38
39
  const playAudio = (mp3Id) => {
39
40
  const audioArr = document.querySelectorAll('audio');
40
41
  Array.from(audioArr).forEach((mp3) => {
@@ -89,7 +90,7 @@ const getQueryObject = (url = window.location.href) => {
89
90
  // return rs
90
91
  // })
91
92
  const search = (_a = url.split('?')) === null || _a === void 0 ? void 0 : _a[1];
92
- return qs.parse(search || '', { decoder: str => str });
93
+ return qs.parse(search || '', { decoder: (str) => str });
93
94
  };
94
95
  const getSearchParams = (search) => new URLSearchParams(search);
95
96
  const fileReaderToBase64 = (target) => (cb) => {
@@ -161,23 +162,20 @@ const accDiv = (arg1, arg2) => {
161
162
  return (r1 / r2) * Math.pow(10, t2 - t1);
162
163
  };
163
164
  // 加
164
- const accAdd = (arg1, arg2) => {
165
- let r1, r2, m;
166
- try {
167
- r1 = arg1.toString().split('.')[1].length;
165
+ function accAdd(a, b) {
166
+ let aStr = a.toString();
167
+ let bStr = b.toString();
168
+ let aDecimal = 0, bDecimal = 0;
169
+ if (aStr.indexOf('.') > -1) {
170
+ aDecimal = aStr.split('.')[1].length;
168
171
  }
169
- catch (e) {
170
- r1 = 0;
171
- }
172
- try {
173
- r2 = arg2.toString().split('.')[1].length;
172
+ if (bStr.indexOf('.') > -1) {
173
+ bDecimal = bStr.split('.')[1].length;
174
174
  }
175
- catch (e) {
176
- r2 = 0;
177
- }
178
- m = Math.pow(10, Math.max(r1, r2));
179
- return (arg1 * m + arg2 * m) / m;
180
- };
175
+ const base = Math.pow(10, Math.max(aDecimal, bDecimal));
176
+ // 使用 Number 防止 string 拼接
177
+ return Number(+a * base + +b * base) / base;
178
+ }
181
179
  // 减
182
180
  const accSub = function (arg1, arg2) {
183
181
  let r1, r2, m, n;
@@ -234,7 +232,80 @@ const loopData = (arr, childkey = 'children') => {
234
232
  }
235
233
  }
236
234
  return arr;
237
- };
235
+ };
236
+ /**
237
+ * 金额格式化为万元,带千分位,最多保留6位小数
238
+ * @param amount 金额(元)
239
+ * @returns 格式化后的金额(万元)
240
+ */
241
+ function formatNumWithUnit(num, min = 2, max = 2, unit = '', useOrg = false, showNull = false, type = 2) {
242
+ if ((!num || num == '' || num == '-') && num !== 0)
243
+ return showNull ? undefined : '-';
244
+ // 转换为数字
245
+ let _num = typeof num === 'string' ? parseFloat(num) : num;
246
+ const isLt0 = +_num < 0;
247
+ if (isLt0)
248
+ _num = 0 - _num;
249
+ if (!isNumber(_num) || isNaN(+_num))
250
+ return _num;
251
+ // const isBillion = num / (10000 * 10000) >= 1
252
+ const _obj = sOptions === null || sOptions === void 0 ? void 0 : sOptions[type];
253
+ // 转换为万元
254
+ let wan = _num;
255
+ if (!useOrg) {
256
+ wan = (isLt0 ? 0 - _num : _num) / _obj.key; //_num / 10000
257
+ }
258
+ else {
259
+ wan = isLt0 ? 0 - _num : _num;
260
+ }
261
+ if (unit === true)
262
+ unit = _obj === null || _obj === void 0 ? void 0 : _obj.label;
263
+ // 处理小数位数
264
+ let result = wan;
265
+ const decimalStr = wan.toString().split('.')[1];
266
+ if (decimalStr && decimalStr.length > max) {
267
+ result = Number(wan.toFixed(max));
268
+ }
269
+ // 添加千分位
270
+ return (result.toLocaleString('en-US', {
271
+ minimumFractionDigits: min,
272
+ maximumFractionDigits: max,
273
+ }) +
274
+ ' ' +
275
+ unit);
276
+ }
277
+ const sOptions = [
278
+ {
279
+ // label: '元',
280
+ key: 1,
281
+ value: 0,
282
+ },
283
+ {
284
+ // label: '千元',
285
+ key: 1000,
286
+ value: 1,
287
+ },
288
+ {
289
+ // label: '万元',
290
+ key: 10000,
291
+ value: 2,
292
+ },
293
+ {
294
+ // label: '百万元',
295
+ key: 1000000,
296
+ value: 3,
297
+ },
298
+ {
299
+ // label: '亿元',
300
+ key: 100000000,
301
+ value: 4,
302
+ },
303
+ {
304
+ // label: '十亿元',
305
+ key: 1000000000,
306
+ value: 5,
307
+ },
308
+ ];
238
309
 
239
310
  const storage = inBrowser ? localStorage : {};
240
311
  const prefix = '';
@@ -316,7 +387,8 @@ function digitCnUppercase(n) {
316
387
  .replace(/^整$/, '零元整'));
317
388
  }
318
389
  function formatDate(d, formatType = SERVER_DATE_FROMAT) {
319
- return dayjs__default(new Date(d)).format(formatType);
390
+ return dayjs__default(d).format(formatType);
391
+ // return dayjs(new Date(d)).format(formatType)
320
392
  }
321
393
  const formatDateNil = withDefaultNil(formatDate);
322
394
  const unit = {
@@ -569,6 +641,8 @@ function copyToClipboard(txt) {
569
641
  document.body.removeChild(textarea);
570
642
  }
571
643
 
644
+ exports.parse = qs.parse;
645
+ exports.stringify = qs.stringify;
572
646
  exports.DATE_FORMAT = DATE_FORMAT;
573
647
  exports.FORMAT_DATE = FORMAT_DATE;
574
648
  exports.FORMAT_TIME = FORMAT_TIME;
@@ -597,6 +671,7 @@ exports.formatDate = formatDate;
597
671
  exports.formatDateNil = formatDateNil;
598
672
  exports.formatDuration = formatDuration;
599
673
  exports.formatDurationNil = formatDurationNil;
674
+ exports.formatNumWithUnit = formatNumWithUnit;
600
675
  exports.formatRatio = formatRatio;
601
676
  exports.formatRatioNil = formatRatioNil;
602
677
  exports.getBase64 = getBase64;
@@ -627,8 +702,10 @@ exports.os = os;
627
702
  exports.playAudio = playAudio;
628
703
  exports.random = random;
629
704
  exports.randomString = randomString;
705
+ exports.randomWithCrypto = randomWithCrypto;
630
706
  exports.removeAll = removeAll;
631
707
  exports.removeItem = removeItem;
708
+ exports.sOptions = sOptions;
632
709
  exports.setItem = setItem;
633
710
  exports.setProxyObj = setProxyObj;
634
711
  exports.sortObj = sortObj;
@@ -1 +1 @@
1
- "use strict";Object.defineProperty(exports,"__esModule",{value:!0});var e=require("qs"),t=require("dayjs"),o=require("d3-format");function r(e){return e&&"object"==typeof e&&"default"in e?e.default:e}var s=r(t);const n=(...e)=>{console.group("====================="),console.info(...e),console.groupEnd()},i="undefined"!=typeof window,a=e=>Array.isArray(e),c=e=>e&&"number"==typeof e.size&&"string"==typeof e.type&&"function"==typeof e.slice,l=(e,t="children")=>{if(!a(e))return[];for(const o of e)o[t]&&o[t].length&&(o.children=[...o[t]],null==o||delete o.childList,l(o.children,t));return e},d=i?localStorage:{};let p={};const u=o.format(",.2f"),h=o.format(","),m=o.format(".2%"),f=w(u),x=w(h),g=w(m);function w(e){return t=>b(t)?v:e(t)}const y=e=>u(e/1e4),M=w(y),b=e=>null==e||""===e,v="——";function S(e,t="YYYY-MM-DD"){return s(new Date(e)).format(t)}const D=w(S),T={d:"天",m:"个月",y:"年"};function A(e){return e?`${parseInt(e,10)}${T[e.slice(-1).toLowerCase()]}`:e}const k=w(A);exports.DATE_FORMAT="YYYY/MM/DD",exports.FORMAT_DATE="YYYY-MM-DD",exports.FORMAT_TIME="YYYY-MM-DD HH:mm:ss",exports.NIL_STRING=v,exports.WS=class{constructor(e,t){this.socket=null,this.timer=null,this.ioUrl="",this.heartTime=1e4;this.ioUrl=e,this.socket=t?new WebSocket(e,t):new WebSocket(e)}init(e){const t=this;t.heartInfo=(null==e?void 0:e.heartInfo)?JSON.stringify(null==e?void 0:e.heartInfo):"ws HeartBeat!",t.socket.addEventListener("open",(()=>{n("ws connect!"),t.start(t.heartInfo),e.open&&e.open()}),!1),t.socket.addEventListener("disconnect",(()=>{console.info("[ws info]: disconnect and reconnect... "),e.disconnect&&e.disconnect(),t.socket=new WebSocket(t.ioUrl)}),!1),t.socket.addEventListener("error",(t=>{console.info("---------------"),console.info("[ws error]: "),console.info(t),console.info("---------------"),e.error&&e.error()}),!1),t.socket.addEventListener("close",e.close,!1),t.socket.addEventListener("message",(o=>{t.reset(),e.msg(o)}),!1)}close(){this.timer&&clearTimeout(this.timer),console.info("[ws close]: close!"),this.socket.close()}start(e){const t=this;t.timer=setTimeout((()=>{t.socket.send(e)}),t.heartTime)}send(e){this.socket.send(e)}reset(){const e=this;clearTimeout(e.timer),e.start(e.heartInfo)}getSocketState(){return this.socket.readyState}setHeartTime(e){this.heartTime=e,this.reset()}},exports.accAdd=(e,t)=>{let o,r,s;try{o=e.toString().split(".")[1].length}catch(n){o=0}try{r=t.toString().split(".")[1].length}catch(n){r=0}return s=Math.pow(10,Math.max(o,r)),(e*s+t*s)/s},exports.accDiv=(e,t)=>{let o,r,s=0,n=0;try{s=e.toString().split(".")[1].length}catch(i){}try{n=t.toString().split(".")[1].length}catch(i){}return o=Number(e.toString().replace(".","")),r=Number(t.toString().replace(".","")),o/r*Math.pow(10,n-s)},exports.accMul=(e,t)=>{let o=0,r=e.toString(),s=t.toString();try{o+=r.split(".")[1].length}catch(n){}try{o+=s.split(".")[1].length}catch(n){}return Number(r.replace(".",""))*Number(s.replace(".",""))/Math.pow(10,o)},exports.accSub=function(e,t){let o,r,s,n;try{o=e.toString().split(".")[1].length}catch(i){o=0}try{r=t.toString().split(".")[1].length}catch(i){r=0}return s=Math.pow(10,Math.max(o,r)),n=o>=r?o:r,((e*s-t*s)/s).toFixed(n)},exports.copyToClipboard=function(e){var t=document.createElement("textarea");t.value=e,document.body.appendChild(t),t.select(),document.execCommand("copy"),document.body.removeChild(t)},exports.cutTimeFn=e=>`00‘${0===e?"00":"0"+Math.floor(e/60)}’${0===e?"00":e%60>=10?e%60:"0"+e%60}`,exports.digitCnUppercase=function(e){var t=["角","分"],o=["零","壹","贰","叁","肆","伍","陆","柒","捌","玖"],r=[["元","万","亿"],["","拾","佰","仟"]],s=e<0?"欠":"";e=Math.abs(e);for(var n="",i=0;i<t.length;i++)n+=(o[Math.floor(10*e*Math.pow(10,i))%10]+t[i]).replace(/零./,"");for(n=n||"整",e=Math.floor(e),i=0;i<r[0].length&&e>0;i++){for(var a="",c=0;c<r[1].length&&e>0;c++)a=o[e%10]+r[1][c]+a,e=Math.floor(e/10);n=a.replace(/(零.)*零$/,"").replace(/^$/,"零")+r[0][i]+n}return s+n.replace(/(零.)*零元/,"元").replace(/(零.)+/g,"零").replace(/^整$/,"零元整")},exports.disableBrowserZoom=function(){document.addEventListener("keydown",(function(e){!0!==e.ctrlKey&&!0!==e.metaKey||61!==e.which&&107!==e.which&&173!==e.which&&109!==e.which&&187!==e.which&&189!==e.which||e.preventDefault()}),!1),window.addEventListener("mousewheel",(function(e){(!0===e.ctrlKey||e.metaKey)&&e.preventDefault()}),{passive:!1}),window.addEventListener("DOMMouseScroll",(function(e){(!0===e.ctrlKey||e.metaKey)&&e.preventDefault()}),{passive:!1})},exports.download=(e,t="download",o="application/octet-stream",r)=>{const s=window;let n=o,i=e;const a=document,c=a.createElement("a"),l=e=>String(e),d=s.Blob||l(c),p=t;let u=null,h=null;const m=(t,o)=>{if("download"in c)return c.href=r?e:t,c.setAttribute("download",p),c.innerHTML="downloading...",a.body.appendChild(c),setTimeout((()=>{c.click(),a.body.removeChild(c),!0===o&&setTimeout((()=>{s.URL.revokeObjectURL(c.href)}),250)}),66),!0;const n=a.createElement("iframe");a.body.appendChild(n),o||(t="data:"+t.replace(/^data:([\w\/\-\+]+)/,"application/octet-stream")),n.src=t,setTimeout((()=>{a.body.removeChild(n)}),333)};if(String(i).match(/^data\:[\w+\-]+\/[\w+\-]+[,;]/))return m(i);try{u=i instanceof d?i:new d([i],{type:n})}catch(f){}if(s.URL)m(s.URL.createObjectURL(u),!0);else{if("string"==typeof u||u.constructor===l(c))try{return m("data:"+n+";base64,"+s.btoa(u))}catch(f){return m("data:"+n+","+encodeURIComponent(u))}h=new FileReader,h.onload=function(){m(this.result)},h.readAsDataURL(u)}return!0},exports.fileReaderToBase64=e=>t=>{const o=new FileReader;o.onload=e=>{t&&t(e.target.result)},o.readAsDataURL(e)},exports.filterNil=e=>{const t={};return Object.entries(e).forEach((([e,o])=>{o&&0!==o&&(t[e]=o)})),t},exports.format10k=y,exports.format10kNil=M,exports.formatBillion=e=>{const t=e/1e8>=1,o=t?"亿":"万";return`${u(t?e/1e8:e/1e4)}${o}`},exports.formatCash=u,exports.formatCash2=e=>(Math.floor(100*e)/100).toFixed(2),exports.formatCashInt=h,exports.formatCashIntNil=x,exports.formatCashNil=f,exports.formatDate=S,exports.formatDateNil=D,exports.formatDuration=A,exports.formatDurationNil=k,exports.formatRatio=m,exports.formatRatioNil=g,exports.getBase64=e=>new Promise(((t,o)=>{const r=new FileReader;r.readAsDataURL(e),r.onload=()=>t(r.result),r.onerror=e=>o(e)})),exports.getItem=e=>((p[e]||d.getItem(""+e))&&(p[e]=d.getItem(""+e)?JSON.parse(d.getItem(""+e)||"null"):""),p[e]),exports.getQueryObject=(t=window.location.href)=>{var o;const r=null===(o=t.split("?"))||void 0===o?void 0:o[1];return e.parse(r||"",{decoder:e=>e})},exports.getSearchParams=e=>new URLSearchParams(e),exports.getValOfArr=e=>{const t=e.length,o=e.reduce(((e,t)=>e+t),0),r=e.reduce(((e,t)=>e*t),1);return{min:Math.min.apply(null,e),max:Math.max.apply(null,e),sum:o,average:o/t,mull:r}},exports.getValueWithNil=e=>b(e)?v:e,exports.inBrowser=i,exports.isArray=a,exports.isBlob=c,exports.isCardNo=e=>/^(\d{15}$|^\d{18}$|^\d{17}(\d|X|x))$/.test(e),exports.isDate=e=>!!e&&s(e).isValid(),exports.isEmail=e=>/^(.+)@(.+)\.(.+)$/.test(e),exports.isFile=e=>c(e)&&"string"==typeof e.name&&("object"==typeof e.lastModifiedDate||"number"==typeof e.lastModified),exports.isMinigram=()=>!!(null===window||void 0===window?void 0:window.__wxjs_environment),exports.isNil=b,exports.isNull=e=>null===e,exports.isNumber=e=>/^[0-9]*(.[0-9]*)?$/.test(e+""),exports.isObject=e=>e===Object(e),exports.isPhone=e=>/^[1](\d{10})$/.test(e),exports.isSMSCode=e=>e.match(/^\d{6}$/),exports.isUndefined=e=>void 0===e,exports.isWX=()=>{const e=navigator.userAgent.toLowerCase();return/MicroMessenger/i.test(e)},exports.log=n,exports.loopData=l,exports.os=()=>{if(!i)return{isTablet:!1,isPhone:!1,isAndroid:!1,isPc:!1,isIos:!1,isPad:!1};const e=navigator.userAgent,t=/(?:Windows Phone)/.test(e),o=/(?:SymbianOS)/.test(e)||t,r=/(?:Android)/.test(e),s=/(?:Firefox)/.test(e),n=/(?:iPad|PlayBook)/.test(e)||r&&!/(?:Mobile)/.test(e)||s&&/(?:Tablet)/.test(e),a=/(?:iPhone)/.test(e)&&!n,c=/(?:iPad)/.test(e)&&!n;return{isTablet:n,isPhone:a,isAndroid:r,isPc:!a&&!r&&!o,isPad:c,isIos:a||c}},exports.playAudio=e=>{const t=document.querySelectorAll("audio");Array.from(t).forEach((e=>{e.pause(),e.currentTime=0})),document.querySelector(`#${e}`).play()},exports.random=(e,t)=>Math.round(Math.random()*(t-e)+e),exports.randomString=(e=32)=>{const t="ABCDEFGHJKMNPQRSTWXYZabcdefhijkmnprstwxyz2345678",o=t.length;let r="";for(let s=0;s<e;s++)r+=t.charAt(Math.floor(Math.random()*o));return r},exports.removeAll=()=>(p={},d.clear()),exports.removeItem=e=>(delete p[e],d.removeItem(""+e)),exports.setItem=(e,t)=>(p[e]=t,d.setItem(""+e,JSON.stringify(t))),exports.setProxyObj=(e,t,o)=>new Proxy(e,{get:(e,o)=>(t(),Reflect.get(e,o)),set:(e,t,r)=>(o(),Reflect.set(e,t,r))}),exports.sortObj=(e,t,o="asc")=>e.sort(((e,r)=>"asc"===o?e[t]-r[t]:r[t]-e[t])),exports.sumObj=(e,t)=>e.reduce(((e,o)=>o[t]+e),0),exports.trimString=e=>e.replace(/(^\s*)|(\s*$)/g,"");
1
+ "use strict";Object.defineProperty(exports,"__esModule",{value:!0});var e=require("qs"),t=require("dayjs"),o=require("d3-format");function r(e){return e&&"object"==typeof e&&"default"in e?e.default:e}var s=r(t);const n=(...e)=>{console.group("====================="),console.info(...e),console.groupEnd()},i="undefined"!=typeof window,a=e=>/^[0-9]*(.[0-9]*)?$/.test(e+""),l=e=>Array.isArray(e),c=e=>e&&"number"==typeof e.size&&"string"==typeof e.type&&"function"==typeof e.slice;const d=(e,t="children")=>{if(!l(e))return[];for(const o of e)o[t]&&o[t].length&&(o.children=[...o[t]],null==o||delete o.childList,d(o.children,t));return e};const p=[{key:1,value:0},{key:1e3,value:1},{key:1e4,value:2},{key:1e6,value:3},{key:1e8,value:4},{key:1e9,value:5}],u=i?localStorage:{};let m={};const h=o.format(",.2f"),f=o.format(","),x=o.format(".2%"),g=v(h),y=v(f),w=v(x);function v(e){return t=>S(t)?k:e(t)}const b=e=>h(e/1e4),M=v(b),S=e=>null==e||""===e,k="——";function D(e,t="YYYY-MM-DD"){return s(e).format(t)}const N=v(D),T={d:"天",m:"个月",y:"年"};function A(e){return e?`${parseInt(e,10)}${T[e.slice(-1).toLowerCase()]}`:e}const I=v(A);exports.parse=e.parse,exports.stringify=e.stringify,exports.DATE_FORMAT="YYYY/MM/DD",exports.FORMAT_DATE="YYYY-MM-DD",exports.FORMAT_TIME="YYYY-MM-DD HH:mm:ss",exports.NIL_STRING=k,exports.WS=class{constructor(e,t){this.socket=null,this.timer=null,this.ioUrl="",this.heartTime=1e4;this.ioUrl=e,this.socket=t?new WebSocket(e,t):new WebSocket(e)}init(e){const t=this;t.heartInfo=(null==e?void 0:e.heartInfo)?JSON.stringify(null==e?void 0:e.heartInfo):"ws HeartBeat!",t.socket.addEventListener("open",(()=>{n("ws connect!"),t.start(t.heartInfo),e.open&&e.open()}),!1),t.socket.addEventListener("disconnect",(()=>{console.info("[ws info]: disconnect and reconnect... "),e.disconnect&&e.disconnect(),t.socket=new WebSocket(t.ioUrl)}),!1),t.socket.addEventListener("error",(t=>{console.info("---------------"),console.info("[ws error]: "),console.info(t),console.info("---------------"),e.error&&e.error()}),!1),t.socket.addEventListener("close",e.close,!1),t.socket.addEventListener("message",(o=>{t.reset(),e.msg(o)}),!1)}close(){this.timer&&clearTimeout(this.timer),console.info("[ws close]: close!"),this.socket.close()}start(e){const t=this;t.timer=setTimeout((()=>{t.socket.send(e)}),t.heartTime)}send(e){this.socket.send(e)}reset(){const e=this;clearTimeout(e.timer),e.start(e.heartInfo)}getSocketState(){return this.socket.readyState}setHeartTime(e){this.heartTime=e,this.reset()}},exports.accAdd=function(e,t){let o=e.toString(),r=t.toString(),s=0,n=0;o.indexOf(".")>-1&&(s=o.split(".")[1].length),r.indexOf(".")>-1&&(n=r.split(".")[1].length);const i=Math.pow(10,Math.max(s,n));return Number(+e*i+ +t*i)/i},exports.accDiv=(e,t)=>{let o,r,s=0,n=0;try{s=e.toString().split(".")[1].length}catch(i){}try{n=t.toString().split(".")[1].length}catch(i){}return o=Number(e.toString().replace(".","")),r=Number(t.toString().replace(".","")),o/r*Math.pow(10,n-s)},exports.accMul=(e,t)=>{let o=0,r=e.toString(),s=t.toString();try{o+=r.split(".")[1].length}catch(n){}try{o+=s.split(".")[1].length}catch(n){}return Number(r.replace(".",""))*Number(s.replace(".",""))/Math.pow(10,o)},exports.accSub=function(e,t){let o,r,s,n;try{o=e.toString().split(".")[1].length}catch(i){o=0}try{r=t.toString().split(".")[1].length}catch(i){r=0}return s=Math.pow(10,Math.max(o,r)),n=o>=r?o:r,((e*s-t*s)/s).toFixed(n)},exports.copyToClipboard=function(e){var t=document.createElement("textarea");t.value=e,document.body.appendChild(t),t.select(),document.execCommand("copy"),document.body.removeChild(t)},exports.cutTimeFn=e=>`00‘${0===e?"00":"0"+Math.floor(e/60)}’${0===e?"00":e%60>=10?e%60:"0"+e%60}`,exports.digitCnUppercase=function(e){var t=["角","分"],o=["零","壹","贰","叁","肆","伍","陆","柒","捌","玖"],r=[["元","万","亿"],["","拾","佰","仟"]],s=e<0?"欠":"";e=Math.abs(e);for(var n="",i=0;i<t.length;i++)n+=(o[Math.floor(10*e*Math.pow(10,i))%10]+t[i]).replace(/零./,"");for(n=n||"整",e=Math.floor(e),i=0;i<r[0].length&&e>0;i++){for(var a="",l=0;l<r[1].length&&e>0;l++)a=o[e%10]+r[1][l]+a,e=Math.floor(e/10);n=a.replace(/(零.)*零$/,"").replace(/^$/,"零")+r[0][i]+n}return s+n.replace(/(零.)*零元/,"元").replace(/(零.)+/g,"零").replace(/^整$/,"零元整")},exports.disableBrowserZoom=function(){document.addEventListener("keydown",(function(e){!0!==e.ctrlKey&&!0!==e.metaKey||61!==e.which&&107!==e.which&&173!==e.which&&109!==e.which&&187!==e.which&&189!==e.which||e.preventDefault()}),!1),window.addEventListener("mousewheel",(function(e){(!0===e.ctrlKey||e.metaKey)&&e.preventDefault()}),{passive:!1}),window.addEventListener("DOMMouseScroll",(function(e){(!0===e.ctrlKey||e.metaKey)&&e.preventDefault()}),{passive:!1})},exports.download=(e,t="download",o="application/octet-stream",r)=>{const s=window;let n=o,i=e;const a=document,l=a.createElement("a"),c=e=>String(e),d=s.Blob||c(l),p=t;let u=null,m=null;const h=(t,o)=>{if("download"in l)return l.href=r?e:t,l.setAttribute("download",p),l.innerHTML="downloading...",a.body.appendChild(l),setTimeout((()=>{l.click(),a.body.removeChild(l),!0===o&&setTimeout((()=>{s.URL.revokeObjectURL(l.href)}),250)}),66),!0;const n=a.createElement("iframe");a.body.appendChild(n),o||(t="data:"+t.replace(/^data:([\w\/\-\+]+)/,"application/octet-stream")),n.src=t,setTimeout((()=>{a.body.removeChild(n)}),333)};if(String(i).match(/^data\:[\w+\-]+\/[\w+\-]+[,;]/))return h(i);try{u=i instanceof d?i:new d([i],{type:n})}catch(f){}if(s.URL)h(s.URL.createObjectURL(u),!0);else{if("string"==typeof u||u.constructor===c(l))try{return h("data:"+n+";base64,"+s.btoa(u))}catch(f){return h("data:"+n+","+encodeURIComponent(u))}m=new FileReader,m.onload=function(){h(this.result)},m.readAsDataURL(u)}return!0},exports.fileReaderToBase64=e=>t=>{const o=new FileReader;o.onload=e=>{t&&t(e.target.result)},o.readAsDataURL(e)},exports.filterNil=e=>{const t={};return Object.entries(e).forEach((([e,o])=>{o&&0!==o&&(t[e]=o)})),t},exports.format10k=b,exports.format10kNil=M,exports.formatBillion=e=>{const t=e/1e8>=1,o=t?"亿":"万";return`${h(t?e/1e8:e/1e4)}${o}`},exports.formatCash=h,exports.formatCash2=e=>(Math.floor(100*e)/100).toFixed(2),exports.formatCashInt=f,exports.formatCashIntNil=y,exports.formatCashNil=g,exports.formatDate=D,exports.formatDateNil=N,exports.formatDuration=A,exports.formatDurationNil=I,exports.formatNumWithUnit=function(e,t=2,o=2,r="",s=!1,n=!1,i=2){if((!e||""==e||"-"==e)&&0!==e)return n?void 0:"-";let l="string"==typeof e?parseFloat(e):e;const c=+l<0;if(c&&(l=0-l),!a(l)||isNaN(+l))return l;const d=null==p?void 0:p[i];let u=l;u=s?c?0-l:l:(c?0-l:l)/d.key,!0===r&&(r=null==d?void 0:d.label);let m=u;const h=u.toString().split(".")[1];return h&&h.length>o&&(m=Number(u.toFixed(o))),m.toLocaleString("en-US",{minimumFractionDigits:t,maximumFractionDigits:o})+" "+r},exports.formatRatio=x,exports.formatRatioNil=w,exports.getBase64=e=>new Promise(((t,o)=>{const r=new FileReader;r.readAsDataURL(e),r.onload=()=>t(r.result),r.onerror=e=>o(e)})),exports.getItem=e=>((m[e]||u.getItem(""+e))&&(m[e]=u.getItem(""+e)?JSON.parse(u.getItem(""+e)||"null"):""),m[e]),exports.getQueryObject=(t=window.location.href)=>{var o;const r=null===(o=t.split("?"))||void 0===o?void 0:o[1];return e.parse(r||"",{decoder:e=>e})},exports.getSearchParams=e=>new URLSearchParams(e),exports.getValOfArr=e=>{const t=e.length,o=e.reduce(((e,t)=>e+t),0),r=e.reduce(((e,t)=>e*t),1);return{min:Math.min.apply(null,e),max:Math.max.apply(null,e),sum:o,average:o/t,mull:r}},exports.getValueWithNil=e=>S(e)?k:e,exports.inBrowser=i,exports.isArray=l,exports.isBlob=c,exports.isCardNo=e=>/^(\d{15}$|^\d{18}$|^\d{17}(\d|X|x))$/.test(e),exports.isDate=e=>!!e&&s(e).isValid(),exports.isEmail=e=>/^(.+)@(.+)\.(.+)$/.test(e),exports.isFile=e=>c(e)&&"string"==typeof e.name&&("object"==typeof e.lastModifiedDate||"number"==typeof e.lastModified),exports.isMinigram=()=>!!(null===window||void 0===window?void 0:window.__wxjs_environment),exports.isNil=S,exports.isNull=e=>null===e,exports.isNumber=a,exports.isObject=e=>e===Object(e),exports.isPhone=e=>/^[1](\d{10})$/.test(e),exports.isSMSCode=e=>e.match(/^\d{6}$/),exports.isUndefined=e=>void 0===e,exports.isWX=()=>{const e=navigator.userAgent.toLowerCase();return/MicroMessenger/i.test(e)},exports.log=n,exports.loopData=d,exports.os=()=>{if(!i)return{isTablet:!1,isPhone:!1,isAndroid:!1,isPc:!1,isIos:!1,isPad:!1};const e=navigator.userAgent,t=/(?:Windows Phone)/.test(e),o=/(?:SymbianOS)/.test(e)||t,r=/(?:Android)/.test(e),s=/(?:Firefox)/.test(e),n=/(?:iPad|PlayBook)/.test(e)||r&&!/(?:Mobile)/.test(e)||s&&/(?:Tablet)/.test(e),a=/(?:iPhone)/.test(e)&&!n,l=/(?:iPad)/.test(e)&&!n;return{isTablet:n,isPhone:a,isAndroid:r,isPc:!a&&!r&&!o,isPad:l,isIos:a||l}},exports.playAudio=e=>{const t=document.querySelectorAll("audio");Array.from(t).forEach((e=>{e.pause(),e.currentTime=0})),document.querySelector(`#${e}`).play()},exports.random=(e,t)=>Math.round(Math.random()*(t-e)+e),exports.randomString=(e=32)=>{const t="ABCDEFGHJKMNPQRSTWXYZabcdefhijkmnprstwxyz2345678",o=t.length;let r="";for(let s=0;s<e;s++)r+=t.charAt(Math.floor(Math.random()*o));return r},exports.randomWithCrypto=()=>crypto.randomUUID(),exports.removeAll=()=>(m={},u.clear()),exports.removeItem=e=>(delete m[e],u.removeItem(""+e)),exports.sOptions=p,exports.setItem=(e,t)=>(m[e]=t,u.setItem(""+e,JSON.stringify(t))),exports.setProxyObj=(e,t,o)=>new Proxy(e,{get:(e,o)=>(t(),Reflect.get(e,o)),set:(e,t,r)=>(o(),Reflect.set(e,t,r))}),exports.sortObj=(e,t,o="asc")=>e.sort(((e,r)=>"asc"===o?e[t]-r[t]:r[t]-e[t])),exports.sumObj=(e,t)=>e.reduce(((e,o)=>o[t]+e),0),exports.trimString=e=>e.replace(/(^\s*)|(\s*$)/g,"");
@@ -1,4 +1,5 @@
1
1
  import { parse } from 'qs';
2
+ export { parse, stringify } from 'qs';
2
3
  import dayjs from 'dayjs';
3
4
  import { format } from 'd3-format';
4
5
 
@@ -27,6 +28,7 @@ const isSMSCode = (code) => {
27
28
  return code.match(/^\d{6}$/);
28
29
  };
29
30
  const random = (min, max) => Math.round(Math.random() * (max - min) + min);
31
+ const randomWithCrypto = () => crypto.randomUUID();
30
32
  const playAudio = (mp3Id) => {
31
33
  const audioArr = document.querySelectorAll('audio');
32
34
  Array.from(audioArr).forEach((mp3) => {
@@ -81,7 +83,7 @@ const getQueryObject = (url = window.location.href) => {
81
83
  // return rs
82
84
  // })
83
85
  const search = (_a = url.split('?')) === null || _a === void 0 ? void 0 : _a[1];
84
- return parse(search || '', { decoder: str => str });
86
+ return parse(search || '', { decoder: (str) => str });
85
87
  };
86
88
  const getSearchParams = (search) => new URLSearchParams(search);
87
89
  const fileReaderToBase64 = (target) => (cb) => {
@@ -153,23 +155,20 @@ const accDiv = (arg1, arg2) => {
153
155
  return (r1 / r2) * Math.pow(10, t2 - t1);
154
156
  };
155
157
  // 加
156
- const accAdd = (arg1, arg2) => {
157
- let r1, r2, m;
158
- try {
159
- r1 = arg1.toString().split('.')[1].length;
158
+ function accAdd(a, b) {
159
+ let aStr = a.toString();
160
+ let bStr = b.toString();
161
+ let aDecimal = 0, bDecimal = 0;
162
+ if (aStr.indexOf('.') > -1) {
163
+ aDecimal = aStr.split('.')[1].length;
160
164
  }
161
- catch (e) {
162
- r1 = 0;
163
- }
164
- try {
165
- r2 = arg2.toString().split('.')[1].length;
165
+ if (bStr.indexOf('.') > -1) {
166
+ bDecimal = bStr.split('.')[1].length;
166
167
  }
167
- catch (e) {
168
- r2 = 0;
169
- }
170
- m = Math.pow(10, Math.max(r1, r2));
171
- return (arg1 * m + arg2 * m) / m;
172
- };
168
+ const base = Math.pow(10, Math.max(aDecimal, bDecimal));
169
+ // 使用 Number 防止 string 拼接
170
+ return Number(+a * base + +b * base) / base;
171
+ }
173
172
  // 减
174
173
  const accSub = function (arg1, arg2) {
175
174
  let r1, r2, m, n;
@@ -226,7 +225,80 @@ const loopData = (arr, childkey = 'children') => {
226
225
  }
227
226
  }
228
227
  return arr;
229
- };
228
+ };
229
+ /**
230
+ * 金额格式化为万元,带千分位,最多保留6位小数
231
+ * @param amount 金额(元)
232
+ * @returns 格式化后的金额(万元)
233
+ */
234
+ function formatNumWithUnit(num, min = 2, max = 2, unit = '', useOrg = false, showNull = false, type = 2) {
235
+ if ((!num || num == '' || num == '-') && num !== 0)
236
+ return showNull ? undefined : '-';
237
+ // 转换为数字
238
+ let _num = typeof num === 'string' ? parseFloat(num) : num;
239
+ const isLt0 = +_num < 0;
240
+ if (isLt0)
241
+ _num = 0 - _num;
242
+ if (!isNumber(_num) || isNaN(+_num))
243
+ return _num;
244
+ // const isBillion = num / (10000 * 10000) >= 1
245
+ const _obj = sOptions === null || sOptions === void 0 ? void 0 : sOptions[type];
246
+ // 转换为万元
247
+ let wan = _num;
248
+ if (!useOrg) {
249
+ wan = (isLt0 ? 0 - _num : _num) / _obj.key; //_num / 10000
250
+ }
251
+ else {
252
+ wan = isLt0 ? 0 - _num : _num;
253
+ }
254
+ if (unit === true)
255
+ unit = _obj === null || _obj === void 0 ? void 0 : _obj.label;
256
+ // 处理小数位数
257
+ let result = wan;
258
+ const decimalStr = wan.toString().split('.')[1];
259
+ if (decimalStr && decimalStr.length > max) {
260
+ result = Number(wan.toFixed(max));
261
+ }
262
+ // 添加千分位
263
+ return (result.toLocaleString('en-US', {
264
+ minimumFractionDigits: min,
265
+ maximumFractionDigits: max,
266
+ }) +
267
+ ' ' +
268
+ unit);
269
+ }
270
+ const sOptions = [
271
+ {
272
+ // label: '元',
273
+ key: 1,
274
+ value: 0,
275
+ },
276
+ {
277
+ // label: '千元',
278
+ key: 1000,
279
+ value: 1,
280
+ },
281
+ {
282
+ // label: '万元',
283
+ key: 10000,
284
+ value: 2,
285
+ },
286
+ {
287
+ // label: '百万元',
288
+ key: 1000000,
289
+ value: 3,
290
+ },
291
+ {
292
+ // label: '亿元',
293
+ key: 100000000,
294
+ value: 4,
295
+ },
296
+ {
297
+ // label: '十亿元',
298
+ key: 1000000000,
299
+ value: 5,
300
+ },
301
+ ];
230
302
 
231
303
  const storage = inBrowser ? localStorage : {};
232
304
  const prefix = '';
@@ -308,7 +380,8 @@ function digitCnUppercase(n) {
308
380
  .replace(/^整$/, '零元整'));
309
381
  }
310
382
  function formatDate(d, formatType = SERVER_DATE_FROMAT) {
311
- return dayjs(new Date(d)).format(formatType);
383
+ return dayjs(d).format(formatType);
384
+ // return dayjs(new Date(d)).format(formatType)
312
385
  }
313
386
  const formatDateNil = withDefaultNil(formatDate);
314
387
  const unit = {
@@ -561,4 +634,4 @@ function copyToClipboard(txt) {
561
634
  document.body.removeChild(textarea);
562
635
  }
563
636
 
564
- export { DATE_FORMAT, FORMAT_DATE, FORMAT_TIME, NIL_STRING, WS, accAdd, accDiv, accMul, accSub, copyToClipboard, cutTimeFn, digitCnUppercase, disableBrowserZoom, download, fileReaderToBase64, filterNil, format10k, format10kNil, formatBillion, formatCash, formatCash2, formatCashInt, formatCashIntNil, formatCashNil, formatDate, formatDateNil, formatDuration, formatDurationNil, formatRatio, formatRatioNil, getBase64, getItem, getQueryObject, getSearchParams, getValOfArr, getValueWithNil, inBrowser, isArray, isBlob, isCardNo, isDate, isEmail, isFile, isMinigram, isNil, isNull, isNumber, isObject, isPhone, isSMSCode, isUndefined, isWX, log, loopData, os, playAudio, random, randomString, removeAll, removeItem, setItem, setProxyObj, sortObj, sumObj, trimString };
637
+ export { DATE_FORMAT, FORMAT_DATE, FORMAT_TIME, NIL_STRING, WS, accAdd, accDiv, accMul, accSub, copyToClipboard, cutTimeFn, digitCnUppercase, disableBrowserZoom, download, fileReaderToBase64, filterNil, format10k, format10kNil, formatBillion, formatCash, formatCash2, formatCashInt, formatCashIntNil, formatCashNil, formatDate, formatDateNil, formatDuration, formatDurationNil, formatNumWithUnit, formatRatio, formatRatioNil, getBase64, getItem, getQueryObject, getSearchParams, getValOfArr, getValueWithNil, inBrowser, isArray, isBlob, isCardNo, isDate, isEmail, isFile, isMinigram, isNil, isNull, isNumber, isObject, isPhone, isSMSCode, isUndefined, isWX, log, loopData, os, playAudio, random, randomString, randomWithCrypto, removeAll, removeItem, sOptions, setItem, setProxyObj, sortObj, sumObj, trimString };
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "lgutils",
3
- "version": "1.3.30",
3
+ "version": "1.3.42",
4
4
  "description": "lgutils",
5
5
  "main": "index.js",
6
6
  "module": "lib/lgutils.cjs.prod.js",
@@ -32,5 +32,5 @@
32
32
  "@types/d3-format": "^1.3.1",
33
33
  "@types/qs": "^6.9.0"
34
34
  },
35
- "gitHead": "fcb0bd0756b9444889983a51a85037156822c507"
35
+ "gitHead": "5773215109eaaef3fd19818bc4c3365f2b6fe9f1"
36
36
  }