lyb-js 1.1.12 → 1.2.2
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/README.md +3 -3
- package/dist/Base/LibJsGetDataType/index.js +1 -1
- package/dist/Base/LibJsPromiseTimeout/index.js +9 -10
- package/dist/Browser/LibJsColorConsole/index.d.ts +1 -1
- package/dist/Browser/LibJsColorConsole/index.js +12 -25
- package/dist/Browser/LibJsIsMobile/index.js +2 -2
- package/dist/Browser/LibJsIsPad/index.js +8 -8
- package/dist/Browser/LibJsObjToUrlParams/index.js +2 -5
- package/dist/Browser/LibJsPathParams/index.js +5 -5
- package/dist/Browser/LibJsSetTitleIcon/index.js +3 -3
- package/dist/Browser/LibJsTagTitleTip/index.js +5 -5
- package/dist/Data/LibJsChunkArray/index.js +3 -3
- package/dist/Data/LibJsDeepJSONParse/index.js +4 -4
- package/dist/Data/LibJsGroupArrayByKey/index.js +2 -3
- package/dist/Data/LibJsMatchEmail/index.js +4 -4
- package/dist/Data/LibJsShuffleArray/index.js +5 -15
- package/dist/Data/LibJsStepArray/index.js +3 -3
- package/dist/Data/LibReverseArrayFromIndex/index.js +3 -12
- package/dist/File/LibJsDownloadImageLink/index.js +5 -5
- package/dist/File/LibJsImageOptimizer/index.js +36 -36
- package/dist/File/LibJsSaveJson/index.js +4 -4
- package/dist/Formatter/LibJsFormatterByte/index.js +6 -6
- package/dist/Formatter/LibJsMaskPhoneNumber/index.js +2 -2
- package/dist/Formatter/LibJsNumComma/index.js +3 -4
- package/dist/Formatter/LibJsNumberUnit/index.js +9 -15
- package/dist/Formatter/LibJsSecondsFormatterChinese/index.js +15 -15
- package/dist/Math/LibJsCalculateExpression/index.js +17 -19
- package/dist/Math/LibJsConvertAngle/index.js +1 -1
- package/dist/Math/LibJsCoordsAngle/index.js +5 -5
- package/dist/Math/LibJsCoordsDistance/index.js +4 -4
- package/dist/Math/LibJsDecimal/index.js +7 -8
- package/dist/Misc/{LibNumerStepper → LibJsNumerStepper}/index.d.ts +14 -10
- package/dist/Misc/{LibNumerStepper → LibJsNumerStepper}/index.js +26 -26
- package/dist/Misc/LibJsRegFormValidate/index.js +6 -6
- package/dist/Misc/LibJsRetryRequest/index.js +6 -7
- package/dist/Random/LibJsProbabilityResult/index.js +1 -3
- package/dist/Random/LibJsRandom/index.js +1 -2
- package/dist/Random/LibJsRandomColor/index.js +5 -6
- package/dist/Random/LibJsUniqueRandomNumbers/index.js +5 -6
- package/dist/Time/LibJsSameTimeCheck/index.d.ts +1 -1
- package/dist/Time/LibJsSameTimeCheck/index.js +3 -3
- package/dist/Time/LibJsTimeAgo/index.js +7 -8
- package/dist/Time/LibJsTimeGreeting/index.js +3 -4
- package/dist/index.js +2 -1
- package/dist/libJs.d.ts +5 -5
- package/dist/libJs.js +50 -50
- package/package.json +3 -3
- package/umd/lyb.js +3 -3
package/README.md
CHANGED
|
@@ -139,7 +139,7 @@ console.log(t); //"string"
|
|
|
139
139
|
|
|
140
140
|
\- [LibJsRetryRequest-请求重连](#LibJsRetryRequest-请求重连)
|
|
141
141
|
|
|
142
|
-
\- [
|
|
142
|
+
\- [LibJsNumerStepper-数字步进器](#LibJsNumerStepper-数字步进器)
|
|
143
143
|
|
|
144
144
|
|
|
145
145
|
### Random-随机
|
|
@@ -530,12 +530,12 @@ libJsRetryRequest({
|
|
|
530
530
|
.catch(err => console.error(err));
|
|
531
531
|
```
|
|
532
532
|
|
|
533
|
-
###
|
|
533
|
+
### LibJsNumerStepper-数字步进器
|
|
534
534
|
|
|
535
535
|
> 通过调用方法来增加和减少数字索引
|
|
536
536
|
|
|
537
537
|
```ts
|
|
538
|
-
const stepper = new
|
|
538
|
+
const stepper = new LibJsNumerStepper(10, (index) => console.log(index));
|
|
539
539
|
stepper.down("add"); // 索引加1
|
|
540
540
|
stepper.updateIndex(5); // 更新索引为5
|
|
541
541
|
stepper.down("sub"); // 索引减1
|
|
@@ -4,14 +4,13 @@
|
|
|
4
4
|
* @param fn 延时执行函数
|
|
5
5
|
* @link 使用方法:https://www.npmjs.com/package/lyb-js#LibJsPromiseTimeout-延时执行
|
|
6
6
|
*/
|
|
7
|
-
export
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
var handleVisibilityChange = function () {
|
|
7
|
+
export const libJsPromiseTimeout = (delay = 1, fn) => {
|
|
8
|
+
let timeoutId;
|
|
9
|
+
let remainingTime = delay;
|
|
10
|
+
let startTime = Date.now();
|
|
11
|
+
let isPaused = false;
|
|
12
|
+
return new Promise((resolve) => {
|
|
13
|
+
const handleVisibilityChange = () => {
|
|
15
14
|
if (document.hidden) {
|
|
16
15
|
isPaused = true;
|
|
17
16
|
clearTimeout(timeoutId);
|
|
@@ -25,8 +24,8 @@ export var libJsPromiseTimeout = function (delay, fn) {
|
|
|
25
24
|
}
|
|
26
25
|
}
|
|
27
26
|
};
|
|
28
|
-
|
|
29
|
-
timeoutId = setTimeout(
|
|
27
|
+
const startTimeout = (resolve) => {
|
|
28
|
+
timeoutId = setTimeout(() => {
|
|
30
29
|
fn === null || fn === void 0 ? void 0 : fn();
|
|
31
30
|
resolve();
|
|
32
31
|
document.removeEventListener("visibilitychange", handleVisibilityChange);
|
|
@@ -1,24 +1,11 @@
|
|
|
1
|
-
var __spreadArray = (this && this.__spreadArray) || function (to, from, pack) {
|
|
2
|
-
if (pack || arguments.length === 2) for (var i = 0, l = from.length, ar; i < l; i++) {
|
|
3
|
-
if (ar || !(i in from)) {
|
|
4
|
-
if (!ar) ar = Array.prototype.slice.call(from, 0, i);
|
|
5
|
-
ar[i] = from[i];
|
|
6
|
-
}
|
|
7
|
-
}
|
|
8
|
-
return to.concat(ar || Array.prototype.slice.call(from));
|
|
9
|
-
};
|
|
10
1
|
/** @description console颜色打印
|
|
11
2
|
* @param title 标题
|
|
12
3
|
* @param color 颜色
|
|
13
4
|
* @param logs 信息
|
|
14
5
|
* @link 使用方法:https://www.npmjs.com/package/lyb-js#LibJsColorConsole-有色打印
|
|
15
6
|
*/
|
|
16
|
-
export
|
|
17
|
-
|
|
18
|
-
if (disabled === void 0) { disabled = false; }
|
|
19
|
-
if (!disabled)
|
|
20
|
-
return;
|
|
21
|
-
var colors = {
|
|
7
|
+
export const libJsColorConsole = (title, color, logs = []) => {
|
|
8
|
+
const colors = {
|
|
22
9
|
red: "#c0392b",
|
|
23
10
|
orange: "#d35400",
|
|
24
11
|
yellow: "#f1c40f",
|
|
@@ -27,20 +14,20 @@ export var libJsColorConsole = function (title, color, logs, disabled) {
|
|
|
27
14
|
purple: "#be2edd",
|
|
28
15
|
};
|
|
29
16
|
//时间戳生成函数
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
return
|
|
17
|
+
const getTimestamp = () => {
|
|
18
|
+
const now = new Date();
|
|
19
|
+
const hour = String(now.getHours()).padStart(2, "0");
|
|
20
|
+
const minutes = String(now.getMinutes()).padStart(2, "0");
|
|
21
|
+
const seconds = String(now.getSeconds()).padStart(2, "0");
|
|
22
|
+
return `[${hour}:${minutes}:${seconds}]`;
|
|
36
23
|
};
|
|
37
24
|
if (Array.isArray(logs)) {
|
|
38
|
-
|
|
39
|
-
return [
|
|
25
|
+
const v = logs.map((log) => {
|
|
26
|
+
return [`\n${log.label}:`, log.value];
|
|
40
27
|
});
|
|
41
|
-
console.log
|
|
28
|
+
console.log(`%c${getTimestamp()}-${title}`, `color: #fff;background: ${colors[color]}; font-size:14px;border-radius:5px;padding:0.25em;margin:0.5em 0`, ...v.flat(Infinity));
|
|
42
29
|
}
|
|
43
30
|
else {
|
|
44
|
-
console.log(
|
|
31
|
+
console.log(`%c${getTimestamp()}-${title}`, `color: #fff;background: ${colors[color]}; font-size:14px;border-radius:5px;padding:0.25em;margin:0.5em 0`, logs);
|
|
45
32
|
}
|
|
46
33
|
};
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
/** @description 判断是否为移动设备
|
|
2
2
|
* @link 使用方法:https://www.npmjs.com/package/lyb-js#LibJsIsMobile-判断手机
|
|
3
3
|
*/
|
|
4
|
-
export
|
|
5
|
-
|
|
4
|
+
export const libJsIsMobile = () => {
|
|
5
|
+
const ua = navigator.userAgent.toLowerCase();
|
|
6
6
|
return /mobile|android|iphone|ipod/.test(ua);
|
|
7
7
|
};
|
|
@@ -1,13 +1,13 @@
|
|
|
1
1
|
/** @description 判断是否为平板
|
|
2
2
|
* @link 使用方法:https://www.npmjs.com/package/lyb-js#LibJsIsPad-判断平板
|
|
3
3
|
*/
|
|
4
|
-
export
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
4
|
+
export const libJsIsPad = () => {
|
|
5
|
+
const ua = navigator.userAgent.toLowerCase();
|
|
6
|
+
const width = Math.max(window.screen.width, window.screen.height);
|
|
7
|
+
const height = Math.min(window.screen.width, window.screen.height);
|
|
8
|
+
const aspectRatio = width / height;
|
|
9
|
+
const isTabletUserAgent = /ipad|tablet|playbook|silk/.test(ua) && !/mobile/.test(ua);
|
|
10
|
+
const isTabletWidth = width >= 768 && width <= 1366;
|
|
11
|
+
const isTabletAspectRatio = aspectRatio >= 1.3 && aspectRatio <= 1.6;
|
|
12
12
|
return isTabletUserAgent || (isTabletWidth && isTabletAspectRatio);
|
|
13
13
|
};
|
|
@@ -2,11 +2,8 @@
|
|
|
2
2
|
* @param params 对象参数
|
|
3
3
|
* @link 使用方法:https://www.npmjs.com/package/lyb-js#LibJsObjToUrlParams-对象转Url参数
|
|
4
4
|
*/
|
|
5
|
-
export
|
|
5
|
+
export const libJsObjToUrlParams = (params) => {
|
|
6
6
|
return Object.entries(params)
|
|
7
|
-
.map(
|
|
8
|
-
var key = _a[0], value = _a[1];
|
|
9
|
-
return "".concat(key, "=").concat(value);
|
|
10
|
-
})
|
|
7
|
+
.map(([key, value]) => `${key}=${value}`)
|
|
11
8
|
.join("&");
|
|
12
9
|
};
|
|
@@ -1,13 +1,13 @@
|
|
|
1
1
|
/** @description 获取浏览器地址栏参数
|
|
2
2
|
* @link 使用方法:https://www.npmjs.com/package/lyb-js#LibJsPathParams-地址栏参数
|
|
3
3
|
*/
|
|
4
|
-
export
|
|
5
|
-
|
|
6
|
-
|
|
4
|
+
export const libJsPathParams = () => {
|
|
5
|
+
const v = location.href;
|
|
6
|
+
const url = v.split("?")[1];
|
|
7
7
|
if (!url)
|
|
8
8
|
return {};
|
|
9
|
-
|
|
10
|
-
|
|
9
|
+
const params = url.split("&").reduce((pre, cur) => {
|
|
10
|
+
const [k, v] = cur.split(/=(.+)/);
|
|
11
11
|
return (pre[k] = v), pre;
|
|
12
12
|
}, {}) || {};
|
|
13
13
|
return params;
|
|
@@ -3,11 +3,11 @@
|
|
|
3
3
|
* @param url 网站图标地址
|
|
4
4
|
* @link 使用方法:https://www.npmjs.com/package/lyb-js#LibJsSetTitleIcon-网站标题图标
|
|
5
5
|
*/
|
|
6
|
-
export
|
|
6
|
+
export const libJsSetTitleIcon = (title, url) => {
|
|
7
7
|
document.title = title;
|
|
8
|
-
|
|
8
|
+
const link = document.createElement("link");
|
|
9
9
|
link.setAttribute("rel", "icon");
|
|
10
10
|
link.setAttribute("href", url);
|
|
11
|
-
|
|
11
|
+
const head = document.head || document.getElementsByTagName("head")[0];
|
|
12
12
|
head.appendChild(link);
|
|
13
13
|
};
|
|
@@ -3,10 +3,10 @@
|
|
|
3
3
|
* @param leaveTitle 从当前网页离开时显示的标题
|
|
4
4
|
* @link 使用方法:https://www.npmjs.com/package/lyb-js#LibJsTagTitleTip-网站标题交互
|
|
5
5
|
*/
|
|
6
|
-
export
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
window.addEventListener("visibilitychange",
|
|
6
|
+
export const libJsTagTitleTip = (backTitle, leaveTitle) => {
|
|
7
|
+
let document_title = "";
|
|
8
|
+
let timer;
|
|
9
|
+
window.addEventListener("visibilitychange", () => {
|
|
10
10
|
clearTimeout(timer);
|
|
11
11
|
if (document.hidden) {
|
|
12
12
|
if (document.title !== backTitle) {
|
|
@@ -16,7 +16,7 @@ export var libJsTagTitleTip = function (backTitle, leaveTitle) {
|
|
|
16
16
|
return;
|
|
17
17
|
}
|
|
18
18
|
document.title = backTitle;
|
|
19
|
-
timer = setTimeout(
|
|
19
|
+
timer = setTimeout(() => {
|
|
20
20
|
document.title = document_title;
|
|
21
21
|
}, 1000);
|
|
22
22
|
});
|
|
@@ -4,9 +4,9 @@
|
|
|
4
4
|
* @param chunkSize 每个数组的元素数量
|
|
5
5
|
* @link 使用方法:https://www.npmjs.com/package/lyb-js#LibJsChunkArray-数组拆分
|
|
6
6
|
*/
|
|
7
|
-
export
|
|
8
|
-
|
|
9
|
-
for (
|
|
7
|
+
export const libJsChunkArray = (arr, chunkSize) => {
|
|
8
|
+
const result = [];
|
|
9
|
+
for (let i = 0; i < arr.length; i += chunkSize) {
|
|
10
10
|
result.push(arr.slice(i, i + chunkSize));
|
|
11
11
|
}
|
|
12
12
|
return result;
|
|
@@ -1,11 +1,11 @@
|
|
|
1
1
|
/** @description 递归将JSON字符串深度解析为对象
|
|
2
2
|
* @link 使用方法:https://www.npmjs.com/package/lyb-js#LibJsDeepJSONParse-深度解析JSON
|
|
3
3
|
*/
|
|
4
|
-
export
|
|
4
|
+
export const libJsDeepJSONParse = (data) => {
|
|
5
5
|
//检查是否为字符串并尝试解析
|
|
6
6
|
if (typeof data === "string") {
|
|
7
7
|
try {
|
|
8
|
-
|
|
8
|
+
const parsed = JSON.parse(data);
|
|
9
9
|
//递归解析解析后的结果
|
|
10
10
|
return libJsDeepJSONParse(parsed);
|
|
11
11
|
}
|
|
@@ -16,11 +16,11 @@ export var libJsDeepJSONParse = function (data) {
|
|
|
16
16
|
}
|
|
17
17
|
//如果是数组,递归处理每个元素
|
|
18
18
|
if (Array.isArray(data)) {
|
|
19
|
-
return data.map(
|
|
19
|
+
return data.map((item) => libJsDeepJSONParse(item));
|
|
20
20
|
}
|
|
21
21
|
//如果是对象,递归处理每个属性值
|
|
22
22
|
if (data !== null && typeof data === "object") {
|
|
23
|
-
return Object.keys(data).reduce(
|
|
23
|
+
return Object.keys(data).reduce((acc, key) => {
|
|
24
24
|
acc[key] = libJsDeepJSONParse(data[key]);
|
|
25
25
|
return acc;
|
|
26
26
|
}, {});
|
|
@@ -5,10 +5,9 @@
|
|
|
5
5
|
* @returns 分组后的对象
|
|
6
6
|
* @link 使用方法:https://www.npmjs.com/package/lyb-js#LibJsGroupArrayByKey-分类汇总
|
|
7
7
|
*/
|
|
8
|
-
export
|
|
9
|
-
if (arr === void 0) { arr = []; }
|
|
8
|
+
export const libJsGroupArrayByKey = (arr = [], key) => {
|
|
10
9
|
return key
|
|
11
|
-
? arr.reduce(
|
|
10
|
+
? arr.reduce((t, v) => {
|
|
12
11
|
if (!t[v[key]]) {
|
|
13
12
|
t[v[key]] = [];
|
|
14
13
|
}
|
|
@@ -5,10 +5,10 @@
|
|
|
5
5
|
* @returns 匹配结果数组
|
|
6
6
|
* @link 使用方法:https://www.npmjs.com/package/lyb-js#LibJsMatchEmail-匹配E-Mail
|
|
7
7
|
*/
|
|
8
|
-
export
|
|
8
|
+
export const libJsMatchEmail = (str, emailList) => {
|
|
9
9
|
return str.includes("@")
|
|
10
10
|
? emailList
|
|
11
|
-
.filter(
|
|
12
|
-
.map(
|
|
13
|
-
: emailList.map(
|
|
11
|
+
.filter((item) => item.includes(str.slice(str.indexOf("@"))))
|
|
12
|
+
.map((item) => (str.includes("@") ? str.split("@")[0] : str) + item)
|
|
13
|
+
: emailList.map((item) => str + item);
|
|
14
14
|
};
|
|
@@ -1,22 +1,12 @@
|
|
|
1
|
-
var __spreadArray = (this && this.__spreadArray) || function (to, from, pack) {
|
|
2
|
-
if (pack || arguments.length === 2) for (var i = 0, l = from.length, ar; i < l; i++) {
|
|
3
|
-
if (ar || !(i in from)) {
|
|
4
|
-
if (!ar) ar = Array.prototype.slice.call(from, 0, i);
|
|
5
|
-
ar[i] = from[i];
|
|
6
|
-
}
|
|
7
|
-
}
|
|
8
|
-
return to.concat(ar || Array.prototype.slice.call(from));
|
|
9
|
-
};
|
|
10
1
|
/** @description 将数组打乱顺序
|
|
11
2
|
* @param arr 需要乱序的数组
|
|
12
3
|
* @link 使用方法:https://www.npmjs.com/package/lyb-js#LibJsShuffleArray-数组乱序
|
|
13
4
|
*/
|
|
14
|
-
export
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
_a = [newArr[j], newArr[i]], newArr[i] = _a[0], newArr[j] = _a[1];
|
|
5
|
+
export const libJsShuffleArray = (arr) => {
|
|
6
|
+
const newArr = [...arr];
|
|
7
|
+
for (let i = newArr.length - 1; i > 0; i--) {
|
|
8
|
+
const j = Math.floor(Math.random() * (i + 1));
|
|
9
|
+
[newArr[i], newArr[j]] = [newArr[j], newArr[i]];
|
|
20
10
|
}
|
|
21
11
|
return newArr;
|
|
22
12
|
};
|
|
@@ -3,10 +3,10 @@
|
|
|
3
3
|
* @param step 负数为向后移动,正数为向前移动
|
|
4
4
|
* @link 使用方法:https://www.npmjs.com/package/lyb-js#LibJsStepArray-数组偏移
|
|
5
5
|
*/
|
|
6
|
-
export
|
|
7
|
-
|
|
6
|
+
export const libJsStepArray = (arr, step) => {
|
|
7
|
+
const length = arr.length;
|
|
8
8
|
if (length === 0 || step % length === 0)
|
|
9
9
|
return arr;
|
|
10
|
-
|
|
10
|
+
const normalizedStep = ((step % length) + length) % length;
|
|
11
11
|
return arr.slice(-normalizedStep).concat(arr.slice(0, -normalizedStep));
|
|
12
12
|
};
|
|
@@ -1,21 +1,12 @@
|
|
|
1
|
-
var __spreadArray = (this && this.__spreadArray) || function (to, from, pack) {
|
|
2
|
-
if (pack || arguments.length === 2) for (var i = 0, l = from.length, ar; i < l; i++) {
|
|
3
|
-
if (ar || !(i in from)) {
|
|
4
|
-
if (!ar) ar = Array.prototype.slice.call(from, 0, i);
|
|
5
|
-
ar[i] = from[i];
|
|
6
|
-
}
|
|
7
|
-
}
|
|
8
|
-
return to.concat(ar || Array.prototype.slice.call(from));
|
|
9
|
-
};
|
|
10
1
|
/** @description 翻转指定索引后面的数组
|
|
11
2
|
* @param arr 数组
|
|
12
3
|
* @param index 开始索引
|
|
13
4
|
* @link 使用方法:https://www.npmjs.com/package/lyb-js#LibReverseArrayFromIndex-数组定位翻转
|
|
14
5
|
*/
|
|
15
|
-
export
|
|
6
|
+
export const libReverseArrayFromIndex = (arr, index) => {
|
|
16
7
|
if (index < 0 || index >= arr.length) {
|
|
17
8
|
throw new Error("Index out of bounds");
|
|
18
9
|
}
|
|
19
|
-
|
|
20
|
-
return
|
|
10
|
+
const subArray = arr.slice(index + 1).reverse();
|
|
11
|
+
return [...arr.slice(0, index + 1), ...subArray];
|
|
21
12
|
};
|
|
@@ -3,12 +3,12 @@
|
|
|
3
3
|
* @param name 图片名称
|
|
4
4
|
* @link 使用方法:https://www.npmjs.com/package/lyb-js#LibJsDownloadImageLink-图片下载
|
|
5
5
|
*/
|
|
6
|
-
export
|
|
6
|
+
export const libJsDownloadImageLink = (link, name) => {
|
|
7
7
|
fetch(link)
|
|
8
|
-
.then(
|
|
9
|
-
.then(
|
|
10
|
-
|
|
11
|
-
|
|
8
|
+
.then((res) => res.blob())
|
|
9
|
+
.then((blob) => {
|
|
10
|
+
const a = document.createElement("a");
|
|
11
|
+
const url = window.URL.createObjectURL(blob);
|
|
12
12
|
a.href = url;
|
|
13
13
|
a.download = name;
|
|
14
14
|
a.click();
|
|
@@ -2,66 +2,66 @@
|
|
|
2
2
|
* @param obj 压缩参数
|
|
3
3
|
* @link 使用方法:https://www.npmjs.com/package/lyb-js#LibJsImageOptimizer-图片压缩
|
|
4
4
|
*/
|
|
5
|
-
export
|
|
6
|
-
|
|
5
|
+
export const libJsImageOptimizer = (obj) => {
|
|
6
|
+
const canvas = document.createElement("canvas");
|
|
7
7
|
canvas.classList.add("imageOptimizer");
|
|
8
8
|
document.body.appendChild(canvas);
|
|
9
|
-
|
|
9
|
+
const files = obj.file;
|
|
10
10
|
if (!files)
|
|
11
11
|
return;
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
12
|
+
const name = files.name;
|
|
13
|
+
const extension = name.split(".").pop().toLowerCase();
|
|
14
|
+
const ratio = obj.ratio || 1;
|
|
15
|
+
const maxSize = obj.maxSize || 1024;
|
|
16
|
+
const width = obj.width || 10000;
|
|
17
|
+
const mimeType = files.type;
|
|
18
18
|
function dataURLtoFile(dataURL, filename) {
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
for (
|
|
19
|
+
const arr = dataURL.split(",");
|
|
20
|
+
const mime = arr[0].match(/:(.*?);/)[1];
|
|
21
|
+
const bstr = window.atob(arr[1]);
|
|
22
|
+
const n = bstr.length;
|
|
23
|
+
const u8arr = new Uint8Array(n);
|
|
24
|
+
for (let i = 0; i < n; i++) {
|
|
25
25
|
u8arr[i] = bstr.charCodeAt(i);
|
|
26
26
|
}
|
|
27
27
|
return new File([u8arr], filename, { type: mime });
|
|
28
28
|
}
|
|
29
29
|
function formData(file) {
|
|
30
|
-
|
|
30
|
+
const data = new FormData();
|
|
31
31
|
data.append("file", file);
|
|
32
32
|
return data;
|
|
33
33
|
}
|
|
34
|
-
|
|
34
|
+
const reader = new FileReader();
|
|
35
35
|
reader.readAsDataURL(files);
|
|
36
|
-
reader.onload =
|
|
37
|
-
|
|
36
|
+
reader.onload = (e) => {
|
|
37
|
+
const result = e.target.result;
|
|
38
38
|
if (e.total / 1024 > maxSize) {
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
39
|
+
const image = new Image();
|
|
40
|
+
image.src = result;
|
|
41
|
+
image.onload = () => {
|
|
42
|
+
const context = canvas.getContext("2d");
|
|
43
|
+
const scale = width / image.width;
|
|
44
44
|
if (scale < 1) {
|
|
45
|
-
canvas.width =
|
|
46
|
-
canvas.height =
|
|
47
|
-
context.drawImage(
|
|
45
|
+
canvas.width = image.width * scale;
|
|
46
|
+
canvas.height = image.height * scale;
|
|
47
|
+
context.drawImage(image, 0, 0, image.width * scale, image.height * scale);
|
|
48
48
|
}
|
|
49
49
|
else {
|
|
50
|
-
canvas.width =
|
|
51
|
-
canvas.height =
|
|
52
|
-
context.drawImage(
|
|
50
|
+
canvas.width = image.width;
|
|
51
|
+
canvas.height = image.height;
|
|
52
|
+
context.drawImage(image, 0, 0, image.width, image.height);
|
|
53
53
|
}
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
54
|
+
const dataUrl = canvas.toDataURL(mimeType, ratio);
|
|
55
|
+
const newName = `${name.split(".")[0]}.${extension}`;
|
|
56
|
+
const file = dataURLtoFile(dataUrl, newName);
|
|
57
57
|
obj.success(formData(file), file, dataUrl);
|
|
58
58
|
canvas.remove();
|
|
59
59
|
};
|
|
60
|
-
|
|
60
|
+
image.onerror = obj.fail;
|
|
61
61
|
}
|
|
62
62
|
else {
|
|
63
|
-
|
|
64
|
-
|
|
63
|
+
const newName = `${name.split(".")[0]}.${extension}`;
|
|
64
|
+
const file = dataURLtoFile(result, newName);
|
|
65
65
|
obj.success(formData(file), file, result);
|
|
66
66
|
canvas.remove();
|
|
67
67
|
}
|
|
@@ -4,10 +4,10 @@
|
|
|
4
4
|
* @param data 要保存的数据
|
|
5
5
|
* @link 使用方法:https://www.npmjs.com/package/lyb-js#LibJsSaveJson-保存文件
|
|
6
6
|
*/
|
|
7
|
-
export
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
7
|
+
export const libJsSaveJson = (name, data) => {
|
|
8
|
+
const urlObject = window.URL || window.webkitURL;
|
|
9
|
+
const exportBlob = new Blob([data]);
|
|
10
|
+
const saveLink = document.createElement("a");
|
|
11
11
|
saveLink.href = urlObject.createObjectURL(exportBlob);
|
|
12
12
|
saveLink.download = name;
|
|
13
13
|
saveLink.click();
|
|
@@ -4,12 +4,12 @@
|
|
|
4
4
|
* @returns ['大小', '单位', '大小及单位']
|
|
5
5
|
* @link 使用方法:https://www.npmjs.com/package/lyb-js#LibJsFormatterByte-字节格式化
|
|
6
6
|
*/
|
|
7
|
-
export
|
|
7
|
+
export const libJsFormatterByte = (bytes) => {
|
|
8
8
|
if (bytes <= 0)
|
|
9
9
|
return [0, "B", "0 B"];
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
return [size, sizes[i],
|
|
10
|
+
const k = 1024;
|
|
11
|
+
const sizes = ["B", "KB", "MB", "GB", "TB", "PB", "EB", "ZB", "YB"];
|
|
12
|
+
const i = Math.min(Math.floor(Math.log(bytes) / Math.log(k)), sizes.length - 1);
|
|
13
|
+
const size = (bytes / Math.pow(k, i)).toFixed(2);
|
|
14
|
+
return [size, sizes[i], `${size} ${sizes[i]}`];
|
|
15
15
|
};
|
|
@@ -3,7 +3,7 @@
|
|
|
3
3
|
* @param mobile 需要处理的手机号码
|
|
4
4
|
* @link 使用方法:https://www.npmjs.com/package/lyb-js#LibJsMaskPhoneNumber-隐藏手机号码
|
|
5
5
|
*/
|
|
6
|
-
export
|
|
7
|
-
|
|
6
|
+
export const libJsMaskPhoneNumber = (mobile) => {
|
|
7
|
+
const m = mobile.toString();
|
|
8
8
|
return m.replace(/^(\d{3})\d{4}(\d{4})$/, "$1****$2");
|
|
9
9
|
};
|
|
@@ -4,9 +4,8 @@
|
|
|
4
4
|
* @param reserve 保留小数位数
|
|
5
5
|
* @link 使用方法:https://www.npmjs.com/package/lyb-js#LibJsNumComma-数字逗号
|
|
6
6
|
*/
|
|
7
|
-
export
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
var reg = str.indexOf(".") > -1 ? /(\d)(?=(\d{3})+\.)/g : /(\d)(?=(?:\d{3})+$)/g;
|
|
7
|
+
export const libJsNumComma = (num, reserve = 2) => {
|
|
8
|
+
const str = num.toFixed(reserve).toString();
|
|
9
|
+
const reg = str.indexOf(".") > -1 ? /(\d)(?=(\d{3})+\.)/g : /(\d)(?=(?:\d{3})+$)/g;
|
|
11
10
|
return str.replace(reg, "$1,");
|
|
12
11
|
};
|
|
@@ -7,23 +7,17 @@ import { libJsNumComma } from "../LibJsNumComma";
|
|
|
7
7
|
* @returns 数字+单位
|
|
8
8
|
* @link 使用方法:https://www.npmjs.com/package/lyb-js#LibJsNumberUnit-数字单位
|
|
9
9
|
*/
|
|
10
|
-
export
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
var b = _b[1];
|
|
16
|
-
return b - a;
|
|
17
|
-
});
|
|
18
|
-
for (var _i = 0, sortedUnits_1 = sortedUnits; _i < sortedUnits_1.length; _i++) {
|
|
19
|
-
var _a = sortedUnits_1[_i], unit = _a[0], threshold = _a[1];
|
|
20
|
-
var decimalThreshold = new Decimal(threshold);
|
|
10
|
+
export const libJsNumberUnit = (num, units, retain = 0) => {
|
|
11
|
+
const decimalValue = new Decimal(num);
|
|
12
|
+
const sortedUnits = Object.entries(units).sort(([, a], [, b]) => b - a);
|
|
13
|
+
for (const [unit, threshold] of sortedUnits) {
|
|
14
|
+
const decimalThreshold = new Decimal(threshold);
|
|
21
15
|
if (decimalValue.greaterThanOrEqualTo(decimalThreshold)) {
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
return
|
|
16
|
+
const formattedValue = decimalValue.dividedBy(decimalThreshold);
|
|
17
|
+
const v = libJsNumComma(Number(formattedValue), retain);
|
|
18
|
+
return v + unit;
|
|
25
19
|
}
|
|
26
20
|
}
|
|
27
|
-
|
|
21
|
+
const v = libJsNumComma(Number(decimalValue), retain);
|
|
28
22
|
return v;
|
|
29
23
|
};
|