@qy_better_lib/core 0.0.2 → 0.0.4
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/@qy_better_lib/core.min.js +1 -1
- package/lib/index.js +34 -27
- package/lib/utils/file.d.ts +17 -0
- package/lib/utils/is.d.ts +10 -0
- package/lib/utils/is.js +23 -9
- package/lib/utils/number.d.ts +12 -0
- package/lib/utils/number.js +11 -2
- package/package.json +50 -54
- package/src/directives/click-outside.ts +0 -115
- package/src/directives/index.ts +0 -3
- package/src/index.ts +0 -2
- package/src/utils/dom.ts +0 -15
- package/src/utils/index.ts +0 -7
- package/src/utils/is.ts +0 -67
- package/src/utils/number.ts +0 -14
- package/src/utils/object.ts +0 -76
- package/src/utils/random.ts +0 -40
- package/src/utils/storage.ts +0 -86
- package/src/utils/tree.ts +0 -30
- package/tsconfig.json +0 -5
|
@@ -1 +1 @@
|
|
|
1
|
-
(function(r,f){typeof exports=="object"&&typeof module<"u"?f(exports):typeof define=="function"&&define.amd?define(["exports"],f):(r=typeof globalThis<"u"?globalThis:r||self,f(r["@qy_better_lib/core"]={}))})(this,function(r){"use strict";function f(){return Math.floor(Math.random()*1e4)}function
|
|
1
|
+
(function(r,f){typeof exports=="object"&&typeof module<"u"?f(exports):typeof define=="function"&&define.amd?define(["exports"],f):(r=typeof globalThis<"u"?globalThis:r||self,f(r["@qy_better_lib/core"]={}))})(this,function(r){"use strict";function f(){return Math.floor(Math.random()*1e4)}function C(e){return Math.floor(Math.random()*Math.floor(e))}function E(){const e=p;return`${e()}${e()}-${e()}-${e()}-${e()}-${e()}${e()}${e()}`}function p(){return Math.floor((1+Math.random())*65536).toString(16).substring(1)}function M(e){return e===void 0}function N(e){return Object.prototype.toString.call(e)==="[object Array]"}function g(e){return typeof e=="object"&&Object.prototype.toString.call(e)==="[object Object]"}function v(e){return Object.prototype.toString.call(e)==="[object Date]"}function F(e){return!e&&e!==0||N(e)&&e.length===0||g(e)&&!Object.keys(e).length}function h(e){return typeof Element>"u"?!1:e instanceof Element}const b=typeof window<"u",S=e=>typeof e=="number",I=e=>typeof e=="string",A=e=>I(e)?!Number.isNaN(Number(e)):!1;function w(e){return/^1[3-9]\d{9}$/.test(e)}function _(e){return/^(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\.(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\.(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\.(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)$/.test(e)}function B(e){return/^(6553[0-5]|655[0-2]\d|65[0-4]\d{2}|6[0-4]\d{3}|[1-5]\d{4}|[1-9]\d{0,3}|0)$/.test(e)}function H(e,t="key",n="children"){const o={},i=(c,s)=>{for(let u=0;u<c.length;u++){const l=c[u],d=l[t];if(!o[d]){o[d]=l,s&&(o[d].parent=o[s]);const m=l[n];m&&m.length>0&&i(m,l[t])}}};return i(e),o}function P(e){return e?Object.prototype.toString.call(1)!=="[object Number]"?`${e}`:`${e}`.replace(/(\d{1,3})(?=(\d{3})+(?:$|\.))/g,"$1,"):"0"}function R(e,t){return S(e)?Number(t?Number(e).toFixed(t):e):Number.NaN}function J(e,t){return S(e)?Number(e.toFixed(t)):Number.NaN}function L(){const e=localStorage.getItem("token");if(!e)return;const t=JSON.parse(e);if(t!==null)if(t.expirse!=null&&t.expirse<new Date().getTime())localStorage.removeItem("token");else return t.value;return null}function U(e,t){!t&&(t=7*24*60*60*1e3)||(t=t*1e3);const n={value:e,expirse:new Date().getTime()+t};localStorage.setItem("token",JSON.stringify(n))}function j(){localStorage.removeItem("token")}function q(e,t,n="local"){const o=n=="local"?localStorage:sessionStorage;t!=null&&o.setItem(e,JSON.stringify(t))}function V(e,t="local"){let o=(t=="local"?localStorage:sessionStorage).getItem(e);return o&&JSON.parse(o||"")}function Y(e,t="local"){(t=="local"?localStorage:sessionStorage).removeItem(e)}function z(e="local"){(e=="local"?localStorage:sessionStorage).clear()}function O(e){const t=Object.prototype.toString;if(!e||typeof e!="object")return e;if(e.nodeType&&"cloneNode"in e)return e.cloneNode(!0);if(t.call(e)==="[object Date]")return new Date(e.getTime());if(t.call(e)==="[object RegExp]"){const o=[];return e.global&&o.push("g"),e.multiline&&o.push("m"),e.ignoreCase&&o.push("i"),new RegExp(e.source,o.join(""))}if(t.call(e)==="[object FormData]"){const o=new FormData;for(const[i,c]of e.entries())o.append(i,c);return o}const n=Array.isArray(e)?[]:e.constructor?new e.constructor:{};for(const o in e)n[o]=O(e[o]);return n}function T(...e){let t=e.length,n=e[0];g(n)||(n={});for(let o=1;o<t;o++){let i=e[o];if(g(i))for(let c in i)c==="__proto__"||n===i[c]||(g(i[c])?n[c]=T(n[c],i[c]):n[c]=i[c])}return n}function k(e,t){return!e||e.tagName==="BODY"?null:e.classList.contains(t)?e:k(e.parentNode,t)}const a=new Map;let D;b&&(document.addEventListener("mousedown",e=>D=e),document.addEventListener("mouseup",e=>{for(const t of a.values())for(const{documentHandler:n}of t)n(e,D)}));function $(e,t){let n=[];return Array.isArray(t.arg)?n=t.arg:h(t.arg)&&n.push(t.arg),function(o,i){const c=t.instance.popperRef,s=o.target,u=i==null?void 0:i.target,l=!t||!t.instance,d=!s||!u,m=e.contains(s)||e.contains(u),K=e===s,Q=n.length&&n.some(y=>y==null?void 0:y.contains(s))||n.length&&n.includes(u),W=c&&(c.contains(s)||c.contains(u));l||d||m||K||Q||W||t.value(o,i)}}const G={beforeMount(e,t){var n;a.has(e)||a.set(e,[]),(n=a.get(e))==null||n.push({documentHandler:$(e,t),bindingFn:t.value})},updated(e,t){a.has(e)||a.set(e,[]);const n=a.get(e),o=n==null?void 0:n.findIndex(c=>c.bindingFn===t.oldValue),i={documentHandler:$(e,t),bindingFn:t.value};o&&o>=0?n==null||n.splice(o,1,i):n==null||n.push(i)},unmounted(e){a.delete(e)}};r.ClickOutside=G,r.clearStorage=z,r.deepAssign=T,r.deepClone=O,r.generateId=f,r.generateString=p,r.getParentByClass=k,r.getRandomInt=C,r.getStorage=V,r.getToken=L,r.guiID=E,r.isArray=N,r.isClient=b,r.isDate=v,r.isElement=h,r.isEmpty=F,r.isIp=_,r.isMobile=w,r.isNumber=S,r.isObject=g,r.isPort=B,r.isString=I,r.isStringNumber=A,r.isUndefined=M,r.removeStorage=Y,r.removeToken=j,r.setStorage=q,r.setToken=U,r.thousandSeparator=P,r.toFixed=J,r.toNumber=R,r.treeFlat=H,Object.defineProperty(r,Symbol.toStringTag,{value:"Module"})});
|
package/lib/index.js
CHANGED
|
@@ -1,35 +1,42 @@
|
|
|
1
|
-
import { generateId as r, generateString as o, getRandomInt as
|
|
2
|
-
import { isArray as
|
|
3
|
-
import { treeFlat as
|
|
4
|
-
import { thousandSeparator as
|
|
5
|
-
import { clearStorage as
|
|
6
|
-
import { deepAssign as
|
|
7
|
-
import { getParentByClass as
|
|
8
|
-
import { default as
|
|
1
|
+
import { generateId as r, generateString as o, getRandomInt as i, guiID as s } from "./utils/random.js";
|
|
2
|
+
import { isArray as n, isClient as m, isDate as g, isElement as p, isEmpty as d, isIp as f, isMobile as l, isNumber as x, isObject as S, isPort as u, isString as b, isStringNumber as k, isUndefined as C } from "./utils/is.js";
|
|
3
|
+
import { treeFlat as c } from "./utils/tree.js";
|
|
4
|
+
import { thousandSeparator as N, toFixed as T, toNumber as v } from "./utils/number.js";
|
|
5
|
+
import { clearStorage as D, getStorage as E, getToken as F, removeStorage as O, removeToken as P, setStorage as h, setToken as j } from "./utils/storage.js";
|
|
6
|
+
import { deepAssign as M, deepClone as R } from "./utils/object.js";
|
|
7
|
+
import { getParentByClass as q } from "./utils/dom.js";
|
|
8
|
+
import { default as z } from "./directives/click-outside.js";
|
|
9
9
|
export {
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
10
|
+
z as ClickOutside,
|
|
11
|
+
D as clearStorage,
|
|
12
|
+
M as deepAssign,
|
|
13
|
+
R as deepClone,
|
|
14
14
|
r as generateId,
|
|
15
15
|
o as generateString,
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
16
|
+
q as getParentByClass,
|
|
17
|
+
i as getRandomInt,
|
|
18
|
+
E as getStorage,
|
|
19
|
+
F as getToken,
|
|
20
20
|
s as guiID,
|
|
21
|
-
|
|
21
|
+
n as isArray,
|
|
22
22
|
m as isClient,
|
|
23
23
|
g as isDate,
|
|
24
24
|
p as isElement,
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
l as
|
|
28
|
-
x as
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
C as
|
|
34
|
-
|
|
25
|
+
d as isEmpty,
|
|
26
|
+
f as isIp,
|
|
27
|
+
l as isMobile,
|
|
28
|
+
x as isNumber,
|
|
29
|
+
S as isObject,
|
|
30
|
+
u as isPort,
|
|
31
|
+
b as isString,
|
|
32
|
+
k as isStringNumber,
|
|
33
|
+
C as isUndefined,
|
|
34
|
+
O as removeStorage,
|
|
35
|
+
P as removeToken,
|
|
36
|
+
h as setStorage,
|
|
37
|
+
j as setToken,
|
|
38
|
+
N as thousandSeparator,
|
|
39
|
+
T as toFixed,
|
|
40
|
+
v as toNumber,
|
|
41
|
+
c as treeFlat
|
|
35
42
|
};
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* 下载文件
|
|
3
|
+
* @param filePath 文件路径
|
|
4
|
+
*/
|
|
5
|
+
export declare function downLoadFile({ path, name }: {
|
|
6
|
+
path: string;
|
|
7
|
+
name?: string;
|
|
8
|
+
}): void;
|
|
9
|
+
/**批量下载文件 */
|
|
10
|
+
export declare function downLoadFiles(fileList: any[]): void;
|
|
11
|
+
/**
|
|
12
|
+
* 将file转换成base64
|
|
13
|
+
* @param file
|
|
14
|
+
* @param callback
|
|
15
|
+
* @returns
|
|
16
|
+
*/
|
|
17
|
+
export declare function toBase64(file: Blob): Promise<string | undefined>;
|
package/lib/utils/is.d.ts
CHANGED
|
@@ -40,3 +40,13 @@ export declare function isElement(e: unknown): e is Element;
|
|
|
40
40
|
export declare const isClient: boolean;
|
|
41
41
|
/**是否未数值 */
|
|
42
42
|
export declare const isNumber: (val: any) => boolean;
|
|
43
|
+
/**是否为字符串 */
|
|
44
|
+
export declare const isString: (val: any) => boolean;
|
|
45
|
+
/**是否为字符串数值 */
|
|
46
|
+
export declare const isStringNumber: (val: string) => boolean;
|
|
47
|
+
/**是否为手机号(国内手机号) */
|
|
48
|
+
export declare function isMobile(str: string): boolean;
|
|
49
|
+
/**是否为有效IP地址 */
|
|
50
|
+
export declare function isIp(val: string): boolean;
|
|
51
|
+
/**是否为有效端口 */
|
|
52
|
+
export declare function isPort(val: string): boolean;
|
package/lib/utils/is.js
CHANGED
|
@@ -7,23 +7,37 @@ function e(t) {
|
|
|
7
7
|
function n(t) {
|
|
8
8
|
return typeof t == "object" && Object.prototype.toString.call(t) === "[object Object]";
|
|
9
9
|
}
|
|
10
|
-
function
|
|
10
|
+
function c(t) {
|
|
11
11
|
return Object.prototype.toString.call(t) === "[object Date]";
|
|
12
12
|
}
|
|
13
|
-
function
|
|
13
|
+
function u(t) {
|
|
14
14
|
return !t && t !== 0 || e(t) && t.length === 0 || n(t) && !Object.keys(t).length;
|
|
15
15
|
}
|
|
16
|
-
function
|
|
16
|
+
function s(t) {
|
|
17
17
|
return typeof Element > "u" ? !1 : t instanceof Element;
|
|
18
18
|
}
|
|
19
|
-
const
|
|
19
|
+
const f = typeof window < "u", b = (t) => typeof t == "number", r = (t) => typeof t == "string", d = (t) => r(t) ? !Number.isNaN(Number(t)) : !1;
|
|
20
|
+
function p(t) {
|
|
21
|
+
return /^1[3-9]\d{9}$/.test(t);
|
|
22
|
+
}
|
|
23
|
+
function y(t) {
|
|
24
|
+
return /^(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\.(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\.(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\.(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)$/.test(t);
|
|
25
|
+
}
|
|
26
|
+
function g(t) {
|
|
27
|
+
return /^(6553[0-5]|655[0-2]\d|65[0-4]\d{2}|6[0-4]\d{3}|[1-5]\d{4}|[1-9]\d{0,3}|0)$/.test(t);
|
|
28
|
+
}
|
|
20
29
|
export {
|
|
21
30
|
e as isArray,
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
31
|
+
f as isClient,
|
|
32
|
+
c as isDate,
|
|
33
|
+
s as isElement,
|
|
34
|
+
u as isEmpty,
|
|
35
|
+
y as isIp,
|
|
36
|
+
p as isMobile,
|
|
37
|
+
b as isNumber,
|
|
27
38
|
n as isObject,
|
|
39
|
+
g as isPort,
|
|
40
|
+
r as isString,
|
|
41
|
+
d as isStringNumber,
|
|
28
42
|
o as isUndefined
|
|
29
43
|
};
|
package/lib/utils/number.d.ts
CHANGED
|
@@ -4,3 +4,15 @@
|
|
|
4
4
|
* @returns
|
|
5
5
|
*/
|
|
6
6
|
export declare function thousandSeparator(num: number | any): string;
|
|
7
|
+
/**
|
|
8
|
+
* 转换成数值
|
|
9
|
+
* @param num 源
|
|
10
|
+
* @param fixed 保留小数点,默认不设置
|
|
11
|
+
*/
|
|
12
|
+
export declare function toNumber(num: string | undefined, fixed?: number): number | undefined;
|
|
13
|
+
/**
|
|
14
|
+
* 保留小数点
|
|
15
|
+
* @param num 数字
|
|
16
|
+
* @param fixed 小数点
|
|
17
|
+
*/
|
|
18
|
+
export declare function toFixed(num: number, fixed: number): number;
|
package/lib/utils/number.js
CHANGED
|
@@ -1,6 +1,15 @@
|
|
|
1
|
-
|
|
1
|
+
import { isNumber as t } from "./is.js";
|
|
2
|
+
function u(r) {
|
|
2
3
|
return r ? Object.prototype.toString.call(1) !== "[object Number]" ? `${r}` : `${r}`.replace(/(\d{1,3})(?=(\d{3})+(?:$|\.))/g, "$1,") : "0";
|
|
3
4
|
}
|
|
5
|
+
function i(r, e) {
|
|
6
|
+
return t(r) ? Number(e ? Number(r).toFixed(e) : r) : Number.NaN;
|
|
7
|
+
}
|
|
8
|
+
function N(r, e) {
|
|
9
|
+
return t(r) ? Number(r.toFixed(e)) : Number.NaN;
|
|
10
|
+
}
|
|
4
11
|
export {
|
|
5
|
-
|
|
12
|
+
u as thousandSeparator,
|
|
13
|
+
N as toFixed,
|
|
14
|
+
i as toNumber
|
|
6
15
|
};
|
package/package.json
CHANGED
|
@@ -1,54 +1,50 @@
|
|
|
1
|
-
{
|
|
2
|
-
"name": "@qy_better_lib/core",
|
|
3
|
-
"private": false,
|
|
4
|
-
"version": "0.0.
|
|
5
|
-
"description": "qy better lib core",
|
|
6
|
-
"author": "luhuiming",
|
|
7
|
-
"license": "ISC",
|
|
8
|
-
"scripts": {
|
|
9
|
-
"build:lib": "vite build --config vite.lib.config.ts",
|
|
10
|
-
"build:dist-min": "vite build --config vite.dist.min.config.ts",
|
|
11
|
-
"build": "yarn build:lib && yarn build:dist-min"
|
|
12
|
-
},
|
|
13
|
-
"main": "lib/index.js",
|
|
14
|
-
"module": "lib/index.js",
|
|
15
|
-
"types": "lib/index.d.ts",
|
|
16
|
-
"typesVersions": {
|
|
17
|
-
"*": {
|
|
18
|
-
"lib/index.js": [
|
|
19
|
-
"lib/index.d.ts"
|
|
20
|
-
],
|
|
21
|
-
"@qy-better-lib/core": [
|
|
22
|
-
"lib/index.d.ts"
|
|
23
|
-
],
|
|
24
|
-
"*": [
|
|
25
|
-
"*",
|
|
26
|
-
"dist/*",
|
|
27
|
-
"lib/*",
|
|
28
|
-
"lib/*.d.ts",
|
|
29
|
-
"lib/*/index.d.ts"
|
|
30
|
-
]
|
|
31
|
-
}
|
|
32
|
-
},
|
|
33
|
-
"exports": {
|
|
34
|
-
".": {
|
|
35
|
-
"import": "./lib/index.js"
|
|
36
|
-
},
|
|
37
|
-
"./directives": "./lib/directives/index.js",
|
|
38
|
-
"./directives/*": "./lib/directives/*/*.js",
|
|
39
|
-
"./utils": "./lib/utils/index.js",
|
|
40
|
-
"./utils/*": "./lib/utils/*.js"
|
|
41
|
-
},
|
|
42
|
-
"
|
|
43
|
-
"
|
|
44
|
-
"
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
"
|
|
48
|
-
"
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
"vite-plugin-dts": "^3.9.1",
|
|
52
|
-
"vue": "^3.4.31"
|
|
53
|
-
}
|
|
54
|
-
}
|
|
1
|
+
{
|
|
2
|
+
"name": "@qy_better_lib/core",
|
|
3
|
+
"private": false,
|
|
4
|
+
"version": "0.0.4",
|
|
5
|
+
"description": "qy better lib core",
|
|
6
|
+
"author": "luhuiming",
|
|
7
|
+
"license": "ISC",
|
|
8
|
+
"scripts": {
|
|
9
|
+
"build:lib": "vite build --config vite.lib.config.ts",
|
|
10
|
+
"build:dist-min": "vite build --config vite.dist.min.config.ts",
|
|
11
|
+
"build": "yarn build:lib && yarn build:dist-min"
|
|
12
|
+
},
|
|
13
|
+
"main": "lib/index.js",
|
|
14
|
+
"module": "lib/index.js",
|
|
15
|
+
"types": "lib/index.d.ts",
|
|
16
|
+
"typesVersions": {
|
|
17
|
+
"*": {
|
|
18
|
+
"lib/index.js": [
|
|
19
|
+
"lib/index.d.ts"
|
|
20
|
+
],
|
|
21
|
+
"@qy-better-lib/core": [
|
|
22
|
+
"lib/index.d.ts"
|
|
23
|
+
],
|
|
24
|
+
"*": [
|
|
25
|
+
"*",
|
|
26
|
+
"dist/*",
|
|
27
|
+
"lib/*",
|
|
28
|
+
"lib/*.d.ts",
|
|
29
|
+
"lib/*/index.d.ts"
|
|
30
|
+
]
|
|
31
|
+
}
|
|
32
|
+
},
|
|
33
|
+
"exports": {
|
|
34
|
+
".": {
|
|
35
|
+
"import": "./lib/index.js"
|
|
36
|
+
},
|
|
37
|
+
"./directives": "./lib/directives/index.js",
|
|
38
|
+
"./directives/*": "./lib/directives/*/*.js",
|
|
39
|
+
"./utils": "./lib/utils/index.js",
|
|
40
|
+
"./utils/*": "./lib/utils/*.js"
|
|
41
|
+
},
|
|
42
|
+
"devDependencies": {
|
|
43
|
+
"@types/node": "^20.14.9",
|
|
44
|
+
"@vitejs/plugin-vue": "^5.0.5",
|
|
45
|
+
"element-plus": "^2.7.6",
|
|
46
|
+
"vite": "^5.3.2",
|
|
47
|
+
"vite-plugin-dts": "^3.9.1",
|
|
48
|
+
"vue": "^3.4.31"
|
|
49
|
+
}
|
|
50
|
+
}
|
|
@@ -1,115 +0,0 @@
|
|
|
1
|
-
import { isElement, isClient } from "./../utils";
|
|
2
|
-
import type {
|
|
3
|
-
ComponentPublicInstance,
|
|
4
|
-
DirectiveBinding,
|
|
5
|
-
ObjectDirective,
|
|
6
|
-
} from "vue";
|
|
7
|
-
|
|
8
|
-
type DocumentHandler = <T extends MouseEvent>(mouseup: T, mousedown: T) => void;
|
|
9
|
-
|
|
10
|
-
type FlushList = Map<
|
|
11
|
-
HTMLElement,
|
|
12
|
-
{
|
|
13
|
-
documentHandler: DocumentHandler;
|
|
14
|
-
bindingFn: (...args: unknown[]) => unknown;
|
|
15
|
-
}[]
|
|
16
|
-
>;
|
|
17
|
-
|
|
18
|
-
const nodeList: FlushList = new Map();
|
|
19
|
-
|
|
20
|
-
let startClick: MouseEvent;
|
|
21
|
-
|
|
22
|
-
if (isClient) {
|
|
23
|
-
document.addEventListener("mousedown", (e: MouseEvent) => (startClick = e));
|
|
24
|
-
document.addEventListener("mouseup", (e: MouseEvent) => {
|
|
25
|
-
for (const handlers of nodeList.values()) {
|
|
26
|
-
for (const { documentHandler } of handlers) {
|
|
27
|
-
documentHandler(e as MouseEvent, startClick);
|
|
28
|
-
}
|
|
29
|
-
}
|
|
30
|
-
});
|
|
31
|
-
}
|
|
32
|
-
|
|
33
|
-
function createDocumentHandler(
|
|
34
|
-
el: HTMLElement,
|
|
35
|
-
binding: DirectiveBinding
|
|
36
|
-
): DocumentHandler {
|
|
37
|
-
let excludes: HTMLElement[] = [];
|
|
38
|
-
if (Array.isArray(binding.arg)) {
|
|
39
|
-
excludes = binding.arg;
|
|
40
|
-
} else if (isElement(binding.arg)) {
|
|
41
|
-
excludes.push(binding.arg as unknown as HTMLElement);
|
|
42
|
-
}
|
|
43
|
-
return function (mouseup, mousedown) {
|
|
44
|
-
const popperRef = (
|
|
45
|
-
binding.instance as ComponentPublicInstance<{
|
|
46
|
-
popperRef: HTMLElement | null;
|
|
47
|
-
}>
|
|
48
|
-
).popperRef;
|
|
49
|
-
const mouseUpTarget = mouseup.target as Node;
|
|
50
|
-
const mouseDownTarget = mousedown?.target as Node;
|
|
51
|
-
const isBound = !binding || !binding.instance;
|
|
52
|
-
const isTargetExists = !mouseUpTarget || !mouseDownTarget;
|
|
53
|
-
const isContainedByEl =
|
|
54
|
-
el.contains(mouseUpTarget) || el.contains(mouseDownTarget);
|
|
55
|
-
const isSelf = el === mouseUpTarget;
|
|
56
|
-
|
|
57
|
-
const isTargetExcluded =
|
|
58
|
-
(excludes.length &&
|
|
59
|
-
excludes.some((item) => item?.contains(mouseUpTarget))) ||
|
|
60
|
-
(excludes.length && excludes.includes(mouseDownTarget as HTMLElement));
|
|
61
|
-
const isContainedByPopper =
|
|
62
|
-
popperRef &&
|
|
63
|
-
(popperRef.contains(mouseUpTarget) ||
|
|
64
|
-
popperRef.contains(mouseDownTarget));
|
|
65
|
-
if (
|
|
66
|
-
isBound ||
|
|
67
|
-
isTargetExists ||
|
|
68
|
-
isContainedByEl ||
|
|
69
|
-
isSelf ||
|
|
70
|
-
isTargetExcluded ||
|
|
71
|
-
isContainedByPopper
|
|
72
|
-
) {
|
|
73
|
-
return;
|
|
74
|
-
}
|
|
75
|
-
binding.value(mouseup, mousedown);
|
|
76
|
-
};
|
|
77
|
-
}
|
|
78
|
-
|
|
79
|
-
const ClickOutside: ObjectDirective = {
|
|
80
|
-
beforeMount(el: HTMLElement, binding: DirectiveBinding) {
|
|
81
|
-
if (!nodeList.has(el)) {
|
|
82
|
-
nodeList.set(el, []);
|
|
83
|
-
}
|
|
84
|
-
|
|
85
|
-
nodeList.get(el)?.push({
|
|
86
|
-
documentHandler: createDocumentHandler(el, binding),
|
|
87
|
-
bindingFn: binding.value,
|
|
88
|
-
});
|
|
89
|
-
},
|
|
90
|
-
updated(el: HTMLElement, binding: DirectiveBinding) {
|
|
91
|
-
if (!nodeList.has(el)) {
|
|
92
|
-
nodeList.set(el, []);
|
|
93
|
-
}
|
|
94
|
-
|
|
95
|
-
const handlers = nodeList.get(el);
|
|
96
|
-
const oldHandlerIndex = handlers?.findIndex(
|
|
97
|
-
(item) => item.bindingFn === binding.oldValue
|
|
98
|
-
);
|
|
99
|
-
const newHandler = {
|
|
100
|
-
documentHandler: createDocumentHandler(el, binding),
|
|
101
|
-
bindingFn: binding.value,
|
|
102
|
-
};
|
|
103
|
-
|
|
104
|
-
if (oldHandlerIndex && oldHandlerIndex >= 0) {
|
|
105
|
-
handlers?.splice(oldHandlerIndex, 1, newHandler);
|
|
106
|
-
} else {
|
|
107
|
-
handlers?.push(newHandler);
|
|
108
|
-
}
|
|
109
|
-
},
|
|
110
|
-
unmounted(el: HTMLElement) {
|
|
111
|
-
nodeList.delete(el);
|
|
112
|
-
},
|
|
113
|
-
};
|
|
114
|
-
|
|
115
|
-
export default ClickOutside;
|
package/src/directives/index.ts
DELETED
package/src/index.ts
DELETED
package/src/utils/dom.ts
DELETED
|
@@ -1,15 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* 根据类名获取父元素
|
|
3
|
-
* @param dom dom元素
|
|
4
|
-
* @param className css类名
|
|
5
|
-
* @return dom | null
|
|
6
|
-
*/
|
|
7
|
-
export function getParentByClass(dom: any, className: string): any {
|
|
8
|
-
if (!dom || dom.tagName === "BODY") {
|
|
9
|
-
return null;
|
|
10
|
-
}
|
|
11
|
-
if (dom.classList.contains(className)) {
|
|
12
|
-
return dom;
|
|
13
|
-
}
|
|
14
|
-
return getParentByClass(dom.parentNode, className);
|
|
15
|
-
}
|
package/src/utils/index.ts
DELETED
package/src/utils/is.ts
DELETED
|
@@ -1,67 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* 判断是否为undefined
|
|
3
|
-
* @param val
|
|
4
|
-
* @returns
|
|
5
|
-
*/
|
|
6
|
-
export function isUndefined(val: any): boolean {
|
|
7
|
-
return val === undefined;
|
|
8
|
-
}
|
|
9
|
-
/**
|
|
10
|
-
* 是否为数组
|
|
11
|
-
* @param val
|
|
12
|
-
* @returns
|
|
13
|
-
*/
|
|
14
|
-
export function isArray(val: any) {
|
|
15
|
-
return Object.prototype.toString.call(val) === "[object Array]";
|
|
16
|
-
}
|
|
17
|
-
/**
|
|
18
|
-
* 是否为对象
|
|
19
|
-
* @param val
|
|
20
|
-
* @returns
|
|
21
|
-
*/
|
|
22
|
-
export function isObject(val: any) {
|
|
23
|
-
return (
|
|
24
|
-
typeof val === "object" &&
|
|
25
|
-
Object.prototype.toString.call(val) === "[object Object]"
|
|
26
|
-
);
|
|
27
|
-
}
|
|
28
|
-
|
|
29
|
-
/**
|
|
30
|
-
* 是否为日期时间
|
|
31
|
-
* @param val
|
|
32
|
-
* @returns
|
|
33
|
-
*/
|
|
34
|
-
export function isDate(val: any) {
|
|
35
|
-
return Object.prototype.toString.call(val) === "[object Date]";
|
|
36
|
-
}
|
|
37
|
-
|
|
38
|
-
/**
|
|
39
|
-
* 是否为空
|
|
40
|
-
* @param val
|
|
41
|
-
* @returns
|
|
42
|
-
*/
|
|
43
|
-
export function isEmpty(val: unknown) {
|
|
44
|
-
return (
|
|
45
|
-
(!val && val !== 0) ||
|
|
46
|
-
(isArray(val) && (<Array<unknown>>val).length === 0) ||
|
|
47
|
-
(isObject(val) && !Object.keys(val as any).length)
|
|
48
|
-
);
|
|
49
|
-
}
|
|
50
|
-
|
|
51
|
-
/**
|
|
52
|
-
* 判断对象是否为DOM元素
|
|
53
|
-
* @param e
|
|
54
|
-
* @returns
|
|
55
|
-
*/
|
|
56
|
-
export function isElement(e: unknown): e is Element {
|
|
57
|
-
if (typeof Element === "undefined") return false;
|
|
58
|
-
return e instanceof Element;
|
|
59
|
-
}
|
|
60
|
-
|
|
61
|
-
/**
|
|
62
|
-
* 是否是客户端
|
|
63
|
-
*/
|
|
64
|
-
export const isClient = typeof window !== "undefined";
|
|
65
|
-
|
|
66
|
-
/**是否未数值 */
|
|
67
|
-
export const isNumber = (val: any) => typeof val === "number";
|
package/src/utils/number.ts
DELETED
|
@@ -1,14 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* 数字转成千分位
|
|
3
|
-
* @param num
|
|
4
|
-
* @returns
|
|
5
|
-
*/
|
|
6
|
-
export function thousandSeparator(num: number | any): string {
|
|
7
|
-
if (!num) {
|
|
8
|
-
return "0";
|
|
9
|
-
}
|
|
10
|
-
if (Object.prototype.toString.call(1) !== "[object Number]") {
|
|
11
|
-
return `${num}`;
|
|
12
|
-
}
|
|
13
|
-
return `${num}`.replace(/(\d{1,3})(?=(\d{3})+(?:$|\.))/g, "$1,");
|
|
14
|
-
}
|
package/src/utils/object.ts
DELETED
|
@@ -1,76 +0,0 @@
|
|
|
1
|
-
import { isObject } from "./is";
|
|
2
|
-
|
|
3
|
-
// 深拷贝对象
|
|
4
|
-
export function deepClone(obj: any): any {
|
|
5
|
-
const _toString: Function = Object.prototype.toString;
|
|
6
|
-
// null, undefined, non-object, function
|
|
7
|
-
if (!obj || typeof obj !== "object") {
|
|
8
|
-
return obj;
|
|
9
|
-
}
|
|
10
|
-
// DOM Node
|
|
11
|
-
if (obj.nodeType && "cloneNode" in obj) {
|
|
12
|
-
return obj.cloneNode(true);
|
|
13
|
-
}
|
|
14
|
-
// Date
|
|
15
|
-
if (_toString.call(obj) === "[object Date]") {
|
|
16
|
-
return new Date(obj.getTime());
|
|
17
|
-
}
|
|
18
|
-
// RegExp
|
|
19
|
-
if (_toString.call(obj) === "[object RegExp]") {
|
|
20
|
-
const flags: Array<string> = [];
|
|
21
|
-
if (obj.global) {
|
|
22
|
-
flags.push("g");
|
|
23
|
-
}
|
|
24
|
-
if (obj.multiline) {
|
|
25
|
-
flags.push("m");
|
|
26
|
-
}
|
|
27
|
-
if (obj.ignoreCase) {
|
|
28
|
-
flags.push("i");
|
|
29
|
-
}
|
|
30
|
-
return new RegExp(obj.source, flags.join(""));
|
|
31
|
-
}
|
|
32
|
-
if (_toString.call(obj) === "[object FormData]") {
|
|
33
|
-
const formData = new FormData();
|
|
34
|
-
for (const [key, value] of obj.entries()) {
|
|
35
|
-
formData.append(key, value);
|
|
36
|
-
}
|
|
37
|
-
return formData;
|
|
38
|
-
}
|
|
39
|
-
const result: any = Array.isArray(obj)
|
|
40
|
-
? []
|
|
41
|
-
: obj.constructor
|
|
42
|
-
? new obj.constructor()
|
|
43
|
-
: {};
|
|
44
|
-
|
|
45
|
-
for (const key in obj) {
|
|
46
|
-
result[key] = deepClone(obj[key]);
|
|
47
|
-
}
|
|
48
|
-
return result;
|
|
49
|
-
}
|
|
50
|
-
|
|
51
|
-
/**
|
|
52
|
-
*深度合并多个对象的方法
|
|
53
|
-
*/
|
|
54
|
-
export function deepAssign(...arg: any[]) {
|
|
55
|
-
let len: number = arg.length,
|
|
56
|
-
target: Record<string, any> = arg[0];
|
|
57
|
-
if (!isObject(target)) {
|
|
58
|
-
target = {};
|
|
59
|
-
}
|
|
60
|
-
for (let i = 1; i < len; i++) {
|
|
61
|
-
let source = arg[i];
|
|
62
|
-
if (isObject(source)) {
|
|
63
|
-
for (let s in source) {
|
|
64
|
-
if (s === "__proto__" || target === source[s]) {
|
|
65
|
-
continue;
|
|
66
|
-
}
|
|
67
|
-
if (isObject(source[s])) {
|
|
68
|
-
target[s] = deepAssign(target[s], source[s]);
|
|
69
|
-
} else {
|
|
70
|
-
target[s] = source[s];
|
|
71
|
-
}
|
|
72
|
-
}
|
|
73
|
-
}
|
|
74
|
-
}
|
|
75
|
-
return target;
|
|
76
|
-
}
|
package/src/utils/random.ts
DELETED
|
@@ -1,40 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* ==============================================
|
|
3
|
-
* 随机数
|
|
4
|
-
* ==============================================
|
|
5
|
-
*/
|
|
6
|
-
|
|
7
|
-
/**
|
|
8
|
-
* 生成[0-10000]的随机数,针对数据小量使用
|
|
9
|
-
* @returns 随机数
|
|
10
|
-
*/
|
|
11
|
-
export function generateId(): number {
|
|
12
|
-
return Math.floor(Math.random() * 10000);
|
|
13
|
-
}
|
|
14
|
-
|
|
15
|
-
/**
|
|
16
|
-
* 生成[0-max]的随机数
|
|
17
|
-
* @returns 随机数
|
|
18
|
-
*/
|
|
19
|
-
export function getRandomInt(max: number) {
|
|
20
|
-
return Math.floor(Math.random() * Math.floor(max));
|
|
21
|
-
}
|
|
22
|
-
|
|
23
|
-
/**
|
|
24
|
-
* 生成GUID
|
|
25
|
-
* @returns
|
|
26
|
-
*/
|
|
27
|
-
export function guiID() {
|
|
28
|
-
const gs = generateString;
|
|
29
|
-
return `${gs()}${gs()}-${gs()}-${gs()}-${gs()}-${gs()}${gs()}${gs()}`;
|
|
30
|
-
}
|
|
31
|
-
|
|
32
|
-
/**
|
|
33
|
-
* 随机字符串
|
|
34
|
-
* @returns
|
|
35
|
-
*/
|
|
36
|
-
export function generateString(): string {
|
|
37
|
-
return Math.floor((1 + Math.random()) * 0x10000)
|
|
38
|
-
.toString(16)
|
|
39
|
-
.substring(1);
|
|
40
|
-
}
|
package/src/utils/storage.ts
DELETED
|
@@ -1,86 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* 获取用户token,包含过期时间判断
|
|
3
|
-
*/
|
|
4
|
-
export function getToken(): any | null {
|
|
5
|
-
const session = localStorage.getItem("token");
|
|
6
|
-
if (!session) {
|
|
7
|
-
return undefined;
|
|
8
|
-
}
|
|
9
|
-
const data = JSON.parse(session);
|
|
10
|
-
if (data !== null) {
|
|
11
|
-
if (data.expirse != null && data.expirse < new Date().getTime()) {
|
|
12
|
-
localStorage.removeItem("token");
|
|
13
|
-
} else {
|
|
14
|
-
return data.value;
|
|
15
|
-
}
|
|
16
|
-
}
|
|
17
|
-
return null;
|
|
18
|
-
}
|
|
19
|
-
|
|
20
|
-
/**
|
|
21
|
-
* 设置用户token,有效期默认七天
|
|
22
|
-
* @param {*} value
|
|
23
|
-
*/
|
|
24
|
-
export function setToken(value: any, expires?: number): void {
|
|
25
|
-
(!expires && (expires = 7 * 24 * 60 * 60 * 1000)) ||
|
|
26
|
-
(expires = expires * 1000);
|
|
27
|
-
const data = { value: value, expirse: new Date().getTime() + expires };
|
|
28
|
-
localStorage.setItem("token", JSON.stringify(data));
|
|
29
|
-
}
|
|
30
|
-
|
|
31
|
-
/**
|
|
32
|
-
* 移除token
|
|
33
|
-
*/
|
|
34
|
-
export function removeToken(): void {
|
|
35
|
-
localStorage.removeItem("token");
|
|
36
|
-
}
|
|
37
|
-
/**
|
|
38
|
-
* 设置缓存
|
|
39
|
-
* @param key key
|
|
40
|
-
* @param value 值
|
|
41
|
-
*/
|
|
42
|
-
export function setStorage(
|
|
43
|
-
key: string,
|
|
44
|
-
value: any,
|
|
45
|
-
tpye: "local" | "session" = "local"
|
|
46
|
-
): void {
|
|
47
|
-
const storage = tpye == "local" ? localStorage : sessionStorage;
|
|
48
|
-
value != undefined && storage.setItem(key, JSON.stringify(value));
|
|
49
|
-
}
|
|
50
|
-
/**
|
|
51
|
-
* 获取缓存
|
|
52
|
-
* @param key
|
|
53
|
-
* @returns
|
|
54
|
-
*/
|
|
55
|
-
export function getStorage(
|
|
56
|
-
key: string,
|
|
57
|
-
tpye: "local" | "session" = "local"
|
|
58
|
-
): any {
|
|
59
|
-
const storage = tpye == "local" ? localStorage : sessionStorage;
|
|
60
|
-
let session = storage.getItem(key);
|
|
61
|
-
if (session) {
|
|
62
|
-
return JSON.parse(session || "");
|
|
63
|
-
}
|
|
64
|
-
return session;
|
|
65
|
-
}
|
|
66
|
-
|
|
67
|
-
/**
|
|
68
|
-
* 删除指定key的缓存
|
|
69
|
-
* @param key
|
|
70
|
-
*/
|
|
71
|
-
export function removeStorage(
|
|
72
|
-
key: string,
|
|
73
|
-
tpye: "local" | "session" = "local"
|
|
74
|
-
): void {
|
|
75
|
-
const storage = tpye == "local" ? localStorage : sessionStorage;
|
|
76
|
-
storage.removeItem(key);
|
|
77
|
-
}
|
|
78
|
-
|
|
79
|
-
/**
|
|
80
|
-
* 清除所有缓存
|
|
81
|
-
* @param tpye
|
|
82
|
-
*/
|
|
83
|
-
export function clearStorage(tpye: "local" | "session" = "local") {
|
|
84
|
-
const storage = tpye == "local" ? localStorage : sessionStorage;
|
|
85
|
-
storage.clear();
|
|
86
|
-
}
|
package/src/utils/tree.ts
DELETED
|
@@ -1,30 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* 树形数据扁平化处理
|
|
3
|
-
* @param data 数据
|
|
4
|
-
* @param key key属性
|
|
5
|
-
* @param children children属性
|
|
6
|
-
*/
|
|
7
|
-
export function treeFlat(
|
|
8
|
-
listData: any[],
|
|
9
|
-
key: string = "key",
|
|
10
|
-
children: string = "children"
|
|
11
|
-
): Record<string, any> {
|
|
12
|
-
const map: Record<string, any> = {};
|
|
13
|
-
const flat = (data: any[], parentKey?: string) => {
|
|
14
|
-
for (let i = 0; i < data.length; i++) {
|
|
15
|
-
const item = data[i];
|
|
16
|
-
const mapKey = item[key];
|
|
17
|
-
if (map[mapKey]) {
|
|
18
|
-
} else {
|
|
19
|
-
map[mapKey] = item;
|
|
20
|
-
if (parentKey) map[mapKey].parent = map[parentKey];
|
|
21
|
-
const itemChildren = item[children];
|
|
22
|
-
if (itemChildren && itemChildren.length > 0) {
|
|
23
|
-
flat(itemChildren, item[key]);
|
|
24
|
-
}
|
|
25
|
-
}
|
|
26
|
-
}
|
|
27
|
-
};
|
|
28
|
-
flat(listData);
|
|
29
|
-
return map;
|
|
30
|
-
}
|