n20-common-lib 1.1.98

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 (196) hide show
  1. package/README.md +27 -0
  2. package/package.json +87 -0
  3. package/src/_qiankun/index.js +113 -0
  4. package/src/_qiankun/postMessage.js +48 -0
  5. package/src/assets/css/_coreLib.scss +35 -0
  6. package/src/assets/css/cl-anchor.scss +24 -0
  7. package/src/assets/css/cl-approve-card.scss +58 -0
  8. package/src/assets/css/cl-dialog.scss +99 -0
  9. package/src/assets/css/cl-drag-list.scss +22 -0
  10. package/src/assets/css/cl-empty.scss +10 -0
  11. package/src/assets/css/cl-expandable-pane.scss +25 -0
  12. package/src/assets/css/cl-expandable.scss +23 -0
  13. package/src/assets/css/cl-file-upload-table.scss +11 -0
  14. package/src/assets/css/cl-filter.scss +4 -0
  15. package/src/assets/css/cl-flow-step.scss +186 -0
  16. package/src/assets/css/cl-footer-box.scss +10 -0
  17. package/src/assets/css/cl-form-item.scss +322 -0
  18. package/src/assets/css/cl-general-card.scss +12 -0
  19. package/src/assets/css/cl-layout-aside.scss +88 -0
  20. package/src/assets/css/cl-layout-content.scss +16 -0
  21. package/src/assets/css/cl-layout-header.scss +73 -0
  22. package/src/assets/css/cl-layout-tabs.scss +87 -0
  23. package/src/assets/css/cl-layout.scss +97 -0
  24. package/src/assets/css/cl-login-temporary.scss +37 -0
  25. package/src/assets/css/cl-message.scss +75 -0
  26. package/src/assets/css/cl-more-tab.scss +98 -0
  27. package/src/assets/css/cl-nav-menu.scss +5 -0
  28. package/src/assets/css/cl-pagination.scss +65 -0
  29. package/src/assets/css/cl-secondary-tab.scss +39 -0
  30. package/src/assets/css/cl-showcolumn.scss +23 -0
  31. package/src/assets/css/cl-sifting.scss +51 -0
  32. package/src/assets/css/cl-statis.scss +42 -0
  33. package/src/assets/css/cl-step.scss +73 -0
  34. package/src/assets/css/cl-suspend.scss +19 -0
  35. package/src/assets/css/cl-tertiary-tab.scss +9 -0
  36. package/src/assets/css/cl-upload.scss +41 -0
  37. package/src/assets/css/cl-worn-pagination.scss +50 -0
  38. package/src/assets/css/el-button.scss +169 -0
  39. package/src/assets/css/el-table.scss +79 -0
  40. package/src/assets/css/element-variables.scss +1061 -0
  41. package/src/assets/css/element.dev.scss +21 -0
  42. package/src/assets/css/font-icon.scss +26 -0
  43. package/src/assets/css/index.dev.scss +4 -0
  44. package/src/assets/css/index.scss +11 -0
  45. package/src/assets/css/normalize.scss +723 -0
  46. package/src/assets/css/rootvar.scss +139 -0
  47. package/src/assets/css/select.scss +26 -0
  48. package/src/assets/css/title-pop.scss +4 -0
  49. package/src/assets/getJsonc.js +50 -0
  50. package/src/assets/realUrl.js +12 -0
  51. package/src/components/Anchor/AnchorItem.vue +30 -0
  52. package/src/components/Anchor/index.vue +185 -0
  53. package/src/components/ApprovalButtons/index.vue +232 -0
  54. package/src/components/ApprovalCard/index.vue +128 -0
  55. package/src/components/ApprovalRecord/approvalImg.vue +39 -0
  56. package/src/components/ApprovalRecord/index.vue +59 -0
  57. package/src/components/Button/button-group.vue +150 -0
  58. package/src/components/Button/icon-group-button.vue +61 -0
  59. package/src/components/Button/index.vue +56 -0
  60. package/src/components/ContentLoading/index.vue +41 -0
  61. package/src/components/ContentNull/index.vue +19 -0
  62. package/src/components/DatePicker/index.vue +27 -0
  63. package/src/components/DatePicker/por.vue +169 -0
  64. package/src/components/Dialog/index.vue +26 -0
  65. package/src/components/Dialog/indexO.vue +116 -0
  66. package/src/components/DragList/index.vue +68 -0
  67. package/src/components/Empty/img/404.png +0 -0
  68. package/src/components/Empty/img/abnormal.svg +109 -0
  69. package/src/components/Empty/img/dispose.svg +72 -0
  70. package/src/components/Empty/img/empty.svg +58 -0
  71. package/src/components/Empty/img/general.svg +59 -0
  72. package/src/components/Empty/img/lock.svg +58 -0
  73. package/src/components/Empty/img/network.svg +60 -0
  74. package/src/components/Empty/img/relevant.svg +69 -0
  75. package/src/components/Empty/img/search.svg +73 -0
  76. package/src/components/Empty/index.vue +92 -0
  77. package/src/components/Expandable/index.vue +49 -0
  78. package/src/components/Expandable/main.vue +52 -0
  79. package/src/components/FileUploadTable/index.vue +484 -0
  80. package/src/components/Filters/index.vue +358 -0
  81. package/src/components/Filters/indexO.vue +104 -0
  82. package/src/components/FlowStep/index.vue +69 -0
  83. package/src/components/FooterBox/index.vue +21 -0
  84. package/src/components/GeneralCard/index.vue +15 -0
  85. package/src/components/InputNumber/index.vue +153 -0
  86. package/src/components/InputNumber/numberRange.vue +47 -0
  87. package/src/components/InputSearch/index.vue +75 -0
  88. package/src/components/Layout/AsideNav/index.vue +144 -0
  89. package/src/components/Layout/HeaderWrap/changePwd.vue +215 -0
  90. package/src/components/Layout/HeaderWrap/index.vue +336 -0
  91. package/src/components/Layout/HeaderWrap/noticePop.vue +300 -0
  92. package/src/components/Layout/SubContent/index.vue +131 -0
  93. package/src/components/Layout/TabsNav/index.vue +170 -0
  94. package/src/components/Layout/index.vue +529 -0
  95. package/src/components/Layout/utils.js +12 -0
  96. package/src/components/LoginTemporary/form.vue +511 -0
  97. package/src/components/LoginTemporary/index.vue +122 -0
  98. package/src/components/LoginTemporary/qr.png +0 -0
  99. package/src/components/LoginTemporary/qrcode.vue +90 -0
  100. package/src/components/LoginTemporary/qrt.png +0 -0
  101. package/src/components/LoginTemporary/retrievePw.vue +28 -0
  102. package/src/components/LoginTemporary/utils.js +73 -0
  103. package/src/components/MicroApp/index.js +67 -0
  104. package/src/components/MicroFrame/index.vue +95 -0
  105. package/src/components/MoreTab/index.vue +232 -0
  106. package/src/components/NavMenu/index.vue +60 -0
  107. package/src/components/NstcG6Components/NstcApprovel/NstcApprovel.vue +13 -0
  108. package/src/components/NstcG6Components/NstcDialog/NstcDialog.vue +185 -0
  109. package/src/components/NstcG6Components/Progress/progress.vue +134 -0
  110. package/src/components/PageLayout/page.vue +15 -0
  111. package/src/components/Pagination/index.vue +96 -0
  112. package/src/components/SecondaryTab/index.vue +58 -0
  113. package/src/components/SelectLazy/index.vue +75 -0
  114. package/src/components/SelectTree/SelectTreeLazy.vue +241 -0
  115. package/src/components/SelectTree/index.vue +208 -0
  116. package/src/components/ShowColumn/index.vue +188 -0
  117. package/src/components/Sifting/index.vue +99 -0
  118. package/src/components/Statis/index.vue +97 -0
  119. package/src/components/Statis/statisItem.vue +54 -0
  120. package/src/components/Statis/statisPopover.vue +55 -0
  121. package/src/components/Step/index.vue +38 -0
  122. package/src/components/Suspend/index.vue +72 -0
  123. package/src/components/Table/index.vue +131 -0
  124. package/src/components/Table/indexO.vue +149 -0
  125. package/src/components/Task/index.vue +26 -0
  126. package/src/components/TertiaryTab/index.vue +53 -0
  127. package/src/components/TimePicker/index.vue +28 -0
  128. package/src/components/Upload/index.vue +242 -0
  129. package/src/components/WornPagination/index.vue +73 -0
  130. package/src/directives/VClickOutside/index.js +19 -0
  131. package/src/directives/VDrag/index.js +72 -0
  132. package/src/directives/VHas/index.js +27 -0
  133. package/src/directives/VMove/index.js +42 -0
  134. package/src/directives/VTitle/index.js +56 -0
  135. package/src/directives/VTitle/tooltip.vue +21 -0
  136. package/src/index.js +225 -0
  137. package/src/plugins/CompatibleOld/index.js +57 -0
  138. package/src/plugins/Print/index.js +4 -0
  139. package/src/plugins/Print/print-js/.babelrc +12 -0
  140. package/src/plugins/Print/print-js/LICENSE +21 -0
  141. package/src/plugins/Print/print-js/README.md +98 -0
  142. package/src/plugins/Print/print-js/dist/print.css +97 -0
  143. package/src/plugins/Print/print-js/dist/print.js +991 -0
  144. package/src/plugins/Print/print-js/dist/print.map +1 -0
  145. package/src/plugins/Print/print-js/package.json +60 -0
  146. package/src/plugins/Print/print-js/src/index.d.ts +45 -0
  147. package/src/plugins/Print/print-js/src/index.js +10 -0
  148. package/src/plugins/Print/print-js/src/js/browser.js +33 -0
  149. package/src/plugins/Print/print-js/src/js/functions.js +103 -0
  150. package/src/plugins/Print/print-js/src/js/html.js +70 -0
  151. package/src/plugins/Print/print-js/src/js/image.js +48 -0
  152. package/src/plugins/Print/print-js/src/js/init.js +168 -0
  153. package/src/plugins/Print/print-js/src/js/json.js +109 -0
  154. package/src/plugins/Print/print-js/src/js/modal.js +62 -0
  155. package/src/plugins/Print/print-js/src/js/pdf.js +62 -0
  156. package/src/plugins/Print/print-js/src/js/print.js +102 -0
  157. package/src/plugins/Print/print-js/src/js/raw-html.js +15 -0
  158. package/src/plugins/Print/print-js/src/sass/index.scss +14 -0
  159. package/src/plugins/Print/print-js/src/sass/modules/_colors.scss +10 -0
  160. package/src/plugins/Print/print-js/src/sass/partials/_modal.scss +41 -0
  161. package/src/plugins/Print/print-js/src/sass/partials/_spinner.scss +46 -0
  162. package/src/plugins/Print/print.js +2 -0
  163. package/src/plugins/Print/print.scss +1 -0
  164. package/src/plugins/SetMenuTree/index.vue +41 -0
  165. package/src/plugins/SetMenuTree/logoIcon.vue +37 -0
  166. package/src/plugins/SetMenuTree/setmenutree.vue +427 -0
  167. package/src/plugins/SetMenuTree/utils.js +74 -0
  168. package/src/plugins/Sign/InfosecNetSignCNGAgent.min.js +2000 -0
  169. package/src/plugins/Sign/index.js +65 -0
  170. package/src/plugins/Sign/sign.js +1 -0
  171. package/src/plugins/setTabsForSub.js +2 -0
  172. package/src/utils/auth.js +53 -0
  173. package/src/utils/axios.js +203 -0
  174. package/src/utils/downloadBlob.js +19 -0
  175. package/src/utils/forEachs.js +16 -0
  176. package/src/utils/getScrollContainer.js +43 -0
  177. package/src/utils/i18n/cn2hk.json +1270 -0
  178. package/src/utils/i18n/index.js +54 -0
  179. package/src/utils/list2tree.js +36 -0
  180. package/src/utils/msgboxPor.js +26 -0
  181. package/src/utils/print.js +161 -0
  182. package/src/utils/relaNo.js +35 -0
  183. package/src/utils/repairElementUI.js +66 -0
  184. package/src/utils/urlToGo.js +82 -0
  185. package/style/css/normalize.scss +723 -0
  186. package/style/fonts/element-icons.535877f5.woff +0 -0
  187. package/style/fonts/element-icons.732389de.ttf +0 -0
  188. package/style/index.css +3 -0
  189. package/style/index.css.map +1 -0
  190. package/style/index.umd.min.js +2 -0
  191. package/style/index.umd.min.js.map +1 -0
  192. package/style/pageDemo/demo-1.vue +130 -0
  193. package/style/pageDemo/demo-2.vue +35 -0
  194. package/style/pageDemo/demo-3.vue +22 -0
  195. package/style/pageDemo/seeCode.js +20 -0
  196. package/style/server-config.jsonc +663 -0
@@ -0,0 +1,26 @@
1
+ <template>
2
+ <div class="f-s-b">
3
+ <i class="n20-icon-tianchongxing color-warning"></i>
4
+ <div class="m-l m-r-lg" style="display: inline-block; width: 300px">
5
+ <slot></slot>
6
+ </div>
7
+ <el-button class="m-l" type="text" @click="handleBtn">{{ text }}</el-button>
8
+ </div>
9
+ </template>
10
+
11
+ <script>
12
+ export default {
13
+ name: 'Task',
14
+ props: {
15
+ text: {
16
+ type: String,
17
+ default: ''
18
+ }
19
+ },
20
+ methods: {
21
+ handleBtn() {
22
+ this.$emit('click')
23
+ }
24
+ }
25
+ }
26
+ </script>
@@ -0,0 +1,53 @@
1
+
2
+ <template>
3
+ <el-radio-group :value="init" class="n20-tertiary-tab" :size="size">
4
+ <el-radio-button
5
+ v-for="item of data"
6
+ :key="item.name"
7
+ :label="item.name"
8
+ :disabled="item.disabled"
9
+ @click.native.prevent="(ev) => clickFn(item, ev)"
10
+ >
11
+ <span v-if="item.icon" :class="item.icon"></span>
12
+ {{ item.name }}
13
+ </el-radio-button>
14
+ </el-radio-group>
15
+ </template>
16
+
17
+ <script>
18
+ export default {
19
+ name: 'TertiaryTab',
20
+ props: {
21
+ data: {
22
+ type: Array,
23
+ default: () => []
24
+ },
25
+ init: {
26
+ type: String,
27
+ default: ''
28
+ },
29
+ size: {
30
+ type: String,
31
+ default: 'mini'
32
+ }
33
+ },
34
+ data() {
35
+ if (!this.$listeners['update:init'] && !this.$listeners['click']) {
36
+ console.warn('请设置 @click 或 init.sync')
37
+ }
38
+ return {}
39
+ },
40
+ methods: {
41
+ clickFn(item, ev) {
42
+ ev.currentTarget && ev.currentTarget.blur()
43
+
44
+ if (this.$listeners['update:init']) {
45
+ !item.disabled && this.$emit('update:init', item.name)
46
+ }
47
+ if (this.$listeners['click']) {
48
+ this.$emit('click', item)
49
+ }
50
+ }
51
+ }
52
+ }
53
+ </script>
@@ -0,0 +1,28 @@
1
+ <template>
2
+ <el-time-picker
3
+ ref="time-picker"
4
+ class="n20-date-editor"
5
+ :class="{ 'has-value': clearable && value }"
6
+ v-bind="$attrs"
7
+ :value="value"
8
+ :clearable="clearable"
9
+ v-on="$listeners"
10
+ />
11
+ </template>
12
+
13
+ <script>
14
+ /* 与原生elmUI区别就是加了一个has-value */
15
+ export default {
16
+ name: 'TimePicker',
17
+ props: {
18
+ value: {
19
+ type: [String, Number, Date],
20
+ default: undefined
21
+ },
22
+ clearable: {
23
+ type: Boolean,
24
+ default: true
25
+ }
26
+ }
27
+ }
28
+ </script>
@@ -0,0 +1,242 @@
1
+ <template>
2
+ <el-upload
3
+ ref="upload"
4
+ :action="action"
5
+ :headers="headers"
6
+ :accept="accept"
7
+ :multiple="false"
8
+ :file-list="fileList"
9
+ :show-file-list="false"
10
+ v-bind="$attrs"
11
+ :on-success="successFn"
12
+ :on-error="errorFn"
13
+ :on-progress="progressFn"
14
+ :before-upload="beforeUploadFn"
15
+ v-on="$listeners"
16
+ >
17
+ <template slot="trigger">
18
+ <slot name="trigger">
19
+ <el-input
20
+ :value="fileNameC"
21
+ :placeholder="placeholder"
22
+ readonly
23
+ :disabled="$attrs.disabled"
24
+ >
25
+ <template slot="suffix">
26
+ <i
27
+ v-if="fileNameC && showClear"
28
+ class="el-input__icon upload-clear el-icon-close"
29
+ style="pointer-events: all"
30
+ @click.stop="clearFile"
31
+ ></i>
32
+ <i v-else class="el-input__icon n20-icon-shangchuan"></i>
33
+ </template>
34
+ </el-input>
35
+ </slot>
36
+ </template>
37
+ <template slot="tip">
38
+ <slot name="tip"></slot>
39
+ </template>
40
+ <el-dialog :visible.sync="progressV" title="提示" append-to-body>
41
+ <p v-if="!percentType">系统处理中,请稍等......</p>
42
+ <p v-else>{{ percentMsg }}</p>
43
+ <el-progress class="m-b" :percentage="percent" :status="percentType" />
44
+ </el-dialog>
45
+ </el-upload>
46
+ </template>
47
+
48
+ <script>
49
+ export default {
50
+ name: 'Upload',
51
+ props: {
52
+ fileName: {
53
+ type: String,
54
+ default: ''
55
+ },
56
+ fileUrl: {
57
+ type: String,
58
+ default: ''
59
+ },
60
+ placeholder: {
61
+ type: String,
62
+ default: '请选择文件'
63
+ },
64
+ msgType: {
65
+ type: String,
66
+ default: 'dialog'
67
+ },
68
+ action: {
69
+ type: String,
70
+ default: '/bems/1.0/attach'
71
+ },
72
+ headers: {
73
+ type: Object,
74
+ default: () => ({
75
+ token: window.sessionStorage.getItem('token') || 'main-token'
76
+ })
77
+ },
78
+ size: {
79
+ type: [String, Number],
80
+ default: undefined
81
+ },
82
+ accept: {
83
+ type: String,
84
+ default: undefined
85
+ },
86
+ onRemove: {
87
+ type: Function,
88
+ default: undefined
89
+ },
90
+ onProgress: {
91
+ type: Function,
92
+ default: undefined
93
+ },
94
+ onSuccess: {
95
+ type: Function,
96
+ default: undefined
97
+ },
98
+ onError: {
99
+ type: Function,
100
+ default: undefined
101
+ },
102
+ beforeUpload: {
103
+ type: Function,
104
+ default: undefined
105
+ },
106
+ showClear: {
107
+ type: Boolean,
108
+ default: true
109
+ }
110
+ },
111
+ data() {
112
+ return {
113
+ fileList: [],
114
+ percent: 0,
115
+ percentMsg: '',
116
+ progressV: false,
117
+ percentType: undefined
118
+ }
119
+ },
120
+ computed: {
121
+ fileNameC: {
122
+ get() {
123
+ return this.fileName
124
+ },
125
+ set(v) {
126
+ this.$emit('update:fileName', v)
127
+ }
128
+ },
129
+ fileUrlC: {
130
+ get() {
131
+ return this.fileUrl
132
+ },
133
+ set(v) {
134
+ this.$emit('update:fileUrl', v)
135
+ }
136
+ }
137
+ },
138
+ methods: {
139
+ clearFile() {
140
+ if (this.onRemove) {
141
+ this.onRemove(this.fileList[0], this.fileList)
142
+ } else {
143
+ this.fileNameC = ''
144
+ this.fileUrlC = ''
145
+ this.fileList.pop()
146
+ console.log('删除上传')
147
+ }
148
+ },
149
+ beforeUploadFn(file) {
150
+ let size = this.size
151
+ let sizeNum
152
+
153
+ if (size) {
154
+ if (/kb/i.test(size)) {
155
+ sizeNum = parseFloat(size) * 1024
156
+ } else if (/mb/i.test(size)) {
157
+ sizeNum = parseFloat(size) * 1024 * 1024
158
+ } else {
159
+ sizeNum = parseFloat(size)
160
+ }
161
+ if (file.size > sizeNum) {
162
+ this.$message.error('文件大小不能超过 ' + size + ' !')
163
+ return false
164
+ }
165
+ }
166
+
167
+ let accept = this.accept
168
+ if (accept) {
169
+ let [ftB = '', ftA = ''] = file.type.split('/')
170
+ ftB = ftB + '/*'
171
+ ftA = file.name.match(/\.[^.]+$/)?.[0] || '.' + ftA
172
+ if (!(accept.includes(ftB) || accept.includes(ftA))) {
173
+ this.$message.error('文件格式错误 !')
174
+ return false
175
+ }
176
+ }
177
+
178
+ if (this.msgType === 'dialog') {
179
+ this.percent = 0
180
+ this.percentType = undefined
181
+ this.progressV = true
182
+ }
183
+
184
+ if (this.beforeUpload) {
185
+ return this.beforeUpload(file)
186
+ } else {
187
+ return
188
+ }
189
+ },
190
+ progressFn(event, file, fileList) {
191
+ if (this.onProgress) {
192
+ this.onProgress(event, file, fileList)
193
+ }
194
+
195
+ if (this.msgType === 'dialog') {
196
+ this.percent = event.percent <= 99 ? Math.round(event.percent) : 99
197
+ }
198
+ },
199
+ successFn(response, file, fileList) {
200
+ if (this.onSuccess) {
201
+ this.onSuccess(response, file, fileList)
202
+ } else {
203
+ this.fileNameC = file.name
204
+ this.fileUrlC = response.data
205
+ this.fileList = [file]
206
+ }
207
+
208
+ if (this.msgType === 'dialog') {
209
+ this.percent = 100
210
+ this.percentType = 'success'
211
+ this.percentMsg = response.msg || '上传成功!'
212
+ } else if (this.msgType === 'message') {
213
+ if (!this.onSuccess) {
214
+ this.$message({
215
+ type: 'success',
216
+ message: response.msg,
217
+ showClose: true
218
+ })
219
+ }
220
+ }
221
+ },
222
+ errorFn(err, file, fileList) {
223
+ if (this.onError) {
224
+ this.onError(err, file, fileList)
225
+ }
226
+
227
+ if (this.msgType === 'dialog') {
228
+ this.percentType = 'exception'
229
+ this.percentMsg = err?.msg || '上传失败!'
230
+ } else if (this.msgType === 'message') {
231
+ if (!this.onError) {
232
+ this.$message({
233
+ type: 'error',
234
+ message: err?.msg || '上传失败',
235
+ showClose: true
236
+ })
237
+ }
238
+ }
239
+ }
240
+ }
241
+ }
242
+ </script>
@@ -0,0 +1,73 @@
1
+ <template>
2
+ <div class="flex-box flex-r">
3
+ <Pagination :page-obj="pageObj" @change="pageChange" />
4
+ </div>
5
+ </template>
6
+
7
+ <script>
8
+ import Pagination from '../Pagination/index.vue'
9
+ export default {
10
+ name: 'WornPagination',
11
+ components: {
12
+ Pagination
13
+ },
14
+ props: {
15
+ page: {
16
+ type: Number,
17
+ default: 1
18
+ },
19
+ pageSize: {
20
+ type: Number,
21
+ default: 20
22
+ },
23
+ total: {
24
+ type: Number,
25
+ default: 0
26
+ }
27
+ },
28
+ data() {
29
+ return {
30
+ pageObj: {
31
+ no: 1,
32
+ size: 20,
33
+ total: 0
34
+ }
35
+ }
36
+ },
37
+ watch: {
38
+ page(v) {
39
+ this.pageObj.no = v
40
+ },
41
+ pageSize(v) {
42
+ this.pageObj.size = v
43
+ },
44
+ total(v) {
45
+ this.pageObj.total = v
46
+ }
47
+ },
48
+ created() {
49
+ this.pageObj = {
50
+ no: this.page,
51
+ size: this.pageSize,
52
+ total: this.total
53
+ }
54
+ },
55
+ mounted() {
56
+ console.warn('WornPagination组件已废弃,未来版本将剔除,请使用Pagination组件')
57
+ },
58
+ methods: {
59
+ pageChange(v) {
60
+ if (v.no !== this.page) {
61
+ this.$emit('update:page', v.no)
62
+ }
63
+ if (v.size !== this.size) {
64
+ this.$emit('update:pageSize', v.size)
65
+ // 为修复bug而写的bug
66
+ this.$nextTick(() => {
67
+ this.$emit('update:page', v.no)
68
+ })
69
+ }
70
+ }
71
+ }
72
+ }
73
+ </script>
@@ -0,0 +1,19 @@
1
+ const directive = {}
2
+
3
+ directive.install = (Vue) => {
4
+ Vue.directive('click-outside', {
5
+ bind: function (el, binding, node) {
6
+ el.clickOutsideEvent = function (event) {
7
+ if (!(el === event.target || el.contains(event.target))) {
8
+ node.context[binding.expression](event)
9
+ }
10
+ }
11
+ document.body.addEventListener('click', el.clickOutsideEvent)
12
+ },
13
+ unbind: function (el) {
14
+ document.body.removeEventListener('click', el.clickOutsideEvent)
15
+ }
16
+ })
17
+ }
18
+
19
+ export default directive
@@ -0,0 +1,72 @@
1
+ /**
2
+ * author: zhengwei
3
+ * tiem: 2021-8-31
4
+ * amend: 只注册到bind上,有问题;onXX会导致事件覆盖
5
+ */
6
+ // 封装全局弹窗拖拽指令 v-drag
7
+ function dialogMoveFn(_this) {
8
+ var dialogDom = _this.parentNode
9
+ dialogDom.style.top = parseFloat(dialogDom.style.top || '0') + _this.pageYc + 'px'
10
+ dialogDom.style.left = parseFloat(dialogDom.style.left || '0') + _this.pageXc + 'px'
11
+ }
12
+
13
+ const dialogMove = {
14
+ install: function(Vue) {
15
+ Vue.directive('drag', {
16
+ update(el, binding) {
17
+ if (el.style.display === 'none') {
18
+ var dialogDom = el.querySelector('.el-dialog')
19
+ if (dialogDom) {
20
+ dialogDom.style.left = ''
21
+ dialogDom.style.top = ''
22
+ }
23
+ }
24
+ Vue.nextTick(function() {
25
+ var dialogHeader = el.querySelector('.el-dialog__header')
26
+ if (dialogHeader && !dialogHeader._hasMoveDir) {
27
+ var _this, pvrPageX, pvrPageY
28
+ dialogHeader._hasMoveDir = true
29
+ dialogHeader.style.cursor = 'move'
30
+
31
+ dialogHeader.addEventListener('mousedown', function(evt) {
32
+ var ev = evt || event
33
+ this.pageXc = this.pageYc = 0
34
+ _this = this
35
+ pvrPageX = ev.pageX
36
+ pvrPageY = ev.pageY
37
+ document.addEventListener('mousemove', mousemoveThisMove)
38
+ document.addEventListener('mouseup', mouseupThisMove)
39
+ })
40
+
41
+ var mousemoveThisMove = function(evt) {
42
+ var ev = evt || event
43
+ ev.stopPropagation()
44
+ ev.preventDefault()
45
+ if (
46
+ ev.clientX >= 0 &&
47
+ ev.clientY >= 0 &&
48
+ ev.clientX <= document.documentElement.clientWidth &&
49
+ ev.clientY <= document.documentElement.clientHeight
50
+ ) {
51
+ _this.pageXc = ev.pageX - pvrPageX
52
+ _this.pageYc = ev.pageY - pvrPageY
53
+ if (_this.pageXc !== 0 || _this.pageYc !== 0) {
54
+ binding.value ? binding.value(_this, binding.arg) : dialogMoveFn(_this)
55
+ }
56
+ pvrPageX = ev.pageX
57
+ pvrPageY = ev.pageY
58
+ }
59
+ }
60
+
61
+ var mouseupThisMove = function() {
62
+ document.removeEventListener('mousemove', mousemoveThisMove)
63
+ document.removeEventListener('mouseup', mouseupThisMove)
64
+ }
65
+ }
66
+ })
67
+ }
68
+ })
69
+ }
70
+ }
71
+
72
+ export default dialogMove
@@ -0,0 +1,27 @@
1
+ import { getRela } from '../../utils/relaNo.js'
2
+
3
+ export function has(vals) {
4
+ let { relaNos } = getRela()
5
+ if (typeof vals === 'string') {
6
+ return relaNos.includes(vals)
7
+ } else if (Array.isArray(vals)) {
8
+ return vals.some((val) => relaNos.includes(val))
9
+ }
10
+ }
11
+
12
+ const directive = {}
13
+ directive.install = (Vue) => {
14
+ Vue.prototype.$has = has
15
+
16
+ Vue.filter('isHas', has)
17
+
18
+ Vue.filter('noHas', (v) => !has(v))
19
+
20
+ Vue.directive('has', {
21
+ inserted(el, binding) {
22
+ !has(binding.value) && el.parentNode.removeChild(el)
23
+ }
24
+ })
25
+ }
26
+
27
+ export default directive
@@ -0,0 +1,42 @@
1
+ const directive = {}
2
+
3
+ directive.install = (Vue) => {
4
+ Vue.directive('move', {
5
+ bind(el, binding) {
6
+ var _this, pvrPageX, pvrPageY
7
+ var mousemoveThisMove = function(evt) {
8
+ var ev = evt || event
9
+ ev.stopPropagation()
10
+ ev.preventDefault()
11
+ _this.pageXc = ev.pageX - pvrPageX
12
+ _this.pageYc = ev.pageY - pvrPageY
13
+ if (_this.pageXc !== 0 || _this.pageYc !== 0) {
14
+ binding.value(_this, binding.arg)
15
+ }
16
+ pvrPageX = ev.pageX
17
+ pvrPageY = ev.pageY
18
+ }
19
+ var mouseupThisMove = function() {
20
+ document.removeEventListener('mousemove', mousemoveThisMove)
21
+ document.removeEventListener('mouseup', mouseupThisMove)
22
+ }
23
+ el.addEventListener('mousedown', function(evt) {
24
+ var ev = evt || event
25
+ this.pageXc = this.pageYc = 0
26
+ _this = this
27
+ pvrPageX = ev.pageX
28
+ pvrPageY = ev.pageY
29
+ document.addEventListener('mousemove', mousemoveThisMove)
30
+ document.addEventListener('mouseup', mouseupThisMove)
31
+ })
32
+ }
33
+ /*update() {
34
+ console.log('被绑定元素所在的模板更新时调用,而不论绑定值是否变化。通过比较更新前后的绑定值,可以忽略不必要的模板更新')
35
+ },
36
+ unbind() {
37
+ console.log('只调用一次, 指令与元素解绑时调用')
38
+ }*/
39
+ })
40
+ }
41
+
42
+ export default directive
@@ -0,0 +1,56 @@
1
+ import Tooltip from './tooltip.vue'
2
+
3
+ function tipShow(el, tip) {
4
+ if (el.$tooltipTitle) {
5
+ if (!el.$tooltipTitleOverflow || el.clientWidth < el.scrollWidth) {
6
+ tip.title = el.$tooltipTitle
7
+ tip.$refs['title-pop'].referenceElm = el
8
+ tip.$refs['title-pop'].doDestroy()
9
+ tip.$nextTick(() => {
10
+ tip.visible = true
11
+ })
12
+ }
13
+ }
14
+ }
15
+ function tipHide(el, tip) {
16
+ tip.visible = false
17
+ }
18
+
19
+ const TitleDirective = {}
20
+ TitleDirective.install = (Vue) => {
21
+ if (Vue.prototype.$isServer) return
22
+
23
+ const tooltip = new (Vue.extend(Tooltip))({
24
+ el: document.createElement('div'),
25
+ data: {
26
+ title: '',
27
+ visible: false
28
+ }
29
+ })
30
+ document.querySelector('body').appendChild(tooltip.$el)
31
+
32
+ Vue.directive('title', {
33
+ bind: function (el, binding, vnode) {
34
+ if (vnode.data && vnode.data.attrs) {
35
+ el.$tooltipTitleOverflow = vnode.data.attrs['show-overflow-tooltip']
36
+ }
37
+ el.$tooltipTitle = binding.value
38
+ el.$tooltipShow = () => tipShow(el, tooltip)
39
+ el.$tooltipHide = () => tipHide(el, tooltip)
40
+ el.addEventListener('mouseenter', el.$tooltipShow)
41
+ el.addEventListener('mouseleave', el.$tooltipHide)
42
+ },
43
+ update: function (el, binding) {
44
+ if (binding.value !== binding.oldValue) {
45
+ el.$tooltipTitle = binding.value
46
+ }
47
+ },
48
+ unbind: function (el, binding) {
49
+ el.$tooltipHide()
50
+ el.removeEventListener('mouseenter', el.$tooltipShow)
51
+ el.removeEventListener('mouseleave', el.$tooltipHide)
52
+ }
53
+ })
54
+ }
55
+
56
+ export default TitleDirective
@@ -0,0 +1,21 @@
1
+ <template>
2
+ <el-popover
3
+ ref="title-pop"
4
+ v-model="visible"
5
+ trigger="manual"
6
+ popper-class="n20-title-pop"
7
+ placement="top"
8
+ >{{ title }}</el-popover
9
+ >
10
+ </template>
11
+
12
+ <script>
13
+ export default {
14
+ data() {
15
+ return {
16
+ title: '',
17
+ visible: false
18
+ }
19
+ }
20
+ }
21
+ </script>