n20-common-lib 1.2.19 → 1.2.22

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 (189) 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 +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 +128 -65
  29. package/src/assets/css/cl-secondary-tab.scss +53 -48
  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 -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 -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 +39 -39
  56. package/src/components/ApprovalRecord/index.vue +59 -59
  57. package/src/components/Button/button-group.vue +150 -150
  58. package/src/components/Button/icon-group-button.vue +61 -61
  59. package/src/components/Button/index.vue +56 -56
  60. package/src/components/CascaderArea/index.vue +103 -103
  61. package/src/components/ContentLoading/index.vue +41 -41
  62. package/src/components/ContentNull/index.vue +19 -19
  63. package/src/components/DatePicker/index.vue +27 -27
  64. package/src/components/DatePicker/por.vue +169 -169
  65. package/src/components/Dialog/index.vue +26 -26
  66. package/src/components/Dialog/indexO.vue +116 -116
  67. package/src/components/DragList/index.vue +75 -68
  68. package/src/components/Empty/img/abnormal.svg +108 -108
  69. package/src/components/Empty/img/dispose.svg +71 -71
  70. package/src/components/Empty/img/empty.svg +57 -57
  71. package/src/components/Empty/img/general.svg +58 -58
  72. package/src/components/Empty/img/lock.svg +57 -57
  73. package/src/components/Empty/img/network.svg +59 -59
  74. package/src/components/Empty/img/relevant.svg +68 -68
  75. package/src/components/Empty/img/search.svg +72 -72
  76. package/src/components/Empty/index.vue +92 -92
  77. package/src/components/Expandable/index.vue +49 -49
  78. package/src/components/Expandable/main.vue +52 -52
  79. package/src/components/FileExportAsync/index.vue +178 -178
  80. package/src/components/FileUploadTable/index.vue +484 -484
  81. package/src/components/Filters/index.vue +371 -369
  82. package/src/components/Filters/indexO.vue +104 -104
  83. package/src/components/FlowStep/index.vue +68 -68
  84. package/src/components/FooterBox/index.vue +21 -21
  85. package/src/components/GeneralCard/index.vue +15 -15
  86. package/src/components/InputNumber/index.vue +169 -169
  87. package/src/components/InputNumber/numberRange.vue +47 -47
  88. package/src/components/InputSearch/index.vue +75 -75
  89. package/src/components/Layout/AsideNav/index.vue +119 -119
  90. package/src/components/Layout/AsideNav/menuItem.vue +34 -34
  91. package/src/components/Layout/AsideNav/submenuTitle.vue +26 -26
  92. package/src/components/Layout/HeaderWrap/changePwd.vue +215 -215
  93. package/src/components/Layout/HeaderWrap/index.vue +348 -348
  94. package/src/components/Layout/HeaderWrap/noticePop.vue +300 -300
  95. package/src/components/Layout/SubContent/index.vue +131 -131
  96. package/src/components/Layout/TabsNav/index.vue +170 -170
  97. package/src/components/Layout/index.vue +529 -529
  98. package/src/components/Layout/utils.js +12 -12
  99. package/src/components/LoginTemporary/form.vue +1 -5
  100. package/src/components/LoginTemporary/index.vue +15 -2
  101. package/src/components/LoginTemporary/retrievePw.vue +360 -13
  102. package/src/components/MicroApp/index.js +67 -67
  103. package/src/components/MicroFrame/index.vue +95 -95
  104. package/src/components/MoreTab/index.vue +232 -232
  105. package/src/components/NavMenu/index.vue +60 -60
  106. package/src/components/NstcG6Components/NstcDialog/NstcDialog.vue +184 -184
  107. package/src/components/PageLayout/page.vue +15 -15
  108. package/src/components/Pagination/index.vue +165 -96
  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 +208 -204
  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 -179
  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 -53
  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 +229 -225
  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/InfosecNetSignCNGAgent.min.js +1795 -0
  168. package/src/utils/auth.js +53 -53
  169. package/src/utils/axios.js +203 -203
  170. package/src/utils/downloadBlob.js +19 -19
  171. package/src/utils/forEachs.js +16 -16
  172. package/src/utils/getScrollContainer.js +43 -43
  173. package/src/utils/i18n/cn2hk.json +1270 -1270
  174. package/src/utils/i18n/index.js +50 -54
  175. package/src/utils/list2tree.js +36 -36
  176. package/src/utils/msgboxPor.js +26 -26
  177. package/src/utils/print.js +161 -161
  178. package/src/utils/relaNo.js +76 -76
  179. package/src/utils/repairElementUI.js +66 -66
  180. package/src/utils/sign.js +85 -0
  181. package/src/utils/urlToGo.js +82 -82
  182. package/style/index.css +1 -1
  183. package/style/index.css.map +1 -1
  184. package/style/css/normalize.scss +0 -726
  185. package/style/pageDemo/demo-1.vue +0 -131
  186. package/style/pageDemo/demo-2.vue +0 -35
  187. package/style/pageDemo/demo-3.vue +0 -22
  188. package/style/pageDemo/seeCode.js +0 -20
  189. package/style/server-config.jsonc +0 -606
@@ -1,369 +1,371 @@
1
- <template>
2
- <el-popover
3
- v-model="showPop"
4
- trigger="manual"
5
- :width="width"
6
- title="筛选"
7
- placement="bottom-end"
8
- @show="showPopC = true"
9
- @after-leave="
10
- showPopC = false
11
- showMore = false
12
- "
13
- >
14
- <template slot="reference">
15
- <el-button
16
- icon="n20-icon-iconfontshaixuan"
17
- plain
18
- onlyicon
19
- size="mini"
20
- @click="clickBtn"
21
- />
22
- </template>
23
-
24
- <el-form
25
- v-if="showPopC"
26
- v-click-outside="clickOut"
27
- class="n20-filter p-a-s p-b-0"
28
- :label-width="labelWidth"
29
- @submit.native.prevent
30
- >
31
- <el-form-item
32
- v-for="(item, i) in minList"
33
- :key="i"
34
- class="m-b"
35
- :label="item.label"
36
- >
37
- <slot v-if="item.slotName" :name="item.slotName"></slot>
38
- <el-input
39
- v-else-if="item.type === 'text' || item.type === undefined"
40
- v-model="form[item.value]"
41
- :clearable="item | clearableF"
42
- style="width: 100%"
43
- v-bind="item.props"
44
- v-on="item.on"
45
- />
46
- <el-select
47
- v-else-if="item.type === 'select'"
48
- v-model="form[item.value]"
49
- :clearable="item | clearableF"
50
- :multiple="item.multiple"
51
- style="width: 100%"
52
- v-bind="item.props"
53
- v-on="item.on"
54
- >
55
- <template
56
- v-if="item.props && item.props.labelKey && item.props.valueKey"
57
- >
58
- <el-option
59
- v-for="(c, i) in item.options"
60
- :key="i"
61
- :label="c[item.props.labelKey]"
62
- :value="c[item.props.valueKey]"
63
- :disabled="c.disabled"
64
- />
65
- </template>
66
- <template v-else>
67
- <el-option
68
- v-for="c in item.options"
69
- :key="c.value + '_' + c.label"
70
- :label="c.label"
71
- :value="c.value"
72
- :disabled="c.disabled"
73
- />
74
- </template>
75
- </el-select>
76
- <inputNumber
77
- v-else-if="item.type === 'number'"
78
- v-model="form[item.value]"
79
- style="width: 100%"
80
- v-bind="item.props"
81
- v-on="item.on"
82
- />
83
- <inputNumberRange
84
- v-else-if="item.type === 'numberrange'"
85
- :start-value.sync="form[item.startValue]"
86
- :end-value.sync="form[item.endValue]"
87
- style="width: 100%"
88
- v-bind="item.props"
89
- v-on="item.on"
90
- />
91
- <datePickerPor
92
- v-else-if="item.type === 'date'"
93
- v-model="form[item.value]"
94
- type="date"
95
- :clearable="item | clearableF"
96
- style="width: 100%"
97
- v-bind="item.props"
98
- v-on="item.on"
99
- />
100
- <datePickerPor
101
- v-else-if="item.type === 'daterange'"
102
- type="daterange"
103
- :start-date.sync="form[item.startDate]"
104
- :end-date.sync="form[item.endDate]"
105
- :clearable="item | clearableF"
106
- style="width: 100%"
107
- v-bind="item.props"
108
- v-on="item.on"
109
- />
110
- <el-checkbox-group
111
- v-else-if="item.type === 'checkbox'"
112
- v-model="form[item.value]"
113
- v-bind="item.props"
114
- v-on="item.on"
115
- >
116
- <el-checkbox
117
- v-for="c in item.options"
118
- :key="c.value"
119
- :label="c.value"
120
- :disabled="c.disabled"
121
- >{{ c.label }}</el-checkbox
122
- >
123
- </el-checkbox-group>
124
- <el-radio-group
125
- v-else-if="item.type === 'radio'"
126
- v-model="form[item.value]"
127
- v-bind="item.props"
128
- v-on="item.on"
129
- >
130
- <el-radio
131
- v-for="c in item.options"
132
- :key="c.value"
133
- :label="c.value"
134
- :disabled="c.disabled"
135
- >{{ c.label }}</el-radio
136
- >
137
- </el-radio-group>
138
- </el-form-item>
139
- <template v-if="filterList.length > defaultShow">
140
- <div :style="{ paddingLeft: labelWidth }">
141
- <el-button
142
- class="p-t-0 m-b-s color-primary"
143
- type="text"
144
- @click="showMore = !showMore"
145
- ><span>更多条件</span
146
- ><i
147
- :class="showMore ? 'el-icon-arrow-up' : 'el-icon-arrow-down'"
148
- ></i
149
- ></el-button>
150
- </div>
151
- <el-collapse-transition>
152
- <div v-if="showMore">
153
- <el-form-item
154
- v-for="(item, i) in moreList"
155
- :key="i"
156
- :label="item.label"
157
- >
158
- <slot v-if="item.slotName" :name="item.slotName"></slot>
159
- <el-input
160
- v-else-if="item.type === 'text' || item.type === undefined"
161
- v-model="form[item.value]"
162
- :clearable="item | clearableF"
163
- style="width: 100%"
164
- v-bind="item.props"
165
- v-on="item.on"
166
- />
167
- <el-select
168
- v-else-if="item.type === 'select'"
169
- v-model="form[item.value]"
170
- :clearable="item | clearableF"
171
- :multiple="item.multiple"
172
- style="width: 100%"
173
- v-bind="item.props"
174
- v-on="item.on"
175
- >
176
- <template
177
- v-if="
178
- item.props && item.props.labelKey && item.props.valueKey
179
- "
180
- >
181
- <el-option
182
- v-for="(c, i) in item.options"
183
- :key="i"
184
- :label="c[item.props.labelKey]"
185
- :value="c[item.props.valueKey]"
186
- :disabled="c.disabled"
187
- />
188
- </template>
189
- <template v-else>
190
- <el-option
191
- v-for="c in item.options"
192
- :key="c.value + '_' + c.label"
193
- :label="c.label"
194
- :value="c.value"
195
- :disabled="c.disabled"
196
- />
197
- </template>
198
- </el-select>
199
- <inputNumber
200
- v-else-if="item.type === 'number'"
201
- v-model="form[item.value]"
202
- style="width: 100%"
203
- v-bind="item.props"
204
- v-on="item.on"
205
- />
206
- <inputNumberRange
207
- v-else-if="item.type === 'numberrange'"
208
- :start-value.sync="form[item.startValue]"
209
- :end-value.sync="form[item.endValue]"
210
- style="width: 100%"
211
- v-bind="item.props"
212
- v-on="item.on"
213
- />
214
- <datePickerPor
215
- v-else-if="item.type === 'date'"
216
- v-model="form[item.value]"
217
- type="date"
218
- :clearable="item | clearableF"
219
- style="width: 100%"
220
- v-bind="item.props"
221
- v-on="item.on"
222
- />
223
- <datePickerPor
224
- v-else-if="item.type === 'daterange'"
225
- type="daterange"
226
- :start-date.sync="form[item.startDate]"
227
- :end-date.sync="form[item.endDate]"
228
- :clearable="item | clearableF"
229
- style="width: 100%"
230
- v-bind="item.props"
231
- v-on="item.on"
232
- />
233
- <el-checkbox-group
234
- v-else-if="item.type === 'checkbox'"
235
- v-model="form[item.value]"
236
- v-bind="item.props"
237
- v-on="item.on"
238
- >
239
- <el-checkbox
240
- v-for="c in item.options"
241
- :key="c.value"
242
- :label="c.value"
243
- :disabled="c.disabled"
244
- >{{ c.label }}</el-checkbox
245
- >
246
- </el-checkbox-group>
247
- <el-radio-group
248
- v-else-if="item.type === 'radio'"
249
- v-model="form[item.value]"
250
- v-bind="item.props"
251
- v-on="item.on"
252
- >
253
- <el-radio
254
- v-for="c in item.options"
255
- :key="c.value"
256
- :label="c.value"
257
- :disabled="c.disabled"
258
- >{{ c.label }}</el-radio
259
- >
260
- </el-radio-group>
261
- </el-form-item>
262
- </div>
263
- </el-collapse-transition>
264
- </template>
265
- <footerBox class="text-c">
266
- <el-button type="primary" @click="filter">筛选</el-button>
267
- <el-button plain @click="clear">重置</el-button>
268
- </footerBox>
269
- </el-form>
270
- </el-popover>
271
- </template>
272
-
273
- <script>
274
- import inputNumber from '../InputNumber/index.vue'
275
- import inputNumberRange from '../InputNumber/numberRange.vue'
276
- import datePickerPor from '../DatePicker/por.vue'
277
- import footerBox from '../FooterBox/index.vue'
278
- export default {
279
- name: 'Filters',
280
- components: {
281
- inputNumber,
282
- inputNumberRange,
283
- datePickerPor,
284
- footerBox
285
- },
286
- filters: {
287
- clearableF(item) {
288
- if (item.props && item.props.clearable === false) {
289
- return false
290
- } else {
291
- return true
292
- }
293
- }
294
- },
295
- props: {
296
- width: {
297
- type: Number,
298
- default: 310
299
- },
300
- defaultShow: {
301
- type: Number,
302
- default: 5
303
- },
304
- filterList: {
305
- type: Array,
306
- default: () => []
307
- },
308
- form: {
309
- type: Object,
310
- default: () => ({})
311
- },
312
- labelWidth: {
313
- type: [String, Number],
314
- default: '5em'
315
- }
316
- },
317
- data() {
318
- return {
319
- showPop: false,
320
- showPopC: false,
321
- showMore: false
322
- }
323
- },
324
- computed: {
325
- minList() {
326
- return this.filterList.slice(0, this.defaultShow)
327
- },
328
- moreList() {
329
- return this.filterList.slice(this.defaultShow)
330
- }
331
- },
332
- methods: {
333
- clear() {
334
- this.$emit('clear')
335
- },
336
- filter() {
337
- this.$emit('filter')
338
- this.$nextTick(() => {
339
- this.showPop = false
340
- })
341
- },
342
- clickBtn() {
343
- if (!this.showPop) {
344
- setTimeout(() => {
345
- this.showPop = true
346
- }, 60)
347
- }
348
- },
349
- clickOut() {
350
- let elPoppers = []
351
- document
352
- .querySelectorAll('.el-popper,.el-dialog__wrapper')
353
- .forEach((e) => {
354
- e.style.display !== 'none' && elPoppers.push(e)
355
- })
356
-
357
- if (elPoppers.length <= 1) {
358
- this.showPop = false
359
- }
360
- },
361
- setOptions(key, opts) {
362
- let item = this.filterList.find((f) => f.value === key)
363
- if (item) {
364
- item.options = opts || []
365
- }
366
- }
367
- }
368
- }
369
- </script>
1
+ <template>
2
+ <el-popover
3
+ v-model="showPop"
4
+ trigger="manual"
5
+ :width="width"
6
+ title="筛选"
7
+ placement="bottom-end"
8
+ @show="showPopC = true"
9
+ @after-leave="
10
+ () => {
11
+ showPopC = false
12
+ showMore = false
13
+ }
14
+ "
15
+ >
16
+ <template slot="reference">
17
+ <el-button
18
+ icon="n20-icon-iconfontshaixuan"
19
+ plain
20
+ onlyicon
21
+ size="mini"
22
+ @click="clickBtn"
23
+ />
24
+ </template>
25
+
26
+ <el-form
27
+ v-if="showPopC"
28
+ v-click-outside="clickOut"
29
+ class="n20-filter p-a-s p-b-0"
30
+ :label-width="labelWidth"
31
+ @submit.native.prevent
32
+ >
33
+ <el-form-item
34
+ v-for="(item, i) in minList"
35
+ :key="i"
36
+ class="m-b"
37
+ :label="item.label"
38
+ >
39
+ <slot v-if="item.slotName" :name="item.slotName"></slot>
40
+ <el-input
41
+ v-else-if="item.type === 'text' || item.type === undefined"
42
+ v-model="form[item.value]"
43
+ :clearable="item | clearableF"
44
+ style="width: 100%"
45
+ v-bind="item.props"
46
+ v-on="item.on"
47
+ />
48
+ <el-select
49
+ v-else-if="item.type === 'select'"
50
+ v-model="form[item.value]"
51
+ :clearable="item | clearableF"
52
+ :multiple="item.multiple"
53
+ style="width: 100%"
54
+ v-bind="item.props"
55
+ v-on="item.on"
56
+ >
57
+ <template
58
+ v-if="item.props && item.props.labelKey && item.props.valueKey"
59
+ >
60
+ <el-option
61
+ v-for="(c, i) in item.options"
62
+ :key="i"
63
+ :label="c[item.props.labelKey]"
64
+ :value="c[item.props.valueKey]"
65
+ :disabled="c.disabled"
66
+ />
67
+ </template>
68
+ <template v-else>
69
+ <el-option
70
+ v-for="c in item.options"
71
+ :key="c.value + '_' + c.label"
72
+ :label="c.label"
73
+ :value="c.value"
74
+ :disabled="c.disabled"
75
+ />
76
+ </template>
77
+ </el-select>
78
+ <inputNumber
79
+ v-else-if="item.type === 'number'"
80
+ v-model="form[item.value]"
81
+ style="width: 100%"
82
+ v-bind="item.props"
83
+ v-on="item.on"
84
+ />
85
+ <inputNumberRange
86
+ v-else-if="item.type === 'numberrange'"
87
+ :start-value.sync="form[item.startValue]"
88
+ :end-value.sync="form[item.endValue]"
89
+ style="width: 100%"
90
+ v-bind="item.props"
91
+ v-on="item.on"
92
+ />
93
+ <datePickerPor
94
+ v-else-if="item.type === 'date'"
95
+ v-model="form[item.value]"
96
+ type="date"
97
+ :clearable="item | clearableF"
98
+ style="width: 100%"
99
+ v-bind="item.props"
100
+ v-on="item.on"
101
+ />
102
+ <datePickerPor
103
+ v-else-if="item.type === 'daterange'"
104
+ type="daterange"
105
+ :start-date.sync="form[item.startDate]"
106
+ :end-date.sync="form[item.endDate]"
107
+ :clearable="item | clearableF"
108
+ style="width: 100%"
109
+ v-bind="item.props"
110
+ v-on="item.on"
111
+ />
112
+ <el-checkbox-group
113
+ v-else-if="item.type === 'checkbox'"
114
+ v-model="form[item.value]"
115
+ v-bind="item.props"
116
+ v-on="item.on"
117
+ >
118
+ <el-checkbox
119
+ v-for="c in item.options"
120
+ :key="c.value"
121
+ :label="c.value"
122
+ :disabled="c.disabled"
123
+ >{{ c.label }}</el-checkbox
124
+ >
125
+ </el-checkbox-group>
126
+ <el-radio-group
127
+ v-else-if="item.type === 'radio'"
128
+ v-model="form[item.value]"
129
+ v-bind="item.props"
130
+ v-on="item.on"
131
+ >
132
+ <el-radio
133
+ v-for="c in item.options"
134
+ :key="c.value"
135
+ :label="c.value"
136
+ :disabled="c.disabled"
137
+ >{{ c.label }}</el-radio
138
+ >
139
+ </el-radio-group>
140
+ </el-form-item>
141
+ <template v-if="filterList.length > defaultShow">
142
+ <div :style="{ paddingLeft: labelWidth }">
143
+ <el-button
144
+ class="p-t-0 m-b-s color-primary"
145
+ type="text"
146
+ @click="showMore = !showMore"
147
+ ><span>更多条件</span
148
+ ><i
149
+ :class="showMore ? 'el-icon-arrow-up' : 'el-icon-arrow-down'"
150
+ ></i
151
+ ></el-button>
152
+ </div>
153
+ <el-collapse-transition>
154
+ <div v-if="showMore">
155
+ <el-form-item
156
+ v-for="(item, i) in moreList"
157
+ :key="i"
158
+ :label="item.label"
159
+ >
160
+ <slot v-if="item.slotName" :name="item.slotName"></slot>
161
+ <el-input
162
+ v-else-if="item.type === 'text' || item.type === undefined"
163
+ v-model="form[item.value]"
164
+ :clearable="item | clearableF"
165
+ style="width: 100%"
166
+ v-bind="item.props"
167
+ v-on="item.on"
168
+ />
169
+ <el-select
170
+ v-else-if="item.type === 'select'"
171
+ v-model="form[item.value]"
172
+ :clearable="item | clearableF"
173
+ :multiple="item.multiple"
174
+ style="width: 100%"
175
+ v-bind="item.props"
176
+ v-on="item.on"
177
+ >
178
+ <template
179
+ v-if="
180
+ item.props && item.props.labelKey && item.props.valueKey
181
+ "
182
+ >
183
+ <el-option
184
+ v-for="(c, i) in item.options"
185
+ :key="i"
186
+ :label="c[item.props.labelKey]"
187
+ :value="c[item.props.valueKey]"
188
+ :disabled="c.disabled"
189
+ />
190
+ </template>
191
+ <template v-else>
192
+ <el-option
193
+ v-for="c in item.options"
194
+ :key="c.value + '_' + c.label"
195
+ :label="c.label"
196
+ :value="c.value"
197
+ :disabled="c.disabled"
198
+ />
199
+ </template>
200
+ </el-select>
201
+ <inputNumber
202
+ v-else-if="item.type === 'number'"
203
+ v-model="form[item.value]"
204
+ style="width: 100%"
205
+ v-bind="item.props"
206
+ v-on="item.on"
207
+ />
208
+ <inputNumberRange
209
+ v-else-if="item.type === 'numberrange'"
210
+ :start-value.sync="form[item.startValue]"
211
+ :end-value.sync="form[item.endValue]"
212
+ style="width: 100%"
213
+ v-bind="item.props"
214
+ v-on="item.on"
215
+ />
216
+ <datePickerPor
217
+ v-else-if="item.type === 'date'"
218
+ v-model="form[item.value]"
219
+ type="date"
220
+ :clearable="item | clearableF"
221
+ style="width: 100%"
222
+ v-bind="item.props"
223
+ v-on="item.on"
224
+ />
225
+ <datePickerPor
226
+ v-else-if="item.type === 'daterange'"
227
+ type="daterange"
228
+ :start-date.sync="form[item.startDate]"
229
+ :end-date.sync="form[item.endDate]"
230
+ :clearable="item | clearableF"
231
+ style="width: 100%"
232
+ v-bind="item.props"
233
+ v-on="item.on"
234
+ />
235
+ <el-checkbox-group
236
+ v-else-if="item.type === 'checkbox'"
237
+ v-model="form[item.value]"
238
+ v-bind="item.props"
239
+ v-on="item.on"
240
+ >
241
+ <el-checkbox
242
+ v-for="c in item.options"
243
+ :key="c.value"
244
+ :label="c.value"
245
+ :disabled="c.disabled"
246
+ >{{ c.label }}</el-checkbox
247
+ >
248
+ </el-checkbox-group>
249
+ <el-radio-group
250
+ v-else-if="item.type === 'radio'"
251
+ v-model="form[item.value]"
252
+ v-bind="item.props"
253
+ v-on="item.on"
254
+ >
255
+ <el-radio
256
+ v-for="c in item.options"
257
+ :key="c.value"
258
+ :label="c.value"
259
+ :disabled="c.disabled"
260
+ >{{ c.label }}</el-radio
261
+ >
262
+ </el-radio-group>
263
+ </el-form-item>
264
+ </div>
265
+ </el-collapse-transition>
266
+ </template>
267
+ <footerBox class="text-c">
268
+ <el-button type="primary" @click="filter">筛选</el-button>
269
+ <el-button plain @click="clear">重置</el-button>
270
+ </footerBox>
271
+ </el-form>
272
+ </el-popover>
273
+ </template>
274
+
275
+ <script>
276
+ import inputNumber from '../InputNumber/index.vue'
277
+ import inputNumberRange from '../InputNumber/numberRange.vue'
278
+ import datePickerPor from '../DatePicker/por.vue'
279
+ import footerBox from '../FooterBox/index.vue'
280
+ export default {
281
+ name: 'Filters',
282
+ components: {
283
+ inputNumber,
284
+ inputNumberRange,
285
+ datePickerPor,
286
+ footerBox
287
+ },
288
+ filters: {
289
+ clearableF(item) {
290
+ if (item.props && item.props.clearable === false) {
291
+ return false
292
+ } else {
293
+ return true
294
+ }
295
+ }
296
+ },
297
+ props: {
298
+ width: {
299
+ type: Number,
300
+ default: 310
301
+ },
302
+ defaultShow: {
303
+ type: Number,
304
+ default: 5
305
+ },
306
+ filterList: {
307
+ type: Array,
308
+ default: () => []
309
+ },
310
+ form: {
311
+ type: Object,
312
+ default: () => ({})
313
+ },
314
+ labelWidth: {
315
+ type: [String, Number],
316
+ default: '5em'
317
+ }
318
+ },
319
+ data() {
320
+ return {
321
+ showPop: false,
322
+ showPopC: false,
323
+ showMore: false
324
+ }
325
+ },
326
+ computed: {
327
+ minList() {
328
+ return this.filterList.slice(0, this.defaultShow)
329
+ },
330
+ moreList() {
331
+ return this.filterList.slice(this.defaultShow)
332
+ }
333
+ },
334
+ methods: {
335
+ clear() {
336
+ this.$emit('clear')
337
+ },
338
+ filter() {
339
+ this.$emit('filter')
340
+ this.$nextTick(() => {
341
+ this.showPop = false
342
+ })
343
+ },
344
+ clickBtn() {
345
+ if (!this.showPop) {
346
+ setTimeout(() => {
347
+ this.showPop = true
348
+ }, 60)
349
+ }
350
+ },
351
+ clickOut() {
352
+ let elPoppers = []
353
+ document
354
+ .querySelectorAll('.el-popper,.el-dialog__wrapper')
355
+ .forEach((e) => {
356
+ e.style.display !== 'none' && elPoppers.push(e)
357
+ })
358
+
359
+ if (elPoppers.length <= 1) {
360
+ this.showPop = false
361
+ }
362
+ },
363
+ setOptions(key, opts) {
364
+ let item = this.filterList.find((f) => f.value === key)
365
+ if (item) {
366
+ item.options = opts || []
367
+ }
368
+ }
369
+ }
370
+ }
371
+ </script>