@tongfun/tf-widget 0.1.29 → 0.1.30

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.
Files changed (81) hide show
  1. package/README.md +4 -0
  2. package/lib/tf-widget.common.js +264 -226
  3. package/lib/tf-widget.css +1 -1
  4. package/lib/tf-widget.umd.js +264 -226
  5. package/lib/tf-widget.umd.min.js +4 -4
  6. package/package.json +1 -1
  7. package/package/svg-icon/index.js +0 -8
  8. package/package/svg-icon/src/SvgIcon.vue +0 -59
  9. package/package/t-data-list/index.js +0 -6
  10. package/package/t-data-list/main.vue +0 -193
  11. package/package/t-data-list/src/condition-input/basic.vue +0 -31
  12. package/package/t-data-list/src/condition-input/date.vue +0 -106
  13. package/package/t-data-list/src/condition-input/index.vue +0 -100
  14. package/package/t-data-list/src/condition-input/input.vue +0 -31
  15. package/package/t-data-list/src/condition-input/number.vue +0 -115
  16. package/package/t-data-list/src/condition-input/select.vue +0 -86
  17. package/package/t-data-list/src/js/fieldTypeEnum.js +0 -10
  18. package/package/t-data-list/src/js/operatorEnum.js +0 -108
  19. package/package/t-data-list/src/js/qureyParamsEnum.js +0 -4
  20. package/package/t-data-list/src/js/util.js +0 -34
  21. package/package/t-data-list/src/mixins/button-controll-mixin.js +0 -93
  22. package/package/t-data-list/src/pushdown/push-down.vue +0 -158
  23. package/package/t-data-list/src/t-list-search.vue +0 -36
  24. package/package/t-data-list/src/t-plan/condition-always-item.vue +0 -143
  25. package/package/t-data-list/src/t-plan/condition-mult-item.vue +0 -222
  26. package/package/t-data-list/src/t-plan/index.vue +0 -195
  27. package/package/t-data-list/src/t-plan/plan-content.vue +0 -389
  28. package/package/t-data-list/src/t-table/index.vue +0 -129
  29. package/package/t-data-list/src/t-table/table-group-item-edit.vue +0 -238
  30. package/package/t-data-list/src/t-table/table-group-item.vue +0 -87
  31. package/package/t-data-list/src/t-table/table-group.vue +0 -180
  32. package/package/t-data-list/src/t-table/table-records-header-popover.vue +0 -246
  33. package/package/t-data-list/src/t-table/table-records-selected.vue +0 -159
  34. package/package/t-data-list/src/t-table/table-records.vue +0 -336
  35. package/package/t-input/children/address.vue +0 -101
  36. package/package/t-input/children/basic-display.vue +0 -41
  37. package/package/t-input/children/basic.vue +0 -261
  38. package/package/t-input/children/date.vue +0 -84
  39. package/package/t-input/children/group-components/group-dialog.vue +0 -344
  40. package/package/t-input/children/group.vue +0 -126
  41. package/package/t-input/children/input.vue +0 -67
  42. package/package/t-input/children/number.vue +0 -71
  43. package/package/t-input/children/select.vue +0 -86
  44. package/package/t-input/children/tfile/fiile-enclosure.vue +0 -233
  45. package/package/t-input/children/tfile/file-img/comp.png +0 -0
  46. package/package/t-input/children/tfile/file-img/excel.png +0 -0
  47. package/package/t-input/children/tfile/file-img/img.png +0 -0
  48. package/package/t-input/children/tfile/file-img/pdf.png +0 -0
  49. package/package/t-input/children/tfile/file-img/word.png +0 -0
  50. package/package/t-input/index.js +0 -7
  51. package/package/t-input/index.vue +0 -337
  52. package/package/t-input/tInputCache.js +0 -24
  53. package/package/tf-icon-picker/README.md +0 -8
  54. package/package/tf-icon-picker/index.js +0 -8
  55. package/package/tf-icon-picker/src/tf-icon-picker.vue +0 -266
  56. package/package/tf-layout/README.md +0 -115
  57. package/package/tf-layout/index.js +0 -8
  58. package/package/tf-layout/src/components/tf-labelbar.vue +0 -394
  59. package/package/tf-layout/src/components/tf-menu.vue +0 -180
  60. package/package/tf-layout/src/components/tf-right-menu.vue +0 -89
  61. package/package/tf-layout/src/components/tf-rotate-box.vue +0 -50
  62. package/package/tf-layout/src/tf-layout.vue +0 -140
  63. package/package/tf-widget/index.js +0 -8
  64. package/package/tf-widget/src/assets/common-input.less +0 -11
  65. package/package/tf-widget/src/children/basic-data/basic-data.vue +0 -366
  66. package/package/tf-widget/src/children/basic-data/dependcy/basic-data-selector.vue +0 -1087
  67. package/package/tf-widget/src/children/basic-data/dependcy/common-table.vue +0 -750
  68. package/package/tf-widget/src/children/basic-data/dependcy/condition-filter.vue +0 -519
  69. package/package/tf-widget/src/children/basic-data/dependcy/pagination.vue +0 -93
  70. package/package/tf-widget/src/children/basic-data/dependcy/table-control.vue +0 -240
  71. package/package/tf-widget/src/children/basic-data/dependcy/view-picture.vue +0 -108
  72. package/package/tf-widget/src/children/date-time.vue +0 -103
  73. package/package/tf-widget/src/children/date.vue +0 -103
  74. package/package/tf-widget/src/children/decimal.vue +0 -115
  75. package/package/tf-widget/src/children/integer.vue +0 -104
  76. package/package/tf-widget/src/children/property.vue +0 -59
  77. package/package/tf-widget/src/children/single-line-text.vue +0 -82
  78. package/package/tf-widget/src/children/small-pictures.vue +0 -223
  79. package/package/tf-widget/src/children/text-area.vue +0 -74
  80. package/package/tf-widget/src/children/tf-select.vue +0 -113
  81. package/package/tf-widget/src/tf-widget.vue +0 -175
@@ -1,115 +0,0 @@
1
- # Layout 组件
2
-
3
- ## 参数
4
-
5
- 1. 菜单参数 (**:menusInfo**)
6
-
7
- ``` javascript
8
- {
9
- path: '' // 路由path,
10
- icon: '' // 菜单图标,
11
- name: '' // 路由name,
12
- title: '菜单名字',
13
- childNode: [
14
- {
15
- path: '' // 路由path,
16
- icon: '' // 菜单图标,
17
- name: '' // 路由name,
18
- title: '菜单名字',
19
- }
20
- ]
21
- }
22
- ```
23
-
24
- 2. 三级缓存数组,通过事件@setThirdCache传递
25
-
26
- 例子:
27
-
28
- ```javascript
29
- <template>
30
- <TfLayout
31
- :menus-info="menuInfo"
32
- @setThirdCache="setThirdCache"
33
- />
34
- </template>
35
- <script>
36
- export default {
37
- name: 'Layout',
38
-
39
- data() {
40
- return {
41
- menuInfo: this.$store.getters.menuInfo
42
- }
43
- },
44
- methods: {
45
- setThirdCache(value) {
46
- this.$store.commit('routeCaching/setThirdCache', value)
47
- }
48
- }
49
- }
50
- </script>
51
- ```
52
-
53
- 4. 小标签栏禁止关闭
54
-
55
- 需要在路由的meta属性新增 **defaultRoute: true**
56
-
57
- ```javascript
58
- // 例子:
59
- {
60
- path: '/',
61
- component: () => import('@/views/home/tenan-management-home'),
62
- name: 'TenantManagementHome',
63
- icon: 'home',
64
- meta: {
65
- title: '主页',
66
- defaultRoute: true
67
- }
68
- },
69
- ```
70
-
71
- 5. 为了防止路由标签混乱,需要在子应用的跟路由将当前子应用的路由base属性,添加到meta属性中
72
-
73
- base配置统一采用:
74
-
75
- ```
76
- const base = process.env['NODE_ENV'] === 'development' ? process.env['VUE_APP_BASIC']:`/app${process.env['VUE_APP_BASIC']}/`
77
- ```
78
-
79
-
80
-
81
- ​ **配置文件:**
82
-
83
- ​ **例: VUE_APP_BASIC = '/OperateAnalysis'**
84
-
85
- ​ **VUE_APP_MODULE_NAME = '经营分析'**
86
-
87
- ```javascript
88
-
89
- // 示例
90
- // 路由生成 base:
91
- router = new VueRouter({
92
- base: process.env['NODE_ENV'] === 'development' ? process.env['VUE_APP_BASIC'] : `/app${process.env['VUE_APP_BASIC']}/`,
93
- mode: 'history',
94
- routes: initMenu(prop.menuInfo)
95
- })
96
- // 跟路由配置base
97
- const base = process.env['NODE_ENV'] === 'development' ? process.env['VUE_APP_BASIC'] : `/app${process.env['VUE_APP_BASIC']}/`
98
- const routes = [
99
- {
100
- path: '/',
101
- component: Layout,
102
- meta: {
103
- title: process.env['VUE_APP_MODULE_NAME'],
104
- base
105
- },
106
- children: [
107
- ...childrenRoutes
108
- ]
109
- }
110
- ]
111
-
112
-
113
-
114
- ```
115
-
@@ -1,8 +0,0 @@
1
- import TfLayout from './src/tf-layout'
2
-
3
- /* istanbul ignore next */
4
- TfLayout.install = function (Vue) {
5
- Vue.component(TfLayout.name, TfLayout)
6
- }
7
-
8
- export default TfLayout
@@ -1,394 +0,0 @@
1
- <template>
2
- <div class="tf-labelbar">
3
- <div class="close-menu">
4
- <div
5
- :class="closeMenu ? 'open-menu-icon': 'close-menu-icon'"
6
- src=""
7
- alt=""
8
- title="隐藏列表"
9
- @click="changeMenuState"
10
- />
11
- </div>
12
- <ul ref="labelMenu">
13
- <li
14
- v-for="tagItem in tagList"
15
- :key="tagItem.path"
16
- :class="activePath === tagItem.path ? 'active-tag' : ''"
17
- @click="routeJump(tagItem)"
18
- @contextmenu.prevent.stop="rightClick(tagItem, $event)"
19
- >
20
- <span>{{ tagItem.title }}</span>
21
- <i
22
- v-show="!tagItem.notCloseTag"
23
- class="el-icon-close close-icon"
24
- @click.stop="closeTag(tagItem)"
25
- />
26
- </li>
27
- </ul>
28
- <div
29
- class="scrollbar-icon left"
30
- @click="handleScroll('left')"
31
- />
32
- <el-dropdown
33
- class="right-menu"
34
- trigger="click"
35
- @command="dropdownCommand"
36
- >
37
- <span class="el-dropdown-link">
38
- <TfRotateBox />
39
- </span>
40
- <el-dropdown-menu slot="dropdown">
41
- <el-dropdown-item
42
- icon="el-icon-back"
43
- command="closeLeft"
44
- >关闭左侧</el-dropdown-item>
45
- <el-dropdown-item
46
- icon="el-icon-right"
47
- command="closeRight"
48
- >关闭右侧</el-dropdown-item>
49
- <el-dropdown-item
50
- icon="el-icon-circle-close"
51
- command="closeOther"
52
- >关闭其他</el-dropdown-item>
53
- <el-dropdown-item
54
- icon="el-icon-circle-close"
55
- command="closeAll"
56
- >关闭全部</el-dropdown-item>
57
- </el-dropdown-menu>
58
- </el-dropdown>
59
- <div
60
- class="scrollbar-icon right"
61
- @click="handleScroll('right')"
62
- />
63
- <TfRightMenu
64
- :left="rightMenuLeft"
65
- :top="rightMenuTop"
66
- :show-menu="showRightMenu"
67
- @rightMenuClick="dropdownCommand"
68
- />
69
- </div>
70
- </template>
71
-
72
- <script>
73
- import TfRotateBox from './tf-rotate-box.vue'
74
- import TfRightMenu from './tf-right-menu'
75
- export default {
76
- name: 'TfLaberBar',
77
- components: {
78
- TfRotateBox,
79
- TfRightMenu
80
- },
81
- props: {
82
- routeBase: {
83
- default: null,
84
- type: String
85
- }
86
- },
87
- data () {
88
- return {
89
- closeMenu: false,
90
- activePath: '/',
91
- tagList: [],
92
- rightMenuLeft: 0,
93
- rightMenuTop: 0,
94
- showRightMenu: false
95
- }
96
- },
97
- watch: {
98
- $route: {
99
- handler: function (newValue) {
100
- if (newValue && newValue.matched[0]?.meta.base === this.routeBase) {
101
- const { meta, path, name, params, query } = newValue
102
- if (!path) return
103
- const obj = {
104
- path,
105
- name,
106
- params,
107
- query,
108
- defaultRoute: meta.defaultRoute,
109
- notCloseTag: meta.defaultRoute,
110
- title: meta.title,
111
- replace: meta.replace
112
- }
113
- if (!meta.noCache) {
114
- const cacheArr = newValue.matched.map(item => item.name)
115
- const cacheObj = this.tagList.find(item => item.path === obj.path)
116
- if (!cacheObj) this.$emit('setCache', cacheArr)
117
- obj.cacheArr = cacheArr
118
- }
119
- if (obj.defaultRoute) {
120
- if (!this.checkMenu(obj.path)) this.tagList.unshift(obj)
121
- } else {
122
- if (!this.checkMenu(obj.path)) this.tagList.push(obj)
123
- }
124
- // todo: 增加页面缓存
125
- this.activePath = path
126
- }
127
- },
128
- deep: true,
129
- immediate: true
130
- }
131
- },
132
- created () {
133
- window.addEventListener('click', () => {
134
- this.showRightMenu = false
135
- }, false)
136
- },
137
- methods: {
138
- changeMenuState () {
139
- this.closeMenu = !this.closeMenu
140
- this.$emit('changeMenuState', this.closeMenu)
141
- },
142
- /**
143
- * @description tag右键点击事件
144
- */
145
- rightClick: function (tagItem, $event) {
146
- this.routeJump(tagItem)
147
- this.$nextTick(() => {
148
- this.rightMenuTop = $event.clientY
149
- this.rightMenuLeft = $event.clientX
150
- this.showRightMenu = true
151
- })
152
- },
153
-
154
- /**
155
- * @member
156
- * @description 右侧操作
157
- * @param params: 操作指令: closeLeft => 关闭左侧, closeRight => 关闭右侧, closeAll => 关闭全部,
158
- */
159
- dropdownCommand: function (params) {
160
- const activeNum = this.tagList.findIndex(
161
- (item) => item.path === this.activePath
162
- )
163
- const pathMap = new Map()
164
- const deleteArr = []
165
- const pathArr = this.tagList.map((item) => {
166
- pathMap.set(item.path, item)
167
- return item.path
168
- })
169
- switch (params) {
170
- case 'closeLeft':
171
- deleteArr.push(...pathArr.slice(0, activeNum))
172
- break
173
- case 'closeRight':
174
- deleteArr.push(...pathArr.slice(activeNum + 1, pathArr.length))
175
- break
176
- case 'closeOther':
177
- deleteArr.push(...pathArr.slice(0, activeNum))
178
- deleteArr.push(...pathArr.slice(activeNum + 1, pathArr.length))
179
- break
180
- default:
181
- deleteArr.push(...pathArr)
182
- break
183
- }
184
- const deleteCacheArr = []
185
- deleteArr.forEach((item) => {
186
- const tagItem = pathMap.get(item)
187
- if (tagItem && tagItem.cacheArr) deleteCacheArr.push(tagItem.cacheArr)
188
- if (tagItem && !tagItem.notCloseTag) {
189
- const num = this.tagList.indexOf(tagItem)
190
- this.tagList.splice(num, 1)
191
- }
192
- })
193
-
194
- this.$emit('deleteCache', deleteCacheArr)
195
- if (params === 'closeAll') this.routeJump(this.tagList[0])
196
- },
197
- /**
198
- * @description 左右滑动
199
- * @param direction: 滑动方向
200
- */
201
- handleScroll (direction) {
202
- let rollNum = 0
203
- rollNum = direction === 'right' ? rollNum + 50 : rollNum - 50
204
- const dom = this.$refs.labelMenu
205
- dom.scrollLeft += rollNum
206
- },
207
- /**
208
- * @description 点击tag标签
209
- * @param path: 每项Tag
210
- */
211
- checkMenu (path) {
212
- if (this.tagList.find((item) => item.path === path)) return true
213
- return false
214
- },
215
- /**
216
- * @description 路由跳转
217
- */
218
- routeJump: function (value) {
219
- if (value && value.path !== this.activePath) {
220
- const { path, query, params, replace } = value
221
- if (replace) {
222
- this.$router.replace({
223
- path,
224
- query,
225
- params
226
- })
227
- } else {
228
- this.$router.push({
229
- path,
230
- query,
231
- params
232
- })
233
- }
234
- }
235
- },
236
- /**
237
- * 关闭tag
238
- */
239
- closeTag: function (tagItem, deleteCacheArr = true) {
240
- if (tagItem.cacheArr && deleteCacheArr) this.$emit('deleteCache', [tagItem.cacheArr])
241
- const num = this.tagList.indexOf(tagItem)
242
- if (tagItem) {
243
- this.tagList.splice(num, 1)
244
- this.routeJump(this.tagList[num - 1])
245
- }
246
- },
247
- /**
248
- * 关闭当前标签页
249
- */
250
- closeDynamicRoutingTag () {
251
- const nameArr = this.tagList.filter(d => d.name === this.$route.name)
252
- const tagItem = this.tagList.find(d => d.path === this.$route.path)
253
- if (tagItem) {
254
- // 如果tagList中存在两个及以上相同name路由,表明不能删除该缓存
255
- this.closeTag(tagItem, !(nameArr.length > 1))
256
- }
257
- }
258
- }
259
- }
260
- </script>
261
- <style lang="less" scoped>
262
- .tf-labelbar {
263
- width: 100%;
264
- height: 40px;
265
- position: relative;
266
- box-sizing: border-box;
267
- padding: 0 73px;
268
- .close-menu {
269
- cursor: pointer;
270
- position: absolute;
271
- left:0;
272
- height: 40px;
273
- width: 40px;
274
- display: flex;
275
- align-items: center;
276
- justify-content: center;
277
- box-shadow: 0 -2px 4px 0 rgba(0,0,0,0.25);
278
- .close-menu-icon {
279
- height: 15px;
280
- width: 15px;
281
- background: #99999a;
282
- mask: url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAPCAYAAADtc08vAAAAAXNSR0IArs4c6QAAAdpJREFUOE+Nkz1rFUEUht8zs0kstBArBUst9C8oEv/DvYg7V+9soZWVJhoxsCJ+YCspFLyzYecSkosgElNYqAg22hhFwUII4g+wEnFn58jG3Xh39wpOM5/nmcN73kNB395l0Ns8CUforEmMujnGx6SzsXuS2n4hosduEF5E/CJAPOt27su91Klmpt0+UfcQxwJx7Ks3JKJ0UzA9dUZdrQHO3Z/Cg/OZjIZ9MBuAo9z0TDNLEtp+EIx1l6iFHUAVrO1ZAAmAXm6Ubf5eZNEGFKfxrJPRMASzBdOZPAlTdNamMepkNX1agO1H3V9SWwUgBXAqN2q1GTS+b2QQC7l1qAviFSZc8j5bwnSwF1nmMLWLkf2k7eBq7YIffwDAhjPqMvTKQYn8K4CiEsW8v1w3k2AAAuB3LQ3E1rd5IrrJxPMSeMaQe8j7v6UtUUwsHOh7HVCqL6J0kZjmBPHxbNDb/H8NCsCBw1xUIdD2BgPXSNAJ9zB8hQsbM9j3JsPHI4Sjn7iaJ/ugdGCg7S0GFsjjmFtWr//lg/cCWG85sYL07W0mXCGik25w+iXi61SzchANP4P9E2d6c/VeYEJnJIrmCqL0jmfKvFGLLStLbR8x4bkfqKWJ3dhonqagvwFo3iEkt6LFjgAAAABJRU5ErkJggg==);
283
- &:hover {
284
- background: #07579a;
285
- }
286
- }
287
- .open-menu-icon {
288
- height: 15px;
289
- width: 15px;
290
- background: #99999a;
291
- mask: url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAPCAYAAADtc08vAAAAAXNSR0IArs4c6QAAAbRJREFUOE+dk7FP21AQxr/PzyZCsLQjXWFhQR0qVQyoLFXF2JIsicBxVHWooHSsOtRbxUAlRKWqgDDItiDAP8AEqBPs/RM6FykTxO9dFSd2lKSkUt/47u6n7+67I4Y+YTtMydOKxwonJW274QshdzsJnXAWrEbrAj7UQfk10r+iySH+uQ1/PlFeWIKw3gvwfQv+J7GX41mxcAFwfwCSAarRIoCjXkBLSArxjeOFM0Z4DWJX71Xe5kr8C5UqaAPqTAv6389pGyelO6d2+NgYfQViJ4c8+G1h+02zCxg+RRRq4WQivKYgTILKO/S2UCfceGpE6ULK0Va3JWVE4DhNJA0lmIXwgOSXpOF8aKnLFahq9AvAxD+E3AAyCrBgwTxtBktXyo2LoBwTSwePgMIYLN31OqNpZcMkDWuEC4R8F5gNM37zEVurt8oLX0F4OuhCnxTHjZ4Yyg8RfjP7lfdtN0q6Cxjigu2Gz4Q8B/hVB+WVtDhz4V4FnT2wa/GcGLkkuJkE5bWBPfgrICv2ouciOBsobt1EZqMbvwSlbwb5oUSfxcKY3qus3nsLuQv/e41ePC8i238Ap2nyLhWRefAAAAAASUVORK5CYII=);
292
- &:hover {
293
- background: #07579a;
294
- }
295
- }
296
- }
297
-
298
- ul {
299
- height: 100%;
300
- width: 100%;
301
- padding: 0;
302
- margin: 0;
303
- display: flex;
304
- align-items: flex-end;
305
- justify-content: left;
306
- list-style: none;
307
- overflow-y: hidden;
308
- overflow-x: auto;
309
- &::-webkit-scrollbar {
310
- display: none;
311
- height:0;
312
- }
313
- li {
314
- padding: 0 30px;
315
- font-size: 14px;
316
- color: #515a6e;
317
- height: 35px;
318
- margin: 10px -19px 0 0;
319
- cursor: pointer;
320
- display: flex;
321
- white-space: nowrap;
322
- align-items: center;
323
- justify-content: center;
324
- box-sizing: content-box;
325
- mask: url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAANoAAAAkBAMAAAAdqzmBAAAAMFBMVEVHcEwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAlTPQ5AAAAD3RSTlMAr3DvEM8wgCBA379gj5//tJBPAAAAnUlEQVRIx2NgAAM27fj/tAO/xBsYkIHyf9qCT8iWMf6nNQhAsk2f5rYheY7Dnua2/U+A28ZEe8v+F9Ax2v7/F4DbxkUH2wzgtvHTwbYPo7aN2jZq26hto7aN2jZq25Cy7Qvctnw62PYNbls9HWz7S8/G6//PsI6H4396gAUQy1je08W2jxDbpv6nD4gB2uWp+J9eYPsEhv/0BPS1DQBvoBLVZ3BppgAAAABJRU5ErkJggg==);
326
- mask-repeat: no-repeat;
327
- mask-size: 95% 100%;
328
- transition: all 0.3s cubic-bezier(0.645, 0.045, 0.355, 1) !important;
329
- .close-icon {
330
- transition: all 0.3s cubic-bezier(0.645, 0.045, 0.355, 1) !important;
331
- margin-left: 8px;
332
- width: 0;
333
- overflow: hidden;
334
- &:hover {
335
- border-radius: 50%;
336
- background: #666666;
337
- color: white;
338
- }
339
- }
340
- &:hover {
341
- background: #dee1e6;
342
- .close-icon {
343
- width: 14px;
344
- }
345
- }
346
- }
347
- .active-tag {
348
- padding: 0 20px !important;
349
- color: #0361A4 !important;
350
- background: #ECF5FF !important;
351
- .close-icon {
352
- min-width: 14px;
353
- }
354
- }
355
- }
356
- .scrollbar-icon {
357
- cursor: pointer;
358
- width: 13px;
359
- height: 13px;
360
- position: absolute;
361
- top: 50%;
362
- transform: translateY(-50%);
363
- &:hover {
364
- background: #07579a;
365
- }
366
- }
367
- .left {
368
- background: #99999a;
369
- left: 55px;
370
- mask: url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAB4AAAAcCAYAAAB2+A+pAAAAAXNSR0IArs4c6QAAA9RJREFUSEuVl0tvG2UUhp/zeRIXaMFiEaEsyq1NU0oJKVBaxEVtWqCoRVzELyB2HEXiByAkAgsuldhESmJHsiIlexawoC0qioAFFWUFCJVFEWJFEBtEAh6Pv4NOPBMcx5fxSN7NO8/3nffcLKR8VFUqlcr+KIqOOOe0Vqv9MDMz81tKOaYvlUp3ZzKZw977WyStsFKp7KvVauMi8hiw6Zxby+fzP/Wjr9frx1T1GJBNBZ6fn98bBMHDwCvA08BN7/3C9PT0Whpwk/5V4KRpeoKXl5f3hGH4AHABeBk4CnwnIm8XCoXPeoFb9AYeAWpdwSaqVquHgAkRMZGFaQ9wXVXfLBaLn3cDt9E/CgRA1BEcn/Sgqp4VkbPACSBnIFX9AninWCx+2QncRR8Cf7cFJycVkVOqekFExoE7AAfUgSvAe1NTU1+3A/fQ/wv8uQtsoiiKRur1+pmWm2qcExFg3l5sB06h3wR+3wFuOulpVT0f39TCa+9tg1X1koh8mICtRkVEU+p3gufm5rLZbHbEPAWeFZHHE09bwhmJyBUR+SCfz3+VQPvQ/wP8sXXjDp4kN2210UJt2bztcZ/6BnhhYeG+gYGBIe+9NYZTzdnbIWO3PLYb53K5a+vr67kgCEZE5KmU+ga4VCq97py7x3tvyTQaZ2+7bG/2+NNMJnPROfdjFEVjqvqCQXvok3s0wEtLS4vAqKo+GRd3p9JsBn+sqh9ls9lfwjA8JyJ54Dgw2KuTAQ1wuVyuiMghVbUeanWaGhwEwa/ee6vzvKo+AmT6Ab8B3Bv7cz+wt4O4uY4/sToeHBy8EYbhcRE5r6rm8YEu+p2hLpfLo977u5xzp4FnAOtS+7qcfDu5VPVb59ydURQd7kPfCLXV4erq6q2bm5sPicgZ4BzwYBf4rnJaWVm5rQ/9/3VstzPxxsaGbReWoROAzd92Yd9qIKr6vnWupIH0od8JNrgNbOfcWCaTmVDV54EjwO2tnatTy0ypt5bZ6FzNj604YRiaZ88BFvrE81RDIoV+95BIDmBhq1arR+MJZaFv9rwuIpeTULdLwh56C/XusdgM7+C53fyqc+5dGxKdsr+L51Xgr66rT+KZc84m1ovxvhWo6jfAW8Vi8Wq3htFGPxa/X+257MWeWam9ZL+4SVyLl73LvTpVi96Wxf3WNnuC7cPlctnWHpvPrwFPAD8Dc4VCYc0WgF7wFr19p/uWmXzQanVxcTHnnDPRSRHZcM5dmpyc/D4NuFkvIidUdTDVje0As7Ozbnh4+ID33oaBF5HrhULhZhpwoh8aGjoYBMG4/YX5D8BcMmEDOwIbAAAAAElFTkSuQmCC);
371
- mask-size: 100% 100%;
372
- mask-repeat: no-repeat;
373
- }
374
- .right {
375
- background: #99999a;
376
- right: 55px;
377
- mask: url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABoAAAAaCAYAAACpSkzOAAAAAXNSR0IArs4c6QAAA25JREFUSEuVls9rXFUUx7/fO3mDojAhZGFwIYgbFXUj4kJqpQqtC5dxHUiYRDCL7NRSWsG/IS/PB6Vr20ijNNL0h0mlPzQNRVyIyZgWF1FrWhV1kpl59ytH3pNxmJk73uXjfu/nnXO+95zLOI7fdM7VW63WNzMzM9skhcBK0/Qx7/1z3nuWSqWvJycnb4d0jOP4KMm6pKsjIyM3x8fHGyFQkiRPSzpEskzyi0qlshHSGegagCbJz7IsO1Mqlb6vVqvNfrA4jg3yFoBHSH7aarUWQzouLCz8mh+6Lum09/7y6Ojodr8/TJLkiKQTAJ4iedV7vxjSGagOoAzgDwDXASw659YqlUqtFyxJklcBfCDpBQC/AbgR0hnINj4IIAJwj+QVScskL0va7pbGJElelvQ+gAN5NoI6A90H8FAOMsf9AuCapCXn3JXh4eHbnZEZCMBxSQcBFC7tqzPQLoCH8/SZiAB+NDdJWsmybLUotCSajfOIrEYGtNVXZxs6QYXZMgC7JM0gZ9thtqEjonaD9tT1AhXiXUlrAM63uyqO4wMkjwN4pcc1+I+uXC7fDYG8RQbgJoAl7/3y9PT0nTRNX/LeHwNg7uu2/tFJ2iD5MclaCFQcYnfNDHJqaGhopdlsPumcew/AkUAXMUevkdwcBFQU2lx1kmRKcsR7/w6AN/qACt2OpDv/B3Sf5ElJHwKoAHh3QNDPAH4YBGQ/bV3jKwCnoig612g0nnDOHZX0eiB1f+YtKpg6C9/qcwvAJwCWd3Z2tsbGxl4keUzSaz1A/+pIngUQNIN1Det/5wFcLJfLmxMTE3sD2LvQrQC44L3/qVfqzJ73LBIbA5Iu7e/vfzc7O7sfuLA9db1a0N3czhecc5eiKKpZJEULmp+fP+icswvb2YK66ooW1N5U7Ztd0C+tJpJWG41GzSIpIF0iKmzcVVfUsHNMWOGv27S13O7t7W0V6WovepcxEdS1D76/cgsvkfw8iqJvLV3dXNUx+H4vWlQ/XTGPSpJuOefOZFl2sV6v1+bm5mzydl1xHB92zp2Q9KylmeRiSGegdQCt3MIftburD+iQc+5tSY9KOkfydEhnIJv9dZumURTd6JWuAmqmSNP0Ge/9YZIPAFgdRGfPrQl7QALYmJqa2gw9BA2UJMnjkp4H4ACsV6vVrZDubzHWkATwr3pxAAAAAElFTkSuQmCC);
378
- mask-size: 100% 100%;
379
- mask-repeat: no-repeat;
380
- }
381
- .right-menu {
382
- box-shadow: 0 -2px 4px 0 rgba(0,0,0,0.25);
383
- justify-content: center;
384
- cursor: pointer;
385
- width: 40px;
386
- height: 100%;
387
- position: absolute;
388
- top: 0;
389
- right: 0px;
390
- display: flex;
391
- align-items: center;
392
- }
393
- }
394
- </style>
@@ -1,180 +0,0 @@
1
- <template>
2
- <div
3
- v-show="!menuState"
4
- class="tf-menu"
5
- :style="{ width: isCollapse ? '64px' : '175px' }"
6
- >
7
- <el-scrollbar class="tf-menu-scroll">
8
- <el-menu
9
- :collapse="isCollapse"
10
- :default-active="activePath"
11
- class="tf-menu-content"
12
- background-color="#001529"
13
- text-color="#919398"
14
- active-text-color="#ffffff"
15
- :router="true"
16
- :style="{ width: isCollapse ? '64px' : '175px' }"
17
- >
18
- <template v-for="firstMenuItem in menusInfo">
19
- <el-submenu
20
- v-if="firstMenuItem.childNode"
21
- :key="firstMenuItem.path"
22
- :index="firstMenuItem.path"
23
- >
24
- <template slot="title">
25
- <svg-icon
26
- :icon-class="firstMenuItem.icon"
27
- style="height: 15px; width: 15px; margin-right: 10px"
28
- />
29
- <span>{{ firstMenuItem.title }}</span>
30
- </template>
31
- <el-menu-item
32
- v-for="secondMenuItem in firstMenuItem.childNode"
33
- :key="secondMenuItem.path"
34
- :index="secondMenuItem.path"
35
- >
36
- <svg-icon
37
- :icon-class="secondMenuItem.icon"
38
- style="height: 15px; width: 15px; margin-right: 10px"
39
- />
40
- <span>{{ secondMenuItem.title }}</span>
41
- </el-menu-item>
42
- </el-submenu>
43
- <el-menu-item
44
- v-else
45
- :key="firstMenuItem.path"
46
- :index="firstMenuItem.path"
47
- >
48
- <svg-icon
49
- :icon-class="firstMenuItem.icon"
50
- style="height: 15px; width: 15px; margin-right: 10px"
51
- />
52
- <span slot="title">{{ firstMenuItem.title }}</span>
53
- </el-menu-item>
54
- </template>
55
- </el-menu>
56
- </el-scrollbar>
57
- <div
58
- class="bottom-menu"
59
- :style="{ transform: isCollapse ? 'rotate(0deg)' : 'rotate(180deg)' }"
60
- @click="isCollapse = !isCollapse"
61
- >
62
- <img
63
- src="data:image/png;base64,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"
64
- alt=""
65
- >
66
- </div>
67
- </div>
68
- </template>
69
-
70
- <script>
71
- export default {
72
- name: 'TfMenu',
73
- props: {
74
- menusInfo: {
75
- type: Array,
76
- default: function () {
77
- return []
78
- }
79
- },
80
- menuState: {
81
- default: false,
82
- type: Boolean
83
- }
84
- },
85
- data () {
86
- return {
87
- isCollapse: false,
88
- activePath: null
89
- }
90
- },
91
- watch: {
92
- '$route.path': {
93
- handler: function (params) {
94
- if (params) this.activePath = params
95
- },
96
- deep: true,
97
- immediate: true
98
- }
99
- }
100
- }
101
- </script>
102
-
103
- <style lang="less" scoped>
104
- .tf-menu {
105
- height: 100%;
106
- background: #001529;
107
- transition: width 0.3s ease-in-out;
108
- /deep/.tf-menu-content {
109
- transition: width 0.3s ease-in-out;
110
- border-right: none !important;
111
- .el-menu--collapse {
112
- width: 64px !important;
113
- .el-submenu .el-menu-item {
114
- height: 40px;
115
- width: 175px;
116
- }
117
- }
118
- .el-submenu .el-menu-item {
119
-
120
- transition: width 0.3s;
121
- height: 40px;
122
- width: 175px;
123
- }
124
- .el-menu-item,
125
- .el-submenu__title {
126
- transition: width 0.3s !important;
127
- display:flex;
128
- align-items: center;
129
- height: 40px;
130
- line-height: 40px;
131
- &:hover {
132
- background: #0361a4 !important;
133
- }
134
- span {
135
- margin-left: 5px;
136
- }
137
- }
138
- .is-active {
139
- transition: width 0.3s !important;
140
-
141
- background: #0361a4 !important;
142
- }
143
- margin-bottom: 10px;
144
- }
145
- .tf-menu-scroll {
146
- height: calc(100vh - 200px);
147
- width: 100%;
148
- }
149
- /deep/.el-scrollbar__wrap {
150
- overflow-x: hidden;
151
- }
152
- .bottom-menu {
153
- width: 100%;
154
- height: 60px;
155
- display: flex;
156
- align-items: center;
157
- justify-content: center;
158
- img {
159
- width: 20px;
160
- height: 20px;
161
- transition: all 0.3s;
162
- }
163
- }
164
- }
165
- </style>
166
- <style lang="less">
167
- .el-menu--vertical {
168
- .el-menu--collapse .el-menu .el-submenu,
169
- .el-menu--popup {
170
- min-width: 175px;
171
- .el-menu-item {
172
- height: 40px;
173
- line-height: 40px;
174
- &:hover {
175
- background: #0361a4 !important;
176
- }
177
- }
178
- }
179
- }
180
- </style>