web-component-gallery 1.3.12 → 2.0.2

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 (218) hide show
  1. package/dist/923.umd.js +1 -0
  2. package/dist/index.umd.js +1 -12252
  3. package/dist/js.umd.js +1 -0
  4. package/dist/style.css +17 -0
  5. package/dist/style.umd.js +1 -0
  6. package/{method → extensions}/AMap.js +1 -5
  7. package/{plugins/method → extensions}/Dialog.js +2 -2
  8. package/{lib/lazy_use.js → extensions/index.js} +16 -2
  9. package/lib/{amap/components/AmapSearch/index.jsx → amap-comp/AmapSearch.jsx} +3 -5
  10. package/lib/amap-comp/index.js +18 -0
  11. package/{plugins/lib/amap/components/AmapSearch/index.less → lib/amap-comp/style/AmapSearch.less} +5 -3
  12. package/lib/amap-comp/style/index.js +1 -0
  13. package/lib/amap-comp/style/index.less +1 -0
  14. package/lib/{amap/AmapDraw.jsx → amap-draw/index.jsx} +2 -4
  15. package/lib/amap-draw/style/index.js +1 -0
  16. package/lib/{amap/AmapDraw.less → amap-draw/style/index.less} +6 -3
  17. package/lib/browse/index.jsx +0 -2
  18. package/lib/browse/style/index.js +1 -0
  19. package/lib/button/Button.js +1 -3
  20. package/lib/button/style/index.js +1 -0
  21. package/{plugins/lib/dateTime → lib/date-time}/index.vue +3 -13
  22. package/lib/date-time/style/index.js +1 -0
  23. package/lib/date-time/style/index.less +7 -0
  24. package/lib/{descriptions → descriptions-list}/index.jsx +1 -3
  25. package/lib/descriptions-list/style/index.js +1 -0
  26. package/{plugins/lib/tree → lib/directory}/Directory.js +4 -21
  27. package/lib/directory/index.js +8 -0
  28. package/lib/directory/style/index.js +1 -0
  29. package/lib/{tree/style/Directory.less → directory/style/index.less} +3 -4
  30. package/{plugins/lib/form/components → lib/form-comp}/ACascaderMultiple.vue +1 -106
  31. package/lib/form-comp/ARadio.vue +70 -0
  32. package/lib/{form/components → form-comp}/ARangePicker.vue +9 -20
  33. package/lib/{form/components → form-comp}/ASelectCustom.vue +1 -8
  34. package/lib/form-comp/ATagsInput.vue +88 -0
  35. package/lib/form-comp/ATimePicker.vue +127 -0
  36. package/lib/{form/components → form-comp}/AUpload.vue +2 -17
  37. package/lib/form-comp/index.js +37 -0
  38. package/lib/form-comp/style/ACascaderMultiple.less +117 -0
  39. package/lib/form-comp/style/ARadio.less +0 -0
  40. package/lib/form-comp/style/ARangePicker.less +11 -0
  41. package/lib/form-comp/style/ASelectCustom.less +4 -0
  42. package/lib/form-comp/style/ATagsInput.less +24 -0
  43. package/lib/form-comp/style/ATimePicker.less +8 -0
  44. package/lib/form-comp/style/AUpload.less +15 -0
  45. package/lib/form-comp/style/index.js +1 -0
  46. package/lib/form-comp/style/index.less +7 -0
  47. package/lib/index.js +60 -45
  48. package/lib/modal/index.jsx +4 -6
  49. package/lib/modal/style/index.js +1 -0
  50. package/lib/modal/{index.less → style/index.less} +6 -7
  51. package/{plugins/lib/form → lib/model}/Model.js +1 -3
  52. package/lib/model/index.js +7 -0
  53. package/lib/model/style/index.js +1 -0
  54. package/lib/{form/style/Model.less → model/style/index.less} +10 -10
  55. package/{plugins/lib/form → lib/model}/utils/render.js +1 -1
  56. package/lib/{form → model}/utils/resetFields.js +1 -1
  57. package/lib/no-data/directive.js +65 -0
  58. package/lib/no-data/index.js +21 -0
  59. package/lib/no-data/index.vue +35 -0
  60. package/lib/no-data/style/index.js +1 -0
  61. package/lib/no-data/style/index.less +15 -0
  62. package/lib/search/index.js +7 -0
  63. package/{plugins/lib/form/Search.vue → lib/search/index.vue} +3 -6
  64. package/lib/search/style/index.js +1 -0
  65. package/{plugins/lib/form/style/Search.less → lib/search/style/index.less} +7 -8
  66. package/lib/style/mixins.less +1 -1
  67. package/lib/{svgIcon → svg-icon}/index.vue +1 -17
  68. package/lib/svg-icon/style/index.js +1 -0
  69. package/lib/svg-icon/style/index.less +15 -0
  70. package/lib/table/index.vue +4 -8
  71. package/lib/table/style/index.js +1 -0
  72. package/lib/table/style/index.less +12 -13
  73. package/lib/tree/index.js +2 -11
  74. package/{plugins/lib/tree/Tree.vue → lib/tree/index.vue} +2 -5
  75. package/lib/tree/style/index.js +1 -0
  76. package/{plugins/lib/tree/style/Tree.less → lib/tree/style/index.less} +4 -4
  77. package/lib/weather/index.vue +1 -9
  78. package/lib/weather/style/index.js +1 -0
  79. package/lib/weather/style/index.less +7 -0
  80. package/package.json +16 -34
  81. package/utils/Axios.js +91 -82
  82. package/utils/Postcss.js +12 -8
  83. package/README.md +0 -24
  84. package/dist/amap.umd.js +0 -12252
  85. package/dist/avatar.umd.js +0 -5337
  86. package/dist/button.umd.js +0 -5845
  87. package/dist/dateTime.umd.js +0 -1287
  88. package/dist/form.umd.js +0 -9981
  89. package/dist/multiTab.umd.js +0 -5556
  90. package/dist/svgIcon.umd.js +0 -1167
  91. package/dist/table.umd.js +0 -6306
  92. package/dist/tree.umd.js +0 -5393
  93. package/dist/weather.umd.js +0 -1167
  94. package/lib/amap/components/AmapSearch/index.less +0 -16
  95. package/lib/amap/index.js +0 -13
  96. package/lib/avatar/index.js +0 -7
  97. package/lib/avatar/index.vue +0 -47
  98. package/lib/basic/404.vue +0 -24
  99. package/lib/dateTime/index.vue +0 -43
  100. package/lib/form/Model.js +0 -153
  101. package/lib/form/Search.vue +0 -159
  102. package/lib/form/components/ACascaderMultiple.vue +0 -766
  103. package/lib/form/components/ARadio.vue +0 -74
  104. package/lib/form/components/ATagsInput.vue +0 -93
  105. package/lib/form/components/ATimePicker.vue +0 -73
  106. package/lib/form/index.js +0 -55
  107. package/lib/form/style/Search.less +0 -34
  108. package/lib/form/utils/render.js +0 -85
  109. package/lib/iframe/events.js +0 -2
  110. package/lib/iframe/index.jsx +0 -234
  111. package/lib/iframe/index.less +0 -19
  112. package/lib/multiTab/APIEnums.js +0 -17
  113. package/lib/multiTab/MultiTab.jsx +0 -237
  114. package/lib/multiTab/RouteAPI.js +0 -71
  115. package/lib/multiTab/RouteContent.jsx +0 -90
  116. package/lib/multiTab/RouteKeepAlive.js +0 -183
  117. package/lib/multiTab/events.js +0 -2
  118. package/lib/multiTab/index.js +0 -15
  119. package/lib/multiTab/index.less +0 -73
  120. package/lib/style/index.less +0 -2
  121. package/lib/tree/Directory.js +0 -428
  122. package/lib/tree/Tree.vue +0 -181
  123. package/lib/tree/style/Tree.less +0 -52
  124. package/method/Dialog.js +0 -134
  125. package/method/index.js +0 -12
  126. package/plugins/lib/amap/AmapDraw.jsx +0 -349
  127. package/plugins/lib/amap/AmapDraw.less +0 -45
  128. package/plugins/lib/amap/components/AmapSearch/index.jsx +0 -73
  129. package/plugins/lib/amap/index.js +0 -13
  130. package/plugins/lib/avatar/index.js +0 -7
  131. package/plugins/lib/avatar/index.vue +0 -47
  132. package/plugins/lib/basic/404.vue +0 -24
  133. package/plugins/lib/browse/index.jsx +0 -76
  134. package/plugins/lib/browse/index.less +0 -4
  135. package/plugins/lib/button/Button.js +0 -89
  136. package/plugins/lib/button/index.js +0 -7
  137. package/plugins/lib/dateTime/index.js +0 -7
  138. package/plugins/lib/descriptions/index.jsx +0 -108
  139. package/plugins/lib/descriptions/index.less +0 -15
  140. package/plugins/lib/form/components/ARadio.vue +0 -74
  141. package/plugins/lib/form/components/ARangePicker.vue +0 -129
  142. package/plugins/lib/form/components/ASelectCustom.vue +0 -226
  143. package/plugins/lib/form/components/ATagsInput.vue +0 -93
  144. package/plugins/lib/form/components/ATimePicker.vue +0 -73
  145. package/plugins/lib/form/components/AUpload.vue +0 -183
  146. package/plugins/lib/form/components/RenderComp.vue +0 -69
  147. package/plugins/lib/form/index.js +0 -55
  148. package/plugins/lib/form/style/Model.less +0 -53
  149. package/plugins/lib/form/utils/resetFields.js +0 -16
  150. package/plugins/lib/iframe/events.js +0 -2
  151. package/plugins/lib/iframe/index.jsx +0 -234
  152. package/plugins/lib/iframe/index.less +0 -19
  153. package/plugins/lib/index.js +0 -72
  154. package/plugins/lib/lazy_use.js +0 -40
  155. package/plugins/lib/modal/index.jsx +0 -53
  156. package/plugins/lib/modal/index.less +0 -50
  157. package/plugins/lib/multiTab/APIEnums.js +0 -17
  158. package/plugins/lib/multiTab/MultiTab.jsx +0 -237
  159. package/plugins/lib/multiTab/RouteAPI.js +0 -71
  160. package/plugins/lib/multiTab/RouteContent.jsx +0 -90
  161. package/plugins/lib/multiTab/RouteKeepAlive.js +0 -183
  162. package/plugins/lib/multiTab/events.js +0 -2
  163. package/plugins/lib/multiTab/index.js +0 -15
  164. package/plugins/lib/multiTab/index.less +0 -73
  165. package/plugins/lib/style/index.less +0 -2
  166. package/plugins/lib/style/mixins.less +0 -79
  167. package/plugins/lib/svgIcon/index.js +0 -7
  168. package/plugins/lib/svgIcon/index.vue +0 -77
  169. package/plugins/lib/table/index.js +0 -7
  170. package/plugins/lib/table/index.vue +0 -217
  171. package/plugins/lib/table/style/index.less +0 -50
  172. package/plugins/lib/tree/index.js +0 -17
  173. package/plugins/lib/tree/style/Directory.less +0 -119
  174. package/plugins/lib/weather/index.js +0 -7
  175. package/plugins/lib/weather/index.vue +0 -58
  176. package/plugins/method/AMap.js +0 -368
  177. package/plugins/method/PageLoading.jsx +0 -106
  178. package/plugins/method/Theme.js +0 -88
  179. package/plugins/method/index.js +0 -12
  180. package/plugins/store/auth.js +0 -31
  181. package/plugins/store/cache.js +0 -56
  182. package/plugins/store/chat.js +0 -74
  183. package/plugins/store/project.js +0 -46
  184. package/plugins/utils/Axios.js +0 -105
  185. package/plugins/utils/Base64.js +0 -314
  186. package/plugins/utils/Filter.js +0 -249
  187. package/plugins/utils/PostMessage.js +0 -16
  188. package/plugins/utils/Postcss.js +0 -9
  189. package/plugins/utils/Rem.js +0 -24
  190. package/plugins/utils/Request.js +0 -38
  191. package/plugins/utils/Storage.js +0 -73
  192. package/plugins/utils/Tree.js +0 -169
  193. package/plugins/utils/Utils.js +0 -51
  194. package/plugins/utils/Validate.js +0 -33
  195. package/plugins/utils/Websocket.js +0 -186
  196. package/utils/PostMessage.js +0 -16
  197. package/utils/Request.js +0 -38
  198. /package/{method → extensions}/PageLoading.jsx +0 -0
  199. /package/{method → extensions}/Theme.js +0 -0
  200. /package/{plugins/font → font}/DS-DIGI-1.ttf +0 -0
  201. /package/{plugins/font → font}/DS-DIGIB-2.ttf +0 -0
  202. /package/{plugins/font → font}/DS-DIGII-3.ttf +0 -0
  203. /package/{plugins/font → font}/DS-DIGIT-4.ttf +0 -0
  204. /package/{plugins/font → font}/Orbitron-Black.ttf +0 -0
  205. /package/{plugins/font → font}/Orbitron-Bold.ttf +0 -0
  206. /package/{plugins/font → font}/Orbitron-Medium.ttf +0 -0
  207. /package/{plugins/font → font}/Orbitron-Regular.ttf +0 -0
  208. /package/{plugins/font → font}/PANGMENZHENGDAOBIAOTITI-1.TTF +0 -0
  209. /package/{plugins/font → font}/PingFang SC.ttf +0 -0
  210. /package/{plugins/font → font}/YouSheBiaoTiHei.ttf +0 -0
  211. /package/{plugins/font → font}/font.css +0 -0
  212. /package/{plugins/font → font}//345/255/227/351/255/20235/345/217/267-/347/273/217/345/205/270/351/233/205/351/273/221.ttf" +0 -0
  213. /package/lib/browse/{index.less → style/index.less} +0 -0
  214. /package/{dist/css/index.css → lib/button/style/index.less} +0 -0
  215. /package/lib/{dateTime → date-time}/index.js +0 -0
  216. /package/lib/{descriptions → descriptions-list/style}/index.less +0 -0
  217. /package/lib/{form/components → form-comp}/RenderComp.vue +0 -0
  218. /package/lib/{svgIcon → svg-icon}/index.js +0 -0
@@ -1,766 +0,0 @@
1
- <template>
2
- <div
3
- class="gb-ant-select-multiple-cascader"
4
- :class="{ 'multiple-cascader-outside': !isClickOutSide }"
5
- v-clickoutside="handleDropDownOutSide"
6
- >
7
- <Select
8
- v-bind="$attrs"
9
- v-on="$listeners"
10
- mode="multiple"
11
- :maxTagTextLength="maxTagTextLength"
12
- :maxTagCount="maxTagCount"
13
- style="width:100%"
14
- :placeholder="placeholder"
15
- :value="selectedValueArr"
16
- :notFoundContent="null"
17
- :open="isOpen"
18
- showArrow
19
- :allowClear="allowClear"
20
- optionLabelProp="text"
21
- :dropdownMatchSelectWidth="false"
22
- :getPopupContainer="tirggerNode => tirggerNode.parentNode"
23
- @focus="handleFocus"
24
- @deselect="handleDeselect"
25
- >
26
- <Icon
27
- type="close-circle"
28
- slot="clearIcon"
29
- theme="filled"
30
- @click="handleClearAll"
31
- />
32
- <template slot="dropdownRender" slot-scope="menu">
33
- <v-nodes :vnodes="menu" />
34
- <div :class="dropdownClassName">
35
- <div class="cascader-not-content" v-if="treeDataList.length <= 0">
36
- <Empty :image="simpleImage" :description="noDataText" />
37
- </div>
38
- <div class="cascader-content-wrap" v-else>
39
- <div class="cascader-content-container">
40
- <ul
41
- class="cascader-content-list"
42
- v-for="(itemList, levelIndex) in treeDataList"
43
- :key="levelIndex"
44
- >
45
- <li
46
- class="cascader-content-item cascader-content-item-check-all"
47
- @click="handleCascaderAllItemClick(isCheckAll)"
48
- v-if="levelIndex === 0"
49
- >
50
- <Checkbox
51
- :indeterminate="isIndeterminateAll"
52
- v-model="isCheckAll"
53
- />
54
- <span class="checkbox-text">{{ allText }}</span>
55
- </li>
56
- <li
57
- class="cascader-content-item"
58
- v-for="(subItem, subIndex) in itemList"
59
- :key="subItem[selectOptionsConfig.key]"
60
- :title="subItem[selectOptionsConfig.text]"
61
- :class="{ 'cascader-content-item-active': subItem.$active }"
62
- @click="
63
- handleCascaderItemClick(subItem, subIndex, levelIndex)
64
- "
65
- >
66
- <Checkbox
67
- :indeterminate="!!subItem.$indeterminate"
68
- :checked="!!subItem.$checked"
69
- @click.self="
70
- e => handleCheckClick(e, subItem, subIndex, levelIndex)
71
- "
72
- />
73
- <span class="checkbox-text">{{
74
- subItem[selectOptionsConfig.text]
75
- }}</span>
76
- <Icon
77
- type="right"
78
- style="font-size:10px;"
79
- v-if="
80
- subItem[selectOptionsConfig.children] &&
81
- subItem[selectOptionsConfig.children].length > 0
82
- "
83
- />
84
- </li>
85
- </ul>
86
- </div>
87
- </div>
88
- </div>
89
- </template>
90
- <SelectOption
91
- v-for="item in treeToList"
92
- :key="item[selectOptionsConfig.key]"
93
- :value="item[selectOptionsConfig.value]"
94
- :text="item[selectOptionsConfig.text]"
95
- >
96
- {{ item[selectOptionsConfig.text] }}
97
- </SelectOption>
98
- </Select>
99
- </div>
100
- </template>
101
-
102
- <script>
103
- import { Icon, Empty, Select, Checkbox, Pagination } from 'ant-design-vue'
104
- import { cloneDeep } from "lodash";
105
- const clickoutside = {
106
- // 初始化指令
107
- bind(el, binding) {
108
- function documentHandler(e) {
109
- if (el.contains(e.target)) {
110
- return false;
111
- }
112
- if (binding.expression) {
113
- binding.value(e);
114
- }
115
- }
116
- el.__vueClickOutside__ = documentHandler;
117
- document.addEventListener("click", documentHandler);
118
- },
119
- update() {},
120
- unbind(el) {
121
- document.removeEventListener("click", el.__vueClickOutside__);
122
- delete el.__vueClickOutside__;
123
- }
124
- };
125
- export default {
126
- name: "gbAntSelectMultipleCascader",
127
- components: {
128
- VNodes: {
129
- functional: true,
130
- render: (h, ctx) => {
131
- return ctx.props.vnodes;
132
- }
133
- },
134
- Icon,
135
- Empty,
136
- Select,
137
- SelectOption: Select.Option,
138
- Checkbox,
139
- Pagination
140
- },
141
- directives: { clickoutside },
142
- props: {
143
- allowClear: {
144
- type: Boolean,
145
- default: true
146
- },
147
- allText: {
148
- type: String,
149
- default: "全部"
150
- },
151
- noDataText: {
152
- type: String,
153
- default: "暂无数据"
154
- },
155
- treeData: {
156
- type: Array,
157
- default: () => {
158
- return [];
159
- }
160
- },
161
- dropdownClassName: {
162
- type: String
163
- },
164
- selectOptionsConfig: {
165
- type: Object,
166
- default: () => {
167
- return {
168
- key: "id",
169
- value: "value",
170
- text: "title",
171
- children: "children"
172
- };
173
- }
174
- },
175
- // 最多显示多少个 而后简略
176
- maxTagCount: {
177
- type: Number
178
- },
179
- // tag字数,最大显示多少个,超出省略
180
- maxTagTextLength: {
181
- type: Number
182
- },
183
- placeholder: {
184
- type: String,
185
- default: "请搜索"
186
- },
187
- checkAll: {
188
- type: Boolean,
189
- default: false
190
- },
191
- value: {
192
- type: Array
193
- }
194
- },
195
- beforeCreate() {
196
- this.simpleImage = Empty.PRESENTED_IMAGE_SIMPLE;
197
- },
198
- destroyed() {
199
- this.timer && clearInterval(this.timer);
200
- },
201
- data() {
202
- return {
203
- isOpen: false,
204
- isCheckAll: this.checkAll,
205
- isIndeterminateAll: false,
206
- isClickOutSide: true,
207
- selectedValueArr: this.value || undefined,
208
- treeDataList: cloneDeep(this.treeData),
209
- treeToList: []
210
- };
211
- },
212
- watch: {
213
- checkAll: {
214
- handler(newVal) {
215
- if (newVal) {
216
- this.timer = setInterval(() => {
217
- if (this.treeDataList.length > 0) {
218
- clearInterval(this.timer);
219
- this.handleCascaderAllItemClick(!newVal);
220
- }
221
- }, 30);
222
- }
223
- },
224
- immediate: true
225
- },
226
- value: {
227
- handler(newVal) {
228
- this.selectedValueArr = newVal;
229
- this.initDefaultKeys(newVal, this.treeDataList);
230
- return newVal;
231
- },
232
- immediate: true
233
- },
234
- treeData(newVal) {
235
- this.treeListToArrList(newVal[0]);
236
- this.initDefaultKeys(this.selectedValueArr, newVal);
237
- this.treeDataList = newVal;
238
- return newVal;
239
- }
240
- },
241
- methods: {
242
- handleClearAll() {
243
- this.treeDataList = this.treeData;
244
- this.isOpen = false;
245
- this.isCheckAll = false;
246
- this.isClickOutSide = true;
247
- this.isIndeterminateAll = false;
248
- this.updatePostData();
249
- },
250
- initDefaultKeys(selectedArr, treeDataList) {
251
- if (
252
- selectedArr &&
253
- selectedArr.length > 0 &&
254
- treeDataList &&
255
- treeDataList.length > 0
256
- ) {
257
- const treeDataListClone = cloneDeep(treeDataList);
258
- const treeToListClone = cloneDeep(this.treeToList);
259
- selectedArr.forEach(item => {
260
- const curretnItemList = [];
261
- this.findKeysItem(treeDataListClone[0], item, curretnItemList);
262
- let currentItem = {};
263
- if (curretnItemList.length > 0) {
264
- currentItem = curretnItemList[0];
265
- }
266
- if (
267
- !treeToListClone.find(
268
- listItem =>
269
- listItem[this.selectOptionsConfig.value] ===
270
- currentItem[this.selectOptionsConfig.value]
271
- )
272
- ) {
273
- treeToListClone.push(currentItem);
274
- }
275
- currentItem.$checked = true;
276
- if (
277
- currentItem[this.selectOptionsConfig.children] &&
278
- currentItem[this.selectOptionsConfig.children].length > 0
279
- ) {
280
- this.setAllDataTreeChecked(
281
- currentItem[this.selectOptionsConfig.children],
282
- true
283
- );
284
- }
285
- });
286
- this.setCheckBoxIndeteriminate(treeDataListClone[0]);
287
- this.$nextTick(() => {
288
- this.treeToList = treeToListClone;
289
- this.treeDataList = treeDataListClone;
290
- });
291
- }
292
- },
293
- handleCascaderAllItemClick(checkAll) {
294
- const treeDataListClone = cloneDeep(this.treeDataList);
295
- // 触发事件的时候v-model中的数据还没有改变,所以要取反
296
- this.setAllDataTreeChecked(treeDataListClone[0], !checkAll);
297
- this.clearAllDataActive(treeDataListClone[0]);
298
- this.setCheckBoxIndeteriminate(treeDataListClone[0]);
299
- this.treeDataList = treeDataListClone;
300
- this.updatePostData();
301
- },
302
- handleDeselect(value) {
303
- const treeDataListClone = cloneDeep(this.treeDataList);
304
- const currentItemList = [];
305
- this.findKeysItem(treeDataListClone[0], value, currentItemList);
306
- let currentItem = {};
307
- if (currentItemList.length > 0) {
308
- currentItem = currentItemList[0];
309
- }
310
- currentItem.$checked = false;
311
- currentItem.$active = false;
312
- if (
313
- currentItem[this.selectOptionsConfig.children] &&
314
- currentItem[this.selectOptionsConfig.children].length > 0
315
- ) {
316
- this.setAllDataTreeChecked(
317
- currentItem[this.selectOptionsConfig.children],
318
- false
319
- );
320
- }
321
- this.setCheckBoxIndeteriminate(treeDataListClone[0]);
322
- this.treeDataList = treeDataListClone;
323
- this.updatePostData();
324
- },
325
- handleCheckClick(e, item, index, levelIndex) {
326
- const treeDataListClone = cloneDeep(this.treeDataList);
327
- const childrenTag = this.selectOptionsConfig.children;
328
- const valueTag = this.selectOptionsConfig.value;
329
- const currentItemList = [];
330
- this.findKeysItem(treeDataListClone[0], item[valueTag], currentItemList);
331
- let currentItem = {};
332
- if (currentItemList.length > 0) {
333
- currentItem = currentItemList[0];
334
- }
335
- e.stopPropagation();
336
- e.cancelBubble = true;
337
- const checked = e.target.checked;
338
- if (!currentItem.$active && levelIndex !== treeDataListClone.length - 1) {
339
- // 清空所有选中状态
340
- this.clearAllDataActive(treeDataListClone[0]);
341
- }
342
- if (currentItem[childrenTag] && currentItem[childrenTag].length > 0) {
343
- // 可展开
344
- if (!currentItem.$active) {
345
- const nextIndex = levelIndex + 1;
346
- if (treeDataListClone[nextIndex]) {
347
- treeDataListClone.splice(nextIndex);
348
- }
349
- }
350
- } else {
351
- // 不可展开
352
- const nextIndex = levelIndex + 1;
353
- if (treeDataListClone[nextIndex]) {
354
- treeDataListClone.splice(nextIndex);
355
- }
356
- }
357
- if (currentItem[childrenTag] && currentItem[childrenTag].length > 0) {
358
- this.setAllDataTreeChecked(currentItem[childrenTag], checked);
359
- } else {
360
- currentItem.$checked = checked;
361
- }
362
- this.setCheckBoxIndeteriminate(treeDataListClone[0]);
363
- this.treeDataList = treeDataListClone;
364
- this.$emit("handleCheckboxChange", {
365
- event: e,
366
- item,
367
- index,
368
- levelIndex
369
- });
370
- this.updatePostData();
371
- },
372
- // 单个item点击事件
373
- handleCascaderItemClick(item, index, levelIndex) {
374
- const treeDataListClone = cloneDeep(this.treeDataList);
375
- const childrenTag = this.selectOptionsConfig.children;
376
- const valueTag = this.selectOptionsConfig.value;
377
- const currentItemList = [];
378
- this.findKeysItem(treeDataListClone[0], item[valueTag], currentItemList);
379
- let currentItem = {};
380
- if (currentItemList.length > 0) {
381
- currentItem = currentItemList[0];
382
- }
383
- const parentItemsList = [];
384
- this.findAllParentItems(
385
- currentItem[valueTag],
386
- treeDataListClone[0],
387
- treeDataListClone[0],
388
- parentItemsList
389
- );
390
- parentItemsList.push(currentItem);
391
- this.clearAllDataActive(treeDataListClone[0]);
392
- parentItemsList.forEach(activeItem => {
393
- if (activeItem[childrenTag] && activeItem[childrenTag].length > 0) {
394
- activeItem.$active = true;
395
- }
396
- });
397
- if (currentItem[childrenTag] && currentItem[childrenTag].length > 0) {
398
- const nextIndex = levelIndex + 1;
399
- if (treeDataListClone[nextIndex]) {
400
- treeDataListClone.splice(nextIndex);
401
- treeDataListClone[nextIndex] = currentItem[childrenTag];
402
- } else {
403
- treeDataListClone.push(currentItem[childrenTag]);
404
- }
405
- this.addHideSelectedList(currentItem[childrenTag]);
406
- } else {
407
- const nextIndex = levelIndex + 1;
408
- if (treeDataListClone[nextIndex]) {
409
- treeDataListClone.splice(nextIndex);
410
- }
411
- currentItem.$checked = !currentItem.$checked;
412
- }
413
- this.setCheckBoxIndeteriminate(treeDataListClone[0]);
414
- this.treeDataList = treeDataListClone;
415
- this.updatePostData();
416
- },
417
- handleFocus() {
418
- this.isOpen = true;
419
- this.isClickOutSide = false;
420
- },
421
- updatePostData() {
422
- const childrenTag = this.selectOptionsConfig.children;
423
- const valueTag = this.selectOptionsConfig.value;
424
- let selectedValueArr = [];
425
- _getAllItemChecked(this.treeDataList[0]);
426
- this.$emit("change", selectedValueArr);
427
- this.$emit('input', selectedValueArr);
428
- function _getAllItemChecked(treeDataList) {
429
- let parentItem;
430
- treeDataList.forEach(item => {
431
- if (item[childrenTag] && item[childrenTag].length > 0) {
432
- parentItem = item;
433
- const currentCheckedAll = [];
434
- const currentCheckedAllItems = [];
435
- _getSubChecked(parentItem[childrenTag], currentCheckedAll);
436
- _getSubCheckedItems(
437
- parentItem[childrenTag],
438
- currentCheckedAllItems
439
- );
440
- if (currentCheckedAll.every(checkItem => checkItem === true)) {
441
- if (parentItem[valueTag]) {
442
- selectedValueArr.push(parentItem[valueTag]);
443
- }
444
- } else if (
445
- currentCheckedAll.some(checkItem => checkItem === true)
446
- ) {
447
- currentCheckedAllItems.forEach(selectedItem => {
448
- if (selectedItem[valueTag]) {
449
- selectedValueArr.push(selectedItem[valueTag]);
450
- }
451
- });
452
- }
453
- } else {
454
- if (item.$checked) {
455
- selectedValueArr.push(item[valueTag]);
456
- }
457
- }
458
- });
459
- }
460
- function _getSubChecked(itemList, arr) {
461
- itemList.forEach(item => {
462
- arr.push(!!item.$checked);
463
- if (item[childrenTag] && item[childrenTag].length > 0) {
464
- _getSubChecked(item[childrenTag], arr);
465
- }
466
- });
467
- }
468
- function _getSubCheckedItems(itemList, arr) {
469
- itemList.forEach(item => {
470
- if (item.$checked) {
471
- arr.push(item);
472
- } else {
473
- if (item[childrenTag] && item[childrenTag].length > 0) {
474
- _getSubCheckedItems(item[childrenTag], arr);
475
- }
476
- }
477
- });
478
- }
479
- },
480
- // 点击组件外部区域
481
- handleDropDownOutSide() {
482
- this.isOpen = false;
483
- this.isClickOutSide = true;
484
- },
485
- // 设置当前的选中框的全选等状态
486
- setCheckBoxIndeteriminate(treeDataList) {
487
- const childrenTag = this.selectOptionsConfig.children;
488
- _getAllItemChecked(treeDataList);
489
- const checkedAllArr = [];
490
- _getAllItemCheckedAll(treeDataList, checkedAllArr);
491
- if (checkedAllArr.every(item => item === true)) {
492
- this.isCheckAll = true;
493
- this.isIndeterminateAll = false;
494
- } else if (checkedAllArr.some(item => item === true)) {
495
- this.isCheckAll = false;
496
- this.isIndeterminateAll = true;
497
- } else if (checkedAllArr.every(item => item === false)) {
498
- this.isCheckAll = false;
499
- this.isIndeterminateAll = false;
500
- }
501
- function _getAllItemCheckedAll(itemList, arr) {
502
- itemList.forEach(item => {
503
- arr.push(!!item.$checked);
504
- if (item[childrenTag] && item[childrenTag].length > 0) {
505
- _getAllItemCheckedAll(item[childrenTag], arr);
506
- }
507
- });
508
- }
509
- function _getAllItemChecked(treeDataList) {
510
- let parentItem;
511
- treeDataList.forEach(item => {
512
- if (item[childrenTag] && item[childrenTag].length > 0) {
513
- parentItem = item;
514
- _getAllItemChecked(item[childrenTag]);
515
- const currentCheckedAll = [];
516
- _getSubChecked(parentItem[childrenTag], currentCheckedAll);
517
- if (currentCheckedAll.every(checkItem => checkItem === true)) {
518
- parentItem.$checked = true;
519
- parentItem.$indeterminate = false;
520
- } else if (
521
- currentCheckedAll.some(checkItem => checkItem === true)
522
- ) {
523
- parentItem.$checked = false;
524
- parentItem.$indeterminate = true;
525
- } else if (
526
- currentCheckedAll.every(checkItem => checkItem === false)
527
- ) {
528
- parentItem.$checked = false;
529
- parentItem.$indeterminate = false;
530
- }
531
- }
532
- });
533
- }
534
- function _getSubChecked(itemList, arr) {
535
- itemList.forEach(item => {
536
- arr.push(!!item.$checked);
537
- if (item[childrenTag] && item[childrenTag].length > 0) {
538
- _getSubChecked(item[childrenTag], arr);
539
- }
540
- });
541
- }
542
- },
543
- // 设置所有选中和非选中
544
- setAllDataTreeChecked(treeList, checked) {
545
- const childrenTag = this.selectOptionsConfig.children;
546
- treeList.forEach(item => {
547
- item.$checked = checked;
548
- if (item[childrenTag] && item[childrenTag].length > 0) {
549
- this.setAllDataTreeChecked(item[childrenTag], checked);
550
- }
551
- });
552
- },
553
- // 清空所有的active状态
554
- clearAllDataActive(treeList) {
555
- const childrenTag = this.selectOptionsConfig.children;
556
- treeList.forEach(item => {
557
- item.$active = false;
558
- if (item[childrenTag] && item[childrenTag].length > 0) {
559
- this.clearAllDataActive(item[childrenTag]);
560
- }
561
- });
562
- },
563
- findKeysItem(treeDataList, currentKey, currentItem) {
564
- const childrenTag = this.selectOptionsConfig.children;
565
- treeDataList.forEach(item => {
566
- if (item[this.selectOptionsConfig.value] === currentKey) {
567
- currentItem.push(item);
568
- } else {
569
- if (item[childrenTag] && item[childrenTag].length > 0) {
570
- this.findKeysItem(item[childrenTag], currentKey, currentItem);
571
- }
572
- }
573
- });
574
- },
575
- findAllParentItems(
576
- currentKey,
577
- treeDataList,
578
- originTreeDataList,
579
- parentItemsList,
580
- parentItem,
581
- parentItemsHasKey
582
- ) {
583
- if (parentItem && parentItemsHasKey) {
584
- parentItemsList.unshift(parentItem);
585
- this.findAllParentItems(
586
- parentItem[this.selectOptionsConfig.value],
587
- treeDataList,
588
- originTreeDataList,
589
- parentItemsList
590
- );
591
- } else {
592
- this.findKeysAndParentItem(
593
- currentKey,
594
- treeDataList,
595
- originTreeDataList,
596
- parentItemsList,
597
- parentItem,
598
- parentItemsHasKey
599
- );
600
- }
601
- },
602
- findKeysAndParentItem(
603
- currentKey,
604
- treeDataList,
605
- originTreeDataList,
606
- parentItemsList,
607
- parentItem
608
- ) {
609
- const childrenTag = this.selectOptionsConfig.children;
610
- treeDataList.forEach(item => {
611
- if (item[this.selectOptionsConfig.value] === currentKey && parentItem) {
612
- this.findAllParentItems(
613
- parentItem[this.selectOptionsConfig.value],
614
- originTreeDataList,
615
- originTreeDataList,
616
- parentItemsList,
617
- parentItem,
618
- true
619
- );
620
- } else {
621
- if (item[childrenTag] && item[childrenTag].length > 0) {
622
- this.findKeysAndParentItem(
623
- currentKey,
624
- item[childrenTag],
625
- originTreeDataList,
626
- parentItemsList,
627
- item
628
- );
629
- }
630
- }
631
- });
632
- },
633
- // 将树形结构数据转换成平面结构
634
- treeListToArrList(treeList) {
635
- const arrList = [];
636
- if (treeList && treeList[0]) {
637
- treeList.forEach(item => {
638
- arrList.push(item);
639
- });
640
- this.treeToList = arrList;
641
- }
642
- },
643
- addHideSelectedList(treeList) {
644
- const treeToListClone = Array.from(this.treeToList);
645
- treeList.forEach(item => {
646
- if (
647
- !treeToListClone.find(
648
- listItem =>
649
- listItem[this.selectOptionsConfig.value] ===
650
- item[this.selectOptionsConfig.value]
651
- )
652
- ) {
653
- treeToListClone.push(item);
654
- }
655
- });
656
- this.treeToList = treeToListClone;
657
- }
658
- }
659
- };
660
- </script>
661
- <style lang="less">
662
- .gb-ant-select-multiple-cascader {
663
- .ant-select-dropdown-menu-item {
664
- display: none;
665
- }
666
- .cascader-content-item {
667
- .checkbox-text {
668
- padding-left: 8px;
669
- font-size: 12px;
670
- color: #4a4a4a;
671
- cursor: default;
672
- flex: 1;
673
- overflow: hidden;
674
- text-overflow: ellipsis;
675
- white-space: nowrap;
676
- text-align: left;
677
- }
678
- &.cascader-content-item-active {
679
- background-color: rgba(66, 70, 86, 0.05);
680
- .checkbox-text {
681
- color: #1d47aa;
682
- }
683
- }
684
- .ant-checkbox-wrapper {
685
- .ant-checkbox-indeterminate {
686
- .ant-checkbox-inner {
687
- &:after {
688
- background-color: #1d47aa;
689
- left: 48%;
690
- }
691
- }
692
- }
693
- .ant-checkbox-inner {
694
- width: 14px;
695
- height: 14px;
696
- background-color: #fff;
697
- border-color: #7d8292;
698
- &:after {
699
- border-color: #1d47aa;
700
- left: 20%;
701
- }
702
- }
703
- }
704
- }
705
- .ant-select-dropdown--multiple {
706
- min-width: auto !important;
707
- }
708
- &.multiple-cascader-outside {
709
- .ant-select-arrow {
710
- transform: rotate(180deg);
711
- }
712
- }
713
- .ant-select-arrow {
714
- margin-top: -8px;
715
- transition: transform 0.3s;
716
- }
717
- .ant-select-dropdown-menu-root {
718
- display: none;
719
- }
720
- .cascader-content-right {
721
- .right-wrap {
722
- .ant-checkbox {
723
- top: 0;
724
- }
725
- }
726
- }
727
- }
728
- </style>
729
- <style lang="less" scoped>
730
- .gb-ant-select-multiple-cascader {
731
- position: relative;
732
- .cascader-content-wrap {
733
- height: 100%;
734
- .cascader-content-container {
735
- display: flex;
736
- flex-direction: row;
737
- .cascader-content-list {
738
- list-style: none;
739
- padding: 0;
740
- margin: 0;
741
- width: 153px;
742
- box-sizing: border-box;
743
- padding: 11px 0;
744
- max-height: 160px;
745
- overflow-y: auto;
746
- border-right: 1px solid rgba(222, 223, 226, 0.3);
747
- .cascader-content-item {
748
- padding: 5px 16px;
749
- margin-top: 5px;
750
- display: flex;
751
- flex-direction: row;
752
- align-items: center;
753
- line-height: 1;
754
- &:hover {
755
- background-color: rgba(66, 70, 86, 0.05);
756
- }
757
- }
758
- }
759
- }
760
- }
761
- .cascader-not-content {
762
- padding: 10px;
763
- }
764
- }
765
- </style>
766
-