@aochuang/common 1.0.0 → 1.0.1

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 (194) hide show
  1. package/common/loading/index.js +7 -0
  2. package/common/loading/loading.vue +71 -0
  3. package/common/tips/index.js +7 -0
  4. package/common/tips/tips.vue +82 -0
  5. package/common/tooltip/index.js +7 -0
  6. package/common/tooltip/popper.js +18 -0
  7. package/common/tooltip/tooltip.vue +55 -0
  8. package/components/advanced-filter/advanced-filter-condition-item/advanced-filter-condition-item-boolean.vue +33 -0
  9. package/components/advanced-filter/advanced-filter-condition-item/advanced-filter-condition-item-date-range.vue +30 -0
  10. package/components/advanced-filter/advanced-filter-condition-item/advanced-filter-condition-item-date.vue +41 -0
  11. package/components/advanced-filter/advanced-filter-condition-item/advanced-filter-condition-item-datetime-range.vue +34 -0
  12. package/components/advanced-filter/advanced-filter-condition-item/advanced-filter-condition-item-datetime.vue +41 -0
  13. package/components/advanced-filter/advanced-filter-condition-item/advanced-filter-condition-item-number-range.vue +67 -0
  14. package/components/advanced-filter/advanced-filter-condition-item/advanced-filter-condition-item-number.vue +35 -0
  15. package/components/advanced-filter/advanced-filter-condition-item/advanced-filter-condition-item-string.vue +41 -0
  16. package/components/advanced-filter/advanced-filter-condition-item/advanced-filter-condition-item-value.vue +73 -0
  17. package/components/advanced-filter/advanced-filter-condition-item/advanced-filter-condition-item.vue +226 -0
  18. package/components/advanced-filter/advanced-filter-condition-toggle.vue +112 -0
  19. package/components/advanced-filter/advanced-filter-condition.vue +352 -0
  20. package/components/advanced-filter/advanced-filter-permanent-item.vue +10 -0
  21. package/components/advanced-filter/advanced-filter-permanent.vue +10 -0
  22. package/components/advanced-filter/advanced-filter-scene-form.vue +95 -0
  23. package/components/advanced-filter/advanced-filter-scene-item.vue +64 -0
  24. package/components/advanced-filter/advanced-filter-scene-manage.vue +264 -0
  25. package/components/advanced-filter/advanced-filter-scene-transfer.vue +283 -0
  26. package/components/advanced-filter/advanced-filter-scene.vue +199 -0
  27. package/components/advanced-filter/advanced-filter.vue +114 -0
  28. package/components/advanced-filter/index.js +36 -0
  29. package/components/advanced-filter/utils.js +132 -0
  30. package/components/autocomplete/autocomplete.vue +121 -0
  31. package/components/autocomplete/index.js +7 -0
  32. package/components/avatar/avatar.png +0 -0
  33. package/components/avatar/avatar.vue +212 -0
  34. package/components/avatar/index.js +7 -0
  35. package/components/brick-wall/brick-wall-skeleton.vue +125 -0
  36. package/components/brick-wall/brick-wall.vue +293 -0
  37. package/components/brick-wall/index.js +7 -0
  38. package/components/button/button.vue +537 -0
  39. package/components/button/index.js +7 -0
  40. package/components/button/utils.js +20 -0
  41. package/components/cascader/cascader.vue +184 -0
  42. package/components/cascader/index.js +7 -0
  43. package/components/cascader/util.js +50 -0
  44. package/components/checkbox/checkbox.vue +114 -0
  45. package/components/checkbox/index.js +7 -0
  46. package/components/checkbox-button/index.js +8 -0
  47. package/components/checkbox-group/checkbox-group.vue +11 -0
  48. package/components/checkbox-group/index.js +7 -0
  49. package/components/date-picker/date-picker.vue +300 -0
  50. package/components/date-picker/index.js +7 -0
  51. package/components/dialog/dialog.vue +182 -0
  52. package/components/dialog/index.js +14 -0
  53. package/components/dialog/utils.js +20 -0
  54. package/components/drawer/drawer.vue +186 -0
  55. package/components/drawer/index.js +14 -0
  56. package/components/drawer/utils.js +36 -0
  57. package/components/dropdown/dropdown-item.vue +63 -0
  58. package/components/dropdown/dropdown.vue +286 -0
  59. package/components/dropdown/index.js +16 -0
  60. package/components/empty/empty.vue +62 -0
  61. package/components/empty/index.js +7 -0
  62. package/components/filter/filter-group.vue +44 -0
  63. package/components/filter/filter-item.vue +122 -0
  64. package/components/filter/filter-more.vue +114 -0
  65. package/components/filter/filter.vue +407 -0
  66. package/components/filter/index.js +20 -0
  67. package/components/filter/refresh-line.svg +1 -0
  68. package/components/filter/util.js +5 -0
  69. package/components/form/form-cell.vue +231 -0
  70. package/components/form/form-group.vue +147 -0
  71. package/components/form/form-row.vue +51 -0
  72. package/components/form/form.vue +256 -0
  73. package/components/form/index.js +13 -0
  74. package/components/grid/grid-card-view/grid-card-view.vue +157 -0
  75. package/components/grid/grid-column.vue +136 -0
  76. package/components/grid/grid-filter/grid-filter-group.vue +41 -0
  77. package/components/grid/grid-filter/grid-filter-item.vue +68 -0
  78. package/components/grid/grid-filter/grid-filter.vue +115 -0
  79. package/components/grid/grid-filter/util.js +7 -0
  80. package/components/grid/grid-filter-operate/grid-filter-operate-item.vue +55 -0
  81. package/components/grid/grid-filter-operate/grid-filter-operate.vue +46 -0
  82. package/components/grid/grid-sort/grid-sort-proxy.js +27 -0
  83. package/components/grid/grid-sort/grid-sort.vue +205 -0
  84. package/components/grid/grid-sort/icons/asc.png +0 -0
  85. package/components/grid/grid-sort/icons/desc.png +0 -0
  86. package/components/grid/grid-sort/index.js +7 -0
  87. package/components/grid/grid-table-view/grid-table-view.vue +178 -0
  88. package/components/grid/grid-table.vue +547 -0
  89. package/components/grid/grid-toolbar/grid-batch-toolbar-proxy.js +21 -0
  90. package/components/grid/grid-toolbar/grid-batch-toolbar.vue +129 -0
  91. package/components/grid/grid-toolbar/grid-global-toolbar-proxy.js +21 -0
  92. package/components/grid/grid-toolbar/grid-global-toolbar.vue +37 -0
  93. package/components/grid/grid-toolbar/grid-more-toolbar-proxy.js +21 -0
  94. package/components/grid/grid-toolbar/grid-more-toolbar.vue +138 -0
  95. package/components/grid/grid-toolbar/grid-row-toolbar.vue +279 -0
  96. package/components/grid/grid-view-select.vue +78 -0
  97. package/components/grid/grid.vue +1102 -0
  98. package/components/grid/icons/more-line.svg +1 -0
  99. package/components/grid/icons/refresh.svg +14 -0
  100. package/components/grid/index.js +61 -0
  101. package/components/grid/util.js +31 -0
  102. package/components/icon/demo.css +539 -0
  103. package/components/icon/demo_index.html +7433 -0
  104. package/components/icon/icon.vue +96 -0
  105. package/components/icon/iconfont.css +1275 -0
  106. package/components/icon/iconfont.eot +0 -0
  107. package/components/icon/iconfont.js +1 -0
  108. package/components/icon/iconfont.json +2214 -0
  109. package/components/icon/iconfont.svg +455 -0
  110. package/components/icon/iconfont.ttf +0 -0
  111. package/components/icon/iconfont.woff +0 -0
  112. package/components/icon/iconfont.woff2 +0 -0
  113. package/components/icon/index.js +7 -0
  114. package/components/image/image.vue +299 -0
  115. package/components/image/index.js +12 -0
  116. package/components/image/util.js +26 -0
  117. package/components/index.js +153 -0
  118. package/components/loading/index.js +7 -0
  119. package/components/loading/loading.vue +130 -0
  120. package/components/menu/index.js +14 -0
  121. package/components/menu/menu-group.vue +240 -0
  122. package/components/menu/menu-item.vue +215 -0
  123. package/components/menu/menu.vue +64 -0
  124. package/components/message/index.js +19 -0
  125. package/components/message/message.js +28 -0
  126. package/components/message/message.less +6 -0
  127. package/components/message-box/index.js +10 -0
  128. package/components/message-box/message-box.js +140 -0
  129. package/components/message-box/message-box.less +5 -0
  130. package/components/pagination/index.js +7 -0
  131. package/components/pagination/pagination.vue +193 -0
  132. package/components/panel/index.js +7 -0
  133. package/components/panel/panel.vue +44 -0
  134. package/components/popover/index.js +7 -0
  135. package/components/popover/popover.vue +140 -0
  136. package/components/popup-select/index.js +7 -0
  137. package/components/popup-select/popup-select.vue +114 -0
  138. package/components/radio/index.js +7 -0
  139. package/components/radio/radio.vue +92 -0
  140. package/components/radio-button/index.js +7 -0
  141. package/components/radio-button/radio-button.vue +20 -0
  142. package/components/radio-group/index.js +7 -0
  143. package/components/radio-group/radio-group.vue +22 -0
  144. package/components/searchbox/index.js +7 -0
  145. package/components/searchbox/searchbox.vue +260 -0
  146. package/components/select/index.js +9 -0
  147. package/components/select/select-load-more.vue +53 -0
  148. package/components/select/select.vue +572 -0
  149. package/components/skeleton/index.js +14 -0
  150. package/components/skeleton/skeleton-rows.vue +52 -0
  151. package/components/skeleton/skeleton.vue +72 -0
  152. package/components/sortable/index.js +9 -0
  153. package/components/sortable/sortable-item.vue +77 -0
  154. package/components/sortable/sortable.vue +62 -0
  155. package/components/spinner/index.js +7 -0
  156. package/components/spinner/spinner.vue +121 -0
  157. package/components/spinner-range/index.js +7 -0
  158. package/components/spinner-range/spinner-range.vue +97 -0
  159. package/components/spinner-textarea/index.js +7 -0
  160. package/components/spinner-textarea/spinner-textarea.vue +65 -0
  161. package/components/switch/index.js +7 -0
  162. package/components/switch/switch.vue +105 -0
  163. package/components/tabs/index.js +10 -0
  164. package/components/tabs/tabs.vue +115 -0
  165. package/components/tag/index.js +9 -0
  166. package/components/tag/tag.less +30 -0
  167. package/components/text/index.js +7 -0
  168. package/components/text/text.vue +69 -0
  169. package/components/textarea/index.js +7 -0
  170. package/components/textarea/textarea.vue +229 -0
  171. package/components/textbox/index.js +7 -0
  172. package/components/textbox/textbox.vue +275 -0
  173. package/components/time-picker/index.js +7 -0
  174. package/components/time-picker/time-picker.vue +77 -0
  175. package/components/toolbar/index.js +14 -0
  176. package/components/toolbar/toolbar-item.vue +43 -0
  177. package/components/toolbar/toolbar.vue +81 -0
  178. package/components/tooltip/index.js +9 -0
  179. package/components/tooltip/tooltip.vue +86 -0
  180. package/components/transfer/index.js +7 -0
  181. package/components/transfer/transfer-load-more.vue +53 -0
  182. package/components/transfer/transfer.vue +245 -0
  183. package/components/tree/index.js +7 -0
  184. package/components/tree/tree.vue +326 -0
  185. package/components/tree/utils.js +122 -0
  186. package/components/video/index.js +7 -0
  187. package/components/video/video.vue +53 -0
  188. package/package.json +4 -1
  189. package/utils/date.js +55 -0
  190. package/utils/emitter.js +3 -0
  191. package/utils/json.js +19 -0
  192. package/utils/resize-event.js +35 -0
  193. package/utils/util.js +12 -0
  194. package/utils/utils.js +0 -0
@@ -0,0 +1,286 @@
1
+ <template>
2
+ <el-dropdown
3
+ class="ui-dropdown"
4
+ :class="[{'is-disabled': disabled}]"
5
+ :trigger="trigger"
6
+ :placement="placement"
7
+ @command="handleCommand"
8
+ >
9
+ <slot name="reference" :options="innerOptions">
10
+ <ui-button class="ui-dropdown__handle" :icon="icon" :size="size" :loading="loading" :type="type" :plain="plain">
11
+ {{showLabel}}<i class="el-icon-arrow-down el-icon--right"></i>
12
+ </ui-button>
13
+ </slot>
14
+ <slot></slot>
15
+ <el-dropdown-menu class="ui-dropdown__menu" :class="[{'is-custom-item': $scopedSlots.item}, popupClass]" slot="dropdown">
16
+ <el-dropdown-item
17
+ class="ui-dropdown__item"
18
+ v-for="(item, index) in innerOptions"
19
+ :key="index"
20
+ :command="index"
21
+ :divided="item.divided || (item.props && item.props.divided)"
22
+ :disabled="item.disabled || (item.props && item.props.disabled)"
23
+ :class="handleRenderItemClass(item)"
24
+ >
25
+ <slot name="item" :item="item">
26
+ <ui-icon v-if="item.icon || (item.props && item.props.icon)" class="ui-dropdown__item-icon" :name="item.icon || (item.props && item.props.icon)"></ui-icon>
27
+ <span class="ui-dropdown__item-text">{{item.label || (item.props && item.props.label)}}</span>
28
+ </slot>
29
+ </el-dropdown-item>
30
+ </el-dropdown-menu>
31
+ </el-dropdown>
32
+ </template>
33
+ <script>
34
+ import Dropdown from 'element-ui/lib/dropdown'
35
+ import DropdownMenu from 'element-ui/lib/dropdown-menu'
36
+ import DropdownItem from 'element-ui/lib/dropdown-item'
37
+ import UiIcon from '../icon'
38
+ import UiButton from '../button'
39
+ import 'element-ui/lib/theme-chalk/dropdown.css'
40
+ import 'element-ui/lib/theme-chalk/dropdown-menu.css'
41
+ import 'element-ui/lib/theme-chalk/dropdown-item.css'
42
+
43
+ export default {
44
+ name: 'UiDropdown',
45
+ components: {
46
+ UiIcon,
47
+ UiButton,
48
+ ElDropdown: Dropdown,
49
+ ElDropdownMenu: DropdownMenu,
50
+ ElDropdownItem: DropdownItem
51
+ },
52
+ provide () {
53
+ return {
54
+ UiDropdown: this
55
+ }
56
+ },
57
+ props: {
58
+ itemData: {
59
+ type: Object,
60
+ default: () => {}
61
+ },
62
+ loading: {
63
+ type: Boolean,
64
+ default: false
65
+ },
66
+ label: {
67
+ type: String
68
+ },
69
+ size: {
70
+ type: String
71
+ },
72
+ value: {
73
+ type: [String, Number, Boolean]
74
+ },
75
+ popupClass: {
76
+ type: String
77
+ },
78
+ type: {
79
+ type: String,
80
+ default: 'default'
81
+ },
82
+ plain: {
83
+ type: Boolean,
84
+ default: false
85
+ },
86
+ trigger: {
87
+ type: String,
88
+ default: 'click' // hover | click
89
+ },
90
+ placement: {
91
+ type: String,
92
+ default: 'bottom-start'
93
+ },
94
+ options: {
95
+ type: Array,
96
+ default: () => []
97
+ },
98
+ disabled: {
99
+ type: Boolean,
100
+ default: false
101
+ },
102
+ icon: {
103
+ type: String
104
+ }
105
+ },
106
+ data () {
107
+ return {
108
+ innerOptions: this.options,
109
+ }
110
+ },
111
+ computed: {
112
+ currentItem () {
113
+ return this.innerOptions.find(v => v.value === this.value)
114
+ },
115
+ showLabel () {
116
+ if (this.label) {
117
+ return this.label
118
+ }
119
+ return this.currentItem ? this.currentItem.label : ''
120
+ }
121
+ },
122
+ watch: {
123
+ options () {
124
+ this.innerOptions = this.options
125
+ }
126
+ },
127
+ methods: {
128
+ handleRenderItemClass (item) {
129
+ const cls = []
130
+ const map = {
131
+ danger: 'ui-dropdown-item--danger'
132
+ }
133
+ if (map[item.type || (item.props && item.props.type)]) {
134
+ cls.push(map[item.type || item.props.type])
135
+ }
136
+ return cls
137
+ },
138
+ handleCommand (e) {
139
+ const item = this.innerOptions[e]
140
+ // 兼容以前的老逻辑,如果配置了item-click就不允许执行item.click了,因为后面新的方式可以直接监听dropdown-item的时间,能带上下文数据
141
+ if (!this.$listeners['item-click']) {
142
+ if (item.click) {
143
+ item.click()
144
+ }
145
+ }
146
+ this.$emit('input', item.value)
147
+ this.$emit('item-click', {
148
+ index: e,
149
+ item,
150
+ itemData: this.itemData
151
+ })
152
+ },
153
+ addOption (option) {
154
+ if (!option.id) {
155
+ throw new Error('缺少唯一id')
156
+ }
157
+ if (this.innerOptions.some(v => v.id === option.id)) {
158
+ return
159
+ }
160
+ this.innerOptions.push(option)
161
+ },
162
+ removeOption (id) {
163
+ let index = -1
164
+ this.innerOptions.some((v, i) => {
165
+ if (v.id === id) {
166
+ index = i
167
+ return true
168
+ }
169
+ })
170
+ if (index < 0) {
171
+ return
172
+ }
173
+ this.innerOptions.splice(index, 1)
174
+ },
175
+ updateOptionProps (id, props) {
176
+ let index = -1
177
+ this.innerOptions.some((v, i) => {
178
+ if (v.id === id) {
179
+ index = i
180
+ return true
181
+ }
182
+ })
183
+ if (index < 0) {
184
+ return
185
+ }
186
+ this.innerOptions = this.innerOptions.map((v, i) => {
187
+ if (i === index) {
188
+ return Object.assign({}, v, {
189
+ props
190
+ })
191
+ } else {
192
+ return v
193
+ }
194
+ })
195
+ }
196
+ }
197
+ }
198
+ </script>
199
+ <style lang="less">
200
+ .el-dropdown.ui-dropdown{
201
+ font-size: 14px;
202
+ .el-icon-arrow-down{
203
+ font-size: 12px;
204
+ }
205
+ &.is-disabled{
206
+ position: relative;
207
+ cursor: not-allowed;
208
+ opacity: .5;
209
+ &:after{
210
+ content: '';
211
+ position: absolute;
212
+ left: 0;
213
+ right: 0;
214
+ top: 0;
215
+ bottom: 0;
216
+ z-index: 3;
217
+ }
218
+ }
219
+ }
220
+ .ui-dropdown__handle:not(.el-button--text){
221
+ padding-left: 9px;
222
+ padding-right: 9px;
223
+ }
224
+ .ui-dropdown__menu{
225
+ &.el-dropdown-menu{
226
+ padding-top: 6px;
227
+ padding-bottom: 6px;
228
+ }
229
+ &:not(.is-custom-item) {
230
+ .el-dropdown-menu__item{
231
+ padding-left: 12px;
232
+ padding-right: 12px;
233
+ }
234
+ .el-dropdown-menu__item:focus,
235
+ .el-dropdown-menu__item:not(.is-disabled):hover{
236
+ color: #0052cc;
237
+ background-color: rgba(222, 235, 255, 0.9);
238
+ }
239
+ }
240
+ &.is-custom-item{
241
+ padding-top: 0;
242
+ padding-bottom: 0;
243
+ .el-dropdown-menu__item:focus,
244
+ .el-dropdown-menu__item:not(.is-disabled):hover{
245
+ color: #484848;
246
+ background-color: transparent;
247
+ }
248
+ }
249
+ }
250
+ .ui-dropdown__item{
251
+ display: flex;
252
+ flex-direction: row;
253
+ align-items: center;
254
+ white-space: nowrap;
255
+ &.ui-dropdown-item--danger{
256
+ color: #FF4F54;
257
+ .ui-dropdown__item-text{
258
+ color: #FF4F54;
259
+ }
260
+ .ui-icon{
261
+ color: #FF4F54;
262
+ }
263
+ &:focus, &:not(.is-disabled):hover{
264
+ background-color: rgba(255, 79, 84, .1)!important;
265
+ .ui-dropdown__item-text{
266
+ color: #FF4F54;
267
+ }
268
+ }
269
+ }
270
+ &.el-dropdown-menu__item--divided:before{
271
+ margin-left: 0;
272
+ margin-right: 0;
273
+ }
274
+ }
275
+ .ui-dropdown__item-icon{
276
+ margin-right: 6px;
277
+ }
278
+ .ui-dropdown__menu{
279
+ &.is-custom-item{
280
+ .ui-dropdown__item{
281
+ padding-left: 0;
282
+ padding-right: 0;
283
+ }
284
+ }
285
+ }
286
+ </style>
@@ -0,0 +1,16 @@
1
+ import Dropdown from './dropdown.vue'
2
+ import DropdownItem from './dropdown-item.vue'
3
+
4
+ export {
5
+ Dropdown,
6
+ DropdownItem
7
+ }
8
+
9
+ export default {
10
+ Dropdown,
11
+ DropdownItem,
12
+ install (Vue) {
13
+ Vue.component(Dropdown.name, Dropdown)
14
+ Vue.component(DropdownItem.name, DropdownItem)
15
+ }
16
+ }
@@ -0,0 +1,62 @@
1
+ <template>
2
+ <div class="ui-empty" :class="{'is-border': border}">
3
+ <div class="ui-empyt__icon" v-if="icon">
4
+ <ui-icon :name="icon" :size="60" color="#ccc"></ui-icon>
5
+ </div>
6
+ <div class="ui-epmty__text">
7
+ <slot name="text">{{text}}</slot>
8
+ </div>
9
+ </div>
10
+ </template>
11
+ <script>
12
+ import UiIcon from '../icon'
13
+
14
+ export default {
15
+ name: 'UiEmpty',
16
+ components: {
17
+ UiIcon
18
+ },
19
+ props: {
20
+ icon: {
21
+ type: String
22
+ },
23
+ border: {
24
+ type: Boolean
25
+ },
26
+ text: {
27
+ type: String,
28
+ default: '暂无数据'
29
+ }
30
+ }
31
+ }
32
+ </script>
33
+ <style lang="less">
34
+ .ui-empty{
35
+ display: flex;
36
+ width: 100%;
37
+ height: 100%;
38
+ flex-direction: column;
39
+ justify-content: center;
40
+ align-items: center;
41
+ box-sizing: border-box;
42
+ line-height: 1.7em;
43
+ .ui-button{
44
+ vertical-align: -1px;
45
+ }
46
+ &.is-border {
47
+ border: 1px solid #eee;
48
+ border-radius: 3px;
49
+ padding: 12px;
50
+ }
51
+ }
52
+ .ui-empyt__icon{
53
+ // margin-bottom: 12px;
54
+ }
55
+ .ui-epmty__text{
56
+ color: #999;
57
+ word-break: break-all;
58
+ padding: 0 20px;
59
+ margin-top: 6px;
60
+ margin-bottom: 6px;
61
+ }
62
+ </style>
@@ -0,0 +1,7 @@
1
+ import Empty from './empty'
2
+
3
+ Empty.install = (Vue) => {
4
+ Vue.component(Empty.name, Empty)
5
+ }
6
+
7
+ export default Empty
@@ -0,0 +1,44 @@
1
+ <script>
2
+ import { unique } from './util'
3
+
4
+ export default {
5
+ name: 'UiFilterGroup',
6
+ inject: ['UiFilter'],
7
+ provide () {
8
+ return {
9
+ UiFilterGroup: this
10
+ }
11
+ },
12
+ props: {
13
+ label: {
14
+ type: String
15
+ },
16
+ labelWidth: {
17
+ type: String
18
+ }
19
+ },
20
+ computed: {
21
+ item() {
22
+ return {
23
+ id: this.id,
24
+ props: this.$props
25
+ }
26
+ }
27
+ },
28
+ created() {
29
+ this.id = unique()
30
+ this.UiFilter.addGroup(this.item)
31
+ },
32
+ beforeDestroy() {
33
+ this.UiFilter.removeGroup(this.id)
34
+ },
35
+ render(h) {
36
+ return h('div', {
37
+ class: 'ui-filter-group',
38
+ style: {
39
+ display: 'none'
40
+ }
41
+ }, [this.$scopedSlots.default ? this.$scopedSlots.default() : null])
42
+ }
43
+ }
44
+ </script>
@@ -0,0 +1,122 @@
1
+ <script>
2
+ import { unique } from './util'
3
+
4
+ export default {
5
+ name: 'UiFilterItem',
6
+ inject: {
7
+ UiFilter: {
8
+ from: 'UiFilter'
9
+ },
10
+ UiFilterGroup: {
11
+ from: 'UiFilterGroup',
12
+ default: null
13
+ }
14
+ },
15
+ props: {
16
+ label: {
17
+ type: String
18
+ },
19
+ prop: {
20
+ type: String
21
+ },
22
+ show: {
23
+ type: Boolean,
24
+ default: true
25
+ },
26
+ operater: {
27
+ type: String,
28
+ default: 'eq',
29
+ validator (value) {
30
+ return ['eq', 'in', 'like', 'between'].includes(value)
31
+ }
32
+ },
33
+ more: {
34
+ type: Boolean,
35
+ default: false
36
+ }
37
+ },
38
+ data() {
39
+ return {
40
+ info: {
41
+ count: 0
42
+ }
43
+ }
44
+ },
45
+ computed: {
46
+ props () {
47
+ return {
48
+ label: this.label,
49
+ prop: this.prop,
50
+ operater: this.operater,
51
+ more: this.more,
52
+ show: this.show,
53
+ transform: (evt) => {
54
+ if (this.transform) {
55
+ return this.transform(evt)
56
+ }
57
+ let childComponent = null
58
+ let childComonentProps = null
59
+ if (this.$slots.default && this.$slots.default.length) {
60
+ if (this.$slots.default[0].componentOptions && this.$slots.default[0].componentOptions.Ctor) {
61
+ childComponent = this.$slots.default[0].componentOptions.Ctor.options
62
+ childComonentProps = this.$slots.default[0].componentOptions.propsData
63
+ }
64
+ }
65
+ if (childComponent && childComponent.filter && childComponent.filter.transformValue) {
66
+ return childComponent.filter.transformValue({
67
+ value: evt.value,
68
+ props: childComonentProps
69
+ })
70
+ }
71
+ return evt.value
72
+ }
73
+ }
74
+ },
75
+ item() {
76
+ return {
77
+ id: this.id,
78
+ props: this.props,
79
+ info: this.info,
80
+ groupId: this.UiFilterGroup ? this.UiFilterGroup.id : null,
81
+ transform () {
82
+ // // 如果在过滤组件中使用,并且不是带时间范围选择,那么要将起始和截止时间处理一下
83
+ // if (this.UiFilter && this.type !== 'datetimerange') {
84
+ // val = val.map((v, i) => {
85
+ // const date = parseDate(v)
86
+ // if (i === 0) {
87
+ // date.setHours(0)
88
+ // date.setMinutes(0)
89
+ // date.setSeconds(0)
90
+ // date.setMilliseconds(0)
91
+ // } else {
92
+ // date.setDate(date.getDate() + 1)
93
+ // date.setHours(0)
94
+ // date.setMinutes(0)
95
+ // date.setSeconds(0)
96
+ // date.setMilliseconds(0)
97
+ // }
98
+ // return date.getTime() / 1000
99
+ // })
100
+ // } else {
101
+ },
102
+ render: () => {
103
+ return this.$scopedSlots.default()
104
+ }
105
+ }
106
+ }
107
+ },
108
+ created() {
109
+ this.id = unique()
110
+ this.UiFilter.addItem(this.item)
111
+ },
112
+ beforeDestroy() {
113
+ this.UiFilter.removeItem(this.id)
114
+ },
115
+ updated() {
116
+ this.info.count++
117
+ },
118
+ render() {
119
+ return null
120
+ }
121
+ }
122
+ </script>
@@ -0,0 +1,114 @@
1
+ <template>
2
+ <div class="ui-filter-more">
3
+ <ui-popover
4
+ v-model="showPopover"
5
+ placement="bottom-end"
6
+ >
7
+ <template slot="reference">
8
+ <ui-button type="primary" link>
9
+ <ui-icon size="18px">
10
+ <svg v-if="showPopover" t="1680482233621" class="icon" viewBox="0 0 1024 1024" version="1.1" xmlns="http://www.w3.org/2000/svg" p-id="25773" xmlns:xlink="http://www.w3.org/1999/xlink" width="200" height="200">
11
+ <path d="M544.716 589.036l0.856 0.816 224.016 220-56.056 57.08-196.676-193.156-207.456 193.84-54.62-58.452 235.456-220a40 40 0 0 1 54.48-0.128z m-235.32-438.64l207.46 193.84 196.68-193.156 56.052 57.08-224.016 220-0.856 0.816a40 40 0 0 1-54.48-0.128l-235.456-220L309.4 150.392z" fill="currentColor"></path>
12
+ </svg>
13
+ <svg v-else t="1680482233621" class="icon" viewBox="0 0 1024 1024" version="1.1" xmlns="http://www.w3.org/2000/svg" p-id="25773" xmlns:xlink="http://www.w3.org/1999/xlink" width="200" height="200">
14
+ <path fill="currentColor" d="M200.864 160.8l-1.04 0.012c-33.704 0.804-51.472 40.748-29.048 66.344l228.96 261.392v251.868a40 40 0 0 0 16.788 32.576l160.188 114.132 0.852 0.592c26.408 17.872 62.36-1 62.36-33.168v-366.684l215.684-261.62c21.508-26.092 2.952-65.444-30.864-65.444H200.864z m539.06 79.996l-170.864 207.268-0.864 1.088a40 40 0 0 0-8.272 24.356v303.424l-80.188-57.132v-246.292l-0.024-1.384a40 40 0 0 0-9.888-24.972L289.072 240.796h450.852z"></path>
15
+ </svg>
16
+ </ui-icon>
17
+ 更多筛选
18
+ </ui-button>
19
+ </template>
20
+ <div class="ui-filter-more__main" v-if="items && items.length">
21
+ <div class="ui-filter-more__list">
22
+ <div
23
+ class="ui-filter-more__item"
24
+ v-for="(item, index) in items"
25
+ :key="index"
26
+ >
27
+ <span class="ui-filter-more__item-label" :style="itemLabelStyle">
28
+ {{ item.props.label }}
29
+ </span>
30
+ <div class="ui-filter-more__item-target">
31
+ <component :is="handleRenderItem(item)"></component>
32
+ </div>
33
+ </div>
34
+ </div>
35
+ <div class="ui-filter-more__toolbar">
36
+ <ui-button type="primary" link>
37
+ <ui-icon slot="icon">
38
+ <svg t="1680482233621" class="icon" viewBox="0 0 1024 1024" version="1.1" xmlns="http://www.w3.org/2000/svg" p-id="25773" xmlns:xlink="http://www.w3.org/1999/xlink" width="200" height="200"><path d="M233.088 189.141333A425.002667 425.002667 0 0 1 512 85.333333c235.648 0 426.666667 191.018667 426.666667 426.666667 0 91.136-28.586667 175.616-77.226667 244.906667L725.333333 512h128A341.333333 341.333333 0 0 0 275.626667 265.728l-42.538667-76.586667z m557.824 645.717334A425.002667 425.002667 0 0 1 512 938.666667C276.352 938.666667 85.333333 747.648 85.333333 512c0-91.136 28.586667-175.616 77.226667-244.906667L298.666667 512H170.666667a341.333333 341.333333 0 0 0 577.706666 246.272l42.538667 76.586667z" fill="currentColor" p-id="25774"></path></svg>
39
+ </ui-icon>
40
+ 重置过滤条件
41
+ </ui-button>
42
+ </div>
43
+ </div>
44
+ </ui-popover>
45
+ </div>
46
+ </template>
47
+ <script>
48
+ export default {
49
+ name: 'UiFilterMore',
50
+ props: {
51
+ value: {
52
+ type: Object
53
+ },
54
+ items: {
55
+ type: Array,
56
+ required: true
57
+ },
58
+ labelWidth: {
59
+ type: String,
60
+ default: '80px'
61
+ }
62
+ },
63
+ data () {
64
+ return {
65
+ showPopover: false
66
+ }
67
+ },
68
+ computed: {
69
+ itemLabelStyle () {
70
+ const style = {}
71
+ if (this.labelWidth) {
72
+ style.width = this.labelWidth
73
+ style['min-width'] = this.labelWidth
74
+ }
75
+ return style
76
+ }
77
+ },
78
+ methods: {
79
+ handleRenderItem(item) {
80
+ return {
81
+ functional: true,
82
+ render: (h, c) => {
83
+ return item.render(h, c)
84
+ }
85
+ }
86
+ }
87
+ }
88
+ }
89
+ </script>
90
+ <style lang="less">
91
+ .ui-filter-more__main{
92
+ width: 420px;
93
+ }
94
+ .ui-filter-more__list{
95
+ padding: 6px;
96
+ }
97
+ .ui-filter-more__item{
98
+ display: flex;
99
+ flex-direction: row;
100
+ line-height: 32px;
101
+ padding: 6px;
102
+ }
103
+ .ui-filter-more__item-label {
104
+ color: #666;
105
+ }
106
+ .ui-filter-more__item-target{
107
+ flex: 1;
108
+ min-width: 0;
109
+ }
110
+ .ui-filter-more__toolbar{
111
+ border-top: 1px solid #eee;
112
+ padding: 9px 12px;
113
+ }
114
+ </style>