n20-common-lib 1.2.5 → 1.2.8
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/package.json +1 -1
- package/src/assets/css/cl-form-item.scss +122 -7
- package/src/assets/css/cl-suspend.scss +1 -1
- package/src/assets/css/font-icon.scss +2 -1
- package/src/assets/css/normalize.scss +1 -1
- package/src/assets/iconFont/demo.css +539 -0
- package/src/assets/iconFont/demo_index.html +1614 -0
- package/src/assets/iconFont/iconfont.css +263 -0
- package/src/assets/iconFont/iconfont.js +1 -0
- package/src/assets/iconFont/iconfont.json +443 -0
- package/src/assets/iconFont/iconfont.ttf +0 -0
- package/src/assets/iconFont/iconfont.woff +0 -0
- package/src/assets/iconFont/iconfont.woff2 +0 -0
- package/src/components/FileExportAsync/index.vue +174 -0
- package/src/components/Filters/index.vue +6 -0
- package/src/components/Layout/AsideNav/index.vue +53 -78
- package/src/components/Layout/AsideNav/menuItem.vue +34 -0
- package/src/components/Layout/AsideNav/submenuTitle.vue +26 -0
- package/src/components/Layout/HeaderWrap/index.vue +29 -14
- package/src/components/Table/index.vue +10 -1
- package/src/directives/VTitle/index.js +8 -0
- package/src/index.js +8 -1
- package/src/plugins/SetMenuTree/setmenutree.vue +5 -5
- package/style/css/normalize.scss +1 -1
- package/style/fonts/iconfont.022f36c4.woff2 +0 -0
- package/style/fonts/iconfont.4a1b2c93.woff +0 -0
- package/style/fonts/iconfont.a9febaa2.ttf +0 -0
- package/style/index.css +3 -2
- package/style/index.css.map +1 -1
|
@@ -8,91 +8,60 @@
|
|
|
8
8
|
active-text-color="#ffffff"
|
|
9
9
|
>
|
|
10
10
|
<template v-for="omenus in menus">
|
|
11
|
-
<template v-for="
|
|
11
|
+
<template v-for="itemA in omenus.menu">
|
|
12
12
|
<!-- 一级菜单 -->
|
|
13
|
-
<
|
|
14
|
-
v-if="!
|
|
15
|
-
:key="
|
|
16
|
-
:
|
|
17
|
-
@click="linkFn
|
|
18
|
-
|
|
19
|
-
<i
|
|
20
|
-
v-if="item.iconUrl"
|
|
21
|
-
class="el-icon- icon-url"
|
|
22
|
-
:style="{ backgroundImage: `url(${item.iconUrl})` }"
|
|
23
|
-
></i>
|
|
24
|
-
<i v-else :class="item.iconClass"></i>
|
|
25
|
-
<span v-if="!item.href" slot="title">{{ item | titleF }}</span>
|
|
26
|
-
<a
|
|
27
|
-
v-else
|
|
28
|
-
slot="title"
|
|
29
|
-
:href="item.href"
|
|
30
|
-
target="_blank"
|
|
31
|
-
:rel="/^\//.test(item.href) ? 'opener' : undefined"
|
|
32
|
-
>{{ item | titleF }}</a
|
|
33
|
-
>
|
|
34
|
-
</el-menu-item>
|
|
13
|
+
<MenuItem
|
|
14
|
+
v-if="!itemA.children"
|
|
15
|
+
:key="itemA.title"
|
|
16
|
+
:item="itemA"
|
|
17
|
+
@click="linkFn"
|
|
18
|
+
/>
|
|
35
19
|
<el-submenu
|
|
36
20
|
v-else
|
|
37
|
-
:key="
|
|
38
|
-
:index="
|
|
21
|
+
:key="itemA.title"
|
|
22
|
+
:index="itemA.title"
|
|
39
23
|
popper-class="nav-menu-pop"
|
|
40
24
|
>
|
|
41
|
-
<
|
|
42
|
-
|
|
43
|
-
v-if="item.iconUrl"
|
|
44
|
-
class="el-icon- icon-url"
|
|
45
|
-
:style="{ backgroundImage: `url(${item.iconUrl})` }"
|
|
46
|
-
></i>
|
|
47
|
-
<i v-else :class="item.iconClass"></i>
|
|
48
|
-
<span>{{ item | titleF }}</span>
|
|
49
|
-
</template>
|
|
50
|
-
<template v-for="itemc in item.children">
|
|
25
|
+
<SubmenuTitle slot="title" :item="itemA" />
|
|
26
|
+
<template v-for="itemB in itemA.children">
|
|
51
27
|
<!-- 二级菜单 -->
|
|
52
|
-
<
|
|
53
|
-
v-if="!
|
|
54
|
-
:key="
|
|
55
|
-
:
|
|
56
|
-
@click="linkFn
|
|
57
|
-
|
|
58
|
-
<i
|
|
59
|
-
v-if="itemc.iconUrl"
|
|
60
|
-
class="el-icon- icon-url"
|
|
61
|
-
:style="{ backgroundImage: `url(${itemc.iconUrl})` }"
|
|
62
|
-
></i>
|
|
63
|
-
<i v-else :class="itemc.iconClass"></i>
|
|
64
|
-
<span slot="title">{{ itemc | titleF }}</span>
|
|
65
|
-
</el-menu-item>
|
|
28
|
+
<MenuItem
|
|
29
|
+
v-if="!itemB.children"
|
|
30
|
+
:key="itemB.title"
|
|
31
|
+
:item="itemB"
|
|
32
|
+
@click="linkFn"
|
|
33
|
+
/>
|
|
66
34
|
<el-submenu
|
|
67
35
|
v-else
|
|
68
|
-
:key="
|
|
69
|
-
:index="
|
|
36
|
+
:key="itemB.title"
|
|
37
|
+
:index="itemB.title"
|
|
70
38
|
popper-class="nav-menu-pop"
|
|
71
39
|
>
|
|
72
|
-
<
|
|
73
|
-
|
|
74
|
-
v-if="itemc.iconUrl"
|
|
75
|
-
class="el-icon- icon-url"
|
|
76
|
-
:style="{ backgroundImage: `url(${itemc.iconUrl})` }"
|
|
77
|
-
></i>
|
|
78
|
-
<i v-else :class="itemc.iconClass"></i>
|
|
79
|
-
<span>{{ itemc | titleF }}</span>
|
|
80
|
-
</template>
|
|
81
|
-
<template v-for="itemcc in itemc.children">
|
|
40
|
+
<SubmenuTitle slot="title" :item="itemB" />
|
|
41
|
+
<template v-for="itemC in itemB.children">
|
|
82
42
|
<!-- 三级菜单 -->
|
|
83
|
-
<
|
|
84
|
-
|
|
85
|
-
:
|
|
86
|
-
|
|
43
|
+
<MenuItem
|
|
44
|
+
v-if="!itemC.children"
|
|
45
|
+
:key="itemC.title"
|
|
46
|
+
:item="itemC"
|
|
47
|
+
@click="linkFn"
|
|
48
|
+
/>
|
|
49
|
+
<el-submenu
|
|
50
|
+
v-else
|
|
51
|
+
:key="itemC.title"
|
|
52
|
+
:index="itemC.title"
|
|
53
|
+
popper-class="nav-menu-pop"
|
|
87
54
|
>
|
|
88
|
-
<
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
|
|
55
|
+
<SubmenuTitle slot="title" :item="itemC" />
|
|
56
|
+
<template v-for="itemD in itemC.children">
|
|
57
|
+
<!-- 四级菜单 -->
|
|
58
|
+
<MenuItem
|
|
59
|
+
:key="itemD.title"
|
|
60
|
+
:item="itemD"
|
|
61
|
+
@click="linkFn"
|
|
62
|
+
/>
|
|
63
|
+
</template>
|
|
64
|
+
</el-submenu>
|
|
96
65
|
</template>
|
|
97
66
|
</el-submenu>
|
|
98
67
|
</template>
|
|
@@ -101,17 +70,23 @@
|
|
|
101
70
|
</template>
|
|
102
71
|
<span class="flex-item"></span>
|
|
103
72
|
<div class="open-collapsed-btn">
|
|
104
|
-
<span
|
|
73
|
+
<span
|
|
74
|
+
:class="
|
|
75
|
+
collapse
|
|
76
|
+
? 'n20-icon-caidanshouqi f-s-l rotate-icon'
|
|
77
|
+
: 'n20-icon-caidanshouqi f-s-l'
|
|
78
|
+
"
|
|
79
|
+
@click="setCollapse"
|
|
80
|
+
></span>
|
|
105
81
|
</div>
|
|
106
82
|
</el-menu>
|
|
107
83
|
</template>
|
|
108
84
|
|
|
109
85
|
<script>
|
|
110
|
-
import
|
|
86
|
+
import MenuItem from './menuItem.vue'
|
|
87
|
+
import SubmenuTitle from './submenuTitle.vue'
|
|
111
88
|
export default {
|
|
112
|
-
|
|
113
|
-
titleF: labelF
|
|
114
|
-
},
|
|
89
|
+
components: { MenuItem, SubmenuTitle },
|
|
115
90
|
props: {
|
|
116
91
|
menus: {
|
|
117
92
|
type: Array,
|
|
@@ -0,0 +1,34 @@
|
|
|
1
|
+
<template>
|
|
2
|
+
<el-menu-item :index="item.uuid" @click="$emit('click', item)">
|
|
3
|
+
<i
|
|
4
|
+
v-if="item.iconUrl"
|
|
5
|
+
class="el-icon- icon-url"
|
|
6
|
+
:style="{ backgroundImage: `url(${item.iconUrl})` }"
|
|
7
|
+
></i>
|
|
8
|
+
<i v-else :class="item.iconClass"></i>
|
|
9
|
+
<span v-if="!item.href" slot="title">{{ item | titleF }}</span>
|
|
10
|
+
<a
|
|
11
|
+
v-else
|
|
12
|
+
slot="title"
|
|
13
|
+
:href="item.href"
|
|
14
|
+
target="_blank"
|
|
15
|
+
:rel="/^\//.test(item.href) ? 'opener' : undefined"
|
|
16
|
+
>{{ item | titleF }}</a
|
|
17
|
+
>
|
|
18
|
+
</el-menu-item>
|
|
19
|
+
</template>
|
|
20
|
+
|
|
21
|
+
<script>
|
|
22
|
+
import { labelF } from '../utils'
|
|
23
|
+
export default {
|
|
24
|
+
filters: {
|
|
25
|
+
titleF: labelF
|
|
26
|
+
},
|
|
27
|
+
props: {
|
|
28
|
+
item: {
|
|
29
|
+
type: Object,
|
|
30
|
+
default: () => ({})
|
|
31
|
+
}
|
|
32
|
+
}
|
|
33
|
+
}
|
|
34
|
+
</script>
|
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
<template>
|
|
2
|
+
<component :is="'slot'">
|
|
3
|
+
<i
|
|
4
|
+
v-if="item.iconUrl"
|
|
5
|
+
class="el-icon- icon-url"
|
|
6
|
+
:style="{ backgroundImage: `url(${item.iconUrl})` }"
|
|
7
|
+
></i>
|
|
8
|
+
<i v-else :class="item.iconClass"></i>
|
|
9
|
+
<span>{{ item | titleF }}</span>
|
|
10
|
+
</component>
|
|
11
|
+
</template>
|
|
12
|
+
|
|
13
|
+
<script>
|
|
14
|
+
import { labelF } from '../utils'
|
|
15
|
+
export default {
|
|
16
|
+
filters: {
|
|
17
|
+
titleF: labelF
|
|
18
|
+
},
|
|
19
|
+
props: {
|
|
20
|
+
item: {
|
|
21
|
+
type: Object,
|
|
22
|
+
default: () => ({})
|
|
23
|
+
}
|
|
24
|
+
}
|
|
25
|
+
}
|
|
26
|
+
</script>
|
|
@@ -89,6 +89,23 @@
|
|
|
89
89
|
<el-dropdown-item command="myDeal" divided>{{
|
|
90
90
|
'我的交易' | $l(i18n)
|
|
91
91
|
}}</el-dropdown-item>
|
|
92
|
+
<el-dropdown-item
|
|
93
|
+
v-if="customOpt.agency && customOpt.agency.show"
|
|
94
|
+
command="myAgency"
|
|
95
|
+
divided
|
|
96
|
+
>
|
|
97
|
+
<div class="flex-box flex-v">
|
|
98
|
+
<span>{{ '工作代理' | $l(i18n) }}</span>
|
|
99
|
+
<el-badge
|
|
100
|
+
v-if="customOpt.agency.underway"
|
|
101
|
+
class="m-l-auto font-size-small color-primary"
|
|
102
|
+
is-dot
|
|
103
|
+
type="primary"
|
|
104
|
+
style="line-height: initial"
|
|
105
|
+
>进行中</el-badge
|
|
106
|
+
>
|
|
107
|
+
</div>
|
|
108
|
+
</el-dropdown-item>
|
|
92
109
|
<el-divider class="m-t-s m-b-s" />
|
|
93
110
|
<div class="user-log-time p-l p-r p-b-s">
|
|
94
111
|
<i
|
|
@@ -171,6 +188,9 @@ const i18n = {
|
|
|
171
188
|
我的交易: {
|
|
172
189
|
en: 'My deal'
|
|
173
190
|
},
|
|
191
|
+
工作代理: {
|
|
192
|
+
en: 'My agency'
|
|
193
|
+
},
|
|
174
194
|
登录时长: {
|
|
175
195
|
en: 'Login duration'
|
|
176
196
|
},
|
|
@@ -209,6 +229,12 @@ export default {
|
|
|
209
229
|
changePwd,
|
|
210
230
|
noticePop
|
|
211
231
|
},
|
|
232
|
+
inject: {
|
|
233
|
+
customOpt: {
|
|
234
|
+
type: Object,
|
|
235
|
+
default: () => ({})
|
|
236
|
+
}
|
|
237
|
+
},
|
|
212
238
|
data() {
|
|
213
239
|
return {
|
|
214
240
|
show: false,
|
|
@@ -271,18 +297,15 @@ export default {
|
|
|
271
297
|
case 'dowApp':
|
|
272
298
|
this.dowApp()
|
|
273
299
|
break
|
|
274
|
-
case 'setStyle':
|
|
275
|
-
this.setStyle()
|
|
276
|
-
break
|
|
277
300
|
case 'changePassword':
|
|
278
301
|
this.changePassword()
|
|
279
302
|
break
|
|
280
|
-
case 'myDeal':
|
|
281
|
-
this.myDeal()
|
|
282
|
-
break
|
|
283
303
|
case 'logOut':
|
|
284
304
|
this.logOut()
|
|
285
305
|
break
|
|
306
|
+
default:
|
|
307
|
+
this.$emit('custom-event', { type: c })
|
|
308
|
+
break
|
|
286
309
|
}
|
|
287
310
|
},
|
|
288
311
|
setLang() {
|
|
@@ -302,18 +325,10 @@ export default {
|
|
|
302
325
|
aDom = undefined
|
|
303
326
|
})
|
|
304
327
|
},
|
|
305
|
-
setStyle() {
|
|
306
|
-
// alert('主题设置')
|
|
307
|
-
this.$emit('custom-event', { type: 'setStyle' })
|
|
308
|
-
},
|
|
309
328
|
changePassword() {
|
|
310
329
|
// alert('修改密码')
|
|
311
330
|
this.cpwdV = true
|
|
312
331
|
},
|
|
313
|
-
myDeal() {
|
|
314
|
-
// alert('我的交易')
|
|
315
|
-
this.$emit('custom-event', { type: 'myDeal' })
|
|
316
|
-
},
|
|
317
332
|
logOut() {
|
|
318
333
|
// alert('退出登录')
|
|
319
334
|
this.$confirm(
|
|
@@ -21,6 +21,7 @@
|
|
|
21
21
|
v-else
|
|
22
22
|
:key="'cl-table-' + i"
|
|
23
23
|
:formatter="item.formatter | colfF"
|
|
24
|
+
:filters="item.filters | colftF(filtersMap)"
|
|
24
25
|
v-bind="item"
|
|
25
26
|
/>
|
|
26
27
|
</template>
|
|
@@ -104,7 +105,7 @@ export default {
|
|
|
104
105
|
let mc = colf.match(/{(\S+)\|rate}/)
|
|
105
106
|
let key = mc && mc[1]
|
|
106
107
|
|
|
107
|
-
return (row) => numerify(row[key], '0.
|
|
108
|
+
return (row) => numerify(row[key], '0.000000')
|
|
108
109
|
} else {
|
|
109
110
|
let mc = colf.match(/{[^}]+}/g) || []
|
|
110
111
|
let mcv = mc.map((m) => m.replace(/{|}/g, ''))
|
|
@@ -117,6 +118,10 @@ export default {
|
|
|
117
118
|
return str
|
|
118
119
|
}
|
|
119
120
|
}
|
|
121
|
+
},
|
|
122
|
+
colftF(colft, fMap) {
|
|
123
|
+
if (typeof colft !== 'string') return colft
|
|
124
|
+
return fMap[colft]
|
|
120
125
|
}
|
|
121
126
|
},
|
|
122
127
|
props: {
|
|
@@ -133,6 +138,10 @@ export default {
|
|
|
133
138
|
require: true,
|
|
134
139
|
default: () => []
|
|
135
140
|
},
|
|
141
|
+
filtersMap: {
|
|
142
|
+
type: Object,
|
|
143
|
+
default: () => ({})
|
|
144
|
+
},
|
|
136
145
|
pageObj: {
|
|
137
146
|
type: Object,
|
|
138
147
|
default: undefined
|
|
@@ -1,5 +1,7 @@
|
|
|
1
1
|
import Tooltip from './tooltip.vue'
|
|
2
2
|
|
|
3
|
+
let timer = undefined
|
|
4
|
+
|
|
3
5
|
function tipShow(el, tip) {
|
|
4
6
|
if (el.$tooltipTitle) {
|
|
5
7
|
if (!el.$tooltipTitleOverflow || el.clientWidth < el.scrollWidth) {
|
|
@@ -8,6 +10,12 @@ function tipShow(el, tip) {
|
|
|
8
10
|
tip.$refs['title-pop'].doDestroy()
|
|
9
11
|
tip.$nextTick(() => {
|
|
10
12
|
tip.visible = true
|
|
13
|
+
timer = setInterval(() => {
|
|
14
|
+
if (tip.visible && !el.scrollWidth) {
|
|
15
|
+
tipHide(el, tip)
|
|
16
|
+
clearInterval(timer)
|
|
17
|
+
}
|
|
18
|
+
}, 1000)
|
|
11
19
|
})
|
|
12
20
|
}
|
|
13
21
|
}
|
package/src/index.js
CHANGED
|
@@ -44,6 +44,7 @@ import Anchor from './components/Anchor/index.vue'
|
|
|
44
44
|
import AnchorItem from './components/Anchor/AnchorItem.vue'
|
|
45
45
|
import FlowStep from './components/FlowStep/index.vue'
|
|
46
46
|
import CascaderArea from './components/CascaderArea/index.vue'
|
|
47
|
+
import FileExportAsync from './components/FileExportAsync/index.vue'
|
|
47
48
|
/* old */
|
|
48
49
|
import TableO from './components/Table/indexO.vue'
|
|
49
50
|
import FiltersO from './components/Filters/indexO.vue'
|
|
@@ -59,6 +60,8 @@ import VClickOutside from './directives/VClickOutside/index.js'
|
|
|
59
60
|
import VHas from './directives/VHas/index.js'
|
|
60
61
|
|
|
61
62
|
/** 注入方法 */
|
|
63
|
+
import dayjs from 'dayjs'
|
|
64
|
+
import numerify from 'numerify'
|
|
62
65
|
import axios from './utils/axios.js'
|
|
63
66
|
import auth from './utils/auth.js'
|
|
64
67
|
import { msgPor, msgboxPor } from './utils/msgboxPor.js'
|
|
@@ -121,6 +124,7 @@ const components = [
|
|
|
121
124
|
AnchorItem,
|
|
122
125
|
FlowStep,
|
|
123
126
|
CascaderArea,
|
|
127
|
+
FileExportAsync,
|
|
124
128
|
/* old */
|
|
125
129
|
TableO,
|
|
126
130
|
FiltersO,
|
|
@@ -211,8 +215,11 @@ export {
|
|
|
211
215
|
AnchorItem,
|
|
212
216
|
FlowStep,
|
|
213
217
|
CascaderArea,
|
|
218
|
+
FileExportAsync,
|
|
214
219
|
repairEl,
|
|
215
220
|
linkPush,
|
|
216
221
|
linkGo,
|
|
217
|
-
isHas
|
|
222
|
+
isHas,
|
|
223
|
+
dayjs,
|
|
224
|
+
numerify
|
|
218
225
|
}
|
|
@@ -79,10 +79,10 @@
|
|
|
79
79
|
{ required: true, message: '请输入名称', trigger: 'blur' }
|
|
80
80
|
]"
|
|
81
81
|
>
|
|
82
|
-
<el-input v-model="activeMenu.label" class="w
|
|
82
|
+
<el-input v-model="activeMenu.label" class="input-w" />
|
|
83
83
|
</el-form-item>
|
|
84
84
|
<el-form-item label="属性:">
|
|
85
|
-
<el-select v-model="activeMenu.resType" class="w
|
|
85
|
+
<el-select v-model="activeMenu.resType" class="input-w">
|
|
86
86
|
<el-option value="1" label="左边栏菜单" />
|
|
87
87
|
<el-option value="2" label="隐藏菜单" />
|
|
88
88
|
<el-option value="3" label="权限按钮" />
|
|
@@ -99,7 +99,7 @@
|
|
|
99
99
|
>
|
|
100
100
|
<el-input
|
|
101
101
|
v-model="activeMenu.appNo"
|
|
102
|
-
class="w
|
|
102
|
+
class="input-w"
|
|
103
103
|
@change="(val) => setAppNo(val, activeMenu)"
|
|
104
104
|
/>
|
|
105
105
|
</el-form-item>
|
|
@@ -112,7 +112,7 @@
|
|
|
112
112
|
{ required: true, message: '请输入访问路径', trigger: 'blur' }
|
|
113
113
|
]"
|
|
114
114
|
>
|
|
115
|
-
<el-input v-model="activeMenu.pageurl" class="w
|
|
115
|
+
<el-input v-model="activeMenu.pageurl" class="input-w" />
|
|
116
116
|
</el-form-item>
|
|
117
117
|
<el-form-item label="图标:">
|
|
118
118
|
<div class="flex-box">
|
|
@@ -151,7 +151,7 @@
|
|
|
151
151
|
</el-form-item>
|
|
152
152
|
</template>
|
|
153
153
|
<el-form-item v-if="activeMenu.treeno" label="权限编码:">
|
|
154
|
-
<div class="w
|
|
154
|
+
<div class="input-w flex-box">
|
|
155
155
|
<el-input class="flex-item" :value="activeMenu.treeno" readonly />
|
|
156
156
|
</div>
|
|
157
157
|
</el-form-item>
|
package/style/css/normalize.scss
CHANGED
|
Binary file
|
|
Binary file
|
|
Binary file
|