plain-design 1.0.0-beta.99 → 3.0.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (498) hide show
  1. package/dist/plain-design.commonjs.min.js +2 -18
  2. package/dist/plain-design.commonjs.min.js.LICENSE.txt +18 -0
  3. package/dist/plain-design.min.css +22 -21
  4. package/dist/plain-design.min.js +2 -18
  5. package/dist/plain-design.min.js.LICENSE.txt +18 -0
  6. package/dist/report.html +3 -3
  7. package/package.json +42 -40
  8. package/src/packages/components/$address/createAddressService.tsx +8 -3
  9. package/src/packages/components/$ai/index.tsx +368 -0
  10. package/src/packages/components/$configuration/index.tsx +4 -2
  11. package/src/packages/components/$file/index.tsx +44 -1
  12. package/src/packages/components/$imageSelector/index.tsx +56 -0
  13. package/src/packages/components/$message/image.service.utils.tsx +1 -1
  14. package/src/packages/components/$object/createObjectService.tsx +6 -6
  15. package/src/packages/components/$object/object.conver.ts +3 -3
  16. package/src/packages/components/$object/object.service.utils.ts +2 -2
  17. package/src/packages/components/$ov/createOvService.ts +2 -2
  18. package/src/packages/components/$previewer/ImagePreviewerFixedContainer.tsx +6 -6
  19. package/src/packages/components/$previewer/index.tsx +1 -1
  20. package/src/packages/components/$search/SearchFooter.tsx +1 -1
  21. package/src/packages/components/$search/SearchList.tsx +2 -2
  22. package/src/packages/components/$search/SearchServicePanel.tsx +4 -4
  23. package/src/packages/components/$search/createSearchService.tsx +1 -1
  24. package/src/packages/components/$search/search-service.scss +1 -0
  25. package/src/packages/components/$search/search.utils.tsx +1 -1
  26. package/src/packages/components/$upload/upload.utils.ts +7 -6
  27. package/src/packages/components/Address/index.tsx +2 -2
  28. package/src/packages/components/AddressCascade/address-cascade.utils.ts +1 -1
  29. package/src/packages/components/AddressCascade/createAddressCascade.hooks.ts +1 -1
  30. package/src/packages/components/AddressCascade/createAddressCascade.multiple.tsx +5 -6
  31. package/src/packages/components/AddressCascade/createAddressCascade.single.tsx +6 -7
  32. package/src/packages/components/AddressCascade/index.tsx +1 -1
  33. package/src/packages/components/AiChatBox/ai-chat-box.scss +74 -0
  34. package/src/packages/components/AiChatBox/index.tsx +306 -0
  35. package/src/packages/components/Alert/index.tsx +1 -1
  36. package/src/packages/components/Application/index.tsx +1 -1
  37. package/src/packages/components/Application/service/createApplicationService.tsx +2 -2
  38. package/src/packages/components/Application/service/createApplicationServiceComponent.tsx +1 -1
  39. package/src/packages/components/Application/service/createApplicationServiceManager.tsx +2 -2
  40. package/src/packages/components/Application/service/useApplicationService.tsx +3 -3
  41. package/src/packages/components/Application/utils/application.utils.ts +3 -4
  42. package/src/packages/components/Application/utils/createServiceReadyObserver.ts +1 -1
  43. package/src/packages/components/ArrowStep/index.tsx +1 -1
  44. package/src/packages/components/ArrowStepGroup/index.tsx +2 -2
  45. package/src/packages/components/AutoLoadingObserver/index.tsx +3 -3
  46. package/src/packages/components/AutoTable/AutoTable.tsx +1 -1
  47. package/src/packages/components/AutoTable/auto-table.scss +25 -3
  48. package/src/packages/components/AutoTable/createTableOptionUser.tsx +3 -1
  49. package/src/packages/components/AutoTable/filter/useTableOption.filter.form.tsx +8 -5
  50. package/src/packages/components/AutoTable/filter/useTableOption.filter.search.tsx +2 -2
  51. package/src/packages/components/AutoTable/filter/useTableOption.filter.state.ts +12 -7
  52. package/src/packages/components/AutoTable/setting/useTableOption.setting.all.fitler.tsx +1 -1
  53. package/src/packages/components/AutoTable/setting/useTableOption.setting.cache.tsx +3 -3
  54. package/src/packages/components/AutoTable/setting/useTableOption.setting.config.tsx +59 -17
  55. package/src/packages/components/AutoTable/setting/useTableOption.setting.export.tsx +5 -30
  56. package/src/packages/components/AutoTable/setting/useTableOption.setting.import.tsx +3 -3
  57. package/src/packages/components/AutoTable/setting/useTableOption.setting.senior.filter.tsx +388 -385
  58. package/src/packages/components/AutoTable/setting/useTableOption.setting.senior.sort.tsx +15 -8
  59. package/src/packages/components/AutoTable/setting/useTableOption.setting.tsx +109 -109
  60. package/src/packages/components/AutoTable/setting/useTableOption.setting.utils.ts +2 -2
  61. package/src/packages/components/AutoTable/use/useTableOption.ai.tsx +640 -0
  62. package/src/packages/components/AutoTable/use/useTableOption.buttons.tsx +27 -17
  63. package/src/packages/components/AutoTable/use/useTableOption.cache.ts +2 -2
  64. package/src/packages/components/AutoTable/use/useTableOption.check.tsx +3 -3
  65. package/src/packages/components/AutoTable/use/useTableOption.column.popper.tsx +5 -5
  66. package/src/packages/components/AutoTable/use/useTableOption.confirm.tsx +2 -2
  67. package/src/packages/components/AutoTable/use/useTableOption.fill.tsx +8 -8
  68. package/src/packages/components/AutoTable/use/useTableOption.hooks.tsx +6 -4
  69. package/src/packages/components/AutoTable/use/useTableOption.loading.tsx +3 -3
  70. package/src/packages/components/AutoTable/use/useTableOption.methods.tsx +7 -4
  71. package/src/packages/components/AutoTable/use/useTableOption.pagination.tsx +3 -3
  72. package/src/packages/components/AutoTable/use/useTableOption.parent.tsx +5 -2
  73. package/src/packages/components/AutoTable/use/useTableOption.permission.tsx +1 -1
  74. package/src/packages/components/AutoTable/use/useTableOption.sort.ts +8 -7
  75. package/src/packages/components/AutoTable/use/useTableOption.state.tsx +1 -1
  76. package/src/packages/components/AutoTable/use/useTableOption.table.tsx +7 -5
  77. package/src/packages/components/AutoTable/use/useTableOption.tips.tsx +3 -3
  78. package/src/packages/components/AutoTable/use/useTableOptionKeyboard.tsx +13 -4
  79. package/src/packages/components/AutoTable/utils/AutoModule.ts +1 -1
  80. package/src/packages/components/AutoTable/utils/AutoTable.utils.ts +76 -1
  81. package/src/packages/components/AutoTable/utils/TableOption.space.tsx +10 -6
  82. package/src/packages/components/AutoTable/utils/TableOption.url.ts +1 -1
  83. package/src/packages/components/AutoTable/utils/TableOption.utils.tsx +3 -3
  84. package/src/packages/components/AutoTable/utils/buildPlainDefaultUrlConfig.ts +6 -6
  85. package/src/packages/components/AutoWidthInput/index.tsx +2 -2
  86. package/src/packages/components/Badge/badge.scss +4 -0
  87. package/src/packages/components/Badge/index.tsx +1 -1
  88. package/src/packages/components/Box/index.tsx +31 -30
  89. package/src/packages/components/Button/index.tsx +11 -4
  90. package/src/packages/components/ButtonGroup/index.tsx +2 -2
  91. package/src/packages/components/Card/index.tsx +2 -2
  92. package/src/packages/components/Carousel/index.tsx +8 -8
  93. package/src/packages/components/CarouselItem/index.tsx +3 -3
  94. package/src/packages/components/Cascade/CascadeKeys.tsx +158 -0
  95. package/src/packages/components/Cascade/cascade.utils.ts +1 -1
  96. package/src/packages/components/Cascade/createCascadeHooks.ts +1 -1
  97. package/src/packages/components/Cascade/createCascadePopper.tsx +5 -4
  98. package/src/packages/components/Cascade/createCascadeUtils.ts +2 -2
  99. package/src/packages/components/Cascade/createMultipleCascadeRender.tsx +5 -6
  100. package/src/packages/components/Cascade/createSingleCascadeRender.tsx +7 -7
  101. package/src/packages/components/Cascade/index.tsx +3 -3
  102. package/src/packages/components/CascadeKeys/index.tsx +5 -0
  103. package/src/packages/components/CascadePanel/cascade-panel.utils.ts +3 -3
  104. package/src/packages/components/CascadePanel/flat/CascadeFlatPanelNode.tsx +1 -1
  105. package/src/packages/components/CascadePanel/flat/createCascadeFlatRender.tsx +14 -9
  106. package/src/packages/components/CascadePanel/index.tsx +22 -4
  107. package/src/packages/components/CascadePanel/list/CascadeListPanelItem.tsx +1 -1
  108. package/src/packages/components/CascadePanel/list/CascadeListPanelNode.tsx +1 -1
  109. package/src/packages/components/CascadePanel/list/createCascadeListRender.tsx +6 -2
  110. package/src/packages/components/Checkbox/index.tsx +8 -10
  111. package/src/packages/components/CheckboxGroup/index.tsx +1 -1
  112. package/src/packages/components/CheckboxInner/index.tsx +1 -1
  113. package/src/packages/components/Collapse/index.tsx +2 -2
  114. package/src/packages/components/CollapseGroup/index.tsx +1 -1
  115. package/src/packages/components/CollapseTransition/index.tsx +5 -5
  116. package/src/packages/components/ColorPicker/ColorPanel.tsx +146 -125
  117. package/src/packages/components/ColorPicker/color-panel.scss +117 -97
  118. package/src/packages/components/ColorPicker/index.tsx +144 -131
  119. package/src/packages/components/ColorPicker/sub/ColorAlphaSlider.tsx +1 -1
  120. package/src/packages/components/ColorPicker/sub/ColorHueSlider.tsx +1 -1
  121. package/src/packages/components/ColorPicker/sub/ColorSlider.tsx +5 -5
  122. package/src/packages/components/ColorPicker/sub/ColorSvPanel.tsx +4 -4
  123. package/src/packages/components/ColorPicker/useColorPanelEditor.tsx +1 -1
  124. package/src/packages/components/ColorPicker/useColorPanelHistory.tsx +1 -1
  125. package/src/packages/components/ColorPicker/utils/color-picker.utils.tsx +1 -1
  126. package/src/packages/components/ConfirmPopup/index.tsx +1 -1
  127. package/src/packages/components/Corner/index.tsx +3 -3
  128. package/src/packages/components/DatePicker/createDateRender.multiple.tsx +7 -7
  129. package/src/packages/components/DatePicker/createDateRender.single.tsx +8 -7
  130. package/src/packages/components/DatePicker/createRangeDateRender.range.tsx +3 -3
  131. package/src/packages/components/DatePicker/createRangeDateRender.separate.tsx +3 -3
  132. package/src/packages/components/DatePicker/date.utils.tsx +2 -2
  133. package/src/packages/components/DatePicker/index.tsx +3 -1
  134. package/src/packages/components/DatePicker/panel/DatePanel.tsx +1 -1
  135. package/src/packages/components/DatePicker/panel/DatePanelDate.tsx +2 -2
  136. package/src/packages/components/DatePicker/panel/DatePanelMonth.tsx +1 -1
  137. package/src/packages/components/DatePicker/panel/DatePanelQuarter.tsx +1 -1
  138. package/src/packages/components/DatePicker/panel/DatePanelRange.tsx +1 -1
  139. package/src/packages/components/DatePicker/panel/DatePanelWeek.tsx +1 -1
  140. package/src/packages/components/DatePicker/panel/DatePanelYear.tsx +1 -1
  141. package/src/packages/components/DatePicker/panel/useDatePanel.tsx +2 -2
  142. package/src/packages/components/DatePicker/panel/useDateWeek.tsx +2 -2
  143. package/src/packages/components/DatePicker/useRangeDateRender.tsx +8 -8
  144. package/src/packages/components/Dialog/index.tsx +11 -7
  145. package/src/packages/components/Dialog/useDialogMovable.tsx +1 -1
  146. package/src/packages/components/Dialog/utils/dialog.utils.ts +1 -1
  147. package/src/packages/components/Dropdown/dropdown.utils.tsx +2 -3
  148. package/src/packages/components/Dropdown/index.tsx +18 -5
  149. package/src/packages/components/DropdownGroup/index.tsx +1 -1
  150. package/src/packages/components/DropdownOption/index.tsx +2 -2
  151. package/src/packages/components/DropdownSeparator/index.tsx +1 -1
  152. package/src/packages/components/Empty/index.tsx +1 -1
  153. package/src/packages/components/FilterFormMultiple/index.tsx +12 -7
  154. package/src/packages/components/FilterFormSingle/index.tsx +178 -173
  155. package/src/packages/components/FilterService/filter/filter.city.tsx +4 -3
  156. package/src/packages/components/FilterService/filter/filter.district.tsx +4 -3
  157. package/src/packages/components/FilterService/filter/filter.number.tsx +2 -2
  158. package/src/packages/components/FilterService/filter/filter.province.tsx +1 -1
  159. package/src/packages/components/FilterService/filter/filter.select.tsx +3 -2
  160. package/src/packages/components/FilterService/filter/fitler.object.tsx +1 -1
  161. package/src/packages/components/FilterService/index.tsx +2 -2
  162. package/src/packages/components/FilterService/utils/filter.service.utils.ts +2 -2
  163. package/src/packages/components/FilterService/utils/mergeQueryParam.ts +3 -3
  164. package/src/packages/components/Form/form.scss +4 -0
  165. package/src/packages/components/Form/index.tsx +1 -1
  166. package/src/packages/components/Form/layout/useFormLayout.tsx +6 -5
  167. package/src/packages/components/Form/types/any.tsx +1 -1
  168. package/src/packages/components/Form/types/array.tsx +1 -1
  169. package/src/packages/components/Form/types/date.tsx +1 -1
  170. package/src/packages/components/Form/types/number.tsx +1 -1
  171. package/src/packages/components/Form/types/string.tsx +1 -1
  172. package/src/packages/components/Form/validate/createValidation.tsx +2 -2
  173. package/src/packages/components/Form/validate/useFormItemValidation.tsx +32 -31
  174. package/src/packages/components/Form/validate/useFormValidation.tsx +2 -2
  175. package/src/packages/components/Form/validate/validate.utils.tsx +4 -4
  176. package/src/packages/components/FormItem/FormItemValidateMessage.tsx +1 -1
  177. package/src/packages/components/FormItem/createFormEditor.tsx +2 -2
  178. package/src/packages/components/FormItem/index.tsx +8 -1
  179. package/src/packages/components/Grid/GridCol.tsx +1 -1
  180. package/src/packages/components/Grid/GridRow.tsx +3 -3
  181. package/src/packages/components/Icon/icon.external.tsx +117 -0
  182. package/src/packages/components/Icon/icon.registry.tsx +2 -2
  183. package/src/packages/components/Icon/index.tsx +13 -7
  184. package/src/packages/components/IconPicker/DefaultIcons.ts +7 -0
  185. package/src/packages/components/IconPicker/icon-picker.scss +43 -0
  186. package/src/packages/components/IconPicker/index.tsx +189 -0
  187. package/src/packages/components/Illustration/index.tsx +1 -1
  188. package/src/packages/components/Image/image.scss +9 -1
  189. package/src/packages/components/Image/index.tsx +15 -7
  190. package/src/packages/components/ImagePreviewer/ImagePreviewer.tsx +6 -6
  191. package/src/packages/components/ImagePreviewer/ImagePreviewerButtonBar.tsx +1 -1
  192. package/src/packages/components/ImagePreviewer/ImagePreviewerCarouselImage.tsx +2 -2
  193. package/src/packages/components/ImagePreviewer/ImagePreviewerGallery.tsx +3 -3
  194. package/src/packages/components/ImagePreviewer/PreviewerLoading.tsx +1 -1
  195. package/src/packages/components/ImagePreviewer/image-previewer.utils.tsx +4 -4
  196. package/src/packages/components/ImageSelector/image-selector.scss +70 -0
  197. package/src/packages/components/ImageSelector/index.tsx +59 -0
  198. package/src/packages/components/ImageUploader/index.tsx +32 -16
  199. package/src/packages/components/Input/index.scss +14 -2
  200. package/src/packages/components/Input/index.tsx +3 -3
  201. package/src/packages/components/Input/input.utils.ts +1 -1
  202. package/src/packages/components/Input/useMultipleInput.tsx +11 -10
  203. package/src/packages/components/Input/useSingleInput.tsx +2 -2
  204. package/src/packages/components/Input/useSuggestionInput.tsx +9 -9
  205. package/src/packages/components/Input/useTextareaInput.tsx +6 -6
  206. package/src/packages/components/Input/uses/useInputEnterHandler.tsx +24 -13
  207. package/src/packages/components/Input/uses/useInputHooks.tsx +1 -1
  208. package/src/packages/components/Input/uses/useInputMaxLength.tsx +1 -1
  209. package/src/packages/components/Input/uses/useInputSuffixIcon.tsx +2 -2
  210. package/src/packages/components/InputGroup/index.tsx +1 -1
  211. package/src/packages/components/InputGroup/input-group.scss +9 -0
  212. package/src/packages/components/InputNumber/NumberResize.tsx +4 -4
  213. package/src/packages/components/InputNumber/index.tsx +1 -1
  214. package/src/packages/components/InputNumber/input-number.utils.tsx +1 -1
  215. package/src/packages/components/InputNumber/number.scss +3 -0
  216. package/src/packages/components/InputNumber/number.utils.ts +1 -1
  217. package/src/packages/components/InputNumber/useInputNumber.multiple.tsx +2 -2
  218. package/src/packages/components/InputNumber/useInputNumber.public.tsx +12 -11
  219. package/src/packages/components/InputNumber/useInputNumber.single.tsx +2 -2
  220. package/src/packages/components/Layout/index.tsx +9 -2
  221. package/src/packages/components/Layout/layout.scss +20 -0
  222. package/src/packages/components/Layout/layout.utils.ts +1 -1
  223. package/src/packages/components/LayoutSection/index.tsx +12 -3
  224. package/src/packages/components/LayoutSection/useLayoutSectionResizer.tsx +2 -2
  225. package/src/packages/components/List/index.tsx +1 -1
  226. package/src/packages/components/ListOption/index.tsx +20 -0
  227. package/src/packages/components/ListPanel/index.tsx +30 -0
  228. package/src/packages/components/ListPanel/list-panel.scss +20 -0
  229. package/src/packages/components/Loading/index.tsx +2 -2
  230. package/src/packages/components/LoadingMask/index.tsx +2 -2
  231. package/src/packages/components/NumberRange/index.tsx +94 -93
  232. package/src/packages/components/Object/createObjectHooks.tsx +1 -1
  233. package/src/packages/components/Object/createObjectRender.multiple.tsx +10 -10
  234. package/src/packages/components/Object/createObjectRender.single.tsx +18 -14
  235. package/src/packages/components/Object/index.tsx +3 -3
  236. package/src/packages/components/Object/object.utils.ts +5 -3
  237. package/src/packages/components/Ov/index.tsx +1 -1
  238. package/src/packages/components/Ov/ov.utils.ts +1 -1
  239. package/src/packages/components/Ov/usePublicOv.tsx +1 -1
  240. package/src/packages/components/PageCard/index.tsx +4 -1
  241. package/src/packages/components/PageCardContent/index.tsx +4 -1
  242. package/src/packages/components/PageCardTitle/index.tsx +1 -1
  243. package/src/packages/components/PageRenderList/index.tsx +1 -1
  244. package/src/packages/components/PageThemeUtils/index.tsx +3 -3
  245. package/src/packages/components/Pagination/index.tsx +3 -3
  246. package/src/packages/components/Paragraph/index.tsx +1 -1
  247. package/src/packages/components/ParagraphItem/index.tsx +1 -1
  248. package/src/packages/components/PlcImage/index.tsx +6 -6
  249. package/src/packages/components/PlcObject/index.tsx +2 -2
  250. package/src/packages/components/PlcOv/index.tsx +1 -1
  251. package/src/packages/components/Popup/PopupProvider.tsx +1 -2
  252. package/src/packages/components/Popup/index.tsx +2 -2
  253. package/src/packages/components/ProgressBar/index.tsx +1 -1
  254. package/src/packages/components/ProgressBar/progress.utils.ts +2 -2
  255. package/src/packages/components/ProgressCircle/index.tsx +2 -2
  256. package/src/packages/components/ProgressMini/index.tsx +2 -2
  257. package/src/packages/components/Radio/index.tsx +4 -4
  258. package/src/packages/components/RadioGroup/index.tsx +1 -1
  259. package/src/packages/components/RadioInner/index.tsx +1 -1
  260. package/src/packages/components/Rate/index.tsx +3 -3
  261. package/src/packages/components/Reference/ReferenceProvider.tsx +1 -1
  262. package/src/packages/components/Reference/index.tsx +1 -1
  263. package/src/packages/components/RollingNumber/index.tsx +2 -2
  264. package/src/packages/components/Scroll/HorizontalScrollbar.tsx +4 -4
  265. package/src/packages/components/Scroll/VerticalScrollbar.tsx +4 -4
  266. package/src/packages/components/Scroll/index.tsx +6 -5
  267. package/src/packages/components/Scroll/useAutoScroll.ts +1 -1
  268. package/src/packages/components/Segment/index.tsx +1 -1
  269. package/src/packages/components/SegmentGroup/index.tsx +1 -1
  270. package/src/packages/components/Select/SelectPanel.tsx +1 -1
  271. package/src/packages/components/Select/createMultipleSelectRender.tsx +12 -8
  272. package/src/packages/components/Select/createPublicSelectRender.tsx +18 -12
  273. package/src/packages/components/Select/createSelectOptionDecoder.tsx +1 -1
  274. package/src/packages/components/Select/createSingleSelectRender.tsx +13 -9
  275. package/src/packages/components/Select/decodeSelectRenderNode.tsx +6 -4
  276. package/src/packages/components/Select/index.tsx +13 -1
  277. package/src/packages/components/Select/select.utils.tsx +5 -4
  278. package/src/packages/components/SelectDisplay/index.tsx +3 -3
  279. package/src/packages/components/SelectGroup/index.tsx +1 -1
  280. package/src/packages/components/SelectOption/index.tsx +2 -2
  281. package/src/packages/components/Skeleton/index.tsx +44 -0
  282. package/src/packages/components/Skeleton/skeleton.scss +27 -0
  283. package/src/packages/components/Slider/index.tsx +3 -3
  284. package/src/packages/components/Slider/slider.utils.tsx +1 -1
  285. package/src/packages/components/Slider/useSlider.range.tsx +13 -10
  286. package/src/packages/components/Slider/useSlider.single.tsx +8 -9
  287. package/src/packages/components/Slider/useSliderDotDragier.tsx +4 -4
  288. package/src/packages/components/SortList/index.tsx +4 -4
  289. package/src/packages/components/Space/index.tsx +1 -1
  290. package/src/packages/components/StackCard/index.tsx +4 -4
  291. package/src/packages/components/StackCardItem/index.tsx +1 -1
  292. package/src/packages/components/Step/index.tsx +1 -1
  293. package/src/packages/components/StepGroup/index.tsx +1 -1
  294. package/src/packages/components/Tab/index.tsx +1 -1
  295. package/src/packages/components/TabGroup/TabsHeader.tsx +1 -1
  296. package/src/packages/components/TabGroup/TabsInner.tsx +1 -1
  297. package/src/packages/components/TabGroup/header/horizontal/TabsHeaderHorizontal.tsx +3 -3
  298. package/src/packages/components/TabGroup/header/horizontal/TabsHeaderHorizontalCard.tsx +1 -1
  299. package/src/packages/components/TabGroup/header/horizontal/TabsHeaderHorizontalShadow.tsx +1 -1
  300. package/src/packages/components/TabGroup/header/horizontal/TabsHeaderHorizontalText.tsx +2 -2
  301. package/src/packages/components/TabGroup/header/vertical/TabsHeaderVertical.tsx +1 -1
  302. package/src/packages/components/TabGroup/index.tsx +1 -1
  303. package/src/packages/components/TabGroup/tabs.utils.tsx +1 -1
  304. package/src/packages/components/Table/editor/PlcAddress.tsx +1 -1
  305. package/src/packages/components/Table/editor/PlcAddressItem.tsx +1 -1
  306. package/src/packages/components/Table/editor/PlcCheckbox.tsx +1 -1
  307. package/src/packages/components/Table/editor/PlcColorPicker.tsx +1 -1
  308. package/src/packages/components/Table/editor/PlcDate.tsx +1 -1
  309. package/src/packages/components/Table/editor/PlcDate.utils.tsx +2 -2
  310. package/src/packages/components/Table/editor/PlcDateRange.tsx +1 -1
  311. package/src/packages/components/Table/editor/PlcInput.tsx +1 -1
  312. package/src/packages/components/Table/editor/PlcNumber.tsx +1 -1
  313. package/src/packages/components/Table/editor/PlcRate.tsx +1 -1
  314. package/src/packages/components/Table/editor/PlcSelect.tsx +2 -1
  315. package/src/packages/components/Table/editor/PlcTextarea.tsx +1 -1
  316. package/src/packages/components/Table/editor/PlcTime.tsx +1 -1
  317. package/src/packages/components/Table/editor/PlcTime.utils.ts +2 -2
  318. package/src/packages/components/Table/editor/PlcTimeRange.tsx +1 -1
  319. package/src/packages/components/Table/editor/PlcToggle.tsx +1 -1
  320. package/src/packages/components/Table/plc/group/PlcGroup.tsx +1 -1
  321. package/src/packages/components/Table/plc/plc/Plc.tsx +1 -1
  322. package/src/packages/components/Table/plc/process/copyPlcList.ts +1 -1
  323. package/src/packages/components/Table/plc/process/processPlcFixed.ts +1 -1
  324. package/src/packages/components/Table/plc/process/processPlcSort.ts +1 -1
  325. package/src/packages/components/Table/plc/use/useBasePlc.tsx +3 -3
  326. package/src/packages/components/Table/plc/use/useBasePlcGroup.tsx +1 -1
  327. package/src/packages/components/Table/plc/use/usePlc.tsx +1 -1
  328. package/src/packages/components/Table/plc/use/usePlcPropsState.tsx +2 -2
  329. package/src/packages/components/Table/plc/use/useTableAutoSpan.tsx +112 -0
  330. package/src/packages/components/Table/plc/useTablePlc.tsx +7 -4
  331. package/src/packages/components/Table/plc/utils/plc.render.ts +1 -1
  332. package/src/packages/components/Table/plc/utils/plc.scope-slots.ts +1 -1
  333. package/src/packages/components/Table/plc/utils/plc.utils.ts +9 -6
  334. package/src/packages/components/Table/standard/PlcCheck/PlcCheck.hooks.tsx +3 -3
  335. package/src/packages/components/Table/standard/PlcCheck/PlcCheck.multiple.tsx +7 -8
  336. package/src/packages/components/Table/standard/PlcCheck/PlcCheck.single.tsx +4 -5
  337. package/src/packages/components/Table/standard/PlcCheck/PlcCheck.tsx +2 -2
  338. package/src/packages/components/Table/standard/PlcCheck/PlcCheck.utils.ts +3 -3
  339. package/src/packages/components/Table/standard/PlcDraggier/PlcDraggier.tsx +2 -2
  340. package/src/packages/components/Table/standard/PlcExclusion.tsx +2 -2
  341. package/src/packages/components/Table/standard/PlcExpand.tsx +2 -2
  342. package/src/packages/components/Table/standard/PlcIndex.tsx +1 -1
  343. package/src/packages/components/Table/standard/PlcOperation/OuterOperation.tsx +3 -2
  344. package/src/packages/components/Table/standard/PlcOperation/PlcOperation.tsx +12 -6
  345. package/src/packages/components/Table/standard/PlcOperation/PlcOperation.utils.tsx +4 -4
  346. package/src/packages/components/Table/standard/PlcOperation/useOperationPermission.ts +1 -1
  347. package/src/packages/components/Table/standard/PlcTree/PlcTree.autoWidth.tsx +1 -1
  348. package/src/packages/components/Table/standard/PlcTree/PlcTree.renderNode.tsx +2 -2
  349. package/src/packages/components/Table/standard/PlcTree/PlcTree.tsx +4 -4
  350. package/src/packages/components/Table/standard/PlcTree/PlcTree.utils.ts +2 -2
  351. package/src/packages/components/Table/standard/PlcTree/PlcTreeHeader.tsx +3 -3
  352. package/src/packages/components/Table/standard/PlcTree/RenderPlcTreeNode.tsx +6 -5
  353. package/src/packages/components/Table/table/Table.tsx +14 -10
  354. package/src/packages/components/Table/table/body/cell.tsx +36 -5
  355. package/src/packages/components/Table/table/body/row.tsx +1 -1
  356. package/src/packages/components/Table/table/body/useCellValue.tsx +15 -6
  357. package/src/packages/components/Table/table/head/head-cell.tsx +8 -2
  358. package/src/packages/components/Table/table/head/useHeadCellResize.ts +4 -4
  359. package/src/packages/components/Table/table/node/useTableNode.tsx +2 -2
  360. package/src/packages/components/Table/table/table.scss +4 -0
  361. package/src/packages/components/Table/table/use/useFixedShadow.ts +2 -2
  362. package/src/packages/components/Table/table/use/useTableDraggier.col.tsx +6 -6
  363. package/src/packages/components/Table/table/use/useTableDraggier.row.tsx +7 -7
  364. package/src/packages/components/Table/table/use/useTableDraggier.tsx +3 -3
  365. package/src/packages/components/Table/table/use/useTableFormEditor.tsx +47 -39
  366. package/src/packages/components/Table/table/use/useTableLoading.tsx +2 -2
  367. package/src/packages/components/Table/table/use/useTableMethods.tsx +2 -2
  368. package/src/packages/components/Table/table/use/useTableModifyEditor.tsx +12 -6
  369. package/src/packages/components/Table/table/use/useTableScroll.tsx +1 -1
  370. package/src/packages/components/Table/table/utils/createTableHooks.ts +7 -5
  371. package/src/packages/components/Table/table/utils/table.utils.ts +7 -5
  372. package/src/packages/components/Tag/index.tsx +8 -3
  373. package/src/packages/components/Tag/tag.scss +10 -1
  374. package/src/packages/components/ThemeColor/index.tsx +1 -1
  375. package/src/packages/components/ThemeColorSelector/index.tsx +1 -1
  376. package/src/packages/components/ThemeDarkSelector/index.tsx +1 -2
  377. package/src/packages/components/ThemeEditor/index.tsx +3 -3
  378. package/src/packages/components/ThemeLocaleSelector/index.tsx +1 -2
  379. package/src/packages/components/ThemeShapeSelector/index.tsx +1 -2
  380. package/src/packages/components/ThemeSizeSelector/index.tsx +1 -2
  381. package/src/packages/components/TimePicker/createRangeTimeRender.tsx +3 -3
  382. package/src/packages/components/TimePicker/createSeparateRangeTimeRender.tsx +3 -3
  383. package/src/packages/components/TimePicker/createSingleTimeRender.tsx +7 -8
  384. package/src/packages/components/TimePicker/index.tsx +1 -1
  385. package/src/packages/components/TimePicker/panel/TimeBaseColumn.tsx +4 -4
  386. package/src/packages/components/TimePicker/panel/TimeBasePanel.tsx +1 -1
  387. package/src/packages/components/TimePicker/panel/TimePanel.tsx +2 -2
  388. package/src/packages/components/TimePicker/panel/TimeRangePanel.tsx +1 -1
  389. package/src/packages/components/TimePicker/panel/time-panel.utils.ts +1 -1
  390. package/src/packages/components/TimePicker/time.utils.ts +1 -1
  391. package/src/packages/components/TimePicker/useRangeTimeRender.tsx +9 -9
  392. package/src/packages/components/TimePicker/useTimeHooks.ts +1 -1
  393. package/src/packages/components/Toggle/index.tsx +4 -4
  394. package/src/packages/components/Tooltip/index.tsx +2 -2
  395. package/src/packages/components/Transition/index.tsx +5 -2
  396. package/src/packages/components/Tree/RenderTreeNode.tsx +4 -3
  397. package/src/packages/components/Tree/index.tsx +2 -2
  398. package/src/packages/components/TreeCore/TreeCore.type.tsx +3 -1
  399. package/src/packages/components/TreeCore/createTreeCore.tsx +3 -3
  400. package/src/packages/components/TreeCore/createTreeDraggier.tsx +9 -9
  401. package/src/packages/components/TreeCore/createTreeHooks.ts +1 -1
  402. package/src/packages/components/TreeCore/createTreeMethods.tsx +2 -2
  403. package/src/packages/components/TreeCore/createTreeNode.tsx +11 -6
  404. package/src/packages/components/TreeCore/createTreeProps.ts +4 -3
  405. package/src/packages/components/TreeCore/createTreeUtils.ts +2 -2
  406. package/src/packages/components/TreeNodeWithMenu/index.tsx +5 -1
  407. package/src/packages/components/TreeNodeWithMenu/treeNodeWithMenu.utils.ts +1 -1
  408. package/src/packages/components/Triangle/index.tsx +2 -2
  409. package/src/packages/components/Upload/index.tsx +6 -6
  410. package/src/packages/components/VirtualList/createVirtualDraggier.ts +7 -7
  411. package/src/packages/components/VirtualList/index.tsx +1 -1
  412. package/src/packages/components/VirtualList/useVirtualList.tsx +11 -11
  413. package/src/packages/components/VirtualTable/index.tsx +10 -4
  414. package/src/packages/components/VirtualTable/virtual-table.scss +3 -3
  415. package/src/packages/components/createPlainAddressService/index.tsx +2 -2
  416. package/src/packages/components/createRequestInterceptor/index.ts +2 -2
  417. package/src/packages/components/createScrollDraggier/index.ts +5 -5
  418. package/src/packages/components/createScrollUtils/index.tsx +1 -1
  419. package/src/packages/components/createSimpleDate/index.ts +49 -0
  420. package/src/packages/components/createTransitionHandler/index.ts +1 -1
  421. package/src/packages/components/useAutoScrollUtils/index.tsx +4 -4
  422. package/src/packages/components/useContextmenuOptions/index.tsx +40 -0
  423. package/src/packages/components/useDialog/DialogService.tsx +9 -9
  424. package/src/packages/components/useDialog/dialog.service.utils.tsx +5 -5
  425. package/src/packages/components/useDialog/index.tsx +4 -4
  426. package/src/packages/components/useImage/ImageService.tsx +5 -5
  427. package/src/packages/components/useLoading/LoadingService.tsx +3 -3
  428. package/src/packages/components/useLoading/index.tsx +1 -1
  429. package/src/packages/components/useLoading/loading.service.utils.tsx +2 -2
  430. package/src/packages/components/useMessage/Message.tsx +1 -1
  431. package/src/packages/components/useMessage/MessageContainer.tsx +1 -1
  432. package/src/packages/components/useMessage/MessageManager.tsx +1 -1
  433. package/src/packages/components/useMessage/index.tsx +1 -1
  434. package/src/packages/components/useMessage/message.service.utils.tsx +4 -4
  435. package/src/packages/components/useNotice/Notice.tsx +1 -1
  436. package/src/packages/components/useNotice/NoticeContainer.tsx +1 -1
  437. package/src/packages/components/useNotice/NoticeManager.tsx +1 -1
  438. package/src/packages/components/useNotice/index.tsx +1 -1
  439. package/src/packages/components/useNotice/noitice.service.utils.tsx +4 -4
  440. package/src/packages/components/usePageRenderContext/index.tsx +1 -1
  441. package/src/packages/components/usePopup/PopupItem.tsx +17 -10
  442. package/src/packages/components/usePopup/refresh/refreshArrow.ts +1 -1
  443. package/src/packages/components/usePopup/trigger/useManagerTrigger.clickOutside.tsx +19 -24
  444. package/src/packages/components/usePopup/trigger/usePopupTrigger.tsx +2 -2
  445. package/src/packages/components/usePopup/trigger/useReferenceTrigger.tsx +52 -46
  446. package/src/packages/components/usePopup/usePopup.tsx +2 -2
  447. package/src/packages/components/usePopup/usePopupManager.tsx +14 -3
  448. package/src/packages/components/usePopup/utils/createPopupManagerHooks.tsx +1 -1
  449. package/src/packages/components/usePopup/utils/ids2map.ts +1 -1
  450. package/src/packages/components/usePopup/utils/popup.utils.ts +3 -4
  451. package/src/packages/components/usePopupEditor/index.tsx +6 -9
  452. package/src/packages/components/usePopupEditor/popup-editor.utils.ts +1 -1
  453. package/src/packages/components/useTableFilter/index.ts +73 -0
  454. package/src/packages/components/useTooltip/index.tsx +6 -7
  455. package/src/packages/directives/ClickWave/index.tsx +2 -2
  456. package/src/packages/directives/ResizeDetector/index.tsx +2 -2
  457. package/src/packages/entry.tsx +326 -287
  458. package/src/packages/i18n/i18n.utils.ts +5 -5
  459. package/src/packages/i18n/lang/en-us.ts +37 -14
  460. package/src/packages/i18n/lang/zh-cn.ts +24 -1
  461. package/src/packages/styles/application/application.public.scss +7 -0
  462. package/src/packages/styles/global.import.scss +60 -15
  463. package/src/packages/uses/createInputPopperAttrs.ts +10 -3
  464. package/src/packages/uses/useCollapseStyles.tsx +2 -2
  465. package/src/packages/uses/useDragHorizontalScroll.ts +4 -5
  466. package/src/packages/uses/useEdit.ts +42 -15
  467. package/src/packages/uses/useFocusHandler.ts +26 -13
  468. package/src/packages/uses/useFunctionWrapper.ts +3 -1
  469. package/src/packages/uses/useMultipleModel.tsx +6 -4
  470. package/src/packages/uses/useRenderReference.tsx +1 -1
  471. package/src/packages/uses/useStyle.tsx +4 -4
  472. package/src/packages/utils/ClientZoom.ts +1 -1
  473. package/src/packages/utils/FixInput.ts +1 -1
  474. package/src/packages/utils/InnerTransition.ts +2 -2
  475. package/src/packages/utils/LoadingText.ts +1 -1
  476. package/src/packages/utils/OpenController.ts +1 -1
  477. package/src/packages/utils/constant.tsx +1 -1
  478. package/src/packages/utils/createDraggier.ts +7 -7
  479. package/src/packages/utils/createFlagManager.ts +1 -1
  480. package/src/packages/utils/findReactElement.tsx +1 -1
  481. package/src/packages/utils/getDeviceInfo.ts +1 -1
  482. package/src/packages/utils/getRowEl.ts +2 -2
  483. package/src/packages/utils/incrementalMerge.ts +1 -1
  484. package/src/packages/utils/inheritSlots.ts +3 -1
  485. package/src/packages/utils/installAllIcons.ts +20 -19
  486. package/src/packages/utils/installAllLazyIcons.ts +1 -1
  487. package/src/packages/utils/isObjectCommonMatch.ts +1 -1
  488. package/src/packages/utils/onParentElementsScroll.tsx +2 -2
  489. package/src/packages/utils/plainDate.ts +1 -1
  490. package/src/packages/utils/useMove.tsx +3 -3
  491. package/src/packages/utils/watchEffectAutoClear.ts +2 -2
  492. package/src/packages/components/KeyboardService/index.ts +0 -214
  493. package/src/packages/components/ThemeDarkSelector/theme-dark-selector.scss +0 -5
  494. package/src/packages/components/ThemeLocaleSelector/theme-locale-selector.scss +0 -5
  495. package/src/packages/components/ThemeShapeSelector/theme-shape-selector.scss +0 -5
  496. package/src/packages/components/ThemeSizeSelector/theme-size-selector.scss +0 -5
  497. package/src/packages/components/createProvider/index.ts +0 -5
  498. package/src/packages/utils/createProvider.tsx +0 -35
@@ -0,0 +1,640 @@
1
+ import {AutoModule} from "../utils/AutoModule";
2
+ import i18n from "../../../i18n";
3
+ import Tooltip from "../../Tooltip";
4
+ import Button from "../../Button";
5
+ import {iAutoTableAiConfig, iTableAiOperate, iTableAiOperateConfig, iTableAiOperatePlcMeta, iTableAiOperateSearch, iTableAiOperateSort} from "../utils/AutoTable.utils";
6
+ import $configuration from "../../$configuration";
7
+ import $dialog from "../../$dialog";
8
+ import AiChatBox, {iChatBoxHandleMessage, iChatBoxHistory} from "../../AiChatBox";
9
+ import {createSimpleDate} from "../../createSimpleDate";
10
+ import {iTableOptionSeniorFilterMeta} from "../setting/useTableOption.setting.senior.filter";
11
+ import {iFilterFormSingleData} from "../../FilterFormSingle";
12
+ import {PlainObject} from "@peryl/utils/event";
13
+ import {FilterService} from "../../FilterService";
14
+ import {mergeQueryParam} from "../../FilterService/utils/mergeQueryParam";
15
+ import {eAutoTableFilterMode} from "../filter/useTableOption.filter.state";
16
+ import $notice from "../../$notice";
17
+ import {toArray} from "@peryl/utils/toArray";
18
+ import {iFilterConfigSelect} from "../../FilterService/filter/filter.select";
19
+ import {uuid} from "@peryl/utils/uuid";
20
+ import {eAddressTypeEnum} from "../../$address/address.utils";
21
+ import Alert from "../../Alert";
22
+ import {$ai, iAiConfiguration} from "../../$ai";
23
+ import {lastItem} from "@peryl/utils/lastItem";
24
+
25
+ declare module '../utils/TableOption.space' {
26
+ namespace TableOptionSpace {
27
+ interface iTableOption {
28
+ ai: ReturnType<typeof useTableOptionAi>;
29
+ }
30
+ }
31
+ }
32
+
33
+ export const useTableOptionAi = AutoModule.createRegistration((option) => {
34
+
35
+ /**
36
+ * 创建filterOptions的引用,直接用高级筛选的
37
+ * @author 韦胜健
38
+ * @date 2025/4/6 23:31
39
+ */
40
+ const filterOptions = option.filterState.createComputedFilterOptions(eAutoTableFilterMode.filterSenior);
41
+
42
+ const chatHistories: iChatBoxHistory[] = [];
43
+
44
+ const methods = {
45
+ /**
46
+ * 获取可用的字段
47
+ * @author 韦胜健
48
+ * @date 2025/4/6 23:31
49
+ */
50
+ getAvailableFields: async (): Promise<iTableAiOperatePlcMeta[]> => {
51
+ const availableFields: iTableAiOperatePlcMeta[] = [];
52
+ const plcData = await option.methods.getPlcData();
53
+ plcData.flatPlcList.forEach((plc, index) => {
54
+ const { title, field, filterType, width, fixed, hide, align } = plc.props;
55
+ if (!!field && !!title) {
56
+ availableFields.push({
57
+ field: field || "",
58
+ title,
59
+ order: index,
60
+ align: align || "left",
61
+ width,
62
+ fixed,
63
+ hide,
64
+
65
+ filterType,
66
+ });
67
+ }
68
+ });
69
+ return availableFields;
70
+ },
71
+ /**
72
+ * 打开AI对话弹窗
73
+ * @author 韦胜健
74
+ * @date 2025/4/6 23:31
75
+ */
76
+ openChat: async () => {
77
+
78
+ const availableFields = await methods.getAvailableFields();
79
+ console.log({ availableFields });
80
+
81
+ const systemContent = `
82
+ 你是一名专业的自然语言分析师,需要你分析用户的内容返回结构化的数据返回给我;
83
+ 你返回的数据结构是这样的:{"search":"","sort":"","config":""}
84
+ 用户的内容中涉及到数据筛选查询相关的语句,你需要将这段语句放在结果的search属性中;
85
+ 用户的内容中涉及到排序相关的语句,你需要将这段语句放在结果的sort属性中;
86
+ 用户的内容中涉及到字段配置相关(比如字段排序、设置宽度、隐藏、字段固定冻结等等)的语句,你需要将这段语句放在结果的config属性中;
87
+ 如果用户的内容不涉及到查询/筛选、排序以及字段配置,你需要返回 {"error":""},将错误信息放在这个error属性中;
88
+ `.trim();
89
+
90
+ // console.log(systemContent);
91
+ $dialog({
92
+ title: i18n.$it('table.aiButton').d('AI对话'),
93
+ position: 'right',
94
+ noFoot: true,
95
+ width: '500px',
96
+ render: () => (
97
+ <AiChatBox
98
+ histories={chatHistories}
99
+ fitHeight
100
+ systemContent={systemContent}
101
+ handleMessage={handleMessage}
102
+ placeholder={i18n.$it('ai.tableAiPlaceholder').d('你可以与ai对话实现对列表的查询、排序以及配置功能;比如:查询编号约等于129,创建时间大于前天的数据,先按照创建时间降序,再按照更新时间升序排序;最后是调宽编号字段的宽度')}
103
+ v-slots={{
104
+ prepend: () => <>
105
+ <Alert icon={null} size="mini">
106
+ <div>1. 在列表中与AI对话你可以实现搜索、排序、配置等功能,以下为例:</div>
107
+ <div>2. 搜索搜索[字段1]为[值1]并且(这里也可以用或者)[字段2]为[值2],匹配的值可以是多个值;</div>
108
+ <div>3. 先按照[字段1]降序再按照[字段2]升序排序</div>
109
+ <div>4. 将[字段1]的宽度加宽一倍,将[字段2]放在[字段3]前面,[字段4]左固定</div>
110
+ <div>5. 可以在一次对话中同时处理搜索、排序以及配置功能;</div>
111
+ </Alert>
112
+ </>
113
+ }}
114
+ />
115
+ )
116
+ });
117
+
118
+ // ✓ (计数大于500或者数字小于10)并且选项值为会员折扣
119
+ // ✓ 查询省份为上海市,按照创建时间降序,然后将更新时间左固定放在文本前面
120
+ // ✓ 查询选项值包含秒杀折扣以及会员折扣的数据
121
+ // ✓ 查询选项值包含秒杀折扣的数据
122
+ // ✓ 查询文本为yeezy或者hello的数据
123
+ const handleMessage: iChatBoxHandleMessage = async ({ message, histories, scrollEnd }) => {
124
+ try {
125
+
126
+ const messageData: any = Object.entries(JSON.parse(message));
127
+ if (!!messageData.error) {return [{ id: uuid(), role: 'assistant', content: messageData.error }];}
128
+
129
+ const operateItems: iTableAiOperate[] = [];
130
+
131
+ await Promise.all(Object.entries(JSON.parse(message)).map(async ([key, val]: [string, any]) => {
132
+ if (!val?.trim().length) {
133
+ return;
134
+ }
135
+ if (key === 'search') {
136
+ histories.push({ id: uuid(), role: 'assistant', content: '' });
137
+ const history = lastItem(histories)!;
138
+ await $ai.chatStream({
139
+ messages: [
140
+ { role: 'system', content: getSearchPrompt(availableFields) },
141
+ { role: 'user', content: val }
142
+ ],
143
+ onReceiving: async ({ fullText }) => {
144
+ history.content = fullText;
145
+ await scrollEnd();
146
+ },
147
+ onFinish: (fullText) => {
148
+ console.log('search', history.content);
149
+ operateItems.push({ type: "search", data: JSON.parse(fullText) });
150
+ },
151
+ });
152
+ } else if (key === 'sort') {
153
+ histories.push({ id: uuid(), role: 'assistant', content: '' });
154
+ const history = lastItem(histories)!;
155
+ await $ai.chatStream({
156
+ messages: [
157
+ { role: 'system', content: getSortPrompt(availableFields) },
158
+ { role: 'user', content: val }
159
+ ],
160
+ onReceiving: async ({ fullText }) => {
161
+ history.content = fullText;
162
+ await scrollEnd();
163
+ },
164
+ onFinish: (fullText) => {
165
+ console.log('sort', history.content);
166
+ operateItems.push({ type: "sort", data: JSON.parse(fullText) });
167
+ },
168
+ });
169
+ } else if (key === 'config') {
170
+ histories.push({ id: uuid(), role: 'assistant', content: '' });
171
+ const history = lastItem(histories)!;
172
+ await $ai.chatStream({
173
+ messages: [
174
+ { role: 'system', content: getConfigPrompt(availableFields) },
175
+ { role: 'user', content: val }
176
+ ],
177
+ onReceiving: async ({ fullText }) => {
178
+ history.content = fullText;
179
+ await scrollEnd();
180
+ },
181
+ onFinish: (fullText) => {
182
+ console.log('config', history.content);
183
+ operateItems.push({ type: "config", data: JSON.parse(fullText) });
184
+ },
185
+ });
186
+ }
187
+ }));
188
+
189
+ if (operateItems.length == 1 && operateItems[0].type === 'error') {
190
+ return;
191
+ }
192
+ await methods.apply(operateItems);
193
+ const workTitleMap = { search: '查询', sort: '排序', config: '配置', error: '' };
194
+ return [
195
+ // { id: uuid(), role: 'assistant', content: message },
196
+ { id: uuid(), role: 'assistant', content: `已经为您执行 ${operateItems.map(i => workTitleMap[i.type]).join(',')} 工作` }
197
+ ];
198
+ } catch (e) {
199
+ console.error(e);
200
+ return;
201
+ }
202
+ };
203
+ },
204
+ /**
205
+ * 应用大模型返回的结果
206
+ * @author 韦胜健
207
+ * @date 2025/4/6 23:32
208
+ */
209
+ apply: async (operateItems: iTableAiOperate[]) => {
210
+
211
+ if (!filterOptions.value) {
212
+ const errorMessage = 'filterOptions.value is unavailable!';
213
+ $notice.error(errorMessage);
214
+ throw new Error(errorMessage);
215
+ }
216
+
217
+ const availableFields = await methods.getAvailableFields();
218
+
219
+ /*---------------------------------------处理搜索-------------------------------------------*/
220
+
221
+ let hasSearch = false;
222
+ const searchData: iTableAiOperateSearch['data'] | undefined = (operateItems as any).find((i: iTableAiOperate) => i.type === "search")?.data;
223
+ if (!!searchData) {
224
+
225
+ hasSearch = true;
226
+
227
+ /*构建查询表单对象用来存储字段的值*/
228
+ const searchFormData = searchData.filters.reduce((prev, item) => {
229
+ prev[item.field] = item.value;
230
+ return prev;
231
+ }, {} as PlainObject);
232
+
233
+ console.log({ searchFormData });
234
+
235
+ /*构建新的 iTableOptionSeniorFilterMeta 存储到高级筛选的状态中*/
236
+ option.settingSeniorFilter.edit.state.metas = await Promise.all(searchData.filters.map(async (f): Promise<iTableOptionSeniorFilterMeta> => {
237
+
238
+ /*要筛选的字段的plc props*/
239
+ const plcProps = availableFields.find(i => i.field === f.field);
240
+
241
+ if (!plcProps) {
242
+ const errorMessage = `can't find plc: ${f.field}`;
243
+ $notice.error(errorMessage);
244
+ throw new Error(errorMessage);
245
+ }
246
+
247
+ /*要筛选字段的 filterOption*/
248
+ let usingFilterOption = filterOptions.value!.find(i => i.field === f.field);
249
+ if (!usingFilterOption) {
250
+ const errorMessage = `can't recognise field ${f.field}`;
251
+ $notice.error(errorMessage);
252
+ throw new Error(errorMessage);
253
+ }
254
+
255
+ usingFilterOption = { ...usingFilterOption };
256
+ usingFilterOption.filterHandler = f.filterHandler;
257
+ if (usingFilterOption.filterType === 'select') {
258
+ if (usingFilterOption.filterHandler === 'in_like') {
259
+ usingFilterOption.filterHandler = 'in';
260
+ } else if (usingFilterOption.filterHandler === 'not_in_like') {
261
+ usingFilterOption.filterHandler = 'not_in';
262
+ }
263
+ }
264
+
265
+ /**
266
+ * 由于大模型返回对字段的筛选值都是显示值,某些情况下需要对这个显示值转化为实际值,才能用来进行搜索,以下做列举
267
+ * - 当筛选类型filterType为select时,无论filterHandler为任何值得情况下都要转化显示值为实际值;
268
+ * - 当筛选类型filterType为province/city/district时:
269
+ * - 如果filterHandler为like,此时不需要将显示值转化为实际值,因为like这个filterHandler会在生成queryParam阶段将显示值转化;
270
+ * - 如果filterHandler为其他情况,都要将显示值转化为实际值;
271
+ * @author 韦胜健
272
+ * @date 2025/4/6 23:34
273
+ */
274
+ await (async () => {
275
+ if (plcProps.filterType === 'select') {
276
+
277
+ const selectOptions = (usingFilterOption.filterConfig as iFilterConfigSelect).getSelectOptions();
278
+
279
+ const showValueList = toArray(f.value);
280
+ const resultValueList: string[] = [];
281
+ showValueList.forEach(showValue => {
282
+ const matchOption = selectOptions.find(i => i.label === showValue);
283
+ if (!!matchOption) {resultValueList.push(matchOption.val);}
284
+ });
285
+ searchFormData[f.field] = resultValueList.length == 0 ? undefined : f.filterHandler == 'eq' ? resultValueList[0] : resultValueList;
286
+ } else if (
287
+ (plcProps.filterType === 'date' ||
288
+ plcProps.filterType === 'datetime' ||
289
+ plcProps.filterType === 'number')
290
+ && f.filterHandler === 'range'
291
+ ) {
292
+ searchFormData[usingFilterOption.startField] = f.value.start;
293
+ searchFormData[usingFilterOption.endField] = f.value.end;
294
+ } else if (
295
+ plcProps.filterType === 'province' ||
296
+ plcProps.filterType === 'city' ||
297
+ plcProps.filterType === 'district'
298
+ ) {
299
+ const addressService = $configuration.get('address')!;
300
+ if (f.filterHandler !== 'like') {
301
+ const showValueList = toArray(f.value);
302
+ const resultValueList: string[] = [];
303
+ await Promise.all(showValueList.map(async (showValue) => {
304
+ const metas = await addressService.getAddressByLabel(showValue,
305
+ plcProps.filterType == 'province' ? eAddressTypeEnum.province :
306
+ plcProps.filterType == 'city' ? eAddressTypeEnum.city :
307
+ eAddressTypeEnum.district
308
+ );
309
+ metas.forEach(i => resultValueList.push(i.code));
310
+ }));
311
+ // console.log({ showValueList, resultValueList });
312
+ searchFormData[f.field] = resultValueList.length == 0 ? undefined : f.filterHandler == 'eq' ? resultValueList[0] : resultValueList;
313
+ }
314
+ }
315
+ })();
316
+
317
+ const queryParam = await FilterService.getQueryParam({ option: usingFilterOption, formData: searchFormData });
318
+ const filterQueryParam = !queryParam ? {} : mergeQueryParam(queryParam, {});
319
+
320
+ const fsd: iFilterFormSingleData = {
321
+ field: f.field,
322
+ filterHandler: usingFilterOption.filterHandler,
323
+ formData: searchFormData,
324
+ filterQueryParam,
325
+ };
326
+
327
+ console.log({ id: f.id, fsd, usingFilterOption });
328
+
329
+ return {
330
+ id: f.id,
331
+ data: fsd,
332
+ };
333
+ }));
334
+
335
+ option.settingSeniorFilter.edit.state.expression = searchData.filterExpression || searchData.filters.map(i => i.id).join(' and ');
336
+ option.settingSeniorFilter.edit.state.isCustomExpression = true;
337
+
338
+ // console.log(deepcopy(option.settingSeniorFilter.edit.state));
339
+ await option.settingSeniorFilter.query.apply(false);
340
+ }
341
+
342
+ /*---------------------------------------处理排序-------------------------------------------*/
343
+ let hasSort = false;
344
+ const sortData: iTableAiOperateSort['data'] | undefined = (operateItems as any).find((i: iTableAiOperate) => i.type === "sort")?.data;
345
+ if (!!sortData) {
346
+ hasSort = true;
347
+ option.settingSeniorSort.methods.update(sortData, false);
348
+ }
349
+
350
+ /*---------------------------------------处理配置-------------------------------------------*/
351
+ let hasConfig = false;
352
+ const configData: iTableAiOperateConfig['data'] | undefined = (operateItems as any).find((i: iTableAiOperate) => i.type === "config")?.data;
353
+ if (!!configData) {
354
+ hasConfig = true;
355
+ await option.settingConfig.methods.updateItemPlc({
356
+ customData: configData,
357
+ customSort: configData.length === availableFields.length,
358
+ });
359
+ }
360
+ /*---------------------------------------收尾-------------------------------------------*/
361
+ if (hasSearch || hasSort) {await option.methods.pageMethods.reload();}
362
+ },
363
+ /**
364
+ * 通过ai获取已经解析并且转化过的表单数据
365
+ * @author 韦胜健
366
+ * @date 2025/4/8 11:02
367
+ */
368
+ getFormDataByChat: async () => {
369
+ const availableFields = await methods.getAvailableFields();
370
+ const formDataList = await $ai.getFormDataByChat(availableFields);
371
+ const addressService = $configuration.get('address')!;
372
+
373
+ await Promise.all(formDataList.map(async (formDataItem) => {
374
+ await Promise.all(availableFields.map(async f => {
375
+
376
+ const showValue = formDataItem[f.field];
377
+
378
+ if (showValue == null) {return;}
379
+
380
+ if (f.filterType === 'select') {
381
+ let usingFilterOption = filterOptions.value!.find(i => i.field === f.field);
382
+ if (!usingFilterOption) {
383
+ console.error(`Can't convert select field: ${f.field}`);
384
+ formDataItem[f.field] = null;
385
+ } else {
386
+ const selectOptions = (usingFilterOption.filterConfig as iFilterConfigSelect).getSelectOptions();
387
+ const convertShowValue2Value = (showValue: any) => selectOptions.find(i => i.label == showValue)?.val;
388
+ formDataItem[f.field] = Array.isArray(showValue) ? showValue.map(i => convertShowValue2Value(i)) : convertShowValue2Value(showValue);
389
+ }
390
+ } else if (
391
+ f.filterType === 'province' ||
392
+ f.filterType === 'city' ||
393
+ f.filterType === 'district'
394
+ ) {
395
+ const metas = await addressService.getAddressByLabel(showValue,
396
+ f.filterType == 'province' ? eAddressTypeEnum.province :
397
+ f.filterType == 'city' ? eAddressTypeEnum.city :
398
+ eAddressTypeEnum.district
399
+ );
400
+ formDataItem[f.field] = metas[0].code;
401
+ }
402
+ }));
403
+ }));
404
+
405
+ return formDataList;
406
+ },
407
+ /**
408
+ * ai对话批量新建
409
+ * @author 韦胜健
410
+ * @date 2025/4/8 10:51
411
+ */
412
+ aiInsert: async () => {
413
+ const formDataList = await methods.getFormDataByChat();
414
+ console.log(formDataList);
415
+ await option.methods.editMethods.batchInsert({ rows: formDataList.reverse() });
416
+ },
417
+ /**
418
+ * 智能填写表单
419
+ * @author 韦胜健
420
+ * @date 2025/4/8 11:29
421
+ */
422
+ smartFilling: async (formData: PlainObject) => {
423
+ const formDataList = await methods.getFormDataByChat();
424
+ Object.assign(formData, formDataList[0]);
425
+ },
426
+ testSearch: async () => {
427
+ const operateItems: iTableAiOperate[] = [
428
+ {
429
+ "type": "search",
430
+ "data": {
431
+ "filters": [
432
+ { "id": "FF_1", "field": "provinceVal", "filterHandler": "in", "value": ["山东省", "上海市"] },
433
+ { "id": "FF_2", "field": "ovVal", "filterHandler": "eq", "value": "秒杀折扣" }
434
+ ],
435
+ "filterExpression": ""
436
+ }
437
+ },
438
+ {
439
+ "type": "sort",
440
+ "data": [
441
+ { "field": "count", "desc": true, title: '计数' },
442
+ { "field": "numberVal", "desc": false, title: '数字' }
443
+ ]
444
+ },
445
+ ];
446
+ await methods.apply(operateItems);
447
+ },
448
+ testSearch2: async () => {
449
+ const operateItems: iTableAiOperate[] = [{ "type": "search", "data": { "filters": [{ "id": "FF_1", "field": "normalText", "filterHandler": "not_in", "value": ["hello"] }], "filterExpression": "" } }];
450
+ await methods.apply(operateItems);
451
+ },
452
+ };
453
+
454
+ const autoOptionAiConfig: iAutoTableAiConfig =
455
+ /*如果没有设置config.ai,则默认全部开启*/
456
+ option.config.ai == null ? { search: true, sort: true, config: true } :
457
+ /*设置为false则全部关闭*/
458
+ option.config.ai === false ? { search: false, sort: false, config: false } : {
459
+ /*只要不设置为false,就是默认开启*/
460
+
461
+ search: option.config.ai.search !== false,
462
+ sort: option.config.ai.sort !== false,
463
+ config: option.config.ai.config !== false,
464
+ ...option.config.ai,
465
+ };
466
+
467
+ const aiConfig: iAiConfiguration | undefined = autoOptionAiConfig.aiConfig || $configuration.get('aiConfig');
468
+
469
+ const ret = { methods, aiConfig };
470
+
471
+ if ((autoOptionAiConfig.search ||
472
+ autoOptionAiConfig.sort ||
473
+ autoOptionAiConfig.config)) {
474
+ if (!aiConfig) {
475
+ console.error("AutoTable lacks the AutoOption.aiConfig or the general configuration $configuration.aiConfig when the intelligent search/sorting/configuration is enabled.");
476
+ } else {
477
+ /**
478
+ * 渲染左侧操作栏时,渲染一个按钮用来打开AI对话框
479
+ * @author 韦胜健
480
+ * @date 2023.1.8 19:13
481
+ */
482
+ option.hooks.onRenderLeftOperation.use({
483
+ processor: ({ list, render }) => {list.push({ key: 'ai-chat-button', seq: 2, render });},
484
+ render: () => (
485
+ <>
486
+ <Tooltip message={i18n.$it('table.aiButton').d('AI对话')}><Button icon="ie-chat-ai-fill" onClick={methods.openChat}/></Tooltip>
487
+ {/*<Tooltip message="测试搜索"><Button icon="pi-bug" onClick={methods.testSearch}/></Tooltip>*/}
488
+ {/*<Tooltip message="测试搜索2"><Button icon="pi-bug" onClick={methods.testSearch2}/></Tooltip>*/}
489
+ {/*<Tooltip message="测试配置"><Button icon="pi-bug" onClick={methods.testSearch}/></Tooltip>*/}
490
+ {/*<Tooltip message="测试智能填充表单"><Button icon="pi-bug" onClick={methods.aiInsert}/></Tooltip>*/}
491
+ </>
492
+ ),
493
+ });
494
+ }
495
+ }
496
+
497
+ option.hooks.onBaseTableAttrs.use((attrs) => {
498
+ if (!!aiConfig) {
499
+ attrs.formEditorFootRender = (formData) => (
500
+ <Tooltip message={i18n.$it('ai.smartFilling').d('智能填写')}><Button style={{ order: 20 }} icon="ie-chat-ai-fill" onClick={() => methods.smartFilling(formData)}/></Tooltip>
501
+ );
502
+ }
503
+ });
504
+
505
+ return ret;
506
+ });
507
+
508
+ /**
509
+ * 字段描述提示词
510
+ * @author 韦胜健
511
+ * @date 2025/5/30 23:05
512
+ */
513
+ const getFieldsPrompt = (availableFields: iTableAiOperatePlcMeta[]) => `
514
+
515
+ 当前时间是:${createSimpleDate()["YYYY-MM-DD HH:mm:ss"]}
516
+ 我会以JSON数组的方式给你表格中支持操作的字段,这个数组中每一个元素的结构为字段类型结构,结构如下所示:{title, field, filterType, width, order, fixed, hide, align},以下为结构中的每个属性说明:
517
+
518
+ - title:字段的标题;
519
+ - field:字段的唯一标识;
520
+ - filterType:字段的筛选类型;
521
+ - width:字段的宽度;
522
+ - order:字段的顺序;
523
+ - fixed:字段的冻结方式,如果是左冻结/左固定,那么值为left;如果是右冻结/右固定,那么值为right,如果是不固定/不冻结则值为center
524
+ - hide:字段是否隐藏,为布尔值;
525
+ - align:字段的对齐方式,左对齐的话是left,居中对齐的话是center,右对齐的话是right;
526
+
527
+ # 表格字段数据
528
+
529
+ ${JSON.stringify(availableFields)}
530
+ `.trim();
531
+
532
+ /**
533
+ * 搜索提示词
534
+ * @author 韦胜健
535
+ * @date 2025/5/30 23:05
536
+ */
537
+ const getSearchPrompt = (availableFields: iTableAiOperatePlcMeta[]) => `
538
+ # 角色
539
+
540
+ 你是一名专业自然语言分析专家,需要你将用户的内容转化为结构化的数据筛选参数
541
+
542
+ ${getFieldsPrompt(availableFields)}
543
+
544
+ # 返回的数据类型
545
+
546
+ - 你要返回的数据结构类型为:{"filters":[],"filterExpression":""},
547
+ - 返回数据中的filters为数组,数组中的每个元素结构如下所示:{id,field,filterHandler,value},以下对元素结构中每个属性做解释:
548
+ - id: 唯一标识,需要你生成,按照 FF_1, FF_2, FF_3 的递增规则生成;
549
+ - field: 要搜索的字段的唯一标识;
550
+ - filterHandler: 搜索方式;
551
+ - 如果用户要求字段等于某个值,此时filterHandler为"eq";
552
+ - 如果用户要求字段约等于某个值,此时filterHandler为"like";
553
+ - 如果用户要求字段匹配多个值,当字段的filterType既不是text也不是number,那么返回的filterHandler为"in";否则filterHandler为"in_like";
554
+ - 如果用户要求字段不包含或者排除某些值,那么此时如果字段的filterType为(text或者number)的话filterHandler为"not_in_like",否则filterHandler为"not_in";;
555
+ - 如果用户要求字段值为空,则filterHandler为"is_null";
556
+ - 如果用户要求字段值不为空,则filterHandler为"is_not_null";
557
+ - 如果用户要求字段处于某个范围,比如大于或者小于某个日期,比如大于或者小于某个数字,那么此时filterHandler为"range";
558
+ - value: 搜索的值;
559
+ - 如果用户对这个字段的搜索只有一个值,那么value应该是一个字符串;
560
+ - 如果用户对这个字段的搜索包含多个值或者用了包含,不包含,排除之类的字眼,此时value应该是json数组;
561
+ - 如果用户对这个字段的要求是一个范围,比如大于某个值小于某个值等等,那么value应该是一个对象{start,end},start为开始时间或者最小值,end为结束时间或者最大值;
562
+ - 当字段要求是一个范围时,
563
+ - 如果这个字段的filterType为date,那么value为日期字符串,格式为YYYY-MM-DD;
564
+ - 如果这个字段的filterType为datetime,那么value为日期时间字符串,格式为YYYY-MM-DD HH:mm:ss;如果用户仅给出了日期没有给出时间,那么给一个默认的时间;如果是开始日期时间,这个时间的默认值为00:00:00;如果是结束日期时间,这个时间的默认值为23:59:59
565
+ - 返回数据中的data数据中的filterExpression为表达式,如果用户的搜索条件都是"并且"关系,那么filterHandler为空字符串;如果用户的搜索条件存在"或"关系,那么需要生成这个表达式字符串,表达式中用筛选条件的id来代替表达式;
566
+
567
+ # 样例说明
568
+
569
+ ## 样例一
570
+
571
+ 比如用户的描述为“查询(创建时间大于2025-05-30或者更新时间小于2025-05-31)并且订单状态为待支付”,那么你分析得到的结构化查询参数为:
572
+
573
+ {
574
+ "filterExpression":"(FF_1 or FF_2) and FF_3",
575
+ "filters":[
576
+ {"id":"FF_1","field":"createdAt","filterHandler":"range",value:{start:"2025-05-30", end:""}},
577
+ {"id":"FF_2","field":"updatedAt","filterHandler":"range",value:{start:"", end:"2025-05-31"}},
578
+ {"id":"FF_1","field":"orderStatus","filterHandler":"eq",value:"unpaid"},
579
+ ]
580
+ }
581
+
582
+ ## 样例二
583
+
584
+ 比如用户的描述为“查询用户名为zhangsan或者lisi”,由于用户名字段的filterType为text,此时复合text字段匹配多个值的情况,那么分析得到的结构化查询参数为:
585
+
586
+ {
587
+ "filters":[
588
+ {"id":"FF_1","field":"username","filterHandler":"in_like","value":["zhangsan","lisi"]},
589
+ ]
590
+ }
591
+
592
+ # 注意事项
593
+
594
+ - 你一定检查用户要求中的小括号,并且在在filterExpression中保留这个小括号,如果用户提供的是中文小括号,请转化为英文小括号
595
+ - 出现错误的情况下,请返回数据 {error:""},将错误信息放在error属性中;
596
+ - 如果用户要配置的字段不存在,则拒绝并且给出拒绝原因放在错误信息中;
597
+
598
+ `;
599
+
600
+ /**
601
+ * 排序提示词
602
+ * @author 韦胜健
603
+ * @date 2025/5/30 23:05
604
+ */
605
+ const getSortPrompt = (availableFields: iTableAiOperatePlcMeta[]) => `
606
+ # 角色
607
+
608
+ 你是一名专业自然语言分析专家,需要你将用户的内容转化为结构化的数据排序参数
609
+
610
+ ${getFieldsPrompt(availableFields)}
611
+
612
+ # 返回的数据类型
613
+
614
+ 你返回的数据data应该是一个数组,数组中每个元素结果如下所示:{field,desc,title},以下对元素结构中每个属性做解释:
615
+
616
+ - field:要搜索的字段的唯一标识;
617
+ - desc:如果降序或者从大到小,那么值为true;如果升序或者从小到大模大,那么值为false;
618
+ - title: 字段的标题;
619
+
620
+ # 样例
621
+
622
+ 比如用户要求先按照创建时间降序,再按照更新时间升序,你需要返回的数据为[{"field":"createdAt","desc":true,"title":"创建时间"},{"field":"updatedAt","desc":false,"title":"更新时间"}]
623
+ `.trim();
624
+
625
+ /**
626
+ * 字段配置提示词
627
+ * @author 韦胜健
628
+ * @date 2025/5/30 23:05
629
+ */
630
+ const getConfigPrompt = (availableFields: iTableAiOperatePlcMeta[]) => `
631
+ # 角色
632
+
633
+ 你是一名专业自然语言分析专家,需要你将用户的内容转化为结构化的字段配置参数
634
+
635
+ ${getFieldsPrompt(availableFields)}
636
+
637
+ # 返回的数据类型
638
+
639
+ 你返回的数据data为数组,每一个元素为字段类型结构;比如有一个字段,其标题为"商品名称",其字段标识为"prodName",如果用户要隐藏这个字段,那么返回的字段类型结构为 {field:"prodName", hide:true}
640
+ `.trim();