@mi-avalon/libs 0.0.11 → 0.0.13

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.
@@ -4,99 +4,69 @@ Object.defineProperty(exports, '__esModule', { value: true });
4
4
 
5
5
  function _interopDefault (ex) { return (ex && (typeof ex === 'object') && 'default' in ex) ? ex['default'] : ex; }
6
6
 
7
- var antd = require('antd');
8
7
  var React = require('react');
9
8
  var React__default = _interopDefault(React);
10
9
  var ReactDOMClient = require('react-dom/client');
11
10
 
12
- var CMX = function CMX() {
13
- /**
14
- **
15
- **/
16
- this.add = function (arg1, arg2) {
17
- var r1, r2, m, c;
18
- try {
19
- r1 = arg1.toString().split('.')[1].length;
20
- } catch (e) {
21
- r1 = 0;
22
- }
23
- try {
24
- r2 = arg2.toString().split('.')[1].length;
25
- } catch (e) {
26
- r2 = 0;
27
- }
28
- c = Math.abs(r1 - r2);
29
- m = Math.pow(10, Math.max(r1, r2));
30
- if (c > 0) {
31
- var cm = Math.pow(10, c);
32
- if (r1 > r2) {
33
- arg1 = Number(arg1.toString().replace('.', ''));
34
- arg2 = Number(arg2.toString().replace('.', '')) * cm;
35
- } else {
36
- arg1 = Number(arg1.toString().replace('.', '')) * cm;
37
- arg2 = Number(arg2.toString().replace('.', ''));
38
- }
39
- } else {
40
- var _arg, _arg2;
41
- arg1 = Number((_arg = arg1) == null ? void 0 : _arg.toString().replace('.', ''));
42
- arg2 = Number((_arg2 = arg2) == null ? void 0 : _arg2.toString().replace('.', ''));
43
- }
44
- return (arg1 + arg2) / m;
45
- };
46
- /**
47
- ** 减
48
- **/
49
- this.sub = function (arg1, arg2) {
50
- var r1, r2, m, n;
51
- try {
52
- r1 = arg1.toString().split('.')[1].length;
53
- } catch (e) {
54
- r1 = 0;
55
- }
56
- try {
57
- r2 = arg2.toString().split('.')[1].length;
58
- } catch (e) {
59
- r2 = 0;
60
- }
61
- m = Math.pow(10, Math.max(r1, r2)); //last modify by deeka //动态控制精度长度
62
- n = r1 >= r2 ? r1 : r2;
63
- return Number(((arg1 * m - arg2 * m) / m).toFixed(n));
64
- };
65
- /**
66
- ** 乘
67
- **/
68
- this.mul = function (arg1, arg2) {
69
- var m = 0,
70
- s1 = arg1.toString(),
71
- s2 = arg2.toString();
72
- try {
73
- m += s1.split('.')[1].length;
74
- } catch (e) {}
75
- try {
76
- m += s2.split('.')[1].length;
77
- } catch (e) {}
78
- return Number(s1.replace('.', '')) * Number(s2.replace('.', '')) / Math.pow(10, m);
79
- };
80
- /**
81
- ** 除
82
- **/
83
- this.div = function (arg1, arg2) {
84
- var t1 = 0,
85
- t2 = 0,
86
- r1,
87
- r2;
88
- try {
89
- t1 = arg1.toString().split('.')[1].length;
90
- } catch (e) {}
91
- try {
92
- t2 = arg2.toString().split('.')[1].length;
93
- } catch (e) {}
94
- r1 = Number(arg1.toString().replace('.', ''));
95
- r2 = Number(arg2.toString().replace('.', ''));
96
- return r1 / r2 * Math.pow(10, t2 - t1);
97
- };
11
+ var DATE_FORMAT = {
12
+ YMD_Hms: 'YYYY-MM-DD HH:mm:ss',
13
+ YMD: 'YYYY-MM-DD',
14
+ YMD2: 'YYYYMMDD',
15
+ YMD_POINT: 'YYYY.M.DD',
16
+ Hms: 'HH:mm:ss',
17
+ Hm: 'HH:mm',
18
+ YMD_000: 'YYYY-MM-DD 00:00:00',
19
+ YMD_end: 'YYYY-MM-DD 23:59:59',
20
+ YMD_Hm: 'YYYYMMDD HHmm'
98
21
  };
99
- var cmx = /*#__PURE__*/new CMX();
22
+
23
+ var PAGE_SIZE = 10;
24
+
25
+ var PatternType = function PatternType() {};
26
+ // 整数
27
+ PatternType.integerRegex = /^-?\d+$/;
28
+ // 正整数
29
+ PatternType.positiveIntegerRegex = /^[1-9]\d*$/;
30
+ // 负整数
31
+ PatternType.negativeIntegerRegex = /^-[1-9]\d*$/;
32
+ // 浮点数
33
+ PatternType.floatRegex = /^-?\d+(\.\d+)?$/;
34
+ // 字母
35
+ PatternType.letter = /^[a-zA-Z]+$/;
36
+ // 汉字
37
+ PatternType.chinese = /^[\u4e00-\u9fa5]+$/;
38
+ // 数字
39
+ PatternType.number = /^[0-9]*$/;
40
+ // 用户名 字母开头,允许字母数字下划线,长度4-16
41
+ PatternType.username = /^[a-zA-Z]\w{3,15}$/;
42
+ // 强用户名 必须包含大小写字母和数字,6-20位
43
+ PatternType.strongUsername = /^(?=.*[a-z])(?=.*[A-Z])(?=.*\d)[a-zA-Z\d]{6,20}$/;
44
+ // 密码 至少8位,包含字母和数字
45
+ PatternType.password = /^(?=.*[A-Za-z])(?=.*\d)[A-Za-z\d]{8,}$/;
46
+ // 强密码 至少8位,包含大小写字母、数字和特殊字符
47
+ PatternType.strongPassword = /^(?=.*[a-z])(?=.*[A-Z])(?=.*\d)(?=.*[@$!%*?&])[A-Za-z\d@$!%*?&]{8,}$/;
48
+ // 中国大陆的手机号
49
+ PatternType.phone = /^1[3-9]\d{9}$/;
50
+ // 带区号的手机号
51
+ PatternType.phoneWithAreaCode = /^\+?\d{2,3}-?\d{8,11}$/;
52
+ // 邮箱
53
+ PatternType.email = /^[a-zA-Z0-9._%+-]+@[a-zA-Z0-9.-]+\.[a-zA-Z]{2,}$/;
54
+ // 身份证
55
+ PatternType.idCard = /^[1-9]\d{5}[1-9]\d{3}((0\d)|(1[0-2]))(([0|1|2]\d)|3[0-1])\d{3}([0-9]|X)$/;
56
+ // 银行卡
57
+ PatternType.bankCard = /^[1-9]\d{3,30}$/;
58
+ // 邮政编码
59
+ PatternType.zipCode = /^[1-9]\d{5}$/;
60
+ // IP
61
+ PatternType.ip = /^(\d{1,2}|1\d\d|2[0-4]\d|25[0-5])\.(\d{1,2}|1\d\d|2[0-4]\d|25[0-5])\.(\d{1,2}|1\d\d|2[0-4]\d|25[0-5])\.(\d{1,2}|1\d\d|2[0-4]\d|25[0-5])$/;
62
+ // URL
63
+ PatternType.url = /^(https?:\/\/)?([\da-z.-]+)\.([a-z.]{2,6})([/\w .-]*)*\/?$/;
64
+ // 车牌
65
+ PatternType.carNumber = /^[京津沪渝冀豫云辽黑湘皖鲁新苏浙赣鄂桂甘晋蒙陕吉闽贵粤青藏川宁琼使领][A-HJ-NP-Z][A-HJ-NP-Z0-9]{4,5}[A-HJ-NP-Z0-9挂学警港澳]$/;
66
+ // 时间 hh:mm:ss
67
+ PatternType.time = /^([0-1][0-9]|2[0-3]):([0-5][0-9]):([0-5][0-9])$/;
68
+ // 日期 YYYY-MM-DD
69
+ PatternType.date = /^(\d{4})-(\d{2})-(\d{2})$/;
100
70
 
101
71
  function _arrayLikeToArray(r, a) {
102
72
  (null == a || a > r.length) && (a = r.length);
@@ -165,9 +135,6 @@ function _extends() {
165
135
  return n;
166
136
  }, _extends.apply(null, arguments);
167
137
  }
168
- function _inheritsLoose(t, o) {
169
- t.prototype = Object.create(o.prototype), t.prototype.constructor = t, _setPrototypeOf(t, o);
170
- }
171
138
  function _regenerator() {
172
139
  /*! regenerator-runtime -- Copyright (c) 2014-present, Facebook, Inc. -- license (MIT): https://github.com/babel/babel/blob/main/packages/babel-helpers/LICENSE */
173
140
  var e,
@@ -278,11 +245,6 @@ function _regeneratorDefine(e, r, n, t) {
278
245
  }
279
246
  }, _regeneratorDefine(e, r, n, t);
280
247
  }
281
- function _setPrototypeOf(t, e) {
282
- return _setPrototypeOf = Object.setPrototypeOf ? Object.setPrototypeOf.bind() : function (t, e) {
283
- return t.__proto__ = e, t;
284
- }, _setPrototypeOf(t, e);
285
- }
286
248
  function _toPrimitive(t, r) {
287
249
  if ("object" != typeof t || !t) return t;
288
250
  var e = t[Symbol.toPrimitive];
@@ -305,955 +267,681 @@ function _unsupportedIterableToArray(r, a) {
305
267
  }
306
268
  }
307
269
 
308
- var NextTick = /*#__PURE__*/function () {
309
- function NextTick() {
310
- this.callbacks = [];
311
- this.pending = false;
312
- this.timerFunc = this.determineTimerFunc();
313
- }
314
- var _proto = NextTick.prototype;
315
- _proto.determineTimerFunc = function determineTimerFunc() {
316
- var _this = this;
317
- if (typeof Promise !== 'undefined') {
318
- var p = Promise.resolve();
319
- return function () {
320
- return p.then(_this.flushCallbacks.bind(_this));
321
- };
322
- }
323
- if (typeof MutationObserver !== 'undefined' && typeof window !== 'undefined') {
324
- var counter = 1;
325
- var observer = new MutationObserver(this.flushCallbacks.bind(this));
326
- var textNode = document.createTextNode(String(counter));
327
- observer.observe(textNode, {
328
- characterData: true
329
- });
330
- return function () {
331
- counter = (counter + 1) % 2;
332
- textNode.data = String(counter);
333
- };
334
- }
335
- // // 仅在 Node.js 环境中使用 setImmediate
336
- // if (typeof global !== 'undefined' && typeof setImmediate !== 'undefined') {
337
- // return () => setImmediate(this.flushCallbacks.bind(this));
338
- // }
339
- return function () {
340
- return setTimeout(_this.flushCallbacks.bind(_this), 0);
341
- };
342
- };
343
- _proto.flushCallbacks = function flushCallbacks() {
344
- this.pending = false;
345
- var copies = this.callbacks.slice(0);
346
- this.callbacks.length = 0;
347
- for (var i = 0; i < copies.length; i++) {
348
- copies[i]();
349
- }
350
- };
351
- _proto.nextTick = function nextTick(callback, ctx) {
352
- var _resolve;
353
- this.callbacks.push(function () {
354
- if (callback) {
355
- try {
356
- callback.call(ctx);
357
- } catch (e) {
358
- console.error('Error in nextTick:', e);
359
- }
360
- } else if (_resolve) {
361
- _resolve();
362
- }
363
- });
364
- if (!this.pending) {
365
- this.pending = true;
366
- this.timerFunc();
367
- }
368
- if (!callback && typeof Promise !== 'undefined') {
369
- return new Promise(function (resolve) {
370
- _resolve = resolve;
371
- });
372
- }
373
- };
374
- NextTick.nextTick = function nextTick(callback, ctx) {
375
- return NextTick.instance.nextTick(callback, ctx);
270
+ function useFuncRequest(
271
+ // 异步函数
272
+ asyncFunc,
273
+ // 配置项
274
+ options) {
275
+ var _useState = React.useState(false),
276
+ loading = _useState[0],
277
+ setLoading = _useState[1];
278
+ var _useState2 = React.useState(null),
279
+ error = _useState2[0],
280
+ setError = _useState2[1];
281
+ var _useState3 = React.useState(null),
282
+ data = _useState3[0],
283
+ setData = _useState3[1];
284
+ var abortControllerRef = React.useRef(undefined);
285
+ var requestIdRef = React.useRef(0);
286
+ var cancel = function cancel() {
287
+ var _abortControllerRef$c;
288
+ (_abortControllerRef$c = abortControllerRef.current) == null || _abortControllerRef$c.abort();
289
+ setLoading(false);
290
+ setError(null);
376
291
  };
377
- return _createClass(NextTick, null, [{
378
- key: "instance",
379
- get: function get() {
380
- if (!this._instance) {
381
- this._instance = new NextTick();
382
- }
383
- return this._instance;
384
- }
385
- }]);
386
- }();
387
- var nextTick = /*#__PURE__*/NextTick.instance.nextTick.bind(NextTick.instance);
388
-
389
- var createRoot = ReactDOMClient.createRoot;
390
- var modalContainer = null;
391
- var root = null;
392
- function getOrCreateContainer() {
393
- if (!modalContainer) {
394
- modalContainer = document.createElement('div');
395
- document.body.appendChild(modalContainer);
396
- }
397
- return modalContainer;
398
- }
399
- function openModal(DialogComponent, initialConfig) {
400
- var container = getOrCreateContainer();
401
- var currentConfig = _extends({
402
- open: true
403
- }, initialConfig, {
404
- // 默认自动关闭
405
- onClosed: initialConfig.onClosed || function (params) {
406
- unifiedDestroy(params);
407
- }
408
- });
409
- if (!root) {
410
- try {
411
- root = createRoot(container);
412
- } catch (error) {
413
- console.error('Failed to create root:', error);
414
- return {
415
- destroy: function destroy() {},
416
- update: function update() {}
417
- };
418
- }
419
- }
420
- var cleanup = function cleanup() {
421
- if (root) {
422
- root.unmount();
423
- root = null;
424
- }
425
- if (modalContainer && modalContainer.parentNode) {
426
- modalContainer.parentNode.removeChild(modalContainer);
427
- modalContainer = null;
428
- }
429
- };
430
- var _destroy = function destroy(params) {
431
- if (typeof currentConfig.onClosed === 'function') {
432
- currentConfig.onClosed(params);
433
- }
434
- // 销毁 modal
435
- cleanup();
436
- };
437
- var render = function render(props) {
438
- if (root) {
439
- root.render(React__default.createElement(DialogComponent, Object.assign({}, props)));
440
- }
441
- };
442
- var update = function update(configUpdate) {
443
- currentConfig = typeof configUpdate === 'function' ? configUpdate(currentConfig) : _extends({}, currentConfig, configUpdate);
444
- render(currentConfig);
445
- };
446
- // 统一的销毁函数
447
- var unifiedDestroy = function unifiedDestroy(params) {
448
- // 如果当前配置是打开的,关闭
449
- if (currentConfig.open) {
450
- currentConfig = _extends({}, currentConfig, {
451
- open: false,
452
- onClosed: function onClosed(closedParams) {
453
- if (initialConfig.onClosed) {
454
- initialConfig.onClosed(closedParams || params);
455
- }
456
- _destroy(closedParams || params);
292
+ var run = /*#__PURE__*/function () {
293
+ var _ref = _asyncToGenerator(/*#__PURE__*/_regenerator().m(function _callee() {
294
+ var currentRequestId,
295
+ abortController,
296
+ _len,
297
+ args,
298
+ _key,
299
+ beforeRes,
300
+ funcArgs,
301
+ res,
302
+ _args = arguments,
303
+ _t;
304
+ return _regenerator().w(function (_context) {
305
+ while (1) switch (_context.p = _context.n) {
306
+ case 0:
307
+ currentRequestId = ++requestIdRef.current;
308
+ cancel();
309
+ abortController = new AbortController();
310
+ abortControllerRef.current = abortController;
311
+ _context.p = 1;
312
+ setLoading(true);
313
+ setError(null);
314
+ for (_len = _args.length, args = new Array(_len), _key = 0; _key < _len; _key++) {
315
+ args[_key] = _args[_key];
316
+ }
317
+ if (!(options != null && options.onBefore)) {
318
+ _context.n = 3;
319
+ break;
320
+ }
321
+ _context.n = 2;
322
+ return options == null || options.onBefore == null ? void 0 : options.onBefore.apply(options, args);
323
+ case 2:
324
+ beforeRes = _context.v;
325
+ if (beforeRes) {
326
+ _context.n = 3;
327
+ break;
328
+ }
329
+ cancel();
330
+ return _context.a(2);
331
+ case 3:
332
+ // 安全传递 AbortSignal
333
+ funcArgs = args.length >= asyncFunc.length ? args : [].concat(args, [{
334
+ signal: abortController.signal
335
+ }]);
336
+ _context.n = 4;
337
+ return asyncFunc.apply(void 0, funcArgs);
338
+ case 4:
339
+ res = _context.v;
340
+ if (!(!abortController.signal.aborted && currentRequestId === requestIdRef.current)) {
341
+ _context.n = 5;
342
+ break;
343
+ }
344
+ setData(res);
345
+ _context.n = 5;
346
+ return options == null || options.onSuccess == null ? void 0 : options.onSuccess(res);
347
+ case 5:
348
+ return _context.a(2, res);
349
+ case 6:
350
+ _context.p = 6;
351
+ _t = _context.v;
352
+ if (!(!abortController.signal.aborted && currentRequestId === requestIdRef.current)) {
353
+ _context.n = 7;
354
+ break;
355
+ }
356
+ setError(_t);
357
+ _context.n = 7;
358
+ return options == null || options.onError == null ? void 0 : options.onError(_t);
359
+ case 7:
360
+ throw _t;
361
+ case 8:
362
+ _context.p = 8;
363
+ if (!(!abortController.signal.aborted && currentRequestId === requestIdRef.current)) {
364
+ _context.n = 9;
365
+ break;
366
+ }
367
+ setLoading(false);
368
+ _context.n = 9;
369
+ return options == null || options.onFinally == null ? void 0 : options.onFinally();
370
+ case 9:
371
+ return _context.f(8);
372
+ case 10:
373
+ return _context.a(2);
457
374
  }
458
- });
459
- render(currentConfig);
460
- } else {
461
- console.warn('Modal is already closed.');
375
+ }, _callee, null, [[1, 6, 8, 10]]);
376
+ }));
377
+ return function run() {
378
+ return _ref.apply(this, arguments);
379
+ };
380
+ }();
381
+ React.useEffect(function () {
382
+ if (options != null && options.autoRunArgs) {
383
+ run.apply(void 0, options.autoRunArgs)["catch"](function () {});
462
384
  }
463
- };
464
- render(currentConfig);
385
+ return cancel;
386
+ }, [JSON.stringify(options == null ? void 0 : options.autoRunArgs)]);
465
387
  return {
466
- destroy: unifiedDestroy,
467
- update: update
388
+ run: run,
389
+ cancel: cancel,
390
+ loading: loading,
391
+ error: error,
392
+ data: data
468
393
  };
469
394
  }
470
395
 
471
- var noop = function noop() {};
472
- // 生成类名
473
- var getClassName = function getClassName(key1, key2) {
474
- var cn = key1;
475
- var str = key1;
476
- if (key2.includes(' ')) {
477
- str = '';
478
- var nArr = key2 == null ? void 0 : key2.split(' ');
479
- for (var _iterator = _createForOfIteratorHelperLoose(nArr), _step; !(_step = _iterator()).done;) {
480
- var i = _step.value;
481
- str += " " + cn + "-" + i;
482
- }
483
- } else if (key2) {
484
- str = key1 + "-" + key2;
485
- }
486
- return str;
487
- };
488
- // 根据路径获取数据
489
- var getFieldsByPath = function getFieldsByPath(data, path) {
490
- var arr = path == null ? void 0 : path.split('.');
491
- var res = data;
492
- for (var _iterator2 = _createForOfIteratorHelperLoose(arr), _step2; !(_step2 = _iterator2()).done;) {
493
- var i = _step2.value;
494
- res = res[i];
396
+ function useInterval(callback, delay, immediate) {
397
+ if (immediate === void 0) {
398
+ immediate = false;
495
399
  }
496
- return res;
497
- };
498
- // 删除空值
499
- var removeNull = function removeNull(obj) {
500
- for (var key in obj) {
501
- if (obj[key] === null) {
502
- delete obj[key];
400
+ var timerRef = React.useRef(undefined);
401
+ var savedCallback = React.useRef(callback);
402
+ // Update callback ref if callback changes
403
+ React.useEffect(function () {
404
+ savedCallback.current = callback;
405
+ }, [callback]);
406
+ var clear = React.useCallback(function () {
407
+ if (timerRef.current) {
408
+ clearInterval(timerRef.current);
409
+ timerRef.current = undefined;
503
410
  }
504
- }
505
- return obj;
506
- };
507
- // 防抖函数
508
- var debounce = function debounce(func, wait) {
509
- var timeout = null;
510
- return function () {
511
- for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) {
512
- args[_key] = arguments[_key];
411
+ }, []);
412
+ var start = React.useCallback(function () {
413
+ clear();
414
+ if (delay !== null && delay !== undefined) {
415
+ timerRef.current = setInterval(function () {
416
+ return savedCallback.current();
417
+ }, delay);
513
418
  }
514
- if (timeout) {
515
- clearTimeout(timeout);
419
+ }, [delay, clear]);
420
+ React.useEffect(function () {
421
+ if (immediate) {
422
+ savedCallback.current();
516
423
  }
517
- timeout = setTimeout(function () {
518
- func.apply(void 0, args);
519
- }, wait);
424
+ start();
425
+ return clear;
426
+ }, [delay, start, clear, immediate]);
427
+ return {
428
+ start: start,
429
+ clear: clear,
430
+ isRunning: !!timerRef.current
520
431
  };
521
- };
522
- // 节流函数
523
- var throttle = function throttle(func, wait) {
524
- var timeout = null;
525
- var lastTime = 0;
526
- return function () {
527
- var nowTime = Date.now();
528
- if (!timeout) {
529
- func.apply(void 0, arguments);
530
- lastTime = nowTime;
531
- timeout = setTimeout(function () {
532
- timeout = null;
533
- }, wait);
534
- } else {
535
- var diffTime = nowTime - lastTime;
536
- if (diffTime >= wait) {
537
- func.apply(void 0, arguments);
538
- lastTime = nowTime;
432
+ }
433
+
434
+ var CMX = function CMX() {
435
+ /**
436
+ **
437
+ **/
438
+ this.add = function (arg1, arg2) {
439
+ var r1, r2, m, c;
440
+ try {
441
+ r1 = arg1.toString().split('.')[1].length;
442
+ } catch (e) {
443
+ r1 = 0;
444
+ }
445
+ try {
446
+ r2 = arg2.toString().split('.')[1].length;
447
+ } catch (e) {
448
+ r2 = 0;
449
+ }
450
+ c = Math.abs(r1 - r2);
451
+ m = Math.pow(10, Math.max(r1, r2));
452
+ if (c > 0) {
453
+ var cm = Math.pow(10, c);
454
+ if (r1 > r2) {
455
+ arg1 = Number(arg1.toString().replace('.', ''));
456
+ arg2 = Number(arg2.toString().replace('.', '')) * cm;
457
+ } else {
458
+ arg1 = Number(arg1.toString().replace('.', '')) * cm;
459
+ arg2 = Number(arg2.toString().replace('.', ''));
539
460
  }
461
+ } else {
462
+ var _arg, _arg2;
463
+ arg1 = Number((_arg = arg1) == null ? void 0 : _arg.toString().replace('.', ''));
464
+ arg2 = Number((_arg2 = arg2) == null ? void 0 : _arg2.toString().replace('.', ''));
465
+ }
466
+ return (arg1 + arg2) / m;
467
+ };
468
+ /**
469
+ ** 减
470
+ **/
471
+ this.sub = function (arg1, arg2) {
472
+ var r1, r2, m, n;
473
+ try {
474
+ r1 = arg1.toString().split('.')[1].length;
475
+ } catch (e) {
476
+ r1 = 0;
540
477
  }
478
+ try {
479
+ r2 = arg2.toString().split('.')[1].length;
480
+ } catch (e) {
481
+ r2 = 0;
482
+ }
483
+ m = Math.pow(10, Math.max(r1, r2)); //last modify by deeka //动态控制精度长度
484
+ n = r1 >= r2 ? r1 : r2;
485
+ return Number(((arg1 * m - arg2 * m) / m).toFixed(n));
486
+ };
487
+ /**
488
+ ** 乘
489
+ **/
490
+ this.mul = function (arg1, arg2) {
491
+ var m = 0,
492
+ s1 = arg1.toString(),
493
+ s2 = arg2.toString();
494
+ try {
495
+ m += s1.split('.')[1].length;
496
+ } catch (e) {}
497
+ try {
498
+ m += s2.split('.')[1].length;
499
+ } catch (e) {}
500
+ return Number(s1.replace('.', '')) * Number(s2.replace('.', '')) / Math.pow(10, m);
501
+ };
502
+ /**
503
+ ** 除
504
+ **/
505
+ this.div = function (arg1, arg2) {
506
+ var t1 = 0,
507
+ t2 = 0,
508
+ r1,
509
+ r2;
510
+ try {
511
+ t1 = arg1.toString().split('.')[1].length;
512
+ } catch (e) {}
513
+ try {
514
+ t2 = arg2.toString().split('.')[1].length;
515
+ } catch (e) {}
516
+ r1 = Number(arg1.toString().replace('.', ''));
517
+ r2 = Number(arg2.toString().replace('.', ''));
518
+ return r1 / r2 * Math.pow(10, t2 - t1);
541
519
  };
542
520
  };
521
+ var cmx = /*#__PURE__*/new CMX();
543
522
 
544
- /**
545
- * 版本号工具类
546
- * 支持语义化版本 (SemVer) 和基本版本号比较
547
- */
548
- var VersionUtil = /*#__PURE__*/function () {
549
- function VersionUtil() {}
550
- /**
551
- * 验证版本号格式是否有效
552
- * @param version 版本号字符串
553
- * @returns 是否有效
554
- */
555
- VersionUtil.isValid = function isValid(version) {
556
- var semverRegex = /^v?(0|[1-9]\d*)\.(0|[1-9]\d*)\.(0|[1-9]\d*)(?:-((?:0|[1-9]\d*|\d*[a-zA-Z-][0-9a-zA-Z-]*)(?:\.(?:0|[1-9]\d*|\d*[a-zA-Z-][0-9a-zA-Z-]*))*))?(?:\+([0-9a-zA-Z-]+(?:\.[0-9a-zA-Z-]+)*))?$/i;
557
- return semverRegex.test(version);
523
+ var NextTick = /*#__PURE__*/function () {
524
+ function NextTick() {
525
+ this.callbacks = [];
526
+ this.pending = false;
527
+ this.timerFunc = this.determineTimerFunc();
558
528
  }
559
- /**
560
- * 比较两个版本号
561
- * @param v1 版本号1
562
- * @param v2 版本号2
563
- * @returns 比较结果: 1(v1>v2), 0(v1=v2), -1(v1<v2)
564
- */;
565
- VersionUtil.compare = function compare(v1, v2) {
566
- if (!this.isValid(v1) || !this.isValid(v2)) {
567
- throw new Error('Invalid version format');
529
+ var _proto = NextTick.prototype;
530
+ _proto.determineTimerFunc = function determineTimerFunc() {
531
+ var _this = this;
532
+ if (typeof Promise !== 'undefined') {
533
+ var p = Promise.resolve();
534
+ return function () {
535
+ return p.then(_this.flushCallbacks.bind(_this));
536
+ };
568
537
  }
569
- // 去除前缀v并分割版本号
570
- var normalize = function normalize(v) {
571
- return v.replace(/^v/, '').split(/[-+]/)[0].split('.');
572
- };
573
- var parts1 = normalize(v1);
574
- var parts2 = normalize(v2);
575
- for (var i = 0; i < 3; i++) {
576
- var num1 = parseInt(parts1[i] || '0', 10);
577
- var num2 = parseInt(parts2[i] || '0', 10);
578
- if (num1 > num2) return 1;
579
- if (num1 < num2) return -1;
538
+ if (typeof MutationObserver !== 'undefined' && typeof window !== 'undefined') {
539
+ var counter = 1;
540
+ var observer = new MutationObserver(this.flushCallbacks.bind(this));
541
+ var textNode = document.createTextNode(String(counter));
542
+ observer.observe(textNode, {
543
+ characterData: true
544
+ });
545
+ return function () {
546
+ counter = (counter + 1) % 2;
547
+ textNode.data = String(counter);
548
+ };
580
549
  }
581
- // 比较预发布版本
582
- var preRelease1 = v1.match(/-(.+)/);
583
- var preRelease2 = v2.match(/-(.+)/);
584
- if (preRelease1 && !preRelease2) return -1;
585
- if (!preRelease1 && preRelease2) return 1;
586
- if (preRelease1 && preRelease2) {
587
- return preRelease1[1].localeCompare(preRelease2[1]);
550
+ // // 仅在 Node.js 环境中使用 setImmediate
551
+ // if (typeof global !== 'undefined' && typeof setImmediate !== 'undefined') {
552
+ // return () => setImmediate(this.flushCallbacks.bind(this));
553
+ // }
554
+ return function () {
555
+ return setTimeout(_this.flushCallbacks.bind(_this), 0);
556
+ };
557
+ };
558
+ _proto.flushCallbacks = function flushCallbacks() {
559
+ this.pending = false;
560
+ var copies = this.callbacks.slice(0);
561
+ this.callbacks.length = 0;
562
+ for (var i = 0; i < copies.length; i++) {
563
+ copies[i]();
588
564
  }
589
- return 0;
590
- }
591
- /**
592
- * 检查版本号是否满足范围要求
593
- * @param version 要检查的版本
594
- * @param range 版本范围 (如 ">=1.0.0 <2.0.0") 支持: >, >=, <, <=, ^, ~, ==, =
595
- * @returns 是否满足
596
- */;
597
- VersionUtil.satisfies = function satisfies(version, range) {
598
- var _this = this;
599
- if (!this.isValid(version)) return false;
600
- var rangeRegex = /([<>]=?|==?|\^|~)?\s*v?([0-9]+\.[0-9]+\.[0-9]+(?:-[0-9A-Za-z-]+(?:\.[0-9A-Za-z-]+)*)?(?:\+[0-9A-Za-z-]+)?)/g;
601
- var ranges = range.match(rangeRegex);
602
- if (!ranges || ranges.length === 0) return false;
603
- return ranges.every(function (r) {
604
- var match = r.match(/([<>]=?|==?|\^|~)?\s*(v?[0-9].*)/);
605
- if (!match) return false;
606
- var operator = match[1] || '==';
607
- var rangeVersion = match[2];
608
- if (!_this.isValid(rangeVersion)) return false;
609
- var comparison = _this.compare(version, rangeVersion);
610
- switch (operator) {
611
- case '>':
612
- return comparison > 0;
613
- case '>=':
614
- return comparison >= 0;
615
- case '<':
616
- return comparison < 0;
617
- case '<=':
618
- return comparison <= 0;
619
- case '^':
620
- return _this.caretRange(version, rangeVersion);
621
- case '~':
622
- return _this.tildeRange(version, rangeVersion);
623
- case '=':
624
- case '==':
625
- default:
626
- return comparison === 0;
565
+ };
566
+ _proto.nextTick = function nextTick(callback, ctx) {
567
+ var _resolve;
568
+ this.callbacks.push(function () {
569
+ if (callback) {
570
+ try {
571
+ callback.call(ctx);
572
+ } catch (e) {
573
+ console.error('Error in nextTick:', e);
574
+ }
575
+ } else if (_resolve) {
576
+ _resolve();
627
577
  }
628
578
  });
629
- }
630
- /**
631
- * 处理 ^ 范围 (允许不修改最左边的非零数字)
632
- * @param version 版本号
633
- * @param range 范围版本
634
- * @returns 是否匹配
635
- */;
636
- VersionUtil.caretRange = function caretRange(version, range) {
637
- var normalize = function normalize(v) {
638
- return v.replace(/^v/, '').split(/[-+]/)[0].split('.');
639
- };
640
- var vParts = normalize(version);
641
- var rParts = normalize(range);
642
- // 找到第一个非零部分
643
- var firstNonZero = 0;
644
- for (var i = 0; i < rParts.length; i++) {
645
- if (parseInt(rParts[i], 10) !== 0) {
646
- firstNonZero = i;
647
- break;
648
- }
579
+ if (!this.pending) {
580
+ this.pending = true;
581
+ this.timerFunc();
649
582
  }
650
- for (var _i = 0; _i <= firstNonZero; _i++) {
651
- var vNum = parseInt(vParts[_i] || '0', 10);
652
- var rNum = parseInt(rParts[_i] || '0', 10);
653
- if (vNum !== rNum) return false;
583
+ if (!callback && typeof Promise !== 'undefined') {
584
+ return new Promise(function (resolve) {
585
+ _resolve = resolve;
586
+ });
654
587
  }
655
- return this.compare(version, range) >= 0;
656
- }
657
- /**
658
- * 处理 ~ 范围 (允许修改最后一位数字)
659
- * @param version 版本号
660
- * @param range 范围版本
661
- * @returns 是否匹配
662
- */;
663
- VersionUtil.tildeRange = function tildeRange(version, range) {
664
- var normalize = function normalize(v) {
665
- return v.replace(/^v/, '').split(/[-+]/)[0].split('.');
666
- };
667
- var vParts = normalize(version);
668
- var rParts = normalize(range);
669
- for (var i = 0; i < rParts.length - 1; i++) {
670
- var vNum = parseInt(vParts[i] || '0', 10);
671
- var rNum = parseInt(rParts[i] || '0', 10);
672
- if (vNum !== rNum) return false;
673
- }
674
- var lastVNum = parseInt(vParts[rParts.length - 1] || '0', 10);
675
- var lastRNum = parseInt(rParts[rParts.length - 1] || '0', 10);
676
- return lastVNum >= lastRNum;
677
- }
678
- /**
679
- * 获取主版本号 (major)
680
- * @param version 版本号
681
- * @returns 主版本号
682
- */;
683
- VersionUtil.getMajor = function getMajor(version) {
684
- if (!this.isValid(version)) throw new Error('Invalid version format');
685
- var parts = version.replace(/^v/, '').split('.');
686
- return parseInt(parts[0], 10);
687
- }
688
- /**
689
- * 获取次版本号 (minor)
690
- * @param version 版本号
691
- * @returns 次版本号
692
- */;
693
- VersionUtil.getMinor = function getMinor(version) {
694
- if (!this.isValid(version)) throw new Error('Invalid version format');
695
- var parts = version.replace(/^v/, '').split('.');
696
- return parseInt(parts[1] || '0', 10);
697
- }
698
- /**
699
- * 获取修订号 (patch)
700
- * @param version 版本号
701
- * @returns 修订号
702
- */;
703
- VersionUtil.getPatch = function getPatch(version) {
704
- if (!this.isValid(version)) throw new Error('Invalid version format');
705
- var parts = version.replace(/^v/, '').split('.');
706
- return parseInt(parts[2] || '0', 10);
707
- }
708
- /**
709
- * 获取预发布版本标识
710
- * @param version 版本号
711
- * @returns 预发布标识 (无则返回null)
712
- */;
713
- VersionUtil.getPrerelease = function getPrerelease(version) {
714
- if (!this.isValid(version)) throw new Error('Invalid version format');
715
- var match = version.match(/-([^+]+)/);
716
- return match ? match[1] : null;
717
- }
718
- /**
719
- * 获取构建元数据
720
- * @param version 版本号
721
- * @returns 构建元数据 (无则返回null)
722
- */;
723
- VersionUtil.getBuildMetadata = function getBuildMetadata(version) {
724
- if (!this.isValid(version)) throw new Error('Invalid version format');
725
- var match = version.match(/\+([^]+)/);
726
- return match ? match[1] : null;
727
588
  };
728
- return VersionUtil;
589
+ NextTick.nextTick = function nextTick(callback, ctx) {
590
+ return NextTick.instance.nextTick(callback, ctx);
591
+ };
592
+ return _createClass(NextTick, null, [{
593
+ key: "instance",
594
+ get: function get() {
595
+ if (!this._instance) {
596
+ this._instance = new NextTick();
597
+ }
598
+ return this._instance;
599
+ }
600
+ }]);
729
601
  }();
602
+ var nextTick = /*#__PURE__*/NextTick.instance.nextTick.bind(NextTick.instance);
730
603
 
731
- var ThemeContext = /*#__PURE__*/React.createContext({
732
- theme: {
733
- cssVar: true,
734
- algorithm: [antd.theme.defaultAlgorithm]
604
+ var createRoot = ReactDOMClient.createRoot;
605
+ var modalContainer = null;
606
+ var root = null;
607
+ function getOrCreateContainer() {
608
+ if (!modalContainer) {
609
+ modalContainer = document.createElement('div');
610
+ document.body.appendChild(modalContainer);
735
611
  }
736
- });
737
- var MiThemeProvider = ThemeContext.Provider;
738
- function useMiThemeConfig() {
739
- return React.useContext(ThemeContext);
740
- }
741
-
742
- /**
743
- * CompThemeProvider
744
- */
745
- function CompThemeProvider(props) {
746
- var _useMiThemeConfig = useMiThemeConfig(),
747
- theme = _useMiThemeConfig.theme;
748
- return React__default.createElement(antd.ConfigProvider, {
749
- theme: theme
750
- }, props.children);
612
+ return modalContainer;
751
613
  }
752
- CompThemeProvider.displayName = 'CompThemeProvider';
753
-
754
- var classname = function classname(n) {
755
- if (n === void 0) {
756
- n = '';
757
- }
758
- var cn = 'items-row';
759
- return getClassName(cn, n);
760
- };
761
- var ItemsRow = function ItemsRow(props) {
762
- if (!props.items) {
763
- return null;
614
+ function openModal(DialogComponent, initialConfig) {
615
+ var container = getOrCreateContainer();
616
+ var currentConfig = _extends({
617
+ open: true
618
+ }, initialConfig, {
619
+ // 默认自动关闭
620
+ onClosed: initialConfig.onClosed || function (params) {
621
+ unifiedDestroy(params);
622
+ }
623
+ });
624
+ if (!root) {
625
+ try {
626
+ root = createRoot(container);
627
+ } catch (error) {
628
+ console.error('Failed to create root:', error);
629
+ return {
630
+ destroy: function destroy() {},
631
+ update: function update() {}
632
+ };
633
+ }
764
634
  }
765
- return React.createElement(CompThemeProvider, null, React.createElement("div", {
766
- className: classname() + " " + (props.className || ''),
767
- style: props.style
768
- }, (props.items || []).map(function (item, index) {
769
- var className = classname('item') + " " + item.className;
770
- if (item.render) {
771
- return React.createElement("span", {
772
- key: index,
773
- className: className
774
- }, item.render());
635
+ var cleanup = function cleanup() {
636
+ if (root) {
637
+ root.unmount();
638
+ root = null;
775
639
  }
776
- return React.createElement(antd.Button, Object.assign({
777
- key: item.label,
778
- className: className
779
- }, item.btnProps, {
780
- type: item.type || 'primary',
781
- onClick: item.onClick
782
- }), item.label);
783
- })));
784
- };
785
-
786
- function styleInject(css, ref) {
787
- if ( ref === void 0 ) ref = {};
788
- var insertAt = ref.insertAt;
789
-
790
- if (!css || typeof document === 'undefined') { return; }
791
-
792
- var head = document.head || document.getElementsByTagName('head')[0];
793
- var style = document.createElement('style');
794
- style.type = 'text/css';
795
-
796
- if (insertAt === 'top') {
797
- if (head.firstChild) {
798
- head.insertBefore(style, head.firstChild);
640
+ if (modalContainer && modalContainer.parentNode) {
641
+ modalContainer.parentNode.removeChild(modalContainer);
642
+ modalContainer = null;
643
+ }
644
+ };
645
+ var _destroy = function destroy(params) {
646
+ if (typeof currentConfig.onClosed === 'function') {
647
+ currentConfig.onClosed(params);
648
+ }
649
+ // 销毁 modal
650
+ cleanup();
651
+ };
652
+ var render = function render(props) {
653
+ if (root) {
654
+ root.render(React__default.createElement(DialogComponent, Object.assign({}, props)));
655
+ }
656
+ };
657
+ var update = function update(configUpdate) {
658
+ currentConfig = typeof configUpdate === 'function' ? configUpdate(currentConfig) : _extends({}, currentConfig, configUpdate);
659
+ render(currentConfig);
660
+ };
661
+ // 统一的销毁函数
662
+ var unifiedDestroy = function unifiedDestroy(params) {
663
+ // 如果当前配置是打开的,关闭
664
+ if (currentConfig.open) {
665
+ currentConfig = _extends({}, currentConfig, {
666
+ open: false,
667
+ onClosed: function onClosed(closedParams) {
668
+ if (initialConfig.onClosed) {
669
+ initialConfig.onClosed(closedParams || params);
670
+ }
671
+ _destroy(closedParams || params);
672
+ }
673
+ });
674
+ render(currentConfig);
799
675
  } else {
800
- head.appendChild(style);
676
+ console.warn('Modal is already closed.');
801
677
  }
802
- } else {
803
- head.appendChild(style);
804
- }
805
-
806
- if (style.styleSheet) {
807
- style.styleSheet.cssText = css;
808
- } else {
809
- style.appendChild(document.createTextNode(css));
810
- }
678
+ };
679
+ render(currentConfig);
680
+ return {
681
+ destroy: unifiedDestroy,
682
+ update: update
683
+ };
811
684
  }
812
685
 
813
- var css_248z = "@keyframes m-breadcrumb_show_ani {\n 0% {\n opacity: 0;\n }\n 100% {\n opacity: 100;\n }\n}\n.m-breadcrumb {\n position: relative;\n height: 64px;\n width: 100%;\n}\n.m-breadcrumb-container {\n transition: padding 0.3s ease;\n}\n.m-breadcrumb-body {\n border-radius: 8px;\n height: 64px;\n line-height: 64px;\n}\n.m-breadcrumb .ant-card-body {\n width: 100%;\n padding: 0 12px;\n align-items: center;\n}\n.m-breadcrumb .ant-affix {\n z-index: 999;\n}\n.ant-affix > .m-breadcrumb-container {\n z-index: 100;\n width: auto;\n box-shadow: 0 6px 16px 0 rgba(0, 0, 0, 0.08), 0 3px 6px -4px rgba(0, 0, 0, 0.12), 0 9px 28px 8px rgba(0, 0, 0, 0.05);\n}\n.m-breadcrumb-inner-breadcrumb {\n display: inline-block;\n vertical-align: middle;\n line-height: 64px;\n}\n.m-breadcrumb-inner-breadcrumb .ant-breadcrumb-separator {\n margin: 0 8px;\n}\n.m-breadcrumb-inner-breadcrumb .ant-breadcrumb-link > a {\n transition: all 0.3s;\n padding: 4px 8px;\n display: inline-block;\n line-height: 1.5;\n}\n.m-breadcrumb-inner-breadcrumb .ant-breadcrumb-link > a:hover {\n font-weight: bold;\n text-decoration: none;\n opacity: 0.8;\n}\n.m-breadcrumb-custom-item-wrapper {\n float: right;\n height: 100%;\n display: flex;\n align-items: center;\n}";
814
- styleInject(css_248z);
815
-
816
- var classname$1 = function classname(n) {
817
- if (n === void 0) {
818
- n = '';
819
- }
820
- var cn = 'm-breadcrumb';
821
- return getClassName(cn, n);
822
- };
823
- var MBreadcrumb = function MBreadcrumb(props) {
824
- var routes = props.routes,
825
- customItems = props.customItems,
826
- style = props.style,
827
- className = props.className,
828
- _props$offsetTop = props.offsetTop,
829
- offsetTop = _props$offsetTop === void 0 ? 64 : _props$offsetTop,
830
- mainAppBaseUrl = props.mainAppBaseUrl,
831
- microAppName = props.microAppName;
832
- var affixRef = React.useRef(null);
833
- var onScroll = React.useCallback(function () {
834
- var _affixRef$current;
835
- (_affixRef$current = affixRef.current) == null || _affixRef$current.updatePosition == null || _affixRef$current.updatePosition();
836
- }, []);
837
- React.useEffect(function () {
838
- window.addEventListener('scroll', onScroll, true);
839
- return function () {
840
- return window.removeEventListener('scroll', onScroll);
841
- };
842
- }, [onScroll]);
843
- var getUrl = React.useCallback(function (url) {
844
- if (!url) return '';
845
- var cleanedUrl = url.replace(/^\/+/, '');
846
- var parts = [mainAppBaseUrl == null ? void 0 : mainAppBaseUrl.replace(/\/+$/, ''), microAppName == null ? void 0 : microAppName.replace(/\/+$/, ''), cleanedUrl].filter(Boolean);
847
- return "/" + parts.join('/');
848
- }, [mainAppBaseUrl, microAppName]);
849
- return React.createElement(CompThemeProvider, null, React.createElement("div", {
850
- className: classname$1() + " " + (className || ''),
851
- style: style
852
- }, React.createElement(antd.Affix, {
853
- ref: affixRef,
854
- offsetTop: offsetTop
855
- }, React.createElement(antd.Card, {
856
- className: classname$1('container'),
857
- rootClassName: classname$1('body'),
858
- variant: "borderless"
859
- }, React.createElement(antd.Breadcrumb, {
860
- className: classname$1('inner-breadcrumb'),
861
- style: {
862
- fontSize: '18px'
686
+ var noop = function noop() {};
687
+ // 生成类名
688
+ var getClassName = function getClassName(key1, key2) {
689
+ var cn = key1;
690
+ var str = key1;
691
+ if (key2.includes(' ')) {
692
+ str = '';
693
+ var nArr = key2 == null ? void 0 : key2.split(' ');
694
+ for (var _iterator = _createForOfIteratorHelperLoose(nArr), _step; !(_step = _iterator()).done;) {
695
+ var i = _step.value;
696
+ str += " " + cn + "-" + i;
863
697
  }
864
- }, routes == null ? void 0 : routes.map(function (v) {
865
- return React.createElement(antd.Breadcrumb.Item, {
866
- key: v.url || v.name
867
- }, v.url ? React.createElement("a", {
868
- href: "#" + getUrl(v.url)
869
- }, v.name) : v.name);
870
- })), React.createElement("div", {
871
- className: classname$1('custom-item-wrapper')
872
- }, React.createElement(ItemsRow, {
873
- items: customItems
874
- }))))));
875
- };
876
-
877
- var DetailDescriptions = function DetailDescriptions(props) {
878
- var data = props.data,
879
- title = props.title,
880
- _props$column = props.column,
881
- column = _props$column === void 0 ? 3 : _props$column,
882
- lineHeight = props.lineHeight,
883
- _props$align = props.align,
884
- align = _props$align === void 0 ? 'left' : _props$align,
885
- itemLayout = props.itemLayout,
886
- _props$colon = props.colon,
887
- colon = _props$colon === void 0 ? true : _props$colon,
888
- _props$bordered = props.bordered,
889
- bordered = _props$bordered === void 0 ? false : _props$bordered,
890
- style = props.style,
891
- className = props.className,
892
- labelStyle = props.labelStyle,
893
- contentStyle = props.contentStyle;
894
- // 合并样式
895
- var mergedLabelStyle = _extends({}, lineHeight ? {
896
- lineHeight: lineHeight + "px"
897
- } : {}, {
898
- textAlign: align
899
- }, itemLayout != null && itemLayout.label ? {
900
- width: itemLayout.label + "px"
901
- } : {}, labelStyle);
902
- var mergedContentStyle = _extends({}, lineHeight ? {
903
- lineHeight: lineHeight + "px"
904
- } : {}, itemLayout != null && itemLayout.value ? {
905
- width: itemLayout.value + "px"
906
- } : {}, contentStyle);
907
- return React__default.createElement(CompThemeProvider, null, React__default.createElement(antd.Descriptions, {
908
- title: title,
909
- column: column,
910
- colon: colon,
911
- bordered: bordered,
912
- style: style,
913
- className: className,
914
- labelStyle: mergedLabelStyle,
915
- contentStyle: mergedContentStyle
916
- }, data.map(function (item, index) {
917
- var _item$label;
918
- return React__default.createElement(antd.Descriptions.Item, {
919
- label: item.label,
920
- key: ((_item$label = item.label) == null ? void 0 : _item$label.toString()) || index,
921
- span: item.span
922
- }, item.value || '-');
923
- })));
698
+ } else if (key2) {
699
+ str = key1 + "-" + key2;
700
+ }
701
+ return str;
924
702
  };
925
- DetailDescriptions.displayName = 'DetailDescriptions';
926
-
927
- // 全局状态管理
928
- var globalMode = 'default';
929
- var modalInstances = [];
930
- var getThemeConfig = function getThemeConfig(mode) {
931
- switch (mode) {
932
- case 'light':
933
- return {
934
- algorithm: [antd.theme.defaultAlgorithm]
935
- };
936
- case 'dark':
937
- return {
938
- algorithm: [antd.theme.darkAlgorithm]
939
- };
940
- default:
941
- return {
942
- algorithm: [antd.theme.defaultAlgorithm]
943
- };
703
+ // 根据路径获取数据
704
+ var getFieldsByPath = function getFieldsByPath(data, path) {
705
+ var arr = path == null ? void 0 : path.split('.');
706
+ var res = data;
707
+ for (var _iterator2 = _createForOfIteratorHelperLoose(arr), _step2; !(_step2 = _iterator2()).done;) {
708
+ var i = _step2.value;
709
+ res = res[i];
944
710
  }
711
+ return res;
945
712
  };
946
- var MiModal = /*#__PURE__*/function (_Component) {
947
- function MiModal() {
948
- var _this;
949
- _this = _Component.apply(this, arguments) || this;
950
- _this.handleCancel = function (e) {
951
- _this.props.onCancel == null || _this.props.onCancel(e);
952
- _this.props.onClosed == null || _this.props.onClosed({
953
- cancel: true
954
- });
955
- };
956
- _this.handleOk = function (e) {
957
- _this.props.onOk == null || _this.props.onOk(e);
958
- _this.props.onClosed == null || _this.props.onClosed({
959
- ok: true
960
- });
961
- };
962
- return _this;
713
+ // 删除空值
714
+ var removeNull = function removeNull(obj) {
715
+ for (var key in obj) {
716
+ if (obj[key] === null) {
717
+ delete obj[key];
718
+ }
963
719
  }
964
- _inheritsLoose(MiModal, _Component);
965
- var _proto = MiModal.prototype;
966
- _proto.getTheme = function getTheme() {
967
- var mode = this.props.mode || globalMode;
968
- return getThemeConfig(mode);
969
- };
970
- _proto.render = function render() {
971
- return React__default.createElement(antd.ConfigProvider, {
972
- theme: this.getTheme(),
973
- componentSize: "middle",
974
- componentDisabled: false
975
- }, React__default.createElement(antd.Modal, Object.assign({
976
- maskClosable: false,
977
- open: this.props.open,
978
- onCancel: this.handleCancel,
979
- onOk: this.handleOk,
980
- okText: "\u786E\u5B9A",
981
- cancelText: "\u53D6\u6D88"
982
- }, this.props), this.props.children));
983
- };
984
- return MiModal;
985
- }(React.Component); // 静态方法设置全局模式并更新所有弹窗
986
- MiModal.setMode = function (mode) {
987
- globalMode = mode;
988
- // 更新所有已打开的弹窗
989
- modalInstances.forEach(function (instance) {
990
- instance.update({
991
- mode: mode
992
- });
993
- });
720
+ return obj;
994
721
  };
995
- // 静态方法设置全局ThemeConfig
996
- MiModal.setThemeConfig = function (fn) {
997
- getThemeConfig = fn;
722
+ // 防抖函数
723
+ var debounce = function debounce(func, wait) {
724
+ var timeout = null;
725
+ return function () {
726
+ for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) {
727
+ args[_key] = arguments[_key];
728
+ }
729
+ if (timeout) {
730
+ clearTimeout(timeout);
731
+ }
732
+ timeout = setTimeout(function () {
733
+ func.apply(void 0, args);
734
+ }, wait);
735
+ };
998
736
  };
999
- MiModal.open = function (props) {
1000
- var instance = openModal(MiModal, _extends({
1001
- mode: globalMode
1002
- }, props));
1003
- // 注册实例以便全局更新
1004
- modalInstances.push(instance);
1005
- // 添加销毁时的清理逻辑
1006
- var originalDestroy = instance.destroy;
1007
- instance.destroy = function () {
1008
- var index = modalInstances.indexOf(instance);
1009
- if (index !== -1) {
1010
- modalInstances.splice(index, 1);
737
+ // 节流函数
738
+ var throttle = function throttle(func, wait) {
739
+ var timeout = null;
740
+ var lastTime = 0;
741
+ return function () {
742
+ var nowTime = Date.now();
743
+ if (!timeout) {
744
+ func.apply(void 0, arguments);
745
+ lastTime = nowTime;
746
+ timeout = setTimeout(function () {
747
+ timeout = null;
748
+ }, wait);
749
+ } else {
750
+ var diffTime = nowTime - lastTime;
751
+ if (diffTime >= wait) {
752
+ func.apply(void 0, arguments);
753
+ lastTime = nowTime;
754
+ }
1011
755
  }
1012
- return originalDestroy.apply(void 0, arguments);
1013
756
  };
1014
- return instance;
1015
757
  };
1016
758
 
1017
- function MTable(props) {
1018
- var _props$columns$map, _props$columns;
1019
- var columns = (_props$columns$map = (_props$columns = props.columns) == null ? void 0 : _props$columns.map(function (e) {
1020
- return _extends({}, e, {
1021
- dataIndex: e.key
1022
- });
1023
- })) != null ? _props$columns$map : [];
1024
- return React__default.createElement(CompThemeProvider, null, React__default.createElement(antd.Table, Object.assign({
1025
- rowKey: function rowKey(e) {
1026
- return e.id;
759
+ /**
760
+ * 版本号工具类
761
+ * 支持语义化版本 (SemVer) 和基本版本号比较
762
+ */
763
+ var VersionUtil = /*#__PURE__*/function () {
764
+ function VersionUtil() {}
765
+ /**
766
+ * 验证版本号格式是否有效
767
+ * @param version 版本号字符串
768
+ * @returns 是否有效
769
+ */
770
+ VersionUtil.isValid = function isValid(version) {
771
+ var semverRegex = /^v?(0|[1-9]\d*)\.(0|[1-9]\d*)\.(0|[1-9]\d*)(?:-((?:0|[1-9]\d*|\d*[a-zA-Z-][0-9a-zA-Z-]*)(?:\.(?:0|[1-9]\d*|\d*[a-zA-Z-][0-9a-zA-Z-]*))*))?(?:\+([0-9a-zA-Z-]+(?:\.[0-9a-zA-Z-]+)*))?$/i;
772
+ return semverRegex.test(version);
773
+ }
774
+ /**
775
+ * 比较两个版本号
776
+ * @param v1 版本号1
777
+ * @param v2 版本号2
778
+ * @returns 比较结果: 1(v1>v2), 0(v1=v2), -1(v1<v2)
779
+ */;
780
+ VersionUtil.compare = function compare(v1, v2) {
781
+ if (!this.isValid(v1) || !this.isValid(v2)) {
782
+ throw new Error('Invalid version format');
1027
783
  }
1028
- }, props, {
1029
- columns: columns
1030
- })), ";");
1031
- }
1032
- MTable.displayName = 'MTable';
1033
-
1034
- var DATE_FORMAT = {
1035
- YMD_Hms: 'YYYY-MM-DD HH:mm:ss',
1036
- YMD: 'YYYY-MM-DD',
1037
- YMD2: 'YYYYMMDD',
1038
- YMD_POINT: 'YYYY.M.DD',
1039
- Hms: 'HH:mm:ss',
1040
- Hm: 'HH:mm',
1041
- YMD_000: 'YYYY-MM-DD 00:00:00',
1042
- YMD_end: 'YYYY-MM-DD 23:59:59',
1043
- YMD_Hm: 'YYYYMMDD HHmm'
1044
- };
1045
-
1046
- var PAGE_SIZE = 10;
1047
-
1048
- var PatternType = function PatternType() {};
1049
- // 整数
1050
- PatternType.integerRegex = /^-?\d+$/;
1051
- // 正整数
1052
- PatternType.positiveIntegerRegex = /^[1-9]\d*$/;
1053
- // 负整数
1054
- PatternType.negativeIntegerRegex = /^-[1-9]\d*$/;
1055
- // 浮点数
1056
- PatternType.floatRegex = /^-?\d+(\.\d+)?$/;
1057
- // 字母
1058
- PatternType.letter = /^[a-zA-Z]+$/;
1059
- // 汉字
1060
- PatternType.chinese = /^[\u4e00-\u9fa5]+$/;
1061
- // 数字
1062
- PatternType.number = /^[0-9]*$/;
1063
- // 用户名 字母开头,允许字母数字下划线,长度4-16
1064
- PatternType.username = /^[a-zA-Z]\w{3,15}$/;
1065
- // 强用户名 必须包含大小写字母和数字,6-20位
1066
- PatternType.strongUsername = /^(?=.*[a-z])(?=.*[A-Z])(?=.*\d)[a-zA-Z\d]{6,20}$/;
1067
- // 密码 至少8位,包含字母和数字
1068
- PatternType.password = /^(?=.*[A-Za-z])(?=.*\d)[A-Za-z\d]{8,}$/;
1069
- // 强密码 至少8位,包含大小写字母、数字和特殊字符
1070
- PatternType.strongPassword = /^(?=.*[a-z])(?=.*[A-Z])(?=.*\d)(?=.*[@$!%*?&])[A-Za-z\d@$!%*?&]{8,}$/;
1071
- // 中国大陆的手机号
1072
- PatternType.phone = /^1[3-9]\d{9}$/;
1073
- // 带区号的手机号
1074
- PatternType.phoneWithAreaCode = /^\+?\d{2,3}-?\d{8,11}$/;
1075
- // 邮箱
1076
- PatternType.email = /^[a-zA-Z0-9._%+-]+@[a-zA-Z0-9.-]+\.[a-zA-Z]{2,}$/;
1077
- // 身份证
1078
- PatternType.idCard = /^[1-9]\d{5}[1-9]\d{3}((0\d)|(1[0-2]))(([0|1|2]\d)|3[0-1])\d{3}([0-9]|X)$/;
1079
- // 银行卡
1080
- PatternType.bankCard = /^[1-9]\d{3,30}$/;
1081
- // 邮政编码
1082
- PatternType.zipCode = /^[1-9]\d{5}$/;
1083
- // IP
1084
- PatternType.ip = /^(\d{1,2}|1\d\d|2[0-4]\d|25[0-5])\.(\d{1,2}|1\d\d|2[0-4]\d|25[0-5])\.(\d{1,2}|1\d\d|2[0-4]\d|25[0-5])\.(\d{1,2}|1\d\d|2[0-4]\d|25[0-5])$/;
1085
- // URL
1086
- PatternType.url = /^(https?:\/\/)?([\da-z.-]+)\.([a-z.]{2,6})([/\w .-]*)*\/?$/;
1087
- // 车牌
1088
- PatternType.carNumber = /^[京津沪渝冀豫云辽黑湘皖鲁新苏浙赣鄂桂甘晋蒙陕吉闽贵粤青藏川宁琼使领][A-HJ-NP-Z][A-HJ-NP-Z0-9]{4,5}[A-HJ-NP-Z0-9挂学警港澳]$/;
1089
- // 时间 hh:mm:ss
1090
- PatternType.time = /^([0-1][0-9]|2[0-3]):([0-5][0-9]):([0-5][0-9])$/;
1091
- // 日期 YYYY-MM-DD
1092
- PatternType.date = /^(\d{4})-(\d{2})-(\d{2})$/;
1093
-
1094
- function useFuncRequest(
1095
- // 异步函数
1096
- asyncFunc,
1097
- // 配置项
1098
- options) {
1099
- var _useState = React.useState(false),
1100
- loading = _useState[0],
1101
- setLoading = _useState[1];
1102
- var _useState2 = React.useState(null),
1103
- error = _useState2[0],
1104
- setError = _useState2[1];
1105
- var _useState3 = React.useState(null),
1106
- data = _useState3[0],
1107
- setData = _useState3[1];
1108
- var abortControllerRef = React.useRef(undefined);
1109
- var requestIdRef = React.useRef(0);
1110
- var cancel = function cancel() {
1111
- var _abortControllerRef$c;
1112
- (_abortControllerRef$c = abortControllerRef.current) == null || _abortControllerRef$c.abort();
1113
- setLoading(false);
1114
- setError(null);
1115
- };
1116
- var run = /*#__PURE__*/function () {
1117
- var _ref = _asyncToGenerator(/*#__PURE__*/_regenerator().m(function _callee() {
1118
- var currentRequestId,
1119
- abortController,
1120
- _len,
1121
- args,
1122
- _key,
1123
- beforeRes,
1124
- funcArgs,
1125
- res,
1126
- _args = arguments,
1127
- _t;
1128
- return _regenerator().w(function (_context) {
1129
- while (1) switch (_context.p = _context.n) {
1130
- case 0:
1131
- currentRequestId = ++requestIdRef.current;
1132
- cancel();
1133
- abortController = new AbortController();
1134
- abortControllerRef.current = abortController;
1135
- _context.p = 1;
1136
- setLoading(true);
1137
- setError(null);
1138
- for (_len = _args.length, args = new Array(_len), _key = 0; _key < _len; _key++) {
1139
- args[_key] = _args[_key];
1140
- }
1141
- if (!(options != null && options.onBefore)) {
1142
- _context.n = 3;
1143
- break;
1144
- }
1145
- _context.n = 2;
1146
- return options == null || options.onBefore == null ? void 0 : options.onBefore.apply(options, args);
1147
- case 2:
1148
- beforeRes = _context.v;
1149
- if (beforeRes) {
1150
- _context.n = 3;
1151
- break;
1152
- }
1153
- cancel();
1154
- return _context.a(2);
1155
- case 3:
1156
- // 安全传递 AbortSignal
1157
- funcArgs = args.length >= asyncFunc.length ? args : [].concat(args, [{
1158
- signal: abortController.signal
1159
- }]);
1160
- _context.n = 4;
1161
- return asyncFunc.apply(void 0, funcArgs);
1162
- case 4:
1163
- res = _context.v;
1164
- if (!(!abortController.signal.aborted && currentRequestId === requestIdRef.current)) {
1165
- _context.n = 5;
1166
- break;
1167
- }
1168
- setData(res);
1169
- _context.n = 5;
1170
- return options == null || options.onSuccess == null ? void 0 : options.onSuccess(res);
1171
- case 5:
1172
- return _context.a(2, res);
1173
- case 6:
1174
- _context.p = 6;
1175
- _t = _context.v;
1176
- if (!(!abortController.signal.aborted && currentRequestId === requestIdRef.current)) {
1177
- _context.n = 7;
1178
- break;
1179
- }
1180
- setError(_t);
1181
- _context.n = 7;
1182
- return options == null || options.onError == null ? void 0 : options.onError(_t);
1183
- case 7:
1184
- throw _t;
1185
- case 8:
1186
- _context.p = 8;
1187
- if (!(!abortController.signal.aborted && currentRequestId === requestIdRef.current)) {
1188
- _context.n = 9;
1189
- break;
1190
- }
1191
- setLoading(false);
1192
- _context.n = 9;
1193
- return options == null || options.onFinally == null ? void 0 : options.onFinally();
1194
- case 9:
1195
- return _context.f(8);
1196
- case 10:
1197
- return _context.a(2);
1198
- }
1199
- }, _callee, null, [[1, 6, 8, 10]]);
1200
- }));
1201
- return function run() {
1202
- return _ref.apply(this, arguments);
784
+ // 去除前缀v并分割版本号
785
+ var normalize = function normalize(v) {
786
+ return v.replace(/^v/, '').split(/[-+]/)[0].split('.');
1203
787
  };
1204
- }();
1205
- React.useEffect(function () {
1206
- if (options != null && options.autoRunArgs) {
1207
- run.apply(void 0, options.autoRunArgs)["catch"](function () {});
788
+ var parts1 = normalize(v1);
789
+ var parts2 = normalize(v2);
790
+ for (var i = 0; i < 3; i++) {
791
+ var num1 = parseInt(parts1[i] || '0', 10);
792
+ var num2 = parseInt(parts2[i] || '0', 10);
793
+ if (num1 > num2) return 1;
794
+ if (num1 < num2) return -1;
1208
795
  }
1209
- return cancel;
1210
- }, [JSON.stringify(options == null ? void 0 : options.autoRunArgs)]);
1211
- return {
1212
- run: run,
1213
- cancel: cancel,
1214
- loading: loading,
1215
- error: error,
1216
- data: data
1217
- };
1218
- }
1219
-
1220
- function useInterval(callback, delay, immediate) {
1221
- if (immediate === void 0) {
1222
- immediate = false;
796
+ // 比较预发布版本
797
+ var preRelease1 = v1.match(/-(.+)/);
798
+ var preRelease2 = v2.match(/-(.+)/);
799
+ if (preRelease1 && !preRelease2) return -1;
800
+ if (!preRelease1 && preRelease2) return 1;
801
+ if (preRelease1 && preRelease2) {
802
+ return preRelease1[1].localeCompare(preRelease2[1]);
803
+ }
804
+ return 0;
1223
805
  }
1224
- var timerRef = React.useRef(undefined);
1225
- var savedCallback = React.useRef(callback);
1226
- // Update callback ref if callback changes
1227
- React.useEffect(function () {
1228
- savedCallback.current = callback;
1229
- }, [callback]);
1230
- var clear = React.useCallback(function () {
1231
- if (timerRef.current) {
1232
- clearInterval(timerRef.current);
1233
- timerRef.current = undefined;
806
+ /**
807
+ * 检查版本号是否满足范围要求
808
+ * @param version 要检查的版本
809
+ * @param range 版本范围 ( ">=1.0.0 <2.0.0") 支持: >, >=, <, <=, ^, ~, ==, =
810
+ * @returns 是否满足
811
+ */;
812
+ VersionUtil.satisfies = function satisfies(version, range) {
813
+ var _this = this;
814
+ if (!this.isValid(version)) return false;
815
+ var rangeRegex = /([<>]=?|==?|\^|~)?\s*v?([0-9]+\.[0-9]+\.[0-9]+(?:-[0-9A-Za-z-]+(?:\.[0-9A-Za-z-]+)*)?(?:\+[0-9A-Za-z-]+)?)/g;
816
+ var ranges = range.match(rangeRegex);
817
+ if (!ranges || ranges.length === 0) return false;
818
+ return ranges.every(function (r) {
819
+ var match = r.match(/([<>]=?|==?|\^|~)?\s*(v?[0-9].*)/);
820
+ if (!match) return false;
821
+ var operator = match[1] || '==';
822
+ var rangeVersion = match[2];
823
+ if (!_this.isValid(rangeVersion)) return false;
824
+ var comparison = _this.compare(version, rangeVersion);
825
+ switch (operator) {
826
+ case '>':
827
+ return comparison > 0;
828
+ case '>=':
829
+ return comparison >= 0;
830
+ case '<':
831
+ return comparison < 0;
832
+ case '<=':
833
+ return comparison <= 0;
834
+ case '^':
835
+ return _this.caretRange(version, rangeVersion);
836
+ case '~':
837
+ return _this.tildeRange(version, rangeVersion);
838
+ case '=':
839
+ case '==':
840
+ default:
841
+ return comparison === 0;
842
+ }
843
+ });
844
+ }
845
+ /**
846
+ * 处理 ^ 范围 (允许不修改最左边的非零数字)
847
+ * @param version 版本号
848
+ * @param range 范围版本
849
+ * @returns 是否匹配
850
+ */;
851
+ VersionUtil.caretRange = function caretRange(version, range) {
852
+ var normalize = function normalize(v) {
853
+ return v.replace(/^v/, '').split(/[-+]/)[0].split('.');
854
+ };
855
+ var vParts = normalize(version);
856
+ var rParts = normalize(range);
857
+ // 找到第一个非零部分
858
+ var firstNonZero = 0;
859
+ for (var i = 0; i < rParts.length; i++) {
860
+ if (parseInt(rParts[i], 10) !== 0) {
861
+ firstNonZero = i;
862
+ break;
863
+ }
1234
864
  }
1235
- }, []);
1236
- var start = React.useCallback(function () {
1237
- clear();
1238
- if (delay !== null && delay !== undefined) {
1239
- timerRef.current = setInterval(function () {
1240
- return savedCallback.current();
1241
- }, delay);
865
+ for (var _i = 0; _i <= firstNonZero; _i++) {
866
+ var vNum = parseInt(vParts[_i] || '0', 10);
867
+ var rNum = parseInt(rParts[_i] || '0', 10);
868
+ if (vNum !== rNum) return false;
1242
869
  }
1243
- }, [delay, clear]);
1244
- React.useEffect(function () {
1245
- if (immediate) {
1246
- savedCallback.current();
870
+ return this.compare(version, range) >= 0;
871
+ }
872
+ /**
873
+ * 处理 ~ 范围 (允许修改最后一位数字)
874
+ * @param version 版本号
875
+ * @param range 范围版本
876
+ * @returns 是否匹配
877
+ */;
878
+ VersionUtil.tildeRange = function tildeRange(version, range) {
879
+ var normalize = function normalize(v) {
880
+ return v.replace(/^v/, '').split(/[-+]/)[0].split('.');
881
+ };
882
+ var vParts = normalize(version);
883
+ var rParts = normalize(range);
884
+ for (var i = 0; i < rParts.length - 1; i++) {
885
+ var vNum = parseInt(vParts[i] || '0', 10);
886
+ var rNum = parseInt(rParts[i] || '0', 10);
887
+ if (vNum !== rNum) return false;
1247
888
  }
1248
- start();
1249
- return clear;
1250
- }, [delay, start, clear, immediate]);
1251
- return {
1252
- start: start,
1253
- clear: clear,
1254
- isRunning: !!timerRef.current
889
+ var lastVNum = parseInt(vParts[rParts.length - 1] || '0', 10);
890
+ var lastRNum = parseInt(rParts[rParts.length - 1] || '0', 10);
891
+ return lastVNum >= lastRNum;
892
+ }
893
+ /**
894
+ * 获取主版本号 (major)
895
+ * @param version 版本号
896
+ * @returns 主版本号
897
+ */;
898
+ VersionUtil.getMajor = function getMajor(version) {
899
+ if (!this.isValid(version)) throw new Error('Invalid version format');
900
+ var parts = version.replace(/^v/, '').split('.');
901
+ return parseInt(parts[0], 10);
902
+ }
903
+ /**
904
+ * 获取次版本号 (minor)
905
+ * @param version 版本号
906
+ * @returns 次版本号
907
+ */;
908
+ VersionUtil.getMinor = function getMinor(version) {
909
+ if (!this.isValid(version)) throw new Error('Invalid version format');
910
+ var parts = version.replace(/^v/, '').split('.');
911
+ return parseInt(parts[1] || '0', 10);
912
+ }
913
+ /**
914
+ * 获取修订号 (patch)
915
+ * @param version 版本号
916
+ * @returns 修订号
917
+ */;
918
+ VersionUtil.getPatch = function getPatch(version) {
919
+ if (!this.isValid(version)) throw new Error('Invalid version format');
920
+ var parts = version.replace(/^v/, '').split('.');
921
+ return parseInt(parts[2] || '0', 10);
922
+ }
923
+ /**
924
+ * 获取预发布版本标识
925
+ * @param version 版本号
926
+ * @returns 预发布标识 (无则返回null)
927
+ */;
928
+ VersionUtil.getPrerelease = function getPrerelease(version) {
929
+ if (!this.isValid(version)) throw new Error('Invalid version format');
930
+ var match = version.match(/-([^+]+)/);
931
+ return match ? match[1] : null;
932
+ }
933
+ /**
934
+ * 获取构建元数据
935
+ * @param version 版本号
936
+ * @returns 构建元数据 (无则返回null)
937
+ */;
938
+ VersionUtil.getBuildMetadata = function getBuildMetadata(version) {
939
+ if (!this.isValid(version)) throw new Error('Invalid version format');
940
+ var match = version.match(/\+([^]+)/);
941
+ return match ? match[1] : null;
1255
942
  };
1256
- }
943
+ return VersionUtil;
944
+ }();
1257
945
 
1258
946
  var usePagination = function usePagination(server, deps,
1259
947
  // 依赖条件 数据更新默认执行server
@@ -1766,12 +1454,6 @@ option) {
1766
1454
  };
1767
1455
 
1768
1456
  exports.DATE_FORMAT = DATE_FORMAT;
1769
- exports.ItemRow = ItemsRow;
1770
- exports.MBreadcrumb = MBreadcrumb;
1771
- exports.MDescriptions = DetailDescriptions;
1772
- exports.MTable = MTable;
1773
- exports.MiModal = MiModal;
1774
- exports.MiThemeProvider = MiThemeProvider;
1775
1457
  exports.NextTick = NextTick;
1776
1458
  exports.PAGE_SIZE = PAGE_SIZE;
1777
1459
  exports.PatternType = PatternType;
@@ -1787,7 +1469,6 @@ exports.removeNull = removeNull;
1787
1469
  exports.throttle = throttle;
1788
1470
  exports.useFuncRequest = useFuncRequest;
1789
1471
  exports.useInterval = useInterval;
1790
- exports.useMiThemeConfig = useMiThemeConfig;
1791
1472
  exports.usePagination = usePagination;
1792
1473
  exports.useQuery = useQuery;
1793
1474
  exports.useReactive = useReactive;