n20-common-lib 1.2.2 → 1.2.5

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