vxe-pc-ui 4.11.28 → 4.11.29

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 (233) hide show
  1. package/README.md +6 -0
  2. package/es/backtop/index.js +12 -0
  3. package/es/backtop/src/backtop.js +231 -0
  4. package/es/backtop/style.css +90 -0
  5. package/es/backtop/style.min.css +1 -0
  6. package/es/cascader/index.js +12 -0
  7. package/es/cascader/src/cascader.js +669 -0
  8. package/es/cascader/style.css +168 -0
  9. package/es/cascader/style.min.css +1 -0
  10. package/es/components.js +18 -0
  11. package/es/icon/{iconfont.1767178201934.ttf → iconfont.1767441272505.ttf} +0 -0
  12. package/es/icon/iconfont.1767441272505.woff +0 -0
  13. package/es/icon/iconfont.1767441272505.woff2 +0 -0
  14. package/es/icon/style.css +9 -1
  15. package/es/icon/style.min.css +1 -1
  16. package/{lib/icon/style/iconfont.1767178201934.ttf → es/iconfont.1767441272505.ttf} +0 -0
  17. package/es/iconfont.1767441272505.woff +0 -0
  18. package/es/iconfont.1767441272505.woff2 +0 -0
  19. package/es/layout-body/src/layout-body.js +39 -6
  20. package/es/mention/index.js +12 -0
  21. package/es/mention/src/mention.js +51 -0
  22. package/es/mention/style.css +0 -0
  23. package/es/mention/style.min.css +0 -0
  24. package/es/segmented/index.js +12 -0
  25. package/es/segmented/src/segmented.js +218 -0
  26. package/es/segmented/style.css +195 -0
  27. package/es/segmented/style.min.css +1 -0
  28. package/es/style.css +1 -1
  29. package/es/style.min.css +1 -1
  30. package/es/tabs/src/tabs.js +1 -4
  31. package/es/timeline/index.js +12 -0
  32. package/es/timeline/src/timeline-item.js +46 -0
  33. package/es/timeline/src/timeline.js +51 -0
  34. package/es/timeline/style.css +0 -0
  35. package/es/timeline/style.min.css +0 -0
  36. package/es/timeline-item/index.js +12 -0
  37. package/es/timeline-item/style.css +0 -0
  38. package/es/timeline-item/style.min.css +0 -0
  39. package/es/tour/index.js +12 -0
  40. package/es/tour/src/tour.js +51 -0
  41. package/es/tour/style.css +0 -0
  42. package/es/tour/style.min.css +0 -0
  43. package/es/ui/index.js +15 -2
  44. package/es/ui/src/log.js +1 -1
  45. package/es/vxe-backtop/index.js +3 -0
  46. package/es/vxe-backtop/style.css +90 -0
  47. package/es/vxe-backtop/style.min.css +1 -0
  48. package/es/vxe-cascader/index.js +3 -0
  49. package/es/vxe-cascader/style.css +168 -0
  50. package/es/vxe-cascader/style.min.css +1 -0
  51. package/es/vxe-icon/style.css +9 -1
  52. package/es/vxe-icon/style.min.css +1 -1
  53. package/es/vxe-mention/index.js +3 -0
  54. package/es/vxe-mention/style.css +0 -0
  55. package/es/vxe-mention/style.min.css +0 -0
  56. package/es/vxe-segmented/index.js +3 -0
  57. package/es/vxe-segmented/style.css +195 -0
  58. package/es/vxe-segmented/style.min.css +1 -0
  59. package/es/vxe-timeline/index.js +3 -0
  60. package/es/vxe-timeline/style.css +0 -0
  61. package/es/vxe-timeline/style.min.css +0 -0
  62. package/es/vxe-timeline-item/index.js +3 -0
  63. package/es/vxe-timeline-item/style.css +0 -0
  64. package/es/vxe-timeline-item/style.min.css +0 -0
  65. package/es/vxe-tour/index.js +3 -0
  66. package/es/vxe-tour/style.css +0 -0
  67. package/es/vxe-tour/style.min.css +0 -0
  68. package/lib/backtop/index.js +19 -0
  69. package/lib/backtop/index.min.js +1 -0
  70. package/lib/backtop/src/backtop.js +256 -0
  71. package/lib/backtop/src/backtop.min.js +1 -0
  72. package/lib/backtop/style/index.js +1 -0
  73. package/lib/backtop/style/style.css +90 -0
  74. package/lib/backtop/style/style.min.css +1 -0
  75. package/lib/cascader/index.js +19 -0
  76. package/lib/cascader/index.min.js +1 -0
  77. package/lib/cascader/src/cascader.js +723 -0
  78. package/lib/cascader/src/cascader.min.js +1 -0
  79. package/lib/cascader/style/index.js +1 -0
  80. package/lib/cascader/style/style.css +168 -0
  81. package/lib/cascader/style/style.min.css +1 -0
  82. package/lib/components.js +73 -1
  83. package/lib/components.min.js +1 -1
  84. package/lib/{iconfont.1767178201934.ttf → icon/style/iconfont.1767441272505.ttf} +0 -0
  85. package/lib/icon/style/iconfont.1767441272505.woff +0 -0
  86. package/lib/icon/style/iconfont.1767441272505.woff2 +0 -0
  87. package/lib/icon/style/style.css +9 -1
  88. package/lib/icon/style/style.min.css +9 -1
  89. package/{es/iconfont.1767178201934.ttf → lib/iconfont.1767441272505.ttf} +0 -0
  90. package/lib/iconfont.1767441272505.woff +0 -0
  91. package/lib/iconfont.1767441272505.woff2 +0 -0
  92. package/lib/index.umd.js +5255 -3740
  93. package/lib/index.umd.min.js +1 -1
  94. package/lib/layout-body/src/layout-body.js +34 -4
  95. package/lib/layout-body/src/layout-body.min.js +1 -1
  96. package/lib/mention/index.js +19 -0
  97. package/lib/mention/index.min.js +1 -0
  98. package/lib/mention/src/mention.js +62 -0
  99. package/lib/mention/src/mention.min.js +1 -0
  100. package/lib/mention/style/index.js +1 -0
  101. package/lib/mention/style/style.css +0 -0
  102. package/lib/mention/style/style.min.css +0 -0
  103. package/lib/segmented/index.js +19 -0
  104. package/lib/segmented/index.min.js +1 -0
  105. package/lib/segmented/src/segmented.js +237 -0
  106. package/lib/segmented/src/segmented.min.js +1 -0
  107. package/lib/segmented/style/index.js +1 -0
  108. package/lib/segmented/style/style.css +195 -0
  109. package/lib/segmented/style/style.min.css +1 -0
  110. package/lib/style.css +1 -1
  111. package/lib/style.min.css +1 -1
  112. package/lib/tabs/src/tabs.js +1 -5
  113. package/lib/tabs/src/tabs.min.js +1 -1
  114. package/lib/timeline/index.js +19 -0
  115. package/lib/timeline/index.min.js +1 -0
  116. package/lib/timeline/src/timeline-item.js +57 -0
  117. package/lib/timeline/src/timeline-item.min.js +1 -0
  118. package/lib/timeline/src/timeline.js +62 -0
  119. package/lib/timeline/src/timeline.min.js +1 -0
  120. package/lib/timeline/style/index.js +1 -0
  121. package/lib/timeline/style/style.css +0 -0
  122. package/lib/timeline/style/style.min.css +0 -0
  123. package/lib/timeline-item/index.js +19 -0
  124. package/lib/timeline-item/index.min.js +1 -0
  125. package/lib/timeline-item/style/index.js +1 -0
  126. package/lib/timeline-item/style/style.css +0 -0
  127. package/lib/timeline-item/style/style.min.css +0 -0
  128. package/lib/tour/index.js +19 -0
  129. package/lib/tour/index.min.js +1 -0
  130. package/lib/tour/src/tour.js +62 -0
  131. package/lib/tour/src/tour.min.js +1 -0
  132. package/lib/tour/style/index.js +1 -0
  133. package/lib/tour/style/style.css +0 -0
  134. package/lib/tour/style/style.min.css +0 -0
  135. package/lib/ui/index.js +15 -2
  136. package/lib/ui/index.min.js +1 -1
  137. package/lib/ui/src/log.js +1 -1
  138. package/lib/ui/src/log.min.js +1 -1
  139. package/lib/vxe-backtop/index.js +22 -0
  140. package/lib/vxe-backtop/index.min.js +1 -0
  141. package/lib/vxe-backtop/style/index.js +1 -0
  142. package/lib/vxe-backtop/style/style.css +90 -0
  143. package/lib/vxe-backtop/style/style.min.css +1 -0
  144. package/lib/vxe-cascader/index.js +22 -0
  145. package/lib/vxe-cascader/index.min.js +1 -0
  146. package/lib/vxe-cascader/style/index.js +1 -0
  147. package/lib/vxe-cascader/style/style.css +168 -0
  148. package/lib/vxe-cascader/style/style.min.css +1 -0
  149. package/lib/vxe-icon/style/style.css +9 -1
  150. package/lib/vxe-icon/style/style.min.css +1 -1
  151. package/lib/vxe-mention/index.js +22 -0
  152. package/lib/vxe-mention/index.min.js +1 -0
  153. package/lib/vxe-mention/style/index.js +1 -0
  154. package/lib/vxe-mention/style/style.css +0 -0
  155. package/lib/vxe-mention/style/style.min.css +0 -0
  156. package/lib/vxe-segmented/index.js +22 -0
  157. package/lib/vxe-segmented/index.min.js +1 -0
  158. package/lib/vxe-segmented/style/index.js +1 -0
  159. package/lib/vxe-segmented/style/style.css +195 -0
  160. package/lib/vxe-segmented/style/style.min.css +1 -0
  161. package/lib/vxe-timeline/index.js +22 -0
  162. package/lib/vxe-timeline/index.min.js +1 -0
  163. package/lib/vxe-timeline/style/index.js +1 -0
  164. package/lib/vxe-timeline/style/style.css +0 -0
  165. package/lib/vxe-timeline/style/style.min.css +0 -0
  166. package/lib/vxe-timeline-item/index.js +22 -0
  167. package/lib/vxe-timeline-item/index.min.js +1 -0
  168. package/lib/vxe-timeline-item/style/index.js +1 -0
  169. package/lib/vxe-timeline-item/style/style.css +0 -0
  170. package/lib/vxe-timeline-item/style/style.min.css +0 -0
  171. package/lib/vxe-tour/index.js +22 -0
  172. package/lib/vxe-tour/index.min.js +1 -0
  173. package/lib/vxe-tour/style/index.js +1 -0
  174. package/lib/vxe-tour/style/style.css +0 -0
  175. package/lib/vxe-tour/style/style.min.css +0 -0
  176. package/package.json +1 -1
  177. package/packages/backtop/index.ts +16 -0
  178. package/packages/backtop/src/backtop.ts +264 -0
  179. package/packages/cascader/index.ts +16 -0
  180. package/packages/cascader/src/cascader.ts +739 -0
  181. package/packages/components.ts +18 -0
  182. package/packages/layout-body/src/layout-body.ts +43 -9
  183. package/packages/mention/index.ts +16 -0
  184. package/packages/mention/src/mention.ts +71 -0
  185. package/packages/segmented/index.ts +16 -0
  186. package/packages/segmented/src/segmented.ts +254 -0
  187. package/packages/tabs/src/tabs.ts +1 -4
  188. package/packages/timeline/index.ts +16 -0
  189. package/packages/timeline/src/timeline-item.ts +67 -0
  190. package/packages/timeline/src/timeline.ts +71 -0
  191. package/packages/timeline-item/index.ts +16 -0
  192. package/packages/tour/index.ts +16 -0
  193. package/packages/tour/src/tour.ts +71 -0
  194. package/packages/ui/index.ts +15 -1
  195. package/styles/all.scss +7 -0
  196. package/styles/components/backtop.scss +111 -0
  197. package/styles/components/cascader.scss +140 -0
  198. package/styles/components/icon.scss +9 -2
  199. package/styles/components/mention.scss +0 -0
  200. package/styles/components/segmented.scss +214 -0
  201. package/styles/components/timeline-item.scss +0 -0
  202. package/styles/components/timeline.scss +0 -0
  203. package/styles/components/tour.scss +0 -0
  204. package/styles/icon/iconfont.ttf +0 -0
  205. package/styles/icon/iconfont.woff +0 -0
  206. package/styles/icon/iconfont.woff2 +0 -0
  207. package/styles/theme/base.scss +4 -0
  208. package/types/all.d.ts +21 -0
  209. package/types/components/backtop.d.ts +111 -0
  210. package/types/components/cascader.d.ts +255 -0
  211. package/types/components/icon.d.ts +2 -2
  212. package/types/components/layout-body.d.ts +9 -0
  213. package/types/components/list.d.ts +2 -2
  214. package/types/components/mention.d.ts +77 -0
  215. package/types/components/rate.d.ts +1 -1
  216. package/types/components/segmented.d.ts +123 -0
  217. package/types/components/select.d.ts +1 -1
  218. package/types/components/table.d.ts +4 -4
  219. package/types/components/timeline-item.d.ts +75 -0
  220. package/types/components/timeline.d.ts +77 -0
  221. package/types/components/tour.d.ts +77 -0
  222. package/types/components/tree-select.d.ts +1 -1
  223. package/types/components/tree.d.ts +1 -1
  224. package/types/ui/global-config.d.ts +14 -0
  225. package/types/ui/global-icon.d.ts +3 -0
  226. package/es/icon/iconfont.1767178201934.woff +0 -0
  227. package/es/icon/iconfont.1767178201934.woff2 +0 -0
  228. package/es/iconfont.1767178201934.woff +0 -0
  229. package/es/iconfont.1767178201934.woff2 +0 -0
  230. package/lib/icon/style/iconfont.1767178201934.woff +0 -0
  231. package/lib/icon/style/iconfont.1767178201934.woff2 +0 -0
  232. package/lib/iconfont.1767178201934.woff +0 -0
  233. package/lib/iconfont.1767178201934.woff2 +0 -0
@@ -0,0 +1,723 @@
1
+ "use strict";
2
+
3
+ Object.defineProperty(exports, "__esModule", {
4
+ value: true
5
+ });
6
+ exports.default = void 0;
7
+ var _vue = require("vue");
8
+ var _comp = require("../../ui/src/comp");
9
+ var _ui = require("../../ui");
10
+ var _dom = require("../../ui/src/dom");
11
+ var _utils = require("../../ui/src/utils");
12
+ var _util = require("../../tree/src/util");
13
+ var _log = require("../../ui/src/log");
14
+ var _xeUtils = _interopRequireDefault(require("xe-utils"));
15
+ var _input = _interopRequireDefault(require("../../input/src/input"));
16
+ var _button = _interopRequireDefault(require("../../button/src/button"));
17
+ function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
18
+ function getOptUniqueId() {
19
+ return _xeUtils.default.uniqueId('node_');
20
+ }
21
+ function createInternalData() {
22
+ return {
23
+ // hpTimeout: undefined,
24
+ fullOptionList: [],
25
+ fullNodeMaps: {}
26
+ };
27
+ }
28
+ var _default = exports.default = (0, _comp.defineVxeComponent)({
29
+ name: 'VxeCascader',
30
+ props: {
31
+ modelValue: [String, Number, Array],
32
+ clearable: Boolean,
33
+ placeholder: {
34
+ type: String,
35
+ default: () => _xeUtils.default.eqNull((0, _ui.getConfig)().cascader.placeholder) ? (0, _ui.getI18n)('vxe.base.pleaseSelect') : (0, _ui.getConfig)().cascader.placeholder
36
+ },
37
+ readonly: {
38
+ type: Boolean,
39
+ default: null
40
+ },
41
+ loading: Boolean,
42
+ disabled: {
43
+ type: Boolean,
44
+ default: null
45
+ },
46
+ filterable: Boolean,
47
+ filterConfig: Object,
48
+ multiple: Boolean,
49
+ className: [String, Function],
50
+ prefixIcon: String,
51
+ placement: String,
52
+ transform: Boolean,
53
+ lazyOptions: Array,
54
+ options: Array,
55
+ optionProps: Object,
56
+ zIndex: Number,
57
+ size: {
58
+ type: String,
59
+ default: () => (0, _ui.getConfig)().cascader.size || (0, _ui.getConfig)().size
60
+ },
61
+ remote: Boolean,
62
+ remoteConfig: Function,
63
+ popupConfig: Object,
64
+ autoClose: {
65
+ type: Boolean,
66
+ default: () => (0, _ui.getConfig)().cascader.autoClose
67
+ },
68
+ showTotalButoon: {
69
+ type: Boolean,
70
+ default: () => (0, _ui.getConfig)().cascader.showTotalButoon
71
+ },
72
+ showCheckedButoon: {
73
+ type: Boolean,
74
+ default: () => (0, _ui.getConfig)().cascader.showCheckedButoon
75
+ },
76
+ showClearButton: {
77
+ type: Boolean,
78
+ default: () => (0, _ui.getConfig)().cascader.showClearButton
79
+ },
80
+ transfer: {
81
+ type: Boolean,
82
+ default: null
83
+ },
84
+ /**
85
+ * 已废弃,被 remote-config.queryMethod 替换
86
+ * @deprecated
87
+ */
88
+ remoteMethod: Function
89
+ },
90
+ emits: ['update:modelValue', 'change', 'all-change', 'clear', 'blur', 'focus', 'click', 'node-click'],
91
+ setup(props, context) {
92
+ const {
93
+ emit,
94
+ slots
95
+ } = context;
96
+ const $xeModal = (0, _vue.inject)('$xeModal', null);
97
+ const $xeDrawer = (0, _vue.inject)('$xeDrawer', null);
98
+ const $xeTable = (0, _vue.inject)('$xeTable', null);
99
+ const $xeForm = (0, _vue.inject)('$xeForm', null);
100
+ const formItemInfo = (0, _vue.inject)('xeFormItemInfo', null);
101
+ const xID = _xeUtils.default.uniqueId();
102
+ const {
103
+ computeSize
104
+ } = (0, _ui.useSize)(props);
105
+ const refElem = (0, _vue.ref)();
106
+ const refInput = (0, _vue.ref)();
107
+ const refInpSearch = (0, _vue.ref)();
108
+ const refTreeWrapper = (0, _vue.ref)();
109
+ const refOptionPanel = (0, _vue.ref)();
110
+ const refTree = (0, _vue.ref)();
111
+ const reactData = (0, _vue.reactive)({
112
+ initialized: false,
113
+ searchValue: '',
114
+ searchLoading: false,
115
+ panelIndex: 0,
116
+ panelStyle: {},
117
+ panelPlacement: null,
118
+ triggerFocusPanel: false,
119
+ visiblePanel: false,
120
+ isAniVisible: false,
121
+ isActivated: false
122
+ });
123
+ const internalData = createInternalData();
124
+ const refMaps = {
125
+ refElem
126
+ };
127
+ const computeFormReadonly = (0, _vue.computed)(() => {
128
+ const {
129
+ readonly
130
+ } = props;
131
+ if (readonly === null) {
132
+ if ($xeForm) {
133
+ return $xeForm.props.readonly;
134
+ }
135
+ return false;
136
+ }
137
+ return readonly;
138
+ });
139
+ const computeIsDisabled = (0, _vue.computed)(() => {
140
+ const {
141
+ disabled
142
+ } = props;
143
+ if (disabled === null) {
144
+ if ($xeForm) {
145
+ return $xeForm.props.disabled;
146
+ }
147
+ return false;
148
+ }
149
+ return disabled;
150
+ });
151
+ const computeBtnTransfer = (0, _vue.computed)(() => {
152
+ const {
153
+ transfer
154
+ } = props;
155
+ if (transfer === null) {
156
+ const globalTransfer = (0, _ui.getConfig)().select.transfer;
157
+ if (_xeUtils.default.isBoolean(globalTransfer)) {
158
+ return globalTransfer;
159
+ }
160
+ if ($xeTable || $xeModal || $xeDrawer || $xeForm) {
161
+ return true;
162
+ }
163
+ }
164
+ return transfer;
165
+ });
166
+ const computePopupOpts = (0, _vue.computed)(() => {
167
+ return Object.assign({}, (0, _ui.getConfig)().cascader.popupConfig, props.popupConfig);
168
+ });
169
+ const computePropsOpts = (0, _vue.computed)(() => {
170
+ return props.optionProps || {};
171
+ });
172
+ const computeNodeKeyField = (0, _vue.computed)(() => {
173
+ const valueField = computeValueField.value;
174
+ return valueField;
175
+ });
176
+ const computeLabelField = (0, _vue.computed)(() => {
177
+ const propsOpts = computePropsOpts.value;
178
+ return propsOpts.label || 'label';
179
+ });
180
+ const computeValueField = (0, _vue.computed)(() => {
181
+ const propsOpts = computePropsOpts.value;
182
+ return propsOpts.value || 'value';
183
+ });
184
+ const computeChildrenField = (0, _vue.computed)(() => {
185
+ const propsOpts = computePropsOpts.value;
186
+ return propsOpts.children || 'children';
187
+ });
188
+ const computeRemoteOpts = (0, _vue.computed)(() => {
189
+ return Object.assign({}, (0, _ui.getConfig)().cascader.remoteConfig, props.remoteConfig);
190
+ });
191
+ const computeSelectLabel = (0, _vue.computed)(() => {
192
+ const {
193
+ modelValue,
194
+ lazyOptions
195
+ } = props;
196
+ const {
197
+ fullNodeMaps
198
+ } = internalData;
199
+ const valueField = computeValueField.value;
200
+ const labelField = computeLabelField.value;
201
+ const selectVals = _xeUtils.default.eqNull(modelValue) ? [] : _xeUtils.default.isArray(modelValue) ? modelValue : [modelValue];
202
+ return selectVals.map(val => {
203
+ const cacheItem = fullNodeMaps[val];
204
+ if (cacheItem) {
205
+ return cacheItem.item[labelField];
206
+ }
207
+ if (lazyOptions) {
208
+ const lazyItem = lazyOptions.find(item => item[valueField] === val);
209
+ if (lazyItem) {
210
+ return lazyItem[labelField];
211
+ }
212
+ }
213
+ return val;
214
+ }).join(', ');
215
+ });
216
+ const computePopupWrapperStyle = (0, _vue.computed)(() => {
217
+ const popupOpts = computePopupOpts.value;
218
+ const {
219
+ height,
220
+ width
221
+ } = popupOpts;
222
+ const stys = {};
223
+ if (width) {
224
+ stys.width = (0, _dom.toCssUnit)(width);
225
+ }
226
+ if (height) {
227
+ stys.height = (0, _dom.toCssUnit)(height);
228
+ stys.maxHeight = (0, _dom.toCssUnit)(height);
229
+ }
230
+ return stys;
231
+ });
232
+ const computeMaps = {};
233
+ const $xeCascader = {
234
+ xID,
235
+ props,
236
+ context,
237
+ reactData,
238
+ internalData,
239
+ getRefMaps: () => refMaps,
240
+ getComputeMaps: () => computeMaps
241
+ };
242
+ const dispatchEvent = (type, params, evnt) => {
243
+ emit(type, (0, _ui.createEvent)(evnt, {
244
+ $cascader: $xeCascader
245
+ }, params));
246
+ };
247
+ const emitModel = value => {
248
+ emit('update:modelValue', value);
249
+ };
250
+ const cascaderMethods = {
251
+ dispatchEvent
252
+ };
253
+ const getNodeid = option => {
254
+ const nodeKeyField = computeNodeKeyField.value;
255
+ const nodeid = option[nodeKeyField];
256
+ return nodeid ? encodeURIComponent(nodeid) : '';
257
+ };
258
+ const cacheDataMap = () => {
259
+ const {
260
+ transform,
261
+ options
262
+ } = props;
263
+ const nodeKeyField = computeNodeKeyField.value;
264
+ const childrenField = computeChildrenField.value;
265
+ const valueField = computeValueField.value;
266
+ const nodeMaps = {};
267
+ const keyMaps = {};
268
+ const handleOptNode = (item, index, items, path, parent, nodes) => {
269
+ let nodeid = getNodeid(item);
270
+ if (!nodeid) {
271
+ nodeid = getOptUniqueId();
272
+ }
273
+ if (keyMaps[nodeid]) {
274
+ (0, _log.errLog)('vxe.error.repeatKey', [`[tree-select] ${nodeKeyField}`, nodeid]);
275
+ }
276
+ keyMaps[nodeid] = true;
277
+ const value = item[valueField];
278
+ if (nodeMaps[value]) {
279
+ (0, _log.errLog)('vxe.error.repeatKey', [`[tree-select] ${valueField}`, value]);
280
+ }
281
+ nodeMaps[value] = {
282
+ item,
283
+ index,
284
+ items,
285
+ parent,
286
+ nodes
287
+ };
288
+ };
289
+ if (options) {
290
+ if (transform) {
291
+ options.forEach((item, index, items) => {
292
+ handleOptNode(item, index, items, [], null, []);
293
+ });
294
+ } else {
295
+ _xeUtils.default.eachTree(options, handleOptNode, {
296
+ children: childrenField
297
+ });
298
+ }
299
+ }
300
+ internalData.fullOptionList = options || [];
301
+ internalData.fullNodeMaps = nodeMaps;
302
+ };
303
+ const updateZindex = () => {
304
+ const {
305
+ zIndex
306
+ } = props;
307
+ if (zIndex) {
308
+ reactData.panelIndex = zIndex;
309
+ } else if (reactData.panelIndex < (0, _utils.getLastZIndex)()) {
310
+ reactData.panelIndex = (0, _utils.nextZIndex)();
311
+ }
312
+ };
313
+ const updatePlacement = () => {
314
+ const {
315
+ placement
316
+ } = props;
317
+ const {
318
+ panelIndex
319
+ } = reactData;
320
+ const targetElem = refElem.value;
321
+ const panelElem = refOptionPanel.value;
322
+ const btnTransfer = computeBtnTransfer.value;
323
+ const handleStyle = () => {
324
+ const ppObj = (0, _dom.updatePanelPlacement)(targetElem, panelElem, {
325
+ placement,
326
+ teleportTo: btnTransfer
327
+ });
328
+ const panelStyle = Object.assign(ppObj.style, {
329
+ zIndex: panelIndex
330
+ });
331
+ reactData.panelStyle = panelStyle;
332
+ reactData.panelPlacement = ppObj.placement;
333
+ };
334
+ handleStyle();
335
+ return (0, _vue.nextTick)().then(handleStyle);
336
+ };
337
+ const showOptionPanel = () => {
338
+ const {
339
+ loading,
340
+ remote,
341
+ filterable
342
+ } = props;
343
+ const {
344
+ fullOptionList
345
+ } = internalData;
346
+ const isDisabled = computeIsDisabled.value;
347
+ const remoteOpts = computeRemoteOpts.value;
348
+ if (!loading && !isDisabled) {
349
+ clearTimeout(internalData.hpTimeout);
350
+ if (!reactData.initialized) {
351
+ reactData.initialized = true;
352
+ }
353
+ reactData.isActivated = true;
354
+ reactData.isAniVisible = true;
355
+ if (filterable) {
356
+ if (remote && remoteOpts.enabled && remoteOpts.autoLoad && !fullOptionList.length) {
357
+ handleSearchEvent();
358
+ }
359
+ }
360
+ setTimeout(() => {
361
+ reactData.visiblePanel = true;
362
+ handleFocusSearch();
363
+ }, 10);
364
+ updateZindex();
365
+ updatePlacement();
366
+ }
367
+ };
368
+ const hideOptionPanel = () => {
369
+ reactData.visiblePanel = false;
370
+ internalData.hpTimeout = setTimeout(() => {
371
+ reactData.isAniVisible = false;
372
+ }, 350);
373
+ };
374
+ const changeEvent = (evnt, selectValue, node) => {
375
+ const value = _xeUtils.default.isArray(selectValue) ? selectValue.map(_util.deNodeValue) : (0, _util.deNodeValue)(selectValue);
376
+ emitModel(value);
377
+ if (value !== props.modelValue) {
378
+ dispatchEvent('change', {
379
+ value,
380
+ node,
381
+ option: node
382
+ }, evnt);
383
+ // 自动更新校验状态
384
+ if ($xeForm && formItemInfo) {
385
+ $xeForm.triggerItemEvent(evnt, formItemInfo.itemConfig.field, value);
386
+ }
387
+ }
388
+ };
389
+ const clearValueEvent = (evnt, selectValue) => {
390
+ changeEvent(evnt, selectValue, null);
391
+ dispatchEvent('clear', {
392
+ value: selectValue
393
+ }, evnt);
394
+ };
395
+ const clearEvent = (params, evnt) => {
396
+ clearValueEvent(evnt, null);
397
+ hideOptionPanel();
398
+ };
399
+ const allCheckedPanelEvent = params => {
400
+ const {
401
+ $event
402
+ } = params;
403
+ const {
404
+ multiple,
405
+ autoClose
406
+ } = props;
407
+ const $tree = refTree.value;
408
+ if (multiple) {
409
+ if ($tree) {
410
+ $tree.setAllCheckboxNode(true).then(({
411
+ checkNodeKeys,
412
+ checkNodes
413
+ }) => {
414
+ changeEvent($event, checkNodeKeys, checkNodes[0]);
415
+ dispatchEvent('all-change', {
416
+ value: checkNodeKeys
417
+ }, $event);
418
+ if (autoClose) {
419
+ hideOptionPanel();
420
+ }
421
+ });
422
+ }
423
+ }
424
+ };
425
+ const clearCheckedPanelEvent = params => {
426
+ const {
427
+ $event
428
+ } = params;
429
+ const {
430
+ multiple,
431
+ autoClose
432
+ } = props;
433
+ const $tree = refTree.value;
434
+ if ($tree) {
435
+ const value = multiple ? [] : null;
436
+ $tree.clearCheckboxNode().then(() => {
437
+ if (autoClose) {
438
+ hideOptionPanel();
439
+ }
440
+ });
441
+ changeEvent($event, value, null);
442
+ dispatchEvent('clear', {
443
+ value
444
+ }, $event);
445
+ }
446
+ };
447
+ const handleGlobalMousewheelEvent = evnt => {
448
+ const {
449
+ visiblePanel
450
+ } = reactData;
451
+ const isDisabled = computeIsDisabled.value;
452
+ if (!isDisabled) {
453
+ if (visiblePanel) {
454
+ const panelElem = refOptionPanel.value;
455
+ if ((0, _dom.getEventTargetNode)(evnt, panelElem).flag) {
456
+ updatePlacement();
457
+ } else {
458
+ hideOptionPanel();
459
+ }
460
+ }
461
+ }
462
+ };
463
+ const handleGlobalMousedownEvent = evnt => {
464
+ const {
465
+ visiblePanel
466
+ } = reactData;
467
+ const isDisabled = computeIsDisabled.value;
468
+ if (!isDisabled) {
469
+ const el = refElem.value;
470
+ const panelElem = refOptionPanel.value;
471
+ reactData.isActivated = (0, _dom.getEventTargetNode)(evnt, el).flag || (0, _dom.getEventTargetNode)(evnt, panelElem).flag;
472
+ if (visiblePanel && !reactData.isActivated) {
473
+ hideOptionPanel();
474
+ }
475
+ }
476
+ };
477
+ const handleGlobalBlurEvent = () => {
478
+ const {
479
+ visiblePanel,
480
+ isActivated
481
+ } = reactData;
482
+ if (visiblePanel) {
483
+ hideOptionPanel();
484
+ }
485
+ if (isActivated) {
486
+ reactData.isActivated = false;
487
+ }
488
+ if (visiblePanel || isActivated) {
489
+ const $input = refInput.value;
490
+ if ($input) {
491
+ $input.blur();
492
+ }
493
+ }
494
+ };
495
+ const handleGlobalResizeEvent = () => {
496
+ const {
497
+ visiblePanel
498
+ } = reactData;
499
+ if (visiblePanel) {
500
+ updatePlacement();
501
+ }
502
+ };
503
+ const handleFocusSearch = () => {
504
+ if (props.filterable) {
505
+ (0, _vue.nextTick)(() => {
506
+ const inpSearch = refInpSearch.value;
507
+ if (inpSearch) {
508
+ inpSearch.focus();
509
+ }
510
+ });
511
+ }
512
+ };
513
+ const focusEvent = evnt => {
514
+ const isDisabled = computeIsDisabled.value;
515
+ if (!isDisabled) {
516
+ if (!reactData.visiblePanel) {
517
+ reactData.triggerFocusPanel = true;
518
+ showOptionPanel();
519
+ setTimeout(() => {
520
+ reactData.triggerFocusPanel = false;
521
+ }, 150);
522
+ }
523
+ }
524
+ dispatchEvent('focus', {}, evnt);
525
+ };
526
+ const clickEvent = evnt => {
527
+ togglePanelEvent(evnt);
528
+ dispatchEvent('click', {}, evnt);
529
+ };
530
+ const blurEvent = evnt => {
531
+ reactData.isActivated = false;
532
+ dispatchEvent('blur', {}, evnt);
533
+ };
534
+ const modelSearchEvent = value => {
535
+ reactData.searchValue = value;
536
+ };
537
+ const handleSearchEvent = () => {
538
+ const {
539
+ modelValue,
540
+ remote,
541
+ remoteMethod
542
+ } = props;
543
+ const {
544
+ searchValue
545
+ } = reactData;
546
+ const remoteOpts = computeRemoteOpts.value;
547
+ const queryMethod = remoteOpts.queryMethod || remoteMethod;
548
+ if (remote && queryMethod && remoteOpts.enabled) {
549
+ reactData.searchLoading = true;
550
+ Promise.resolve(queryMethod({
551
+ $cascader: $xeCascader,
552
+ searchValue,
553
+ value: modelValue
554
+ })).then(() => (0, _vue.nextTick)()).catch(() => (0, _vue.nextTick)()).finally(() => {
555
+ reactData.searchLoading = false;
556
+ });
557
+ }
558
+ };
559
+ const togglePanelEvent = params => {
560
+ const {
561
+ $event
562
+ } = params;
563
+ $event.preventDefault();
564
+ if (reactData.triggerFocusPanel) {
565
+ reactData.triggerFocusPanel = false;
566
+ } else {
567
+ if (reactData.visiblePanel) {
568
+ hideOptionPanel();
569
+ } else {
570
+ showOptionPanel();
571
+ }
572
+ }
573
+ };
574
+ const cascaderPrivateMethods = {};
575
+ Object.assign($xeCascader, cascaderMethods, cascaderPrivateMethods);
576
+ const renderVN = () => {
577
+ const {
578
+ className,
579
+ modelValue,
580
+ multiple,
581
+ loading,
582
+ filterable,
583
+ showTotalButoon,
584
+ showCheckedButoon,
585
+ showClearButton
586
+ } = props;
587
+ const {
588
+ initialized,
589
+ isActivated,
590
+ isAniVisible,
591
+ visiblePanel,
592
+ searchValue
593
+ } = reactData;
594
+ const vSize = computeSize.value;
595
+ const isDisabled = computeIsDisabled.value;
596
+ const selectLabel = computeSelectLabel.value;
597
+ const btnTransfer = computeBtnTransfer.value;
598
+ const formReadonly = computeFormReadonly.value;
599
+ const popupWrapperStyle = computePopupWrapperStyle.value;
600
+ const headerSlot = slots.header;
601
+ const footerSlot = slots.footer;
602
+ const prefixSlot = slots.prefix;
603
+ const popupOpts = computePopupOpts.value;
604
+ const popupClassName = popupOpts.className;
605
+ if (formReadonly) {
606
+ return (0, _vue.h)('div', {
607
+ ref: refElem,
608
+ class: ['vxe-cascader--readonly', className]
609
+ }, [(0, _vue.h)('span', {
610
+ class: 'vxe-cascader-label'
611
+ }, selectLabel)]);
612
+ }
613
+ const selectVals = _xeUtils.default.eqNull(modelValue) ? [] : _xeUtils.default.isArray(modelValue) ? modelValue : [modelValue];
614
+ return (0, _vue.h)('div', {
615
+ ref: refElem,
616
+ class: ['vxe-cascader', className ? _xeUtils.default.isFunction(className) ? className({
617
+ $cascader: $xeCascader
618
+ }) : className : '', {
619
+ [`size--${vSize}`]: vSize,
620
+ 'is--filterable': filterable,
621
+ 'is--visible': visiblePanel,
622
+ 'is--disabled': isDisabled,
623
+ 'is--loading': loading,
624
+ 'is--active': isActivated
625
+ }]
626
+ }, [(0, _vue.h)(_input.default, {
627
+ ref: refInput,
628
+ clearable: props.clearable,
629
+ placeholder: loading ? (0, _ui.getI18n)('vxe.select.loadingText') : props.placeholder,
630
+ readonly: true,
631
+ disabled: isDisabled,
632
+ type: 'text',
633
+ prefixIcon: props.prefixIcon,
634
+ suffixIcon: loading ? (0, _ui.getIcon)().TREE_SELECT_LOADED : visiblePanel ? (0, _ui.getIcon)().TREE_SELECT_OPEN : (0, _ui.getIcon)().TREE_SELECT_CLOSE,
635
+ modelValue: loading ? '' : selectLabel,
636
+ title: selectLabel,
637
+ onClear: clearEvent,
638
+ onClick: clickEvent,
639
+ onFocus: focusEvent,
640
+ onBlur: blurEvent,
641
+ onSuffixClick: togglePanelEvent
642
+ }, prefixSlot ? {
643
+ prefix: () => prefixSlot({})
644
+ } : {}), (0, _vue.h)(_vue.Teleport, {
645
+ to: 'body',
646
+ disabled: btnTransfer ? !initialized : true
647
+ }, [(0, _vue.h)('div', {
648
+ ref: refOptionPanel,
649
+ class: ['vxe-table--ignore-clear vxe-cascader--panel', popupClassName ? _xeUtils.default.isFunction(popupClassName) ? popupClassName({
650
+ $cascader: $xeCascader
651
+ }) : popupClassName : '', {
652
+ [`size--${vSize}`]: vSize,
653
+ 'is--transfer': btnTransfer,
654
+ 'ani--leave': !loading && isAniVisible,
655
+ 'ani--enter': !loading && visiblePanel
656
+ }],
657
+ placement: reactData.panelPlacement,
658
+ style: reactData.panelStyle
659
+ }, initialized ? [(0, _vue.h)('div', {
660
+ class: 'vxe-cascader--panel-wrapper'
661
+ }, [filterable ? (0, _vue.h)('div', {
662
+ class: 'vxe-cascader--panel-search'
663
+ }, [(0, _vue.h)(_input.default, {
664
+ ref: refInpSearch,
665
+ class: 'vxe-cascader-search--input',
666
+ modelValue: searchValue,
667
+ clearable: true,
668
+ disabled: false,
669
+ readonly: false,
670
+ placeholder: (0, _ui.getI18n)('vxe.cascader.search'),
671
+ prefixIcon: (0, _ui.getIcon)().INPUT_SEARCH,
672
+ 'onUpdate:modelValue': modelSearchEvent
673
+ })]) : (0, _ui.renderEmptyElement)($xeCascader), showTotalButoon || showCheckedButoon && multiple || showClearButton || headerSlot ? (0, _vue.h)('div', {
674
+ class: 'vxe-cascader--panel-header'
675
+ }, headerSlot ? headerSlot({}) : [(0, _vue.h)('div', {
676
+ class: 'vxe-cascader--header-button'
677
+ }, [showTotalButoon ? (0, _vue.h)('div', {
678
+ class: 'vxe-cascader--header-total'
679
+ }, (0, _ui.getI18n)('vxe.cascader.total', [selectVals.length])) : (0, _ui.renderEmptyElement)($xeCascader), (0, _vue.h)('div', {
680
+ class: 'vxe-cascader--header-btns'
681
+ }, [showCheckedButoon && multiple ? (0, _vue.h)(_button.default, {
682
+ content: (0, _ui.getI18n)('vxe.cascader.allChecked'),
683
+ mode: 'text',
684
+ onClick: allCheckedPanelEvent
685
+ }) : (0, _ui.renderEmptyElement)($xeCascader), showClearButton ? (0, _vue.h)(_button.default, {
686
+ content: (0, _ui.getI18n)('vxe.cascader.clearChecked'),
687
+ mode: 'text',
688
+ onClick: clearCheckedPanelEvent
689
+ }) : (0, _ui.renderEmptyElement)($xeCascader)])])]) : (0, _ui.renderEmptyElement)($xeCascader), (0, _vue.h)('div', {
690
+ class: 'vxe-cascader--panel-body'
691
+ }, [(0, _vue.h)('div', {
692
+ ref: refTreeWrapper,
693
+ class: 'vxe-cascader-tree--wrapper',
694
+ style: popupWrapperStyle
695
+ }, [])]), footerSlot ? (0, _vue.h)('div', {
696
+ class: 'vxe-cascader--panel-footer'
697
+ }, footerSlot({})) : (0, _ui.renderEmptyElement)($xeCascader)])] : [])])]);
698
+ };
699
+ (0, _vue.watch)(() => props.options, () => {
700
+ cacheDataMap();
701
+ });
702
+ cacheDataMap();
703
+ (0, _vue.onMounted)(() => {
704
+ _ui.globalEvents.on($xeCascader, 'mousewheel', handleGlobalMousewheelEvent);
705
+ _ui.globalEvents.on($xeCascader, 'mousedown', handleGlobalMousedownEvent);
706
+ _ui.globalEvents.on($xeCascader, 'blur', handleGlobalBlurEvent);
707
+ _ui.globalEvents.on($xeCascader, 'resize', handleGlobalResizeEvent);
708
+ });
709
+ (0, _vue.onUnmounted)(() => {
710
+ _ui.globalEvents.off($xeCascader, 'mousewheel');
711
+ _ui.globalEvents.off($xeCascader, 'mousedown');
712
+ _ui.globalEvents.off($xeCascader, 'blur');
713
+ _ui.globalEvents.off($xeCascader, 'resize');
714
+ _xeUtils.default.assign(internalData, createInternalData());
715
+ });
716
+ (0, _vue.provide)('$xeCascader', $xeCascader);
717
+ $xeCascader.renderVN = renderVN;
718
+ return $xeCascader;
719
+ },
720
+ render() {
721
+ return this.renderVN();
722
+ }
723
+ });