@zcrkey/js-utils 0.0.12 → 0.0.15
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 +23 -0
- package/dist/index.es.js +5943 -0
- package/dist/index.umd.js +23 -0
- package/dist/types/color.d.ts +303 -0
- package/dist/{cjs → types}/eventCenter.d.ts +5 -5
- package/dist/types/file.d.ts +481 -0
- package/dist/types/index.d.ts +7 -0
- package/dist/{esm → types}/obj.d.ts +1 -1
- package/dist/{esm → types}/storage.d.ts +1 -1
- package/dist/{cjs → types}/tree.d.ts +1 -1
- package/dist/{cjs → types}/util.d.ts +27 -7
- package/package.json +14 -19
- package/dist/cjs/color.d.ts +0 -195
- package/dist/cjs/color.js +0 -357
- package/dist/cjs/eventCenter.js +0 -120
- package/dist/cjs/file.d.ts +0 -71
- package/dist/cjs/file.js +0 -186
- package/dist/cjs/index.d.ts +0 -10
- package/dist/cjs/index.js +0 -57
- package/dist/cjs/obj.d.ts +0 -20
- package/dist/cjs/obj.js +0 -47
- package/dist/cjs/storage.d.ts +0 -44
- package/dist/cjs/storage.js +0 -118
- package/dist/cjs/tree.js +0 -179
- package/dist/cjs/util.js +0 -607
- package/dist/esm/color.d.ts +0 -195
- package/dist/esm/color.js +0 -500
- package/dist/esm/eventCenter.d.ts +0 -59
- package/dist/esm/eventCenter.js +0 -134
- package/dist/esm/file.d.ts +0 -71
- package/dist/esm/file.js +0 -268
- package/dist/esm/index.d.ts +0 -10
- package/dist/esm/index.js +0 -7
- package/dist/esm/obj.js +0 -41
- package/dist/esm/storage.js +0 -130
- package/dist/esm/tree.d.ts +0 -52
- package/dist/esm/tree.js +0 -214
- package/dist/esm/util.d.ts +0 -221
- package/dist/esm/util.js +0 -744
- package/dist/umd/index.umd.js +0 -1
package/dist/esm/util.js
DELETED
|
@@ -1,744 +0,0 @@
|
|
|
1
|
-
function _slicedToArray(arr, i) { return _arrayWithHoles(arr) || _iterableToArrayLimit(arr, i) || _unsupportedIterableToArray(arr, i) || _nonIterableRest(); }
|
|
2
|
-
function _nonIterableRest() { throw new TypeError("Invalid attempt to destructure non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."); }
|
|
3
|
-
function _iterableToArrayLimit(r, l) { var t = null == r ? null : "undefined" != typeof Symbol && r[Symbol.iterator] || r["@@iterator"]; if (null != t) { var e, n, i, u, a = [], f = !0, o = !1; try { if (i = (t = t.call(r)).next, 0 === l) { if (Object(t) !== t) return; f = !1; } else for (; !(f = (e = i.call(t)).done) && (a.push(e.value), a.length !== l); f = !0); } catch (r) { o = !0, n = r; } finally { try { if (!f && null != t.return && (u = t.return(), Object(u) !== u)) return; } finally { if (o) throw n; } } return a; } }
|
|
4
|
-
function _arrayWithHoles(arr) { if (Array.isArray(arr)) return arr; }
|
|
5
|
-
function _toConsumableArray(arr) { return _arrayWithoutHoles(arr) || _iterableToArray(arr) || _unsupportedIterableToArray(arr) || _nonIterableSpread(); }
|
|
6
|
-
function _nonIterableSpread() { throw new TypeError("Invalid attempt to spread non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."); }
|
|
7
|
-
function _iterableToArray(iter) { if (typeof Symbol !== "undefined" && iter[Symbol.iterator] != null || iter["@@iterator"] != null) return Array.from(iter); }
|
|
8
|
-
function _arrayWithoutHoles(arr) { if (Array.isArray(arr)) return _arrayLikeToArray(arr); }
|
|
9
|
-
function ownKeys(e, r) { var t = Object.keys(e); if (Object.getOwnPropertySymbols) { var o = Object.getOwnPropertySymbols(e); r && (o = o.filter(function (r) { return Object.getOwnPropertyDescriptor(e, r).enumerable; })), t.push.apply(t, o); } return t; }
|
|
10
|
-
function _objectSpread(e) { for (var r = 1; r < arguments.length; r++) { var t = null != arguments[r] ? arguments[r] : {}; r % 2 ? ownKeys(Object(t), !0).forEach(function (r) { _defineProperty(e, r, t[r]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(e, Object.getOwnPropertyDescriptors(t)) : ownKeys(Object(t)).forEach(function (r) { Object.defineProperty(e, r, Object.getOwnPropertyDescriptor(t, r)); }); } return e; }
|
|
11
|
-
function _defineProperty(obj, key, value) { key = _toPropertyKey(key); if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }
|
|
12
|
-
function _createForOfIteratorHelper(o, allowArrayLike) { var it = typeof Symbol !== "undefined" && o[Symbol.iterator] || o["@@iterator"]; if (!it) { if (Array.isArray(o) || (it = _unsupportedIterableToArray(o)) || allowArrayLike && o && typeof o.length === "number") { if (it) o = it; var i = 0; var F = function F() {}; return { s: F, n: function n() { if (i >= o.length) return { done: true }; return { done: false, value: o[i++] }; }, e: function e(_e) { throw _e; }, f: F }; } throw new TypeError("Invalid attempt to iterate non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."); } var normalCompletion = true, didErr = false, err; return { s: function s() { it = it.call(o); }, n: function n() { var step = it.next(); normalCompletion = step.done; return step; }, e: function e(_e2) { didErr = true; err = _e2; }, f: function f() { try { if (!normalCompletion && it.return != null) it.return(); } finally { if (didErr) throw err; } } }; }
|
|
13
|
-
function _unsupportedIterableToArray(o, minLen) { if (!o) return; if (typeof o === "string") return _arrayLikeToArray(o, minLen); var n = Object.prototype.toString.call(o).slice(8, -1); if (n === "Object" && o.constructor) n = o.constructor.name; if (n === "Map" || n === "Set") return Array.from(o); if (n === "Arguments" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return _arrayLikeToArray(o, minLen); }
|
|
14
|
-
function _arrayLikeToArray(arr, len) { if (len == null || len > arr.length) len = arr.length; for (var i = 0, arr2 = new Array(len); i < len; i++) arr2[i] = arr[i]; return arr2; }
|
|
15
|
-
function _typeof(o) { "@babel/helpers - typeof"; return _typeof = "function" == typeof Symbol && "symbol" == typeof Symbol.iterator ? function (o) { return typeof o; } : function (o) { return o && "function" == typeof Symbol && o.constructor === Symbol && o !== Symbol.prototype ? "symbol" : typeof o; }, _typeof(o); }
|
|
16
|
-
function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }
|
|
17
|
-
function _defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, _toPropertyKey(descriptor.key), descriptor); } }
|
|
18
|
-
function _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); Object.defineProperty(Constructor, "prototype", { writable: false }); return Constructor; }
|
|
19
|
-
function _toPropertyKey(t) { var i = _toPrimitive(t, "string"); return "symbol" == _typeof(i) ? i : String(i); }
|
|
20
|
-
function _toPrimitive(t, r) { if ("object" != _typeof(t) || !t) return t; var e = t[Symbol.toPrimitive]; if (void 0 !== e) { var i = e.call(t, r || "default"); if ("object" != _typeof(i)) return i; throw new TypeError("@@toPrimitive must return a primitive value."); } return ("string" === r ? String : Number)(t); }
|
|
21
|
-
import { cloneDeep as _cloneDeep } from 'lodash';
|
|
22
|
-
import Qs from 'qs';
|
|
23
|
-
var CrUtil = /*#__PURE__*/function () {
|
|
24
|
-
function CrUtil() {
|
|
25
|
-
_classCallCheck(this, CrUtil);
|
|
26
|
-
}
|
|
27
|
-
_createClass(CrUtil, null, [{
|
|
28
|
-
key: "isArray",
|
|
29
|
-
value:
|
|
30
|
-
/**
|
|
31
|
-
* 判断是否为数组
|
|
32
|
-
* @param value
|
|
33
|
-
* @returns boolean
|
|
34
|
-
*/
|
|
35
|
-
function isArray(value) {
|
|
36
|
-
return Array.isArray(value);
|
|
37
|
-
}
|
|
38
|
-
|
|
39
|
-
/**
|
|
40
|
-
* 判断是否为对象
|
|
41
|
-
* @param value
|
|
42
|
-
* @returns boolean
|
|
43
|
-
*/
|
|
44
|
-
}, {
|
|
45
|
-
key: "isObject",
|
|
46
|
-
value: function isObject(value) {
|
|
47
|
-
return _typeof(value) === 'object' && value !== null && !CrUtil.isArray(value);
|
|
48
|
-
}
|
|
49
|
-
|
|
50
|
-
/**
|
|
51
|
-
* 判断是否为空对象
|
|
52
|
-
* @param value
|
|
53
|
-
* @returns boolean
|
|
54
|
-
*/
|
|
55
|
-
}, {
|
|
56
|
-
key: "isEmptyObject",
|
|
57
|
-
value: function isEmptyObject(value) {
|
|
58
|
-
return Object.keys(value).length === 0 && value.constructor === Object;
|
|
59
|
-
}
|
|
60
|
-
|
|
61
|
-
/**
|
|
62
|
-
* 判断是否对象的属性是否全部为空
|
|
63
|
-
* @param value
|
|
64
|
-
* @returns boolean
|
|
65
|
-
*/
|
|
66
|
-
}, {
|
|
67
|
-
key: "isObjectPropertiesAllEmpty",
|
|
68
|
-
value: function isObjectPropertiesAllEmpty(value) {
|
|
69
|
-
return Object.keys(value).every(function (key) {
|
|
70
|
-
var _value = value[key];
|
|
71
|
-
return _value === undefined || _value === null || _value === '' || _value === 0 && typeof _value === 'number' || isNaN(_value);
|
|
72
|
-
});
|
|
73
|
-
}
|
|
74
|
-
|
|
75
|
-
/**
|
|
76
|
-
* 判断是否为日期
|
|
77
|
-
* @param value
|
|
78
|
-
* @returns boolean
|
|
79
|
-
*/
|
|
80
|
-
}, {
|
|
81
|
-
key: "isDate",
|
|
82
|
-
value: function isDate(value) {
|
|
83
|
-
return Object.prototype.toString.call(value) === '[object Date]';
|
|
84
|
-
}
|
|
85
|
-
|
|
86
|
-
/**
|
|
87
|
-
* 判断是否为字符串
|
|
88
|
-
* @param value
|
|
89
|
-
* @returns boolean
|
|
90
|
-
*/
|
|
91
|
-
}, {
|
|
92
|
-
key: "isString",
|
|
93
|
-
value: function isString(value) {
|
|
94
|
-
return Object.prototype.toString.call(value) === '[object String]';
|
|
95
|
-
}
|
|
96
|
-
|
|
97
|
-
/**
|
|
98
|
-
* 判断是否为数字
|
|
99
|
-
* @param value
|
|
100
|
-
* @returns boolean
|
|
101
|
-
*/
|
|
102
|
-
}, {
|
|
103
|
-
key: "isNumber",
|
|
104
|
-
value: function isNumber(value) {
|
|
105
|
-
return typeof value === 'number' && !isNaN(value);
|
|
106
|
-
}
|
|
107
|
-
|
|
108
|
-
/**
|
|
109
|
-
* 判断是否为文件 File
|
|
110
|
-
* @param value
|
|
111
|
-
* @returns boolean
|
|
112
|
-
*/
|
|
113
|
-
}, {
|
|
114
|
-
key: "isFile",
|
|
115
|
-
value: function isFile(value) {
|
|
116
|
-
return Object.prototype.toString.call(value) === '[object File]';
|
|
117
|
-
}
|
|
118
|
-
|
|
119
|
-
/**
|
|
120
|
-
* 判断是否为 Boolean
|
|
121
|
-
* @param value
|
|
122
|
-
* @returns boolean
|
|
123
|
-
*/
|
|
124
|
-
}, {
|
|
125
|
-
key: "isBoolean",
|
|
126
|
-
value: function isBoolean(value) {
|
|
127
|
-
return Object.prototype.toString.call(value) === '[object Boolean]';
|
|
128
|
-
}
|
|
129
|
-
|
|
130
|
-
/**
|
|
131
|
-
* 判断是否为 Function
|
|
132
|
-
* @param value
|
|
133
|
-
* @returns boolean
|
|
134
|
-
*/
|
|
135
|
-
}, {
|
|
136
|
-
key: "isFunction",
|
|
137
|
-
value: function isFunction(value) {
|
|
138
|
-
return typeof value === 'function';
|
|
139
|
-
}
|
|
140
|
-
|
|
141
|
-
/**
|
|
142
|
-
* 去掉字符串前后所有空格
|
|
143
|
-
* @param str
|
|
144
|
-
* @returns string
|
|
145
|
-
*/
|
|
146
|
-
}, {
|
|
147
|
-
key: "trim",
|
|
148
|
-
value: function trim(str) {
|
|
149
|
-
return (str + '').replace(/(^[\s\n\t]+|[\s\n\t]+$)/g, '');
|
|
150
|
-
}
|
|
151
|
-
|
|
152
|
-
/**
|
|
153
|
-
* 获取数组为几维数组
|
|
154
|
-
* @param arr
|
|
155
|
-
* @returns number
|
|
156
|
-
*/
|
|
157
|
-
}, {
|
|
158
|
-
key: "getArrayDimension",
|
|
159
|
-
value: function getArrayDimension(arr) {
|
|
160
|
-
// 如果不是一个数组,返回 0
|
|
161
|
-
if (!CrUtil.isArray(arr)) return 0;
|
|
162
|
-
|
|
163
|
-
// 找到数组中的最大维度
|
|
164
|
-
var maxDimension = 0;
|
|
165
|
-
for (var i = 0; i < arr.length; i++) {
|
|
166
|
-
var dimension = CrUtil.getArrayDimension(arr[i]);
|
|
167
|
-
maxDimension = Math.max(maxDimension, dimension);
|
|
168
|
-
}
|
|
169
|
-
// 返回最大维度加1,代表当前层数
|
|
170
|
-
return maxDimension + 1;
|
|
171
|
-
}
|
|
172
|
-
|
|
173
|
-
/**
|
|
174
|
-
* 深拷贝
|
|
175
|
-
* @param value
|
|
176
|
-
* @returns
|
|
177
|
-
*/
|
|
178
|
-
}, {
|
|
179
|
-
key: "cloneDeep",
|
|
180
|
-
value: function cloneDeep(value) {
|
|
181
|
-
return _cloneDeep(value);
|
|
182
|
-
}
|
|
183
|
-
|
|
184
|
-
/**
|
|
185
|
-
* 深拷贝
|
|
186
|
-
* @param target
|
|
187
|
-
* @deprecated 即将移除,使用 {@link CrUtil.cloneDeep} 替代
|
|
188
|
-
* @returns
|
|
189
|
-
*/
|
|
190
|
-
}, {
|
|
191
|
-
key: "deepCopy",
|
|
192
|
-
value: function deepCopy(target) {
|
|
193
|
-
var _target;
|
|
194
|
-
if (CrUtil.isArray(target)) {
|
|
195
|
-
_target = [];
|
|
196
|
-
for (var i = 0, len = target.length; i < len; i++) {
|
|
197
|
-
if (CrUtil.isArray(target[i]) || CrUtil.isObject(target[i])) {
|
|
198
|
-
_target.push(CrUtil.deepCopy(target[i]));
|
|
199
|
-
} else {
|
|
200
|
-
_target.push(target[i]);
|
|
201
|
-
}
|
|
202
|
-
}
|
|
203
|
-
} else if (CrUtil.isObject(target)) {
|
|
204
|
-
_target = {};
|
|
205
|
-
for (var _i in target) {
|
|
206
|
-
if (CrUtil.isArray(target[_i]) || CrUtil.isObject(target[_i])) {
|
|
207
|
-
_target[_i] = CrUtil.deepCopy(target[_i]);
|
|
208
|
-
} else {
|
|
209
|
-
_target[_i] = target[_i];
|
|
210
|
-
}
|
|
211
|
-
}
|
|
212
|
-
} else {
|
|
213
|
-
_target = target;
|
|
214
|
-
}
|
|
215
|
-
return _target;
|
|
216
|
-
}
|
|
217
|
-
|
|
218
|
-
/**
|
|
219
|
-
* 列表数据转树型数据
|
|
220
|
-
* @param listData
|
|
221
|
-
* @param settings
|
|
222
|
-
* @param settings.idField 默认值 id
|
|
223
|
-
* @param settings.pidField 默认值 parentId
|
|
224
|
-
* @param settings.childrenField 默认值 children
|
|
225
|
-
* @deprecated 即将移除,使用 {@link CrTreeUtil.listToTree} 替代
|
|
226
|
-
* @returns
|
|
227
|
-
*/
|
|
228
|
-
}, {
|
|
229
|
-
key: "listToTreeData",
|
|
230
|
-
value: function listToTreeData(listData, settings) {
|
|
231
|
-
var options = Object.assign({
|
|
232
|
-
idField: 'id',
|
|
233
|
-
pidField: 'parentId',
|
|
234
|
-
childrenField: 'children',
|
|
235
|
-
isDeepCopy: false,
|
|
236
|
-
getData: function getData(item) {
|
|
237
|
-
return item;
|
|
238
|
-
}
|
|
239
|
-
}, settings);
|
|
240
|
-
var idField = options.idField,
|
|
241
|
-
pidField = options.pidField,
|
|
242
|
-
childrenField = options.childrenField,
|
|
243
|
-
isDeepCopy = options.isDeepCopy,
|
|
244
|
-
getData = options.getData;
|
|
245
|
-
if (isDeepCopy) {
|
|
246
|
-
listData = CrUtil.deepCopy(listData);
|
|
247
|
-
}
|
|
248
|
-
|
|
249
|
-
// 构建索引
|
|
250
|
-
var pidMap = new Map();
|
|
251
|
-
var idMap = new Map();
|
|
252
|
-
var _iterator = _createForOfIteratorHelper(listData),
|
|
253
|
-
_step;
|
|
254
|
-
try {
|
|
255
|
-
for (_iterator.s(); !(_step = _iterator.n()).done;) {
|
|
256
|
-
var _item = _step.value;
|
|
257
|
-
var pid = _item[pidField];
|
|
258
|
-
var id = _item[idField];
|
|
259
|
-
if (!pidMap.has(pid)) {
|
|
260
|
-
pidMap.set(pid, []);
|
|
261
|
-
}
|
|
262
|
-
pidMap.get(pid).push(_item);
|
|
263
|
-
idMap.set(id, _item);
|
|
264
|
-
}
|
|
265
|
-
|
|
266
|
-
// 递归构建树 + 字段过滤
|
|
267
|
-
} catch (err) {
|
|
268
|
-
_iterator.e(err);
|
|
269
|
-
} finally {
|
|
270
|
-
_iterator.f();
|
|
271
|
-
}
|
|
272
|
-
var buildTree = function buildTree(pid) {
|
|
273
|
-
var children = pidMap.get(pid) || [];
|
|
274
|
-
return children.map(function (item) {
|
|
275
|
-
var rawChildren = buildTree(item[idField]);
|
|
276
|
-
var node = _objectSpread({}, getData(item));
|
|
277
|
-
if (rawChildren.length > 0) {
|
|
278
|
-
node[childrenField] = rawChildren;
|
|
279
|
-
}
|
|
280
|
-
return node;
|
|
281
|
-
});
|
|
282
|
-
};
|
|
283
|
-
|
|
284
|
-
// 收集所有根节点 pid,去重
|
|
285
|
-
var rootPids = new Set();
|
|
286
|
-
var _iterator2 = _createForOfIteratorHelper(pidMap.keys()),
|
|
287
|
-
_step2;
|
|
288
|
-
try {
|
|
289
|
-
for (_iterator2.s(); !(_step2 = _iterator2.n()).done;) {
|
|
290
|
-
var _pid = _step2.value;
|
|
291
|
-
if (_pid === undefined || _pid === null || _pid === 0 || !idMap.has(_pid)) {
|
|
292
|
-
rootPids.add(_pid);
|
|
293
|
-
}
|
|
294
|
-
}
|
|
295
|
-
|
|
296
|
-
// 构建最终树
|
|
297
|
-
} catch (err) {
|
|
298
|
-
_iterator2.e(err);
|
|
299
|
-
} finally {
|
|
300
|
-
_iterator2.f();
|
|
301
|
-
}
|
|
302
|
-
var tree = [];
|
|
303
|
-
var _iterator3 = _createForOfIteratorHelper(rootPids),
|
|
304
|
-
_step3;
|
|
305
|
-
try {
|
|
306
|
-
for (_iterator3.s(); !(_step3 = _iterator3.n()).done;) {
|
|
307
|
-
var _pid2 = _step3.value;
|
|
308
|
-
tree.push.apply(tree, _toConsumableArray(buildTree(_pid2)));
|
|
309
|
-
}
|
|
310
|
-
|
|
311
|
-
// 只构建根节点(pid 为 null / 0 / undefined / 不存在)
|
|
312
|
-
// const tree = buildTree(undefined)
|
|
313
|
-
// .concat(buildTree(null))
|
|
314
|
-
// .concat(buildTree(0))
|
|
315
|
-
// .concat(
|
|
316
|
-
// Array.from(pidMap.keys())
|
|
317
|
-
// .filter((pid) => !idMap.has(pid))
|
|
318
|
-
// .flatMap((pid) => buildTree(pid)),
|
|
319
|
-
// );
|
|
320
|
-
} catch (err) {
|
|
321
|
-
_iterator3.e(err);
|
|
322
|
-
} finally {
|
|
323
|
-
_iterator3.f();
|
|
324
|
-
}
|
|
325
|
-
return tree;
|
|
326
|
-
}
|
|
327
|
-
|
|
328
|
-
/**
|
|
329
|
-
* 树型数据转列表数据
|
|
330
|
-
* @param treeData
|
|
331
|
-
* @param settings
|
|
332
|
-
* @param settings.idField 默认值 id
|
|
333
|
-
* @param settings.pidField 默认值 parentId
|
|
334
|
-
* @param settings.childrenField 默认值 children
|
|
335
|
-
* @deprecated 即将移除,使用 {@link CrTreeUtil.treeToList} 替代
|
|
336
|
-
* @returns
|
|
337
|
-
*/
|
|
338
|
-
}, {
|
|
339
|
-
key: "treeDataToListData",
|
|
340
|
-
value: function treeDataToListData(treeData) {
|
|
341
|
-
var pid = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 0;
|
|
342
|
-
var settings = arguments.length > 2 ? arguments[2] : undefined;
|
|
343
|
-
var options = Object.assign({
|
|
344
|
-
idField: 'id',
|
|
345
|
-
pidField: 'parentId',
|
|
346
|
-
childrenField: 'children',
|
|
347
|
-
isDeepCopy: false
|
|
348
|
-
}, settings);
|
|
349
|
-
var listData = [];
|
|
350
|
-
for (var i = 0; i < treeData.length; i++) {
|
|
351
|
-
var node = treeData[i];
|
|
352
|
-
var _item2 = _objectSpread({}, node);
|
|
353
|
-
_item2[options.pidField] = pid;
|
|
354
|
-
delete _item2[options.childrenField];
|
|
355
|
-
listData.push(_item2);
|
|
356
|
-
if (node[options.childrenField]) {
|
|
357
|
-
var _listData;
|
|
358
|
-
var childrenList = this.treeDataToListData(node[options.childrenField], _item2[options.idField], settings);
|
|
359
|
-
(_listData = listData).push.apply(_listData, _toConsumableArray(childrenList));
|
|
360
|
-
}
|
|
361
|
-
}
|
|
362
|
-
if (options.isDeepCopy) {
|
|
363
|
-
listData = CrUtil.deepCopy(listData);
|
|
364
|
-
}
|
|
365
|
-
return listData;
|
|
366
|
-
}
|
|
367
|
-
|
|
368
|
-
/**
|
|
369
|
-
* 获取所有父级数据(包含自身)
|
|
370
|
-
* @param listData
|
|
371
|
-
* @param value
|
|
372
|
-
* @param settings
|
|
373
|
-
* @param settings.valueField 默认值 value
|
|
374
|
-
* @param settings.idField 默认值 id
|
|
375
|
-
* @param settings.pidField 默认值 parentId
|
|
376
|
-
* @deprecated 即将移除,使用 {@link CrTreeUtil.getFlatParentDatas} 替代
|
|
377
|
-
* @returns
|
|
378
|
-
*/
|
|
379
|
-
}, {
|
|
380
|
-
key: "getParentNodes",
|
|
381
|
-
value: function getParentNodes(listData, value, settings) {
|
|
382
|
-
var options = Object.assign({
|
|
383
|
-
valueField: 'value',
|
|
384
|
-
idField: 'id',
|
|
385
|
-
pidField: 'parentId',
|
|
386
|
-
getData: function getData(item) {
|
|
387
|
-
return item;
|
|
388
|
-
}
|
|
389
|
-
}, settings);
|
|
390
|
-
if (!(listData && listData.length > 0) || !value) {
|
|
391
|
-
return [];
|
|
392
|
-
}
|
|
393
|
-
var idField = options.idField;
|
|
394
|
-
var pidField = options.pidField;
|
|
395
|
-
var valueField = options.valueField;
|
|
396
|
-
var nodes = [];
|
|
397
|
-
var node = listData.find(function (item) {
|
|
398
|
-
return item[valueField] == value;
|
|
399
|
-
});
|
|
400
|
-
if (node) {
|
|
401
|
-
nodes.push(options.getData(node));
|
|
402
|
-
while (node && node[pidField]) {
|
|
403
|
-
var parentOption = listData.find(
|
|
404
|
-
// eslint-disable-next-line @typescript-eslint/no-loop-func
|
|
405
|
-
function (item) {
|
|
406
|
-
return item[idField] == node[pidField];
|
|
407
|
-
});
|
|
408
|
-
if (parentOption) {
|
|
409
|
-
nodes.push(options.getData(parentOption));
|
|
410
|
-
}
|
|
411
|
-
node = parentOption;
|
|
412
|
-
}
|
|
413
|
-
}
|
|
414
|
-
nodes.reverse();
|
|
415
|
-
return nodes;
|
|
416
|
-
}
|
|
417
|
-
|
|
418
|
-
/**
|
|
419
|
-
* 参数序列化
|
|
420
|
-
* @param params {a:'1',b:{},c:[]}
|
|
421
|
-
* @returns
|
|
422
|
-
*/
|
|
423
|
-
}, {
|
|
424
|
-
key: "paramsSerializer",
|
|
425
|
-
value: function paramsSerializer(params, settings) {
|
|
426
|
-
var options = Object.assign({
|
|
427
|
-
isFilterNonNull: false
|
|
428
|
-
}, settings);
|
|
429
|
-
if (options.isFilterNonNull) {
|
|
430
|
-
Object.keys(params).forEach(function (key) {
|
|
431
|
-
if (params[key] === null || params[key] === undefined || params[key] === '') {
|
|
432
|
-
delete params[key];
|
|
433
|
-
}
|
|
434
|
-
});
|
|
435
|
-
}
|
|
436
|
-
return Qs.stringify(params);
|
|
437
|
-
}
|
|
438
|
-
|
|
439
|
-
/**
|
|
440
|
-
* 参数解析
|
|
441
|
-
* @param {*} str
|
|
442
|
-
* @param {*} settings
|
|
443
|
-
* @returns
|
|
444
|
-
*/
|
|
445
|
-
}, {
|
|
446
|
-
key: "paramsParse",
|
|
447
|
-
value: function paramsParse(str, settings) {
|
|
448
|
-
var obj = {};
|
|
449
|
-
var option = Object.assign({
|
|
450
|
-
ignoreQueryPrefix: true
|
|
451
|
-
}, settings);
|
|
452
|
-
if (str) {
|
|
453
|
-
obj = Qs.parse(str, option);
|
|
454
|
-
}
|
|
455
|
-
return obj;
|
|
456
|
-
}
|
|
457
|
-
|
|
458
|
-
/**
|
|
459
|
-
* 获取 URL 参数
|
|
460
|
-
* @param {*} url
|
|
461
|
-
* @returns
|
|
462
|
-
* @example
|
|
463
|
-
* "https://example.com?foo=bar&baz=qux" => {"query":{"foo":"bar","baz":"qux"},"hash":{},"all":{"foo":"bar","baz":"qux"}}
|
|
464
|
-
* "https://example.com/page?foo=1#/?a=1&b=2" => {"query":{"foo":"1"},"hash":{"/":"","a":"1","b":"2"},"all":{"foo":"1","/":"","a":"1","b":"2"}},
|
|
465
|
-
*/
|
|
466
|
-
}, {
|
|
467
|
-
key: "getQueryParams",
|
|
468
|
-
value: function getQueryParams(url) {
|
|
469
|
-
var query = {};
|
|
470
|
-
var hash = {};
|
|
471
|
-
var all = {};
|
|
472
|
-
var parse = function parse(queryString) {
|
|
473
|
-
if (!queryString) {
|
|
474
|
-
return {};
|
|
475
|
-
}
|
|
476
|
-
try {
|
|
477
|
-
return Qs.parse(queryString);
|
|
478
|
-
} catch (_unused) {
|
|
479
|
-
var result = {};
|
|
480
|
-
if (!queryString) return result;
|
|
481
|
-
queryString.split('&').forEach(function (pair) {
|
|
482
|
-
if (!pair) return;
|
|
483
|
-
var _pair$split = pair.split('='),
|
|
484
|
-
_pair$split2 = _slicedToArray(_pair$split, 2),
|
|
485
|
-
key = _pair$split2[0],
|
|
486
|
-
val = _pair$split2[1];
|
|
487
|
-
if (key) result[decodeURIComponent(key)] = decodeURIComponent(val || '');
|
|
488
|
-
});
|
|
489
|
-
return result;
|
|
490
|
-
}
|
|
491
|
-
};
|
|
492
|
-
try {
|
|
493
|
-
var _url$split = url.split('#'),
|
|
494
|
-
_url$split2 = _slicedToArray(_url$split, 2),
|
|
495
|
-
base = _url$split2[0],
|
|
496
|
-
hashPart = _url$split2[1];
|
|
497
|
-
var queryPart = base.split('?')[1];
|
|
498
|
-
Object.assign(query, parse(queryPart));
|
|
499
|
-
if (hashPart) {
|
|
500
|
-
var _iterator4 = _createForOfIteratorHelper(hashPart.split('?')),
|
|
501
|
-
_step4;
|
|
502
|
-
try {
|
|
503
|
-
for (_iterator4.s(); !(_step4 = _iterator4.n()).done;) {
|
|
504
|
-
var part = _step4.value;
|
|
505
|
-
Object.assign(hash, parse(part));
|
|
506
|
-
}
|
|
507
|
-
} catch (err) {
|
|
508
|
-
_iterator4.e(err);
|
|
509
|
-
} finally {
|
|
510
|
-
_iterator4.f();
|
|
511
|
-
}
|
|
512
|
-
}
|
|
513
|
-
Object.assign(all, query, hash);
|
|
514
|
-
} catch (error) {
|
|
515
|
-
console.error('getQueryParams:', error);
|
|
516
|
-
}
|
|
517
|
-
return {
|
|
518
|
-
query: query,
|
|
519
|
-
hash: hash,
|
|
520
|
-
all: all
|
|
521
|
-
};
|
|
522
|
-
}
|
|
523
|
-
|
|
524
|
-
/**
|
|
525
|
-
* 版本号比较
|
|
526
|
-
* @param v1
|
|
527
|
-
* @param v2
|
|
528
|
-
* @returns number
|
|
529
|
-
* @description v1大于v2(1)、v1小于v2(-1)、v1等于v2(0)
|
|
530
|
-
*/
|
|
531
|
-
}, {
|
|
532
|
-
key: "compareVersion",
|
|
533
|
-
value: function compareVersion(v1, v2) {
|
|
534
|
-
var v1Arr = CrUtil.trim(v1).split('.');
|
|
535
|
-
var v2Arr = CrUtil.trim(v2).split('.');
|
|
536
|
-
var len = Math.max(v1.length, v2.length);
|
|
537
|
-
while (v1Arr.length < len) {
|
|
538
|
-
v1Arr.push('0');
|
|
539
|
-
}
|
|
540
|
-
while (v2Arr.length < len) {
|
|
541
|
-
v2Arr.push('0');
|
|
542
|
-
}
|
|
543
|
-
for (var i = 0; i < len; i++) {
|
|
544
|
-
var num1 = parseInt(v1Arr[i]);
|
|
545
|
-
var num2 = parseInt(v2Arr[i]);
|
|
546
|
-
if (num1 > num2) {
|
|
547
|
-
return 1;
|
|
548
|
-
} else if (num1 < num2) {
|
|
549
|
-
return -1;
|
|
550
|
-
}
|
|
551
|
-
}
|
|
552
|
-
return 0;
|
|
553
|
-
}
|
|
554
|
-
|
|
555
|
-
/**
|
|
556
|
-
* 根据 ids 获取相对应的数据名称
|
|
557
|
-
* @param data
|
|
558
|
-
* @param ids
|
|
559
|
-
* @param settings
|
|
560
|
-
* @returns string
|
|
561
|
-
*/
|
|
562
|
-
}, {
|
|
563
|
-
key: "getDataNameByIds",
|
|
564
|
-
value: function getDataNameByIds(data, ids, settings) {
|
|
565
|
-
var options = Object.assign({
|
|
566
|
-
sep: '、',
|
|
567
|
-
idField: 'id',
|
|
568
|
-
nameField: 'name'
|
|
569
|
-
}, settings);
|
|
570
|
-
var str = '';
|
|
571
|
-
if (ids && ids.length > 0) {
|
|
572
|
-
str = ids.map(function (id) {
|
|
573
|
-
var item = data.find(function (item) {
|
|
574
|
-
return item[options.idField] == id;
|
|
575
|
-
});
|
|
576
|
-
if (item) {
|
|
577
|
-
return item[options.nameField];
|
|
578
|
-
} else {
|
|
579
|
-
return '';
|
|
580
|
-
}
|
|
581
|
-
}).join(options.sep);
|
|
582
|
-
}
|
|
583
|
-
return str;
|
|
584
|
-
}
|
|
585
|
-
|
|
586
|
-
/**
|
|
587
|
-
* 追加html标签属性值
|
|
588
|
-
* @param htmlStr
|
|
589
|
-
* @param tagName
|
|
590
|
-
* @param attrName
|
|
591
|
-
* @param newAttrValue
|
|
592
|
-
* @returns string
|
|
593
|
-
*/
|
|
594
|
-
}, {
|
|
595
|
-
key: "appendHtmlTagAttr",
|
|
596
|
-
value: function appendHtmlTagAttr(htmlStr, tagName, attrName, newAttrValue) {
|
|
597
|
-
var regex = new RegExp("(<".concat(tagName, "\\s+)([^>]*?)([^>]*>)"), 'g');
|
|
598
|
-
var replacedHtml = htmlStr.replace(regex, function (match, p1, p2, p3) {
|
|
599
|
-
var _regex = new RegExp("".concat(attrName, "=\"(.*?)\""), 'g');
|
|
600
|
-
if (_regex.exec(match)) {
|
|
601
|
-
var __regex = new RegExp("(<".concat(tagName, "\\s+)([^>]*?)").concat(attrName, "=\"(.*)\"([^>]*>)"), 'g');
|
|
602
|
-
return match.replace(__regex, function (_match, _p1, _p2, _p3, _p4) {
|
|
603
|
-
return _p1 + _p2 + "".concat(attrName, "=\"").concat(_p3, " ").concat(newAttrValue, "\"") + _p4;
|
|
604
|
-
});
|
|
605
|
-
} else {
|
|
606
|
-
return p1 + "".concat(attrName, "=\"").concat(newAttrValue, "\" ") + p3;
|
|
607
|
-
}
|
|
608
|
-
});
|
|
609
|
-
replacedHtml = replacedHtml.replace(new RegExp("<".concat(tagName, ">"), 'g'), "<".concat(tagName, " ").concat(attrName, "=\"").concat(newAttrValue, "\">"));
|
|
610
|
-
return replacedHtml;
|
|
611
|
-
}
|
|
612
|
-
|
|
613
|
-
/**
|
|
614
|
-
* 比较数据差异
|
|
615
|
-
* @param data1
|
|
616
|
-
* @param data2
|
|
617
|
-
* @returns
|
|
618
|
-
*/
|
|
619
|
-
}, {
|
|
620
|
-
key: "compareDataDiff",
|
|
621
|
-
value: function compareDataDiff(data1, data2) {
|
|
622
|
-
var diffFieldSet = {};
|
|
623
|
-
var compare = function compare(path, o1, o2) {
|
|
624
|
-
if (CrUtil.isArray(o1) && CrUtil.isArray(o2)) {
|
|
625
|
-
// 如果两者都是数组,比较它们的长度和内容
|
|
626
|
-
var lengthDiff = o1.length - o2.length;
|
|
627
|
-
if (lengthDiff !== 0) {
|
|
628
|
-
// 数组长度不同
|
|
629
|
-
diffFieldSet[path] = 'modified';
|
|
630
|
-
if (lengthDiff > 0) {
|
|
631
|
-
// o1比o2长,所以o1中有多余的元素
|
|
632
|
-
for (var i = o2.length; i < o1.length; i++) {
|
|
633
|
-
diffFieldSet["".concat(path, "[").concat(i, "]")] = 'removed'; // 只在o1中存在
|
|
634
|
-
}
|
|
635
|
-
} else {
|
|
636
|
-
// o2比o1长,所以o2中有新增的元素
|
|
637
|
-
for (var _i2 = o1.length; _i2 < o2.length; _i2++) {
|
|
638
|
-
diffFieldSet["".concat(path, "[").concat(_i2, "]")] = 'added'; // 只在o2中存在
|
|
639
|
-
}
|
|
640
|
-
}
|
|
641
|
-
} else {
|
|
642
|
-
for (var _i3 = 0; _i3 < o1.length; _i3++) {
|
|
643
|
-
compare("".concat(path, "[").concat(_i3, "]"), o1[_i3], o2[_i3]);
|
|
644
|
-
}
|
|
645
|
-
}
|
|
646
|
-
} else if (CrUtil.isObject(o1) && CrUtil.isObject(o2)) {
|
|
647
|
-
// 如果两者都是对象,遍历它们的属性
|
|
648
|
-
// eslint-disable-next-line guard-for-in
|
|
649
|
-
for (var key in o1) {
|
|
650
|
-
var _path = path ? "".concat(path, ".").concat(key) : key;
|
|
651
|
-
if (Object.prototype.hasOwnProperty.call(o1, key) && !(key in o2)) {
|
|
652
|
-
diffFieldSet[_path] = 'removed'; // 只在o1中存在
|
|
653
|
-
} else if (Object.prototype.hasOwnProperty.call(o2, key)) {
|
|
654
|
-
compare(_path, o1[key], o2[key]);
|
|
655
|
-
}
|
|
656
|
-
}
|
|
657
|
-
// 检查o2中是否存在o1中没有的属性
|
|
658
|
-
// eslint-disable-next-line guard-for-in
|
|
659
|
-
for (var _key in o2) {
|
|
660
|
-
var _path2 = path ? "".concat(path, ".").concat(_key) : _key;
|
|
661
|
-
if (Object.prototype.hasOwnProperty.call(o2, _key) && !(_key in o1)) {
|
|
662
|
-
diffFieldSet[_path2] = 'added'; // 只在o2中存在
|
|
663
|
-
}
|
|
664
|
-
}
|
|
665
|
-
} else if (o1 !== o2) {
|
|
666
|
-
// 既不是对象也不是数组,直接比较值
|
|
667
|
-
diffFieldSet[path] = 'modified';
|
|
668
|
-
}
|
|
669
|
-
};
|
|
670
|
-
compare('', data1, data2);
|
|
671
|
-
return diffFieldSet;
|
|
672
|
-
}
|
|
673
|
-
|
|
674
|
-
/**
|
|
675
|
-
* 格式化为千分位,主要用于展示格式化
|
|
676
|
-
* @param value
|
|
677
|
-
* @returns 12345.6789 => 12,345.6789
|
|
678
|
-
*/
|
|
679
|
-
}, {
|
|
680
|
-
key: "fmtThousands",
|
|
681
|
-
value: function fmtThousands(value) {
|
|
682
|
-
if (value == undefined || value == null || isNaN(Number(value))) {
|
|
683
|
-
return String(value);
|
|
684
|
-
}
|
|
685
|
-
var _String$split = String(value).split('.'),
|
|
686
|
-
_String$split2 = _slicedToArray(_String$split, 2),
|
|
687
|
-
intPart = _String$split2[0],
|
|
688
|
-
decimalPart = _String$split2[1];
|
|
689
|
-
var formattedInt = intPart.replace(/\B(?=(\d{3})+(?!\d))/g, ',');
|
|
690
|
-
return decimalPart ? "".concat(formattedInt, ".").concat(decimalPart) : formattedInt;
|
|
691
|
-
}
|
|
692
|
-
|
|
693
|
-
/**
|
|
694
|
-
* 格式化为千分位格式
|
|
695
|
-
* @param value
|
|
696
|
-
* @returns
|
|
697
|
-
*/
|
|
698
|
-
}, {
|
|
699
|
-
key: "formatThousands",
|
|
700
|
-
value: function formatThousands(value) {
|
|
701
|
-
if (value == null) return '';
|
|
702
|
-
var raw = String(value).trim();
|
|
703
|
-
if (!raw) return '';
|
|
704
|
-
// 是否末尾点
|
|
705
|
-
var hasTrailingDot = raw.endsWith('.');
|
|
706
|
-
// 只保留数字/点/负号
|
|
707
|
-
var str = raw.replace(/[^\d.-]/g, '');
|
|
708
|
-
// 负号只留开头
|
|
709
|
-
var sign = str.startsWith('-') ? '-' : '';
|
|
710
|
-
str = str.replace(/-/g, '');
|
|
711
|
-
// 提取整数/小数(只认第一个点)
|
|
712
|
-
var _str$split = str.split('.', 2),
|
|
713
|
-
_str$split2 = _slicedToArray(_str$split, 2),
|
|
714
|
-
intRaw = _str$split2[0],
|
|
715
|
-
_str$split2$ = _str$split2[1],
|
|
716
|
-
decRaw = _str$split2$ === void 0 ? '' : _str$split2$;
|
|
717
|
-
// 整数去逗号+前导0
|
|
718
|
-
var intPart = intRaw.replace(/,/g, '').replace(/^0+(?=\d)/, '');
|
|
719
|
-
// 千分位
|
|
720
|
-
var formattedInt = intPart ? intPart.replace(/\B(?=(\d{3})+(?!\d))/g, ',') : '';
|
|
721
|
-
var result = sign + formattedInt;
|
|
722
|
-
if (decRaw || hasTrailingDot) result += '.';
|
|
723
|
-
if (decRaw) result += decRaw;
|
|
724
|
-
return result;
|
|
725
|
-
}
|
|
726
|
-
|
|
727
|
-
/**
|
|
728
|
-
* 解析千分位格式
|
|
729
|
-
* @param value
|
|
730
|
-
* @returns
|
|
731
|
-
*/
|
|
732
|
-
}, {
|
|
733
|
-
key: "parseThousands",
|
|
734
|
-
value: function parseThousands(value) {
|
|
735
|
-
if (value == null) return '';
|
|
736
|
-
return String(value).trim().replace(/,/g, '') // 去千分位
|
|
737
|
-
.replace(/[^\d.-]/g, '') // 去非法
|
|
738
|
-
.replace(/(?!^)-/g, '') // 只留首负号
|
|
739
|
-
.replace(/(\..*)\./g, '$1'); // 只留第一个点
|
|
740
|
-
}
|
|
741
|
-
}]);
|
|
742
|
-
return CrUtil;
|
|
743
|
-
}();
|
|
744
|
-
export { CrUtil as default };
|