vxe-pc-ui 4.20.16 → 4.20.18

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 (309) hide show
  1. package/dist/all.esm.js +201 -33
  2. package/dist/style.css +1 -1
  3. package/dist/style.min.css +1 -1
  4. package/es/alert/style.css +22 -9
  5. package/es/alert/style.min.css +1 -1
  6. package/es/backtop/style.css +22 -13
  7. package/es/backtop/style.min.css +1 -1
  8. package/es/badge/style.css +2 -0
  9. package/es/badge/style.min.css +1 -1
  10. package/es/button/style.css +1 -2
  11. package/es/button/style.min.css +1 -1
  12. package/es/calendar/style.css +20 -13
  13. package/es/calendar/style.min.css +1 -1
  14. package/es/cascader/style.css +10 -0
  15. package/es/cascader/style.min.css +1 -1
  16. package/es/collapse/style.css +31 -21
  17. package/es/collapse/style.min.css +1 -1
  18. package/es/context-menu/style.css +6 -0
  19. package/es/context-menu/style.min.css +1 -1
  20. package/es/icon/style.css +1 -1
  21. package/es/icon-picker/style.css +10 -0
  22. package/es/icon-picker/style.min.css +1 -1
  23. package/es/language/ar-EG.js +4 -0
  24. package/es/language/de-DE.js +4 -0
  25. package/es/language/en-US.js +4 -0
  26. package/es/language/es-ES.js +4 -0
  27. package/es/language/fr-FR.js +7 -3
  28. package/es/language/hu-HU.js +4 -0
  29. package/es/language/hy-AM.js +4 -0
  30. package/es/language/id-ID.js +4 -0
  31. package/es/language/it-IT.js +4 -0
  32. package/es/language/ja-JP.js +4 -0
  33. package/es/language/ko-KR.js +4 -0
  34. package/es/language/ms-MY.js +4 -0
  35. package/es/language/nb-NO.js +4 -0
  36. package/es/language/pt-BR.js +4 -0
  37. package/es/language/ru-RU.js +4 -0
  38. package/es/language/th-TH.js +4 -0
  39. package/es/language/ug-CN.js +4 -0
  40. package/es/language/uk-UA.js +4 -0
  41. package/es/language/uz-UZ.js +4 -0
  42. package/es/language/vi-VN.js +4 -0
  43. package/es/language/zh-CHT.js +4 -0
  44. package/es/language/zh-CN.js +4 -0
  45. package/es/layout-container/style.css +6 -0
  46. package/es/layout-container/style.min.css +1 -1
  47. package/es/link/style.css +22 -10
  48. package/es/link/style.min.css +1 -1
  49. package/es/rate/style.css +22 -13
  50. package/es/rate/style.min.css +1 -1
  51. package/es/select/src/select.js +13 -2
  52. package/es/style.css +1 -1
  53. package/es/style.min.css +1 -1
  54. package/es/table-select/src/table-select.js +174 -29
  55. package/es/table-select/style.css +43 -16
  56. package/es/table-select/style.min.css +1 -1
  57. package/es/tabs/style.css +50 -0
  58. package/es/tabs/style.min.css +1 -1
  59. package/es/text/style.css +22 -10
  60. package/es/text/style.min.css +1 -1
  61. package/es/tip/style.css +20 -13
  62. package/es/tip/style.min.css +1 -1
  63. package/es/tree/style.css +6 -0
  64. package/es/tree/style.min.css +1 -1
  65. package/es/tree-select/src/tree-select.js +1 -1
  66. package/es/ui/index.js +9 -1
  67. package/es/ui/src/log.js +1 -1
  68. package/es/vxe-alert/style.css +22 -9
  69. package/es/vxe-alert/style.min.css +1 -1
  70. package/es/vxe-backtop/style.css +22 -13
  71. package/es/vxe-backtop/style.min.css +1 -1
  72. package/es/vxe-badge/style.css +2 -0
  73. package/es/vxe-badge/style.min.css +1 -1
  74. package/es/vxe-button/style.css +1 -2
  75. package/es/vxe-button/style.min.css +1 -1
  76. package/es/vxe-calendar/style.css +20 -13
  77. package/es/vxe-calendar/style.min.css +1 -1
  78. package/es/vxe-cascader/style.css +10 -0
  79. package/es/vxe-cascader/style.min.css +1 -1
  80. package/es/vxe-collapse/style.css +31 -21
  81. package/es/vxe-collapse/style.min.css +1 -1
  82. package/es/vxe-context-menu/style.css +6 -0
  83. package/es/vxe-context-menu/style.min.css +1 -1
  84. package/es/vxe-icon-picker/style.css +10 -0
  85. package/es/vxe-icon-picker/style.min.css +1 -1
  86. package/es/vxe-layout-container/style.css +6 -0
  87. package/es/vxe-layout-container/style.min.css +1 -1
  88. package/es/vxe-link/style.css +22 -10
  89. package/es/vxe-link/style.min.css +1 -1
  90. package/es/vxe-rate/style.css +22 -13
  91. package/es/vxe-rate/style.min.css +1 -1
  92. package/es/vxe-table-select/style.css +43 -16
  93. package/es/vxe-table-select/style.min.css +1 -1
  94. package/es/vxe-tabs/style.css +50 -0
  95. package/es/vxe-tabs/style.min.css +1 -1
  96. package/es/vxe-text/style.css +22 -10
  97. package/es/vxe-text/style.min.css +1 -1
  98. package/es/vxe-tip/style.css +20 -13
  99. package/es/vxe-tip/style.min.css +1 -1
  100. package/es/vxe-tree/style.css +6 -0
  101. package/es/vxe-tree/style.min.css +1 -1
  102. package/lib/alert/style/style.css +22 -9
  103. package/lib/alert/style/style.min.css +1 -1
  104. package/lib/backtop/style/style.css +22 -13
  105. package/lib/backtop/style/style.min.css +1 -1
  106. package/lib/badge/style/style.css +2 -0
  107. package/lib/badge/style/style.min.css +1 -1
  108. package/lib/button/style/style.css +1 -2
  109. package/lib/button/style/style.min.css +1 -1
  110. package/lib/calendar/style/style.css +20 -13
  111. package/lib/calendar/style/style.min.css +1 -1
  112. package/lib/cascader/style/style.css +10 -0
  113. package/lib/cascader/style/style.min.css +1 -1
  114. package/lib/collapse/style/style.css +31 -21
  115. package/lib/collapse/style/style.min.css +1 -1
  116. package/lib/context-menu/style/style.css +6 -0
  117. package/lib/context-menu/style/style.min.css +1 -1
  118. package/lib/icon/style/style.css +1 -1
  119. package/lib/icon/style/style.min.css +1 -1
  120. package/lib/icon-picker/style/style.css +10 -0
  121. package/lib/icon-picker/style/style.min.css +1 -1
  122. package/lib/index.umd.js +220 -43
  123. package/lib/index.umd.min.js +1 -1
  124. package/lib/language/ar-EG.js +4 -0
  125. package/lib/language/ar-EG.min.js +1 -1
  126. package/lib/language/ar-EG.umd.js +4 -0
  127. package/lib/language/de-DE.js +4 -0
  128. package/lib/language/de-DE.min.js +1 -1
  129. package/lib/language/de-DE.umd.js +4 -0
  130. package/lib/language/en-US.js +4 -0
  131. package/lib/language/en-US.min.js +1 -1
  132. package/lib/language/en-US.umd.js +4 -0
  133. package/lib/language/es-ES.js +4 -0
  134. package/lib/language/es-ES.min.js +1 -1
  135. package/lib/language/es-ES.umd.js +4 -0
  136. package/lib/language/fr-FR.js +4 -0
  137. package/lib/language/fr-FR.min.js +1 -1
  138. package/lib/language/fr-FR.umd.js +4 -0
  139. package/lib/language/hu-HU.js +4 -0
  140. package/lib/language/hu-HU.min.js +1 -1
  141. package/lib/language/hu-HU.umd.js +4 -0
  142. package/lib/language/hy-AM.js +4 -0
  143. package/lib/language/hy-AM.min.js +1 -1
  144. package/lib/language/hy-AM.umd.js +4 -0
  145. package/lib/language/id-ID.js +4 -0
  146. package/lib/language/id-ID.min.js +1 -1
  147. package/lib/language/id-ID.umd.js +4 -0
  148. package/lib/language/it-IT.js +4 -0
  149. package/lib/language/it-IT.min.js +1 -1
  150. package/lib/language/it-IT.umd.js +4 -0
  151. package/lib/language/ja-JP.js +4 -0
  152. package/lib/language/ja-JP.min.js +1 -1
  153. package/lib/language/ja-JP.umd.js +4 -0
  154. package/lib/language/ko-KR.js +4 -0
  155. package/lib/language/ko-KR.min.js +1 -1
  156. package/lib/language/ko-KR.umd.js +4 -0
  157. package/lib/language/ms-MY.js +4 -0
  158. package/lib/language/ms-MY.min.js +1 -1
  159. package/lib/language/ms-MY.umd.js +4 -0
  160. package/lib/language/nb-NO.js +4 -0
  161. package/lib/language/nb-NO.min.js +1 -1
  162. package/lib/language/nb-NO.umd.js +4 -0
  163. package/lib/language/pt-BR.js +4 -0
  164. package/lib/language/pt-BR.min.js +1 -1
  165. package/lib/language/pt-BR.umd.js +4 -0
  166. package/lib/language/ru-RU.js +4 -0
  167. package/lib/language/ru-RU.min.js +1 -1
  168. package/lib/language/ru-RU.umd.js +4 -0
  169. package/lib/language/th-TH.js +4 -0
  170. package/lib/language/th-TH.min.js +1 -1
  171. package/lib/language/th-TH.umd.js +4 -0
  172. package/lib/language/ug-CN.js +4 -0
  173. package/lib/language/ug-CN.min.js +1 -1
  174. package/lib/language/ug-CN.umd.js +4 -0
  175. package/lib/language/uk-UA.js +4 -0
  176. package/lib/language/uk-UA.min.js +1 -1
  177. package/lib/language/uk-UA.umd.js +4 -0
  178. package/lib/language/uz-UZ.js +4 -0
  179. package/lib/language/uz-UZ.min.js +1 -1
  180. package/lib/language/uz-UZ.umd.js +4 -0
  181. package/lib/language/vi-VN.js +4 -0
  182. package/lib/language/vi-VN.min.js +1 -1
  183. package/lib/language/vi-VN.umd.js +4 -0
  184. package/lib/language/zh-CHT.js +4 -0
  185. package/lib/language/zh-CHT.min.js +1 -1
  186. package/lib/language/zh-CHT.umd.js +4 -0
  187. package/lib/language/zh-CN.js +4 -0
  188. package/lib/language/zh-CN.min.js +1 -1
  189. package/lib/language/zh-CN.umd.js +4 -0
  190. package/lib/layout-container/style/style.css +6 -0
  191. package/lib/layout-container/style/style.min.css +1 -1
  192. package/lib/link/style/style.css +22 -10
  193. package/lib/link/style/style.min.css +1 -1
  194. package/lib/rate/style/style.css +22 -13
  195. package/lib/rate/style/style.min.css +1 -1
  196. package/lib/select/src/select.js +11 -8
  197. package/lib/select/src/select.min.js +1 -1
  198. package/lib/style.css +1 -1
  199. package/lib/style.min.css +1 -1
  200. package/lib/table-select/src/table-select.js +193 -32
  201. package/lib/table-select/src/table-select.min.js +1 -1
  202. package/lib/table-select/style/style.css +43 -16
  203. package/lib/table-select/style/style.min.css +1 -1
  204. package/lib/tabs/style/style.css +50 -0
  205. package/lib/tabs/style/style.min.css +1 -1
  206. package/lib/text/style/style.css +22 -10
  207. package/lib/text/style/style.min.css +1 -1
  208. package/lib/tip/style/style.css +20 -13
  209. package/lib/tip/style/style.min.css +1 -1
  210. package/lib/tree/style/style.css +6 -0
  211. package/lib/tree/style/style.min.css +1 -1
  212. package/lib/tree-select/src/tree-select.js +1 -1
  213. package/lib/tree-select/src/tree-select.min.js +1 -1
  214. package/lib/ui/index.js +9 -1
  215. package/lib/ui/index.min.js +1 -1
  216. package/lib/ui/src/log.js +1 -1
  217. package/lib/ui/src/log.min.js +1 -1
  218. package/lib/vxe-alert/style/style.css +22 -9
  219. package/lib/vxe-alert/style/style.min.css +1 -1
  220. package/lib/vxe-backtop/style/style.css +22 -13
  221. package/lib/vxe-backtop/style/style.min.css +1 -1
  222. package/lib/vxe-badge/style/style.css +2 -0
  223. package/lib/vxe-badge/style/style.min.css +1 -1
  224. package/lib/vxe-button/style/style.css +1 -2
  225. package/lib/vxe-button/style/style.min.css +1 -1
  226. package/lib/vxe-calendar/style/style.css +20 -13
  227. package/lib/vxe-calendar/style/style.min.css +1 -1
  228. package/lib/vxe-cascader/style/style.css +10 -0
  229. package/lib/vxe-cascader/style/style.min.css +1 -1
  230. package/lib/vxe-collapse/style/style.css +31 -21
  231. package/lib/vxe-collapse/style/style.min.css +1 -1
  232. package/lib/vxe-context-menu/style/style.css +6 -0
  233. package/lib/vxe-context-menu/style/style.min.css +1 -1
  234. package/lib/vxe-icon-picker/style/style.css +10 -0
  235. package/lib/vxe-icon-picker/style/style.min.css +1 -1
  236. package/lib/vxe-layout-container/style/style.css +6 -0
  237. package/lib/vxe-layout-container/style/style.min.css +1 -1
  238. package/lib/vxe-link/style/style.css +22 -10
  239. package/lib/vxe-link/style/style.min.css +1 -1
  240. package/lib/vxe-rate/style/style.css +22 -13
  241. package/lib/vxe-rate/style/style.min.css +1 -1
  242. package/lib/vxe-table-select/style/style.css +43 -16
  243. package/lib/vxe-table-select/style/style.min.css +1 -1
  244. package/lib/vxe-tabs/style/style.css +50 -0
  245. package/lib/vxe-tabs/style/style.min.css +1 -1
  246. package/lib/vxe-text/style/style.css +22 -10
  247. package/lib/vxe-text/style/style.min.css +1 -1
  248. package/lib/vxe-tip/style/style.css +20 -13
  249. package/lib/vxe-tip/style/style.min.css +1 -1
  250. package/lib/vxe-tree/style/style.css +6 -0
  251. package/lib/vxe-tree/style/style.min.css +1 -1
  252. package/package.json +1 -1
  253. package/packages/language/ar-EG.ts +4 -0
  254. package/packages/language/de-DE.ts +4 -0
  255. package/packages/language/en-US.ts +4 -0
  256. package/packages/language/es-ES.ts +4 -0
  257. package/packages/language/fr-FR.ts +907 -903
  258. package/packages/language/hu-HU.ts +4 -0
  259. package/packages/language/hy-AM.ts +4 -0
  260. package/packages/language/id-ID.ts +4 -0
  261. package/packages/language/it-IT.ts +4 -0
  262. package/packages/language/ja-JP.ts +4 -0
  263. package/packages/language/ko-KR.ts +4 -0
  264. package/packages/language/ms-MY.ts +4 -0
  265. package/packages/language/nb-NO.ts +4 -0
  266. package/packages/language/pt-BR.ts +4 -0
  267. package/packages/language/ru-RU.ts +4 -0
  268. package/packages/language/th-TH.ts +4 -0
  269. package/packages/language/ug-CN.ts +4 -0
  270. package/packages/language/uk-UA.ts +4 -0
  271. package/packages/language/uz-UZ.ts +4 -0
  272. package/packages/language/vi-VN.ts +4 -0
  273. package/packages/language/zh-CHT.ts +4 -0
  274. package/packages/language/zh-CN.ts +4 -0
  275. package/packages/select/src/select.ts +13 -2
  276. package/packages/table-select/src/table-select.ts +185 -30
  277. package/packages/tree-select/src/tree-select.ts +1 -1
  278. package/packages/ui/index.ts +8 -0
  279. package/styles/components/alert.scss +24 -9
  280. package/styles/components/backtop.scss +24 -13
  281. package/styles/components/badge.scss +4 -1
  282. package/styles/components/button.scss +1 -2
  283. package/styles/components/calendar.scss +21 -13
  284. package/styles/components/cascader.scss +8 -0
  285. package/styles/components/collapse.scss +32 -21
  286. package/styles/components/context-menu.scss +6 -0
  287. package/styles/components/icon-picker.scss +8 -0
  288. package/styles/components/layout-container.scss +6 -0
  289. package/styles/components/link.scss +24 -12
  290. package/styles/components/rate.scss +24 -13
  291. package/styles/components/table-select.scss +39 -13
  292. package/styles/components/tabs.scss +6 -0
  293. package/styles/components/text.scss +24 -12
  294. package/styles/components/tip.scss +21 -13
  295. package/styles/components/tree.scss +6 -0
  296. package/types/components/select.d.ts +12 -2
  297. package/types/components/table-select.d.ts +53 -3
  298. /package/es/icon/{iconfont.1792671792434.ttf → iconfont.1792740965539.ttf} +0 -0
  299. /package/es/icon/{iconfont.1792671792434.woff → iconfont.1792740965539.woff} +0 -0
  300. /package/es/icon/{iconfont.1792671792434.woff2 → iconfont.1792740965539.woff2} +0 -0
  301. /package/es/{iconfont.1792671792434.ttf → iconfont.1792740965539.ttf} +0 -0
  302. /package/es/{iconfont.1792671792434.woff → iconfont.1792740965539.woff} +0 -0
  303. /package/es/{iconfont.1792671792434.woff2 → iconfont.1792740965539.woff2} +0 -0
  304. /package/lib/icon/style/{iconfont.1792671792434.ttf → iconfont.1792740965539.ttf} +0 -0
  305. /package/lib/icon/style/{iconfont.1792671792434.woff → iconfont.1792740965539.woff} +0 -0
  306. /package/lib/icon/style/{iconfont.1792671792434.woff2 → iconfont.1792740965539.woff2} +0 -0
  307. /package/lib/{iconfont.1792671792434.ttf → iconfont.1792740965539.ttf} +0 -0
  308. /package/lib/{iconfont.1792671792434.woff → iconfont.1792740965539.woff} +0 -0
  309. /package/lib/{iconfont.1792671792434.woff2 → iconfont.1792740965539.woff2} +0 -0
@@ -23,8 +23,10 @@ export function getRowUniqueId () {
23
23
  function createReactData (): TableSelectReactData {
24
24
  return {
25
25
  initialized: false,
26
+ searchValue: '',
27
+ searchLoading: false,
28
+ tableData: [],
26
29
  tableColumns: [],
27
- fullOptionList: [],
28
30
  panelIndex: 0,
29
31
  panelStyle: {},
30
32
  panelPlacement: null,
@@ -39,7 +41,9 @@ function createInternalData (): TableSelectInternalData {
39
41
  return {
40
42
  // hpTimeout: undefined,
41
43
  // vpTimeout: undefined,
42
- fullRowMaps: {}
44
+ fullData: [],
45
+ afterVisibleList: [],
46
+ fullValMaps: {}
43
47
  }
44
48
  }
45
49
 
@@ -72,6 +76,13 @@ export default defineVxeComponent({
72
76
  options: Array as PropType<VxeTableSelectPropTypes.Options>,
73
77
  optionProps: Object as PropType<VxeTableSelectPropTypes.OptionProps>,
74
78
  lazyOptions: Array as PropType<VxeTableSelectPropTypes.LazyOptions>,
79
+ filterable: {
80
+ type: Boolean as PropType<VxeTableSelectPropTypes.Filterable>,
81
+ default: () => getConfig().tableSelect.filterable
82
+ },
83
+ filterConfig: Object as PropType<VxeTableSelectPropTypes.FilterConfig>,
84
+ remote: Boolean as PropType<VxeTableSelectPropTypes.Remote>,
85
+ remoteConfig: Object as PropType<VxeTableSelectPropTypes.RemoteConfig>,
75
86
  /**
76
87
  * 已废弃,请使用 popupConfig.zIndex
77
88
  * @deprecated
@@ -120,6 +131,7 @@ export default defineVxeComponent({
120
131
  const refInput = ref<VxeInputConstructor>()
121
132
  const refGridWrapper = ref<HTMLDivElement>()
122
133
  const refOptionPanel = ref<HTMLDivElement>()
134
+ const refInpSearch = ref<VxeInputConstructor>()
123
135
  const refGrid = ref<VxeGridInstance>()
124
136
 
125
137
  const reactData = reactive(createReactData())
@@ -217,6 +229,14 @@ export default defineVxeComponent({
217
229
  })
218
230
  })
219
231
 
232
+ const computeRemoteOpts = computed(() => {
233
+ return Object.assign({}, getConfig().tableSelect.remoteConfig, props.remoteConfig)
234
+ })
235
+
236
+ const computeFilterOpts = computed(() => {
237
+ return Object.assign({}, getConfig().tableSelect.filterConfig, props.filterConfig)
238
+ })
239
+
220
240
  const computeSelectGridOpts = computed(() => {
221
241
  const gridOpts = computeGridOpts.value
222
242
  const checkboxOpts = computeCheckboxOpts.value
@@ -231,15 +251,15 @@ export default defineVxeComponent({
231
251
  Object.assign(newProxyConfig.ajax, {
232
252
  query (params: VxeGridPropTypes.ProxyAjaxQueryParams, ...args: any[]) {
233
253
  return Promise.resolve(ajaxMethods(params, ...args)).then(rest => {
234
- let tableData = []
254
+ let currData = []
235
255
  if (pagerConfig) {
236
256
  const resultProp = resConfigs.result
237
- tableData = (XEUtils.isFunction(resultProp) ? resultProp({ data: rest, $table: null as any, $grid: null, $gantt: null }) : XEUtils.get(rest, resultProp || 'result')) || []
257
+ currData = (XEUtils.isFunction(resultProp) ? resultProp({ data: rest, $table: null as any, $grid: null, $gantt: null }) : XEUtils.get(rest, resultProp || 'result')) || []
238
258
  } else {
239
259
  const listProp = resConfigs.list
240
- tableData = (listProp ? (XEUtils.isFunction(listProp) ? listProp({ data: rest, $table: null as any, $grid: null, $gantt: null }) : XEUtils.get(rest, listProp)) : rest) || []
260
+ currData = (listProp ? (XEUtils.isFunction(listProp) ? listProp({ data: rest, $table: null as any, $grid: null, $gantt: null }) : XEUtils.get(rest, listProp)) : rest) || []
241
261
  }
242
- cacheDataMap(tableData || [])
262
+ cacheDataMap(currData || [])
243
263
  return rest
244
264
  })
245
265
  }
@@ -253,15 +273,14 @@ export default defineVxeComponent({
253
273
 
254
274
  const computeSelectLabel = computed(() => {
255
275
  const { modelValue, lazyOptions } = props
256
- const { fullOptionList } = reactData
257
- const { fullRowMaps } = internalData
276
+ const { fullValMaps, fullData } = internalData
258
277
  const valueField = computeValueField.value
259
278
  const labelField = computeLabelField.value
260
- if (!fullOptionList) {
279
+ if (!fullData) {
261
280
  return ''
262
281
  }
263
282
  return (XEUtils.isArray(modelValue) ? modelValue : [modelValue]).map(val => {
264
- const cacheItem = fullRowMaps[val]
283
+ const cacheItem = fullValMaps[val]
265
284
  if (cacheItem) {
266
285
  return cacheItem.item[labelField]
267
286
  }
@@ -336,7 +355,7 @@ export default defineVxeComponent({
336
355
  }
337
356
 
338
357
  const getRowsByValue = (modelValue: VxeTableSelectPropTypes.ModelValue) => {
339
- const { fullRowMaps } = internalData
358
+ const { fullValMaps } = internalData
340
359
  const checkboxOpts = computeCheckboxOpts.value
341
360
  const rowKeyField = computeRowKeyField.value
342
361
  const valueField = computeValueField.value
@@ -345,7 +364,7 @@ export default defineVxeComponent({
345
364
  const vals = XEUtils.eqNull(modelValue) ? [] : (XEUtils.isArray(modelValue) ? modelValue : [modelValue])
346
365
  if (checkboxOpts.reserve) {
347
366
  vals.forEach(val => {
348
- const cacheItem = fullRowMaps[val]
367
+ const cacheItem = fullValMaps[val]
349
368
  rows.push(cacheItem
350
369
  ? cacheItem.item
351
370
  : {
@@ -356,7 +375,7 @@ export default defineVxeComponent({
356
375
  })
357
376
  } else {
358
377
  vals.forEach(val => {
359
- const cacheItem = fullRowMaps[val]
378
+ const cacheItem = fullValMaps[val]
360
379
  if (cacheItem) {
361
380
  rows.push(cacheItem.item)
362
381
  }
@@ -382,7 +401,12 @@ export default defineVxeComponent({
382
401
  })
383
402
  }
384
403
 
385
- const loadTableColumn = (columns?: VxeTableSelectPropTypes.Columns) => {
404
+ const loadData = (data: any[]) => {
405
+ cacheDataMap(data)
406
+ handleData()
407
+ }
408
+
409
+ const loadColumn = (columns?: VxeTableSelectPropTypes.Columns) => {
386
410
  if (!columns || !columns.length) {
387
411
  return
388
412
  }
@@ -416,7 +440,7 @@ export default defineVxeComponent({
416
440
  reactData.tableColumns = tableCols
417
441
  }
418
442
 
419
- const cacheDataMap = (dataList?: any[]) => {
443
+ const cacheDataMap = (dataList: any[]) => {
420
444
  const { options } = props
421
445
  const rowKeyField = computeRowKeyField.value
422
446
  const valueField = computeValueField.value
@@ -425,13 +449,14 @@ export default defineVxeComponent({
425
449
  const rowMaps: Record<string, {
426
450
  item: any
427
451
  index: number
452
+ _index: number
428
453
  items: any[]
429
454
  parent: any
430
455
  nodes: any[]
431
456
  }> = {}
432
457
  const keyMaps: Record<string, boolean> = {}
433
458
  if (treeConfig) {
434
- // x
459
+ // 暂不支持
435
460
  } else {
436
461
  XEUtils.arrayEach(dataList || options || [], (item, index, items) => {
437
462
  let rowid = getRowid(item)
@@ -446,14 +471,53 @@ export default defineVxeComponent({
446
471
  if (rowMaps[value]) {
447
472
  errLog('vxe.error.repeatKey', [valueField, value])
448
473
  }
449
- rowMaps[value] = { item, index, items, parent: null, nodes: [] }
474
+ rowMaps[value] = { item, index, _index: index, items, parent: null, nodes: [] }
450
475
  })
451
476
  }
452
- reactData.fullOptionList = dataList || options || []
453
- internalData.fullRowMaps = pagerConfig ? Object.assign({}, internalData.fullRowMaps, rowMaps) : rowMaps
477
+ internalData.fullData = dataList || options || []
478
+ internalData.fullValMaps = pagerConfig ? Object.assign({}, internalData.fullValMaps, rowMaps) : rowMaps
479
+ handleOptList()
454
480
  updateModel(props.modelValue)
455
481
  }
456
482
 
483
+ const handleOptList = () => {
484
+ const { remote, modelValue, filterable } = props
485
+ const { searchValue } = reactData
486
+ const { fullData, fullValMaps } = internalData
487
+ const valueField = computeValueField.value
488
+ const labelField = computeLabelField.value
489
+ const filterOpts = computeFilterOpts.value
490
+ const frMethod = filterOpts.filterMethod
491
+ const searchStr = `${searchValue || ''}`.toLowerCase()
492
+ let avList: any[] = []
493
+ if (remote) {
494
+ avList = fullData
495
+ } else {
496
+ if (filterable && frMethod) {
497
+ avList = searchStr
498
+ ? fullData.filter(row => frMethod({
499
+ $tableSelect: $xeTableSelect,
500
+ row,
501
+ filterValue: searchValue,
502
+ value: modelValue
503
+ }))
504
+ : fullData
505
+ } else if (filterable) {
506
+ avList = searchStr ? fullData.filter(row => (`${row[labelField] || row[valueField]}`.toLowerCase().indexOf(searchStr) > -1)) : fullData
507
+ } else {
508
+ avList = fullData
509
+ }
510
+ }
511
+ avList.forEach((item, index) => {
512
+ const cacheItem = fullValMaps[item[valueField]]
513
+ if (cacheItem) {
514
+ cacheItem._index = index
515
+ }
516
+ })
517
+ internalData.afterVisibleList = avList
518
+ return nextTick()
519
+ }
520
+
457
521
  const updateZindex = () => {
458
522
  const popupOpts = computePopupOpts.value
459
523
  const customZIndex = popupOpts.zIndex || props.zIndex
@@ -489,8 +553,10 @@ export default defineVxeComponent({
489
553
  }
490
554
 
491
555
  const showOptionPanel = () => {
492
- const { loading } = props
556
+ const { loading, remote, filterable } = props
557
+ const { fullData } = internalData
493
558
  const isDisabled = computeIsDisabled.value
559
+ const remoteOpts = computeRemoteOpts.value
494
560
  if (!loading && !isDisabled) {
495
561
  if (internalData.vpTimeout) {
496
562
  clearTimeout(internalData.vpTimeout)
@@ -501,12 +567,18 @@ export default defineVxeComponent({
501
567
  if (!reactData.initialized) {
502
568
  reactData.initialized = true
503
569
  }
570
+ if (filterable) {
571
+ if (remote && remoteOpts.enabled && remoteOpts.autoLoad && !fullData.length) {
572
+ handleSearchEvent()
573
+ }
574
+ }
504
575
  reactData.isActivated = true
505
576
  reactData.isAniVisible = true
506
577
  internalData.vpTimeout = setTimeout(() => {
507
578
  reactData.visiblePanel = true
508
579
  updateModel(props.modelValue)
509
580
  internalData.vpTimeout = undefined
581
+ handleFocusSearch()
510
582
  updatePlacement()
511
583
  }, 10)
512
584
  updateZindex()
@@ -515,7 +587,14 @@ export default defineVxeComponent({
515
587
  }
516
588
 
517
589
  const hideOptionPanel = () => {
590
+ const { filterable } = props
591
+ const filterOpts = computeFilterOpts.value
518
592
  reactData.visiblePanel = false
593
+ if (filterable) {
594
+ if (filterOpts.clearOnClose) {
595
+ reactData.searchValue = ''
596
+ }
597
+ }
519
598
  if (internalData.vpTimeout) {
520
599
  clearTimeout(internalData.vpTimeout)
521
600
  }
@@ -528,6 +607,42 @@ export default defineVxeComponent({
528
607
  }, 350)
529
608
  }
530
609
 
610
+ const handleData = () => {
611
+ const { afterVisibleList } = internalData
612
+ reactData.tableData = afterVisibleList
613
+ return nextTick()
614
+ }
615
+
616
+ const modelSearchEvent = (value: string) => {
617
+ reactData.searchValue = value
618
+ }
619
+
620
+ const focusSearchEvent = () => {
621
+ reactData.isActivated = true
622
+ }
623
+
624
+ const handleSearchEvent = () => {
625
+ const { modelValue, remote } = props
626
+ const { searchValue } = reactData
627
+ const remoteOpts = computeRemoteOpts.value
628
+ const queryMethod = remoteOpts.queryMethod
629
+ if (remote && queryMethod && remoteOpts.enabled) {
630
+ reactData.searchLoading = true
631
+ Promise.resolve(
632
+ queryMethod({ $tableSelect: $xeTableSelect, searchValue, value: modelValue })
633
+ ).then(() => nextTick())
634
+ .catch(() => nextTick())
635
+ .finally(() => {
636
+ reactData.searchLoading = false
637
+ })
638
+ } else {
639
+ handleOptList()
640
+ handleData()
641
+ }
642
+ }
643
+
644
+ const triggerSearchEvent = XEUtils.debounce(handleSearchEvent, 350, { trailing: true })
645
+
531
646
  const changeEvent = (evnt: Event, selectValue: any, row: any) => {
532
647
  emitModel(selectValue)
533
648
  if (selectValue !== props.modelValue) {
@@ -597,6 +712,17 @@ export default defineVxeComponent({
597
712
  }
598
713
  }
599
714
 
715
+ const handleFocusSearch = () => {
716
+ if (props.filterable) {
717
+ nextTick(() => {
718
+ const inpSearch = refInpSearch.value
719
+ if (inpSearch) {
720
+ inpSearch.focus()
721
+ }
722
+ })
723
+ }
724
+ }
725
+
600
726
  const focusEvent = (evnt: FocusEvent) => {
601
727
  const isDisabled = computeIsDisabled.value
602
728
  if (!isDisabled) {
@@ -666,8 +792,8 @@ export default defineVxeComponent({
666
792
  Object.assign($xeTableSelect, tableSelectMethods, tableSelectPrivateMethods)
667
793
 
668
794
  const renderVN = () => {
669
- const { className, options, loading } = props
670
- const { initialized, isActivated, isAniVisible, visiblePanel, tableColumns } = reactData
795
+ const { className, loading, filterable, remote } = props
796
+ const { initialized, isActivated, isAniVisible, visiblePanel, tableColumns, searchValue, tableData, searchLoading } = reactData
671
797
  const vSize = computeSize.value
672
798
  const isDisabled = computeIsDisabled.value
673
799
  const selectLabel = computeSelectLabel.value
@@ -676,6 +802,7 @@ export default defineVxeComponent({
676
802
  const popupOpts = computePopupOpts.value
677
803
  const selectGridOpts = computeSelectGridOpts.value
678
804
  const rowOpts = computeRowOpts.value
805
+ const filterOpts = computeFilterOpts.value
679
806
  const popupWrapperStyle = computePopupWrapperStyle.value
680
807
  const { appendTo } = popupOpts
681
808
  const headerSlot = slots.header
@@ -697,6 +824,7 @@ export default defineVxeComponent({
697
824
  ref: refElem,
698
825
  class: ['vxe-table-select', className ? (XEUtils.isFunction(className) ? className({ $tableSelect: $xeTableSelect }) : className) : '', {
699
826
  [`size--${vSize}`]: vSize,
827
+ 'is--filterable': filterable,
700
828
  'is--visible': visiblePanel,
701
829
  'is--disabled': isDisabled,
702
830
  'is--loading': loading,
@@ -742,6 +870,26 @@ export default defineVxeComponent({
742
870
  h('div', {
743
871
  class: 'vxe-table-select--panel-wrapper'
744
872
  }, [
873
+ filterable
874
+ ? h('div', {
875
+ class: 'vxe-table-select--panel-search'
876
+ }, [
877
+ h(VxeInputComponent, {
878
+ ref: refInpSearch,
879
+ class: 'vxe-table-select-search--input',
880
+ modelValue: searchValue,
881
+ clearable: true,
882
+ disabled: false,
883
+ readonly: false,
884
+ placeholder: getI18n('vxe.treeSelect.search'),
885
+ prefixIcon: getIcon().INPUT_SEARCH,
886
+ 'onUpdate:modelValue': modelSearchEvent,
887
+ onFocus: focusSearchEvent,
888
+ onChange: triggerSearchEvent,
889
+ onSearch: triggerSearchEvent
890
+ })
891
+ ])
892
+ : renderEmptyElement($xeTableSelect),
745
893
  headerSlot
746
894
  ? h('div', {
747
895
  class: 'vxe-table-select--panel-header'
@@ -761,8 +909,9 @@ export default defineVxeComponent({
761
909
  ...gridEvents,
762
910
  class: 'vxe-table-select--grid',
763
911
  ref: refGrid,
912
+ loading: remote && searchLoading,
764
913
  rowConfig: rowOpts,
765
- data: options,
914
+ data: tableData,
766
915
  columns: tableColumns.length ? tableColumns : selectGridOpts.columns,
767
916
  height: '100%',
768
917
  autoResize: true,
@@ -777,10 +926,16 @@ export default defineVxeComponent({
777
926
  : renderEmptyElement($xeTableSelect)
778
927
  ])
779
928
  ]),
780
- footerSlot
929
+ footerSlot || (filterable && searchValue && !remote && filterOpts.showResultCount)
781
930
  ? h('div', {
782
931
  class: 'vxe-table-select--panel-footer'
783
- }, footerSlot({}))
932
+ }, footerSlot
933
+ ? footerSlot({})
934
+ : [
935
+ h('div', {
936
+ class: 'vxe-table-select--search-count'
937
+ }, searchLoading ? '' : getI18n('vxe.tableSelect.filterCount', [tableData.length]))
938
+ ])
784
939
  : renderEmptyElement($xeTableSelect)
785
940
  ])
786
941
  ]
@@ -789,20 +944,20 @@ export default defineVxeComponent({
789
944
  ])
790
945
  }
791
946
 
792
- watch(() => props.options, () => {
793
- cacheDataMap()
947
+ watch(() => props.options, (val) => {
948
+ loadData(val || [])
794
949
  })
795
950
 
796
951
  watch(() => props.columns, (val) => {
797
- loadTableColumn(val)
952
+ loadColumn(val)
798
953
  })
799
954
 
800
955
  watch(() => props.modelValue, (val) => {
801
956
  updateModel(val)
802
957
  })
803
958
 
804
- loadTableColumn(props.columns)
805
- cacheDataMap()
959
+ loadColumn(props.columns)
960
+ loadData(props.options || [])
806
961
 
807
962
  onMounted(() => {
808
963
  const { gridConfig } = props
@@ -98,7 +98,7 @@ export default defineVxeComponent({
98
98
  default: () => getConfig().treeSelect.size || getConfig().size
99
99
  },
100
100
  remote: Boolean as PropType<VxeTreeSelectPropTypes.Remote>,
101
- remoteConfig: Function as PropType<VxeTreeSelectPropTypes.RemoteConfig>,
101
+ remoteConfig: Object as PropType<VxeTreeSelectPropTypes.RemoteConfig>,
102
102
  showRadio: {
103
103
  type: Boolean as PropType<VxeTreeSelectPropTypes.ShowRadio>,
104
104
  default: () => getConfig().treeSelect.showRadio
@@ -416,6 +416,10 @@ setConfig({
416
416
  switch: {},
417
417
  tabPane: {},
418
418
  tableSelect: {
419
+ remoteConfig: {
420
+ enabled: true,
421
+ autoLoad: true
422
+ },
419
423
  gridConfig: {
420
424
  showOverflow: true,
421
425
  showHeaderOverflow: true,
@@ -495,6 +499,10 @@ setConfig({
495
499
  gt: 0,
496
500
  oSize: 2
497
501
  },
502
+ remoteConfig: {
503
+ enabled: true,
504
+ autoLoad: true
505
+ },
498
506
  treeConfig: {
499
507
  maxHeight: 300,
500
508
  radioConfig: {},
@@ -1,6 +1,26 @@
1
1
  @use 'sass:map';
2
2
  @use "sass:list";
3
3
 
4
+ // 局部变量
5
+ .vxe-alert {
6
+ --vxe-ui-alert-current-font-size: var(--vxe-ui-font-size-default);
7
+ &.size--xlarge {
8
+ --vxe-ui-alert-current-font-size: var(--vxe-ui-font-size-xlarge);
9
+ }
10
+ &.size--large {
11
+ --vxe-ui-alert-current-font-size: var(--vxe-ui-font-size-large);
12
+ }
13
+ &.size--medium {
14
+ --vxe-ui-alert-current-font-size: var(--vxe-ui-font-size-medium);
15
+ }
16
+ &.size--small {
17
+ --vxe-ui-alert-current-font-size: var(--vxe-ui-font-size-small);
18
+ }
19
+ &.size--mini {
20
+ --vxe-ui-alert-current-font-size: var(--vxe-ui-font-size-mini);
21
+ }
22
+ }
23
+
4
24
  $btnThemeList: (
5
25
  (
6
26
  name: "primary",
@@ -49,6 +69,10 @@ $btnThemeList: (
49
69
  margin-bottom: var(--vxe-ui-layout-padding-default);
50
70
  font-size: var(--vxe-ui-font-size-default);
51
71
  border-radius: var(--vxe-ui-base-border-radius);
72
+ &[class^="size--"],
73
+ &[class*=" size--"] {
74
+ font-size: var(--vxe-ui-alert-current-font-size);
75
+ }
52
76
  @for $index from 0 to list.length($btnThemeList) {
53
77
  $item: list.nth($btnThemeList, $index + 1);
54
78
  &.theme--#{map.get($item, name)} {
@@ -68,15 +92,6 @@ $btnThemeList: (
68
92
  }
69
93
  }
70
94
  }
71
- &.size--medium {
72
- font-size: var(--vxe-ui-font-size-medium);
73
- }
74
- &.size--small {
75
- font-size: var(--vxe-ui-font-size-small);
76
- }
77
- &.size--mini {
78
- font-size: var(--vxe-ui-font-size-mini);
79
- }
80
95
  }
81
96
  .vxe-alert--icon {
82
97
  display: flex;
@@ -1,6 +1,26 @@
1
1
  @use "sass:map";
2
2
  @use "sass:list";
3
3
 
4
+ // 局部变量
5
+ .vxe-backtop {
6
+ --vxe-ui-backtop-current-font-size: var(--vxe-ui-font-size-default);
7
+ &.size--xlarge {
8
+ --vxe-ui-backtop-current-font-size: var(--vxe-ui-font-size-xlarge);
9
+ }
10
+ &.size--large {
11
+ --vxe-ui-backtop-current-font-size: var(--vxe-ui-font-size-large);
12
+ }
13
+ &.size--medium {
14
+ --vxe-ui-backtop-current-font-size: var(--vxe-ui-font-size-medium);
15
+ }
16
+ &.size--small {
17
+ --vxe-ui-backtop-current-font-size: var(--vxe-ui-font-size-small);
18
+ }
19
+ &.size--mini {
20
+ --vxe-ui-backtop-current-font-size: var(--vxe-ui-font-size-mini);
21
+ }
22
+ }
23
+
4
24
  .vxe-backtop {
5
25
  display: inline-flex;
6
26
  flex-direction: column;
@@ -11,6 +31,10 @@
11
31
  font-family: var(--vxe-ui-font-family);
12
32
  cursor: pointer;
13
33
  z-index: 9;
34
+ &[class^="size--"],
35
+ &[class*=" size--"] {
36
+ font-size: var(--vxe-ui-backtop-current-font-size);
37
+ }
14
38
  &.is--visible {
15
39
  .vxe-backtop--content-wrapper {
16
40
  opacity: 1;
@@ -68,16 +92,3 @@
68
92
  .vxe-backtop--icon {
69
93
  font-size: 1.4em;
70
94
  }
71
-
72
- .vxe-backtop {
73
- font-size: var(--vxe-ui-font-size-default);
74
- &.size--medium {
75
- font-size: var(--vxe-ui-font-size-medium);
76
- }
77
- &.size--small {
78
- font-size: var(--vxe-ui-font-size-small);
79
- }
80
- &.size--mini {
81
- font-size: var(--vxe-ui-font-size-mini);
82
- }
83
- }
@@ -22,7 +22,10 @@
22
22
  position: relative;
23
23
  display: inline-block;
24
24
  vertical-align: middle;
25
- font-size: var(--vxe-ui-badge-current-font-size);
25
+ &[class^="size--"],
26
+ &[class*=" size--"] {
27
+ font-size: var(--vxe-ui-badge-current-font-size);
28
+ }
26
29
  &.is--dot {
27
30
  &::before {
28
31
  content: "";
@@ -52,8 +52,8 @@
52
52
  position: relative;
53
53
  background-color: var(--vxe-ui-layout-background-color);
54
54
  outline: 0;
55
- font-size: var(--vxe-ui-button-current-font-size);
56
55
  max-width: var(--vxe-ui-button-max-width);
56
+ font-size: var(--vxe-ui-button-current-font-size);
57
57
  overflow: hidden;
58
58
  text-overflow: ellipsis;
59
59
  white-space: nowrap;
@@ -296,7 +296,6 @@
296
296
 
297
297
  .vxe-button--dropdown-icon {
298
298
  display: inline-block;
299
- font-size: 12px;
300
299
  margin-left: 4px;
301
300
  @include baseMixin.createAnimationTransition(transform, .2s);
302
301
  }
@@ -1,10 +1,31 @@
1
1
  @use "sass:list";
2
2
 
3
+ // 局部变量
4
+ .vxe-calendar {
5
+ --vxe-ui-calendar-current-font-size: var(--vxe-ui-font-size-default);
6
+ &.size--xlarge {
7
+ --vxe-ui-calendar-current-font-size: var(--vxe-ui-font-size-xlarge);
8
+ }
9
+ &.size--large {
10
+ --vxe-ui-calendar-current-font-size: var(--vxe-ui-font-size-large);
11
+ }
12
+ &.size--medium {
13
+ --vxe-ui-calendar-current-font-size: var(--vxe-ui-font-size-medium);
14
+ }
15
+ &.size--small {
16
+ --vxe-ui-calendar-current-font-size: var(--vxe-ui-font-size-small);
17
+ }
18
+ &.size--mini {
19
+ --vxe-ui-calendar-current-font-size: var(--vxe-ui-font-size-mini);
20
+ }
21
+ }
22
+
3
23
  .vxe-calendar {
4
24
  color: var(--vxe-ui-font-color);
5
25
  display: flex;
6
26
  flex-direction: column;
7
27
  flex-shrink: 0;
28
+ font-size: var(--vxe-ui-calendar-current-font-size);
8
29
  width: 100%;
9
30
  height: 38em;
10
31
  border: 1px solid var(--vxe-ui-base-popup-border-color);
@@ -456,16 +477,3 @@
456
477
  display: block;
457
478
  }
458
479
  }
459
-
460
- .vxe-calendar {
461
- font-size: var(--vxe-ui-font-size-default);
462
- &.size--medium {
463
- font-size: var(--vxe-ui-font-size-medium);
464
- }
465
- &.size--small {
466
- font-size: var(--vxe-ui-font-size-small);
467
- }
468
- &.size--mini {
469
- font-size: var(--vxe-ui-font-size-mini);
470
- }
471
- }
@@ -6,6 +6,14 @@
6
6
  .vxe-cascader--panel {
7
7
  --vxe-ui-cascader-current-font-size: var(--vxe-ui-font-size-default);
8
8
  --vxe-ui-cascader-current-padding: var(--vxe-ui-layout-padding-default);
9
+ &.size--xlarge {
10
+ --vxe-ui-cascader-current-font-size: var(--vxe-ui-font-size-xlarge);
11
+ --vxe-ui-cascader-current-padding: var(--vxe-ui-layout-padding-xlarge);
12
+ }
13
+ &.size--large {
14
+ --vxe-ui-cascader-current-font-size: var(--vxe-ui-font-size-large);
15
+ --vxe-ui-cascader-current-padding: var(--vxe-ui-layout-padding-large);
16
+ }
9
17
  &.size--medium {
10
18
  --vxe-ui-cascader-current-font-size: var(--vxe-ui-font-size-medium);
11
19
  --vxe-ui-cascader-current-padding: var(--vxe-ui-layout-padding-medium);