@zero-library/common 2.1.11 → 2.2.0
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/index.cjs.js +840 -323
- package/dist/index.cjs.js.map +1 -1
- package/dist/index.d.mts +1452 -200
- package/dist/index.d.ts +1452 -200
- package/dist/index.esm.js +792 -290
- package/dist/index.esm.js.map +1 -1
- package/package.json +2 -2
package/dist/index.esm.js
CHANGED
|
@@ -2,7 +2,7 @@ import { jsx, Fragment, jsxs } from 'react/jsx-runtime';
|
|
|
2
2
|
import { FileUnknownOutlined, FileZipOutlined, FileMarkdownOutlined, FileGifOutlined, FileImageOutlined, FileJpgOutlined, NotificationOutlined, VideoCameraOutlined, FilePptOutlined, FileExcelOutlined, FileWordOutlined, FilePdfOutlined, FileTextOutlined } from '@ant-design/icons';
|
|
3
3
|
import * as React16 from 'react';
|
|
4
4
|
import { forwardRef, useState, useMemo, useEffect, lazy, Suspense, useRef, createContext, useCallback, useContext } from 'react';
|
|
5
|
-
import { Spin, Result, message, Splitter, Empty, Image, Flex, Drawer, Tag, Avatar, Alert,
|
|
5
|
+
import { Spin, Result, message, notification, Modal, Splitter, Empty, Image, Flex, Drawer, Tag, Avatar, Alert, Form, Input, Button } from 'antd';
|
|
6
6
|
import parse from 'html-react-parser';
|
|
7
7
|
import { jsonrepair } from 'jsonrepair';
|
|
8
8
|
import markdownit from 'markdown-it';
|
|
@@ -13,13 +13,12 @@ import { zoomPlugin } from '@react-pdf-viewer/zoom';
|
|
|
13
13
|
import '@react-pdf-viewer/core/lib/styles/index.css';
|
|
14
14
|
import zh_CN from '@react-pdf-viewer/locales/lib/zh_CN.json';
|
|
15
15
|
import '@react-pdf-viewer/page-navigation/lib/styles/index.css';
|
|
16
|
-
import dayjs from 'dayjs';
|
|
17
|
-
import relativeTime from 'dayjs/plugin/relativeTime';
|
|
18
16
|
import AES from 'crypto-js/aes';
|
|
19
17
|
import encUtf8 from 'crypto-js/enc-utf8';
|
|
18
|
+
import dayjs from 'dayjs';
|
|
19
|
+
import relativeTime from 'dayjs/plugin/relativeTime';
|
|
20
20
|
import Decimal from 'decimal.js';
|
|
21
21
|
import axios from 'axios';
|
|
22
|
-
import { message as message$1 } from 'antd/lib';
|
|
23
22
|
import '@react-pdf-viewer/thumbnail/lib/styles/index.css';
|
|
24
23
|
import '@react-pdf-viewer/zoom/lib/styles/index.css';
|
|
25
24
|
import classNames2 from 'classnames';
|
|
@@ -340,7 +339,7 @@ function isNumber(val) {
|
|
|
340
339
|
return is(val, "Number");
|
|
341
340
|
}
|
|
342
341
|
function isNumberNoNaN(val) {
|
|
343
|
-
return
|
|
342
|
+
return isNumber(val) && !isNaN(val);
|
|
344
343
|
}
|
|
345
344
|
function isString(val) {
|
|
346
345
|
return is(val, "String");
|
|
@@ -361,7 +360,7 @@ function isArray(val) {
|
|
|
361
360
|
return Array.isArray(val);
|
|
362
361
|
}
|
|
363
362
|
function isEmpty(val) {
|
|
364
|
-
if (
|
|
363
|
+
if (isString(val) || isArray(val)) {
|
|
365
364
|
return val.length === 0;
|
|
366
365
|
}
|
|
367
366
|
if (isNullOrUnDef(val)) {
|
|
@@ -373,28 +372,89 @@ function isEmpty(val) {
|
|
|
373
372
|
return isEmptyObj(val);
|
|
374
373
|
}
|
|
375
374
|
function isWindow(val) {
|
|
376
|
-
return
|
|
375
|
+
return is(val, "Window");
|
|
377
376
|
}
|
|
378
377
|
function isElement(val) {
|
|
379
|
-
return isObject(val) && !!val
|
|
378
|
+
return isObject(val) && !!val?.tagName;
|
|
380
379
|
}
|
|
381
380
|
function isMap(val) {
|
|
382
381
|
return is(val, "Map");
|
|
383
382
|
}
|
|
384
|
-
|
|
385
|
-
|
|
383
|
+
function isSet(val) {
|
|
384
|
+
return is(val, "Set");
|
|
385
|
+
}
|
|
386
386
|
var isExternal = (path) => {
|
|
387
|
-
|
|
387
|
+
if (!isString(path)) return false;
|
|
388
|
+
return /^(https?:|mailto:|tel:|ftp:)/.test(path);
|
|
388
389
|
};
|
|
389
390
|
var isBlob = (val) => {
|
|
390
391
|
return is(val, "Blob");
|
|
391
392
|
};
|
|
392
393
|
var isLocalhost = (host) => {
|
|
393
|
-
|
|
394
|
+
const targetHost = host || location.host;
|
|
395
|
+
return /^(localhost|127\.0\.0\.1|0\.0\.0\.0|\[?::1\]?)(:\d+)?$/.test(targetHost);
|
|
396
|
+
};
|
|
397
|
+
function isReferenceType(val) {
|
|
398
|
+
return typeof val === "object" && !isNull(val) || isFunction(val);
|
|
399
|
+
}
|
|
400
|
+
var isScriptSafe = (script) => {
|
|
401
|
+
if (isString(script)) {
|
|
402
|
+
const unsafeKeywords = [
|
|
403
|
+
"eval",
|
|
404
|
+
// 动态执行代码,极高风险
|
|
405
|
+
"new Function",
|
|
406
|
+
// 动态创建函数,高风险
|
|
407
|
+
"setTimeout",
|
|
408
|
+
// 可能被用于延迟恶意代码执行
|
|
409
|
+
"setInterval",
|
|
410
|
+
// 可能被用于持续执行恶意代码
|
|
411
|
+
"window",
|
|
412
|
+
// 访问全局窗口对象
|
|
413
|
+
"document",
|
|
414
|
+
// 访问文档对象,可能操作DOM
|
|
415
|
+
"location",
|
|
416
|
+
// 可能被用于钓鱼攻击或重定向
|
|
417
|
+
"navigator",
|
|
418
|
+
// 访问浏览器信息
|
|
419
|
+
"localStorage",
|
|
420
|
+
// 访问本地存储数据
|
|
421
|
+
"sessionStorage",
|
|
422
|
+
// 访问会话存储数据
|
|
423
|
+
"history",
|
|
424
|
+
// 可能被用于操纵浏览历史
|
|
425
|
+
"fetch",
|
|
426
|
+
// 发起网络请求
|
|
427
|
+
"XMLHttpRequest",
|
|
428
|
+
// 发起 AJAX 请求
|
|
429
|
+
"WebSocket",
|
|
430
|
+
// 建立 WebSocket 连接
|
|
431
|
+
"alert",
|
|
432
|
+
// 弹出警告框(可能用于社会工程学攻击)
|
|
433
|
+
"confirm",
|
|
434
|
+
// 弹出确认框(可能用于社会工程学攻击)
|
|
435
|
+
"prompt"
|
|
436
|
+
// 弹出输入框(可能用于社会工程学攻击)
|
|
437
|
+
// 'console' // 控制台对象(通常被注释掉)
|
|
438
|
+
];
|
|
439
|
+
const regex = new RegExp(`\\b(${unsafeKeywords.join("|")})\\b`, "i");
|
|
440
|
+
if (regex.test(script)) {
|
|
441
|
+
return false;
|
|
442
|
+
}
|
|
443
|
+
return true;
|
|
444
|
+
}
|
|
445
|
+
return false;
|
|
446
|
+
};
|
|
447
|
+
var isJson = (text = "") => {
|
|
448
|
+
try {
|
|
449
|
+
const parsed = JSON.parse(text);
|
|
450
|
+
return isObject(parsed) || isArray(parsed);
|
|
451
|
+
} catch {
|
|
452
|
+
return false;
|
|
453
|
+
}
|
|
394
454
|
};
|
|
395
455
|
|
|
396
456
|
// src/hooks/iframe/useIframeRelayBridge.ts
|
|
397
|
-
|
|
457
|
+
var useIframeRelayBridge_default = (allowedOrigins = ["*"]) => {
|
|
398
458
|
const handlers = useRef({});
|
|
399
459
|
useEffect(() => {
|
|
400
460
|
const onMessage = (evt) => {
|
|
@@ -421,8 +481,64 @@ function useIframeRelayBridge(allowedOrigins = ["*"]) {
|
|
|
421
481
|
handlers.current[type] = (handlers.current[type] || []).filter((fn) => fn !== handler);
|
|
422
482
|
}
|
|
423
483
|
return { on, off };
|
|
424
|
-
}
|
|
425
|
-
|
|
484
|
+
};
|
|
485
|
+
var useAutoRefresh_default = (listenValue, shouldRefresh, callback, delay = 1e4) => {
|
|
486
|
+
const timerRef = useRef(null);
|
|
487
|
+
const shouldRefreshRef = useRef(shouldRefresh);
|
|
488
|
+
const callbackRef = useRef(callback);
|
|
489
|
+
const [num, setNum] = useState(0);
|
|
490
|
+
useEffect(() => {
|
|
491
|
+
shouldRefreshRef.current = shouldRefresh;
|
|
492
|
+
callbackRef.current = callback;
|
|
493
|
+
}, [shouldRefresh, callback]);
|
|
494
|
+
useEffect(() => {
|
|
495
|
+
if (timerRef.current) {
|
|
496
|
+
clearTimeout(timerRef.current);
|
|
497
|
+
timerRef.current = null;
|
|
498
|
+
}
|
|
499
|
+
if (shouldRefreshRef.current(listenValue)) {
|
|
500
|
+
timerRef.current = setTimeout(async () => {
|
|
501
|
+
await callbackRef.current();
|
|
502
|
+
setNum(num + 1);
|
|
503
|
+
}, delay);
|
|
504
|
+
}
|
|
505
|
+
return () => {
|
|
506
|
+
if (timerRef.current) {
|
|
507
|
+
clearTimeout(timerRef.current);
|
|
508
|
+
}
|
|
509
|
+
};
|
|
510
|
+
}, [listenValue, delay, num]);
|
|
511
|
+
};
|
|
512
|
+
var useCountDown_default = (callback) => {
|
|
513
|
+
const [count, setCount] = useState(0);
|
|
514
|
+
const [startCount, setStartCount] = useState(0);
|
|
515
|
+
const timer = useRef(null);
|
|
516
|
+
const pause = () => {
|
|
517
|
+
clearInterval(timer.current);
|
|
518
|
+
timer.current = null;
|
|
519
|
+
};
|
|
520
|
+
const start = (initialValue = 60) => {
|
|
521
|
+
pause();
|
|
522
|
+
setCount(initialValue);
|
|
523
|
+
setStartCount((startCount2) => startCount2 + 1);
|
|
524
|
+
timer.current = setInterval(() => {
|
|
525
|
+
setCount((count2) => count2 - 1);
|
|
526
|
+
}, 1e3);
|
|
527
|
+
};
|
|
528
|
+
useEffect(() => {
|
|
529
|
+
return () => {
|
|
530
|
+
pause();
|
|
531
|
+
};
|
|
532
|
+
}, []);
|
|
533
|
+
useEffect(() => {
|
|
534
|
+
if (count === 0 && startCount !== 0) {
|
|
535
|
+
pause();
|
|
536
|
+
callback?.();
|
|
537
|
+
}
|
|
538
|
+
}, [count]);
|
|
539
|
+
return { count, start, pause, startCount };
|
|
540
|
+
};
|
|
541
|
+
var useCreateValtioContext_default = () => {
|
|
426
542
|
const Context = createContext(null);
|
|
427
543
|
const ValtioProvider = ({ store, children }) => /* @__PURE__ */ jsx(Context.Provider, { value: store, children });
|
|
428
544
|
const useValtioStore = () => {
|
|
@@ -436,8 +552,8 @@ function useCreateValtioContext() {
|
|
|
436
552
|
// 导出 Context 以便外部使用
|
|
437
553
|
Context
|
|
438
554
|
};
|
|
439
|
-
}
|
|
440
|
-
|
|
555
|
+
};
|
|
556
|
+
var useDebounce_default = (func, wait = 400) => {
|
|
441
557
|
const { current } = useRef({ func, timeOut: null });
|
|
442
558
|
useEffect(() => {
|
|
443
559
|
current.func = func;
|
|
@@ -472,97 +588,155 @@ function useDebounce(func, wait = 400) {
|
|
|
472
588
|
debounce.flush = flush;
|
|
473
589
|
debounce.cancel = cancel;
|
|
474
590
|
return useCallback(debounce, []);
|
|
475
|
-
}
|
|
476
|
-
var deepCopy = (obj,
|
|
477
|
-
if (
|
|
478
|
-
|
|
479
|
-
|
|
480
|
-
|
|
481
|
-
|
|
482
|
-
result[key] = deepCopy(obj[key], isJson);
|
|
591
|
+
};
|
|
592
|
+
var deepCopy = (obj, isJson2 = true) => {
|
|
593
|
+
if (isJson2) {
|
|
594
|
+
try {
|
|
595
|
+
return JSON.parse(JSON.stringify(obj));
|
|
596
|
+
} catch {
|
|
597
|
+
return deepCopy(obj, false);
|
|
483
598
|
}
|
|
484
599
|
}
|
|
485
|
-
|
|
600
|
+
const visited = /* @__PURE__ */ new WeakMap();
|
|
601
|
+
const cloneRecursively = (value) => {
|
|
602
|
+
if (isNullOrUnDef(value)) return value;
|
|
603
|
+
const type = typeof value;
|
|
604
|
+
if (type !== "object") return value;
|
|
605
|
+
if (visited.has(value)) {
|
|
606
|
+
return visited.get(value);
|
|
607
|
+
}
|
|
608
|
+
if (isDate(value)) return new Date(value);
|
|
609
|
+
if (isRegExp(value)) return new RegExp(value);
|
|
610
|
+
if (isMap(value)) {
|
|
611
|
+
const clonedMap = /* @__PURE__ */ new Map();
|
|
612
|
+
visited.set(value, clonedMap);
|
|
613
|
+
for (const [k, v] of value.entries()) {
|
|
614
|
+
clonedMap.set(cloneRecursively(k), cloneRecursively(v));
|
|
615
|
+
}
|
|
616
|
+
return clonedMap;
|
|
617
|
+
}
|
|
618
|
+
if (isSet(value)) {
|
|
619
|
+
const clonedSet = /* @__PURE__ */ new Set();
|
|
620
|
+
visited.set(value, clonedSet);
|
|
621
|
+
for (const v of value.values()) {
|
|
622
|
+
clonedSet.add(cloneRecursively(v));
|
|
623
|
+
}
|
|
624
|
+
return clonedSet;
|
|
625
|
+
}
|
|
626
|
+
if (isArray(value)) {
|
|
627
|
+
const result = [];
|
|
628
|
+
visited.set(value, result);
|
|
629
|
+
for (let i = 0; i < value.length; i++) {
|
|
630
|
+
result[i] = cloneRecursively(value[i]);
|
|
631
|
+
}
|
|
632
|
+
return result;
|
|
633
|
+
} else {
|
|
634
|
+
const result = {};
|
|
635
|
+
visited.set(value, result);
|
|
636
|
+
for (const key in value) {
|
|
637
|
+
if (Object.prototype.hasOwnProperty.call(value, key)) {
|
|
638
|
+
result[key] = cloneRecursively(value[key]);
|
|
639
|
+
}
|
|
640
|
+
}
|
|
641
|
+
return result;
|
|
642
|
+
}
|
|
643
|
+
};
|
|
644
|
+
return cloneRecursively(obj);
|
|
486
645
|
};
|
|
487
646
|
function deepEqual(a, b) {
|
|
488
|
-
|
|
489
|
-
|
|
490
|
-
|
|
491
|
-
|
|
492
|
-
|
|
493
|
-
|
|
494
|
-
|
|
647
|
+
const visited = /* @__PURE__ */ new WeakMap();
|
|
648
|
+
const isEqual = (x, y) => {
|
|
649
|
+
if (Object.is(x, y)) return true;
|
|
650
|
+
if (typeof x === "object" && !isNull(x) && typeof y === "object" && !isNull(y)) {
|
|
651
|
+
if (visited.has(x)) {
|
|
652
|
+
if (visited.get(x).has(y)) return true;
|
|
653
|
+
}
|
|
654
|
+
if (!visited.has(x)) visited.set(x, /* @__PURE__ */ new WeakSet());
|
|
655
|
+
visited.get(x).add(y);
|
|
656
|
+
if (!visited.has(y)) visited.set(y, /* @__PURE__ */ new WeakSet());
|
|
657
|
+
visited.get(y).add(x);
|
|
495
658
|
}
|
|
496
|
-
return
|
|
497
|
-
|
|
498
|
-
|
|
499
|
-
|
|
500
|
-
|
|
501
|
-
|
|
659
|
+
if (isDate(x) && isDate(y)) return x.getTime() === y.getTime();
|
|
660
|
+
if (isRegExp(x) && isRegExp(y)) return x.toString() === y.toString();
|
|
661
|
+
if (isMap(x) && isMap(y)) {
|
|
662
|
+
if (x.size !== y.size) return false;
|
|
663
|
+
for (const [key, val] of x.entries()) {
|
|
664
|
+
if (!y.has(key)) return false;
|
|
665
|
+
if (!isEqual(val, y.get(key))) return false;
|
|
666
|
+
}
|
|
667
|
+
return true;
|
|
502
668
|
}
|
|
503
|
-
|
|
504
|
-
|
|
505
|
-
|
|
506
|
-
|
|
507
|
-
|
|
508
|
-
|
|
509
|
-
|
|
510
|
-
if (isObject(a) && isObject(b)) {
|
|
511
|
-
const keysA = Object.keys(a);
|
|
512
|
-
const keysB = Object.keys(b);
|
|
513
|
-
if (keysA.length !== keysB.length) return false;
|
|
514
|
-
for (const key of keysA) {
|
|
515
|
-
if (!deepEqual(a[key], b[key])) return false;
|
|
669
|
+
if (isSet(x) && isSet(y)) {
|
|
670
|
+
if (x.size !== y.size) return false;
|
|
671
|
+
for (const val of x.values()) {
|
|
672
|
+
const hasEqual = Array.from(y.values()).some((bVal) => isEqual(val, bVal));
|
|
673
|
+
if (!hasEqual) return false;
|
|
674
|
+
}
|
|
675
|
+
return true;
|
|
516
676
|
}
|
|
517
|
-
|
|
518
|
-
|
|
519
|
-
|
|
677
|
+
if (isArray(x) && isArray(y)) {
|
|
678
|
+
if (x.length !== y.length) return false;
|
|
679
|
+
return x.every((item, i) => isEqual(item, y[i]));
|
|
680
|
+
}
|
|
681
|
+
if (isFunction(x) && isFunction(y)) return x === y;
|
|
682
|
+
if (isObject(x) && isObject(y)) {
|
|
683
|
+
const keysA = Object.keys(x);
|
|
684
|
+
const keysB = Object.keys(y);
|
|
685
|
+
if (keysA.length !== keysB.length) return false;
|
|
686
|
+
for (const key of keysA) {
|
|
687
|
+
if (!keysB.includes(key)) return false;
|
|
688
|
+
if (!isEqual(x[key], y[key])) return false;
|
|
689
|
+
}
|
|
690
|
+
return true;
|
|
691
|
+
}
|
|
692
|
+
return false;
|
|
693
|
+
};
|
|
694
|
+
return isEqual(a, b);
|
|
520
695
|
}
|
|
521
696
|
var deepMerge = (base, override) => {
|
|
697
|
+
if (!base || !override) {
|
|
698
|
+
return base || override || {};
|
|
699
|
+
}
|
|
522
700
|
const result = { ...base };
|
|
523
701
|
Object.keys(override || {}).forEach((key) => {
|
|
524
702
|
const baseValue = base[key];
|
|
525
703
|
const overrideValue = override[key];
|
|
526
|
-
if (
|
|
704
|
+
if (isObject(baseValue) && isObject(overrideValue)) {
|
|
527
705
|
result[key] = deepMerge(baseValue, overrideValue);
|
|
528
|
-
} else if (overrideValue
|
|
706
|
+
} else if (isDef(overrideValue)) {
|
|
529
707
|
result[key] = overrideValue;
|
|
530
708
|
}
|
|
531
709
|
});
|
|
532
710
|
return result;
|
|
533
711
|
};
|
|
534
|
-
var objToOptions = (obj) => {
|
|
535
|
-
return Object.keys(obj).map((key) => ({
|
|
712
|
+
var objToOptions = (obj, filter) => {
|
|
713
|
+
return Object.keys(obj).filter((key) => !filter || filter(key, obj[key])).map((key) => ({
|
|
536
714
|
label: obj[key],
|
|
537
|
-
value: Number(key)
|
|
715
|
+
value: isNaN(Number(key)) ? key : Number(key)
|
|
538
716
|
}));
|
|
539
717
|
};
|
|
540
718
|
var arrToObj = (arr = [], key) => {
|
|
541
719
|
const obj = {};
|
|
542
|
-
arr
|
|
720
|
+
arr.forEach((item) => {
|
|
543
721
|
obj[item[key]] = item;
|
|
544
722
|
});
|
|
545
723
|
return obj;
|
|
546
724
|
};
|
|
547
|
-
var
|
|
725
|
+
var setInterval2 = (fn, t) => {
|
|
548
726
|
let timer = null;
|
|
549
|
-
let
|
|
550
|
-
const
|
|
727
|
+
let running = true;
|
|
728
|
+
const loop = () => {
|
|
551
729
|
timer = setTimeout(async () => {
|
|
552
|
-
if (
|
|
553
|
-
return;
|
|
554
|
-
}
|
|
730
|
+
if (!running) return;
|
|
555
731
|
await fn();
|
|
556
|
-
if (
|
|
557
|
-
interval();
|
|
558
|
-
}
|
|
732
|
+
if (running) loop();
|
|
559
733
|
}, t);
|
|
560
734
|
};
|
|
561
|
-
|
|
735
|
+
loop();
|
|
562
736
|
return {
|
|
563
|
-
isRun: () =>
|
|
737
|
+
isRun: () => running,
|
|
564
738
|
cancel: () => {
|
|
565
|
-
|
|
739
|
+
running = false;
|
|
566
740
|
if (timer) {
|
|
567
741
|
clearTimeout(timer);
|
|
568
742
|
timer = null;
|
|
@@ -571,18 +745,13 @@ var nsSetInterval = (fn, t) => {
|
|
|
571
745
|
};
|
|
572
746
|
};
|
|
573
747
|
var genNonDuplicateID = () => {
|
|
574
|
-
|
|
575
|
-
idStr += Math.random().toString(36).substr(2);
|
|
576
|
-
return idStr;
|
|
748
|
+
return crypto.randomUUID();
|
|
577
749
|
};
|
|
578
|
-
var copyText = (text, prompt = "\u590D\u5236\u6210\u529F") => {
|
|
579
|
-
|
|
580
|
-
navigator.clipboard.writeText(text)
|
|
581
|
-
|
|
582
|
-
|
|
583
|
-
}
|
|
584
|
-
});
|
|
585
|
-
} else {
|
|
750
|
+
var copyText = async (text, prompt = "\u590D\u5236\u6210\u529F") => {
|
|
751
|
+
try {
|
|
752
|
+
await navigator.clipboard.writeText(text);
|
|
753
|
+
if (prompt) message.success(prompt);
|
|
754
|
+
} catch (e) {
|
|
586
755
|
const textArea = document.createElement("textarea");
|
|
587
756
|
textArea.value = text;
|
|
588
757
|
textArea.style.position = "absolute";
|
|
@@ -592,10 +761,8 @@ var copyText = (text, prompt = "\u590D\u5236\u6210\u529F") => {
|
|
|
592
761
|
document.body.appendChild(textArea);
|
|
593
762
|
textArea.focus();
|
|
594
763
|
textArea.select();
|
|
595
|
-
const
|
|
596
|
-
if (
|
|
597
|
-
message.success(prompt);
|
|
598
|
-
}
|
|
764
|
+
const ok = document.execCommand("copy");
|
|
765
|
+
if (ok && prompt) message.success(prompt);
|
|
599
766
|
textArea.remove();
|
|
600
767
|
}
|
|
601
768
|
};
|
|
@@ -620,25 +787,71 @@ var getFileName = (filePath) => {
|
|
|
620
787
|
var getFileSuffixName = (fileName) => {
|
|
621
788
|
return fileName.split(".").pop() || "";
|
|
622
789
|
};
|
|
623
|
-
var
|
|
790
|
+
var convertNewlineToBr = (con) => {
|
|
624
791
|
return con ? con.replace(/\r\n/g, "\n").replace(/\n/g, "<br/>") : "";
|
|
625
792
|
};
|
|
626
|
-
var
|
|
627
|
-
const
|
|
793
|
+
var getAllUrlParams = (url = "") => {
|
|
794
|
+
const result = {};
|
|
795
|
+
if (!url) return result;
|
|
796
|
+
let query = "";
|
|
797
|
+
try {
|
|
798
|
+
const u = new URL(url, "http://dummy.com");
|
|
799
|
+
query = u.search;
|
|
800
|
+
} catch {
|
|
801
|
+
const qIndex = url.indexOf("?");
|
|
802
|
+
if (qIndex === -1) return result;
|
|
803
|
+
query = url.slice(qIndex);
|
|
804
|
+
}
|
|
805
|
+
const params = new URLSearchParams(query);
|
|
806
|
+
const seen = /* @__PURE__ */ new Set();
|
|
807
|
+
for (const [key, value] of params.entries()) {
|
|
808
|
+
if (seen.has(key)) {
|
|
809
|
+
if (isArray(result[key])) {
|
|
810
|
+
result[key].push(value);
|
|
811
|
+
} else {
|
|
812
|
+
result[key] = [result[key], value];
|
|
813
|
+
}
|
|
814
|
+
} else {
|
|
815
|
+
result[key] = value;
|
|
816
|
+
seen.add(key);
|
|
817
|
+
}
|
|
818
|
+
}
|
|
819
|
+
return result;
|
|
820
|
+
};
|
|
821
|
+
var buildUrlParams = (obj, url, format = "repeat") => {
|
|
822
|
+
if (!isObject(obj)) return url ?? "";
|
|
823
|
+
let base = url || "";
|
|
824
|
+
let hash = "";
|
|
825
|
+
if (base.includes("#")) {
|
|
826
|
+
const i = base.indexOf("#");
|
|
827
|
+
hash = base.slice(i);
|
|
828
|
+
base = base.slice(0, i);
|
|
829
|
+
}
|
|
830
|
+
const originalParams = getAllUrlParams(base);
|
|
831
|
+
const merged = { ...originalParams, ...obj };
|
|
832
|
+
const params = new URLSearchParams();
|
|
833
|
+
for (const [key, value] of Object.entries(merged)) {
|
|
834
|
+
if (isNullOrUnDef(value)) continue;
|
|
628
835
|
if (isArray(value)) {
|
|
629
|
-
|
|
836
|
+
const list = value.filter((v) => !isNullOrUnDef(v)).map(String);
|
|
837
|
+
if (list.length === 0) continue;
|
|
838
|
+
if (format === "repeat") {
|
|
839
|
+
list.forEach((v) => params.append(key, v));
|
|
840
|
+
} else {
|
|
841
|
+
params.set(key, list.join(","));
|
|
842
|
+
}
|
|
843
|
+
} else {
|
|
844
|
+
params.set(key, String(value));
|
|
630
845
|
}
|
|
631
|
-
return `${encodeURIComponent(key)}=${encodeURIComponent(value)}`;
|
|
632
|
-
}).join("&");
|
|
633
|
-
if (url) {
|
|
634
|
-
const separator = url.includes("?") ? "&" : "?";
|
|
635
|
-
return `${url}${separator}${params}`;
|
|
636
846
|
}
|
|
637
|
-
|
|
847
|
+
const query = params.toString();
|
|
848
|
+
if (!base) return query;
|
|
849
|
+
const cleanBase = base.split("?")[0];
|
|
850
|
+
return `${cleanBase}${query ? `?${query}` : ""}${hash}`;
|
|
638
851
|
};
|
|
639
852
|
var downloadFile = (url, name) => {
|
|
640
853
|
const a = document.createElement("a");
|
|
641
|
-
a.download = name || "\
|
|
854
|
+
a.download = name || "\u6587\u4EF6";
|
|
642
855
|
a.href = url;
|
|
643
856
|
document.body.appendChild(a);
|
|
644
857
|
a.click();
|
|
@@ -646,31 +859,28 @@ var downloadFile = (url, name) => {
|
|
|
646
859
|
window.URL.revokeObjectURL(url);
|
|
647
860
|
};
|
|
648
861
|
var addUrlLastSlash = (url = "") => {
|
|
649
|
-
const u = new URL(url, "
|
|
650
|
-
|
|
651
|
-
|
|
652
|
-
pathname += "/";
|
|
653
|
-
}
|
|
654
|
-
u.pathname = pathname;
|
|
655
|
-
return `${isExternal(url) ? u.origin : ""}${u.pathname}${u.search}${u.hash}`;
|
|
862
|
+
const u = new URL(url, "http://dummy.com");
|
|
863
|
+
if (!u.pathname.endsWith("/")) u.pathname += "/";
|
|
864
|
+
return isExternal(url) ? u.toString() : `${u.pathname}${u.search}${u.hash}`;
|
|
656
865
|
};
|
|
657
|
-
var
|
|
658
|
-
if (!preHref) return url;
|
|
659
|
-
let newUrl = "";
|
|
660
|
-
const preHrefUrl = new URL(preHref);
|
|
866
|
+
var setUrlMainSource = (url, preHref, defaultMainSource) => {
|
|
661
867
|
const urlParts = url.split("?");
|
|
662
868
|
const srcParams = new URLSearchParams(urlParts[1] || "");
|
|
663
869
|
if (srcParams.has("mainSource")) {
|
|
664
|
-
|
|
665
|
-
}
|
|
666
|
-
|
|
667
|
-
|
|
668
|
-
|
|
669
|
-
|
|
670
|
-
|
|
870
|
+
return url;
|
|
871
|
+
}
|
|
872
|
+
let mainSourceValue = defaultMainSource;
|
|
873
|
+
if (preHref) {
|
|
874
|
+
try {
|
|
875
|
+
const preHrefUrl = new URL(preHref, "http://dummy.com");
|
|
876
|
+
const preMainSource = preHrefUrl.searchParams.get("mainSource");
|
|
877
|
+
if (preMainSource) {
|
|
878
|
+
mainSourceValue = preMainSource;
|
|
879
|
+
}
|
|
880
|
+
} catch (e) {
|
|
671
881
|
}
|
|
672
882
|
}
|
|
673
|
-
return
|
|
883
|
+
return buildUrlParams({ mainSource: mainSourceValue }, url);
|
|
674
884
|
};
|
|
675
885
|
var getWebSocketUrl = (path, customHost) => {
|
|
676
886
|
const protocol = window.location.protocol === "https:" ? "wss:" : "ws:";
|
|
@@ -694,9 +904,178 @@ function transform(source, fieldMap) {
|
|
|
694
904
|
function transforms(sources, fieldMap) {
|
|
695
905
|
return sources?.map((source) => transform(source, fieldMap)) || [];
|
|
696
906
|
}
|
|
907
|
+
var convertCurrency = (money = "") => {
|
|
908
|
+
let newMoney = money;
|
|
909
|
+
const cnNums = ["\u96F6", "\u58F9", "\u8D30", "\u53C1", "\u8086", "\u4F0D", "\u9646", "\u67D2", "\u634C", "\u7396"];
|
|
910
|
+
const cnIntRadice = ["", "\u62FE", "\u4F70", "\u4EDF"];
|
|
911
|
+
const cnIntUnits = ["", "\u4E07", "\u4EBF", "\u5146"];
|
|
912
|
+
const cnDecUnits = ["\u89D2", "\u5206", "\u6BEB", "\u5398"];
|
|
913
|
+
const cnInteger = "\u6574";
|
|
914
|
+
const cnIntLast = "\u5706";
|
|
915
|
+
const minus2 = "(\u8D1F\u6570)";
|
|
916
|
+
let isMinus = false;
|
|
917
|
+
const maxNum = 1e15;
|
|
918
|
+
let integerNum;
|
|
919
|
+
let decimalNum;
|
|
920
|
+
let chineseStr = "";
|
|
921
|
+
let parts;
|
|
922
|
+
if (newMoney === "") {
|
|
923
|
+
return "";
|
|
924
|
+
}
|
|
925
|
+
newMoney = isString(newMoney) ? parseFloat(newMoney) : newMoney;
|
|
926
|
+
if (newMoney < 0) {
|
|
927
|
+
isMinus = true;
|
|
928
|
+
newMoney = Math.abs(newMoney);
|
|
929
|
+
}
|
|
930
|
+
if (newMoney >= maxNum) {
|
|
931
|
+
return "";
|
|
932
|
+
}
|
|
933
|
+
if (newMoney === 0) {
|
|
934
|
+
chineseStr = cnNums[0] + cnIntLast + cnInteger;
|
|
935
|
+
return chineseStr;
|
|
936
|
+
}
|
|
937
|
+
newMoney = newMoney.toString();
|
|
938
|
+
if (newMoney.indexOf(".") === -1) {
|
|
939
|
+
integerNum = newMoney;
|
|
940
|
+
decimalNum = "";
|
|
941
|
+
} else {
|
|
942
|
+
parts = newMoney.split(".");
|
|
943
|
+
integerNum = parts[0];
|
|
944
|
+
decimalNum = parts[1].substr(0, 4);
|
|
945
|
+
}
|
|
946
|
+
if (parseInt(integerNum, 10) > 0) {
|
|
947
|
+
let zeroCount = 0;
|
|
948
|
+
const IntLen = integerNum.length;
|
|
949
|
+
for (let i = 0; i < IntLen; i++) {
|
|
950
|
+
const n = integerNum.substr(i, 1);
|
|
951
|
+
const p = IntLen - i - 1;
|
|
952
|
+
const q = p / 4;
|
|
953
|
+
const m = p % 4;
|
|
954
|
+
if (n === "0") {
|
|
955
|
+
zeroCount++;
|
|
956
|
+
} else {
|
|
957
|
+
if (zeroCount > 0) {
|
|
958
|
+
chineseStr += cnNums[0];
|
|
959
|
+
}
|
|
960
|
+
zeroCount = 0;
|
|
961
|
+
chineseStr += cnNums[parseInt(n)] + cnIntRadice[m];
|
|
962
|
+
}
|
|
963
|
+
if (m === 0 && zeroCount < 4) {
|
|
964
|
+
chineseStr += cnIntUnits[q];
|
|
965
|
+
}
|
|
966
|
+
}
|
|
967
|
+
chineseStr += cnIntLast;
|
|
968
|
+
}
|
|
969
|
+
if (decimalNum !== "") {
|
|
970
|
+
const decLen = decimalNum.length;
|
|
971
|
+
for (let i = 0; i < decLen; i++) {
|
|
972
|
+
const n = decimalNum.substr(i, 1);
|
|
973
|
+
if (n !== "0") {
|
|
974
|
+
chineseStr += cnNums[Number(n)] + cnDecUnits[i];
|
|
975
|
+
} else {
|
|
976
|
+
chineseStr += cnNums[0];
|
|
977
|
+
}
|
|
978
|
+
}
|
|
979
|
+
}
|
|
980
|
+
if (chineseStr === "") {
|
|
981
|
+
chineseStr += cnNums[0] + cnIntLast + cnInteger;
|
|
982
|
+
} else if (decimalNum === "") {
|
|
983
|
+
chineseStr += cnInteger;
|
|
984
|
+
}
|
|
985
|
+
if (isMinus) {
|
|
986
|
+
chineseStr = minus2 + chineseStr;
|
|
987
|
+
}
|
|
988
|
+
return chineseStr;
|
|
989
|
+
};
|
|
990
|
+
var getRowSpanCount = (data, key, target) => {
|
|
991
|
+
if (!Array.isArray(data)) return 1;
|
|
992
|
+
const newData = data.map((_) => _[key]);
|
|
993
|
+
let preValue = newData[0];
|
|
994
|
+
const res = [[preValue]];
|
|
995
|
+
let index = 0;
|
|
996
|
+
for (let i = 1; i < newData.length; i++) {
|
|
997
|
+
if (newData[i] === preValue) {
|
|
998
|
+
res[index].push(newData[i]);
|
|
999
|
+
} else {
|
|
1000
|
+
index += 1;
|
|
1001
|
+
res[index] = [];
|
|
1002
|
+
res[index].push(newData[i]);
|
|
1003
|
+
preValue = newData[i];
|
|
1004
|
+
}
|
|
1005
|
+
}
|
|
1006
|
+
const arr = [];
|
|
1007
|
+
res.forEach((_) => {
|
|
1008
|
+
const len = _.length;
|
|
1009
|
+
for (let i = 0; i < len; i++) {
|
|
1010
|
+
arr.push(i === 0 ? len : 0);
|
|
1011
|
+
}
|
|
1012
|
+
});
|
|
1013
|
+
return arr[target];
|
|
1014
|
+
};
|
|
1015
|
+
var importThirdPartyFile = (document2, path) => {
|
|
1016
|
+
const type = path.endsWith(".js") ? "script" : "link";
|
|
1017
|
+
const element = type === "script" ? document2.createElement("script") : document2.createElement("link");
|
|
1018
|
+
if (type === "script") {
|
|
1019
|
+
const scriptElement = element;
|
|
1020
|
+
scriptElement.async = true;
|
|
1021
|
+
scriptElement.src = path;
|
|
1022
|
+
} else {
|
|
1023
|
+
const linkElement = element;
|
|
1024
|
+
linkElement.rel = "stylesheet";
|
|
1025
|
+
linkElement.type = "text/css";
|
|
1026
|
+
linkElement.href = path;
|
|
1027
|
+
}
|
|
1028
|
+
if (document2.head) {
|
|
1029
|
+
document2.head.appendChild(element);
|
|
1030
|
+
}
|
|
1031
|
+
};
|
|
1032
|
+
var processItemList = (items) => {
|
|
1033
|
+
return items.filter((item) => item.hidden !== true).map((item, index) => ({ key: index, ...item }));
|
|
1034
|
+
};
|
|
1035
|
+
var executeScript = (script, params) => {
|
|
1036
|
+
if (isScriptSafe(script)) {
|
|
1037
|
+
const func = new Function(
|
|
1038
|
+
...Object.keys(params),
|
|
1039
|
+
// 参数列表
|
|
1040
|
+
script
|
|
1041
|
+
// 脚本字符串
|
|
1042
|
+
);
|
|
1043
|
+
try {
|
|
1044
|
+
return func(...Object.values(params));
|
|
1045
|
+
} catch (error) {
|
|
1046
|
+
console.error("Error executing script:", error);
|
|
1047
|
+
}
|
|
1048
|
+
} else {
|
|
1049
|
+
console.error("unsafe script");
|
|
1050
|
+
}
|
|
1051
|
+
};
|
|
1052
|
+
function aesEncrypt(data, key) {
|
|
1053
|
+
if (!key) throw new Error("AES Encrypt: key is required");
|
|
1054
|
+
if (isNullOrUnDef(data)) return "";
|
|
1055
|
+
try {
|
|
1056
|
+
const text = JSON.stringify(data);
|
|
1057
|
+
return AES.encrypt(text, key.trim()).toString();
|
|
1058
|
+
} catch (err) {
|
|
1059
|
+
console.error("AES Encrypt error:", err);
|
|
1060
|
+
throw new Error("AES Encrypt failed");
|
|
1061
|
+
}
|
|
1062
|
+
}
|
|
1063
|
+
function aesDecrypt(data, key) {
|
|
1064
|
+
if (!key) throw new Error("AES Decrypt: key is required");
|
|
1065
|
+
if (!data) return null;
|
|
1066
|
+
try {
|
|
1067
|
+
const bytes = AES.decrypt(data, key.trim());
|
|
1068
|
+
const decoded = bytes.toString(encUtf8);
|
|
1069
|
+
if (!decoded) return null;
|
|
1070
|
+
return JSON.parse(decoded);
|
|
1071
|
+
} catch (err) {
|
|
1072
|
+
console.error("AES Decrypt error:", err);
|
|
1073
|
+
return null;
|
|
1074
|
+
}
|
|
1075
|
+
}
|
|
697
1076
|
|
|
698
1077
|
// src/hooks/useDeepEffect.ts
|
|
699
|
-
|
|
1078
|
+
var useDeepEffect_default = (effect, deps) => {
|
|
700
1079
|
const prevDepsRef = useRef();
|
|
701
1080
|
const depsChanged = !prevDepsRef.current || deps.length !== prevDepsRef.current.length || deps.some((dep, i) => !deepEqual(dep, prevDepsRef.current[i]));
|
|
702
1081
|
useEffect(() => {
|
|
@@ -705,8 +1084,8 @@ function useDeepEffect(effect, deps) {
|
|
|
705
1084
|
return effect();
|
|
706
1085
|
}
|
|
707
1086
|
}, [depsChanged]);
|
|
708
|
-
}
|
|
709
|
-
|
|
1087
|
+
};
|
|
1088
|
+
var useRefState_default = (init) => {
|
|
710
1089
|
const [state, setState] = useState(init);
|
|
711
1090
|
const stateRef = useRef(init);
|
|
712
1091
|
const setProxy = (newVal) => {
|
|
@@ -715,8 +1094,8 @@ function useRefState(init) {
|
|
|
715
1094
|
};
|
|
716
1095
|
const getState = () => stateRef.current;
|
|
717
1096
|
return [state, setProxy, getState];
|
|
718
|
-
}
|
|
719
|
-
var
|
|
1097
|
+
};
|
|
1098
|
+
var useSyncInput_default = (storeValue, setStoreValue) => {
|
|
720
1099
|
const [inputValue, setInputValue] = useState(storeValue);
|
|
721
1100
|
useEffect(() => {
|
|
722
1101
|
if (storeValue !== inputValue) {
|
|
@@ -732,7 +1111,7 @@ var useSyncInput = (storeValue, setStoreValue) => {
|
|
|
732
1111
|
setInputValue: handleValueChange
|
|
733
1112
|
};
|
|
734
1113
|
};
|
|
735
|
-
|
|
1114
|
+
var useThrottle_default = (func, wait) => {
|
|
736
1115
|
const { current } = useRef({ func, timeOut: null });
|
|
737
1116
|
useEffect(() => {
|
|
738
1117
|
current.func = func;
|
|
@@ -766,18 +1145,20 @@ function useThrottle(func, wait) {
|
|
|
766
1145
|
throttle.flush = flush;
|
|
767
1146
|
throttle.cancel = cancel;
|
|
768
1147
|
return useCallback(throttle, []);
|
|
769
|
-
}
|
|
1148
|
+
};
|
|
770
1149
|
dayjs.extend(relativeTime);
|
|
771
|
-
var
|
|
772
|
-
var
|
|
773
|
-
var
|
|
774
|
-
var
|
|
1150
|
+
var DEFAULT_DATE_TIME_FORMAT = "YYYY-MM-DD HH:mm:ss";
|
|
1151
|
+
var DEFAULT_DATE_FORMAT = "YYYY-MM-DD";
|
|
1152
|
+
var DEFAULT_YEAR_MONTH_FORMAT = "YYYY\u5E74MM\u6708";
|
|
1153
|
+
var DEFAULT_YEAR_MONTH_DAY_FORMAT = "YYYY\u5E74MM\u6708DD\u65E5";
|
|
1154
|
+
var DEFAULT_UNIT = "date";
|
|
1155
|
+
var getStartOfTimestamp = (date, unit = DEFAULT_UNIT) => {
|
|
775
1156
|
return dayjs(date).startOf(unit).valueOf();
|
|
776
1157
|
};
|
|
777
|
-
var getEndOfTimestamp = (date, unit =
|
|
1158
|
+
var getEndOfTimestamp = (date, unit = DEFAULT_UNIT) => {
|
|
778
1159
|
return dayjs(date).endOf(unit).valueOf();
|
|
779
1160
|
};
|
|
780
|
-
var formatDate = (date, fmt =
|
|
1161
|
+
var formatDate = (date, fmt = DEFAULT_DATE_TIME_FORMAT) => {
|
|
781
1162
|
if (date) {
|
|
782
1163
|
return dayjs(date).format(fmt);
|
|
783
1164
|
}
|
|
@@ -789,33 +1170,6 @@ var getTimestamp = (date) => {
|
|
|
789
1170
|
var isExpire = (date) => {
|
|
790
1171
|
return dayjs(date).isBefore(getStartOfTimestamp());
|
|
791
1172
|
};
|
|
792
|
-
var USER_KEY = "NS-USER";
|
|
793
|
-
function setCurrentUser(userInfo) {
|
|
794
|
-
const cipherText = AES.encrypt(JSON.stringify(userInfo), "((#II))").toString();
|
|
795
|
-
sessionStorage.setItem(USER_KEY, cipherText);
|
|
796
|
-
}
|
|
797
|
-
function getCurrentUser() {
|
|
798
|
-
const userInfoJson = sessionStorage.getItem(USER_KEY);
|
|
799
|
-
if (userInfoJson) {
|
|
800
|
-
const bytes = AES.decrypt(userInfoJson, "((#II))");
|
|
801
|
-
const originalText = bytes.toString(encUtf8);
|
|
802
|
-
return JSON.parse(originalText);
|
|
803
|
-
}
|
|
804
|
-
return null;
|
|
805
|
-
}
|
|
806
|
-
function clearCurrentUser() {
|
|
807
|
-
sessionStorage.removeItem(USER_KEY);
|
|
808
|
-
}
|
|
809
|
-
var DEVICEID_KEY = "NS-DEVICE-ID";
|
|
810
|
-
function getDeviceId() {
|
|
811
|
-
let deviceId = localStorage.getItem(DEVICEID_KEY);
|
|
812
|
-
if (deviceId) {
|
|
813
|
-
return deviceId;
|
|
814
|
-
}
|
|
815
|
-
deviceId = genNonDuplicateID();
|
|
816
|
-
localStorage.setItem(DEVICEID_KEY, deviceId);
|
|
817
|
-
return deviceId;
|
|
818
|
-
}
|
|
819
1173
|
var OperatorToMethodName = {
|
|
820
1174
|
"+": "plus",
|
|
821
1175
|
"-": "minus",
|
|
@@ -868,115 +1222,191 @@ var isInteger = (num) => {
|
|
|
868
1222
|
var isNegative = (num) => {
|
|
869
1223
|
return new Decimal(num).isNegative();
|
|
870
1224
|
};
|
|
871
|
-
|
|
872
|
-
|
|
873
|
-
var getPrimaryColor = () => {
|
|
874
|
-
const searchParams = new URLSearchParams(location.search);
|
|
875
|
-
const mainSource = searchParams.get("mainSource") || "cube-uc";
|
|
876
|
-
if (mainSource === "cube-uc") {
|
|
877
|
-
return "#34AFBE";
|
|
878
|
-
} else if (mainSource === "uc") {
|
|
879
|
-
return "#FA541C";
|
|
880
|
-
}
|
|
881
|
-
};
|
|
882
|
-
var LgPrimaryColor = getPrimaryColor();
|
|
883
|
-
var themeConfig = {
|
|
884
|
-
token: { colorPrimary: LgPrimaryColor, colorLink: LgPrimaryColor },
|
|
885
|
-
cssVar: true
|
|
886
|
-
};
|
|
887
|
-
|
|
888
|
-
// src/utils/message.ts
|
|
889
|
-
var cacheMessage = () => {
|
|
890
|
-
const contents = {};
|
|
1225
|
+
var createCachedMessage = () => {
|
|
1226
|
+
const messageCache = {};
|
|
891
1227
|
return ({ title = "\u63D0\u793A", content, type = "warning", duration = 3, onClose, isCache = true, isOnly = false }) => {
|
|
892
1228
|
if (!content) return;
|
|
893
|
-
const
|
|
894
|
-
const
|
|
895
|
-
delete
|
|
1229
|
+
const cacheKey = isOnly ? "unique-message-key" : content;
|
|
1230
|
+
const handleClose = () => {
|
|
1231
|
+
delete messageCache[cacheKey];
|
|
896
1232
|
onClose?.();
|
|
897
1233
|
};
|
|
898
|
-
if (isCache &&
|
|
899
|
-
|
|
900
|
-
|
|
901
|
-
|
|
902
|
-
|
|
903
|
-
|
|
904
|
-
|
|
905
|
-
|
|
906
|
-
|
|
907
|
-
|
|
908
|
-
|
|
909
|
-
|
|
910
|
-
|
|
911
|
-
} else {
|
|
912
|
-
message$1[type]({
|
|
913
|
-
content,
|
|
914
|
-
duration,
|
|
915
|
-
onClose: onClose2
|
|
916
|
-
});
|
|
917
|
-
}
|
|
1234
|
+
if (isCache && messageCache[cacheKey]) return;
|
|
1235
|
+
if (isCache) {
|
|
1236
|
+
messageCache[cacheKey] = getTimestamp();
|
|
1237
|
+
}
|
|
1238
|
+
if (duration) {
|
|
1239
|
+
if (content.length > 30) {
|
|
1240
|
+
notification[type]({
|
|
1241
|
+
message: title,
|
|
1242
|
+
description: content,
|
|
1243
|
+
placement: "top",
|
|
1244
|
+
duration,
|
|
1245
|
+
onClose: handleClose
|
|
1246
|
+
});
|
|
918
1247
|
} else {
|
|
919
|
-
|
|
920
|
-
title,
|
|
1248
|
+
message[type]({
|
|
921
1249
|
content,
|
|
922
|
-
|
|
923
|
-
|
|
1250
|
+
duration,
|
|
1251
|
+
onClose: handleClose
|
|
924
1252
|
});
|
|
925
1253
|
}
|
|
1254
|
+
} else {
|
|
1255
|
+
Modal[type]({
|
|
1256
|
+
title,
|
|
1257
|
+
content,
|
|
1258
|
+
closable: true,
|
|
1259
|
+
centered: true,
|
|
1260
|
+
footer: null,
|
|
1261
|
+
afterClose: handleClose
|
|
1262
|
+
});
|
|
926
1263
|
}
|
|
927
1264
|
};
|
|
928
1265
|
};
|
|
929
|
-
var
|
|
1266
|
+
var cachedMessage = createCachedMessage();
|
|
930
1267
|
|
|
931
|
-
// src/utils/
|
|
932
|
-
var
|
|
933
|
-
|
|
934
|
-
|
|
935
|
-
}
|
|
936
|
-
|
|
937
|
-
|
|
938
|
-
|
|
939
|
-
|
|
940
|
-
|
|
941
|
-
|
|
942
|
-
|
|
943
|
-
|
|
944
|
-
|
|
945
|
-
|
|
946
|
-
|
|
947
|
-
|
|
948
|
-
|
|
1268
|
+
// src/utils/pattern.ts
|
|
1269
|
+
var RegMobile = {
|
|
1270
|
+
pattern: /^1[3-9]\d{9}$/,
|
|
1271
|
+
message: "\u624B\u673A\u53F7\u683C\u5F0F\u4E0D\u6B63\u786E\uFF01"
|
|
1272
|
+
};
|
|
1273
|
+
var RegFixedTelePhone = {
|
|
1274
|
+
pattern: /^0\d{2,3}-\d{7,8}$/,
|
|
1275
|
+
message: "\u7535\u8BDD\u53F7\u7801\u683C\u5F0F\u4E0D\u6B63\u786E\uFF01"
|
|
1276
|
+
};
|
|
1277
|
+
var RegTelePhone = {
|
|
1278
|
+
pattern: /^[\\+\-\\(\\)\\(\\)\d]{1,20}$/,
|
|
1279
|
+
message: "\u7535\u8BDD\u53F7\u7801\u683C\u5F0F\u4E0D\u6B63\u786E\uFF01"
|
|
1280
|
+
};
|
|
1281
|
+
var RegTaxNo = {
|
|
1282
|
+
pattern: /^[A-Z0-9]{15}$|^[A-Z0-9]{18}$|^[A-Z0-9]{20}$/,
|
|
1283
|
+
message: "\u7A0E\u53F7\u683C\u5F0F\u6709\u8BEF\uFF01"
|
|
1284
|
+
};
|
|
1285
|
+
var RegBankCardNo = {
|
|
1286
|
+
pattern: /^[0-9]*$/,
|
|
1287
|
+
message: "\u94F6\u884C\u5361\u53F7\u683C\u5F0F\u6709\u8BEF\uFF01"
|
|
1288
|
+
};
|
|
1289
|
+
var RegIdentityCardNo = {
|
|
1290
|
+
pattern: /(^\d{15}$)|(^\d{18}$)|(^\d{17}(\d|X|x)$)/,
|
|
1291
|
+
message: "\u8EAB\u4EFD\u8BC1\u53F7\u683C\u5F0F\u6709\u8BEF\uFF01"
|
|
1292
|
+
};
|
|
1293
|
+
var RegNumNo = {
|
|
1294
|
+
pattern: /^[0-9]*$/,
|
|
1295
|
+
message: "\u683C\u5F0F\u6709\u8BEF\uFF0C\u8BF7\u91CD\u65B0\u8F93\u5165\uFF01"
|
|
1296
|
+
};
|
|
1297
|
+
var RegSmsCode = {
|
|
1298
|
+
pattern: /^[0-9]{6}$/,
|
|
1299
|
+
message: "\u9A8C\u8BC1\u7801\u4E3A6\u4F4D\u6570\u5B57"
|
|
1300
|
+
};
|
|
1301
|
+
var RegEmail = {
|
|
1302
|
+
pattern: /^[a-zA-Z0-9._%+-]+@[a-zA-Z0-9.-]+\.[a-zA-Z]{2,}$/,
|
|
1303
|
+
message: "\u90AE\u7BB1\u683C\u5F0F\u6709\u8BEF\uFF01"
|
|
1304
|
+
};
|
|
1305
|
+
var RegDetailAddress = {
|
|
1306
|
+
pattern: /.*(街|路|村|乡|镇|道|巷|号).*/,
|
|
1307
|
+
message: "\u5FC5\u987B\u5305\u542B\u201C\u8857\u3001\u8DEF\u3001\u6751\u3001\u4E61\u3001\u9547\u3001\u9053\u3001\u5DF7\u3001\u53F7\u201D\u7B49\u5173\u952E\u8BCD\u4E4B\u4E00"
|
|
1308
|
+
};
|
|
1309
|
+
var PhoneOrMobileValidator = (errMessage = "\u8054\u7CFB\u7535\u8BDD\u683C\u5F0F\u4E0D\u6B63\u786E") => ({
|
|
1310
|
+
validator: (_, value) => !value || RegFixedTelePhone.pattern.test(value) || RegMobile.pattern.test(value) ? Promise.resolve() : Promise.reject(new Error(errMessage))
|
|
1311
|
+
});
|
|
1312
|
+
var ThanNumValidator = ({
|
|
1313
|
+
min,
|
|
1314
|
+
max,
|
|
1315
|
+
equalMin = false,
|
|
1316
|
+
equalMax = false,
|
|
1317
|
+
errMessage,
|
|
1318
|
+
maxErrMessage,
|
|
1319
|
+
minErrMessage
|
|
1320
|
+
}) => ({
|
|
1321
|
+
validator: (_, value) => {
|
|
1322
|
+
if (!value) {
|
|
1323
|
+
return Promise.resolve();
|
|
1324
|
+
}
|
|
1325
|
+
if (isNumberNoNaN(parseFloat(min))) {
|
|
1326
|
+
if (!(Number(value) > Number(min) || equalMin && Number(value) === Number(min))) {
|
|
1327
|
+
return Promise.reject(new Error(minErrMessage || errMessage || `\u4E0D\u80FD\u5C0F\u4E8E${equalMin ? "" : "\u7B49\u4E8E"}${min}`));
|
|
1328
|
+
}
|
|
1329
|
+
}
|
|
1330
|
+
if (isNumberNoNaN(parseFloat(max))) {
|
|
1331
|
+
if (!(Number(value) < Number(max) || equalMax && Number(value) === Number(max))) {
|
|
1332
|
+
return Promise.reject(new Error(maxErrMessage || errMessage || `\u4E0D\u80FD\u5927\u4E8E${equalMax ? "" : "\u7B49\u4E8E"}${max}`));
|
|
1333
|
+
}
|
|
1334
|
+
}
|
|
1335
|
+
return Promise.resolve();
|
|
949
1336
|
}
|
|
950
|
-
}
|
|
951
|
-
|
|
952
|
-
|
|
953
|
-
|
|
954
|
-
|
|
955
|
-
|
|
956
|
-
|
|
957
|
-
|
|
958
|
-
}
|
|
959
|
-
|
|
960
|
-
|
|
961
|
-
|
|
962
|
-
|
|
963
|
-
|
|
964
|
-
|
|
965
|
-
|
|
966
|
-
|
|
967
|
-
|
|
968
|
-
|
|
969
|
-
|
|
970
|
-
|
|
971
|
-
|
|
1337
|
+
});
|
|
1338
|
+
var ThanNumLengthValidator = ({
|
|
1339
|
+
length,
|
|
1340
|
+
decimalsLength,
|
|
1341
|
+
integerLength,
|
|
1342
|
+
lengthErrMessage,
|
|
1343
|
+
decimalsLengthErrMessage,
|
|
1344
|
+
integerLengthErrMessage
|
|
1345
|
+
}) => ({
|
|
1346
|
+
validator: (_, value) => {
|
|
1347
|
+
if (!value) {
|
|
1348
|
+
return Promise.resolve();
|
|
1349
|
+
}
|
|
1350
|
+
if (isNumber(length)) {
|
|
1351
|
+
if (precision(value) > length) {
|
|
1352
|
+
return Promise.reject(new Error(lengthErrMessage || `\u603B\u4F4D\u6570\u4E0D\u80FD\u8D85\u8FC7${length}\u4F4D`));
|
|
1353
|
+
}
|
|
1354
|
+
}
|
|
1355
|
+
if (isNumber(integerLength)) {
|
|
1356
|
+
if (precision(value) - decimalPlaces(value) > integerLength) {
|
|
1357
|
+
return Promise.reject(new Error(integerLengthErrMessage || `\u6574\u6570\u4F4D\u4E0D\u80FD\u8D85\u8FC7${integerLength}\u4F4D`));
|
|
1358
|
+
}
|
|
1359
|
+
}
|
|
1360
|
+
if (isNumber(decimalsLength)) {
|
|
1361
|
+
if (decimalPlaces(value) > decimalsLength) {
|
|
1362
|
+
return Promise.reject(new Error(decimalsLengthErrMessage || `\u5C0F\u6570\u4F4D\u4E0D\u80FD\u8D85\u8FC7${decimalsLength}\u4F4D`));
|
|
1363
|
+
}
|
|
1364
|
+
}
|
|
1365
|
+
return Promise.resolve();
|
|
1366
|
+
}
|
|
1367
|
+
});
|
|
1368
|
+
var MultiEmailValidator = (max) => ({
|
|
1369
|
+
validator: (_, value) => {
|
|
1370
|
+
if (value) {
|
|
1371
|
+
const emailArr = value.split(",").map((v) => v.trim()).filter((v) => v);
|
|
1372
|
+
if (emailArr.length > max) return Promise.reject(new Error(`\u6700\u591A\u8F93\u5165${max}\u4E2A\u90AE\u7BB1`));
|
|
1373
|
+
const noEmailArr = emailArr.filter((email) => !RegEmail.pattern.test(email));
|
|
1374
|
+
if (noEmailArr.length) return Promise.reject(new Error(RegEmail.message));
|
|
1375
|
+
}
|
|
1376
|
+
return Promise.resolve();
|
|
1377
|
+
}
|
|
1378
|
+
});
|
|
1379
|
+
var HttpStatus = {
|
|
1380
|
+
/** 服务器错误 */
|
|
1381
|
+
ERROR: 500,
|
|
1382
|
+
/** 缺少参数或参数错误 */
|
|
1383
|
+
MISSING_PARAMETER: 400,
|
|
1384
|
+
/** 未授权,需要用户验证 */
|
|
1385
|
+
UNAUTHORIZED: 401,
|
|
1386
|
+
/** 禁止访问,服务器理解请求但拒绝执行 */
|
|
1387
|
+
FORBIDDEN: 403,
|
|
1388
|
+
/** 请求的资源未找到 */
|
|
1389
|
+
NOT_FOUND: 404
|
|
1390
|
+
};
|
|
1391
|
+
var BusinessCode = {
|
|
1392
|
+
/** 请求成功 */
|
|
1393
|
+
OK: 200,
|
|
1394
|
+
/** 权限拒绝,没有足够的权限执行操作 */
|
|
1395
|
+
PERMISSION_DENIED: 13001
|
|
1396
|
+
};
|
|
1397
|
+
var showError = (showError2) => showError2 !== false;
|
|
1398
|
+
function createRequest(config) {
|
|
972
1399
|
const instance = axios.create({
|
|
973
|
-
baseURL,
|
|
974
|
-
|
|
1400
|
+
baseURL: "/api",
|
|
1401
|
+
// 默认基础URL
|
|
1402
|
+
timeout: 6e4,
|
|
1403
|
+
// 请求超时时间设为60秒
|
|
1404
|
+
...config
|
|
1405
|
+
// 合并传入的配置项
|
|
975
1406
|
});
|
|
976
1407
|
instance.interceptors.request.use(
|
|
977
|
-
function(
|
|
978
|
-
|
|
979
|
-
return config;
|
|
1408
|
+
function(config2) {
|
|
1409
|
+
return config2;
|
|
980
1410
|
},
|
|
981
1411
|
function(error) {
|
|
982
1412
|
return Promise.reject(error);
|
|
@@ -985,31 +1415,29 @@ function createRequest(baseURL = "/api") {
|
|
|
985
1415
|
instance.interceptors.response.use(
|
|
986
1416
|
function(response) {
|
|
987
1417
|
if (isBlob(response.data)) return response;
|
|
988
|
-
if (response.data?.code !== OK) {
|
|
989
|
-
const isPermission = response.data?.code === PERMISSION_DENIED;
|
|
990
|
-
if (response.config?.showError
|
|
991
|
-
|
|
1418
|
+
if (response.data?.code !== BusinessCode.OK) {
|
|
1419
|
+
const isPermission = response.data?.code === BusinessCode.PERMISSION_DENIED;
|
|
1420
|
+
if (showError(response.config?.showError)) {
|
|
1421
|
+
cachedMessage({
|
|
992
1422
|
title: isPermission ? "" : void 0,
|
|
993
1423
|
content: response.data.message,
|
|
994
1424
|
duration: isPermission ? 0 : 3
|
|
995
1425
|
});
|
|
996
1426
|
}
|
|
997
|
-
return Promise.reject(response
|
|
1427
|
+
return Promise.reject(response);
|
|
998
1428
|
}
|
|
999
1429
|
return response;
|
|
1000
1430
|
},
|
|
1001
1431
|
function(err) {
|
|
1002
|
-
const showError = err?.config?.showError !== false;
|
|
1003
1432
|
if (!err.response) {
|
|
1004
|
-
if (showError)
|
|
1433
|
+
if (showError(err?.config?.showError)) cachedMessage({ content: "\u7F51\u7EDC\u5F02\u5E38\uFF0C\u8BF7\u68C0\u67E5\u7F51\u7EDC", type: "error" });
|
|
1005
1434
|
} else {
|
|
1006
1435
|
switch (err.response?.status) {
|
|
1007
|
-
case UNAUTHORIZED:
|
|
1008
|
-
if (showError)
|
|
1009
|
-
redirectUrl();
|
|
1436
|
+
case HttpStatus.UNAUTHORIZED:
|
|
1437
|
+
if (showError(err?.config?.showError)) cachedMessage({ content: err.response?.data.message, type: "error" });
|
|
1010
1438
|
break;
|
|
1011
1439
|
default:
|
|
1012
|
-
if (showError)
|
|
1440
|
+
if (showError(err?.config?.showError)) cachedMessage({ content: err.response?.data.message || "\u8BF7\u6C42\u9519\u8BEF\uFF01", type: "error" });
|
|
1013
1441
|
}
|
|
1014
1442
|
}
|
|
1015
1443
|
return Promise.reject(err);
|
|
@@ -1017,44 +1445,49 @@ function createRequest(baseURL = "/api") {
|
|
|
1017
1445
|
);
|
|
1018
1446
|
return {
|
|
1019
1447
|
/**
|
|
1020
|
-
*
|
|
1448
|
+
* 返回原始 axios 实例
|
|
1449
|
+
* 可以用于添加拦截器等
|
|
1450
|
+
*/
|
|
1451
|
+
instance,
|
|
1452
|
+
/**
|
|
1453
|
+
* 发送 GET 请求
|
|
1021
1454
|
* @param url - 请求地址
|
|
1022
1455
|
* @param params - 查询参数
|
|
1023
|
-
* @param options -
|
|
1024
|
-
* @returns 响应数据
|
|
1456
|
+
* @param options - 额外的请求配置
|
|
1457
|
+
* @returns Promise<any> 响应数据
|
|
1025
1458
|
*/
|
|
1026
1459
|
get: async (url, params, options) => {
|
|
1027
1460
|
const res = await instance({ method: "get", url, params, ...options });
|
|
1028
1461
|
return res.data;
|
|
1029
1462
|
},
|
|
1030
1463
|
/**
|
|
1031
|
-
* POST
|
|
1464
|
+
* 发送 POST 请求
|
|
1032
1465
|
* @param url - 请求地址
|
|
1033
|
-
* @param data -
|
|
1034
|
-
* @param options -
|
|
1035
|
-
* @returns 响应数据
|
|
1466
|
+
* @param data - 请求体数据
|
|
1467
|
+
* @param options - 额外的请求配置
|
|
1468
|
+
* @returns Promise<any> 响应数据
|
|
1036
1469
|
*/
|
|
1037
1470
|
post: async (url, data, options) => {
|
|
1038
1471
|
const res = await instance({ method: "post", url, data, ...options });
|
|
1039
1472
|
return res.data;
|
|
1040
1473
|
},
|
|
1041
1474
|
/**
|
|
1042
|
-
* PUT
|
|
1475
|
+
* 发送 PUT 请求
|
|
1043
1476
|
* @param url - 请求地址
|
|
1044
|
-
* @param data -
|
|
1045
|
-
* @param options -
|
|
1046
|
-
* @returns 响应数据
|
|
1477
|
+
* @param data - 请求体数据
|
|
1478
|
+
* @param options - 额外的请求配置
|
|
1479
|
+
* @returns Promise<any> 响应数据
|
|
1047
1480
|
*/
|
|
1048
1481
|
put: async (url, data, options) => {
|
|
1049
1482
|
const res = await instance({ method: "put", url, data, ...options });
|
|
1050
1483
|
return res.data;
|
|
1051
1484
|
},
|
|
1052
1485
|
/**
|
|
1053
|
-
* DELETE
|
|
1486
|
+
* 发送 DELETE 请求
|
|
1054
1487
|
* @param url - 请求地址
|
|
1055
|
-
* @param data -
|
|
1056
|
-
* @param options -
|
|
1057
|
-
* @returns 响应数据
|
|
1488
|
+
* @param data - 请求体数据
|
|
1489
|
+
* @param options - 额外的请求配置
|
|
1490
|
+
* @returns Promise<any> 响应数据
|
|
1058
1491
|
*/
|
|
1059
1492
|
delete: async (url, data, options) => {
|
|
1060
1493
|
const res = await instance({ method: "delete", url, data, ...options });
|
|
@@ -1063,8 +1496,66 @@ function createRequest(baseURL = "/api") {
|
|
|
1063
1496
|
};
|
|
1064
1497
|
}
|
|
1065
1498
|
|
|
1499
|
+
// src/utils/storage.ts
|
|
1500
|
+
function getDeviceId(DEVICEID_KEY) {
|
|
1501
|
+
let deviceId = localStorage.getItem(DEVICEID_KEY);
|
|
1502
|
+
if (deviceId) {
|
|
1503
|
+
return deviceId;
|
|
1504
|
+
}
|
|
1505
|
+
deviceId = genNonDuplicateID();
|
|
1506
|
+
localStorage.setItem(DEVICEID_KEY, deviceId);
|
|
1507
|
+
return deviceId;
|
|
1508
|
+
}
|
|
1509
|
+
function createSecureManager({ key, storage = localStorage, aesKey }) {
|
|
1510
|
+
const set = (data) => {
|
|
1511
|
+
if (isNullOrUnDef(data)) return;
|
|
1512
|
+
storage.setItem(key, aesKey ? aesEncrypt(data, aesKey) : isString(data) ? data : JSON.stringify(data));
|
|
1513
|
+
};
|
|
1514
|
+
const get = () => {
|
|
1515
|
+
const cipher = storage.getItem(key);
|
|
1516
|
+
if (!cipher) {
|
|
1517
|
+
return null;
|
|
1518
|
+
}
|
|
1519
|
+
if (aesKey) {
|
|
1520
|
+
return aesDecrypt(cipher, aesKey);
|
|
1521
|
+
}
|
|
1522
|
+
try {
|
|
1523
|
+
return JSON.parse(cipher);
|
|
1524
|
+
} catch (e) {
|
|
1525
|
+
console.log("Failed to parse stored data:", e);
|
|
1526
|
+
return cipher;
|
|
1527
|
+
}
|
|
1528
|
+
};
|
|
1529
|
+
const clear = () => storage.removeItem(key);
|
|
1530
|
+
return {
|
|
1531
|
+
set,
|
|
1532
|
+
get,
|
|
1533
|
+
clear
|
|
1534
|
+
};
|
|
1535
|
+
}
|
|
1536
|
+
function createTokenManager({ key, storage = localStorage }) {
|
|
1537
|
+
const tokenManager = createSecureManager({ key, storage });
|
|
1538
|
+
const getFromUrl = () => {
|
|
1539
|
+
const searchParams = new URLSearchParams(location.search);
|
|
1540
|
+
return searchParams.get(key);
|
|
1541
|
+
};
|
|
1542
|
+
const get = () => {
|
|
1543
|
+
const urlToken = getFromUrl();
|
|
1544
|
+
if (urlToken) {
|
|
1545
|
+
tokenManager.set(urlToken);
|
|
1546
|
+
return urlToken;
|
|
1547
|
+
}
|
|
1548
|
+
return tokenManager.get();
|
|
1549
|
+
};
|
|
1550
|
+
return {
|
|
1551
|
+
set: tokenManager.set,
|
|
1552
|
+
get,
|
|
1553
|
+
clear: tokenManager.clear
|
|
1554
|
+
};
|
|
1555
|
+
}
|
|
1556
|
+
|
|
1066
1557
|
// src/hooks/webSocket/useWebSocket.ts
|
|
1067
|
-
var
|
|
1558
|
+
var useWebSocket_default = ({
|
|
1068
1559
|
url,
|
|
1069
1560
|
onMessage,
|
|
1070
1561
|
onClose,
|
|
@@ -1072,11 +1563,8 @@ var useWebSocket = ({
|
|
|
1072
1563
|
heartbeatMessage = "ping",
|
|
1073
1564
|
clientHeartbeat = true,
|
|
1074
1565
|
reconnectInterval = 5e3,
|
|
1075
|
-
// 默认重连间隔为 5 秒
|
|
1076
1566
|
maxReconnectAttempts,
|
|
1077
|
-
// 不设置默认值为无限重连
|
|
1078
1567
|
isReconnect = true
|
|
1079
|
-
// 默认开启重连机制
|
|
1080
1568
|
}) => {
|
|
1081
1569
|
const socketRef = useRef(null);
|
|
1082
1570
|
const heartbeatIntervalRef = useRef(null);
|
|
@@ -1100,6 +1588,7 @@ var useWebSocket = ({
|
|
|
1100
1588
|
const stopHeartbeat = () => {
|
|
1101
1589
|
if (heartbeatIntervalRef.current) {
|
|
1102
1590
|
clearInterval(heartbeatIntervalRef.current);
|
|
1591
|
+
heartbeatIntervalRef.current = null;
|
|
1103
1592
|
}
|
|
1104
1593
|
};
|
|
1105
1594
|
const stopReconnectTimer = () => {
|
|
@@ -1192,14 +1681,17 @@ var useWebSocket = ({
|
|
|
1192
1681
|
socketRef.current.send(message3);
|
|
1193
1682
|
stopHeartbeat();
|
|
1194
1683
|
startHeartbeat(socketRef.current);
|
|
1684
|
+
} else {
|
|
1685
|
+
console.warn("WebSocket \u672A\u8FDE\u63A5\uFF0C\u65E0\u6CD5\u53D1\u9001\u6D88\u606F:", message3);
|
|
1195
1686
|
}
|
|
1196
1687
|
};
|
|
1197
1688
|
return {
|
|
1689
|
+
/** 发送消息方法 */
|
|
1198
1690
|
sendMessage,
|
|
1691
|
+
/** Socket 连接状态 */
|
|
1199
1692
|
socketReadyState
|
|
1200
1693
|
};
|
|
1201
1694
|
};
|
|
1202
|
-
var useWebSocket_default = useWebSocket;
|
|
1203
1695
|
var ProtectedView = ({
|
|
1204
1696
|
passwordStatus,
|
|
1205
1697
|
verifyPassword,
|
|
@@ -1225,8 +1717,8 @@ var ProtectedView = ({
|
|
|
1225
1717
|
var PdfPreview_default = ({ password, fileUrl, pageNo = 1, scale = 1, isHasThumbnails = true, onSetPassword, onSetPageNo }) => {
|
|
1226
1718
|
const embedRef = useRef(null);
|
|
1227
1719
|
const [sizes, setSizes] = useState([0]);
|
|
1228
|
-
const [, setDocLoaded, getDocLoaded] =
|
|
1229
|
-
const [currentPage, setCurrentPage, getCurrentPage] =
|
|
1720
|
+
const [, setDocLoaded, getDocLoaded] = useRefState_default(false);
|
|
1721
|
+
const [currentPage, setCurrentPage, getCurrentPage] = useRefState_default(void 0);
|
|
1230
1722
|
const [temporaryPassword, setTemporaryPassword] = useState("");
|
|
1231
1723
|
const jumpToPageNo = useRef();
|
|
1232
1724
|
const onVerifyPasswordEnd = (password2) => {
|
|
@@ -1433,10 +1925,10 @@ var FilePreviewDrawer_default = ({
|
|
|
1433
1925
|
var styles_module_default2 = {
|
|
1434
1926
|
iframe: "styles_module_iframe"
|
|
1435
1927
|
};
|
|
1436
|
-
var Iframe_default = forwardRef(({ id, src, className, onLoad }, ref) => {
|
|
1928
|
+
var Iframe_default = forwardRef(({ defaultMainSource, id, src, className, onLoad }, ref) => {
|
|
1437
1929
|
const [loading, setLoading] = useState(false);
|
|
1438
1930
|
const finalSrc = useMemo(() => {
|
|
1439
|
-
return buildUrlParams({ v: Date.now() }, addUrlLastSlash(
|
|
1931
|
+
return buildUrlParams({ v: Date.now() }, addUrlLastSlash(setUrlMainSource(src, location.href, defaultMainSource)));
|
|
1440
1932
|
}, [src]);
|
|
1441
1933
|
const onHandleLoad = () => {
|
|
1442
1934
|
setLoading(false);
|
|
@@ -1445,7 +1937,17 @@ var Iframe_default = forwardRef(({ id, src, className, onLoad }, ref) => {
|
|
|
1445
1937
|
useEffect(() => {
|
|
1446
1938
|
setLoading(true);
|
|
1447
1939
|
}, [src]);
|
|
1448
|
-
return /* @__PURE__ */ jsx(Fragment, { children: /* @__PURE__ */ jsx(Spin, { spinning: loading, wrapperClassName: "full-spin", tip: "\u52A0\u8F7D\u4E2D...", children: /* @__PURE__ */ jsx(
|
|
1940
|
+
return /* @__PURE__ */ jsx(Fragment, { children: /* @__PURE__ */ jsx(Spin, { spinning: loading, wrapperClassName: "full-spin", tip: "\u52A0\u8F7D\u4E2D...", children: /* @__PURE__ */ jsx(
|
|
1941
|
+
"iframe",
|
|
1942
|
+
{
|
|
1943
|
+
id,
|
|
1944
|
+
ref,
|
|
1945
|
+
src: finalSrc,
|
|
1946
|
+
className: classNames2(styles_module_default2.iframe, className),
|
|
1947
|
+
onLoad: onHandleLoad,
|
|
1948
|
+
allow: "clipboard-write"
|
|
1949
|
+
}
|
|
1950
|
+
) }) });
|
|
1449
1951
|
});
|
|
1450
1952
|
var Link = TiptapLink.extend({
|
|
1451
1953
|
inclusive: false,
|
|
@@ -5098,7 +5600,7 @@ var MarkdownEditor_default = ({
|
|
|
5098
5600
|
editor?.commands.setContent(value);
|
|
5099
5601
|
lastContentRef.current = value;
|
|
5100
5602
|
}, [value, editor]);
|
|
5101
|
-
const onPageChange =
|
|
5603
|
+
const onPageChange = useDebounce_default((pageIndex) => {
|
|
5102
5604
|
onScrollPage?.(parseInt(pageIndex ?? "0"));
|
|
5103
5605
|
}, 300);
|
|
5104
5606
|
useEffect(() => {
|
|
@@ -5221,7 +5723,7 @@ function renderDefault(DefaultComponent, ref, props) {
|
|
|
5221
5723
|
if (!DefaultComponent) return null;
|
|
5222
5724
|
return isRenderFn(DefaultComponent) ? /* @__PURE__ */ jsx(DefaultComponent, { ref, ...props }) : DefaultComponent;
|
|
5223
5725
|
}
|
|
5224
|
-
var
|
|
5726
|
+
var RenderWrapper_default = forwardRef(function RenderWrapper({ control = true, ctx, DefaultComponent }, ref) {
|
|
5225
5727
|
if (control === false || isNull(control)) return null;
|
|
5226
5728
|
if (control === true || control === void 0) {
|
|
5227
5729
|
return renderDefault(DefaultComponent, ref);
|
|
@@ -5254,6 +5756,6 @@ var UserAvatar_default = ({ size, avatarSrc, userName }) => {
|
|
|
5254
5756
|
return avatarSrc ? /* @__PURE__ */ jsx(Avatar, { size, src: avatarSrc }) : /* @__PURE__ */ jsx(Avatar, { size, className: "cursor-pointer", style: { backgroundColor: "var(--ant-color-primary)" }, children: userName?.slice(0, 1)?.toLocaleUpperCase() });
|
|
5255
5757
|
};
|
|
5256
5758
|
|
|
5257
|
-
export { AudioPlayer_default as AudioPlayer,
|
|
5759
|
+
export { AudioPlayer_default as AudioPlayer, BusinessCode, DEFAULT_DATE_FORMAT, DEFAULT_DATE_TIME_FORMAT, DEFAULT_YEAR_MONTH_DAY_FORMAT, DEFAULT_YEAR_MONTH_FORMAT, FileIcon_default as FileIcon, FilePreview_default as FilePreview, FilePreviewDrawer_default as FilePreviewDrawer, HttpStatus, Iframe_default as Iframe, LazyComponent_default as LazyComponent, MarkdownEditor_default as MarkdownEditor, MarkdownPreview_default as MarkdownPreview, MultiEmailValidator, PdfPreview_default as PdfPreview, PhoneOrMobileValidator, RegBankCardNo, RegDetailAddress, RegEmail, RegFixedTelePhone, RegIdentityCardNo, RegMobile, RegNumNo, RegSmsCode, RegTaxNo, RegTelePhone, RenderMarkdown_default as RenderMarkdown, RenderWrapper_default as RenderWrapper, ThanNumLengthValidator, ThanNumValidator, UserAvatar_default as UserAvatar, VideoPlayer_default as VideoPlayer, absVal, addUrlLastSlash, aesDecrypt, aesEncrypt, arrToObj, buildUrlParams, cachedMessage, calculate, compareNum, convertCurrency, convertNewlineToBr, copyText, createRequest, createSecureManager, createTokenManager, decimalPlaces, deepCopy, deepEqual, deepMerge, dividedBy, downloadFile, emit, emitToChild, executeScript, formatDate, formatNumberWithCommas, genNonDuplicateID, generateRandomNumbers, getAllUrlParams, getDeviceId, getEndOfTimestamp, getFileName, getFileSuffixName, getRowSpanCount, getStartOfTimestamp, getTimestamp, getWebSocketUrl, importThirdPartyFile, is, isArray, isBlob, isBoolean, isDate, isDef, isElement, isEmpty, isEmptyObj, isExpire, isExternal, isFunction, isInteger, isJson, isLocalhost, isMap, isNegative, isNull, isNullOrUnDef, isNumber, isNumberNoNaN, isObject, isPromise, isReferenceType, isRegExp, isScriptSafe, isSet, isString, isUnDef, isWindow, minus, objToOptions, plus, precision, processItemList, propsMerge, setInterval2 as setInterval, setUrlMainSource, shouldRender, times, toFixed, transform, transforms, useAutoRefresh_default as useAutoRefresh, useCountDown_default as useCountDown, useCreateValtioContext_default as useCreateValtioContext, useDebounce_default as useDebounce, useDeepEffect_default as useDeepEffect, useIframeRelayBridge_default as useIframeRelayBridge, useRefState_default as useRefState, useSyncInput_default as useSyncInput, useThrottle_default as useThrottle, useWebSocket_default as useWebSocket };
|
|
5258
5760
|
//# sourceMappingURL=index.esm.js.map
|
|
5259
5761
|
//# sourceMappingURL=index.esm.js.map
|