@lambo-design/shared 1.0.0-beta.33 → 1.0.0-beta.331
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/config/config.js +20 -3
- package/config/index.js +7 -2
- package/config/locale.js +61 -0
- package/config/themes/atrovirens/atrovirens.css +589 -0
- package/config/themes/atrovirens/atrovirens.css.map +1 -0
- package/config/themes/atrovirens/atrovirens.less +680 -0
- package/config/themes/atrovirens/var.less +688 -0
- package/config/themes/blue/blue.css +589 -0
- package/config/themes/blue/blue.css.map +1 -0
- package/config/themes/blue/blue.less +683 -0
- package/config/themes/blue/var.less +691 -0
- package/config/themes/blue-digital/blue-digital.css +589 -0
- package/config/themes/blue-digital/blue-digital.css.map +1 -0
- package/config/themes/blue-digital/blue-digital.less +683 -0
- package/config/themes/blue-digital/var.less +691 -0
- package/config/themes/blue-white/blue-white.css +589 -0
- package/config/themes/blue-white/blue-white.css.map +1 -0
- package/config/themes/blue-white/blue-white.less +684 -0
- package/config/themes/blue-white/var.less +690 -0
- package/config/themes/blue-white-big/blue-white-big.css +589 -0
- package/config/themes/blue-white-big/blue-white-big.css.map +1 -0
- package/config/themes/blue-white-big/blue-white-big.less +684 -0
- package/config/themes/blue-white-big/var.less +690 -0
- package/config/themes/blue-white-tight/blue-white-tight.css +590 -0
- package/config/themes/blue-white-tight/blue-white-tight.css.map +1 -0
- package/config/themes/blue-white-tight/blue-white-tight.less +684 -0
- package/config/themes/blue-white-tight/var.less +692 -0
- package/config/themes/canglan/canglan.css +588 -0
- package/config/themes/canglan/canglan.css.map +1 -0
- package/config/themes/canglan/canglan.less +681 -0
- package/config/themes/canglan/var.less +692 -0
- package/config/themes/cuiwei/cuiwei.css +589 -0
- package/config/themes/cuiwei/cuiwei.css.map +1 -0
- package/config/themes/cuiwei/cuiwei.less +681 -0
- package/config/themes/cuiwei/var.less +690 -0
- package/config/themes/danqing/danqing.css +578 -0
- package/config/themes/danqing/danqing.css.map +1 -0
- package/config/themes/danqing/danqing.less +681 -0
- package/config/themes/danqing/danqing.wxss +576 -0
- package/config/themes/danqing/var.less +695 -0
- package/config/themes/deep/deep.css +589 -0
- package/config/themes/deep/deep.css.map +1 -0
- package/config/themes/deep/deep.less +681 -0
- package/config/themes/deep/var.less +693 -0
- package/config/themes/default/default.css +403 -57
- package/config/themes/default/default.css.map +1 -1
- package/config/themes/default/default.less +380 -16
- package/config/themes/default/var.less +389 -11
- package/config/themes/eap/eap.css +589 -0
- package/config/themes/eap/eap.css.map +1 -0
- package/config/themes/eap/eap.less +684 -0
- package/config/themes/eap/var.less +692 -0
- package/config/themes/gold/gold.css +589 -0
- package/config/themes/gold/gold.css.map +1 -0
- package/config/themes/gold/gold.less +684 -0
- package/config/themes/gold/var.less +385 -5
- package/config/themes/index.js +28 -4
- package/config/themes/lime/lime.css +589 -0
- package/config/themes/lime/lime.css.map +1 -0
- package/config/themes/lime/lime.less +684 -0
- package/config/themes/lime/var.less +384 -5
- package/config/themes/orange/orange.css +353 -7
- package/config/themes/orange/orange.css.map +1 -1
- package/config/themes/orange/orange.less +365 -0
- package/config/themes/orange/var.less +385 -5
- package/config/themes/red/red.css +353 -7
- package/config/themes/red/red.css.map +1 -1
- package/config/themes/red/red.less +365 -0
- package/config/themes/red/var.less +385 -5
- package/config/themes/sichuan/sichuan.css +589 -0
- package/config/themes/sichuan/sichuan.css.map +1 -0
- package/config/themes/sichuan/sichuan.less +684 -0
- package/config/themes/sichuan/var.less +690 -0
- package/config/themes/theme-atrovirens.js +571 -0
- package/config/themes/theme-bd.js +571 -0
- package/config/themes/theme-blue.js +571 -0
- package/config/themes/theme-bw.js +571 -0
- package/config/themes/theme-bwb.js +571 -0
- package/config/themes/theme-bwt.js +572 -0
- package/config/themes/theme-canglan.js +573 -0
- package/config/themes/theme-cuiwei.js +573 -0
- package/config/themes/theme-danqing.js +574 -0
- package/config/themes/theme-deep.js +571 -0
- package/config/themes/theme-default.js +378 -60
- package/config/themes/theme-eap.js +571 -0
- package/config/themes/theme-gold.js +326 -8
- package/config/themes/theme-lime.js +326 -8
- package/config/themes/theme-orange.js +560 -29
- package/config/themes/theme-red.js +563 -33
- package/config/themes/theme-sichuan.js +571 -0
- package/config/themes/theme-white.js +571 -0
- package/config/themes/white/var.less +691 -0
- package/config/themes/white/white.css +589 -0
- package/config/themes/white/white.css.map +1 -0
- package/config/themes/white/white.less +684 -0
- package/directives/module/print.js +1 -0
- package/directives/module/vue-print-nb/README.md +63 -0
- package/directives/module/vue-print-nb/print.js +94 -0
- package/directives/module/vue-print-nb/printarea.js +532 -0
- package/index.js +7 -1
- package/nstyles/common.less +197 -0
- package/nstyles/components/404.less +46 -0
- package/nstyles/components/button.less +34 -0
- package/nstyles/components/date-picker.less +41 -0
- package/nstyles/components/drawer.less +20 -0
- package/nstyles/components/dropdown.less +18 -0
- package/nstyles/components/excel-flow.less +72 -0
- package/nstyles/components/form.less +314 -0
- package/nstyles/components/index.less +23 -0
- package/nstyles/components/layout/collect.less +10 -0
- package/nstyles/components/layout/detail-view.less +107 -0
- package/nstyles/components/layout/full-screen.less +7 -0
- package/nstyles/components/layout/index.less +7 -0
- package/nstyles/components/layout/other-menu.less +142 -0
- package/nstyles/components/layout/page-view.less +101 -0
- package/nstyles/components/layout/sider-trigger.less +41 -0
- package/nstyles/components/layout/tags-nav.less +113 -0
- package/nstyles/components/modal.less +90 -0
- package/nstyles/components/n-button.less +131 -0
- package/nstyles/components/n-image-preview.less +131 -0
- package/nstyles/components/n-model/index.less +19 -0
- package/nstyles/components/n-model/report-index.less +43 -0
- package/nstyles/components/n-panel.less +41 -0
- package/nstyles/components/n-picker.less +37 -0
- package/nstyles/components/n-sign.less +17 -0
- package/nstyles/components/n-tooltip.less +10 -0
- package/nstyles/components/panel.less +31 -0
- package/nstyles/components/select.less +3 -0
- package/nstyles/components/sign.less +27 -0
- package/nstyles/components/table.less +413 -0
- package/nstyles/components/tree.less +166 -0
- package/nstyles/components/upload.less +174 -0
- package/nstyles/index.less +5 -0
- package/nstyles/reset.less +73 -0
- package/nstyles/third/ag.less +226 -0
- package/nstyles/third/icons/sort-desc.svg +1 -0
- package/nstyles/third/icons/sort-up.svg +1 -0
- package/nstyles/third/icons/sorting.svg +1 -0
- package/nstyles/third/index.less +11 -0
- package/nstyles/third/view-design.less +378 -0
- package/nstyles/variables/base.less +143 -0
- package/nstyles/variables/index.less +4 -0
- package/nstyles/variables/theme/default/button.less +7 -0
- package/nstyles/variables/theme/default/common.less +60 -0
- package/nstyles/variables/theme/default/index.less +7 -0
- package/nstyles/variables/theme/default/layout.less +40 -0
- package/nstyles/variables/theme/default/table.less +37 -0
- package/nstyles/variables/theme/default/tag.less +3 -0
- package/nstyles/variables/theme/default/upload.less +3 -0
- package/nstyles/variables/theme/index.less +13 -0
- package/nstyles/variables/theme/lsv/button.less +7 -0
- package/nstyles/variables/theme/lsv/common.less +39 -0
- package/nstyles/variables/theme/lsv/index.less +5 -0
- package/nstyles/variables/theme/lsv/layout.less +21 -0
- package/nstyles/variables/theme/lsv/table.less +20 -0
- package/nstyles/variables/theme/lsv/tag.less +3 -0
- package/nstyles/variables/theme/small/button.less +7 -0
- package/nstyles/variables/theme/small/common.less +41 -0
- package/nstyles/variables/theme/small/index.less +5 -0
- package/nstyles/variables/theme/small/layout.less +21 -0
- package/nstyles/variables/theme/small/table.less +17 -0
- package/nstyles/variables/theme/small/tag.less +3 -0
- package/package.json +28 -7
- package/plugin/index.js +12 -0
- package/plugin/module/date-format.js +30 -0
- package/plugin/module/loading.js +26 -0
- package/plugin/module/warn-handler.js +11 -0
- package/styles/image/indicator-card-header.png +0 -0
- package/styles/image/inspur.png +0 -0
- package/styles/image/lan_navigator.png +0 -0
- package/styles/image/layout-header-bg-canglan.png +0 -0
- package/styles/image/layout-header-bg-cuiwei.png +0 -0
- package/styles/image/lv_navigator.png +0 -0
- package/utils/ajax/abort-controller.js +70 -0
- package/utils/ajax/cancel-reason.js +25 -0
- package/utils/ajax/cancel-token.js +83 -0
- package/utils/ajax/content-type.js +30 -0
- package/utils/ajax/headers.js +11 -0
- package/utils/ajax/interceptors.js +45 -10
- package/utils/ajax/sseFetchUtil.js +118 -0
- package/utils/ajax/throttle.js +49 -0
- package/utils/assist.js +155 -27
- package/utils/base64.js +126 -0
- package/utils/blob.js +47 -0
- package/utils/context-menu.js +65 -0
- package/utils/crypto/aes.js +23 -0
- package/utils/crypto/index.js +10 -0
- package/utils/crypto/rsa.js +23 -0
- package/utils/date.js +334 -305
- package/utils/dict/built-in-dict.js +20 -0
- package/utils/dict/index.js +191 -0
- package/utils/event.js +72 -0
- package/utils/excel.js +502 -290
- package/utils/file.js +19 -0
- package/utils/form/validate.js +29 -0
- package/utils/half-year.js +68 -0
- package/utils/index.js +37 -0
- package/utils/json.js +44 -0
- package/utils/locale/en-US.js +175 -0
- package/utils/locale/zh-CN.js +175 -0
- package/utils/lodop.js +5 -0
- package/utils/menu/index.js +292 -15
- package/utils/mime_type.js +67 -0
- package/utils/modelerUtil.js +4 -1
- package/utils/n/api.js +38 -0
- package/utils/n/date.js +57 -0
- package/utils/n/index.js +10 -0
- package/utils/n/is-type.js +176 -0
- package/utils/n/number.js +144 -0
- package/utils/n/permission-cache.js +11 -0
- package/utils/n/reuqest/axiosN.js +17 -0
- package/utils/n/reuqest/content-type.js +19 -0
- package/utils/n/reuqest/interceptors.js +95 -0
- package/utils/n/reuqest/url-params.js +12 -0
- package/utils/n/storage.js +51 -0
- package/utils/n/token.js +51 -0
- package/utils/n/user-cache.js +11 -0
- package/utils/n/user.js +34 -0
- package/utils/n/uuid.js +16 -0
- package/utils/n-generator-routers.js +208 -0
- package/utils/n-router.js +205 -0
- package/utils/n-theme.js +30 -0
- package/utils/number.js +72 -15
- package/utils/oss.js +57 -0
- package/utils/platform.js +824 -33
- package/utils/quarter.js +58 -0
- package/utils/storage.js +198 -0
- package/utils/style.js +24 -0
- package/utils/theme.js +98 -3
- package/utils/transfer-queue.js +7 -0
- package/utils/transform.js +205 -0
- package/utils/type.js +102 -0
- package/utils/util.js +795 -0
- package/utils/vForm.js +349 -0
- package/utils/validator.js +181 -0
- package/config/themes/gold/default.css +0 -243
- package/config/themes/gold/default.css.map +0 -1
- package/config/themes/gold/default.less +0 -320
- package/config/themes/lime/default.css +0 -243
- package/config/themes/lime/default.css.map +0 -1
- package/config/themes/lime/default.less +0 -320
|
@@ -0,0 +1,208 @@
|
|
|
1
|
+
// 权限类型枚举
|
|
2
|
+
const PERMISSION_TYPE = {
|
|
3
|
+
DIRECTORY: 1,
|
|
4
|
+
MENU: 2,
|
|
5
|
+
BUTTON: 3,
|
|
6
|
+
PAGE: 4,
|
|
7
|
+
}
|
|
8
|
+
|
|
9
|
+
// 是否是菜单要展示的类型
|
|
10
|
+
function isMenuPermissionType(type) {
|
|
11
|
+
return [PERMISSION_TYPE.DIRECTORY, PERMISSION_TYPE.MENU].includes(type)
|
|
12
|
+
}
|
|
13
|
+
|
|
14
|
+
/**
|
|
15
|
+
* 筛选此应用里的权限,非微应用返回空数组
|
|
16
|
+
*
|
|
17
|
+
* @param {string} microType 微应用类型
|
|
18
|
+
* @param {Array} permissionList 全部的权限数据
|
|
19
|
+
* @returns 此应用里的权限数据
|
|
20
|
+
*/
|
|
21
|
+
export function filterMicroPermissionList(microType, permissionList = []) {
|
|
22
|
+
if (!microType) return permissionList
|
|
23
|
+
return permissionList.filter((item) => {
|
|
24
|
+
// ! user-manage-server permissionValue 才是编码
|
|
25
|
+
const itemName = (item && item.permissionValue) || ''
|
|
26
|
+
return (
|
|
27
|
+
itemName.startsWith(microType) || itemName.startsWith(`${config.routerBase}-${microType}`)
|
|
28
|
+
)
|
|
29
|
+
})
|
|
30
|
+
}
|
|
31
|
+
|
|
32
|
+
/**
|
|
33
|
+
* 权限列表数据转树形结构
|
|
34
|
+
*
|
|
35
|
+
* @param {PermissionList2TreeOptions} params
|
|
36
|
+
* @param {Array} params.list 权限数据
|
|
37
|
+
* @param {Array} params.menuTree 菜单类权限树形结构
|
|
38
|
+
* @param {Array} params.pageNode 页面类权限,children里添加页面节点
|
|
39
|
+
* @param {string} params.parentId 父节点Id
|
|
40
|
+
* @param {Array} params.crumbs 从根节点到本节点的路径
|
|
41
|
+
* @param {boolean} params.root 是否是根节点
|
|
42
|
+
*/
|
|
43
|
+
function listToMenuTree({ list, menuTree, pageNode, parentId, crumbs, root }) {
|
|
44
|
+
if (!list) return
|
|
45
|
+
|
|
46
|
+
list.forEach((item) => {
|
|
47
|
+
const { permissionId, label: title, appId, pid, icon, type, uri, permissionValue } = item
|
|
48
|
+
// ! user-manage-server permissionValue 才是编码
|
|
49
|
+
const name = permissionValue
|
|
50
|
+
// 判断是否为该父级节点的子节点
|
|
51
|
+
if (pid === parentId) {
|
|
52
|
+
if (isMenuPermissionType(type)) {
|
|
53
|
+
let node = {
|
|
54
|
+
type,
|
|
55
|
+
name,
|
|
56
|
+
pid,
|
|
57
|
+
path: dealRoutePath(uri),
|
|
58
|
+
uri,
|
|
59
|
+
component: name,
|
|
60
|
+
meta: { appId, permissionId, title, icon, crumbs: [...crumbs], activeName: name },
|
|
61
|
+
children: [],
|
|
62
|
+
}
|
|
63
|
+
node.meta.crumbs.push({ icon, name, title, type })
|
|
64
|
+
|
|
65
|
+
if (PERMISSION_TYPE.DIRECTORY === type) {
|
|
66
|
+
node.component = 'EmptyLayout'
|
|
67
|
+
}
|
|
68
|
+
// 迭代 list, 找到当前菜单相符合的所有子菜单
|
|
69
|
+
listToMenuTree({
|
|
70
|
+
list,
|
|
71
|
+
menuTree: node.children,
|
|
72
|
+
pageNode,
|
|
73
|
+
parentId: permissionId,
|
|
74
|
+
crumbs: node.meta.crumbs,
|
|
75
|
+
root: false,
|
|
76
|
+
})
|
|
77
|
+
// 删掉不存在 children 值的属性
|
|
78
|
+
if (!node.children.length) {
|
|
79
|
+
delete node.children
|
|
80
|
+
}
|
|
81
|
+
// 加入到树中
|
|
82
|
+
menuTree.push(node)
|
|
83
|
+
}
|
|
84
|
+
if (PERMISSION_TYPE.PAGE === type) {
|
|
85
|
+
let child = {
|
|
86
|
+
type,
|
|
87
|
+
name,
|
|
88
|
+
pid,
|
|
89
|
+
path: dealRoutePath(uri),
|
|
90
|
+
uri,
|
|
91
|
+
component: name,
|
|
92
|
+
meta: {
|
|
93
|
+
appId,
|
|
94
|
+
permissionId,
|
|
95
|
+
title,
|
|
96
|
+
hideInMenu: true,
|
|
97
|
+
notCache: true,
|
|
98
|
+
crumbs: [...crumbs],
|
|
99
|
+
type,
|
|
100
|
+
},
|
|
101
|
+
}
|
|
102
|
+
child.meta.crumbs.push({ icon, name, title, type })
|
|
103
|
+
pageNode.children.push(child)
|
|
104
|
+
}
|
|
105
|
+
}
|
|
106
|
+
})
|
|
107
|
+
}
|
|
108
|
+
|
|
109
|
+
// 处理路由的path
|
|
110
|
+
function dealRoutePath(uri) {
|
|
111
|
+
if (!uri) return ''
|
|
112
|
+
if (!uri.startsWith('/')) {
|
|
113
|
+
uri = `/${uri}`
|
|
114
|
+
}
|
|
115
|
+
// 不要参数部分
|
|
116
|
+
if (uri.includes('?')) {
|
|
117
|
+
uri = uri.split('?')[0]
|
|
118
|
+
}
|
|
119
|
+
// 不要后缀部分
|
|
120
|
+
if (uri.includes('.')) {
|
|
121
|
+
uri = uri.split('.')[0]
|
|
122
|
+
}
|
|
123
|
+
return uri
|
|
124
|
+
}
|
|
125
|
+
|
|
126
|
+
/**
|
|
127
|
+
* 根据所有的权限组织菜单
|
|
128
|
+
*
|
|
129
|
+
* @param {Array} permissionList 权限数据
|
|
130
|
+
* @returns 菜单
|
|
131
|
+
*/
|
|
132
|
+
export function generatorMenuTree(permissionList = []) {
|
|
133
|
+
permissionList = permissionList.filter((item) => isMenuPermissionType(item.type))
|
|
134
|
+
const menuTree = []
|
|
135
|
+
|
|
136
|
+
listToMenuTree({
|
|
137
|
+
list: permissionList,
|
|
138
|
+
menuTree,
|
|
139
|
+
pageNode: { children: [] },
|
|
140
|
+
parentId: '0',
|
|
141
|
+
crumbs: [],
|
|
142
|
+
root: true,
|
|
143
|
+
})
|
|
144
|
+
|
|
145
|
+
return menuTree
|
|
146
|
+
}
|
|
147
|
+
|
|
148
|
+
/**
|
|
149
|
+
* 根据权限数据生成动态的树形路由表
|
|
150
|
+
*
|
|
151
|
+
* @param {Array} permissionList 权限数据
|
|
152
|
+
* @returns 路由表
|
|
153
|
+
*/
|
|
154
|
+
export function generatorDynamicRouter(permissionList = []) {
|
|
155
|
+
// 菜单的树形结构
|
|
156
|
+
const menuTree = []
|
|
157
|
+
// 所有的页面都包装在同一个组件里
|
|
158
|
+
const pageNode = {
|
|
159
|
+
path: '/page',
|
|
160
|
+
name: 'page',
|
|
161
|
+
meta: { hideInMenu: true, notCache: true },
|
|
162
|
+
component: 'EmptyLayoutNotCache',
|
|
163
|
+
children: [],
|
|
164
|
+
}
|
|
165
|
+
// 转树形结构
|
|
166
|
+
listToMenuTree({
|
|
167
|
+
list: permissionList,
|
|
168
|
+
menuTree,
|
|
169
|
+
pageNode,
|
|
170
|
+
parentId: '0', // 根节点Id固定为0
|
|
171
|
+
crumbs: [],
|
|
172
|
+
root: true,
|
|
173
|
+
})
|
|
174
|
+
|
|
175
|
+
if (pageNode.children.length) {
|
|
176
|
+
menuTree.push(pageNode)
|
|
177
|
+
}
|
|
178
|
+
return generator(menuTree)
|
|
179
|
+
}
|
|
180
|
+
|
|
181
|
+
/**
|
|
182
|
+
* 生成 vue-router 层级路由表
|
|
183
|
+
*
|
|
184
|
+
* @param {Array} menuData 权限的树形结构数据
|
|
185
|
+
* @returns 路由表
|
|
186
|
+
*/
|
|
187
|
+
export function generator(menuData = []) {
|
|
188
|
+
for (let item of menuData) {
|
|
189
|
+
if (item.component) {
|
|
190
|
+
const target = constantRouterComponents[item.component]
|
|
191
|
+
if (target) {
|
|
192
|
+
item.component = target.component
|
|
193
|
+
} else if (item.path) {
|
|
194
|
+
if (window.loadComponentHandler) {
|
|
195
|
+
item.component = window.loadComponentHandler(item.path, item.name) || NotFound
|
|
196
|
+
}
|
|
197
|
+
} else {
|
|
198
|
+
console.error(`找不到组件定义:${item.component},请排查资源路径配置是否正确`)
|
|
199
|
+
item.component = NotFound
|
|
200
|
+
}
|
|
201
|
+
|
|
202
|
+
if (item.children && item.children.length > 0) {
|
|
203
|
+
generator(item.children)
|
|
204
|
+
}
|
|
205
|
+
}
|
|
206
|
+
}
|
|
207
|
+
return menuData
|
|
208
|
+
}
|
|
@@ -0,0 +1,205 @@
|
|
|
1
|
+
// import { config } from '@indfnd/utils'
|
|
2
|
+
|
|
3
|
+
const hasChild = (item) => {
|
|
4
|
+
return item.children && item.children.length
|
|
5
|
+
}
|
|
6
|
+
|
|
7
|
+
/**
|
|
8
|
+
* @param {Array} target 目标数组
|
|
9
|
+
* @param {Array} arr 需要查询的数组
|
|
10
|
+
* @description 判断要查询的数组是否至少有一个元素包含在目标数组中
|
|
11
|
+
*/
|
|
12
|
+
const hasOneOf = (targetArr, arr) => {
|
|
13
|
+
return targetArr.some((_) => arr.includes(_))
|
|
14
|
+
}
|
|
15
|
+
|
|
16
|
+
const showThisMenuEle = (item, access) => {
|
|
17
|
+
if (item.meta && item.meta.access && item.meta.access.length) {
|
|
18
|
+
if (hasOneOf(item.meta.access, access)) return true
|
|
19
|
+
else return false
|
|
20
|
+
} else return true
|
|
21
|
+
}
|
|
22
|
+
|
|
23
|
+
/**
|
|
24
|
+
* @param {Number} times 回调函数需要执行的次数
|
|
25
|
+
* @param {Function} callback 回调函数
|
|
26
|
+
*/
|
|
27
|
+
const doCustomTimes = (times, callback) => {
|
|
28
|
+
let i = -1
|
|
29
|
+
while (++i < times) {
|
|
30
|
+
callback(i)
|
|
31
|
+
}
|
|
32
|
+
}
|
|
33
|
+
|
|
34
|
+
export const getRouteTitleHandled = (route) => {
|
|
35
|
+
let router = { ...route }
|
|
36
|
+
let meta = { ...route.meta }
|
|
37
|
+
let title = ''
|
|
38
|
+
if (meta.title) {
|
|
39
|
+
if (typeof meta.title === 'function') {
|
|
40
|
+
meta.__titleIsFunction__ = true
|
|
41
|
+
title = meta.title(router)
|
|
42
|
+
} else title = meta.title
|
|
43
|
+
}
|
|
44
|
+
meta.title = title
|
|
45
|
+
router.meta = meta
|
|
46
|
+
return router
|
|
47
|
+
}
|
|
48
|
+
|
|
49
|
+
/**
|
|
50
|
+
* @description 根据当前跳转的路由设置显示在浏览器标签的title
|
|
51
|
+
* 标签名字不允许改变,固定为 营销业务一体化平台
|
|
52
|
+
* @param {Object} routeItem 路由对象
|
|
53
|
+
*/
|
|
54
|
+
export const setTitle = (/*routeItem*/) => {
|
|
55
|
+
// const pageTitle = getRouteTitleHandled(routeItem).meta.title
|
|
56
|
+
// window.document.title = pageTitle ? `${config.title} - ${pageTitle}` : config.title
|
|
57
|
+
}
|
|
58
|
+
|
|
59
|
+
/**
|
|
60
|
+
* @param {Array} list 通过路由列表得到菜单列表
|
|
61
|
+
* @returns {Array}
|
|
62
|
+
*/
|
|
63
|
+
export const getMenuByRouter = (list, access) => {
|
|
64
|
+
let res = []
|
|
65
|
+
_forEach(list, (item) => {
|
|
66
|
+
if (!item.meta || (item.meta && !item.meta.hideInMenu)) {
|
|
67
|
+
let obj = {
|
|
68
|
+
icon: (item.meta && item.meta.icon) || '',
|
|
69
|
+
name: item.name,
|
|
70
|
+
meta: item.meta,
|
|
71
|
+
}
|
|
72
|
+
if (
|
|
73
|
+
(hasChild(item) || (item.meta && item.meta.showAlways)) &&
|
|
74
|
+
showThisMenuEle(item, access)
|
|
75
|
+
) {
|
|
76
|
+
obj.children = getMenuByRouter(item.children, access)
|
|
77
|
+
}
|
|
78
|
+
if (item.meta && item.meta.href) obj.href = item.meta.href
|
|
79
|
+
if (showThisMenuEle(item, access)) res.push(obj)
|
|
80
|
+
}
|
|
81
|
+
})
|
|
82
|
+
return res
|
|
83
|
+
}
|
|
84
|
+
|
|
85
|
+
/**
|
|
86
|
+
* @param {Array} routeMetched 当前路由metched
|
|
87
|
+
* @returns {Array}
|
|
88
|
+
*/
|
|
89
|
+
export const getBreadCrumbList = (route, homeRoute) => {
|
|
90
|
+
let homeItem = { ...homeRoute, icon: homeRoute.meta.icon }
|
|
91
|
+
const { crumbs } = route.meta
|
|
92
|
+
if (crumbs && crumbs.length > 0) {
|
|
93
|
+
crumbs.forEach((item) => {
|
|
94
|
+
item.meta = {
|
|
95
|
+
title: item.title,
|
|
96
|
+
}
|
|
97
|
+
if (item.type === 2) {
|
|
98
|
+
item.to = item.name
|
|
99
|
+
}
|
|
100
|
+
})
|
|
101
|
+
}
|
|
102
|
+
let breadCrumbList = [{ ...homeItem, to: homeRoute.name }]
|
|
103
|
+
if (crumbs && crumbs.length > 0) {
|
|
104
|
+
breadCrumbList = breadCrumbList.concat(crumbs)
|
|
105
|
+
}
|
|
106
|
+
return breadCrumbList
|
|
107
|
+
}
|
|
108
|
+
|
|
109
|
+
export const showTitle = (item) => {
|
|
110
|
+
return item.meta.title
|
|
111
|
+
}
|
|
112
|
+
|
|
113
|
+
/**
|
|
114
|
+
* @description 本地存储和获取标签导航列表
|
|
115
|
+
*/
|
|
116
|
+
export const setTagNavListInLocalstorage = (list) => {
|
|
117
|
+
sessionStorage.tagNaveList = JSON.stringify(list)
|
|
118
|
+
}
|
|
119
|
+
/**
|
|
120
|
+
* @returns {Array} 其中的每个元素只包含路由原信息中的name, path, meta三项
|
|
121
|
+
*/
|
|
122
|
+
export const getTagNavListFromLocalstorage = () => {
|
|
123
|
+
const list = sessionStorage.tagNaveList
|
|
124
|
+
return list ? JSON.parse(list) : []
|
|
125
|
+
}
|
|
126
|
+
|
|
127
|
+
/**
|
|
128
|
+
* @param {Array} routers 路由列表数组
|
|
129
|
+
* @description 用于找到路由列表中name为home的对象
|
|
130
|
+
*/
|
|
131
|
+
export const getHomeRoute = (routers, homeRouteName = 'home') => {
|
|
132
|
+
let i = -1
|
|
133
|
+
let len = routers.length
|
|
134
|
+
let homeRoute = {}
|
|
135
|
+
while (++i < len) {
|
|
136
|
+
let item = routers[i]
|
|
137
|
+
if (item.children && item.children.length) {
|
|
138
|
+
let res = getHomeRoute(item.children, homeRouteName)
|
|
139
|
+
if (res.name) return res
|
|
140
|
+
} else {
|
|
141
|
+
if (item.name === homeRouteName) homeRoute = item
|
|
142
|
+
}
|
|
143
|
+
}
|
|
144
|
+
return homeRoute
|
|
145
|
+
}
|
|
146
|
+
|
|
147
|
+
/**
|
|
148
|
+
* @param {Array} list 标签列表
|
|
149
|
+
* @param {String} name 当前关闭的标签的name
|
|
150
|
+
*/
|
|
151
|
+
export const getNextRoute = (list, route) => {
|
|
152
|
+
let res = {}
|
|
153
|
+
if (list.length === 2) {
|
|
154
|
+
res = getHomeRoute(list)
|
|
155
|
+
} else {
|
|
156
|
+
const index = list.findIndex((item) => routeEqual(item, route))
|
|
157
|
+
if (index === list.length - 1) res = list[list.length - 2]
|
|
158
|
+
else res = list[index + 1]
|
|
159
|
+
}
|
|
160
|
+
return res
|
|
161
|
+
}
|
|
162
|
+
|
|
163
|
+
/**
|
|
164
|
+
* 判断打开的标签列表里是否已存在这个新添加的路由对象
|
|
165
|
+
*/
|
|
166
|
+
export const routeHasExist = (tagNavList, routeItem) => {
|
|
167
|
+
let len = tagNavList.length
|
|
168
|
+
let res = false
|
|
169
|
+
doCustomTimes(len, (index) => {
|
|
170
|
+
if (routeEqual(tagNavList[index], routeItem)) res = true
|
|
171
|
+
})
|
|
172
|
+
return res
|
|
173
|
+
}
|
|
174
|
+
|
|
175
|
+
/**
|
|
176
|
+
* @description 根据name/params/query判断两个路由对象是否相等
|
|
177
|
+
* @param {*} route1 路由对象
|
|
178
|
+
* @param {*} route2 路由对象
|
|
179
|
+
*/
|
|
180
|
+
export const routeEqual = (route1, route2) => {
|
|
181
|
+
return route1.name === route2.name
|
|
182
|
+
}
|
|
183
|
+
|
|
184
|
+
/**
|
|
185
|
+
* @param {*} list 现有标签导航列表
|
|
186
|
+
* @param {*} newRoute 新添加的路由原信息对象
|
|
187
|
+
* @description 如果该newRoute已经存在则不再添加
|
|
188
|
+
*/
|
|
189
|
+
export const getNewTagList = (list, newRoute) => {
|
|
190
|
+
const { name, path, meta } = newRoute
|
|
191
|
+
let newList = [...list]
|
|
192
|
+
if (newList.findIndex((item) => item.name === name) >= 0) return newList
|
|
193
|
+
else newList.push({ name, path, meta })
|
|
194
|
+
return newList
|
|
195
|
+
}
|
|
196
|
+
|
|
197
|
+
function _forEach(arr, fn) {
|
|
198
|
+
if (!arr.length || !fn) return
|
|
199
|
+
let i = -1
|
|
200
|
+
let len = arr.length
|
|
201
|
+
while (++i < len) {
|
|
202
|
+
let item = arr[i]
|
|
203
|
+
fn(item, i, arr)
|
|
204
|
+
}
|
|
205
|
+
}
|
package/utils/n-theme.js
ADDED
|
@@ -0,0 +1,30 @@
|
|
|
1
|
+
import classnames from 'classnames'
|
|
2
|
+
import config from "@lambo-design/shared/config/config"
|
|
3
|
+
|
|
4
|
+
export const THEME_KEY = 'ind-theme'
|
|
5
|
+
export const THEME_LIST = ['ind-default-theme', 'ind-small-theme']
|
|
6
|
+
const defaultTheme = 'ind-small-theme' //'ind-default-theme'
|
|
7
|
+
|
|
8
|
+
export function getDefaultTheme() {
|
|
9
|
+
return /*getLocalStorage(THEME_KEY) ||*/ defaultTheme
|
|
10
|
+
}
|
|
11
|
+
|
|
12
|
+
export function doChangeTheme(theme) {
|
|
13
|
+
const body = document.getElementsByTagName('body') && document.getElementsByTagName('body')[0]
|
|
14
|
+
if (body) {
|
|
15
|
+
let cls = (body.className && body.className.split(' ')) || []
|
|
16
|
+
const nowCls = cls.reduce((rlt, item) => ({ ...rlt, [item]: true }), {
|
|
17
|
+
'ind-theme': true,
|
|
18
|
+
'ind-default-theme': true,
|
|
19
|
+
'ibp-mode': !config.showMenus,
|
|
20
|
+
})
|
|
21
|
+
|
|
22
|
+
let removeCls = {}
|
|
23
|
+
const nowTheme = body.getAttribute(THEME_KEY)
|
|
24
|
+
if (nowTheme && nowTheme !== defaultTheme) {
|
|
25
|
+
removeCls = { [nowTheme]: false }
|
|
26
|
+
}
|
|
27
|
+
body.setAttribute(THEME_KEY, theme)
|
|
28
|
+
body.className = classnames({ ...nowCls, ...removeCls }, theme)
|
|
29
|
+
}
|
|
30
|
+
}
|
package/utils/number.js
CHANGED
|
@@ -79,21 +79,6 @@ export function numToDX(num) {
|
|
|
79
79
|
return str.replace(/零(千|百|拾|角)/g, "零").replace(/(零)+/g, "零").replace(/零(万|亿|元)/g, "$1").replace(/(亿)万|壹(拾)/g, "$1$2").replace(/^元零?|零分/g, "").replace(/元$/g, "元整");
|
|
80
80
|
}
|
|
81
81
|
|
|
82
|
-
/**
|
|
83
|
-
* 校验电话号码是否正确
|
|
84
|
-
*
|
|
85
|
-
*/
|
|
86
|
-
|
|
87
|
-
export function checkTel(val) {
|
|
88
|
-
var isPhone = /^([0-9]{3,4}-)?[0-9]{7,8}$/;
|
|
89
|
-
var isMob = /^((\+?86)|(\(\+86\)))?(13[0123456789][0-9]{8}|15[012356789][0-9]{8}|18[0123456789][0-9]{8}|14[57][0-9]{8}|17[678][0-9]{8})$/;
|
|
90
|
-
if (isMob.test(val) || isPhone.test(val)) {
|
|
91
|
-
return true;
|
|
92
|
-
} else {
|
|
93
|
-
return false;
|
|
94
|
-
}
|
|
95
|
-
}
|
|
96
|
-
|
|
97
82
|
/**
|
|
98
83
|
* 保留小数位数
|
|
99
84
|
*/
|
|
@@ -121,3 +106,75 @@ export function toFixed(num, digit) {
|
|
|
121
106
|
}
|
|
122
107
|
return changenum;
|
|
123
108
|
}
|
|
109
|
+
/**
|
|
110
|
+
* js除法计算
|
|
111
|
+
*/
|
|
112
|
+
export const accDiv = function (arg1, arg2) {
|
|
113
|
+
let t1 = 0, t2 = 0, r1, r2;
|
|
114
|
+
try {
|
|
115
|
+
t1 = arg1.toString().split(".")[1].length
|
|
116
|
+
} catch (e) {
|
|
117
|
+
}
|
|
118
|
+
try {
|
|
119
|
+
t2 = arg2.toString().split(".")[1].length
|
|
120
|
+
} catch (e) {
|
|
121
|
+
}
|
|
122
|
+
r1 = Number(arg1.toString().replace(".", ""))
|
|
123
|
+
r2 = Number(arg2.toString().replace(".", ""))
|
|
124
|
+
return (r1 / r2) * Math.pow(10, t2 - t1);
|
|
125
|
+
}
|
|
126
|
+
|
|
127
|
+
/**
|
|
128
|
+
* js乘法计算
|
|
129
|
+
*/
|
|
130
|
+
export const accMul = function (arg1, arg2) {
|
|
131
|
+
let m = 0, s1 = arg1.toString(), s2 = arg2.toString();
|
|
132
|
+
try {
|
|
133
|
+
m += s1.split(".")[1].length
|
|
134
|
+
} catch (e) {
|
|
135
|
+
}
|
|
136
|
+
try {
|
|
137
|
+
m += s2.split(".")[1].length
|
|
138
|
+
} catch (e) {
|
|
139
|
+
}
|
|
140
|
+
return accDiv(Number(s1.replace(".", "")) * Number(s2.replace(".", "")), Math.pow(10, m));
|
|
141
|
+
}
|
|
142
|
+
|
|
143
|
+
/**
|
|
144
|
+
* js加法计算
|
|
145
|
+
*/
|
|
146
|
+
export const accAdd = function (arg1, arg2) {
|
|
147
|
+
let r1, r2, m;
|
|
148
|
+
try {
|
|
149
|
+
r1 = arg1.toString().split(".")[1].length
|
|
150
|
+
} catch (e) {
|
|
151
|
+
r1 = 0
|
|
152
|
+
}
|
|
153
|
+
try {
|
|
154
|
+
r2 = arg2.toString().split(".")[1].length
|
|
155
|
+
} catch (e) {
|
|
156
|
+
r2 = 0
|
|
157
|
+
}
|
|
158
|
+
m = Math.pow(10, Math.max(r1, r2));
|
|
159
|
+
return accDiv((accMul(arg1, m) + accMul(arg2, m)), m);
|
|
160
|
+
}
|
|
161
|
+
|
|
162
|
+
/**
|
|
163
|
+
* js减法计算
|
|
164
|
+
*/
|
|
165
|
+
|
|
166
|
+
export const accSub = function (arg1, arg2) {
|
|
167
|
+
let r1, r2, m;
|
|
168
|
+
try {
|
|
169
|
+
r1 = arg1.toString().split(".")[1].length
|
|
170
|
+
} catch (e) {
|
|
171
|
+
r1 = 0
|
|
172
|
+
}
|
|
173
|
+
try {
|
|
174
|
+
r2 = arg2.toString().split(".")[1].length
|
|
175
|
+
} catch (e) {
|
|
176
|
+
r2 = 0
|
|
177
|
+
}
|
|
178
|
+
m = Math.pow(10, Math.max(r1, r2));
|
|
179
|
+
return accDiv((accMul(arg1, m) - accMul(arg2, m)), m);
|
|
180
|
+
};
|
package/utils/oss.js
ADDED
|
@@ -0,0 +1,57 @@
|
|
|
1
|
+
import { CONTENT_TYPE } from './ajax/content-type.js';
|
|
2
|
+
import { config } from '../config/config.js';
|
|
3
|
+
import ajax from "./ajax";
|
|
4
|
+
import axiosN from "./n/reuqest/axiosN.js";
|
|
5
|
+
|
|
6
|
+
/**
|
|
7
|
+
* 文档中心下载文件的url,主要用于图片等直接写在 href 里
|
|
8
|
+
*
|
|
9
|
+
* @param fileId 文件Id
|
|
10
|
+
* @returns url
|
|
11
|
+
*/
|
|
12
|
+
export function getOssFileUrl(fileId = '') {
|
|
13
|
+
return `${config.ossServerContext}/oss/file/get/${fileId}`
|
|
14
|
+
}
|
|
15
|
+
|
|
16
|
+
/**
|
|
17
|
+
* 文档中心上传文件的url
|
|
18
|
+
*
|
|
19
|
+
* @returns url
|
|
20
|
+
*/
|
|
21
|
+
export function putOssFileUrl() {
|
|
22
|
+
return `${config.ossServerContext}/oss/file/put`
|
|
23
|
+
}
|
|
24
|
+
|
|
25
|
+
/**
|
|
26
|
+
* 获取文档中心文件
|
|
27
|
+
*
|
|
28
|
+
* @param fileId 文件Id
|
|
29
|
+
* @param responseType 数据类型,支持 arraybuffer | blob | document | json | text | stream
|
|
30
|
+
* @returns 文件内容
|
|
31
|
+
*/
|
|
32
|
+
export function getOssFileApi(fileId, responseType) {
|
|
33
|
+
const config = {}
|
|
34
|
+
if (responseType) {
|
|
35
|
+
config.responseType = responseType
|
|
36
|
+
}
|
|
37
|
+
return ajax.get(getOssFileUrl(fileId), config)
|
|
38
|
+
}
|
|
39
|
+
|
|
40
|
+
/**
|
|
41
|
+
* 将文件上传到文档中心
|
|
42
|
+
*
|
|
43
|
+
* @param filename 文件名
|
|
44
|
+
* @param blob 文件的Blob数据
|
|
45
|
+
* @returns 文件Id
|
|
46
|
+
*/
|
|
47
|
+
export function putOssFileApi(filename, blob) {
|
|
48
|
+
let formData = new FormData()
|
|
49
|
+
formData.append('file', blob, filename)
|
|
50
|
+
|
|
51
|
+
return axiosN({
|
|
52
|
+
method: 'post',
|
|
53
|
+
url: putOssFileUrl(),
|
|
54
|
+
headers: { 'Content-Type': CONTENT_TYPE.multiForm },
|
|
55
|
+
data: formData,
|
|
56
|
+
})
|
|
57
|
+
}
|