n20-common-lib 1.2.6 → 1.2.9

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 (202) hide show
  1. package/README.md +2 -2
  2. package/package.json +87 -87
  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 +454 -454
  18. package/src/assets/css/cl-general-card.scss +11 -11
  19. package/src/assets/css/cl-layout-aside.scss +88 -88
  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 +65 -65
  29. package/src/assets/css/cl-secondary-tab.scss +39 -39
  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 +9 -9
  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 -26
  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/iconFont/demo.css +539 -0
  51. package/src/assets/iconFont/demo_index.html +1614 -0
  52. package/src/assets/iconFont/iconfont.css +263 -0
  53. package/src/assets/iconFont/iconfont.js +1 -0
  54. package/src/assets/iconFont/iconfont.json +443 -0
  55. package/src/assets/iconFont/iconfont.ttf +0 -0
  56. package/src/assets/iconFont/iconfont.woff +0 -0
  57. package/src/assets/iconFont/iconfont.woff2 +0 -0
  58. package/src/assets/realUrl.js +12 -12
  59. package/src/components/.DS_Store +0 -0
  60. package/src/components/Anchor/AnchorItem.vue +29 -29
  61. package/src/components/Anchor/index.vue +185 -185
  62. package/src/components/ApprovalButtons/index.vue +232 -232
  63. package/src/components/ApprovalCard/index.vue +128 -128
  64. package/src/components/ApprovalRecord/approvalImg.vue +39 -39
  65. package/src/components/ApprovalRecord/index.vue +59 -59
  66. package/src/components/Button/button-group.vue +150 -150
  67. package/src/components/Button/icon-group-button.vue +61 -61
  68. package/src/components/Button/index.vue +56 -56
  69. package/src/components/CascaderArea/index.vue +81 -81
  70. package/src/components/ContentLoading/index.vue +41 -41
  71. package/src/components/ContentNull/index.vue +19 -19
  72. package/src/components/DatePicker/index.vue +27 -27
  73. package/src/components/DatePicker/por.vue +169 -169
  74. package/src/components/Dialog/index.vue +26 -26
  75. package/src/components/Dialog/indexO.vue +116 -116
  76. package/src/components/DragList/index.vue +68 -68
  77. package/src/components/Empty/img/abnormal.svg +108 -108
  78. package/src/components/Empty/img/dispose.svg +71 -71
  79. package/src/components/Empty/img/empty.svg +57 -57
  80. package/src/components/Empty/img/general.svg +58 -58
  81. package/src/components/Empty/img/lock.svg +57 -57
  82. package/src/components/Empty/img/network.svg +59 -59
  83. package/src/components/Empty/img/relevant.svg +68 -68
  84. package/src/components/Empty/img/search.svg +72 -72
  85. package/src/components/Empty/index.vue +92 -92
  86. package/src/components/Expandable/index.vue +49 -49
  87. package/src/components/Expandable/main.vue +52 -52
  88. package/src/components/FileExportAsync/index.vue +174 -0
  89. package/src/components/FileUploadTable/index.vue +484 -484
  90. package/src/components/Filters/index.vue +369 -369
  91. package/src/components/Filters/indexO.vue +104 -104
  92. package/src/components/FlowStep/index.vue +68 -68
  93. package/src/components/FooterBox/index.vue +21 -21
  94. package/src/components/GeneralCard/index.vue +15 -15
  95. package/src/components/InputNumber/index.vue +153 -153
  96. package/src/components/InputNumber/numberRange.vue +47 -47
  97. package/src/components/InputSearch/index.vue +75 -75
  98. package/src/components/Layout/.DS_Store +0 -0
  99. package/src/components/Layout/AsideNav/index.vue +119 -144
  100. package/src/components/Layout/AsideNav/menuItem.vue +34 -0
  101. package/src/components/Layout/AsideNav/submenuTitle.vue +26 -0
  102. package/src/components/Layout/HeaderWrap/changePwd.vue +215 -215
  103. package/src/components/Layout/HeaderWrap/index.vue +348 -333
  104. package/src/components/Layout/HeaderWrap/noticePop.vue +300 -300
  105. package/src/components/Layout/SubContent/index.vue +131 -131
  106. package/src/components/Layout/TabsNav/index.vue +170 -170
  107. package/src/components/Layout/index.vue +529 -529
  108. package/src/components/Layout/utils.js +12 -12
  109. package/src/components/LoginTemporary/form.vue +537 -537
  110. package/src/components/LoginTemporary/index.vue +122 -122
  111. package/src/components/LoginTemporary/qrcode.vue +90 -90
  112. package/src/components/LoginTemporary/retrievePw.vue +28 -28
  113. package/src/components/LoginTemporary/utils.js +73 -73
  114. package/src/components/MicroApp/index.js +67 -67
  115. package/src/components/MicroFrame/index.vue +95 -95
  116. package/src/components/MoreTab/index.vue +232 -232
  117. package/src/components/NavMenu/index.vue +60 -60
  118. package/src/components/NstcG6Components/NstcDialog/NstcDialog.vue +184 -184
  119. package/src/components/PageLayout/page.vue +15 -15
  120. package/src/components/Pagination/index.vue +96 -96
  121. package/src/components/SecondaryTab/index.vue +58 -58
  122. package/src/components/SelectLazy/index.vue +75 -75
  123. package/src/components/SelectTree/SelectTreeLazy.vue +241 -241
  124. package/src/components/SelectTree/index.vue +205 -205
  125. package/src/components/ShowColumn/index.vue +204 -204
  126. package/src/components/Sifting/index.vue +99 -99
  127. package/src/components/Statis/index.vue +97 -97
  128. package/src/components/Statis/statisItem.vue +54 -54
  129. package/src/components/Statis/statisPopover.vue +55 -55
  130. package/src/components/Step/index.vue +38 -38
  131. package/src/components/Suspend/index.vue +72 -72
  132. package/src/components/Table/index.vue +179 -179
  133. package/src/components/Table/indexO.vue +149 -149
  134. package/src/components/Task/index.vue +26 -26
  135. package/src/components/TertiaryTab/index.vue +53 -53
  136. package/src/components/TimePicker/index.vue +28 -28
  137. package/src/components/Upload/index.vue +242 -242
  138. package/src/components/WornPagination/index.vue +73 -73
  139. package/src/directives/VClickOutside/index.js +19 -19
  140. package/src/directives/VHas/index.js +32 -32
  141. package/src/directives/VMove/index.js +42 -42
  142. package/src/directives/VTitle/index.js +64 -56
  143. package/src/directives/VTitle/tooltip.vue +21 -21
  144. package/src/index.js +225 -218
  145. package/src/plugins/CompatibleOld/index.js +57 -57
  146. package/src/plugins/Print/index.js +4 -4
  147. package/src/plugins/Print/print-js/.babelrc +12 -12
  148. package/src/plugins/Print/print-js/LICENSE +21 -21
  149. package/src/plugins/Print/print-js/README.md +98 -98
  150. package/src/plugins/Print/print-js/dist/print.css +96 -96
  151. package/src/plugins/Print/print-js/dist/print.js +990 -990
  152. package/src/plugins/Print/print-js/package.json +60 -60
  153. package/src/plugins/Print/print-js/src/index.d.ts +45 -45
  154. package/src/plugins/Print/print-js/src/index.js +10 -10
  155. package/src/plugins/Print/print-js/src/js/browser.js +33 -33
  156. package/src/plugins/Print/print-js/src/js/functions.js +103 -103
  157. package/src/plugins/Print/print-js/src/js/html.js +70 -70
  158. package/src/plugins/Print/print-js/src/js/image.js +48 -48
  159. package/src/plugins/Print/print-js/src/js/init.js +168 -168
  160. package/src/plugins/Print/print-js/src/js/json.js +109 -109
  161. package/src/plugins/Print/print-js/src/js/modal.js +62 -62
  162. package/src/plugins/Print/print-js/src/js/pdf.js +62 -62
  163. package/src/plugins/Print/print-js/src/js/print.js +102 -102
  164. package/src/plugins/Print/print-js/src/js/raw-html.js +15 -15
  165. package/src/plugins/Print/print-js/src/sass/index.scss +13 -13
  166. package/src/plugins/Print/print-js/src/sass/modules/_colors.scss +9 -9
  167. package/src/plugins/Print/print-js/src/sass/partials/_modal.scss +40 -40
  168. package/src/plugins/Print/print-js/src/sass/partials/_spinner.scss +45 -45
  169. package/src/plugins/Print/print.js +2 -2
  170. package/src/plugins/Print/print.scss +1 -1
  171. package/src/plugins/SetMenuTree/index.vue +41 -41
  172. package/src/plugins/SetMenuTree/logoIcon.vue +37 -37
  173. package/src/plugins/SetMenuTree/setmenutree.vue +427 -427
  174. package/src/plugins/SetMenuTree/utils.js +74 -74
  175. package/src/plugins/Sign/InfosecNetSignCNGAgent.min.js +2000 -2000
  176. package/src/plugins/Sign/index.js +65 -65
  177. package/src/plugins/Sign/sign.js +1 -1
  178. package/src/plugins/setTabsForSub.js +2 -2
  179. package/src/utils/auth.js +53 -53
  180. package/src/utils/axios.js +203 -203
  181. package/src/utils/downloadBlob.js +19 -19
  182. package/src/utils/forEachs.js +16 -16
  183. package/src/utils/getScrollContainer.js +43 -43
  184. package/src/utils/i18n/cn2hk.json +1270 -1270
  185. package/src/utils/i18n/index.js +54 -54
  186. package/src/utils/list2tree.js +36 -36
  187. package/src/utils/msgboxPor.js +26 -26
  188. package/src/utils/print.js +161 -161
  189. package/src/utils/relaNo.js +69 -69
  190. package/src/utils/repairElementUI.js +66 -66
  191. package/src/utils/urlToGo.js +82 -82
  192. package/style/css/normalize.scss +723 -726
  193. package/style/fonts/iconfont.022f36c4.woff2 +0 -0
  194. package/style/fonts/iconfont.4a1b2c93.woff +0 -0
  195. package/style/fonts/iconfont.a9febaa2.ttf +0 -0
  196. package/style/index.css +3 -2
  197. package/style/index.css.map +1 -1
  198. package/style/pageDemo/demo-1.vue +130 -131
  199. package/style/pageDemo/demo-2.vue +35 -35
  200. package/style/pageDemo/demo-3.vue +22 -22
  201. package/style/pageDemo/seeCode.js +20 -20
  202. package/style/server-config.jsonc +663 -596
@@ -1,131 +1,131 @@
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
- appNo: {
29
- type: String,
30
- default: process.env.VUE_APP_NAME
31
- },
32
- isTest: {
33
- type: Boolean,
34
- default: false
35
- }
36
- },
37
- data() {
38
- return {
39
- dnsKey: this.isTest || TestProduction
40
- }
41
- },
42
- watch: {
43
- $route: {
44
- handler(vn, vo) {
45
- if (vo.meta.noCache) {
46
- this.removeOcache({ path: vo.path })
47
- }
48
- }
49
- }
50
- },
51
- created() {
52
- setRela(this.appNo)
53
-
54
- window.addEventListener('message', this.watchMessage)
55
-
56
- setTimeout(() => {
57
- this.pendingRemoveCaches()
58
- }, 60)
59
- },
60
- activated() {
61
- window.addEventListener('message', this.watchMessage)
62
-
63
- setTimeout(() => {
64
- this.pendingRemoveCaches()
65
- }, 60)
66
- },
67
- deactivated() {
68
- window.removeEventListener('message', this.watchMessage)
69
- },
70
- beforeDestroy() {
71
- window.removeEventListener('message', this.watchMessage)
72
- },
73
- methods: {
74
- watchMessage(ev) {
75
- const { targetName, originName } = ev.data
76
- if (targetName === '*' && originName === 'main') {
77
- this.pendingRemoveCaches()
78
- }
79
- },
80
- pendingRemoveCaches() {
81
- for (let key in window._pending_update_cache) {
82
- if (routerBaseRe.test(key) && window._pending_update_cache[key]) {
83
- let cacheKey = key.replace(routerBaseRe, '/')
84
- if (cacheKey === this.$route.path) {
85
- let path = this.$route.path
86
- let oTab = JSON.parse(
87
- JSON.stringify({
88
- path: this.$route.path,
89
- query: this.$route.query
90
- })
91
- )
92
-
93
- this.$router.replace('/loading')
94
- this.removeOcache({ path: path })
95
- setTimeout(() => {
96
- this.$router.replace(oTab)
97
- }, 300)
98
- } else {
99
- this.removeOcache({ path: cacheKey })
100
- }
101
- }
102
- }
103
- },
104
- removeOcache({ path }) {
105
- if (!this.dnsKey) return
106
-
107
- let componentInstance =
108
- this.$refs['content-cache']?.$vnode.parent.componentInstance
109
-
110
- if (componentInstance) {
111
- let kI = componentInstance.keys.findIndex((k) => k === path)
112
- if (kI !== -1) {
113
- let destroy = componentInstance.cache[path].componentInstance.destroy
114
- destroy && destroy()
115
-
116
- delete componentInstance.cache[path]
117
- componentInstance.keys.splice(kI, 1)
118
-
119
- let spath = path.replace(/^\//, routerBase)
120
- delete window._pending_update_cache[spath]
121
- }
122
-
123
- // console.log({
124
- // cache: componentInstance.cache,
125
- // keys: componentInstance.keys
126
- // })
127
- }
128
- }
129
- }
130
- }
131
- </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
+ appNo: {
29
+ type: String,
30
+ default: process.env.VUE_APP_NAME
31
+ },
32
+ isTest: {
33
+ type: Boolean,
34
+ default: false
35
+ }
36
+ },
37
+ data() {
38
+ return {
39
+ dnsKey: this.isTest || TestProduction
40
+ }
41
+ },
42
+ watch: {
43
+ $route: {
44
+ handler(vn, vo) {
45
+ if (vo.meta.noCache) {
46
+ this.removeOcache({ path: vo.path })
47
+ }
48
+ }
49
+ }
50
+ },
51
+ created() {
52
+ setRela(this.appNo)
53
+
54
+ window.addEventListener('message', this.watchMessage)
55
+
56
+ setTimeout(() => {
57
+ this.pendingRemoveCaches()
58
+ }, 60)
59
+ },
60
+ activated() {
61
+ window.addEventListener('message', this.watchMessage)
62
+
63
+ setTimeout(() => {
64
+ this.pendingRemoveCaches()
65
+ }, 60)
66
+ },
67
+ deactivated() {
68
+ window.removeEventListener('message', this.watchMessage)
69
+ },
70
+ beforeDestroy() {
71
+ window.removeEventListener('message', this.watchMessage)
72
+ },
73
+ methods: {
74
+ watchMessage(ev) {
75
+ const { targetName, originName } = ev.data
76
+ if (targetName === '*' && originName === 'main') {
77
+ this.pendingRemoveCaches()
78
+ }
79
+ },
80
+ pendingRemoveCaches() {
81
+ for (let key in window._pending_update_cache) {
82
+ if (routerBaseRe.test(key) && window._pending_update_cache[key]) {
83
+ let cacheKey = key.replace(routerBaseRe, '/')
84
+ if (cacheKey === this.$route.path) {
85
+ let path = this.$route.path
86
+ let oTab = JSON.parse(
87
+ JSON.stringify({
88
+ path: this.$route.path,
89
+ query: this.$route.query
90
+ })
91
+ )
92
+
93
+ this.$router.replace('/loading')
94
+ this.removeOcache({ path: path })
95
+ setTimeout(() => {
96
+ this.$router.replace(oTab)
97
+ }, 300)
98
+ } else {
99
+ this.removeOcache({ path: cacheKey })
100
+ }
101
+ }
102
+ }
103
+ },
104
+ removeOcache({ path }) {
105
+ if (!this.dnsKey) return
106
+
107
+ let componentInstance =
108
+ this.$refs['content-cache']?.$vnode.parent.componentInstance
109
+
110
+ if (componentInstance) {
111
+ let kI = componentInstance.keys.findIndex((k) => k === path)
112
+ if (kI !== -1) {
113
+ let destroy = componentInstance.cache[path].componentInstance.destroy
114
+ destroy && destroy()
115
+
116
+ delete componentInstance.cache[path]
117
+ componentInstance.keys.splice(kI, 1)
118
+
119
+ let spath = path.replace(/^\//, routerBase)
120
+ delete window._pending_update_cache[spath]
121
+ }
122
+
123
+ // console.log({
124
+ // cache: componentInstance.cache,
125
+ // keys: componentInstance.keys
126
+ // })
127
+ }
128
+ }
129
+ }
130
+ }
131
+ </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>