# 功能描述

tools工具提供系统常用的函数。
源码路径: node_modules/sei-ui/src/utils/tools.js。

# 引入方式

import {tools} from 'sei-ui'
1

# 方法Methods

export default {
    /**
     * 获得发送到后端的插入数据的json
     * @param module: 模块名
     * @param row: 插入的数据,json格式或json数组
     * @returns {{head: {module: *}, data: [{action: string, rows: Array}]}}
     */
    getAddJson(module, row);
    
    /**
     * 获得发送到后端的修改数据的json
     * @param module: 模块名
     * @param keyVal: 主键值
     * @param row: 修改的数据,json格式
     * @returns {{head: {module: *}, data: [{action: string, rows: [{row: *, keyVal: *}]}]}}
     */
    getEditJson(module, keyVal, row);
    
    /**
     * 获得发送到后端的删除数据的json
     * @param module: 模块名
     * @param keyVal: 主键值
     * @returns {{head: {module: *}, data: [{action: string, rows: [{keyVal: *}]}]}}
     */
    getDeleteJson(module, keyVal);
    
    /**
     * 获得32位长的唯一id
     * @returns {*}
     */
    getUUID();
    
    /**
     * 获得指定长度的随机小写字符或数字
     */
    getRandom(len);
    
    /**
     * 获得当前登录的用户所有信息
     * @returns {any | {}}
     */
    getUser();
    /**
     * 获得当前用户的单位所有信息
     * @returns {any|{}}
     */
    getOrg();
    
    /**
     * 获得登录用户的token
     * @returns {string}
     */
    getToken();
    
    /**
     * 获得当前登录的用户账号(编号)
     * @returns {null|number}
     */
    getUid();
    /**
     * 获得当前登录的用户名
     * @returns {string}
     */
    getUname();
    
    /**
     * 获得当前登录的组织机构代码,注意:可能有多个,多个使用逗号分割
     * @returns {string}
     */
    getOid();
    
    /**
     * 判断用户是否在该部门中
     * @param oid: 部门编号
     * @returns {boolean}
     */
    oidInclude(oid);
    
    /**
     * 获得当前登录用户的第一个单位名称
     * @returns {string}
     */
    getOidName();
    
    /**
     * 获得当前用户的所有的单位名称
     * @returns {*[]}
     */
    getOidNames();
    
    /**
     * 获得当前登录的用户角色编号,多个角色逗号分隔
     * @returns {string}
     */
    getRid();
    /**
     * 判断用户是否拥有该角色
     * @param rid: 要查找的角色名称
     * @returns {boolean}
     */
    ridInclude(rid);
    
    /**
     * 获得当前登录用户的用户类型
     * @returns {string}
     */
    getUType();
    /**
     * 获得数组中是否包含json对象的key值
     * @param array
     * @param key
     * @param val
     * @returns {boolean}
     */
    arrayIncludes(array, key, val);
    
    /**
     * 查询当前用户组织机构类型中是否存在指定的类型
     * @param type
     * @returns {boolean}
     */
    getOrgExistValue(type, value);
    
    /**
     * 截取字符串中指定字符串后的内容
     * @param str: 原始字符串
     * @param sub: 查找的字符串
     * @returns {string|null}
     */
    subAfterString(str, sub);
    
    /**
     * 获得el对象的css属性值.例如:width/height/margin
     * @param obj: vue的el对象
     * @param attr: 要取得的css属性名称
     * @returns {string}
     */
    getStyle(obj, attr);
    
    /**
     * 计算自身高度(通过父元素的高度减去前置元素的高度)
     * @param el: vue的el对象
     * @returns {number}
     */
    getHeight(el);
    
    
    /**
     * 对象拷贝,注意:obj中还有对象则为拷贝指向该对象的引用而非该真实对象
     * @param obj: 源对象
     * @returns {null|any}
     */
    clone(obj);
    /**
     * 获得数组中包括json对象的key值在数组中的索引位置
     * @param array: json数组
     * @param json: 要查找的json对象
     * @param key: 比较的json对象中的key
     * @returns {null|number}
     */
    arrayIndexOf(array, json, key);
    
    /**
     * 获得数组中最后一个满足条件的json的索引
     * @param array
     * @param json
     * @param key
     * @returns {null|number}
     */
    arrayLastIndexOf(array, json, key);
    
    /**
     * 满足条件的个数
     * @param array
     * @param json
     * @param key
     * @returns {*}
     */
    arrayIndexCount(array, json, key);
    
    /**
     * 判断是否是字符串
     * @param str
     * @returns {boolean}
     */
    isString(str);
    
    /**
     * 判断是否是Json对象
     * @param obj
     * @returns {boolean}
     */
    isJson(obj);
    
    /**
     * 判断json是否为空值
     * @param json
     * @returns {boolean}
     */
    isEmpty(json);
    
    /**
     * 遍历解析Json
     * @param jsonObj: 要遍历的json对象
     * @param callBack: 回调方法,参数: 1.当前子json, 2.当前key, 3.当前key的值
     */
    parseJson(jsonObj, callBack);
    
    /**
     * 字符串格式化
     * @param str: 要格式化的字符串
     * @param args: 格式化参数值
     * @returns {void|*}
     */
    format(str, args);
    
    /**
     * 判断两个json的差异,但不包括children项
     * @param oldJson
     * @param newJson
     * @returns {*}
     */
    diff(oldJson, newJson);
    
    /**
     * 首字母大写
     * @param first
     * @param rest
     * @param lowerRest: 为true代表后面的字符全部转小写,否则后面的字符原样不变
     * @returns {string}
     */
    funct capitalize ([first, ...rest], lowerRest = false);
    
    /**
     * 数据转换
     * @param data: 要转换的json数据对象{}
     * @param conver: 转换类型,例如将ff字段在数组与字符串间转换:{ff: 'array->string'}
     */
    dataConver(data, conver);
    
    /**
     * 将一维的扁平数组转换为多层级对象,针对父级儿子各一条记录的情况
     * @param data: 要转换的json数组
     * @param option: {pid: 父亲字段, id: id字段名称}
     * @param pidVal: 父字段值,如果有值则代表只建立顶层为该值的树
     * @param conver: 转换
     * @param rowCallBack: 每一行的回调,返回false则不加入树中
     * @returns 返回建立的树对象{[]}
     */
    towToTree(data, option, pidVal = null, conver, rowCallBack);
    
    /**
     * 针对父亲儿子都在一条记录中,因此分离出父亲并添加父亲行
     * @param data: json数组
     * @param option:{pid: 父亲字段, keyField: id字段名称, label: 名称字段名称}
     * @param conver: 数据转换,常用于将字符串转为数组等
     * @param callBack: 每次产生父节点记录后的回调,用于外部修正父节点
     * @returns {[]}
     */
    oneToTree(data, option, conver, callBack);
    
    /**
     * 将json数组转化为树型结构,父子为同1条记录,用户级联选择(待测试)
     * @param data:list数组
     * @param parm: {}
     * @returns {Array}
     */
    mapToTree(data, parm=[{label: '_pid'}, {id: 'id'}]);
    
    /**
     * 在树中查找指定字段和指定值的节点和所在的当前上层树
     * @param data:数据
     * @param id:字段
     * @param value:对象或者具体值
     * @returns {{node: 当前节点, tree: 当前节点所在的树, index: 当前节点在当前层的索引}}
     */
    findTree(data, id, value, options = {children: 'children'});
    
    /**
     * 查找树形结构当前节点的所有父级结构
     * @param data: 树形结构数据
     * @param field: 比较的字段
     * @param fieldValue: 比较的值
     * @returns {[]}
     */
    findTreeParents(data, field, fieldValue);
    
    
    /**
     * 在树中查找指定字段和指定值所在的当前节点
     * @param data:数据
     * @param id:字段
     * @param value:具体值
     * @returns: {当前节点}
     */
    findTreeNode(data, id, value);
    
    /**
     * 在树中查找指定字段和指定值所在的当前节点的索引
     * @param data:数据
     * @param id:字段
     * @param value:具体值
     * @returns: {当前节点的索引}
     */
    findIndexTreeNode(data, id, value, expand, callBack);
    
    /**
     * 在树中查找与当前对象相等的节点索引
     * @param data:数据
     * @param obj:具体对象
     * @returns: {当前节点索引值}
     */
    findIndexTreeNodeByObject(data, obj);
    
    /**
     *
     * @param data
     * @param Index
     * @param callBack
     * @returns {undefined}
     */
    findTreeNodeFromIndex(data, Index, callBack);
    
    /**
     * 删除树节点
     * @param tree
     * @param id:可以是字段或者节点对象,否则第三个参数value必须有值
     * @param value:当valueField为节点对象时,为空否则必须录入该字段的值
     */
    deleteTreeNode(tree, id, value);
    
    /**
     *  替换树节点
     * @param data
     * @param newNode
     * @param id
     * @param value
     */
    replaceTreeNode(data, newNode, id = 'id', value = null);
    
    /**
     * 防抖函数
     * @param fn: 函数
     * @returns {function(...[*]=)}
     */
    throttle(fn);
    
    /**
     * 判断是否是函数并获得执行结果
     * @param fn
     * @returns {*}
     */
    doFun (fn);
    
    /**
     * 从指定的组件中查找第一个下级标签为指定标签的vue对象
     * @param fromComponent
     * @param tag
     * @returns {null|Vue}
     */
    findFirstChildrenComponent(fromComponent, tag);
    /**
     * 遍历下级组件并执行回调,返回false终止
     * @param fromComponent
     * @param callBack
     */
    findChildrenComponent(fromComponent, callBack);
    
    /**
     * 遍历上级组件并执行回调,返回false终止
     * @param fromComponent
     * @param includeSelf: 是否包含控件本身
     * @param callBack
     */
    findParentComponent(fromComponent, includeSelf = false, callBack);
    
    /**
     * 遍历树并执行回调
     * @param tree: 要遍历的树数组或单个对象
     * @param callback: 回调
     */
    treeEach(tree, callback);
    
    /**
     * 在下级组件中查找expression为指定值的组件
     * @param component
     * @param field: expression值
     * @returns {null|Vue|boolean}
     */
    findInputComponent(component, field);
    
    /**
     * 获得最后一个分隔符后的内容
     * @param srcStr
     * @param splitChar
     * @returns {string}
     */
    getLastSplitString(srcStr, splitChar);
    
    /**
     * 自定义校验指定的规则
     * @param fieldVal
     * @param rules
     * @returns {boolean}
     */
    validateField(fieldVal, rules);
    
    /**
     * 校验element-ui的表单并执行func函数
     * @param form: element-ui的表单
     * @param func: 验证通过后执行的函数
     */
    validateFormAndDo(form, func);
    /**
     * 设置组件的校验操作
     * @param dataSource
     * @param component
     * @param currEditSelection
     * @param field
     * @param rules
     */
    setComponentRuleActon(dataSource, component, currEditSelection, field, rules);
    
    /**
     * 时间格式化, 例如: dateFormat('YYYY-mm-dd HH:MM:SS', new Date())
     * @param fmt: 格式化字符串
     * @param date: 日期
     * @returns {*}
     */
    dateFormat(fmt, date);
    
    /**
     * 退出时清理缓存
     */
    clearCache();
    
    /**
     * 退出系统
     * @param callback
     */
    logOut(router, callback);
    /**
     * 获取字符串长度,英文字符 长度1,中文字符长度2
     * @param {*} str
     */
    getStrFullLength(str = '');
    
    /**
     * 截取字符串,根据 maxLength 截取后返回
     * @param {*} str
     * @param {*} maxLength
     */
    cutStrByFullLength(str = '', maxLength);
    
    /**
     * 获得指定长度的随机数
     * @param length
     * @returns {string}
     */
    randomString(length);
    
    /**
     * 去左空格
     * @param s
     * @returns {*}
     */
    ltrim(s);
    
    /**
     * 去右空格
     * @param s
     * @returns {*}
     */
    rtrim(s);
    
    /**
     * 去左右空格
     * @param s
     * @returns {*}
     */
    trim(s);
    
    /**
     * 将双斜杠替换为单斜杠
     * @param str
     * @returns {*}
     */
    removeDoubleSlash(str);
    
    /**
     * 获得文件的扩展名
     * @param fileName
     */
    getFileExtName(fileName);
    
    /**
     * 查找点击的按钮对象并设置为不可用
     * @returns {{__vue__}|EventTarget}
     */
    disabledNode();
    
    /**
     * 将对象设置为可用
     * @param v
     */
    unDisabledNode(v);
    
    /**
     * 上传前端错误信息到服务器端
     * @param error: Error实例
     * @param vm: Vue实例
     * @param info: 错误信息
     */
    errorHandler(error, vm, info);
    
    /**
     * 深度合并
     * @param target: 目标
     * @param source: 源
     * @returns {*}
     */
    mergeDeep(target, source);
}
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
425
426
427
428
429
430
431
432
433
434
435
436
437
438
439
440
441
442
443
444
445
446
447
448
449
450
451
452
453
454
455
456
457
458
459
460
461
462
463
464
465
466
467
468
469
470
471
472
473
474
475
476
477
478
479
480
481
482
483
484
485
486
487
488
489
490
491
492
493
494
495
496
497
498
499
500
501
502
503
504
505
506
507
508
509
510
511
512
513
514
515
516
517
518
519
520
521
522
523