@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,95 @@
1
+ <template>
2
+ <ui-form ref="form" :rules="formRules" :model="formData" label-width="80px" label-position="top">
3
+ <ui-form-row>
4
+ <ui-form-cell prop="name" label="场景名称">
5
+ <ui-textbox v-model="formData.name" placeholder="场景名称,最多10个字符" :maxlength="10" style="width: 344px"></ui-textbox>
6
+ </ui-form-cell>
7
+ </ui-form-row>
8
+ <ui-form-row>
9
+ <ui-form-cell prop="data" label="筛选条件">
10
+ <advanced-filter-condition
11
+ ref="condition"
12
+ :field-data="fieldData"
13
+ v-model="formData.data"
14
+ >
15
+ </advanced-filter-condition>
16
+ </ui-form-cell>
17
+ </ui-form-row>
18
+ <ui-form-row>
19
+ <ui-form-cell>
20
+ <ui-switch v-model="formData.isDefault">设为默认</ui-switch>
21
+ </ui-form-cell>
22
+ </ui-form-row>
23
+ <ui-toolbar slot="toolbar">
24
+ <ui-toolbar-item>
25
+ <ui-button>取消</ui-button>
26
+ </ui-toolbar-item>
27
+ <ui-toolbar-item>
28
+ <ui-button type="primary" :click="handleConfirmClick">确定</ui-button>
29
+ </ui-toolbar-item>
30
+ </ui-toolbar>
31
+ </ui-form>
32
+ </template>
33
+ <script>
34
+ import AdvancedFilterCondition from './advanced-filter-condition'
35
+
36
+ export default {
37
+ name: 'UiAdvancedFilterSceneForm',
38
+ components: {
39
+ AdvancedFilterCondition
40
+ },
41
+ props: {
42
+ data: {
43
+ type: Object
44
+ },
45
+ fieldData: {
46
+ type: Array
47
+ },
48
+ confirmMethod: {
49
+ type: Function
50
+ }
51
+ },
52
+ data () {
53
+ return {
54
+ formData: {
55
+ name: '',
56
+ data: [],
57
+ isDefault: false
58
+ }
59
+ }
60
+ },
61
+ computed: {
62
+ formRules () {
63
+ return {
64
+ name: [{
65
+ required: true,
66
+ message: '场景名称不能为空',
67
+ trigger: 'blur'
68
+ }],
69
+ data: [{
70
+ required: true,
71
+ message: '筛选条件不能为空',
72
+ trigger: 'change'
73
+ }]
74
+ }
75
+ }
76
+ },
77
+ created () {
78
+ if (this.data) {
79
+ this.formData = Object.assign({}, this.data)
80
+ }
81
+ },
82
+ methods: {
83
+ handleConfirmClick () {
84
+ return Promise.all([
85
+ this.$refs.form.validate(),
86
+ this.$refs.condition.validate()
87
+ ]).then(() => {
88
+ return this.confirmMethod && this.confirmMethod({
89
+ data: this.formData
90
+ })
91
+ })
92
+ }
93
+ }
94
+ }
95
+ </script>
@@ -0,0 +1,64 @@
1
+ <template>
2
+ <div class="ui-advanced-filter-scene-item" :class="{'is-active': active, 'is-dirty': active && activeDirty}" @click="handleClick">
3
+ <slot>
4
+ {{ label }}
5
+ </slot>
6
+ <span class="ui-advanced-filter-scene-item__arrow" v-if="arrow">
7
+ <i class="el-icon-arrow-down"></i>
8
+ </span>
9
+ </div>
10
+ </template>
11
+ <script>
12
+ export default {
13
+ name: 'UiAdvancedFilterSceneItem',
14
+ props: {
15
+ label: {
16
+ type: String
17
+ },
18
+ active: {
19
+ type: Boolean,
20
+ default: false
21
+ },
22
+ activeDirty: {
23
+ type: Boolean,
24
+ default: false
25
+ },
26
+ arrow: {
27
+ type: Boolean,
28
+ default: false
29
+ }
30
+ },
31
+ methods: {
32
+ handleClick () {
33
+ this.$emit('click')
34
+ }
35
+ }
36
+ }
37
+ </script>
38
+ <style lang="less">
39
+ .ui-advanced-filter-scene-item{
40
+ height: 20px;
41
+ line-height: 20px;
42
+ padding: 4px 10px;
43
+ border-radius: 4px;
44
+ cursor: pointer;
45
+ background: #F4F5F7;
46
+ margin-right: 8px;
47
+ color: #344563;
48
+ transition: all .25s;
49
+ border: 2px solid #F4F5F7;
50
+ &:hover {
51
+ background-color: #EBECF0;
52
+ }
53
+ &.is-active {
54
+ background-color: #344563;
55
+ border-color: #344563;
56
+ color: #fff;
57
+ }
58
+ &.is-dirty {
59
+ color: #344563;
60
+ border-color: #344563;
61
+ background-color: #EBECF0;
62
+ }
63
+ }
64
+ </style>
@@ -0,0 +1,264 @@
1
+ <template>
2
+ <ui-form class="ui-advanced-filter-scene-manage">
3
+ <ui-form-row>
4
+ <ui-form-cell :show-label="false">
5
+ <div class="ui-advanced-filter-scene-manage__tips">
6
+ <ac-tips>您可通过拖拽管理场景显示顺序</ac-tips>
7
+ </div>
8
+ <div class="ui-advanced-filter-scene-manage__transfer">
9
+ <advanced-filter-scene-transfer
10
+ v-model="showSceneIds"
11
+ :all-scene-data="allSceneData"
12
+ >
13
+ <template slot="item-extend" slot-scope="{ data, type }">
14
+ <div class="ui-advanced-filter-scene-manage__tools">
15
+ <span class="ui-advanced-filter-scene-manage__tools-item" v-if="data.isDefault === 1">
16
+ <span class="ui-advanced-filter-scene-manage__default">默</span>
17
+ </span>
18
+ <template v-if="!(data.isSystem === 1 && data.isDefault === 1)">
19
+ <ui-popover
20
+ class="ui-advanced-filter-scene-manage__tools-item"
21
+ :visible="showPopoverMap[data.sceneId]"
22
+ @input="handleScenePopoverChange(data, $event)"
23
+ >
24
+ <template slot="reference">
25
+ <div class="ui-advanced-filter-scene-manage__tools-more" :class="{'is-active': showPopoverMap[data.sceneId]}" title="更多">
26
+ <ui-icon class="ui-advanced-filter-scene-manage__tools-icon" name="more-line"></ui-icon>
27
+ </div>
28
+ </template>
29
+ <div class="ui-advanced-filter-scene-manage__tools-menu">
30
+ <div class="ui-advanced-filter-scene-manage__tools-menu-item" v-if="data.isSystem !== 1" @click="handleEditClick(data)">编辑</div>
31
+ <div class="ui-advanced-filter-scene-manage__tools-menu-item is-divided" v-if="data.isDefault !== 1 && type === 'showArea'" @click="handleSettingDefaultClick(data)">设为默认</div>
32
+ <div class="ui-advanced-filter-scene-manage__tools-menu-item is-danger" v-if="data.isSystem !== 1" @click="handleDeleteClick(data)">删除</div>
33
+ </div>
34
+ </ui-popover>
35
+ </template>
36
+ </div>
37
+ </template>
38
+ </advanced-filter-scene-transfer>
39
+ </div>
40
+ </ui-form-cell>
41
+ </ui-form-row>
42
+ <ui-form-row>
43
+ <ui-form-cell :show-label="false">
44
+ <ui-button @click="handleAddClick" icon="add-line">新建场景</ui-button>
45
+ </ui-form-cell>
46
+ </ui-form-row>
47
+ <ui-toolbar slot="toolbar">
48
+ <ui-toolbar-item>
49
+ <ui-button>取消</ui-button>
50
+ </ui-toolbar-item>
51
+ <ui-toolbar-item>
52
+ <ui-button type="primary" :click="handleConfirmClick">确定</ui-button>
53
+ </ui-toolbar-item>
54
+ </ui-toolbar>
55
+ <ui-dialog
56
+ title="新建场景"
57
+ size="medium"
58
+ v-model="showAddDialog"
59
+ >
60
+ <advanced-filter-scene-form
61
+ :field-data="fieldData"
62
+ :confirm-method="createSceneMethod"
63
+ >
64
+ </advanced-filter-scene-form>
65
+ </ui-dialog>
66
+ <ui-dialog
67
+ title="编辑场景"
68
+ size="medium"
69
+ v-model="showEditDialog"
70
+ >
71
+ <advanced-filter-scene-form
72
+ :data="currentScene"
73
+ :field-data="fieldData"
74
+ :confirm-method="updateSceneMethod"
75
+ >
76
+ </advanced-filter-scene-form>
77
+ </ui-dialog>
78
+ <ac-loading :visible="loading"></ac-loading>
79
+ </ui-form>
80
+ </template>
81
+ <script>
82
+ import AdvancedFilterSceneForm from './advanced-filter-scene-form'
83
+ import AdvancedFilterSceneTransfer from './advanced-filter-scene-transfer'
84
+ import AcTips from '../../common/tips'
85
+ import AcLoading from '../../common/loading'
86
+
87
+ export default {
88
+ name: 'UiAdvancedFilterSceneManage',
89
+ components: {
90
+ AcTips,
91
+ AcLoading,
92
+ AdvancedFilterSceneForm,
93
+ AdvancedFilterSceneTransfer
94
+ },
95
+ props: {
96
+ allSceneData: {
97
+ type: Array
98
+ },
99
+ hideScene: {
100
+ type: Array
101
+ },
102
+ fieldData: {
103
+ type: Array
104
+ },
105
+ fetchConfigMethod: {
106
+ type: Function
107
+ },
108
+ updateConfigMethod: {
109
+ type: Function
110
+ },
111
+ updateSceneMethod: {
112
+ type: Function
113
+ },
114
+ createSceneMethod: {
115
+ type: Function
116
+ },
117
+ deleteSceneMethod: {
118
+ type: Function
119
+ },
120
+ saveDefaultSceneMethod: {
121
+ type: Function
122
+ }
123
+ },
124
+ data () {
125
+ return {
126
+ loading: false,
127
+ showSceneIds: [],
128
+ currentScene: null,
129
+ showAddDialog: false,
130
+ showEditDialog: false,
131
+ showPopoverMap: {}
132
+ }
133
+ },
134
+ created () {
135
+ if (this.fetchConfigMethod) {
136
+ this.loading = true
137
+ this.fetchConfigMethod().then(() => {
138
+ this.syncShowSceneIds()
139
+ }).finally(() => {
140
+ this.loading = false
141
+ })
142
+ } else {
143
+ this.syncShowSceneIds()
144
+ }
145
+ },
146
+ watch: {
147
+ hideScene () {
148
+ this.syncShowSceneIds()
149
+ }
150
+ },
151
+ methods: {
152
+ syncShowSceneIds () {
153
+ if (this.hideScene && this.hideScene.length) {
154
+ this.showSceneIds = (this.allSceneData || []).filter(v => !this.hideScene.includes(v.sceneId)).map(v => v.sceneId)
155
+ } else {
156
+ this.showSceneIds = (this.allSceneData || []).map(v => v.sceneId)
157
+ }
158
+ },
159
+ handleScenePopoverChange (scene, value) {
160
+ this.$set(this.showPopoverMap, scene.sceneId, value)
161
+ },
162
+ handleAddClick () {
163
+ this.showAddDialog = true
164
+ },
165
+ handleEditClick (scene) {
166
+ this.currentScene = scene
167
+ this.showEditDialog = true
168
+ this.$set(this.showPopoverMap, scene.sceneId, false)
169
+ },
170
+ handleDeleteClick (scene) {
171
+ this.deleteSceneMethod && this.deleteSceneMethod({
172
+ data: scene
173
+ })
174
+ this.$set(this.showPopoverMap, scene.sceneId, false)
175
+ },
176
+ handleConfirmClick () {
177
+ if (!this.updateConfigMethod) {
178
+ return
179
+ }
180
+ return this.updateConfigMethod({
181
+ showSceneIds: this.showSceneIds,
182
+ hideSceneIds: (this.allSceneData || []).filter(v => !this.showSceneIds.includes(v.sceneId)).map(v => v.sceneId)
183
+ })
184
+ },
185
+ handleSettingDefaultClick (scene) {
186
+ if (!this.saveDefaultSceneMethod) {
187
+ return
188
+ }
189
+ this.$set(this.showPopoverMap, scene.sceneId, false)
190
+ return this.saveDefaultSceneMethod({
191
+ data: scene
192
+ })
193
+ }
194
+ }
195
+ }
196
+ </script>
197
+ <style lang="less">
198
+ .ui-advanced-filter-scene-manage__tools{
199
+ display: flex;
200
+ flex-direction: row;
201
+ font-size: 12px;
202
+ }
203
+ .ui-advanced-filter-scene-manage__tools-item{
204
+ margin-left: 6px;
205
+ }
206
+ .ui-advanced-filter-scene-manage__tools-more{
207
+ height: 24px;
208
+ line-height: 24px;
209
+ border-radius: 3px;
210
+ padding: 0 6px;
211
+ &.is-active {
212
+ .ui-advanced-filter-scene-manage__tools-icon{
213
+ color: #0052CC;
214
+ }
215
+ }
216
+ }
217
+ .ui-advanced-filter-scene-manage__tools-icon{
218
+ color: #999;
219
+ cursor: pointer;
220
+ &.is-primary {
221
+ &:hover {
222
+ color: #0052CC;
223
+ }
224
+ }
225
+ &.is-danger {
226
+ &:hover {
227
+ color: #f56c6c;
228
+ }
229
+ }
230
+ }
231
+ .ui-advanced-filter-scene-manage__tools-menu{
232
+ padding: 6px 0;
233
+ min-width: 100px;
234
+ min-height: 24px;
235
+ }
236
+ .ui-advanced-filter-scene-manage__tools-menu-item{
237
+ padding: 6px 12px;
238
+ cursor: pointer;
239
+ vertical-align: top;
240
+ &.is-danger {
241
+ color: #f56c6c;
242
+ }
243
+ &:hover {
244
+ background-color: #f3f3f3;
245
+ }
246
+ }
247
+ .ui-advanced-filter-scene-manage__tools-menu-item.is-divided {
248
+ position: relative;
249
+ }
250
+ .ui-advanced-filter-scene-manage__default{
251
+ font-size: 14px;
252
+ background-color: #fb9244;
253
+ font-weight: bold;
254
+ color: #fff;
255
+ width: 20px;
256
+ height: 20px;
257
+ text-align: center;
258
+ line-height: 20px;
259
+ display: inline-block;
260
+ transform: scale(.7);
261
+ vertical-align: top;
262
+ margin-top: 2px;
263
+ }
264
+ </style>
@@ -0,0 +1,283 @@
1
+ <template>
2
+ <div class="ui-advanced-filter-scene-transfer">
3
+ <div class="ui-advanced-filter-scene-transfer__panel">
4
+ <div class="ui-advanced-filter-scene-transfer__panel-head">
5
+ <ui-checkbox
6
+ :indeterminate="showSceneCheckIndeterminate"
7
+ :value="showSceneCheckAll"
8
+ @input="handleShowCheckAllChange"
9
+ >显示的场景</ui-checkbox>
10
+ </div>
11
+ <div class="ui-advanced-filter-scene-transfer__panel-body">
12
+ <template v-if="showSceneData && showSceneData.length">
13
+ <div class="ui-advanced-filter-scene-transfer__menu">
14
+ <ui-checkbox-group v-model="checkShowSceneIds">
15
+ <ui-sortable @sort="handleShowSceneSortChange">
16
+ <ui-sortable-item
17
+ v-for="scene in showSceneData"
18
+ :key="scene.sceneId"
19
+ >
20
+ <div
21
+ class="ui-advanced-filter-scene-transfer__menu-item"
22
+ @mouseenter="handleMenuItemMouseEnter(scene)"
23
+ @mouseleave="handleMenuItemMouseLeave(scene)"
24
+ >
25
+ <div class="ui-advanced-filter-scene-transfer__menu-item-main" :title="scene.name">
26
+ <ui-checkbox :label="scene.sceneId">{{ scene.name }}</ui-checkbox>
27
+ </div>
28
+ <div class="ui-advanced-filter-scene-transfer__menu-item-extend">
29
+ <slot name="item-extend" :data="scene" type="showArea"></slot>
30
+ </div>
31
+ </div>
32
+ </ui-sortable-item>
33
+ </ui-sortable>
34
+ </ui-checkbox-group>
35
+ </div>
36
+ </template>
37
+ <template v-else>
38
+ <div class="ui-advanced-filter-scene-transfer__empty">
39
+ <ui-empty text="暂无显示场景数据"></ui-empty>
40
+ </div>
41
+ </template>
42
+ </div>
43
+ </div>
44
+ <div class="ui-advanced-filter-scene-transfer__toolbar">
45
+ <div class="ui-advanced-filter-scene-transfer__toolbar-item">
46
+ <ui-button @click="handleLeftClick" :disabled="!checkHideSceneIds || !checkHideSceneIds.length">左移</ui-button>
47
+ </div>
48
+ <div class="ui-advanced-filter-scene-transfer__toolbar-item">
49
+ <ui-button @click="handleRightClick" :disabled="!checkShowSceneIds || !checkShowSceneIds.length">右移</ui-button>
50
+ </div>
51
+ </div>
52
+ <div class="ui-advanced-filter-scene-transfer__panel">
53
+ <div class="ui-advanced-filter-scene-transfer__panel-head">
54
+ <ui-checkbox
55
+ :indeterminate="hideSceneCheckIndeterminate"
56
+ :value="hideSceneCheckAll"
57
+ @input="handleHideCheckAllChange"
58
+ >隐藏的场景</ui-checkbox>
59
+ </div>
60
+ <div class="ui-advanced-filter-scene-transfer__panel-body">
61
+ <template v-if="hideSceneData && hideSceneData.length">
62
+ <div class="ui-advanced-filter-scene-transfer__menu">
63
+ <ui-checkbox-group v-model="checkHideSceneIds">
64
+ <div
65
+ class="ui-advanced-filter-scene-transfer__menu-item"
66
+ v-for="scene in hideSceneData"
67
+ :key="scene.sceneId"
68
+ @mouseenter="handleMenuItemMouseEnter(scene)"
69
+ @mouseleave="handleMenuItemMouseLeave(scene)"
70
+ >
71
+ <div class="ui-advanced-filter-scene-transfer__menu-item-main" :title="scene.name">
72
+ <ui-checkbox :label="scene.sceneId">{{ scene.name }}</ui-checkbox>
73
+ </div>
74
+ <div class="ui-advanced-filter-scene-transfer__menu-item-extend">
75
+ <slot name="item-extend" :data="scene" type="hideArea"></slot>
76
+ </div>
77
+ </div>
78
+ </ui-checkbox-group>
79
+ </div>
80
+ </template>
81
+ <template v-else>
82
+ <div class="ui-advanced-filter-scene-transfer__empty">
83
+ <ui-empty text="暂无隐藏场景数据"></ui-empty>
84
+ </div>
85
+ </template>
86
+ </div>
87
+ </div>
88
+ </div>
89
+ </template>
90
+ <script>
91
+ export default {
92
+ name: 'UiAdvancedFilterSceneTransfer',
93
+ props: {
94
+ value: {
95
+ type: Array
96
+ },
97
+ allSceneData: {
98
+ type: Array
99
+ }
100
+ },
101
+ data () {
102
+ return {
103
+ hoverItem: null,
104
+ checkShowSceneIds: [],
105
+ checkHideSceneIds: []
106
+ }
107
+ },
108
+ computed: {
109
+ innerValue: {
110
+ get () {
111
+ return this.value || []
112
+ },
113
+ set (val) {
114
+ this.$emit('input', val)
115
+ }
116
+ },
117
+ showSceneData () {
118
+ if (!this.innerValue || !this.innerValue.length) {
119
+ return []
120
+ }
121
+ return this.allSceneData.filter(v => this.innerValue.includes(v.sceneId))
122
+ },
123
+ hideSceneData () {
124
+ if (!this.innerValue || !this.innerValue.length) {
125
+ return this.allSceneData
126
+ }
127
+ return this.allSceneData.filter(v => !this.innerValue.includes(v.sceneId))
128
+ },
129
+ showSceneCheckIndeterminate () {
130
+ return this.checkShowSceneIds.length > 0 && this.checkShowSceneIds.length < this.showSceneData.length
131
+ },
132
+ showSceneCheckAll () {
133
+ return this.checkShowSceneIds.length > 0 && this.checkShowSceneIds.length >= this.showSceneData.length
134
+ },
135
+ hideSceneCheckIndeterminate () {
136
+ return this.checkHideSceneIds.length > 0 && this.checkHideSceneIds.length < this.hideSceneData.length
137
+ },
138
+ hideSceneCheckAll () {
139
+ return this.checkHideSceneIds.length > 0 && this.checkHideSceneIds.length < this.hideSceneData.length
140
+ }
141
+ },
142
+ watch: {
143
+ sceneData () {
144
+ this.checkInvalidSceneData()
145
+ }
146
+ },
147
+ methods: {
148
+ checkInvalidSceneData () {
149
+ this.checkShowSceneIds = (this.checkShowSceneIds || []).filter(v => this.allSceneData.some(vv => vv.sceneId === v))
150
+ this.checkHideSceneIds = (this.checkHideSceneIds || []).filter(v => this.allSceneData.some(vv => vv.sceneId === v))
151
+ },
152
+ handleShowSceneSortChange (evt) {
153
+ const nextActiveApp = [...this.showSceneData]
154
+ const sourceItem = this.showSceneData[evt.oldIndex]
155
+ nextActiveApp.splice(evt.oldIndex, 1)
156
+ nextActiveApp.splice(evt.newIndex, 0, sourceItem)
157
+ this.innerValue = nextActiveApp.map(v => v.sceneId)
158
+ },
159
+ handleLeftClick () {
160
+ const checkHideSceneIds = [].concat(this.checkHideSceneIds, this.showSceneData.map(v => v.sceneId))
161
+ this.checkHideSceneIds = []
162
+ this.innerValue = this.allSceneData.filter(v => checkHideSceneIds.includes(v.sceneId)).map(v => v.sceneId)
163
+ },
164
+ handleRightClick () {
165
+ const checkShowSceneIds = [].concat(this.checkShowSceneIds, this.hideSceneData.map(v => v.sceneId))
166
+ this.checkShowSceneIds = []
167
+ this.innerValue = this.allSceneData.filter(v => !checkShowSceneIds.includes(v.sceneId)).map(v => v.sceneId)
168
+ },
169
+ handleShowCheckAllChange (value) {
170
+ if (value) {
171
+ this.checkShowSceneIds = this.showSceneData.map(v => v.sceneId)
172
+ } else {
173
+ this.checkShowSceneIds = []
174
+ }
175
+ },
176
+ handleHideCheckAllChange (value) {
177
+ if (value) {
178
+ this.checkHideSceneIds = this.hideSceneData.map(v => v.sceneId)
179
+ } else {
180
+ this.checkHideSceneIds = []
181
+ }
182
+ },
183
+ handleMenuItemMouseEnter (item) {
184
+ // clearTimeout(this._hoverTimer)
185
+ // this.hoverItem = item
186
+ },
187
+ handleMenuItemMouseLeave () {
188
+ // clearTimeout(this._hoverTimer)
189
+ // this._hoverTimer = setTimeout(() => {
190
+ // this.hoverItem = null
191
+ // }, 100)
192
+ }
193
+ },
194
+ beforeDestroy () {
195
+ clearTimeout(this._hoverTimer)
196
+ }
197
+ }
198
+ </script>
199
+ <style lang="less">
200
+ .ui-advanced-filter-scene-transfer{
201
+ display: flex;
202
+ flex-direction: row;
203
+ height: 360px;
204
+ }
205
+ .ui-advanced-filter-scene-transfer__panel{
206
+ border: 1px solid #ddd;
207
+ border-radius: 3px;
208
+ flex: 1;
209
+ min-width: 0;
210
+ height: 100%;
211
+ display: flex;
212
+ flex-direction: column;
213
+ }
214
+ .ui-advanced-filter-scene-transfer__toolbar{
215
+ height: 100%;
216
+ display: flex;
217
+ flex-direction: column;
218
+ justify-content: center;
219
+ align-items: center;
220
+ }
221
+ .ui-advanced-filter-scene-transfer__toolbar-item{
222
+ margin: 12px;
223
+ }
224
+ .ui-advanced-filter-scene-transfer__panel-head{
225
+ border-bottom: 1px solid #ddd;
226
+ background-color: #f9f9f9;
227
+ padding: 3px 18px;
228
+ border-top-left-radius: 3px;
229
+ border-top-right-radius: 3px;
230
+ }
231
+ .ui-advanced-filter-scene-transfer__panel-body{
232
+ flex: 1;
233
+ min-height: 0;
234
+ }
235
+ .ui-advanced-filter-scene-transfer__menu {
236
+ height: 100%;
237
+ overflow: auto;
238
+ padding: 6px 0;
239
+ box-sizing: border-box;
240
+ }
241
+ .ui-advanced-filter-scene-transfer__menu-item {
242
+ padding: 6px 6px 6px 18px;
243
+ line-height: 24px;
244
+ height: 24px;
245
+ display: flex;
246
+ flex-direction: row;
247
+ box-sizing: content-box;
248
+ transition: all .25s;
249
+ cursor: pointer;
250
+ &:hover {
251
+ background-color: #f3f3f3;
252
+ }
253
+ .ui-checkbox {
254
+ max-width: 100%;
255
+ display: flex;
256
+ flex-direction: row;
257
+ }
258
+ .el-checkbox__label{
259
+ flex: 1;
260
+ min-width: 0;
261
+ white-space: nowrap;
262
+ text-overflow: ellipsis;
263
+ overflow: hidden;
264
+ }
265
+ }
266
+ .ui-advanced-filter-scene-transfer__menu-item-main {
267
+ flex: 1;
268
+ min-width: 0;
269
+ display: flex;
270
+ flex-direction: row;
271
+ align-items: center;
272
+ white-space: nowrap;
273
+ text-overflow: ellipsis;
274
+ overflow: hidden;
275
+ }
276
+ .ui-advanced-filter-scene-transfer__empty{
277
+ height: 100%;
278
+ display: flex;
279
+ flex-direction: column;
280
+ align-items: center;
281
+ justify-content: center;
282
+ }
283
+ </style>