@mi-avalon/libs 0.0.10 → 0.0.12

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/dist/libs.esm.js CHANGED
@@ -1,96 +1,65 @@
1
- import { theme, ConfigProvider, Button, Affix, Card, Breadcrumb, Descriptions, Input, InputNumber, DatePicker, Select, Radio, Checkbox, Upload, Mentions, Cascader, TreeSelect, Form, Row, Col, Modal, Table } from 'antd';
2
- import React__default, { useContext, createContext, createElement, useRef, useCallback, useEffect, Component, useState } from 'react';
1
+ import React, { useState, useRef, useEffect, useCallback } from 'react';
3
2
  import { createRoot as createRoot$1 } from 'react-dom/client';
4
- import { UploadOutlined, CaretUpOutlined, CaretDownOutlined } from '@ant-design/icons';
5
3
 
6
- var CMX = function CMX() {
7
- /**
8
- **
9
- **/
10
- this.add = function (arg1, arg2) {
11
- var r1, r2, m, c;
12
- try {
13
- r1 = arg1.toString().split('.')[1].length;
14
- } catch (e) {
15
- r1 = 0;
16
- }
17
- try {
18
- r2 = arg2.toString().split('.')[1].length;
19
- } catch (e) {
20
- r2 = 0;
21
- }
22
- c = Math.abs(r1 - r2);
23
- m = Math.pow(10, Math.max(r1, r2));
24
- if (c > 0) {
25
- var cm = Math.pow(10, c);
26
- if (r1 > r2) {
27
- arg1 = Number(arg1.toString().replace('.', ''));
28
- arg2 = Number(arg2.toString().replace('.', '')) * cm;
29
- } else {
30
- arg1 = Number(arg1.toString().replace('.', '')) * cm;
31
- arg2 = Number(arg2.toString().replace('.', ''));
32
- }
33
- } else {
34
- var _arg, _arg2;
35
- arg1 = Number((_arg = arg1) == null ? void 0 : _arg.toString().replace('.', ''));
36
- arg2 = Number((_arg2 = arg2) == null ? void 0 : _arg2.toString().replace('.', ''));
37
- }
38
- return (arg1 + arg2) / m;
39
- };
40
- /**
41
- ** 减
42
- **/
43
- this.sub = function (arg1, arg2) {
44
- var r1, r2, m, n;
45
- try {
46
- r1 = arg1.toString().split('.')[1].length;
47
- } catch (e) {
48
- r1 = 0;
49
- }
50
- try {
51
- r2 = arg2.toString().split('.')[1].length;
52
- } catch (e) {
53
- r2 = 0;
54
- }
55
- m = Math.pow(10, Math.max(r1, r2)); //last modify by deeka //动态控制精度长度
56
- n = r1 >= r2 ? r1 : r2;
57
- return Number(((arg1 * m - arg2 * m) / m).toFixed(n));
58
- };
59
- /**
60
- ** 乘
61
- **/
62
- this.mul = function (arg1, arg2) {
63
- var m = 0,
64
- s1 = arg1.toString(),
65
- s2 = arg2.toString();
66
- try {
67
- m += s1.split('.')[1].length;
68
- } catch (e) {}
69
- try {
70
- m += s2.split('.')[1].length;
71
- } catch (e) {}
72
- return Number(s1.replace('.', '')) * Number(s2.replace('.', '')) / Math.pow(10, m);
73
- };
74
- /**
75
- ** 除
76
- **/
77
- this.div = function (arg1, arg2) {
78
- var t1 = 0,
79
- t2 = 0,
80
- r1,
81
- r2;
82
- try {
83
- t1 = arg1.toString().split('.')[1].length;
84
- } catch (e) {}
85
- try {
86
- t2 = arg2.toString().split('.')[1].length;
87
- } catch (e) {}
88
- r1 = Number(arg1.toString().replace('.', ''));
89
- r2 = Number(arg2.toString().replace('.', ''));
90
- return r1 / r2 * Math.pow(10, t2 - t1);
91
- };
4
+ var DATE_FORMAT = {
5
+ YMD_Hms: 'YYYY-MM-DD HH:mm:ss',
6
+ YMD: 'YYYY-MM-DD',
7
+ YMD2: 'YYYYMMDD',
8
+ YMD_POINT: 'YYYY.M.DD',
9
+ Hms: 'HH:mm:ss',
10
+ Hm: 'HH:mm',
11
+ YMD_000: 'YYYY-MM-DD 00:00:00',
12
+ YMD_end: 'YYYY-MM-DD 23:59:59',
13
+ YMD_Hm: 'YYYYMMDD HHmm'
92
14
  };
93
- var cmx = /*#__PURE__*/new CMX();
15
+
16
+ var PAGE_SIZE = 10;
17
+
18
+ var PatternType = function PatternType() {};
19
+ // 整数
20
+ PatternType.integerRegex = /^-?\d+$/;
21
+ // 正整数
22
+ PatternType.positiveIntegerRegex = /^[1-9]\d*$/;
23
+ // 负整数
24
+ PatternType.negativeIntegerRegex = /^-[1-9]\d*$/;
25
+ // 浮点数
26
+ PatternType.floatRegex = /^-?\d+(\.\d+)?$/;
27
+ // 字母
28
+ PatternType.letter = /^[a-zA-Z]+$/;
29
+ // 汉字
30
+ PatternType.chinese = /^[\u4e00-\u9fa5]+$/;
31
+ // 数字
32
+ PatternType.number = /^[0-9]*$/;
33
+ // 用户名 字母开头,允许字母数字下划线,长度4-16
34
+ PatternType.username = /^[a-zA-Z]\w{3,15}$/;
35
+ // 强用户名 必须包含大小写字母和数字,6-20位
36
+ PatternType.strongUsername = /^(?=.*[a-z])(?=.*[A-Z])(?=.*\d)[a-zA-Z\d]{6,20}$/;
37
+ // 密码 至少8位,包含字母和数字
38
+ PatternType.password = /^(?=.*[A-Za-z])(?=.*\d)[A-Za-z\d]{8,}$/;
39
+ // 强密码 至少8位,包含大小写字母、数字和特殊字符
40
+ PatternType.strongPassword = /^(?=.*[a-z])(?=.*[A-Z])(?=.*\d)(?=.*[@$!%*?&])[A-Za-z\d@$!%*?&]{8,}$/;
41
+ // 中国大陆的手机号
42
+ PatternType.phone = /^1[3-9]\d{9}$/;
43
+ // 带区号的手机号
44
+ PatternType.phoneWithAreaCode = /^\+?\d{2,3}-?\d{8,11}$/;
45
+ // 邮箱
46
+ PatternType.email = /^[a-zA-Z0-9._%+-]+@[a-zA-Z0-9.-]+\.[a-zA-Z]{2,}$/;
47
+ // 身份证
48
+ 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)$/;
49
+ // 银行卡
50
+ PatternType.bankCard = /^[1-9]\d{3,30}$/;
51
+ // 邮政编码
52
+ PatternType.zipCode = /^[1-9]\d{5}$/;
53
+ // IP
54
+ 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])$/;
55
+ // URL
56
+ PatternType.url = /^(https?:\/\/)?([\da-z.-]+)\.([a-z.]{2,6})([/\w .-]*)*\/?$/;
57
+ // 车牌
58
+ PatternType.carNumber = /^[京津沪渝冀豫云辽黑湘皖鲁新苏浙赣鄂桂甘晋蒙陕吉闽贵粤青藏川宁琼使领][A-HJ-NP-Z][A-HJ-NP-Z0-9]{4,5}[A-HJ-NP-Z0-9挂学警港澳]$/;
59
+ // 时间 hh:mm:ss
60
+ PatternType.time = /^([0-1][0-9]|2[0-3]):([0-5][0-9]):([0-5][0-9])$/;
61
+ // 日期 YYYY-MM-DD
62
+ PatternType.date = /^(\d{4})-(\d{2})-(\d{2})$/;
94
63
 
95
64
  function _arrayLikeToArray(r, a) {
96
65
  (null == a || a > r.length) && (a = r.length);
@@ -159,9 +128,6 @@ function _extends() {
159
128
  return n;
160
129
  }, _extends.apply(null, arguments);
161
130
  }
162
- function _inheritsLoose(t, o) {
163
- t.prototype = Object.create(o.prototype), t.prototype.constructor = t, _setPrototypeOf(t, o);
164
- }
165
131
  function _regenerator() {
166
132
  /*! regenerator-runtime -- Copyright (c) 2014-present, Facebook, Inc. -- license (MIT): https://github.com/babel/babel/blob/main/packages/babel-helpers/LICENSE */
167
133
  var e,
@@ -272,11 +238,6 @@ function _regeneratorDefine(e, r, n, t) {
272
238
  }
273
239
  }, _regeneratorDefine(e, r, n, t);
274
240
  }
275
- function _setPrototypeOf(t, e) {
276
- return _setPrototypeOf = Object.setPrototypeOf ? Object.setPrototypeOf.bind() : function (t, e) {
277
- return t.__proto__ = e, t;
278
- }, _setPrototypeOf(t, e);
279
- }
280
241
  function _toPrimitive(t, r) {
281
242
  if ("object" != typeof t || !t) return t;
282
243
  var e = t[Symbol.toPrimitive];
@@ -299,1285 +260,681 @@ function _unsupportedIterableToArray(r, a) {
299
260
  }
300
261
  }
301
262
 
302
- var NextTick = /*#__PURE__*/function () {
303
- function NextTick() {
304
- this.callbacks = [];
305
- this.pending = false;
306
- this.timerFunc = this.determineTimerFunc();
307
- }
308
- var _proto = NextTick.prototype;
309
- _proto.determineTimerFunc = function determineTimerFunc() {
310
- var _this = this;
311
- if (typeof Promise !== 'undefined') {
312
- var p = Promise.resolve();
313
- return function () {
314
- return p.then(_this.flushCallbacks.bind(_this));
315
- };
316
- }
317
- if (typeof MutationObserver !== 'undefined' && typeof window !== 'undefined') {
318
- var counter = 1;
319
- var observer = new MutationObserver(this.flushCallbacks.bind(this));
320
- var textNode = document.createTextNode(String(counter));
321
- observer.observe(textNode, {
322
- characterData: true
323
- });
324
- return function () {
325
- counter = (counter + 1) % 2;
326
- textNode.data = String(counter);
327
- };
328
- }
329
- // // 仅在 Node.js 环境中使用 setImmediate
330
- // if (typeof global !== 'undefined' && typeof setImmediate !== 'undefined') {
331
- // return () => setImmediate(this.flushCallbacks.bind(this));
332
- // }
333
- return function () {
334
- return setTimeout(_this.flushCallbacks.bind(_this), 0);
335
- };
336
- };
337
- _proto.flushCallbacks = function flushCallbacks() {
338
- this.pending = false;
339
- var copies = this.callbacks.slice(0);
340
- this.callbacks.length = 0;
341
- for (var i = 0; i < copies.length; i++) {
342
- copies[i]();
343
- }
344
- };
345
- _proto.nextTick = function nextTick(callback, ctx) {
346
- var _resolve;
347
- this.callbacks.push(function () {
348
- if (callback) {
349
- try {
350
- callback.call(ctx);
351
- } catch (e) {
352
- console.error('Error in nextTick:', e);
353
- }
354
- } else if (_resolve) {
355
- _resolve();
356
- }
357
- });
358
- if (!this.pending) {
359
- this.pending = true;
360
- this.timerFunc();
361
- }
362
- if (!callback && typeof Promise !== 'undefined') {
363
- return new Promise(function (resolve) {
364
- _resolve = resolve;
365
- });
366
- }
367
- };
368
- NextTick.nextTick = function nextTick(callback, ctx) {
369
- return NextTick.instance.nextTick(callback, ctx);
263
+ function useFuncRequest(
264
+ // 异步函数
265
+ asyncFunc,
266
+ // 配置项
267
+ options) {
268
+ var _useState = useState(false),
269
+ loading = _useState[0],
270
+ setLoading = _useState[1];
271
+ var _useState2 = useState(null),
272
+ error = _useState2[0],
273
+ setError = _useState2[1];
274
+ var _useState3 = useState(null),
275
+ data = _useState3[0],
276
+ setData = _useState3[1];
277
+ var abortControllerRef = useRef(undefined);
278
+ var requestIdRef = useRef(0);
279
+ var cancel = function cancel() {
280
+ var _abortControllerRef$c;
281
+ (_abortControllerRef$c = abortControllerRef.current) == null || _abortControllerRef$c.abort();
282
+ setLoading(false);
283
+ setError(null);
370
284
  };
371
- return _createClass(NextTick, null, [{
372
- key: "instance",
373
- get: function get() {
374
- if (!this._instance) {
375
- this._instance = new NextTick();
376
- }
377
- return this._instance;
378
- }
379
- }]);
380
- }();
381
- var nextTick = /*#__PURE__*/NextTick.instance.nextTick.bind(NextTick.instance);
382
-
383
- var createRoot = createRoot$1;
384
- var modalContainer = null;
385
- var root = null;
386
- function getOrCreateContainer() {
387
- if (!modalContainer) {
388
- modalContainer = document.createElement('div');
389
- document.body.appendChild(modalContainer);
390
- }
391
- return modalContainer;
392
- }
393
- function openModal(DialogComponent, initialConfig) {
394
- var container = getOrCreateContainer();
395
- var currentConfig = _extends({
396
- open: true
397
- }, initialConfig, {
398
- // 默认自动关闭
399
- onClosed: initialConfig.onClosed || function (params) {
400
- unifiedDestroy(params);
401
- }
402
- });
403
- if (!root) {
404
- try {
405
- root = createRoot(container);
406
- } catch (error) {
407
- console.error('Failed to create root:', error);
408
- return {
409
- destroy: function destroy() {},
410
- update: function update() {}
411
- };
412
- }
413
- }
414
- var cleanup = function cleanup() {
415
- if (root) {
416
- root.unmount();
417
- root = null;
418
- }
419
- if (modalContainer && modalContainer.parentNode) {
420
- modalContainer.parentNode.removeChild(modalContainer);
421
- modalContainer = null;
422
- }
423
- };
424
- var _destroy = function destroy(params) {
425
- if (typeof currentConfig.onClosed === 'function') {
426
- currentConfig.onClosed(params);
427
- }
428
- // 销毁 modal
429
- cleanup();
430
- };
431
- var render = function render(props) {
432
- if (root) {
433
- root.render(React__default.createElement(DialogComponent, Object.assign({}, props)));
434
- }
435
- };
436
- var update = function update(configUpdate) {
437
- currentConfig = typeof configUpdate === 'function' ? configUpdate(currentConfig) : _extends({}, currentConfig, configUpdate);
438
- render(currentConfig);
439
- };
440
- // 统一的销毁函数
441
- var unifiedDestroy = function unifiedDestroy(params) {
442
- // 如果当前配置是打开的,关闭
443
- if (currentConfig.open) {
444
- currentConfig = _extends({}, currentConfig, {
445
- open: false,
446
- onClosed: function onClosed(closedParams) {
447
- if (initialConfig.onClosed) {
448
- initialConfig.onClosed(closedParams || params);
449
- }
450
- _destroy(closedParams || params);
285
+ var run = /*#__PURE__*/function () {
286
+ var _ref = _asyncToGenerator(/*#__PURE__*/_regenerator().m(function _callee() {
287
+ var currentRequestId,
288
+ abortController,
289
+ _len,
290
+ args,
291
+ _key,
292
+ beforeRes,
293
+ funcArgs,
294
+ res,
295
+ _args = arguments,
296
+ _t;
297
+ return _regenerator().w(function (_context) {
298
+ while (1) switch (_context.p = _context.n) {
299
+ case 0:
300
+ currentRequestId = ++requestIdRef.current;
301
+ cancel();
302
+ abortController = new AbortController();
303
+ abortControllerRef.current = abortController;
304
+ _context.p = 1;
305
+ setLoading(true);
306
+ setError(null);
307
+ for (_len = _args.length, args = new Array(_len), _key = 0; _key < _len; _key++) {
308
+ args[_key] = _args[_key];
309
+ }
310
+ if (!(options != null && options.onBefore)) {
311
+ _context.n = 3;
312
+ break;
313
+ }
314
+ _context.n = 2;
315
+ return options == null || options.onBefore == null ? void 0 : options.onBefore.apply(options, args);
316
+ case 2:
317
+ beforeRes = _context.v;
318
+ if (beforeRes) {
319
+ _context.n = 3;
320
+ break;
321
+ }
322
+ cancel();
323
+ return _context.a(2);
324
+ case 3:
325
+ // 安全传递 AbortSignal
326
+ funcArgs = args.length >= asyncFunc.length ? args : [].concat(args, [{
327
+ signal: abortController.signal
328
+ }]);
329
+ _context.n = 4;
330
+ return asyncFunc.apply(void 0, funcArgs);
331
+ case 4:
332
+ res = _context.v;
333
+ if (!(!abortController.signal.aborted && currentRequestId === requestIdRef.current)) {
334
+ _context.n = 5;
335
+ break;
336
+ }
337
+ setData(res);
338
+ _context.n = 5;
339
+ return options == null || options.onSuccess == null ? void 0 : options.onSuccess(res);
340
+ case 5:
341
+ return _context.a(2, res);
342
+ case 6:
343
+ _context.p = 6;
344
+ _t = _context.v;
345
+ if (!(!abortController.signal.aborted && currentRequestId === requestIdRef.current)) {
346
+ _context.n = 7;
347
+ break;
348
+ }
349
+ setError(_t);
350
+ _context.n = 7;
351
+ return options == null || options.onError == null ? void 0 : options.onError(_t);
352
+ case 7:
353
+ throw _t;
354
+ case 8:
355
+ _context.p = 8;
356
+ if (!(!abortController.signal.aborted && currentRequestId === requestIdRef.current)) {
357
+ _context.n = 9;
358
+ break;
359
+ }
360
+ setLoading(false);
361
+ _context.n = 9;
362
+ return options == null || options.onFinally == null ? void 0 : options.onFinally();
363
+ case 9:
364
+ return _context.f(8);
365
+ case 10:
366
+ return _context.a(2);
451
367
  }
452
- });
453
- render(currentConfig);
454
- } else {
455
- console.warn('Modal is already closed.');
368
+ }, _callee, null, [[1, 6, 8, 10]]);
369
+ }));
370
+ return function run() {
371
+ return _ref.apply(this, arguments);
372
+ };
373
+ }();
374
+ useEffect(function () {
375
+ if (options != null && options.autoRunArgs) {
376
+ run.apply(void 0, options.autoRunArgs)["catch"](function () {});
456
377
  }
457
- };
458
- render(currentConfig);
378
+ return cancel;
379
+ }, [JSON.stringify(options == null ? void 0 : options.autoRunArgs)]);
459
380
  return {
460
- destroy: unifiedDestroy,
461
- update: update
381
+ run: run,
382
+ cancel: cancel,
383
+ loading: loading,
384
+ error: error,
385
+ data: data
462
386
  };
463
387
  }
464
388
 
465
- var noop = function noop() {};
466
- // 生成类名
467
- var getClassName = function getClassName(key1, key2) {
468
- var cn = key1;
469
- var str = key1;
470
- if (key2.includes(' ')) {
471
- str = '';
472
- var nArr = key2 == null ? void 0 : key2.split(' ');
473
- for (var _iterator = _createForOfIteratorHelperLoose(nArr), _step; !(_step = _iterator()).done;) {
474
- var i = _step.value;
475
- str += " " + cn + "-" + i;
476
- }
477
- } else if (key2) {
478
- str = key1 + "-" + key2;
479
- }
480
- return str;
481
- };
482
- // 根据路径获取数据
483
- var getFieldsByPath = function getFieldsByPath(data, path) {
484
- var arr = path == null ? void 0 : path.split('.');
485
- var res = data;
486
- for (var _iterator2 = _createForOfIteratorHelperLoose(arr), _step2; !(_step2 = _iterator2()).done;) {
487
- var i = _step2.value;
488
- res = res[i];
389
+ function useInterval(callback, delay, immediate) {
390
+ if (immediate === void 0) {
391
+ immediate = false;
489
392
  }
490
- return res;
491
- };
492
- // 删除空值
493
- var removeNull = function removeNull(obj) {
494
- for (var key in obj) {
495
- if (obj[key] === null) {
496
- delete obj[key];
393
+ var timerRef = useRef(undefined);
394
+ var savedCallback = useRef(callback);
395
+ // Update callback ref if callback changes
396
+ useEffect(function () {
397
+ savedCallback.current = callback;
398
+ }, [callback]);
399
+ var clear = useCallback(function () {
400
+ if (timerRef.current) {
401
+ clearInterval(timerRef.current);
402
+ timerRef.current = undefined;
497
403
  }
498
- }
499
- return obj;
500
- };
501
- // 防抖函数
502
- var debounce = function debounce(func, wait) {
503
- var timeout = null;
504
- return function () {
505
- for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) {
506
- args[_key] = arguments[_key];
404
+ }, []);
405
+ var start = useCallback(function () {
406
+ clear();
407
+ if (delay !== null && delay !== undefined) {
408
+ timerRef.current = setInterval(function () {
409
+ return savedCallback.current();
410
+ }, delay);
507
411
  }
508
- if (timeout) {
509
- clearTimeout(timeout);
412
+ }, [delay, clear]);
413
+ useEffect(function () {
414
+ if (immediate) {
415
+ savedCallback.current();
510
416
  }
511
- timeout = setTimeout(function () {
512
- func.apply(void 0, args);
513
- }, wait);
417
+ start();
418
+ return clear;
419
+ }, [delay, start, clear, immediate]);
420
+ return {
421
+ start: start,
422
+ clear: clear,
423
+ isRunning: !!timerRef.current
514
424
  };
515
- };
516
- // 节流函数
517
- var throttle = function throttle(func, wait) {
518
- var timeout = null;
519
- var lastTime = 0;
520
- return function () {
521
- var nowTime = Date.now();
522
- if (!timeout) {
523
- func.apply(void 0, arguments);
524
- lastTime = nowTime;
525
- timeout = setTimeout(function () {
526
- timeout = null;
527
- }, wait);
528
- } else {
529
- var diffTime = nowTime - lastTime;
530
- if (diffTime >= wait) {
531
- func.apply(void 0, arguments);
532
- lastTime = nowTime;
425
+ }
426
+
427
+ var CMX = function CMX() {
428
+ /**
429
+ **
430
+ **/
431
+ this.add = function (arg1, arg2) {
432
+ var r1, r2, m, c;
433
+ try {
434
+ r1 = arg1.toString().split('.')[1].length;
435
+ } catch (e) {
436
+ r1 = 0;
437
+ }
438
+ try {
439
+ r2 = arg2.toString().split('.')[1].length;
440
+ } catch (e) {
441
+ r2 = 0;
442
+ }
443
+ c = Math.abs(r1 - r2);
444
+ m = Math.pow(10, Math.max(r1, r2));
445
+ if (c > 0) {
446
+ var cm = Math.pow(10, c);
447
+ if (r1 > r2) {
448
+ arg1 = Number(arg1.toString().replace('.', ''));
449
+ arg2 = Number(arg2.toString().replace('.', '')) * cm;
450
+ } else {
451
+ arg1 = Number(arg1.toString().replace('.', '')) * cm;
452
+ arg2 = Number(arg2.toString().replace('.', ''));
533
453
  }
454
+ } else {
455
+ var _arg, _arg2;
456
+ arg1 = Number((_arg = arg1) == null ? void 0 : _arg.toString().replace('.', ''));
457
+ arg2 = Number((_arg2 = arg2) == null ? void 0 : _arg2.toString().replace('.', ''));
458
+ }
459
+ return (arg1 + arg2) / m;
460
+ };
461
+ /**
462
+ ** 减
463
+ **/
464
+ this.sub = function (arg1, arg2) {
465
+ var r1, r2, m, n;
466
+ try {
467
+ r1 = arg1.toString().split('.')[1].length;
468
+ } catch (e) {
469
+ r1 = 0;
470
+ }
471
+ try {
472
+ r2 = arg2.toString().split('.')[1].length;
473
+ } catch (e) {
474
+ r2 = 0;
534
475
  }
476
+ m = Math.pow(10, Math.max(r1, r2)); //last modify by deeka //动态控制精度长度
477
+ n = r1 >= r2 ? r1 : r2;
478
+ return Number(((arg1 * m - arg2 * m) / m).toFixed(n));
479
+ };
480
+ /**
481
+ ** 乘
482
+ **/
483
+ this.mul = function (arg1, arg2) {
484
+ var m = 0,
485
+ s1 = arg1.toString(),
486
+ s2 = arg2.toString();
487
+ try {
488
+ m += s1.split('.')[1].length;
489
+ } catch (e) {}
490
+ try {
491
+ m += s2.split('.')[1].length;
492
+ } catch (e) {}
493
+ return Number(s1.replace('.', '')) * Number(s2.replace('.', '')) / Math.pow(10, m);
494
+ };
495
+ /**
496
+ ** 除
497
+ **/
498
+ this.div = function (arg1, arg2) {
499
+ var t1 = 0,
500
+ t2 = 0,
501
+ r1,
502
+ r2;
503
+ try {
504
+ t1 = arg1.toString().split('.')[1].length;
505
+ } catch (e) {}
506
+ try {
507
+ t2 = arg2.toString().split('.')[1].length;
508
+ } catch (e) {}
509
+ r1 = Number(arg1.toString().replace('.', ''));
510
+ r2 = Number(arg2.toString().replace('.', ''));
511
+ return r1 / r2 * Math.pow(10, t2 - t1);
535
512
  };
536
513
  };
514
+ var cmx = /*#__PURE__*/new CMX();
537
515
 
538
- /**
539
- * 版本号工具类
540
- * 支持语义化版本 (SemVer) 和基本版本号比较
541
- */
542
- var VersionUtil = /*#__PURE__*/function () {
543
- function VersionUtil() {}
544
- /**
545
- * 验证版本号格式是否有效
546
- * @param version 版本号字符串
547
- * @returns 是否有效
548
- */
549
- VersionUtil.isValid = function isValid(version) {
550
- 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;
551
- return semverRegex.test(version);
516
+ var NextTick = /*#__PURE__*/function () {
517
+ function NextTick() {
518
+ this.callbacks = [];
519
+ this.pending = false;
520
+ this.timerFunc = this.determineTimerFunc();
552
521
  }
553
- /**
554
- * 比较两个版本号
555
- * @param v1 版本号1
556
- * @param v2 版本号2
557
- * @returns 比较结果: 1(v1>v2), 0(v1=v2), -1(v1<v2)
558
- */;
559
- VersionUtil.compare = function compare(v1, v2) {
560
- if (!this.isValid(v1) || !this.isValid(v2)) {
561
- throw new Error('Invalid version format');
522
+ var _proto = NextTick.prototype;
523
+ _proto.determineTimerFunc = function determineTimerFunc() {
524
+ var _this = this;
525
+ if (typeof Promise !== 'undefined') {
526
+ var p = Promise.resolve();
527
+ return function () {
528
+ return p.then(_this.flushCallbacks.bind(_this));
529
+ };
562
530
  }
563
- // 去除前缀v并分割版本号
564
- var normalize = function normalize(v) {
565
- return v.replace(/^v/, '').split(/[-+]/)[0].split('.');
566
- };
567
- var parts1 = normalize(v1);
568
- var parts2 = normalize(v2);
569
- for (var i = 0; i < 3; i++) {
570
- var num1 = parseInt(parts1[i] || '0', 10);
571
- var num2 = parseInt(parts2[i] || '0', 10);
572
- if (num1 > num2) return 1;
573
- if (num1 < num2) return -1;
531
+ if (typeof MutationObserver !== 'undefined' && typeof window !== 'undefined') {
532
+ var counter = 1;
533
+ var observer = new MutationObserver(this.flushCallbacks.bind(this));
534
+ var textNode = document.createTextNode(String(counter));
535
+ observer.observe(textNode, {
536
+ characterData: true
537
+ });
538
+ return function () {
539
+ counter = (counter + 1) % 2;
540
+ textNode.data = String(counter);
541
+ };
574
542
  }
575
- // 比较预发布版本
576
- var preRelease1 = v1.match(/-(.+)/);
577
- var preRelease2 = v2.match(/-(.+)/);
578
- if (preRelease1 && !preRelease2) return -1;
579
- if (!preRelease1 && preRelease2) return 1;
580
- if (preRelease1 && preRelease2) {
581
- return preRelease1[1].localeCompare(preRelease2[1]);
543
+ // // 仅在 Node.js 环境中使用 setImmediate
544
+ // if (typeof global !== 'undefined' && typeof setImmediate !== 'undefined') {
545
+ // return () => setImmediate(this.flushCallbacks.bind(this));
546
+ // }
547
+ return function () {
548
+ return setTimeout(_this.flushCallbacks.bind(_this), 0);
549
+ };
550
+ };
551
+ _proto.flushCallbacks = function flushCallbacks() {
552
+ this.pending = false;
553
+ var copies = this.callbacks.slice(0);
554
+ this.callbacks.length = 0;
555
+ for (var i = 0; i < copies.length; i++) {
556
+ copies[i]();
582
557
  }
583
- return 0;
584
- }
585
- /**
586
- * 检查版本号是否满足范围要求
587
- * @param version 要检查的版本
588
- * @param range 版本范围 (如 ">=1.0.0 <2.0.0") 支持: >, >=, <, <=, ^, ~, ==, =
589
- * @returns 是否满足
590
- */;
591
- VersionUtil.satisfies = function satisfies(version, range) {
592
- var _this = this;
593
- if (!this.isValid(version)) return false;
594
- var rangeRegex = /([<>]=?|==?|\^|~)?\s*v?([0-9]+\.[0-9]+\.[0-9]+(?:-[0-9A-Za-z-]+(?:\.[0-9A-Za-z-]+)*)?(?:\+[0-9A-Za-z-]+)?)/g;
595
- var ranges = range.match(rangeRegex);
596
- if (!ranges || ranges.length === 0) return false;
597
- return ranges.every(function (r) {
598
- var match = r.match(/([<>]=?|==?|\^|~)?\s*(v?[0-9].*)/);
599
- if (!match) return false;
600
- var operator = match[1] || '==';
601
- var rangeVersion = match[2];
602
- if (!_this.isValid(rangeVersion)) return false;
603
- var comparison = _this.compare(version, rangeVersion);
604
- switch (operator) {
605
- case '>':
606
- return comparison > 0;
607
- case '>=':
608
- return comparison >= 0;
609
- case '<':
610
- return comparison < 0;
611
- case '<=':
612
- return comparison <= 0;
613
- case '^':
614
- return _this.caretRange(version, rangeVersion);
615
- case '~':
616
- return _this.tildeRange(version, rangeVersion);
617
- case '=':
618
- case '==':
619
- default:
620
- return comparison === 0;
558
+ };
559
+ _proto.nextTick = function nextTick(callback, ctx) {
560
+ var _resolve;
561
+ this.callbacks.push(function () {
562
+ if (callback) {
563
+ try {
564
+ callback.call(ctx);
565
+ } catch (e) {
566
+ console.error('Error in nextTick:', e);
567
+ }
568
+ } else if (_resolve) {
569
+ _resolve();
621
570
  }
622
571
  });
623
- }
624
- /**
625
- * 处理 ^ 范围 (允许不修改最左边的非零数字)
626
- * @param version 版本号
627
- * @param range 范围版本
628
- * @returns 是否匹配
629
- */;
630
- VersionUtil.caretRange = function caretRange(version, range) {
631
- var normalize = function normalize(v) {
632
- return v.replace(/^v/, '').split(/[-+]/)[0].split('.');
633
- };
634
- var vParts = normalize(version);
635
- var rParts = normalize(range);
636
- // 找到第一个非零部分
637
- var firstNonZero = 0;
638
- for (var i = 0; i < rParts.length; i++) {
639
- if (parseInt(rParts[i], 10) !== 0) {
640
- firstNonZero = i;
641
- break;
642
- }
572
+ if (!this.pending) {
573
+ this.pending = true;
574
+ this.timerFunc();
643
575
  }
644
- for (var _i = 0; _i <= firstNonZero; _i++) {
645
- var vNum = parseInt(vParts[_i] || '0', 10);
646
- var rNum = parseInt(rParts[_i] || '0', 10);
647
- if (vNum !== rNum) return false;
576
+ if (!callback && typeof Promise !== 'undefined') {
577
+ return new Promise(function (resolve) {
578
+ _resolve = resolve;
579
+ });
648
580
  }
649
- return this.compare(version, range) >= 0;
650
- }
651
- /**
652
- * 处理 ~ 范围 (允许修改最后一位数字)
653
- * @param version 版本号
654
- * @param range 范围版本
655
- * @returns 是否匹配
656
- */;
657
- VersionUtil.tildeRange = function tildeRange(version, range) {
658
- var normalize = function normalize(v) {
659
- return v.replace(/^v/, '').split(/[-+]/)[0].split('.');
660
- };
661
- var vParts = normalize(version);
662
- var rParts = normalize(range);
663
- for (var i = 0; i < rParts.length - 1; i++) {
664
- var vNum = parseInt(vParts[i] || '0', 10);
665
- var rNum = parseInt(rParts[i] || '0', 10);
666
- if (vNum !== rNum) return false;
667
- }
668
- var lastVNum = parseInt(vParts[rParts.length - 1] || '0', 10);
669
- var lastRNum = parseInt(rParts[rParts.length - 1] || '0', 10);
670
- return lastVNum >= lastRNum;
671
- }
672
- /**
673
- * 获取主版本号 (major)
674
- * @param version 版本号
675
- * @returns 主版本号
676
- */;
677
- VersionUtil.getMajor = function getMajor(version) {
678
- if (!this.isValid(version)) throw new Error('Invalid version format');
679
- var parts = version.replace(/^v/, '').split('.');
680
- return parseInt(parts[0], 10);
681
- }
682
- /**
683
- * 获取次版本号 (minor)
684
- * @param version 版本号
685
- * @returns 次版本号
686
- */;
687
- VersionUtil.getMinor = function getMinor(version) {
688
- if (!this.isValid(version)) throw new Error('Invalid version format');
689
- var parts = version.replace(/^v/, '').split('.');
690
- return parseInt(parts[1] || '0', 10);
691
- }
692
- /**
693
- * 获取修订号 (patch)
694
- * @param version 版本号
695
- * @returns 修订号
696
- */;
697
- VersionUtil.getPatch = function getPatch(version) {
698
- if (!this.isValid(version)) throw new Error('Invalid version format');
699
- var parts = version.replace(/^v/, '').split('.');
700
- return parseInt(parts[2] || '0', 10);
701
- }
702
- /**
703
- * 获取预发布版本标识
704
- * @param version 版本号
705
- * @returns 预发布标识 (无则返回null)
706
- */;
707
- VersionUtil.getPrerelease = function getPrerelease(version) {
708
- if (!this.isValid(version)) throw new Error('Invalid version format');
709
- var match = version.match(/-([^+]+)/);
710
- return match ? match[1] : null;
711
- }
712
- /**
713
- * 获取构建元数据
714
- * @param version 版本号
715
- * @returns 构建元数据 (无则返回null)
716
- */;
717
- VersionUtil.getBuildMetadata = function getBuildMetadata(version) {
718
- if (!this.isValid(version)) throw new Error('Invalid version format');
719
- var match = version.match(/\+([^]+)/);
720
- return match ? match[1] : null;
721
581
  };
722
- return VersionUtil;
582
+ NextTick.nextTick = function nextTick(callback, ctx) {
583
+ return NextTick.instance.nextTick(callback, ctx);
584
+ };
585
+ return _createClass(NextTick, null, [{
586
+ key: "instance",
587
+ get: function get() {
588
+ if (!this._instance) {
589
+ this._instance = new NextTick();
590
+ }
591
+ return this._instance;
592
+ }
593
+ }]);
723
594
  }();
595
+ var nextTick = /*#__PURE__*/NextTick.instance.nextTick.bind(NextTick.instance);
724
596
 
725
- var ThemeContext = /*#__PURE__*/createContext({
726
- theme: {
727
- cssVar: true,
728
- algorithm: [theme.defaultAlgorithm]
597
+ var createRoot = createRoot$1;
598
+ var modalContainer = null;
599
+ var root = null;
600
+ function getOrCreateContainer() {
601
+ if (!modalContainer) {
602
+ modalContainer = document.createElement('div');
603
+ document.body.appendChild(modalContainer);
729
604
  }
730
- });
731
- var MiThemeProvider = ThemeContext.Provider;
732
- function useMiThemeConfig() {
733
- return useContext(ThemeContext);
734
- }
735
-
736
- /**
737
- * CompThemeProvider
738
- */
739
- function CompThemeProvider(props) {
740
- var _useMiThemeConfig = useMiThemeConfig(),
741
- theme = _useMiThemeConfig.theme;
742
- return React__default.createElement(ConfigProvider, {
743
- theme: theme
744
- }, props.children);
605
+ return modalContainer;
745
606
  }
746
- CompThemeProvider.displayName = 'CompThemeProvider';
747
-
748
- var classname = function classname(n) {
749
- if (n === void 0) {
750
- n = '';
751
- }
752
- var cn = 'items-row';
753
- return getClassName(cn, n);
754
- };
755
- var ItemsRow = function ItemsRow(props) {
756
- if (!props.items) {
757
- return null;
758
- }
759
- return createElement(CompThemeProvider, null, createElement("div", {
760
- className: classname() + " " + (props.className || ''),
761
- style: props.style
762
- }, (props.items || []).map(function (item, index) {
763
- var className = classname('item') + " " + item.className;
764
- if (item.render) {
765
- return createElement("span", {
766
- key: index,
767
- className: className
768
- }, item.render());
607
+ function openModal(DialogComponent, initialConfig) {
608
+ var container = getOrCreateContainer();
609
+ var currentConfig = _extends({
610
+ open: true
611
+ }, initialConfig, {
612
+ // 默认自动关闭
613
+ onClosed: initialConfig.onClosed || function (params) {
614
+ unifiedDestroy(params);
769
615
  }
770
- return createElement(Button, Object.assign({
771
- key: item.label,
772
- className: className
773
- }, item.btnProps, {
774
- type: item.type || 'primary',
775
- onClick: item.onClick
776
- }), item.label);
777
- })));
778
- };
779
-
780
- function styleInject(css, ref) {
781
- if ( ref === void 0 ) ref = {};
782
- var insertAt = ref.insertAt;
783
-
784
- if (!css || typeof document === 'undefined') { return; }
785
-
786
- var head = document.head || document.getElementsByTagName('head')[0];
787
- var style = document.createElement('style');
788
- style.type = 'text/css';
789
-
790
- if (insertAt === 'top') {
791
- if (head.firstChild) {
792
- head.insertBefore(style, head.firstChild);
793
- } else {
794
- head.appendChild(style);
616
+ });
617
+ if (!root) {
618
+ try {
619
+ root = createRoot(container);
620
+ } catch (error) {
621
+ console.error('Failed to create root:', error);
622
+ return {
623
+ destroy: function destroy() {},
624
+ update: function update() {}
625
+ };
795
626
  }
796
- } else {
797
- head.appendChild(style);
798
- }
799
-
800
- if (style.styleSheet) {
801
- style.styleSheet.cssText = css;
802
- } else {
803
- style.appendChild(document.createTextNode(css));
804
- }
805
- }
806
-
807
- 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}";
808
- styleInject(css_248z);
809
-
810
- var classname$1 = function classname(n) {
811
- if (n === void 0) {
812
- n = '';
813
627
  }
814
- var cn = 'm-breadcrumb';
815
- return getClassName(cn, n);
816
- };
817
- var MBreadcrumb = function MBreadcrumb(props) {
818
- var routes = props.routes,
819
- customItems = props.customItems,
820
- style = props.style,
821
- className = props.className,
822
- _props$offsetTop = props.offsetTop,
823
- offsetTop = _props$offsetTop === void 0 ? 64 : _props$offsetTop,
824
- mainAppBaseUrl = props.mainAppBaseUrl,
825
- microAppName = props.microAppName;
826
- var affixRef = useRef(null);
827
- var onScroll = useCallback(function () {
828
- var _affixRef$current;
829
- (_affixRef$current = affixRef.current) == null || _affixRef$current.updatePosition == null || _affixRef$current.updatePosition();
830
- }, []);
831
- useEffect(function () {
832
- window.addEventListener('scroll', onScroll, true);
833
- return function () {
834
- return window.removeEventListener('scroll', onScroll);
835
- };
836
- }, [onScroll]);
837
- var getUrl = useCallback(function (url) {
838
- if (!url) return '';
839
- var cleanedUrl = url.replace(/^\/+/, '');
840
- var parts = [mainAppBaseUrl == null ? void 0 : mainAppBaseUrl.replace(/\/+$/, ''), microAppName == null ? void 0 : microAppName.replace(/\/+$/, ''), cleanedUrl].filter(Boolean);
841
- return "/" + parts.join('/');
842
- }, [mainAppBaseUrl, microAppName]);
843
- return createElement(CompThemeProvider, null, createElement("div", {
844
- className: classname$1() + " " + (className || ''),
845
- style: style
846
- }, createElement(Affix, {
847
- ref: affixRef,
848
- offsetTop: offsetTop
849
- }, createElement(Card, {
850
- className: classname$1('container'),
851
- rootClassName: classname$1('body'),
852
- variant: "borderless"
853
- }, createElement(Breadcrumb, {
854
- className: classname$1('inner-breadcrumb'),
855
- style: {
856
- fontSize: '18px'
628
+ var cleanup = function cleanup() {
629
+ if (root) {
630
+ root.unmount();
631
+ root = null;
857
632
  }
858
- }, routes == null ? void 0 : routes.map(function (v) {
859
- return createElement(Breadcrumb.Item, {
860
- key: v.url || v.name
861
- }, v.url ? createElement("a", {
862
- href: "#" + getUrl(v.url)
863
- }, v.name) : v.name);
864
- })), createElement("div", {
865
- className: classname$1('custom-item-wrapper')
866
- }, createElement(ItemsRow, {
867
- items: customItems
868
- }))))));
869
- };
870
-
871
- var DetailDescriptions = function DetailDescriptions(props) {
872
- var data = props.data,
873
- title = props.title,
874
- _props$column = props.column,
875
- column = _props$column === void 0 ? 3 : _props$column,
876
- lineHeight = props.lineHeight,
877
- _props$align = props.align,
878
- align = _props$align === void 0 ? 'left' : _props$align,
879
- itemLayout = props.itemLayout,
880
- _props$colon = props.colon,
881
- colon = _props$colon === void 0 ? true : _props$colon,
882
- _props$bordered = props.bordered,
883
- bordered = _props$bordered === void 0 ? false : _props$bordered,
884
- style = props.style,
885
- className = props.className,
886
- labelStyle = props.labelStyle,
887
- contentStyle = props.contentStyle;
888
- // 合并样式
889
- var mergedLabelStyle = _extends({}, lineHeight ? {
890
- lineHeight: lineHeight + "px"
891
- } : {}, {
892
- textAlign: align
893
- }, itemLayout != null && itemLayout.label ? {
894
- width: itemLayout.label + "px"
895
- } : {}, labelStyle);
896
- var mergedContentStyle = _extends({}, lineHeight ? {
897
- lineHeight: lineHeight + "px"
898
- } : {}, itemLayout != null && itemLayout.value ? {
899
- width: itemLayout.value + "px"
900
- } : {}, contentStyle);
901
- return React__default.createElement(CompThemeProvider, null, React__default.createElement(Descriptions, {
902
- title: title,
903
- column: column,
904
- colon: colon,
905
- bordered: bordered,
906
- style: style,
907
- className: className,
908
- labelStyle: mergedLabelStyle,
909
- contentStyle: mergedContentStyle
910
- }, data.map(function (item, index) {
911
- var _item$label;
912
- return React__default.createElement(Descriptions.Item, {
913
- label: item.label,
914
- key: ((_item$label = item.label) == null ? void 0 : _item$label.toString()) || index,
915
- span: item.span
916
- }, item.value || '-');
917
- })));
918
- };
919
- DetailDescriptions.displayName = 'DetailDescriptions';
920
-
921
- var css_248z$1 = ".m-form-item-wrapper {\n max-width: 480px;\n}\n.m-form .error-message {\n color: red;\n font-size: 12px;\n margin-top: 4px;\n}";
922
- styleInject(css_248z$1);
923
-
924
- var MFormItemTypeEnum;
925
- (function (MFormItemTypeEnum) {
926
- MFormItemTypeEnum["Input"] = "input";
927
- MFormItemTypeEnum["InputNumber"] = "inputNumber";
928
- MFormItemTypeEnum["Text"] = "text";
929
- MFormItemTypeEnum["Password"] = "password";
930
- MFormItemTypeEnum["Radio"] = "radio";
931
- MFormItemTypeEnum["Select"] = "select";
932
- MFormItemTypeEnum["Checkbox"] = "checkbox";
933
- MFormItemTypeEnum["DatePicker"] = "datePicker";
934
- MFormItemTypeEnum["RangePicker"] = "rangePicker";
935
- MFormItemTypeEnum["Upload"] = "upload";
936
- MFormItemTypeEnum["Mentions"] = "mentions";
937
- MFormItemTypeEnum["Cascader"] = "cascader";
938
- MFormItemTypeEnum["TreeSelect"] = "treeSelect";
939
- // Slider = 'slider',
940
- })(MFormItemTypeEnum || (MFormItemTypeEnum = {}));
941
- // | IMFormSliderItem;
942
-
943
- var RangePicker = DatePicker.RangePicker;
944
- var MFormItemConst = /*#__PURE__*/function () {
945
- function MFormItemConst() {}
946
- MFormItemConst.getDefaultArrayPlaceholder = function getDefaultArrayPlaceholder(item) {
947
- var placeholder;
948
- switch (item.type) {
949
- case 'rangePicker':
950
- placeholder = ['开始时间', '结束时间'];
951
- break;
633
+ if (modalContainer && modalContainer.parentNode) {
634
+ modalContainer.parentNode.removeChild(modalContainer);
635
+ modalContainer = null;
952
636
  }
953
- return placeholder;
954
637
  };
955
- MFormItemConst.getDefaultPlaceholder = function getDefaultPlaceholder(item) {
956
- var placeholder;
957
- switch (item.type) {
958
- case MFormItemTypeEnum.Input:
959
- case MFormItemTypeEnum.Password:
960
- case MFormItemTypeEnum.InputNumber:
961
- case MFormItemTypeEnum.Text:
962
- case MFormItemTypeEnum.Mentions:
963
- placeholder = "\u8BF7\u8F93\u5165" + item.label;
964
- break;
965
- case MFormItemTypeEnum.Select:
966
- case MFormItemTypeEnum.Checkbox:
967
- case MFormItemTypeEnum.Radio:
968
- case MFormItemTypeEnum.DatePicker:
969
- case MFormItemTypeEnum.RangePicker:
970
- case MFormItemTypeEnum.Cascader:
971
- case MFormItemTypeEnum.Upload:
972
- case MFormItemTypeEnum.TreeSelect:
973
- placeholder = "\u8BF7\u9009\u62E9" + item.label;
974
- break;
638
+ var _destroy = function destroy(params) {
639
+ if (typeof currentConfig.onClosed === 'function') {
640
+ currentConfig.onClosed(params);
975
641
  }
976
- return placeholder;
642
+ // 销毁 modal
643
+ cleanup();
977
644
  };
978
- return MFormItemConst;
979
- }();
980
- MFormItemConst.labelCol = {
981
- span: 7
982
- };
983
- MFormItemConst.wrapperCol = {
984
- span: 17
985
- };
986
- MFormItemConst.defaultRowGutter = 24;
987
- MFormItemConst.input = function (item) {
988
- return React__default.createElement(Input, Object.assign({
989
- disabled: item.disabled,
990
- maxLength: item.maxLength
991
- }, item.props, {
992
- placeholder: item.placeholder || MFormItemConst.getDefaultPlaceholder(item)
993
- }));
994
- };
995
- MFormItemConst.password = function (item) {
996
- return React__default.createElement(Input.Password, Object.assign({
997
- disabled: item.disabled
998
- }, item.props, {
999
- placeholder: item.placeholder || MFormItemConst.getDefaultPlaceholder(item)
1000
- }));
1001
- };
1002
- MFormItemConst.text = function (item) {
1003
- return React__default.createElement(Input.TextArea, Object.assign({
1004
- disabled: item.disabled,
1005
- maxLength: item.maxLength
1006
- }, item.props, {
1007
- placeholder: item.placeholder || MFormItemConst.getDefaultPlaceholder(item)
1008
- }));
1009
- };
1010
- MFormItemConst.inputNumber = function (item) {
1011
- return React__default.createElement(InputNumber, Object.assign({
1012
- disabled: item.disabled,
1013
- maxLength: item.maxLength
1014
- }, item.props, {
1015
- placeholder: item.placeholder || MFormItemConst.getDefaultPlaceholder(item)
1016
- }));
1017
- };
1018
- MFormItemConst.datePicker = function (item) {
1019
- return React__default.createElement(DatePicker, Object.assign({
1020
- disabled: item.disabled
1021
- }, item.props, {
1022
- placeholder: item.placeholder || MFormItemConst.getDefaultPlaceholder(item)
1023
- }));
1024
- };
1025
- MFormItemConst.rangePicker = function (item) {
1026
- return React__default.createElement(RangePicker, Object.assign({
1027
- disabled: item.disabled
1028
- }, item.props, {
1029
- placeholder: item.placeholder || MFormItemConst.getDefaultArrayPlaceholder(item)
1030
- }));
1031
- };
1032
- MFormItemConst.select = function (item) {
1033
- return React__default.createElement(Select, Object.assign({}, item.props, {
1034
- disabled: item.disabled,
1035
- placeholder: item.placeholder || MFormItemConst.getDefaultPlaceholder(item)
1036
- }));
1037
- };
1038
- MFormItemConst.radio = function (item) {
1039
- return React__default.createElement(Radio.Group, Object.assign({
1040
- disabled: item.disabled
1041
- }, item.props));
1042
- };
1043
- MFormItemConst.checkbox = function (item) {
1044
- return React__default.createElement(Checkbox.Group, Object.assign({
1045
- disabled: item.disabled
1046
- }, item.props));
1047
- };
1048
- MFormItemConst.upload = function (item) {
1049
- return React__default.createElement(Upload, Object.assign({
1050
- defaultFileList: item.initialValue
1051
- }, item.props), item.children || React__default.createElement(Button, null, React__default.createElement(UploadOutlined, null), " \u70B9\u51FB\u4E0A\u4F20"));
1052
- };
1053
- MFormItemConst.mentions = function (item) {
1054
- return React__default.createElement(Mentions, Object.assign({}, item.props, {
1055
- placeholder: item.placeholder || MFormItemConst.getDefaultPlaceholder(item)
1056
- }));
1057
- };
1058
- MFormItemConst.cascader = function (item) {
1059
- return React__default.createElement(Cascader, Object.assign({}, item.props, {
1060
- placeholder: item.placeholder || MFormItemConst.getDefaultPlaceholder(item)
1061
- }));
1062
- };
1063
- MFormItemConst.treeSelect = function (item) {
1064
- return React__default.createElement(TreeSelect, Object.assign({}, item.props, {
1065
- placeholder: item.placeholder || MFormItemConst.getDefaultPlaceholder(item)
1066
- }));
1067
- };
1068
-
1069
- var classname$2 = function classname(n) {
1070
- if (n === void 0) {
1071
- n = '';
1072
- }
1073
- var cn = 'm-form';
1074
- return getClassName(cn, n);
1075
- };
1076
- function MForm(props) {
1077
- var formProps = props.formProps,
1078
- _props$formItems = props.formItems,
1079
- formItems = _props$formItems === void 0 ? [] : _props$formItems,
1080
- _props$column = props.column,
1081
- column = _props$column === void 0 ? 1 : _props$column,
1082
- form = props.form,
1083
- itemLayout = props.itemLayout,
1084
- formRowProps = props.formRowProps;
1085
- var renderItem = function renderItem(item, form) {
1086
- if (item.render) {
1087
- return item.render(form);
1088
- }
1089
- var func = MFormItemConst[item.type];
1090
- if (item && item.type && func) {
1091
- var renderFunc = func;
1092
- return renderFunc(item);
645
+ var render = function render(props) {
646
+ if (root) {
647
+ root.render(React.createElement(DialogComponent, Object.assign({}, props)));
1093
648
  }
1094
- return React__default.createElement("div", {
1095
- className: "error-message"
1096
- }, "Invalid form item configuration");
1097
649
  };
1098
- var renderFormItem = function renderFormItem(item) {
1099
- var _item$show = item.show,
1100
- show = _item$show === void 0 ? true : _item$show;
1101
- if (!show) return null;
1102
- var rules = [].concat(item.rules || []);
1103
- if (item.required) {
1104
- rules.push({
1105
- required: true,
1106
- message: item.required
650
+ var update = function update(configUpdate) {
651
+ currentConfig = typeof configUpdate === 'function' ? configUpdate(currentConfig) : _extends({}, currentConfig, configUpdate);
652
+ render(currentConfig);
653
+ };
654
+ // 统一的销毁函数
655
+ var unifiedDestroy = function unifiedDestroy(params) {
656
+ // 如果当前配置是打开的,关闭
657
+ if (currentConfig.open) {
658
+ currentConfig = _extends({}, currentConfig, {
659
+ open: false,
660
+ onClosed: function onClosed(closedParams) {
661
+ if (initialConfig.onClosed) {
662
+ initialConfig.onClosed(closedParams || params);
663
+ }
664
+ _destroy(closedParams || params);
665
+ }
1107
666
  });
667
+ render(currentConfig);
668
+ } else {
669
+ console.warn('Modal is already closed.');
1108
670
  }
1109
- var formItemLayout = _extends({
1110
- labelCol: MFormItemConst.labelCol,
1111
- wrapperCol: MFormItemConst.wrapperCol
1112
- }, itemLayout, item.itemLayout);
1113
- return React__default.createElement(Col, {
1114
- key: "col-" + item.id,
1115
- span: item.span || 24 / column
1116
- }, React__default.createElement("div", {
1117
- className: classname$2('item-wrapper')
1118
- }, React__default.createElement(Form.Item, Object.assign({
1119
- label: item.label,
1120
- name: item.id,
1121
- rules: rules,
1122
- initialValue: item.initialValue
1123
- }, formItemLayout, item.formItemProps), renderItem(item, form))));
1124
671
  };
1125
- return React__default.createElement(CompThemeProvider, null, React__default.createElement(Form, Object.assign({
1126
- form: form
1127
- }, formProps, {
1128
- className: classname$2() + " " + (formProps == null ? void 0 : formProps.className)
1129
- }), React__default.createElement(Row, Object.assign({
1130
- gutter: MFormItemConst.defaultRowGutter
1131
- }, formRowProps, {
1132
- className: classname$2('grid') + " " + (formRowProps == null ? void 0 : formRowProps.className)
1133
- }), formItems.map(function (e) {
1134
- return renderFormItem(e);
1135
- }))));
672
+ render(currentConfig);
673
+ return {
674
+ destroy: unifiedDestroy,
675
+ update: update
676
+ };
1136
677
  }
1137
- MForm.displayName = 'MForm';
1138
678
 
1139
- // 全局状态管理
1140
- var globalMode = 'default';
1141
- var modalInstances = [];
1142
- var getThemeConfig = function getThemeConfig(mode) {
1143
- switch (mode) {
1144
- case 'light':
1145
- return {
1146
- algorithm: [theme.defaultAlgorithm]
1147
- };
1148
- case 'dark':
1149
- return {
1150
- algorithm: [theme.darkAlgorithm]
1151
- };
1152
- default:
1153
- return {
1154
- algorithm: [theme.defaultAlgorithm]
1155
- };
679
+ var noop = function noop() {};
680
+ // 生成类名
681
+ var getClassName = function getClassName(key1, key2) {
682
+ var cn = key1;
683
+ var str = key1;
684
+ if (key2.includes(' ')) {
685
+ str = '';
686
+ var nArr = key2 == null ? void 0 : key2.split(' ');
687
+ for (var _iterator = _createForOfIteratorHelperLoose(nArr), _step; !(_step = _iterator()).done;) {
688
+ var i = _step.value;
689
+ str += " " + cn + "-" + i;
690
+ }
691
+ } else if (key2) {
692
+ str = key1 + "-" + key2;
1156
693
  }
694
+ return str;
1157
695
  };
1158
- var MiModal = /*#__PURE__*/function (_Component) {
1159
- function MiModal() {
1160
- var _this;
1161
- _this = _Component.apply(this, arguments) || this;
1162
- _this.handleCancel = function (e) {
1163
- _this.props.onCancel == null || _this.props.onCancel(e);
1164
- _this.props.onClosed == null || _this.props.onClosed({
1165
- cancel: true
1166
- });
1167
- };
1168
- _this.handleOk = function (e) {
1169
- _this.props.onOk == null || _this.props.onOk(e);
1170
- _this.props.onClosed == null || _this.props.onClosed({
1171
- ok: true
1172
- });
1173
- };
1174
- return _this;
696
+ // 根据路径获取数据
697
+ var getFieldsByPath = function getFieldsByPath(data, path) {
698
+ var arr = path == null ? void 0 : path.split('.');
699
+ var res = data;
700
+ for (var _iterator2 = _createForOfIteratorHelperLoose(arr), _step2; !(_step2 = _iterator2()).done;) {
701
+ var i = _step2.value;
702
+ res = res[i];
1175
703
  }
1176
- _inheritsLoose(MiModal, _Component);
1177
- var _proto = MiModal.prototype;
1178
- _proto.getTheme = function getTheme() {
1179
- var mode = this.props.mode || globalMode;
1180
- return getThemeConfig(mode);
1181
- };
1182
- _proto.render = function render() {
1183
- return React__default.createElement(ConfigProvider, {
1184
- theme: this.getTheme(),
1185
- componentSize: "middle",
1186
- componentDisabled: false
1187
- }, React__default.createElement(Modal, Object.assign({
1188
- maskClosable: false,
1189
- open: this.props.open,
1190
- onCancel: this.handleCancel,
1191
- onOk: this.handleOk,
1192
- okText: "\u786E\u5B9A",
1193
- cancelText: "\u53D6\u6D88"
1194
- }, this.props), this.props.children));
1195
- };
1196
- return MiModal;
1197
- }(Component); // 静态方法设置全局模式并更新所有弹窗
1198
- MiModal.setMode = function (mode) {
1199
- globalMode = mode;
1200
- // 更新所有已打开的弹窗
1201
- modalInstances.forEach(function (instance) {
1202
- instance.update({
1203
- mode: mode
1204
- });
1205
- });
1206
- };
1207
- // 静态方法设置全局ThemeConfig
1208
- MiModal.setThemeConfig = function (fn) {
1209
- getThemeConfig = fn;
704
+ return res;
1210
705
  };
1211
- MiModal.open = function (props) {
1212
- var instance = openModal(MiModal, _extends({
1213
- mode: globalMode
1214
- }, props));
1215
- // 注册实例以便全局更新
1216
- modalInstances.push(instance);
1217
- // 添加销毁时的清理逻辑
1218
- var originalDestroy = instance.destroy;
1219
- instance.destroy = function () {
1220
- var index = modalInstances.indexOf(instance);
1221
- if (index !== -1) {
1222
- modalInstances.splice(index, 1);
706
+ // 删除空值
707
+ var removeNull = function removeNull(obj) {
708
+ for (var key in obj) {
709
+ if (obj[key] === null) {
710
+ delete obj[key];
1223
711
  }
1224
- return originalDestroy.apply(void 0, arguments);
1225
- };
1226
- return instance;
1227
- };
1228
-
1229
- var css_248z$2 = ".m-search {\n position: relative;\n border-radius: 8px;\n}\n.m-search .ant-card {\n margin: 0;\n padding: 16px 0;\n}\n.m-search .ant-card .ant-card-body {\n padding: 0;\n border-radius: 0;\n}\n.m-search-form {\n position: relative;\n margin-right: 20px;\n}\n.m-search-btn-wrapper {\n display: inline-block;\n}\n.m-search-collapsed .m-search-btn-wrapper {\n position: absolute;\n right: 0px;\n top: 0;\n display: flex;\n height: 100%;\n align-items: center;\n}\n.m-search .ant-form-item {\n margin-bottom: 10px;\n}\n.m-search-collapsed .ant-form-item {\n margin-bottom: 0;\n}\n.m-search-footer {\n text-align: right;\n padding: 10px 20px;\n}\n.m-search-btn {\n margin-left: 10px;\n}\n.m-search-btn-collapse {\n display: inline-block;\n cursor: pointer;\n}\n.m-search .ant-calendar-picker {\n width: auto !important;\n}";
1230
- styleInject(css_248z$2);
1231
-
1232
- var ENTER_KEY_CODE = 13; // 回车键的值为13
1233
- var classname$3 = function classname(n) {
1234
- if (n === void 0) {
1235
- n = '';
1236
712
  }
1237
- var cn = 'm-search';
1238
- return getClassName(cn, n);
713
+ return obj;
1239
714
  };
1240
- var MSearch = function MSearch(props) {
1241
- var className = props.className,
1242
- _props$searchItems = props.searchItems,
1243
- searchItems = _props$searchItems === void 0 ? [] : _props$searchItems,
1244
- onSearch = props.onSearch,
1245
- _props$defaultShowAll = props.defaultShowAll,
1246
- defaultShowAll = _props$defaultShowAll === void 0 ? false : _props$defaultShowAll,
1247
- _props$customButtons = props.customButtons,
1248
- customButtons = _props$customButtons === void 0 ? [] : _props$customButtons,
1249
- propsForm = props.form;
1250
- var _useState = useState(defaultShowAll),
1251
- showAll = _useState[0],
1252
- setShowAll = _useState[1];
1253
- var _Form$useForm = Form.useForm(),
1254
- curForm = _Form$useForm[0];
1255
- var searchWrap = useRef(null);
1256
- var form = propsForm != null ? propsForm : curForm;
1257
- // 键盘按下事件处理
1258
- var onEnterKeySearch = function onEnterKeySearch(keyObj) {
1259
- var keyCode = keyObj.keyCode;
1260
- if (keyCode === ENTER_KEY_CODE) {
1261
- search();
715
+ // 防抖函数
716
+ var debounce = function debounce(func, wait) {
717
+ var timeout = null;
718
+ return function () {
719
+ for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) {
720
+ args[_key] = arguments[_key];
1262
721
  }
1263
- };
1264
- // 添加和移除事件监听
1265
- useEffect(function () {
1266
- var currentWrap = searchWrap.current;
1267
- currentWrap == null || currentWrap.addEventListener('keydown', onEnterKeySearch);
1268
- return function () {
1269
- currentWrap == null || currentWrap.removeEventListener('keydown', onEnterKeySearch);
1270
- };
1271
- }, []);
1272
- // 重置表单
1273
- var reset = function reset() {
1274
- form == null || form.resetFields();
1275
- search(true);
1276
- };
1277
- // 搜索函数
1278
- var search = function search(isReset) {
1279
- if (isReset === void 0) {
1280
- isReset = false;
722
+ if (timeout) {
723
+ clearTimeout(timeout);
1281
724
  }
1282
- form == null || form.validateFields().then(function (values) {
1283
- removeNull(values);
1284
- onSearch == null || onSearch(values, isReset);
1285
- });
725
+ timeout = setTimeout(function () {
726
+ func.apply(void 0, args);
727
+ }, wait);
1286
728
  };
1287
- // 渲染搜索按钮
1288
- var renderSearchButtons = function renderSearchButtons() {
1289
- var hasMore = searchItems.length > 2;
1290
- return React__default.createElement("div", {
1291
- className: classname$3('btn-wrapper')
1292
- }, (customButtons == null ? void 0 : customButtons.length) > 0 ? React__default.createElement(React__default.Fragment, null, customButtons.map(function (buttonProps, index) {
1293
- return React__default.createElement(Button, Object.assign({
1294
- key: "custom-btn-" + index,
1295
- className: classname$3('btn')
1296
- }, buttonProps), buttonProps.children);
1297
- })) : React__default.createElement(React__default.Fragment, null, React__default.createElement(Button, {
1298
- className: classname$3('btn btn-reset'),
1299
- onClick: reset
1300
- }, "\u91CD\u7F6E"), React__default.createElement(Button, {
1301
- className: classname$3('btn btn-search'),
1302
- onClick: function onClick() {
1303
- return search();
1304
- },
1305
- type: "primary"
1306
- }, "\u641C\u7D22")), hasMore && React__default.createElement("div", {
1307
- className: classname$3('btn btn-collapse'),
1308
- onClick: function onClick() {
1309
- return setShowAll(!showAll);
729
+ };
730
+ // 节流函数
731
+ var throttle = function throttle(func, wait) {
732
+ var timeout = null;
733
+ var lastTime = 0;
734
+ return function () {
735
+ var nowTime = Date.now();
736
+ if (!timeout) {
737
+ func.apply(void 0, arguments);
738
+ lastTime = nowTime;
739
+ timeout = setTimeout(function () {
740
+ timeout = null;
741
+ }, wait);
742
+ } else {
743
+ var diffTime = nowTime - lastTime;
744
+ if (diffTime >= wait) {
745
+ func.apply(void 0, arguments);
746
+ lastTime = nowTime;
1310
747
  }
1311
- }, React__default.createElement("span", null, showAll ? '收起' : '展开'), showAll ? React__default.createElement(CaretUpOutlined, null) : React__default.createElement(CaretDownOutlined, null)));
1312
- };
1313
- // 处理搜索项显示/隐藏
1314
- var processedSearchItems = searchItems.map(function (item, idx) {
1315
- var newItem = _extends({}, item);
1316
- if (searchItems.length > 2 && idx >= 2 && !showAll) {
1317
- var _item$formItemProps;
1318
- newItem.formItemProps = _extends({}, item.formItemProps, {
1319
- style: _extends({}, (_item$formItemProps = item.formItemProps) == null ? void 0 : _item$formItemProps.style, {
1320
- display: 'none'
1321
- })
1322
- });
1323
748
  }
1324
- return newItem;
1325
- });
1326
- var hasMore = searchItems.length > 2;
1327
- return React__default.createElement(CompThemeProvider, null, React__default.createElement("div", {
1328
- className: classname$3('') + " " + (showAll ? '' : classname$3('collapsed')) + " " + (className || ''),
1329
- ref: searchWrap
1330
- }, React__default.createElement(Card, null, React__default.createElement("div", {
1331
- className: classname$3('form')
1332
- }, React__default.createElement(MForm, {
1333
- form: form,
1334
- formItems: processedSearchItems,
1335
- column: 3
1336
- }), (!hasMore || hasMore && !showAll) && renderSearchButtons()), hasMore && showAll && React__default.createElement("div", {
1337
- className: classname$3('footer')
1338
- }, renderSearchButtons()))));
749
+ };
1339
750
  };
1340
751
 
1341
- function MTable(props) {
1342
- var _props$columns$map, _props$columns;
1343
- var columns = (_props$columns$map = (_props$columns = props.columns) == null ? void 0 : _props$columns.map(function (e) {
1344
- return _extends({}, e, {
1345
- dataIndex: e.key
1346
- });
1347
- })) != null ? _props$columns$map : [];
1348
- return React__default.createElement(CompThemeProvider, null, React__default.createElement(Table, Object.assign({
1349
- rowKey: function rowKey(e) {
1350
- return e.id;
752
+ /**
753
+ * 版本号工具类
754
+ * 支持语义化版本 (SemVer) 和基本版本号比较
755
+ */
756
+ var VersionUtil = /*#__PURE__*/function () {
757
+ function VersionUtil() {}
758
+ /**
759
+ * 验证版本号格式是否有效
760
+ * @param version 版本号字符串
761
+ * @returns 是否有效
762
+ */
763
+ VersionUtil.isValid = function isValid(version) {
764
+ 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;
765
+ return semverRegex.test(version);
766
+ }
767
+ /**
768
+ * 比较两个版本号
769
+ * @param v1 版本号1
770
+ * @param v2 版本号2
771
+ * @returns 比较结果: 1(v1>v2), 0(v1=v2), -1(v1<v2)
772
+ */;
773
+ VersionUtil.compare = function compare(v1, v2) {
774
+ if (!this.isValid(v1) || !this.isValid(v2)) {
775
+ throw new Error('Invalid version format');
1351
776
  }
1352
- }, props, {
1353
- columns: columns
1354
- })), ";");
1355
- }
1356
- MTable.displayName = 'MTable';
1357
-
1358
- var DATE_FORMAT = {
1359
- YMD_Hms: 'YYYY-MM-DD HH:mm:ss',
1360
- YMD: 'YYYY-MM-DD',
1361
- YMD2: 'YYYYMMDD',
1362
- YMD_POINT: 'YYYY.M.DD',
1363
- Hms: 'HH:mm:ss',
1364
- Hm: 'HH:mm',
1365
- YMD_000: 'YYYY-MM-DD 00:00:00',
1366
- YMD_end: 'YYYY-MM-DD 23:59:59',
1367
- YMD_Hm: 'YYYYMMDD HHmm'
1368
- };
1369
-
1370
- var PAGE_SIZE = 10;
1371
-
1372
- var PatternType = function PatternType() {};
1373
- // 整数
1374
- PatternType.integerRegex = /^-?\d+$/;
1375
- // 正整数
1376
- PatternType.positiveIntegerRegex = /^[1-9]\d*$/;
1377
- // 负整数
1378
- PatternType.negativeIntegerRegex = /^-[1-9]\d*$/;
1379
- // 浮点数
1380
- PatternType.floatRegex = /^-?\d+(\.\d+)?$/;
1381
- // 字母
1382
- PatternType.letter = /^[a-zA-Z]+$/;
1383
- // 汉字
1384
- PatternType.chinese = /^[\u4e00-\u9fa5]+$/;
1385
- // 数字
1386
- PatternType.number = /^[0-9]*$/;
1387
- // 用户名 字母开头,允许字母数字下划线,长度4-16
1388
- PatternType.username = /^[a-zA-Z]\w{3,15}$/;
1389
- // 强用户名 必须包含大小写字母和数字,6-20位
1390
- PatternType.strongUsername = /^(?=.*[a-z])(?=.*[A-Z])(?=.*\d)[a-zA-Z\d]{6,20}$/;
1391
- // 密码 至少8位,包含字母和数字
1392
- PatternType.password = /^(?=.*[A-Za-z])(?=.*\d)[A-Za-z\d]{8,}$/;
1393
- // 强密码 至少8位,包含大小写字母、数字和特殊字符
1394
- PatternType.strongPassword = /^(?=.*[a-z])(?=.*[A-Z])(?=.*\d)(?=.*[@$!%*?&])[A-Za-z\d@$!%*?&]{8,}$/;
1395
- // 中国大陆的手机号
1396
- PatternType.phone = /^1[3-9]\d{9}$/;
1397
- // 带区号的手机号
1398
- PatternType.phoneWithAreaCode = /^\+?\d{2,3}-?\d{8,11}$/;
1399
- // 邮箱
1400
- PatternType.email = /^[a-zA-Z0-9._%+-]+@[a-zA-Z0-9.-]+\.[a-zA-Z]{2,}$/;
1401
- // 身份证
1402
- 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)$/;
1403
- // 银行卡
1404
- PatternType.bankCard = /^[1-9]\d{3,30}$/;
1405
- // 邮政编码
1406
- PatternType.zipCode = /^[1-9]\d{5}$/;
1407
- // IP
1408
- 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])$/;
1409
- // URL
1410
- PatternType.url = /^(https?:\/\/)?([\da-z.-]+)\.([a-z.]{2,6})([/\w .-]*)*\/?$/;
1411
- // 车牌
1412
- PatternType.carNumber = /^[京津沪渝冀豫云辽黑湘皖鲁新苏浙赣鄂桂甘晋蒙陕吉闽贵粤青藏川宁琼使领][A-HJ-NP-Z][A-HJ-NP-Z0-9]{4,5}[A-HJ-NP-Z0-9挂学警港澳]$/;
1413
- // 时间 hh:mm:ss
1414
- PatternType.time = /^([0-1][0-9]|2[0-3]):([0-5][0-9]):([0-5][0-9])$/;
1415
- // 日期 YYYY-MM-DD
1416
- PatternType.date = /^(\d{4})-(\d{2})-(\d{2})$/;
1417
-
1418
- function useFuncRequest(
1419
- // 异步函数
1420
- asyncFunc,
1421
- // 配置项
1422
- options) {
1423
- var _useState = useState(false),
1424
- loading = _useState[0],
1425
- setLoading = _useState[1];
1426
- var _useState2 = useState(null),
1427
- error = _useState2[0],
1428
- setError = _useState2[1];
1429
- var _useState3 = useState(null),
1430
- data = _useState3[0],
1431
- setData = _useState3[1];
1432
- var abortControllerRef = useRef(undefined);
1433
- var requestIdRef = useRef(0);
1434
- var cancel = function cancel() {
1435
- var _abortControllerRef$c;
1436
- (_abortControllerRef$c = abortControllerRef.current) == null || _abortControllerRef$c.abort();
1437
- setLoading(false);
1438
- setError(null);
1439
- };
1440
- var run = /*#__PURE__*/function () {
1441
- var _ref = _asyncToGenerator(/*#__PURE__*/_regenerator().m(function _callee() {
1442
- var currentRequestId,
1443
- abortController,
1444
- _len,
1445
- args,
1446
- _key,
1447
- beforeRes,
1448
- funcArgs,
1449
- res,
1450
- _args = arguments,
1451
- _t;
1452
- return _regenerator().w(function (_context) {
1453
- while (1) switch (_context.p = _context.n) {
1454
- case 0:
1455
- currentRequestId = ++requestIdRef.current;
1456
- cancel();
1457
- abortController = new AbortController();
1458
- abortControllerRef.current = abortController;
1459
- _context.p = 1;
1460
- setLoading(true);
1461
- setError(null);
1462
- for (_len = _args.length, args = new Array(_len), _key = 0; _key < _len; _key++) {
1463
- args[_key] = _args[_key];
1464
- }
1465
- if (!(options != null && options.onBefore)) {
1466
- _context.n = 3;
1467
- break;
1468
- }
1469
- _context.n = 2;
1470
- return options == null || options.onBefore == null ? void 0 : options.onBefore.apply(options, args);
1471
- case 2:
1472
- beforeRes = _context.v;
1473
- if (beforeRes) {
1474
- _context.n = 3;
1475
- break;
1476
- }
1477
- cancel();
1478
- return _context.a(2);
1479
- case 3:
1480
- // 安全传递 AbortSignal
1481
- funcArgs = args.length >= asyncFunc.length ? args : [].concat(args, [{
1482
- signal: abortController.signal
1483
- }]);
1484
- _context.n = 4;
1485
- return asyncFunc.apply(void 0, funcArgs);
1486
- case 4:
1487
- res = _context.v;
1488
- if (!(!abortController.signal.aborted && currentRequestId === requestIdRef.current)) {
1489
- _context.n = 5;
1490
- break;
1491
- }
1492
- setData(res);
1493
- _context.n = 5;
1494
- return options == null || options.onSuccess == null ? void 0 : options.onSuccess(res);
1495
- case 5:
1496
- return _context.a(2, res);
1497
- case 6:
1498
- _context.p = 6;
1499
- _t = _context.v;
1500
- if (!(!abortController.signal.aborted && currentRequestId === requestIdRef.current)) {
1501
- _context.n = 7;
1502
- break;
1503
- }
1504
- setError(_t);
1505
- _context.n = 7;
1506
- return options == null || options.onError == null ? void 0 : options.onError(_t);
1507
- case 7:
1508
- throw _t;
1509
- case 8:
1510
- _context.p = 8;
1511
- if (!(!abortController.signal.aborted && currentRequestId === requestIdRef.current)) {
1512
- _context.n = 9;
1513
- break;
1514
- }
1515
- setLoading(false);
1516
- _context.n = 9;
1517
- return options == null || options.onFinally == null ? void 0 : options.onFinally();
1518
- case 9:
1519
- return _context.f(8);
1520
- case 10:
1521
- return _context.a(2);
1522
- }
1523
- }, _callee, null, [[1, 6, 8, 10]]);
1524
- }));
1525
- return function run() {
1526
- return _ref.apply(this, arguments);
777
+ // 去除前缀v并分割版本号
778
+ var normalize = function normalize(v) {
779
+ return v.replace(/^v/, '').split(/[-+]/)[0].split('.');
1527
780
  };
1528
- }();
1529
- useEffect(function () {
1530
- if (options != null && options.autoRunArgs) {
1531
- run.apply(void 0, options.autoRunArgs)["catch"](function () {});
781
+ var parts1 = normalize(v1);
782
+ var parts2 = normalize(v2);
783
+ for (var i = 0; i < 3; i++) {
784
+ var num1 = parseInt(parts1[i] || '0', 10);
785
+ var num2 = parseInt(parts2[i] || '0', 10);
786
+ if (num1 > num2) return 1;
787
+ if (num1 < num2) return -1;
1532
788
  }
1533
- return cancel;
1534
- }, [JSON.stringify(options == null ? void 0 : options.autoRunArgs)]);
1535
- return {
1536
- run: run,
1537
- cancel: cancel,
1538
- loading: loading,
1539
- error: error,
1540
- data: data
1541
- };
1542
- }
1543
-
1544
- function useInterval(callback, delay, immediate) {
1545
- if (immediate === void 0) {
1546
- immediate = false;
789
+ // 比较预发布版本
790
+ var preRelease1 = v1.match(/-(.+)/);
791
+ var preRelease2 = v2.match(/-(.+)/);
792
+ if (preRelease1 && !preRelease2) return -1;
793
+ if (!preRelease1 && preRelease2) return 1;
794
+ if (preRelease1 && preRelease2) {
795
+ return preRelease1[1].localeCompare(preRelease2[1]);
796
+ }
797
+ return 0;
1547
798
  }
1548
- var timerRef = useRef(undefined);
1549
- var savedCallback = useRef(callback);
1550
- // Update callback ref if callback changes
1551
- useEffect(function () {
1552
- savedCallback.current = callback;
1553
- }, [callback]);
1554
- var clear = useCallback(function () {
1555
- if (timerRef.current) {
1556
- clearInterval(timerRef.current);
1557
- timerRef.current = undefined;
799
+ /**
800
+ * 检查版本号是否满足范围要求
801
+ * @param version 要检查的版本
802
+ * @param range 版本范围 ( ">=1.0.0 <2.0.0") 支持: >, >=, <, <=, ^, ~, ==, =
803
+ * @returns 是否满足
804
+ */;
805
+ VersionUtil.satisfies = function satisfies(version, range) {
806
+ var _this = this;
807
+ if (!this.isValid(version)) return false;
808
+ var rangeRegex = /([<>]=?|==?|\^|~)?\s*v?([0-9]+\.[0-9]+\.[0-9]+(?:-[0-9A-Za-z-]+(?:\.[0-9A-Za-z-]+)*)?(?:\+[0-9A-Za-z-]+)?)/g;
809
+ var ranges = range.match(rangeRegex);
810
+ if (!ranges || ranges.length === 0) return false;
811
+ return ranges.every(function (r) {
812
+ var match = r.match(/([<>]=?|==?|\^|~)?\s*(v?[0-9].*)/);
813
+ if (!match) return false;
814
+ var operator = match[1] || '==';
815
+ var rangeVersion = match[2];
816
+ if (!_this.isValid(rangeVersion)) return false;
817
+ var comparison = _this.compare(version, rangeVersion);
818
+ switch (operator) {
819
+ case '>':
820
+ return comparison > 0;
821
+ case '>=':
822
+ return comparison >= 0;
823
+ case '<':
824
+ return comparison < 0;
825
+ case '<=':
826
+ return comparison <= 0;
827
+ case '^':
828
+ return _this.caretRange(version, rangeVersion);
829
+ case '~':
830
+ return _this.tildeRange(version, rangeVersion);
831
+ case '=':
832
+ case '==':
833
+ default:
834
+ return comparison === 0;
835
+ }
836
+ });
837
+ }
838
+ /**
839
+ * 处理 ^ 范围 (允许不修改最左边的非零数字)
840
+ * @param version 版本号
841
+ * @param range 范围版本
842
+ * @returns 是否匹配
843
+ */;
844
+ VersionUtil.caretRange = function caretRange(version, range) {
845
+ var normalize = function normalize(v) {
846
+ return v.replace(/^v/, '').split(/[-+]/)[0].split('.');
847
+ };
848
+ var vParts = normalize(version);
849
+ var rParts = normalize(range);
850
+ // 找到第一个非零部分
851
+ var firstNonZero = 0;
852
+ for (var i = 0; i < rParts.length; i++) {
853
+ if (parseInt(rParts[i], 10) !== 0) {
854
+ firstNonZero = i;
855
+ break;
856
+ }
1558
857
  }
1559
- }, []);
1560
- var start = useCallback(function () {
1561
- clear();
1562
- if (delay !== null && delay !== undefined) {
1563
- timerRef.current = setInterval(function () {
1564
- return savedCallback.current();
1565
- }, delay);
858
+ for (var _i = 0; _i <= firstNonZero; _i++) {
859
+ var vNum = parseInt(vParts[_i] || '0', 10);
860
+ var rNum = parseInt(rParts[_i] || '0', 10);
861
+ if (vNum !== rNum) return false;
1566
862
  }
1567
- }, [delay, clear]);
1568
- useEffect(function () {
1569
- if (immediate) {
1570
- savedCallback.current();
863
+ return this.compare(version, range) >= 0;
864
+ }
865
+ /**
866
+ * 处理 ~ 范围 (允许修改最后一位数字)
867
+ * @param version 版本号
868
+ * @param range 范围版本
869
+ * @returns 是否匹配
870
+ */;
871
+ VersionUtil.tildeRange = function tildeRange(version, range) {
872
+ var normalize = function normalize(v) {
873
+ return v.replace(/^v/, '').split(/[-+]/)[0].split('.');
874
+ };
875
+ var vParts = normalize(version);
876
+ var rParts = normalize(range);
877
+ for (var i = 0; i < rParts.length - 1; i++) {
878
+ var vNum = parseInt(vParts[i] || '0', 10);
879
+ var rNum = parseInt(rParts[i] || '0', 10);
880
+ if (vNum !== rNum) return false;
1571
881
  }
1572
- start();
1573
- return clear;
1574
- }, [delay, start, clear, immediate]);
1575
- return {
1576
- start: start,
1577
- clear: clear,
1578
- isRunning: !!timerRef.current
882
+ var lastVNum = parseInt(vParts[rParts.length - 1] || '0', 10);
883
+ var lastRNum = parseInt(rParts[rParts.length - 1] || '0', 10);
884
+ return lastVNum >= lastRNum;
885
+ }
886
+ /**
887
+ * 获取主版本号 (major)
888
+ * @param version 版本号
889
+ * @returns 主版本号
890
+ */;
891
+ VersionUtil.getMajor = function getMajor(version) {
892
+ if (!this.isValid(version)) throw new Error('Invalid version format');
893
+ var parts = version.replace(/^v/, '').split('.');
894
+ return parseInt(parts[0], 10);
895
+ }
896
+ /**
897
+ * 获取次版本号 (minor)
898
+ * @param version 版本号
899
+ * @returns 次版本号
900
+ */;
901
+ VersionUtil.getMinor = function getMinor(version) {
902
+ if (!this.isValid(version)) throw new Error('Invalid version format');
903
+ var parts = version.replace(/^v/, '').split('.');
904
+ return parseInt(parts[1] || '0', 10);
905
+ }
906
+ /**
907
+ * 获取修订号 (patch)
908
+ * @param version 版本号
909
+ * @returns 修订号
910
+ */;
911
+ VersionUtil.getPatch = function getPatch(version) {
912
+ if (!this.isValid(version)) throw new Error('Invalid version format');
913
+ var parts = version.replace(/^v/, '').split('.');
914
+ return parseInt(parts[2] || '0', 10);
915
+ }
916
+ /**
917
+ * 获取预发布版本标识
918
+ * @param version 版本号
919
+ * @returns 预发布标识 (无则返回null)
920
+ */;
921
+ VersionUtil.getPrerelease = function getPrerelease(version) {
922
+ if (!this.isValid(version)) throw new Error('Invalid version format');
923
+ var match = version.match(/-([^+]+)/);
924
+ return match ? match[1] : null;
925
+ }
926
+ /**
927
+ * 获取构建元数据
928
+ * @param version 版本号
929
+ * @returns 构建元数据 (无则返回null)
930
+ */;
931
+ VersionUtil.getBuildMetadata = function getBuildMetadata(version) {
932
+ if (!this.isValid(version)) throw new Error('Invalid version format');
933
+ var match = version.match(/\+([^]+)/);
934
+ return match ? match[1] : null;
1579
935
  };
1580
- }
936
+ return VersionUtil;
937
+ }();
1581
938
 
1582
939
  var usePagination = function usePagination(server, deps,
1583
940
  // 依赖条件 数据更新默认执行server
@@ -2089,5 +1446,5 @@ option) {
2089
1446
  };
2090
1447
  };
2091
1448
 
2092
- export { DATE_FORMAT, ItemsRow as ItemRow, MBreadcrumb, DetailDescriptions as MDescriptions, MForm, MFormItemConst, MFormItemTypeEnum, MSearch, MTable, MiModal, MiThemeProvider, NextTick, PAGE_SIZE, PatternType, VersionUtil, cmx, debounce, getClassName, getFieldsByPath, nextTick, noop, openModal, removeNull, throttle, useFuncRequest, useInterval, useMiThemeConfig, usePagination, useQuery, useReactive, useTimeout, useVirtualList };
1449
+ export { DATE_FORMAT, NextTick, PAGE_SIZE, PatternType, VersionUtil, cmx, debounce, getClassName, getFieldsByPath, nextTick, noop, openModal, removeNull, throttle, useFuncRequest, useInterval, usePagination, useQuery, useReactive, useTimeout, useVirtualList };
2093
1450
  //# sourceMappingURL=libs.esm.js.map