@yy-common/shared 1.0.0-beta.6
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/.versionrc +23 -0
- package/CHANGELOG.md +42 -0
- package/api/dict.js +60 -0
- package/api/index.js +1 -0
- package/config/config.js +65 -0
- package/config/index.js +1 -0
- package/directive/directives.js +9 -0
- package/directive/index.js +26 -0
- package/directive/module/draggable.js +44 -0
- package/directive/module/permission.js +15 -0
- package/index.js +4 -0
- package/package.json +26 -0
- package/router/basic-routes.js +28 -0
- package/router/generator-routers.js +260 -0
- package/router/guard.js +283 -0
- package/router/index.js +9 -0
- package/utils/column-setting.js +72 -0
- package/utils/com.js +8 -0
- package/utils/dict-cache.js +11 -0
- package/utils/dynamicSetting.js +45 -0
- package/utils/enum.js +137 -0
- package/utils/errorLog.js +39 -0
- package/utils/excel.js +789 -0
- package/utils/index.js +26 -0
- package/utils/is-type.js +164 -0
- package/utils/item.js +14 -0
- package/utils/metric.js +135 -0
- package/utils/number.js +12 -0
- package/utils/request/axiosN.js +142 -0
- package/utils/request/content-type.js +19 -0
- package/utils/request/index.js +2 -0
- package/utils/request/interceptors.js +156 -0
- package/utils/request/url-params.js +12 -0
- package/utils/router.js +27 -0
- package/utils/storage.js +51 -0
- package/utils/table.js +348 -0
- package/utils/token.js +51 -0
- package/utils/tree.js +39 -0
- package/utils/user.js +8 -0
- package/utils/wps.js +16 -0
package/utils/router.js
ADDED
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
|
|
2
|
+
export function navBack(router, route) {
|
|
3
|
+
console.log('navBack in router', router, route)
|
|
4
|
+
const tempTagList = _.cloneDeep(top.document.getElementsByTagName('div')[0].__vue__.$store.state.app.tagNavList || [])
|
|
5
|
+
console.log('tempTagList detailView: ', tempTagList)
|
|
6
|
+
const tagAfterRemove = tempTagList.filter((item) => {
|
|
7
|
+
console.log('对比!', item, item.uri.includes(route.path))
|
|
8
|
+
return item.name != route.name
|
|
9
|
+
})
|
|
10
|
+
if (route.query.isTodo) {
|
|
11
|
+
if (top == self) {
|
|
12
|
+
//协同办公
|
|
13
|
+
window.close()
|
|
14
|
+
} else {
|
|
15
|
+
const tempTagList = _.cloneDeep(top.document.getElementsByTagName('div')[0].__vue__.$store.state.app.tagNavList || [])
|
|
16
|
+
console.log('tempTagList detailView: ', tempTagList)
|
|
17
|
+
const tagAfterRemove = tempTagList.filter((item) => {
|
|
18
|
+
return item.name != route.name && !item.uri.includes(route.path) && item.isShow
|
|
19
|
+
})
|
|
20
|
+
console.log('tagAfterRemove detailView: ', tagAfterRemove)
|
|
21
|
+
top.document.getElementsByClassName('pro-layout-tabs-wrapper')[0].__vue__.emitTags(tagAfterRemove, tagAfterRemove[tagAfterRemove.length - 1].name)
|
|
22
|
+
}
|
|
23
|
+
} else {
|
|
24
|
+
router.back()
|
|
25
|
+
}
|
|
26
|
+
}
|
|
27
|
+
// 直接返回上一页面,不是返回配置的菜单上级
|
package/utils/storage.js
ADDED
|
@@ -0,0 +1,51 @@
|
|
|
1
|
+
// ============ SessionStorage ============
|
|
2
|
+
export const getSessionStorage = (key) => {
|
|
3
|
+
const value = sessionStorage.getItem(key)
|
|
4
|
+
if (value) {
|
|
5
|
+
try {
|
|
6
|
+
return JSON.parse(value)
|
|
7
|
+
} catch (error) {
|
|
8
|
+
return value
|
|
9
|
+
}
|
|
10
|
+
}
|
|
11
|
+
return value
|
|
12
|
+
}
|
|
13
|
+
|
|
14
|
+
export const setSessionStorage = (key, value) => {
|
|
15
|
+
if (typeof value !== 'string') {
|
|
16
|
+
value = JSON.stringify(value)
|
|
17
|
+
}
|
|
18
|
+
sessionStorage.setItem(key, value)
|
|
19
|
+
}
|
|
20
|
+
|
|
21
|
+
export const removeSessionStorage = (key) => {
|
|
22
|
+
return sessionStorage.removeItem(key)
|
|
23
|
+
}
|
|
24
|
+
|
|
25
|
+
export function clearSessionStorage() {
|
|
26
|
+
sessionStorage.clear()
|
|
27
|
+
}
|
|
28
|
+
|
|
29
|
+
// ============ LocalStorage ============
|
|
30
|
+
export const getLocalStorage = (key) => {
|
|
31
|
+
const value = localStorage.getItem(key)
|
|
32
|
+
if (value) {
|
|
33
|
+
try {
|
|
34
|
+
return JSON.parse(value)
|
|
35
|
+
} catch (error) {
|
|
36
|
+
return value
|
|
37
|
+
}
|
|
38
|
+
}
|
|
39
|
+
return value
|
|
40
|
+
}
|
|
41
|
+
|
|
42
|
+
export const setLocalStorage = (key, value) => {
|
|
43
|
+
if (typeof value !== 'string') {
|
|
44
|
+
value = JSON.stringify(value)
|
|
45
|
+
}
|
|
46
|
+
localStorage.setItem(key, value)
|
|
47
|
+
}
|
|
48
|
+
|
|
49
|
+
export const removeLocalStorage = (key) => {
|
|
50
|
+
return localStorage.removeItem(key)
|
|
51
|
+
}
|
package/utils/table.js
ADDED
|
@@ -0,0 +1,348 @@
|
|
|
1
|
+
/*
|
|
2
|
+
* @Author: huxuetong
|
|
3
|
+
* @Date: 2023-10-27 15:05:25
|
|
4
|
+
* @Last Modified by: huxuetong
|
|
5
|
+
* @Last Modified time: 2024-11-25 11:09:00
|
|
6
|
+
*/
|
|
7
|
+
|
|
8
|
+
import _ from 'lodash'
|
|
9
|
+
import { isFunction, isNil, isString } from './is-type'
|
|
10
|
+
|
|
11
|
+
const GROUP_SEP = '__'
|
|
12
|
+
const VALUE_SEP = '--'
|
|
13
|
+
|
|
14
|
+
function renderHeaderTooltip({
|
|
15
|
+
tooltip,
|
|
16
|
+
item,
|
|
17
|
+
parents,
|
|
18
|
+
title,
|
|
19
|
+
}) {
|
|
20
|
+
let text = null
|
|
21
|
+
if (tooltip) {
|
|
22
|
+
if (isFunction(tooltip)) {
|
|
23
|
+
text = tooltip(item, parents)
|
|
24
|
+
} else if (tooltip === true) {
|
|
25
|
+
text = title
|
|
26
|
+
} else {
|
|
27
|
+
text = tooltip
|
|
28
|
+
}
|
|
29
|
+
}
|
|
30
|
+
return text
|
|
31
|
+
}
|
|
32
|
+
|
|
33
|
+
// 根据各层分组定义组织出表头
|
|
34
|
+
function renderColumnTree(
|
|
35
|
+
data,
|
|
36
|
+
columnGroup,
|
|
37
|
+
option = {},
|
|
38
|
+
) {
|
|
39
|
+
const {
|
|
40
|
+
key,
|
|
41
|
+
keyProp,
|
|
42
|
+
title,
|
|
43
|
+
titleProp,
|
|
44
|
+
titleFormatter,
|
|
45
|
+
sortProp,
|
|
46
|
+
sortOrder = 'asc',
|
|
47
|
+
keyLastSuffix,
|
|
48
|
+
isLimitChildren,
|
|
49
|
+
headerTooltip,
|
|
50
|
+
children,
|
|
51
|
+
...args
|
|
52
|
+
} = columnGroup
|
|
53
|
+
const { keyPropName = 'key', titlePropName = 'title', keyPrefix = '', parents = [] } = option
|
|
54
|
+
|
|
55
|
+
// 动态列
|
|
56
|
+
if (keyProp) {
|
|
57
|
+
let columnUniqData =
|
|
58
|
+
_.uniqBy(data, columnGroup.keyProp)?.filter((item) => !isNil(item[columnGroup.keyProp])) || []
|
|
59
|
+
if (sortProp) {
|
|
60
|
+
const unSortData = columnUniqData.filter((item) => isNil(item[sortProp]))
|
|
61
|
+
const sortData = columnUniqData.filter((item) => !isNil(item[sortProp]))
|
|
62
|
+
columnUniqData = _.orderBy(sortData, [sortProp], [sortOrder]).concat(unSortData)
|
|
63
|
+
}
|
|
64
|
+
|
|
65
|
+
return columnUniqData.map((item) => {
|
|
66
|
+
const columnTitle = titleFormatter ? titleFormatter(item[titleProp]) : item[titleProp]
|
|
67
|
+
|
|
68
|
+
// 不是最后一层,继续组织tree
|
|
69
|
+
if (children && children.length) {
|
|
70
|
+
// 前缀加__ 和下一层做分割
|
|
71
|
+
const prefix = `${keyPrefix}${keyProp}${VALUE_SEP}${item[keyProp]}${GROUP_SEP}`
|
|
72
|
+
const columnChildren = children.map((child) => {
|
|
73
|
+
let nextData = isLimitChildren
|
|
74
|
+
? data.filter((temp) => temp[keyProp] === item[keyProp])
|
|
75
|
+
: data
|
|
76
|
+
return renderColumnTree(nextData, child, {
|
|
77
|
+
...option,
|
|
78
|
+
keyPrefix: prefix,
|
|
79
|
+
parents: [...parents, item],
|
|
80
|
+
})
|
|
81
|
+
})
|
|
82
|
+
|
|
83
|
+
return {
|
|
84
|
+
...args,
|
|
85
|
+
[titlePropName]: columnTitle,
|
|
86
|
+
headerTooltip: renderHeaderTooltip({
|
|
87
|
+
tooltip: headerTooltip,
|
|
88
|
+
item,
|
|
89
|
+
parents,
|
|
90
|
+
title: columnTitle,
|
|
91
|
+
}),
|
|
92
|
+
children: _.flatten(columnChildren), // 多层动态列下,上面的层级拿到的是个二维数组,flatten一下
|
|
93
|
+
}
|
|
94
|
+
}
|
|
95
|
+
|
|
96
|
+
// 最后一层 返回key、title
|
|
97
|
+
const suffix = keyLastSuffix ? `${GROUP_SEP}${keyLastSuffix}` : ''
|
|
98
|
+
return {
|
|
99
|
+
...args,
|
|
100
|
+
[keyPropName]: `${keyPrefix}${keyProp}${VALUE_SEP}${item[keyProp]}${suffix}`,
|
|
101
|
+
[titlePropName]: columnTitle,
|
|
102
|
+
headerTooltip: renderHeaderTooltip({
|
|
103
|
+
tooltip: headerTooltip,
|
|
104
|
+
item,
|
|
105
|
+
parents,
|
|
106
|
+
title: columnTitle,
|
|
107
|
+
}),
|
|
108
|
+
}
|
|
109
|
+
})
|
|
110
|
+
}
|
|
111
|
+
|
|
112
|
+
const headerTooltipText = renderHeaderTooltip({
|
|
113
|
+
tooltip: headerTooltip,
|
|
114
|
+
item: {},
|
|
115
|
+
parents,
|
|
116
|
+
title,
|
|
117
|
+
})
|
|
118
|
+
|
|
119
|
+
// 非动态列 不是最后一层
|
|
120
|
+
if (children && children.length) {
|
|
121
|
+
// 非动态列的下一层一般都是在一行数据上的,所以拼接key时不加__做不同层级的分割,而是和下一层一起作为属性名
|
|
122
|
+
const prefix = `${keyPrefix}${key || ''}`
|
|
123
|
+
const columnChildren = children.map((child) => {
|
|
124
|
+
return renderColumnTree(data, child, { ...option, keyPrefix: prefix })
|
|
125
|
+
})
|
|
126
|
+
|
|
127
|
+
return {
|
|
128
|
+
...args,
|
|
129
|
+
[titlePropName]: title,
|
|
130
|
+
headerTooltip: headerTooltipText,
|
|
131
|
+
children: _.flatten(columnChildren),
|
|
132
|
+
}
|
|
133
|
+
}
|
|
134
|
+
return {
|
|
135
|
+
...args,
|
|
136
|
+
[keyPropName]: `${keyPrefix}${key || ''}`,
|
|
137
|
+
[titlePropName]: title,
|
|
138
|
+
headerTooltip: headerTooltipText,
|
|
139
|
+
}
|
|
140
|
+
}
|
|
141
|
+
|
|
142
|
+
// 获取最后一层的表头
|
|
143
|
+
function getLeafColumns(columns = []) {
|
|
144
|
+
if (!columns || !columns.length) return []
|
|
145
|
+
return columns.reduce((rlt, column) => {
|
|
146
|
+
if (column.children) {
|
|
147
|
+
return [...rlt, ...getLeafColumns(column.children)]
|
|
148
|
+
} else {
|
|
149
|
+
return [...rlt, column]
|
|
150
|
+
}
|
|
151
|
+
}, [])
|
|
152
|
+
}
|
|
153
|
+
|
|
154
|
+
// 组织行转列结果的每一行数据
|
|
155
|
+
function renderRowData(data, keys) {
|
|
156
|
+
if (!keys.length) return
|
|
157
|
+
const key = keys[0]
|
|
158
|
+
keys = keys.slice(1)
|
|
159
|
+
|
|
160
|
+
if (key.includes(VALUE_SEP) && keys.length) {
|
|
161
|
+
// 这个分组是动态列的分组,且不是最后一层
|
|
162
|
+
const [keyProp, keyValue] = key.split(VALUE_SEP)
|
|
163
|
+
// 一层一层往下找,筛选符合该分组的数据
|
|
164
|
+
const matchData = _.filter(data, { [keyProp]: keyValue })
|
|
165
|
+
return renderRowData(matchData, keys)
|
|
166
|
+
}
|
|
167
|
+
|
|
168
|
+
if (keys.length) {
|
|
169
|
+
console.error('怎么会不是最后一层分组呢,请联系开发人员查看!')
|
|
170
|
+
}
|
|
171
|
+
// 最后一层,固定指标,赋值
|
|
172
|
+
const value = data?.[0]?.[key]
|
|
173
|
+
return value
|
|
174
|
+
}
|
|
175
|
+
|
|
176
|
+
function getRowKeyValue(item, rowKey) {
|
|
177
|
+
if (!item) return ''
|
|
178
|
+
if (isString(rowKey)) return item[rowKey] || ''
|
|
179
|
+
for (const key of rowKey) {
|
|
180
|
+
if (item[key]) {
|
|
181
|
+
return item[key]
|
|
182
|
+
}
|
|
183
|
+
}
|
|
184
|
+
return ''
|
|
185
|
+
}
|
|
186
|
+
|
|
187
|
+
function renderSumColumn(keys, titles, idx, columns, def) {
|
|
188
|
+
if (idx >= keys.length) return
|
|
189
|
+
|
|
190
|
+
const key = keys[idx]
|
|
191
|
+
let header = _.find(columns, { key })
|
|
192
|
+
if (!header) {
|
|
193
|
+
header = { key, title: titles[idx], children: [] }
|
|
194
|
+
columns.push(header)
|
|
195
|
+
|
|
196
|
+
if (idx === keys.length - 1) {
|
|
197
|
+
Object.assign(header, def, { title: titles[idx] })
|
|
198
|
+
return
|
|
199
|
+
}
|
|
200
|
+
}
|
|
201
|
+
|
|
202
|
+
renderSumColumn(keys, titles, idx + 1, header.children, def)
|
|
203
|
+
}
|
|
204
|
+
|
|
205
|
+
function renderSumColumns({ sumColumnDefs }) {
|
|
206
|
+
const columns = []
|
|
207
|
+
|
|
208
|
+
for (const def of sumColumnDefs) {
|
|
209
|
+
const { key, title } = def
|
|
210
|
+
const keys = key.split(GROUP_SEP)
|
|
211
|
+
const titles = title.split(GROUP_SEP)
|
|
212
|
+
|
|
213
|
+
renderSumColumn(keys, titles, 0, columns, def)
|
|
214
|
+
}
|
|
215
|
+
|
|
216
|
+
return columns
|
|
217
|
+
}
|
|
218
|
+
|
|
219
|
+
/**
|
|
220
|
+
* 行转列公共方法
|
|
221
|
+
* ! 目前是根据非动态列下全是非动态列的分组来组织的,若动态列和非动态列相互穿插分组,那就糟糕了
|
|
222
|
+
*
|
|
223
|
+
* @param data 所有行数据
|
|
224
|
+
* @param columnGroups 分组定义
|
|
225
|
+
* @param rowKey 行转列目标结果的行主键
|
|
226
|
+
* @param option 一些参数
|
|
227
|
+
* @returns 行转列后的表头和数据
|
|
228
|
+
*/
|
|
229
|
+
export function row2column(
|
|
230
|
+
data = [],
|
|
231
|
+
columnGroups = [],
|
|
232
|
+
rowKey,
|
|
233
|
+
option = {},
|
|
234
|
+
) {
|
|
235
|
+
// 组织表头
|
|
236
|
+
const columns = []
|
|
237
|
+
if (option.sumColumnDefs && option.sumColumnDefs.length) {
|
|
238
|
+
columns.push(...renderSumColumns(option))
|
|
239
|
+
}
|
|
240
|
+
const groupColumns =
|
|
241
|
+
_.flatten(columnGroups.map((group) => renderColumnTree(data, group, option))) || []
|
|
242
|
+
columns.push(...groupColumns)
|
|
243
|
+
const leafColumns = getLeafColumns(columns)
|
|
244
|
+
|
|
245
|
+
// 组织数据
|
|
246
|
+
const rowKeyUniqData =
|
|
247
|
+
_.uniqBy(data, (item) => getRowKeyValue(item, rowKey))?.filter(
|
|
248
|
+
(item) => !isNil(getRowKeyValue(item, rowKey)),
|
|
249
|
+
) || []
|
|
250
|
+
const groupData = _.groupBy(data, (item) => getRowKeyValue(item, rowKey))
|
|
251
|
+
const rltData = rowKeyUniqData.map((item) => {
|
|
252
|
+
const rowKeyValue = getRowKeyValue(item, rowKey)
|
|
253
|
+
const rowGroupData = groupData[rowKeyValue] || []
|
|
254
|
+
const newItem = { ...item }
|
|
255
|
+
|
|
256
|
+
if (option.sumColumnDefs && option.sumColumnDefs.length) {
|
|
257
|
+
option.sumColumnDefs.forEach((def) => {
|
|
258
|
+
const { key } = def
|
|
259
|
+
const keys = key.split(GROUP_SEP) || []
|
|
260
|
+
const code = keys?.[0] || ''
|
|
261
|
+
const indexCol = keys?.[keys.length - 1] || ''
|
|
262
|
+
const { sumColKeyProp = 'sumColCode' } = option
|
|
263
|
+
const itemData = _.find(rowGroupData, { [sumColKeyProp]: code }) || {}
|
|
264
|
+
newItem[key] = itemData[indexCol]
|
|
265
|
+
})
|
|
266
|
+
}
|
|
267
|
+
|
|
268
|
+
leafColumns.forEach((column) => {
|
|
269
|
+
const columnKey = column[option.keyPropName || 'key'] || ''
|
|
270
|
+
const keys = columnKey.split(GROUP_SEP) || []
|
|
271
|
+
const value = renderRowData(rowGroupData, keys)
|
|
272
|
+
newItem[columnKey] = value
|
|
273
|
+
// 去掉原始数据的字段
|
|
274
|
+
delete newItem[keys[keys.length - 1]]
|
|
275
|
+
})
|
|
276
|
+
return newItem
|
|
277
|
+
})
|
|
278
|
+
|
|
279
|
+
return { data: rltData, columns }
|
|
280
|
+
}
|
|
281
|
+
|
|
282
|
+
// -----------------------------------------------------------------------------
|
|
283
|
+
|
|
284
|
+
// 将每一行转回行数据
|
|
285
|
+
function flattenRowData(
|
|
286
|
+
rowData = {},
|
|
287
|
+
leafColumns = [],
|
|
288
|
+
option = {},
|
|
289
|
+
) {
|
|
290
|
+
const rlt = []
|
|
291
|
+
// 取出所有非动态列
|
|
292
|
+
const newItem = {}
|
|
293
|
+
const keys = Object.keys(rowData)
|
|
294
|
+
keys.forEach((key) => {
|
|
295
|
+
if (!key.includes(GROUP_SEP)) {
|
|
296
|
+
newItem[key] = rowData[key]
|
|
297
|
+
}
|
|
298
|
+
})
|
|
299
|
+
|
|
300
|
+
leafColumns.forEach((column) => {
|
|
301
|
+
const cellData = {}
|
|
302
|
+
const columnKey = column[option.keyPropName || 'key'] || ''
|
|
303
|
+
|
|
304
|
+
if (columnKey.includes(GROUP_SEP)) {
|
|
305
|
+
// 动态列
|
|
306
|
+
const keys = columnKey.split(GROUP_SEP)
|
|
307
|
+
keys.forEach((key, idx) => {
|
|
308
|
+
if (key.includes(VALUE_SEP) && keys.length) {
|
|
309
|
+
// 这个分组是动态列的分组,且不是最后一层
|
|
310
|
+
const [keyProp, keyValue] = key.split(VALUE_SEP)
|
|
311
|
+
cellData[keyProp] = keyValue
|
|
312
|
+
} else if (keys.length !== idx + 1) {
|
|
313
|
+
console.error('columns有问题,请检查!')
|
|
314
|
+
} else {
|
|
315
|
+
// 如果结果集里有该分组对应的数据,在其中加上这个列对应的指标数据,如果没有,增加一条该分组的数据
|
|
316
|
+
const item = _.find(rlt, cellData)
|
|
317
|
+
if (!item) {
|
|
318
|
+
rlt.push({ ...newItem, ...cellData, [key]: rowData[columnKey] })
|
|
319
|
+
} else {
|
|
320
|
+
item[key] = rowData[columnKey]
|
|
321
|
+
}
|
|
322
|
+
}
|
|
323
|
+
})
|
|
324
|
+
}
|
|
325
|
+
})
|
|
326
|
+
|
|
327
|
+
return rlt
|
|
328
|
+
}
|
|
329
|
+
|
|
330
|
+
/**
|
|
331
|
+
* 从行转列的数据转回行数据
|
|
332
|
+
*
|
|
333
|
+
* @param data 行转列后数据
|
|
334
|
+
* @param columns 行转列后的列定义
|
|
335
|
+
* @param option 一些参数
|
|
336
|
+
* @returns 行数据
|
|
337
|
+
*/
|
|
338
|
+
export function flattenRow2ColumnData(
|
|
339
|
+
data = [],
|
|
340
|
+
columns = [],
|
|
341
|
+
option = {},
|
|
342
|
+
) {
|
|
343
|
+
const leafColumns = getLeafColumns(columns)
|
|
344
|
+
return data.reduce(
|
|
345
|
+
(rlt, rowData) => [...rlt, ...flattenRowData(rowData, leafColumns, option)],
|
|
346
|
+
[],
|
|
347
|
+
)
|
|
348
|
+
}
|
package/utils/token.js
ADDED
|
@@ -0,0 +1,51 @@
|
|
|
1
|
+
import { getLocalStorage, getSessionStorage, setLocalStorage } from './storage';
|
|
2
|
+
const TOKEN_KEY = 'v8-token';
|
|
3
|
+
const TOKEN_KEY_IBP = 'lambo-token';
|
|
4
|
+
// 要从门户跳转过来,sessionStorage不能带token过来,改成localStorage
|
|
5
|
+
export function setToken(token) {
|
|
6
|
+
setLocalStorage(TOKEN_KEY, token);
|
|
7
|
+
Cookie.set('TOKEN_KEY', token, 1);
|
|
8
|
+
}
|
|
9
|
+
export function getToken() {
|
|
10
|
+
let token = getSessionStorage(TOKEN_KEY_IBP);
|
|
11
|
+
if (!token) {
|
|
12
|
+
token = Cookie.get('lambo-sso-key');
|
|
13
|
+
}
|
|
14
|
+
if (!token) {
|
|
15
|
+
token = Cookie.get('TOKEN_KEY');
|
|
16
|
+
}
|
|
17
|
+
if (!token) {
|
|
18
|
+
token = getLocalStorage(TOKEN_KEY);
|
|
19
|
+
}
|
|
20
|
+
return token || false;
|
|
21
|
+
}
|
|
22
|
+
const Cookie = {
|
|
23
|
+
set: function (key, value, exdays) {
|
|
24
|
+
//校验Key, key中不能有等号【=】
|
|
25
|
+
if (key.indexOf('=') !== -1) {
|
|
26
|
+
throw new Error('Cookie不支持key中使用等号【=】, key:' + key);
|
|
27
|
+
}
|
|
28
|
+
let exdate = new Date(); // 获取时间
|
|
29
|
+
exdate.setTime(exdate.getTime() + 24 * 60 * 60 * 1000 * exdays); // 保存的天数
|
|
30
|
+
// 字符串拼接cookie
|
|
31
|
+
// eslint-disable-next-line camelcase
|
|
32
|
+
window.document.cookie = key + '=' + value + ';path=/;expires=' + exdate.toGMTString();
|
|
33
|
+
},
|
|
34
|
+
get: function (key) {
|
|
35
|
+
if (document.cookie.length > 0) {
|
|
36
|
+
// 这里显示的格式需要切割一下自己可输出看下
|
|
37
|
+
var arr = document.cookie.split('; ');
|
|
38
|
+
for (let i = 0; i < arr.length; i++) {
|
|
39
|
+
let arr2 = arr[i].split('='); // 再次切割
|
|
40
|
+
// 判断查找相对应的值
|
|
41
|
+
if (arr2[0] === key) {
|
|
42
|
+
var value = arr2[1];
|
|
43
|
+
for (let j = 2; j < arr2.length; j++) {
|
|
44
|
+
value += '=' + arr2[j];
|
|
45
|
+
}
|
|
46
|
+
return value;
|
|
47
|
+
}
|
|
48
|
+
}
|
|
49
|
+
}
|
|
50
|
+
},
|
|
51
|
+
};
|
package/utils/tree.js
ADDED
|
@@ -0,0 +1,39 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* 获取当前节点的全路径数组 [p1,p2,p3,curNode]
|
|
3
|
+
* @param treeData 树型数据
|
|
4
|
+
* @param currNode 当前节点 或 节点id
|
|
5
|
+
*
|
|
6
|
+
* @returns {Array} 全路径节点数组,未找到返回空数组
|
|
7
|
+
*/
|
|
8
|
+
|
|
9
|
+
export function getFullPathNodeById(treeData = [], curNode) {
|
|
10
|
+
if (!Array.isArray(treeData) || treeData.length === 0) {
|
|
11
|
+
return [];
|
|
12
|
+
}
|
|
13
|
+
|
|
14
|
+
if (curNode == null) {
|
|
15
|
+
return [];
|
|
16
|
+
}
|
|
17
|
+
|
|
18
|
+
const targetId = typeof curNode === "object" ? curNode["id"] : curNode;
|
|
19
|
+
|
|
20
|
+
function treeDeep(nodes, path) {
|
|
21
|
+
for (const node of nodes) {
|
|
22
|
+
const currentPath = [...path, node];
|
|
23
|
+
|
|
24
|
+
if (node["id"] === targetId) {
|
|
25
|
+
return currentPath;
|
|
26
|
+
}
|
|
27
|
+
|
|
28
|
+
if (node["children"] && node["children"].length > 0) {
|
|
29
|
+
const res = treeDeep(node["children"], currentPath);
|
|
30
|
+
if (res.length > 0) {
|
|
31
|
+
return res;
|
|
32
|
+
}
|
|
33
|
+
}
|
|
34
|
+
}
|
|
35
|
+
return [];
|
|
36
|
+
}
|
|
37
|
+
|
|
38
|
+
return treeDeep(treeData, []);
|
|
39
|
+
}
|
package/utils/user.js
ADDED
package/utils/wps.js
ADDED
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
const addScript = function (src, cb) {
|
|
2
|
+
const script = document.createElement('script')
|
|
3
|
+
script.src = src
|
|
4
|
+
document.getElementsByTagName('head')[0].appendChild(script)
|
|
5
|
+
script.onload = function () {
|
|
6
|
+
if (!!cb) {
|
|
7
|
+
cb()
|
|
8
|
+
}
|
|
9
|
+
}
|
|
10
|
+
}
|
|
11
|
+
|
|
12
|
+
export function initWps() {
|
|
13
|
+
addScript(
|
|
14
|
+
`${location.protocol}//${location.host}/ind-uc-ext/vendor/openSDK-0.0.6/open-jssdk-v0.0.6.umd.js`,
|
|
15
|
+
)
|
|
16
|
+
}
|