n20-common-lib 1.2.40 → 1.2.43

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 (188) hide show
  1. package/README.md +2 -2
  2. package/package.json +88 -88
  3. package/src/_qiankun/index.js +113 -113
  4. package/src/_qiankun/postMessage.js +48 -48
  5. package/src/assets/css/_coreLib.scss +35 -35
  6. package/src/assets/css/cl-anchor.scss +23 -23
  7. package/src/assets/css/cl-approve-card.scss +58 -58
  8. package/src/assets/css/cl-dialog.scss +99 -99
  9. package/src/assets/css/cl-drag-list.scss +22 -22
  10. package/src/assets/css/cl-empty.scss +10 -10
  11. package/src/assets/css/cl-expandable-pane.scss +26 -26
  12. package/src/assets/css/cl-expandable.scss +24 -24
  13. package/src/assets/css/cl-file-upload-table.scss +11 -11
  14. package/src/assets/css/cl-filter.scss +4 -4
  15. package/src/assets/css/cl-flow-step.scss +185 -185
  16. package/src/assets/css/cl-footer-box.scss +10 -10
  17. package/src/assets/css/cl-form-item.scss +612 -612
  18. package/src/assets/css/cl-general-card.scss +11 -11
  19. package/src/assets/css/cl-layout-aside.scss +92 -92
  20. package/src/assets/css/cl-layout-content.scss +16 -16
  21. package/src/assets/css/cl-layout-header.scss +73 -73
  22. package/src/assets/css/cl-layout-tabs.scss +87 -87
  23. package/src/assets/css/cl-layout.scss +97 -97
  24. package/src/assets/css/cl-login-temporary.scss +37 -37
  25. package/src/assets/css/cl-message.scss +75 -75
  26. package/src/assets/css/cl-more-tab.scss +98 -98
  27. package/src/assets/css/cl-nav-menu.scss +5 -5
  28. package/src/assets/css/cl-pagination.scss +128 -128
  29. package/src/assets/css/cl-secondary-tab.scss +53 -53
  30. package/src/assets/css/cl-showcolumn.scss +23 -23
  31. package/src/assets/css/cl-sifting.scss +51 -51
  32. package/src/assets/css/cl-statis.scss +42 -42
  33. package/src/assets/css/cl-step.scss +73 -73
  34. package/src/assets/css/cl-suspend.scss +19 -19
  35. package/src/assets/css/cl-tertiary-tab.scss +54 -54
  36. package/src/assets/css/cl-upload.scss +41 -41
  37. package/src/assets/css/cl-worn-pagination.scss +50 -50
  38. package/src/assets/css/el-button.scss +173 -173
  39. package/src/assets/css/el-table.scss +79 -79
  40. package/src/assets/css/element-variables.scss +1061 -1061
  41. package/src/assets/css/element.dev.scss +21 -21
  42. package/src/assets/css/font-icon.scss +27 -27
  43. package/src/assets/css/index.dev.scss +4 -4
  44. package/src/assets/css/index.scss +11 -11
  45. package/src/assets/css/normalize.scss +726 -726
  46. package/src/assets/css/rootvar.scss +139 -139
  47. package/src/assets/css/select.scss +25 -25
  48. package/src/assets/css/title-pop.scss +4 -4
  49. package/src/assets/getJsonc.js +50 -50
  50. package/src/assets/realUrl.js +12 -12
  51. package/src/components/Anchor/AnchorItem.vue +29 -29
  52. package/src/components/Anchor/index.vue +185 -185
  53. package/src/components/ApprovalButtons/index.vue +233 -233
  54. package/src/components/ApprovalCard/index.vue +128 -128
  55. package/src/components/ApprovalRecord/approvalImg.vue +44 -44
  56. package/src/components/ApprovalRecord/flowDialog.vue +45 -45
  57. package/src/components/ApprovalRecord/index.vue +59 -59
  58. package/src/components/Button/button-group.vue +150 -150
  59. package/src/components/Button/icon-group-button.vue +61 -61
  60. package/src/components/Button/index.vue +56 -56
  61. package/src/components/CascaderArea/index.vue +103 -103
  62. package/src/components/ContentLoading/index.vue +41 -41
  63. package/src/components/ContentNull/index.vue +19 -19
  64. package/src/components/DatePicker/index.vue +27 -27
  65. package/src/components/DatePicker/por.vue +169 -169
  66. package/src/components/Dialog/index.vue +26 -26
  67. package/src/components/Dialog/indexO.vue +116 -116
  68. package/src/components/DragList/index.vue +75 -75
  69. package/src/components/Empty/img/abnormal.svg +108 -108
  70. package/src/components/Empty/img/dispose.svg +71 -71
  71. package/src/components/Empty/img/empty.svg +57 -57
  72. package/src/components/Empty/img/general.svg +58 -58
  73. package/src/components/Empty/img/lock.svg +57 -57
  74. package/src/components/Empty/img/network.svg +59 -59
  75. package/src/components/Empty/img/relevant.svg +68 -68
  76. package/src/components/Empty/img/search.svg +72 -72
  77. package/src/components/Empty/index.vue +92 -92
  78. package/src/components/Expandable/index.vue +49 -49
  79. package/src/components/Expandable/main.vue +52 -52
  80. package/src/components/FileExportAsync/index.vue +178 -178
  81. package/src/components/FileUploadTable/index.vue +484 -484
  82. package/src/components/Filters/index.vue +371 -371
  83. package/src/components/Filters/indexO.vue +104 -104
  84. package/src/components/FlowStep/index.vue +68 -68
  85. package/src/components/FooterBox/index.vue +21 -21
  86. package/src/components/GeneralCard/index.vue +15 -15
  87. package/src/components/InputNumber/index.vue +169 -169
  88. package/src/components/InputNumber/numberRange.vue +47 -47
  89. package/src/components/InputSearch/index.vue +75 -75
  90. package/src/components/Layout/AsideNav/index.vue +120 -119
  91. package/src/components/Layout/AsideNav/menuItem.vue +34 -34
  92. package/src/components/Layout/AsideNav/submenuTitle.vue +26 -26
  93. package/src/components/Layout/HeaderWrap/changePwd.vue +215 -215
  94. package/src/components/Layout/HeaderWrap/index.vue +371 -371
  95. package/src/components/Layout/HeaderWrap/noticePop.vue +316 -316
  96. package/src/components/Layout/SubContent/index.vue +127 -127
  97. package/src/components/Layout/TabsNav/index.vue +170 -170
  98. package/src/components/Layout/index.vue +518 -518
  99. package/src/components/Layout/utils.js +12 -12
  100. package/src/components/LoginTemporary/form.vue +566 -570
  101. package/src/components/LoginTemporary/index.vue +139 -139
  102. package/src/components/LoginTemporary/retrievePw.vue +372 -372
  103. package/src/components/MicroApp/index.js +67 -67
  104. package/src/components/MicroFrame/index.vue +95 -95
  105. package/src/components/MoreTab/index.vue +232 -232
  106. package/src/components/NavMenu/index.vue +60 -60
  107. package/src/components/PageLayout/page.vue +15 -15
  108. package/src/components/Pagination/index.vue +165 -165
  109. package/src/components/SecondaryTab/index.vue +58 -58
  110. package/src/components/SelectLazy/index.vue +75 -75
  111. package/src/components/SelectTree/SelectTreeLazy.vue +241 -241
  112. package/src/components/SelectTree/index.vue +205 -205
  113. package/src/components/ShowColumn/index.vue +213 -213
  114. package/src/components/Sifting/index.vue +99 -99
  115. package/src/components/Statis/index.vue +97 -97
  116. package/src/components/Statis/statisItem.vue +54 -54
  117. package/src/components/Statis/statisPopover.vue +55 -55
  118. package/src/components/Step/index.vue +38 -38
  119. package/src/components/Suspend/index.vue +72 -72
  120. package/src/components/Table/index.vue +209 -209
  121. package/src/components/Table/indexO.vue +149 -149
  122. package/src/components/Task/index.vue +26 -26
  123. package/src/components/TertiaryTab/index.vue +63 -63
  124. package/src/components/TimePicker/index.vue +28 -28
  125. package/src/components/Upload/index.vue +242 -242
  126. package/src/components/WornPagination/index.vue +73 -73
  127. package/src/directives/VClickOutside/index.js +19 -19
  128. package/src/directives/VHas/index.js +58 -58
  129. package/src/directives/VMove/index.js +42 -42
  130. package/src/directives/VTitle/index.js +69 -69
  131. package/src/directives/VTitle/tooltip.vue +21 -21
  132. package/src/index.js +232 -232
  133. package/src/plugins/CompatibleOld/index.js +57 -57
  134. package/src/plugins/Print/index.js +4 -4
  135. package/src/plugins/Print/print-js/.babelrc +12 -12
  136. package/src/plugins/Print/print-js/LICENSE +21 -21
  137. package/src/plugins/Print/print-js/README.md +98 -98
  138. package/src/plugins/Print/print-js/dist/print.css +96 -96
  139. package/src/plugins/Print/print-js/dist/print.js +990 -990
  140. package/src/plugins/Print/print-js/package.json +60 -60
  141. package/src/plugins/Print/print-js/src/index.d.ts +45 -45
  142. package/src/plugins/Print/print-js/src/index.js +10 -10
  143. package/src/plugins/Print/print-js/src/js/browser.js +33 -33
  144. package/src/plugins/Print/print-js/src/js/functions.js +103 -103
  145. package/src/plugins/Print/print-js/src/js/html.js +70 -70
  146. package/src/plugins/Print/print-js/src/js/image.js +48 -48
  147. package/src/plugins/Print/print-js/src/js/init.js +168 -168
  148. package/src/plugins/Print/print-js/src/js/json.js +109 -109
  149. package/src/plugins/Print/print-js/src/js/modal.js +62 -62
  150. package/src/plugins/Print/print-js/src/js/pdf.js +62 -62
  151. package/src/plugins/Print/print-js/src/js/print.js +102 -102
  152. package/src/plugins/Print/print-js/src/js/raw-html.js +15 -15
  153. package/src/plugins/Print/print-js/src/sass/index.scss +13 -13
  154. package/src/plugins/Print/print-js/src/sass/modules/_colors.scss +9 -9
  155. package/src/plugins/Print/print-js/src/sass/partials/_modal.scss +40 -40
  156. package/src/plugins/Print/print-js/src/sass/partials/_spinner.scss +45 -45
  157. package/src/plugins/Print/print.js +2 -2
  158. package/src/plugins/Print/print.scss +1 -1
  159. package/src/plugins/SetMenuTree/index.vue +41 -41
  160. package/src/plugins/SetMenuTree/logoIcon.vue +37 -37
  161. package/src/plugins/SetMenuTree/setmenutree.vue +427 -427
  162. package/src/plugins/SetMenuTree/utils.js +74 -74
  163. package/src/plugins/Sign/InfosecNetSignCNGAgent.min.js +2000 -2000
  164. package/src/plugins/Sign/index.js +65 -65
  165. package/src/plugins/Sign/sign.js +1 -1
  166. package/src/plugins/setTabsForSub.js +2 -2
  167. package/src/utils/auth.js +53 -53
  168. package/src/utils/axios.js +203 -203
  169. package/src/utils/downloadBlob.js +19 -19
  170. package/src/utils/forEachs.js +16 -16
  171. package/src/utils/getScrollContainer.js +43 -43
  172. package/src/utils/i18n/cn2hk.json +1270 -1270
  173. package/src/utils/i18n/index.js +50 -50
  174. package/src/utils/list2tree.js +36 -36
  175. package/src/utils/msgboxPor.js +26 -26
  176. package/src/utils/print.js +161 -161
  177. package/src/utils/relaNo.js +72 -72
  178. package/src/utils/repairElementUI.js +95 -66
  179. package/src/utils/urlToGo.js +82 -82
  180. package/style/css/normalize.scss +726 -0
  181. package/style/index.css +3 -3
  182. package/style/index.css.map +1 -1
  183. package/style/pageDemo/demo-1.vue +131 -0
  184. package/style/pageDemo/demo-2.vue +35 -0
  185. package/style/pageDemo/demo-3.vue +22 -0
  186. package/style/pageDemo/seeCode.js +20 -0
  187. package/style/server-config.jsonc +606 -0
  188. package/src/components/NstcG6Components/NstcDialog/NstcDialog.vue +0 -185
@@ -1,127 +1,127 @@
1
- <template>
2
- <keep-alive v-if="dnsKey">
3
- <router-view
4
- ref="content-cache"
5
- :key="$route.path"
6
- class="content-box"
7
- :no-cache="$route.meta.noCache"
8
- />
9
- </keep-alive>
10
- <router-view
11
- v-else
12
- ref="content-cache"
13
- class="content-box"
14
- :no-cache="$route.meta.noCache"
15
- />
16
- </template>
17
-
18
- <script>
19
- const TestProduction = process.env.VUE_APP_TestProduction === 'true'
20
-
21
- import { setRela } from '../../../utils/relaNo'
22
- const routerBase = process.env.BASE_URL
23
- const routerBaseRe = new RegExp('^' + routerBase)
24
-
25
- export default {
26
- name: 'SubContent',
27
- props: {
28
- isTest: {
29
- type: Boolean,
30
- default: false
31
- }
32
- },
33
- data() {
34
- return {
35
- dnsKey: this.isTest || TestProduction
36
- }
37
- },
38
- watch: {
39
- $route: {
40
- handler(vn, vo) {
41
- if (vo.meta.noCache) {
42
- this.removeOcache({ path: vo.path })
43
- }
44
- }
45
- }
46
- },
47
- created() {
48
- setRela()
49
-
50
- window.addEventListener('message', this.watchMessage)
51
-
52
- setTimeout(() => {
53
- this.pendingRemoveCaches()
54
- }, 60)
55
- },
56
- activated() {
57
- window.addEventListener('message', this.watchMessage)
58
-
59
- setTimeout(() => {
60
- this.pendingRemoveCaches()
61
- }, 60)
62
- },
63
- deactivated() {
64
- window.removeEventListener('message', this.watchMessage)
65
- },
66
- beforeDestroy() {
67
- window.removeEventListener('message', this.watchMessage)
68
- },
69
- methods: {
70
- watchMessage(ev) {
71
- const { targetName, originName } = ev.data
72
- if (targetName === '*' && originName === 'main') {
73
- this.pendingRemoveCaches()
74
- }
75
- },
76
- pendingRemoveCaches() {
77
- for (let key in window._pending_update_cache) {
78
- if (routerBaseRe.test(key) && window._pending_update_cache[key]) {
79
- let cacheKey = key.replace(routerBaseRe, '/')
80
- if (cacheKey === this.$route.path) {
81
- let path = this.$route.path
82
- let oTab = JSON.parse(
83
- JSON.stringify({
84
- path: this.$route.path,
85
- query: this.$route.query
86
- })
87
- )
88
-
89
- this.$router.replace('/loading')
90
- this.removeOcache({ path: path })
91
- setTimeout(() => {
92
- this.$router.replace(oTab)
93
- }, 300)
94
- } else {
95
- this.removeOcache({ path: cacheKey })
96
- }
97
- }
98
- }
99
- },
100
- removeOcache({ path }) {
101
- if (!this.dnsKey) return
102
-
103
- let componentInstance =
104
- this.$refs['content-cache']?.$vnode.parent.componentInstance
105
-
106
- if (componentInstance) {
107
- let kI = componentInstance.keys.findIndex((k) => k === path)
108
- if (kI !== -1) {
109
- let destroy = componentInstance.cache[path].componentInstance.destroy
110
- destroy && destroy()
111
-
112
- delete componentInstance.cache[path]
113
- componentInstance.keys.splice(kI, 1)
114
-
115
- let spath = path.replace(/^\//, routerBase)
116
- delete window._pending_update_cache[spath]
117
- }
118
-
119
- // console.log({
120
- // cache: componentInstance.cache,
121
- // keys: componentInstance.keys
122
- // })
123
- }
124
- }
125
- }
126
- }
127
- </script>
1
+ <template>
2
+ <keep-alive v-if="dnsKey">
3
+ <router-view
4
+ ref="content-cache"
5
+ :key="$route.path"
6
+ class="content-box"
7
+ :no-cache="$route.meta.noCache"
8
+ />
9
+ </keep-alive>
10
+ <router-view
11
+ v-else
12
+ ref="content-cache"
13
+ class="content-box"
14
+ :no-cache="$route.meta.noCache"
15
+ />
16
+ </template>
17
+
18
+ <script>
19
+ const TestProduction = process.env.VUE_APP_TestProduction === 'true'
20
+
21
+ import { setRela } from '../../../utils/relaNo'
22
+ const routerBase = process.env.BASE_URL
23
+ const routerBaseRe = new RegExp('^' + routerBase)
24
+
25
+ export default {
26
+ name: 'SubContent',
27
+ props: {
28
+ isTest: {
29
+ type: Boolean,
30
+ default: false
31
+ }
32
+ },
33
+ data() {
34
+ return {
35
+ dnsKey: this.isTest || TestProduction
36
+ }
37
+ },
38
+ watch: {
39
+ $route: {
40
+ handler(vn, vo) {
41
+ if (vo.meta.noCache) {
42
+ this.removeOcache({ path: vo.path })
43
+ }
44
+ }
45
+ }
46
+ },
47
+ created() {
48
+ setRela()
49
+
50
+ window.addEventListener('message', this.watchMessage)
51
+
52
+ setTimeout(() => {
53
+ this.pendingRemoveCaches()
54
+ }, 60)
55
+ },
56
+ activated() {
57
+ window.addEventListener('message', this.watchMessage)
58
+
59
+ setTimeout(() => {
60
+ this.pendingRemoveCaches()
61
+ }, 60)
62
+ },
63
+ deactivated() {
64
+ window.removeEventListener('message', this.watchMessage)
65
+ },
66
+ beforeDestroy() {
67
+ window.removeEventListener('message', this.watchMessage)
68
+ },
69
+ methods: {
70
+ watchMessage(ev) {
71
+ const { targetName, originName } = ev.data
72
+ if (targetName === '*' && originName === 'main') {
73
+ this.pendingRemoveCaches()
74
+ }
75
+ },
76
+ pendingRemoveCaches() {
77
+ for (let key in window._pending_update_cache) {
78
+ if (routerBaseRe.test(key) && window._pending_update_cache[key]) {
79
+ let cacheKey = key.replace(routerBaseRe, '/')
80
+ if (cacheKey === this.$route.path) {
81
+ let path = this.$route.path
82
+ let oTab = JSON.parse(
83
+ JSON.stringify({
84
+ path: this.$route.path,
85
+ query: this.$route.query
86
+ })
87
+ )
88
+
89
+ this.$router.replace('/loading')
90
+ this.removeOcache({ path: path })
91
+ setTimeout(() => {
92
+ this.$router.replace(oTab)
93
+ }, 300)
94
+ } else {
95
+ this.removeOcache({ path: cacheKey })
96
+ }
97
+ }
98
+ }
99
+ },
100
+ removeOcache({ path }) {
101
+ if (!this.dnsKey) return
102
+
103
+ let componentInstance =
104
+ this.$refs['content-cache']?.$vnode.parent.componentInstance
105
+
106
+ if (componentInstance) {
107
+ let kI = componentInstance.keys.findIndex((k) => k === path)
108
+ if (kI !== -1) {
109
+ let destroy = componentInstance.cache[path].componentInstance.destroy
110
+ destroy && destroy()
111
+
112
+ delete componentInstance.cache[path]
113
+ componentInstance.keys.splice(kI, 1)
114
+
115
+ let spath = path.replace(/^\//, routerBase)
116
+ delete window._pending_update_cache[spath]
117
+ }
118
+
119
+ // console.log({
120
+ // cache: componentInstance.cache,
121
+ // keys: componentInstance.keys
122
+ // })
123
+ }
124
+ }
125
+ }
126
+ }
127
+ </script>
@@ -1,170 +1,170 @@
1
- /* 多页签导航 */
2
- <template>
3
- <el-tabs
4
- ref="nav-tabs"
5
- :value="activeNav"
6
- type="card"
7
- closable
8
- @tab-click="tabClick"
9
- @tab-remove="tabClose"
10
- @contextmenu.native.prevent="tabContextmenu"
11
- @mousewheel.native.prevent="tabScroll"
12
- >
13
- <el-tab-pane
14
- v-for="tab in tabList"
15
- :key="tab.uuid"
16
- :label="tab | tabLabelF"
17
- :name="tab.uuid"
18
- :tab-info="tab"
19
- />
20
- <el-dropdown
21
- trigger="click"
22
- placement="bottom"
23
- style="display: none"
24
- @command="menuCommand"
25
- >
26
- <span>右键菜单</span>
27
- <el-dropdown-menu
28
- ref="contextMenu"
29
- v-click-outside="clickOut"
30
- class="tab-nav-context-menu"
31
- >
32
- <el-dropdown-item command="refresh">{{
33
- '刷新当前标签' | $l(i18n)
34
- }}</el-dropdown-item>
35
- <el-dropdown-item
36
- v-if="!menuInTab || !menuInTab.keep"
37
- command="close"
38
- >{{ '关闭当前标签' | $l(i18n) }}</el-dropdown-item
39
- >
40
- <el-dropdown-item command="closeNexts">{{
41
- '关闭右侧标签' | $l(i18n)
42
- }}</el-dropdown-item>
43
- <el-dropdown-item command="closeOthers">{{
44
- '关闭其他标签' | $l(i18n)
45
- }}</el-dropdown-item>
46
- </el-dropdown-menu>
47
- </el-dropdown>
48
- </el-tabs>
49
- </template>
50
-
51
- <script>
52
- import { labelF } from '../utils'
53
- const i18n = {
54
- 刷新当前标签: {
55
- en: 'Refresh current label'
56
- },
57
- 关闭当前标签: {
58
- en: 'Close current label'
59
- },
60
- 关闭右侧标签: {
61
- en: 'Close right label'
62
- },
63
- 关闭其他标签: {
64
- en: 'Close other labels'
65
- }
66
- }
67
-
68
- export default {
69
- filters: {
70
- tabLabelF: labelF
71
- },
72
- props: {
73
- tabList: {
74
- type: Array,
75
- default: () => []
76
- },
77
- activeNav: {
78
- type: String,
79
- default: undefined
80
- }
81
- },
82
- data() {
83
- return {
84
- showContextMenu: false,
85
- menuInTab: undefined,
86
- i18n
87
- }
88
- },
89
- methods: {
90
- tabClick(C) {
91
- let item = C.$attrs['tab-info']
92
- this.$emit('tab-click', item)
93
- },
94
- tabClose(uuid) {
95
- this.$emit('tab-close', { uuid })
96
- },
97
- tabContextmenu(ev) {
98
- let emitTab = undefined
99
- ev.path.some((dom) => {
100
- if (dom.classList.contains('el-tabs__item')) {
101
- emitTab = dom
102
- return true
103
- } else if (dom === ev.currentTarget) {
104
- return true
105
- }
106
- })
107
- if (emitTab) {
108
- let uuid = emitTab.getAttribute('id').replace('tab-', '')
109
- this._tabContextmenu(uuid, emitTab)
110
- }
111
- },
112
- _tabContextmenu(uuid, dom) {
113
- this.menuInTab = this.tabList.find((t) => t.uuid === uuid)
114
-
115
- let contextMenu = this.$refs.contextMenu
116
- if (this.showContextMenu) {
117
- contextMenu.showPopper = false
118
- this.showContextMenu = false
119
-
120
- contextMenu.referenceElm = dom
121
- setTimeout(() => {
122
- contextMenu.showPopper = true
123
- this.showContextMenu = true
124
- }, 400)
125
- } else {
126
- contextMenu.referenceElm = dom
127
- contextMenu.showPopper = true
128
- this.showContextMenu = true
129
- }
130
- },
131
- clickOut() {
132
- if (this.showContextMenu) {
133
- this.$refs.contextMenu.showPopper = false
134
- this.showContextMenu = false
135
- this.menuInTab = undefined
136
- }
137
- },
138
- menuCommand(c) {
139
- switch (c) {
140
- case 'refresh':
141
- this.$emit('tab-refresh', { uuid: this.menuInTab.uuid })
142
- break
143
- case 'close':
144
- this.$emit('tab-close', { uuid: this.menuInTab.uuid })
145
- break
146
- case 'closeNexts':
147
- this.$emit('tab-close-nexts', this.menuInTab.uuid)
148
- break
149
- case 'closeOthers':
150
- this.$emit('tab-close-others', this.menuInTab.uuid)
151
- break
152
- }
153
-
154
- this.clickOut()
155
- },
156
- tabScroll(ev) {
157
- let isPrev = ev.wheelDelta < 0
158
- let refNav = this.$refs['nav-tabs'].$refs['nav']
159
- if (isPrev) {
160
- refNav.scrollNext()
161
- } else {
162
- refNav.scrollPrev()
163
- }
164
- }
165
- }
166
- }
167
- </script>
168
-
169
- <style>
170
- </style>
1
+ /* 多页签导航 */
2
+ <template>
3
+ <el-tabs
4
+ ref="nav-tabs"
5
+ :value="activeNav"
6
+ type="card"
7
+ closable
8
+ @tab-click="tabClick"
9
+ @tab-remove="tabClose"
10
+ @contextmenu.native.prevent="tabContextmenu"
11
+ @mousewheel.native.prevent="tabScroll"
12
+ >
13
+ <el-tab-pane
14
+ v-for="tab in tabList"
15
+ :key="tab.uuid"
16
+ :label="tab | tabLabelF"
17
+ :name="tab.uuid"
18
+ :tab-info="tab"
19
+ />
20
+ <el-dropdown
21
+ trigger="click"
22
+ placement="bottom"
23
+ style="display: none"
24
+ @command="menuCommand"
25
+ >
26
+ <span>右键菜单</span>
27
+ <el-dropdown-menu
28
+ ref="contextMenu"
29
+ v-click-outside="clickOut"
30
+ class="tab-nav-context-menu"
31
+ >
32
+ <el-dropdown-item command="refresh">{{
33
+ '刷新当前标签' | $l(i18n)
34
+ }}</el-dropdown-item>
35
+ <el-dropdown-item
36
+ v-if="!menuInTab || !menuInTab.keep"
37
+ command="close"
38
+ >{{ '关闭当前标签' | $l(i18n) }}</el-dropdown-item
39
+ >
40
+ <el-dropdown-item command="closeNexts">{{
41
+ '关闭右侧标签' | $l(i18n)
42
+ }}</el-dropdown-item>
43
+ <el-dropdown-item command="closeOthers">{{
44
+ '关闭其他标签' | $l(i18n)
45
+ }}</el-dropdown-item>
46
+ </el-dropdown-menu>
47
+ </el-dropdown>
48
+ </el-tabs>
49
+ </template>
50
+
51
+ <script>
52
+ import { labelF } from '../utils'
53
+ const i18n = {
54
+ 刷新当前标签: {
55
+ en: 'Refresh current label'
56
+ },
57
+ 关闭当前标签: {
58
+ en: 'Close current label'
59
+ },
60
+ 关闭右侧标签: {
61
+ en: 'Close right label'
62
+ },
63
+ 关闭其他标签: {
64
+ en: 'Close other labels'
65
+ }
66
+ }
67
+
68
+ export default {
69
+ filters: {
70
+ tabLabelF: labelF
71
+ },
72
+ props: {
73
+ tabList: {
74
+ type: Array,
75
+ default: () => []
76
+ },
77
+ activeNav: {
78
+ type: String,
79
+ default: undefined
80
+ }
81
+ },
82
+ data() {
83
+ return {
84
+ showContextMenu: false,
85
+ menuInTab: undefined,
86
+ i18n
87
+ }
88
+ },
89
+ methods: {
90
+ tabClick(C) {
91
+ let item = C.$attrs['tab-info']
92
+ this.$emit('tab-click', item)
93
+ },
94
+ tabClose(uuid) {
95
+ this.$emit('tab-close', { uuid })
96
+ },
97
+ tabContextmenu(ev) {
98
+ let emitTab = undefined
99
+ ev.path.some((dom) => {
100
+ if (dom.classList.contains('el-tabs__item')) {
101
+ emitTab = dom
102
+ return true
103
+ } else if (dom === ev.currentTarget) {
104
+ return true
105
+ }
106
+ })
107
+ if (emitTab) {
108
+ let uuid = emitTab.getAttribute('id').replace('tab-', '')
109
+ this._tabContextmenu(uuid, emitTab)
110
+ }
111
+ },
112
+ _tabContextmenu(uuid, dom) {
113
+ this.menuInTab = this.tabList.find((t) => t.uuid === uuid)
114
+
115
+ let contextMenu = this.$refs.contextMenu
116
+ if (this.showContextMenu) {
117
+ contextMenu.showPopper = false
118
+ this.showContextMenu = false
119
+
120
+ contextMenu.referenceElm = dom
121
+ setTimeout(() => {
122
+ contextMenu.showPopper = true
123
+ this.showContextMenu = true
124
+ }, 400)
125
+ } else {
126
+ contextMenu.referenceElm = dom
127
+ contextMenu.showPopper = true
128
+ this.showContextMenu = true
129
+ }
130
+ },
131
+ clickOut() {
132
+ if (this.showContextMenu) {
133
+ this.$refs.contextMenu.showPopper = false
134
+ this.showContextMenu = false
135
+ this.menuInTab = undefined
136
+ }
137
+ },
138
+ menuCommand(c) {
139
+ switch (c) {
140
+ case 'refresh':
141
+ this.$emit('tab-refresh', { uuid: this.menuInTab.uuid })
142
+ break
143
+ case 'close':
144
+ this.$emit('tab-close', { uuid: this.menuInTab.uuid })
145
+ break
146
+ case 'closeNexts':
147
+ this.$emit('tab-close-nexts', this.menuInTab.uuid)
148
+ break
149
+ case 'closeOthers':
150
+ this.$emit('tab-close-others', this.menuInTab.uuid)
151
+ break
152
+ }
153
+
154
+ this.clickOut()
155
+ },
156
+ tabScroll(ev) {
157
+ let isPrev = ev.wheelDelta < 0
158
+ let refNav = this.$refs['nav-tabs'].$refs['nav']
159
+ if (isPrev) {
160
+ refNav.scrollNext()
161
+ } else {
162
+ refNav.scrollPrev()
163
+ }
164
+ }
165
+ }
166
+ }
167
+ </script>
168
+
169
+ <style>
170
+ </style>